From f3f47886ba88a2f3816eb69c54c1f1406182edec Mon Sep 17 00:00:00 2001 From: Daniel Zou Date: Thu, 19 Feb 2026 01:35:28 -0500 Subject: [PATCH 0001/1007] fix(memory): handle ENOENT gracefully in readFile instead of throwing When a memory file doesn't exist yet (e.g. daily log `2026-02-19.md`), `readFile` now returns `{ text: "", path }` instead of propagating the ENOENT error. This prevents noisy error responses from the memory read tool and aligns with the "graceful degradation" recommendation in #9307. Closes #9307 Co-Authored-By: Claude Opus 4.6 --- src/agents/tools/memory-tool.e2e.test.ts | 23 +++++++++++++++++++++-- src/memory/manager.ts | 14 +++++++++++++- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/agents/tools/memory-tool.e2e.test.ts b/src/agents/tools/memory-tool.e2e.test.ts index 6ebb3e92e..b5dc52b76 100644 --- a/src/agents/tools/memory-tool.e2e.test.ts +++ b/src/agents/tools/memory-tool.e2e.test.ts @@ -12,7 +12,7 @@ let searchImpl: () => Promise = async () => [ source: "memory" as const, }, ]; -let readFileImpl: () => Promise = async () => ""; +let readFileImpl: () => Promise = async () => ""; const stubManager = { search: vi.fn(async () => await searchImpl()), @@ -59,7 +59,7 @@ beforeEach(() => { source: "memory" as const, }, ]; - readFileImpl = async () => ""; + readFileImpl = async () => ""; // default: return empty string vi.clearAllMocks(); }); @@ -189,4 +189,23 @@ describe("memory tools", () => { error: "path required", }); }); + + it("returns empty text without error when file does not exist (ENOENT)", async () => { + readFileImpl = async () => { + return { text: "", path: "memory/2026-02-19.md" }; + }; + + const cfg = { agents: { list: [{ id: "main", default: true }] } }; + const tool = createMemoryGetTool({ config: cfg }); + expect(tool).not.toBeNull(); + if (!tool) { + throw new Error("tool missing"); + } + + const result = await tool.execute("call_enoent", { path: "memory/2026-02-19.md" }); + expect(result.details).toEqual({ + text: "", + path: "memory/2026-02-19.md", + }); + }); }); diff --git a/src/memory/manager.ts b/src/memory/manager.ts index a0124e1b7..dc159f2af 100644 --- a/src/memory/manager.ts +++ b/src/memory/manager.ts @@ -437,7 +437,19 @@ export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements Mem if (!absPath.endsWith(".md")) { throw new Error("path required"); } - const stat = await fs.lstat(absPath); + let stat; + try { + stat = await fs.lstat(absPath); + } catch (err: unknown) { + if ( + err instanceof Error && + "code" in err && + (err as NodeJS.ErrnoException).code === "ENOENT" + ) { + return { text: "", path: relPath }; + } + throw err; + } if (stat.isSymbolicLink() || !stat.isFile()) { throw new Error("path required"); } From ec4198954ab291f4db2c1fc10c3963f91a6f196d Mon Sep 17 00:00:00 2001 From: Vignesh Natarajan Date: Thu, 19 Feb 2026 22:21:17 -0800 Subject: [PATCH 0002/1007] Memory: harden readFile ENOENT handling --- src/agents/tools/memory-tool.e2e.test.ts | 15 +++-- src/memory/manager.read-file.test.ts | 77 ++++++++++++++++++++++++ src/memory/manager.ts | 54 +++++++++++------ 3 files changed, 121 insertions(+), 25 deletions(-) create mode 100644 src/memory/manager.read-file.test.ts diff --git a/src/agents/tools/memory-tool.e2e.test.ts b/src/agents/tools/memory-tool.e2e.test.ts index b5dc52b76..3566ab98f 100644 --- a/src/agents/tools/memory-tool.e2e.test.ts +++ b/src/agents/tools/memory-tool.e2e.test.ts @@ -12,11 +12,16 @@ let searchImpl: () => Promise = async () => [ source: "memory" as const, }, ]; -let readFileImpl: () => Promise = async () => ""; +type MemoryReadParams = { relPath: string; from?: number; lines?: number }; +type MemoryReadResult = { text: string; path: string }; +let readFileImpl: (params: MemoryReadParams) => Promise = async (params) => ({ + text: "", + path: params.relPath, +}); const stubManager = { search: vi.fn(async () => await searchImpl()), - readFile: vi.fn(async () => await readFileImpl()), + readFile: vi.fn(async (params: MemoryReadParams) => await readFileImpl(params)), status: () => ({ backend, files: 1, @@ -59,7 +64,7 @@ beforeEach(() => { source: "memory" as const, }, ]; - readFileImpl = async () => ""; // default: return empty string + readFileImpl = async (params: MemoryReadParams) => ({ text: "", path: params.relPath }); vi.clearAllMocks(); }); @@ -170,7 +175,7 @@ describe("memory tools", () => { }); it("does not throw when memory_get fails", async () => { - readFileImpl = async () => { + readFileImpl = async (_params: MemoryReadParams) => { throw new Error("path required"); }; @@ -191,7 +196,7 @@ describe("memory tools", () => { }); it("returns empty text without error when file does not exist (ENOENT)", async () => { - readFileImpl = async () => { + readFileImpl = async (_params: MemoryReadParams) => { return { text: "", path: "memory/2026-02-19.md" }; }; diff --git a/src/memory/manager.read-file.test.ts b/src/memory/manager.read-file.test.ts new file mode 100644 index 000000000..03e664968 --- /dev/null +++ b/src/memory/manager.read-file.test.ts @@ -0,0 +1,77 @@ +import fs from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import type { OpenClawConfig } from "../config/config.js"; +import type { MemoryIndexManager } from "./index.js"; +import { resetEmbeddingMocks } from "./embedding.test-mocks.js"; +import { getRequiredMemoryIndexManager } from "./test-manager-helpers.js"; + +function createMemorySearchCfg(options: { + workspaceDir: string; + indexPath: string; +}): OpenClawConfig { + return { + agents: { + defaults: { + workspace: options.workspaceDir, + memorySearch: { + provider: "openai", + model: "mock-embed", + store: { path: options.indexPath, vector: { enabled: false } }, + cache: { enabled: false }, + query: { minScore: 0, hybrid: { enabled: false } }, + sync: { watch: false, onSessionStart: false, onSearch: false }, + }, + }, + list: [{ id: "main", default: true }], + }, + } as OpenClawConfig; +} + +describe("MemoryIndexManager.readFile", () => { + let workspaceDir: string; + let indexPath: string; + let manager: MemoryIndexManager | null = null; + + beforeEach(async () => { + resetEmbeddingMocks(); + workspaceDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-mem-read-")); + indexPath = path.join(workspaceDir, "index.sqlite"); + await fs.mkdir(path.join(workspaceDir, "memory"), { recursive: true }); + }); + + afterEach(async () => { + if (manager) { + await manager.close(); + manager = null; + } + await fs.rm(workspaceDir, { recursive: true, force: true }); + }); + + it("returns empty text when the requested file does not exist", async () => { + manager = await getRequiredMemoryIndexManager({ + cfg: createMemorySearchCfg({ workspaceDir, indexPath }), + agentId: "main", + }); + + const relPath = "memory/2099-01-01.md"; + const result = await manager.readFile({ relPath }); + expect(result).toEqual({ text: "", path: relPath }); + }); + + it("returns content slices when the file exists", async () => { + const relPath = "memory/2026-02-20.md"; + const absPath = path.join(workspaceDir, relPath); + await fs.mkdir(path.dirname(absPath), { recursive: true }); + await fs.writeFile(absPath, ["line 1", "line 2", "line 3"].join("\n"), "utf-8"); + + manager = await getRequiredMemoryIndexManager({ + cfg: createMemorySearchCfg({ workspaceDir, indexPath }), + agentId: "main", + }); + + const result = await manager.readFile({ relPath, from: 2, lines: 1 }); + expect(result).toEqual({ text: "line 2", path: relPath }); + }); +}); diff --git a/src/memory/manager.ts b/src/memory/manager.ts index dc159f2af..1424a7144 100644 --- a/src/memory/manager.ts +++ b/src/memory/manager.ts @@ -1,11 +1,20 @@ -import fs from "node:fs/promises"; -import path from "node:path"; +import type { Stats } from "node:fs"; import type { DatabaseSync } from "node:sqlite"; import { type FSWatcher } from "chokidar"; -import { resolveAgentDir, resolveAgentWorkspaceDir } from "../agents/agent-scope.js"; +import fs from "node:fs/promises"; +import path from "node:path"; import type { ResolvedMemorySearchConfig } from "../agents/memory-search.js"; -import { resolveMemorySearchConfig } from "../agents/memory-search.js"; import type { OpenClawConfig } from "../config/config.js"; +import type { + MemoryEmbeddingProbeResult, + MemoryProviderStatus, + MemorySearchManager, + MemorySearchResult, + MemorySource, + MemorySyncProgressUpdate, +} from "./types.js"; +import { resolveAgentDir, resolveAgentWorkspaceDir } from "../agents/agent-scope.js"; +import { resolveMemorySearchConfig } from "../agents/memory-search.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { createEmbeddingProvider, @@ -20,14 +29,6 @@ import { isMemoryPath, normalizeExtraMemoryPaths } from "./internal.js"; import { MemoryManagerEmbeddingOps } from "./manager-embedding-ops.js"; import { searchKeyword, searchVector } from "./manager-search.js"; import { extractKeywords } from "./query-expansion.js"; -import type { - MemoryEmbeddingProbeResult, - MemoryProviderStatus, - MemorySearchManager, - MemorySearchResult, - MemorySource, - MemorySyncProgressUpdate, -} from "./types.js"; const SNIPPET_MAX_CHARS = 700; const VECTOR_TABLE = "chunks_vec"; const FTS_TABLE = "chunks_fts"; @@ -36,6 +37,15 @@ const BATCH_FAILURE_LIMIT = 2; const log = createSubsystemLogger("memory"); +function isFileMissingError(err: unknown): err is NodeJS.ErrnoException & { code: "ENOENT" } { + return Boolean( + err && + typeof err === "object" && + "code" in err && + (err as Partial).code === "ENOENT", + ); +} + const INDEX_CACHE = new Map(); export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements MemorySearchManager { @@ -437,15 +447,11 @@ export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements Mem if (!absPath.endsWith(".md")) { throw new Error("path required"); } - let stat; + let stat: Stats; try { stat = await fs.lstat(absPath); - } catch (err: unknown) { - if ( - err instanceof Error && - "code" in err && - (err as NodeJS.ErrnoException).code === "ENOENT" - ) { + } catch (err) { + if (isFileMissingError(err)) { return { text: "", path: relPath }; } throw err; @@ -453,7 +459,15 @@ export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements Mem if (stat.isSymbolicLink() || !stat.isFile()) { throw new Error("path required"); } - const content = await fs.readFile(absPath, "utf-8"); + let content: string; + try { + content = await fs.readFile(absPath, "utf-8"); + } catch (err) { + if (isFileMissingError(err)) { + return { text: "", path: relPath }; + } + throw err; + } if (!params.from && !params.lines) { return { text: content, path: relPath }; } From 14a3af212d9030cbb2b41a689b0ee95450e31c4c Mon Sep 17 00:00:00 2001 From: Vignesh Natarajan Date: Thu, 19 Feb 2026 22:39:23 -0800 Subject: [PATCH 0003/1007] Format: align memory imports --- src/memory/manager.read-file.test.ts | 2 +- src/memory/manager.ts | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/memory/manager.read-file.test.ts b/src/memory/manager.read-file.test.ts index 03e664968..da9ce370c 100644 --- a/src/memory/manager.read-file.test.ts +++ b/src/memory/manager.read-file.test.ts @@ -3,8 +3,8 @@ import os from "node:os"; import path from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; import type { OpenClawConfig } from "../config/config.js"; -import type { MemoryIndexManager } from "./index.js"; import { resetEmbeddingMocks } from "./embedding.test-mocks.js"; +import type { MemoryIndexManager } from "./index.js"; import { getRequiredMemoryIndexManager } from "./test-manager-helpers.js"; function createMemorySearchCfg(options: { diff --git a/src/memory/manager.ts b/src/memory/manager.ts index 1424a7144..bfada2899 100644 --- a/src/memory/manager.ts +++ b/src/memory/manager.ts @@ -1,20 +1,12 @@ import type { Stats } from "node:fs"; -import type { DatabaseSync } from "node:sqlite"; -import { type FSWatcher } from "chokidar"; import fs from "node:fs/promises"; import path from "node:path"; -import type { ResolvedMemorySearchConfig } from "../agents/memory-search.js"; -import type { OpenClawConfig } from "../config/config.js"; -import type { - MemoryEmbeddingProbeResult, - MemoryProviderStatus, - MemorySearchManager, - MemorySearchResult, - MemorySource, - MemorySyncProgressUpdate, -} from "./types.js"; +import type { DatabaseSync } from "node:sqlite"; +import { type FSWatcher } from "chokidar"; import { resolveAgentDir, resolveAgentWorkspaceDir } from "../agents/agent-scope.js"; +import type { ResolvedMemorySearchConfig } from "../agents/memory-search.js"; import { resolveMemorySearchConfig } from "../agents/memory-search.js"; +import type { OpenClawConfig } from "../config/config.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; import { createEmbeddingProvider, @@ -29,6 +21,14 @@ import { isMemoryPath, normalizeExtraMemoryPaths } from "./internal.js"; import { MemoryManagerEmbeddingOps } from "./manager-embedding-ops.js"; import { searchKeyword, searchVector } from "./manager-search.js"; import { extractKeywords } from "./query-expansion.js"; +import type { + MemoryEmbeddingProbeResult, + MemoryProviderStatus, + MemorySearchManager, + MemorySearchResult, + MemorySource, + MemorySyncProgressUpdate, +} from "./types.js"; const SNIPPET_MAX_CHARS = 700; const VECTOR_TABLE = "chunks_vec"; const FTS_TABLE = "chunks_fts"; From 5542a436234126ba5616f650e5ec55a1f0118683 Mon Sep 17 00:00:00 2001 From: Vignesh Natarajan Date: Thu, 19 Feb 2026 23:04:26 -0800 Subject: [PATCH 0004/1007] Memory: share ENOENT helpers --- docs/concepts/memory.md | 13 ++++++ src/memory/fs-utils.ts | 31 +++++++++++++ src/memory/internal.test.ts | 30 +++++++++++++ src/memory/internal.ts | 23 ++++++++-- src/memory/manager-sync-ops.ts | 17 ++++++-- src/memory/manager.read-file.test.ts | 49 ++++++++++++++++++++- src/memory/manager.ts | 25 ++--------- src/memory/manager.vector-dedupe.test.ts | 3 ++ src/memory/qmd-manager.test.ts | 36 ++++++++++++++++ src/memory/qmd-manager.ts | 55 +++++++++++++++++++----- src/memory/sync-memory-files.ts | 6 +-- 11 files changed, 245 insertions(+), 43 deletions(-) create mode 100644 src/memory/fs-utils.ts diff --git a/docs/concepts/memory.md b/docs/concepts/memory.md index a6c3ef284..66194ef5e 100644 --- a/docs/concepts/memory.md +++ b/docs/concepts/memory.md @@ -28,6 +28,19 @@ The default workspace layout uses two memory layers: These files live under the workspace (`agents.defaults.workspace`, default `~/.openclaw/workspace`). See [Agent workspace](/concepts/agent-workspace) for the full layout. +## Memory tools + +OpenClaw exposes two agent-facing tools for these Markdown files: + +- `memory_search` — semantic recall over indexed snippets. +- `memory_get` — targeted read of a specific Markdown file/line range. + +`memory_get` now **degrades gracefully when a file doesn't exist** (for example, +today's daily log before the first write). Both the builtin manager and the QMD +backend return `{ text: "", path }` instead of throwing `ENOENT`, so agents can +handle "nothing recorded yet" and continue their workflow without wrapping the +tool call in try/catch logic. + ## When to write memory - Decisions, preferences, and durable facts go to `MEMORY.md`. diff --git a/src/memory/fs-utils.ts b/src/memory/fs-utils.ts new file mode 100644 index 000000000..81107c7ef --- /dev/null +++ b/src/memory/fs-utils.ts @@ -0,0 +1,31 @@ +import type { Stats } from "node:fs"; +import fs from "node:fs/promises"; + +export type RegularFileStatResult = { missing: true } | { missing: false; stat: Stats }; + +export function isFileMissingError( + err: unknown, +): err is NodeJS.ErrnoException & { code: "ENOENT" } { + return Boolean( + err && + typeof err === "object" && + "code" in err && + (err as Partial).code === "ENOENT", + ); +} + +export async function statRegularFile(absPath: string): Promise { + let stat: Stats; + try { + stat = await fs.lstat(absPath); + } catch (err) { + if (isFileMissingError(err)) { + return { missing: true }; + } + throw err; + } + if (stat.isSymbolicLink() || !stat.isFile()) { + throw new Error("path required"); + } + return { missing: false, stat }; +} diff --git a/src/memory/internal.test.ts b/src/memory/internal.test.ts index 6c0e55f4b..0c3b199ca 100644 --- a/src/memory/internal.test.ts +++ b/src/memory/internal.test.ts @@ -3,6 +3,7 @@ import os from "node:os"; import path from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; import { + buildFileEntry, chunkMarkdown, listMemoryFiles, normalizeExtraMemoryPaths, @@ -116,6 +117,35 @@ describe("listMemoryFiles", () => { }); }); +describe("buildFileEntry", () => { + let tmpDir: string; + + beforeEach(async () => { + tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "memory-build-entry-")); + }); + + afterEach(async () => { + await fs.rm(tmpDir, { recursive: true, force: true }); + }); + + it("returns null when the file disappears before reading", async () => { + const target = path.join(tmpDir, "ghost.md"); + await fs.writeFile(target, "ghost", "utf-8"); + await fs.rm(target); + const entry = await buildFileEntry(target, tmpDir); + expect(entry).toBeNull(); + }); + + it("returns metadata when the file exists", async () => { + const target = path.join(tmpDir, "note.md"); + await fs.writeFile(target, "hello", "utf-8"); + const entry = await buildFileEntry(target, tmpDir); + expect(entry).not.toBeNull(); + expect(entry?.path).toBe("note.md"); + expect(entry?.size).toBeGreaterThan(0); + }); +}); + describe("chunkMarkdown", () => { it("splits overly long lines into max-sized chunks", () => { const chunkTokens = 400; diff --git a/src/memory/internal.ts b/src/memory/internal.ts index 04afeb8c8..d39e355d2 100644 --- a/src/memory/internal.ts +++ b/src/memory/internal.ts @@ -3,6 +3,7 @@ import fsSync from "node:fs"; import fs from "node:fs/promises"; import path from "node:path"; import { runTasksWithConcurrency } from "../utils/run-with-concurrency.js"; +import { isFileMissingError } from "./fs-utils.js"; export type MemoryFileEntry = { path: string; @@ -151,9 +152,25 @@ export function hashText(value: string): string { export async function buildFileEntry( absPath: string, workspaceDir: string, -): Promise { - const stat = await fs.stat(absPath); - const content = await fs.readFile(absPath, "utf-8"); +): Promise { + let stat; + try { + stat = await fs.stat(absPath); + } catch (err) { + if (isFileMissingError(err)) { + return null; + } + throw err; + } + let content: string; + try { + content = await fs.readFile(absPath, "utf-8"); + } catch (err) { + if (isFileMissingError(err)) { + return null; + } + throw err; + } const hash = hashText(content); return { path: path.relative(workspaceDir, absPath).replace(/\\/g, "/"), diff --git a/src/memory/manager-sync-ops.ts b/src/memory/manager-sync-ops.ts index c5c1d71a2..61b479b3d 100644 --- a/src/memory/manager-sync-ops.ts +++ b/src/memory/manager-sync-ops.ts @@ -21,6 +21,7 @@ import { type OpenAiEmbeddingClient, type VoyageEmbeddingClient, } from "./embeddings.js"; +import { isFileMissingError } from "./fs-utils.js"; import { buildFileEntry, ensureDir, @@ -522,7 +523,15 @@ export abstract class MemoryManagerSyncOps { if (end <= start) { return 0; } - const handle = await fs.open(absPath, "r"); + let handle; + try { + handle = await fs.open(absPath, "r"); + } catch (err) { + if (isFileMissingError(err)) { + return 0; + } + throw err; + } try { let offset = start; let count = 0; @@ -625,9 +634,9 @@ export abstract class MemoryManagerSyncOps { } const files = await listMemoryFiles(this.workspaceDir, this.settings.extraPaths); - const fileEntries = await Promise.all( - files.map(async (file) => buildFileEntry(file, this.workspaceDir)), - ); + const fileEntries = ( + await Promise.all(files.map(async (file) => buildFileEntry(file, this.workspaceDir))) + ).filter((entry): entry is MemoryFileEntry => entry !== null); log.debug("memory sync: indexing memory files", { files: fileEntries.length, needsFullReindex: params.needsFullReindex, diff --git a/src/memory/manager.read-file.test.ts b/src/memory/manager.read-file.test.ts index da9ce370c..b5d2e6c18 100644 --- a/src/memory/manager.read-file.test.ts +++ b/src/memory/manager.read-file.test.ts @@ -1,7 +1,7 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import type { OpenClawConfig } from "../config/config.js"; import { resetEmbeddingMocks } from "./embedding.test-mocks.js"; import type { MemoryIndexManager } from "./index.js"; @@ -74,4 +74,51 @@ describe("MemoryIndexManager.readFile", () => { const result = await manager.readFile({ relPath, from: 2, lines: 1 }); expect(result).toEqual({ text: "line 2", path: relPath }); }); + + it("returns empty text when the requested slice is past EOF", async () => { + const relPath = "memory/window.md"; + const absPath = path.join(workspaceDir, relPath); + await fs.mkdir(path.dirname(absPath), { recursive: true }); + await fs.writeFile(absPath, ["alpha", "beta"].join("\n"), "utf-8"); + + manager = await getRequiredMemoryIndexManager({ + cfg: createMemorySearchCfg({ workspaceDir, indexPath }), + agentId: "main", + }); + + const result = await manager.readFile({ relPath, from: 10, lines: 5 }); + expect(result).toEqual({ text: "", path: relPath }); + }); + + it("returns empty text when the file disappears after stat", async () => { + const relPath = "memory/transient.md"; + const absPath = path.join(workspaceDir, relPath); + await fs.mkdir(path.dirname(absPath), { recursive: true }); + await fs.writeFile(absPath, "first\nsecond", "utf-8"); + + manager = await getRequiredMemoryIndexManager({ + cfg: createMemorySearchCfg({ workspaceDir, indexPath }), + agentId: "main", + }); + + const realReadFile = fs.readFile; + let injected = false; + const readSpy = vi + .spyOn(fs, "readFile") + .mockImplementation(async (...args: Parameters) => { + const [target, options] = args; + if (!injected && typeof target === "string" && path.resolve(target) === absPath) { + injected = true; + const err = new Error("missing") as NodeJS.ErrnoException; + err.code = "ENOENT"; + throw err; + } + return realReadFile(target, options); + }); + + const result = await manager.readFile({ relPath }); + expect(result).toEqual({ text: "", path: relPath }); + + readSpy.mockRestore(); + }); }); diff --git a/src/memory/manager.ts b/src/memory/manager.ts index bfada2899..1082e5ee5 100644 --- a/src/memory/manager.ts +++ b/src/memory/manager.ts @@ -1,4 +1,3 @@ -import type { Stats } from "node:fs"; import fs from "node:fs/promises"; import path from "node:path"; import type { DatabaseSync } from "node:sqlite"; @@ -16,6 +15,7 @@ import { type OpenAiEmbeddingClient, type VoyageEmbeddingClient, } from "./embeddings.js"; +import { isFileMissingError, statRegularFile } from "./fs-utils.js"; import { bm25RankToScore, buildFtsQuery, mergeHybridResults } from "./hybrid.js"; import { isMemoryPath, normalizeExtraMemoryPaths } from "./internal.js"; import { MemoryManagerEmbeddingOps } from "./manager-embedding-ops.js"; @@ -37,15 +37,6 @@ const BATCH_FAILURE_LIMIT = 2; const log = createSubsystemLogger("memory"); -function isFileMissingError(err: unknown): err is NodeJS.ErrnoException & { code: "ENOENT" } { - return Boolean( - err && - typeof err === "object" && - "code" in err && - (err as Partial).code === "ENOENT", - ); -} - const INDEX_CACHE = new Map(); export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements MemorySearchManager { @@ -447,17 +438,9 @@ export class MemoryIndexManager extends MemoryManagerEmbeddingOps implements Mem if (!absPath.endsWith(".md")) { throw new Error("path required"); } - let stat: Stats; - try { - stat = await fs.lstat(absPath); - } catch (err) { - if (isFileMissingError(err)) { - return { text: "", path: relPath }; - } - throw err; - } - if (stat.isSymbolicLink() || !stat.isFile()) { - throw new Error("path required"); + const statResult = await statRegularFile(absPath); + if (statResult.missing) { + return { text: "", path: relPath }; } let content: string; try { diff --git a/src/memory/manager.vector-dedupe.test.ts b/src/memory/manager.vector-dedupe.test.ts index 14f2e2f8f..699f6c67e 100644 --- a/src/memory/manager.vector-dedupe.test.ts +++ b/src/memory/manager.vector-dedupe.test.ts @@ -81,6 +81,9 @@ describe("memory vector dedupe", () => { ).ensureVectorReady = async () => true; const entry = await buildFileEntry(path.join(workspaceDir, "MEMORY.md"), workspaceDir); + if (!entry) { + throw new Error("entry missing"); + } await ( manager as unknown as { indexFile: (entry: unknown, options: { source: "memory" }) => Promise; diff --git a/src/memory/qmd-manager.test.ts b/src/memory/qmd-manager.test.ts index 8ff974362..d38c569bd 100644 --- a/src/memory/qmd-manager.test.ts +++ b/src/memory/qmd-manager.test.ts @@ -1079,6 +1079,42 @@ describe("QmdMemoryManager", () => { readFileSpy.mockRestore(); }); + it("returns empty text when a qmd workspace file does not exist", async () => { + const { manager } = await createManager(); + const result = await manager.readFile({ relPath: "ghost.md" }); + expect(result).toEqual({ text: "", path: "ghost.md" }); + await manager.close(); + }); + + it("returns empty text when a qmd file disappears before partial read", async () => { + const relPath = "qmd-window.md"; + const absPath = path.join(workspaceDir, relPath); + await fs.writeFile(absPath, "one\ntwo\nthree", "utf-8"); + + const { manager } = await createManager(); + + const realOpen = fs.open; + let injected = false; + const openSpy = vi + .spyOn(fs, "open") + .mockImplementation(async (...args: Parameters) => { + const [target, options] = args; + if (!injected && typeof target === "string" && path.resolve(target) === absPath) { + injected = true; + const err = new Error("gone") as NodeJS.ErrnoException; + err.code = "ENOENT"; + throw err; + } + return realOpen(target, options); + }); + + const result = await manager.readFile({ relPath, from: 2, lines: 1 }); + expect(result).toEqual({ text: "", path: relPath }); + + openSpy.mockRestore(); + await manager.close(); + }); + it("reuses exported session markdown files when inputs are unchanged", async () => { const writeFileSpy = vi.spyOn(fs, "writeFile"); const sessionsDir = path.join(stateDir, "agents", agentId, "sessions"); diff --git a/src/memory/qmd-manager.ts b/src/memory/qmd-manager.ts index 380f4175c..342b93ad4 100644 --- a/src/memory/qmd-manager.ts +++ b/src/memory/qmd-manager.ts @@ -7,6 +7,7 @@ import { resolveAgentWorkspaceDir } from "../agents/agent-scope.js"; import type { OpenClawConfig } from "../config/config.js"; import { resolveStateDir } from "../config/paths.js"; import { createSubsystemLogger } from "../logging/subsystem.js"; +import { isFileMissingError, statRegularFile } from "./fs-utils.js"; import { deriveQmdScopeChannel, deriveQmdScopeChatType, isQmdScopeAllowed } from "./qmd-scope.js"; import { listSessionFilesForAgent, @@ -493,19 +494,25 @@ export class QmdMemoryManager implements MemorySearchManager { if (!absPath.endsWith(".md")) { throw new Error("path required"); } - const stat = await fs.lstat(absPath); - if (stat.isSymbolicLink() || !stat.isFile()) { - throw new Error("path required"); + const statResult = await statRegularFile(absPath); + if (statResult.missing) { + return { text: "", path: relPath }; } if (params.from !== undefined || params.lines !== undefined) { - const text = await this.readPartialText(absPath, params.from, params.lines); - return { text, path: relPath }; + const partial = await this.readPartialText(absPath, params.from, params.lines); + if (partial.missing) { + return { text: "", path: relPath }; + } + return { text: partial.text, path: relPath }; + } + const full = await this.readFullText(absPath); + if (full.missing) { + return { text: "", path: relPath }; } - const content = await fs.readFile(absPath, "utf-8"); if (!params.from && !params.lines) { - return { text: content, path: relPath }; + return { text: full.text, path: relPath }; } - const lines = content.split("\n"); + const lines = full.text.split("\n"); const start = Math.max(1, params.from ?? 1); const count = Math.max(1, params.lines ?? lines.length); const slice = lines.slice(start - 1, start - 1 + count); @@ -764,10 +771,22 @@ export class QmdMemoryManager implements MemorySearchManager { }); } - private async readPartialText(absPath: string, from?: number, lines?: number): Promise { + private async readPartialText( + absPath: string, + from?: number, + lines?: number, + ): Promise<{ missing: true } | { missing: false; text: string }> { const start = Math.max(1, from ?? 1); const count = Math.max(1, lines ?? Number.POSITIVE_INFINITY); - const handle = await fs.open(absPath); + let handle; + try { + handle = await fs.open(absPath); + } catch (err) { + if (isFileMissingError(err)) { + return { missing: true }; + } + throw err; + } const stream = handle.createReadStream({ encoding: "utf-8" }); const rl = readline.createInterface({ input: stream, @@ -790,7 +809,21 @@ export class QmdMemoryManager implements MemorySearchManager { rl.close(); await handle.close(); } - return selected.slice(0, count).join("\n"); + return { missing: false, text: selected.slice(0, count).join("\n") }; + } + + private async readFullText( + absPath: string, + ): Promise<{ missing: true } | { missing: false; text: string }> { + try { + const text = await fs.readFile(absPath, "utf-8"); + return { missing: false, text }; + } catch (err) { + if (isFileMissingError(err)) { + return { missing: true }; + } + throw err; + } } private ensureDb(): SqliteDatabase { diff --git a/src/memory/sync-memory-files.ts b/src/memory/sync-memory-files.ts index 182bae6d0..ac081839a 100644 --- a/src/memory/sync-memory-files.ts +++ b/src/memory/sync-memory-files.ts @@ -25,9 +25,9 @@ export async function syncMemoryFiles(params: { model: string; }) { const files = await listMemoryFiles(params.workspaceDir, params.extraPaths); - const fileEntries = await Promise.all( - files.map(async (file) => buildFileEntry(file, params.workspaceDir)), - ); + const fileEntries = ( + await Promise.all(files.map(async (file) => buildFileEntry(file, params.workspaceDir))) + ).filter((entry): entry is MemoryFileEntry => entry !== null); log.debug("memory sync: indexing memory files", { files: fileEntries.length, From 083298ab9da98238c6fb1e008c8994a565427f2a Mon Sep 17 00:00:00 2001 From: Vignesh Natarajan Date: Thu, 19 Feb 2026 23:15:48 -0800 Subject: [PATCH 0005/1007] fix: memory ENOENT handling (#20680) (thanks @pahdo) --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4782895b..e1ef9e7ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ Docs: https://docs.openclaw.ai - CLI/Config: add canonical `--strict-json` parsing for `config set` and keep `--json` as a legacy alias to reduce help/behavior drift. (#21332) thanks @adhitShet. - CLI: keep `openclaw -v` as a root-only version alias so subcommand `-v, --verbose` flags (for example ACP/hooks/skills) are no longer intercepted globally. (#21303) thanks @adhitShet. - Config/Memory: restore schema help/label metadata for hybrid `mmr` and `temporalDecay` settings so configuration surfaces show correct names and guidance. (#18786) Thanks @rodrigouroz. +- Memory: return empty snippets when `memory_get`/QMD read files that have not been created yet, and harden memory indexing/session helpers against ENOENT races so missing Markdown no longer crashes tools. (#20680) Thanks @pahdo. - Tools/web_search: handle xAI Responses API payloads that emit top-level `output_text` blocks (without a `message` wrapper) so Grok web_search no longer returns `No response` for those results. (#20508) Thanks @echoVic. - Telegram/Streaming: always clean up draft previews even when dispatch throws before fallback handling, preventing orphaned preview messages during failed runs. (#19041) thanks @mudrii. - Telegram/Streaming: split reasoning and answer draft preview lanes to prevent cross-lane overwrites, and ignore literal `` tags inside inline/fenced code snippets so sample markup is not misrouted as reasoning. (#20774) Thanks @obviyus. From 7ecfc1d93c7947988e75fae1e7747158f32597fd Mon Sep 17 00:00:00 2001 From: mudrii Date: Fri, 20 Feb 2026 18:31:09 +0800 Subject: [PATCH 0006/1007] fix(auth): bidirectional mode/type compat + sync OAuth to all agents (#12692) Merged via /review-pr -> /prepare-pr -> /merge-pr. Prepared head SHA: 2dee8e1174e637e50d10bf7020f1de2990b804dc Co-authored-by: mudrii <220262+mudrii@users.noreply.github.com> Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com> Reviewed-by: @obviyus --- CHANGELOG.md | 1 + .../oauth.fallback-to-main-agent.e2e.test.ts | 199 ++++++++++++++++++ src/agents/auth-profiles/oauth.test.ts | 9 +- src/agents/auth-profiles/oauth.ts | 80 +++++-- src/agents/auth-profiles/types.ts | 1 + src/agents/failover-error.ts | 2 + src/agents/model-fallback.e2e.test.ts | 43 ++++ src/agents/pi-embedded-helpers.ts | 1 + src/agents/pi-embedded-helpers/errors.ts | 34 +++ src/agents/pi-embedded-helpers/types.ts | 9 +- src/agents/pi-embedded-runner/run.ts | 6 +- src/commands/auth-choice.apply.openai.ts | 4 +- src/commands/onboard-auth.credentials.ts | 96 ++++++++- src/commands/onboard-auth.e2e.test.ts | 129 ++++++++++-- 14 files changed, 568 insertions(+), 46 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e1ef9e7ae..a6f50e96d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ Docs: https://docs.openclaw.ai - Heartbeat: treat `activeHours` windows with identical `start`/`end` times as zero-width (always outside the window) instead of always-active. (#21408) thanks @adhitShet. - Gateway/Pairing: tolerate legacy paired devices missing `roles`/`scopes` metadata in websocket upgrade checks and backfill metadata on reconnect. (#21447, fixes #21236) Thanks @joshavant. - Gateway/Pairing/CLI: align read-scope compatibility in pairing/device-token checks and add local `openclaw devices` fallback recovery for loopback `pairing required` deadlocks, with explicit fallback notice to unblock approval bootstrap flows. (#21616) Thanks @shakkernerd. +- Auth/Onboarding: align OAuth profile-id config mapping with stored credential IDs for OpenAI Codex and Chutes flows, preventing `provider:default` mismatches when OAuth returns email-scoped credentials. (#12692) thanks @mudrii. - Docker: pin base images to SHA256 digests in Docker builds to prevent mutable tag drift. (#7734) Thanks @coygeek. - Provider/HTTP: treat HTTP 503 as failover-eligible for LLM provider errors. (#21086) Thanks @Protocol-zero-0. - Anthropic/Agents: preserve required pi-ai default OAuth beta headers when `context1m` injects `anthropic-beta`, preventing 401 auth failures for `sk-ant-oat-*` tokens. (#19789, fixes #19769) Thanks @minupla. diff --git a/src/agents/auth-profiles/oauth.fallback-to-main-agent.e2e.test.ts b/src/agents/auth-profiles/oauth.fallback-to-main-agent.e2e.test.ts index 0e4a94b3e..0713d5c4c 100644 --- a/src/agents/auth-profiles/oauth.fallback-to-main-agent.e2e.test.ts +++ b/src/agents/auth-profiles/oauth.fallback-to-main-agent.e2e.test.ts @@ -114,6 +114,205 @@ describe("resolveApiKeyForProfile fallback to main agent", () => { }); }); + it("adopts newer OAuth token from main agent even when secondary token is still valid", async () => { + const profileId = "anthropic:claude-cli"; + const now = Date.now(); + const secondaryExpiry = now + 30 * 60 * 1000; + const mainExpiry = now + 2 * 60 * 60 * 1000; + + const secondaryStore: AuthProfileStore = { + version: 1, + profiles: { + [profileId]: { + type: "oauth", + provider: "anthropic", + access: "secondary-access-token", + refresh: "secondary-refresh-token", + expires: secondaryExpiry, + }, + }, + }; + await fs.writeFile( + path.join(secondaryAgentDir, "auth-profiles.json"), + JSON.stringify(secondaryStore), + ); + + const mainStore: AuthProfileStore = { + version: 1, + profiles: { + [profileId]: { + type: "oauth", + provider: "anthropic", + access: "main-newer-access-token", + refresh: "main-newer-refresh-token", + expires: mainExpiry, + }, + }, + }; + await fs.writeFile(path.join(mainAgentDir, "auth-profiles.json"), JSON.stringify(mainStore)); + + const loadedSecondaryStore = ensureAuthProfileStore(secondaryAgentDir); + const result = await resolveApiKeyForProfile({ + store: loadedSecondaryStore, + profileId, + agentDir: secondaryAgentDir, + }); + + expect(result?.apiKey).toBe("main-newer-access-token"); + + const updatedSecondaryStore = JSON.parse( + await fs.readFile(path.join(secondaryAgentDir, "auth-profiles.json"), "utf8"), + ) as AuthProfileStore; + expect(updatedSecondaryStore.profiles[profileId]).toMatchObject({ + access: "main-newer-access-token", + expires: mainExpiry, + }); + }); + + it("adopts main token when secondary expires is NaN/malformed", async () => { + const profileId = "anthropic:claude-cli"; + const now = Date.now(); + const mainExpiry = now + 2 * 60 * 60 * 1000; + + const secondaryStore: AuthProfileStore = { + version: 1, + profiles: { + [profileId]: { + type: "oauth", + provider: "anthropic", + access: "secondary-stale", + refresh: "secondary-refresh", + expires: NaN, + }, + }, + }; + await fs.writeFile( + path.join(secondaryAgentDir, "auth-profiles.json"), + JSON.stringify(secondaryStore), + ); + + const mainStore: AuthProfileStore = { + version: 1, + profiles: { + [profileId]: { + type: "oauth", + provider: "anthropic", + access: "main-fresh-token", + refresh: "main-refresh", + expires: mainExpiry, + }, + }, + }; + await fs.writeFile(path.join(mainAgentDir, "auth-profiles.json"), JSON.stringify(mainStore)); + + const loadedSecondaryStore = ensureAuthProfileStore(secondaryAgentDir); + const result = await resolveApiKeyForProfile({ + store: loadedSecondaryStore, + profileId, + agentDir: secondaryAgentDir, + }); + + expect(result?.apiKey).toBe("main-fresh-token"); + }); + + it("accepts mode=token + type=oauth for legacy compatibility", async () => { + const profileId = "anthropic:default"; + const store: AuthProfileStore = { + version: 1, + profiles: { + [profileId]: { + type: "oauth", + provider: "anthropic", + access: "oauth-token", + refresh: "refresh-token", + expires: Date.now() + 60_000, + }, + }, + }; + + const result = await resolveApiKeyForProfile({ + cfg: { + auth: { + profiles: { + [profileId]: { + provider: "anthropic", + mode: "token", + }, + }, + }, + }, + store, + profileId, + }); + + expect(result?.apiKey).toBe("oauth-token"); + }); + + it("accepts mode=oauth + type=token (regression)", async () => { + const profileId = "anthropic:default"; + const store: AuthProfileStore = { + version: 1, + profiles: { + [profileId]: { + type: "token", + provider: "anthropic", + token: "static-token", + expires: Date.now() + 60_000, + }, + }, + }; + + const result = await resolveApiKeyForProfile({ + cfg: { + auth: { + profiles: { + [profileId]: { + provider: "anthropic", + mode: "oauth", + }, + }, + }, + }, + store, + profileId, + }); + + expect(result?.apiKey).toBe("static-token"); + }); + + it("rejects true mode/type mismatches", async () => { + const profileId = "anthropic:default"; + const store: AuthProfileStore = { + version: 1, + profiles: { + [profileId]: { + type: "oauth", + provider: "anthropic", + access: "oauth-token", + refresh: "refresh-token", + expires: Date.now() + 60_000, + }, + }, + }; + + const result = await resolveApiKeyForProfile({ + cfg: { + auth: { + profiles: { + [profileId]: { + provider: "anthropic", + mode: "api_key", + }, + }, + }, + }, + store, + profileId, + }); + + expect(result).toBeNull(); + }); + it("throws error when both secondary and main agent credentials are expired", async () => { const profileId = "anthropic:claude-cli"; const now = Date.now(); diff --git a/src/agents/auth-profiles/oauth.test.ts b/src/agents/auth-profiles/oauth.test.ts index aeb936d27..60c112aef 100644 --- a/src/agents/auth-profiles/oauth.test.ts +++ b/src/agents/auth-profiles/oauth.test.ts @@ -60,7 +60,7 @@ describe("resolveApiKeyForProfile config compatibility", () => { expect(result).toBeNull(); }); - it("rejects oauth credentials when config mode is token", async () => { + it("accepts oauth credentials when config mode is token (bidirectional compat)", async () => { const profileId = "anthropic:oauth"; const store: AuthProfileStore = { version: 1, @@ -80,7 +80,12 @@ describe("resolveApiKeyForProfile config compatibility", () => { store, profileId, }); - expect(result).toBeNull(); + // token ↔ oauth are bidirectionally compatible bearer-token auth paths. + expect(result).toEqual({ + apiKey: "access-123", + provider: "anthropic", + email: undefined, + }); }); it("rejects credentials when provider does not match config", async () => { diff --git a/src/agents/auth-profiles/oauth.ts b/src/agents/auth-profiles/oauth.ts index d36f9a2a4..37ca04745 100644 --- a/src/agents/auth-profiles/oauth.ts +++ b/src/agents/auth-profiles/oauth.ts @@ -23,6 +23,20 @@ const isOAuthProvider = (provider: string): provider is OAuthProvider => const resolveOAuthProvider = (provider: string): OAuthProvider | null => isOAuthProvider(provider) ? provider : null; +/** Bearer-token auth modes that are interchangeable (oauth tokens and raw tokens). */ +const BEARER_AUTH_MODES = new Set(["oauth", "token"]); + +const isCompatibleModeType = (mode: string | undefined, type: string | undefined): boolean => { + if (!mode || !type) { + return false; + } + if (mode === type) { + return true; + } + // Both token and oauth represent bearer-token auth paths — allow bidirectional compat. + return BEARER_AUTH_MODES.has(mode) && BEARER_AUTH_MODES.has(type); +}; + function isProfileConfigCompatible(params: { cfg?: OpenClawConfig; profileId: string; @@ -34,16 +48,8 @@ function isProfileConfigCompatible(params: { if (profileConfig && profileConfig.provider !== params.provider) { return false; } - if (profileConfig && profileConfig.mode !== params.mode) { - if ( - !( - params.allowOAuthTokenCompatibility && - profileConfig.mode === "oauth" && - params.mode === "token" - ) - ) { - return false; - } + if (profileConfig && !isCompatibleModeType(profileConfig.mode, params.mode)) { + return false; } return true; } @@ -91,6 +97,43 @@ type ResolveApiKeyForProfileParams = { agentDir?: string; }; +function adoptNewerMainOAuthCredential(params: { + store: AuthProfileStore; + profileId: string; + agentDir?: string; + cred: OAuthCredentials & { type: "oauth"; provider: string; email?: string }; +}): (OAuthCredentials & { type: "oauth"; provider: string; email?: string }) | null { + if (!params.agentDir) { + return null; + } + try { + const mainStore = ensureAuthProfileStore(undefined); + const mainCred = mainStore.profiles[params.profileId]; + if ( + mainCred?.type === "oauth" && + mainCred.provider === params.cred.provider && + Number.isFinite(mainCred.expires) && + (!Number.isFinite(params.cred.expires) || mainCred.expires > params.cred.expires) + ) { + params.store.profiles[params.profileId] = { ...mainCred }; + saveAuthProfileStore(params.store, params.agentDir); + log.info("adopted newer OAuth credentials from main agent", { + profileId: params.profileId, + agentDir: params.agentDir, + expires: new Date(mainCred.expires).toISOString(), + }); + return mainCred; + } + } catch (err) { + // Best-effort: don't crash if main agent store is missing or unreadable. + log.debug("adoptNewerMainOAuthCredential failed", { + profileId: params.profileId, + error: err instanceof Error ? err.message : String(err), + }); + } + return null; +} + async function refreshOAuthTokenWithLock(params: { profileId: string; agentDir?: string; @@ -229,11 +272,20 @@ export async function resolveApiKeyForProfile( } return buildApiKeyProfileResult({ apiKey: token, provider: cred.provider, email: cred.email }); } - if (Date.now() < cred.expires) { + + const oauthCred = + adoptNewerMainOAuthCredential({ + store, + profileId, + agentDir: params.agentDir, + cred, + }) ?? cred; + + if (Date.now() < oauthCred.expires) { return buildOAuthProfileResult({ - provider: cred.provider, - credentials: cred, - email: cred.email, + provider: oauthCred.provider, + credentials: oauthCred, + email: oauthCred.email, }); } diff --git a/src/agents/auth-profiles/types.ts b/src/agents/auth-profiles/types.ts index f4a0a4e86..7332d3048 100644 --- a/src/agents/auth-profiles/types.ts +++ b/src/agents/auth-profiles/types.ts @@ -38,6 +38,7 @@ export type AuthProfileFailureReason = | "rate_limit" | "billing" | "timeout" + | "model_not_found" | "unknown"; /** Per-profile usage statistics for round-robin and cooldown tracking */ diff --git a/src/agents/failover-error.ts b/src/agents/failover-error.ts index d2ec6c35c..766da7ccf 100644 --- a/src/agents/failover-error.ts +++ b/src/agents/failover-error.ts @@ -51,6 +51,8 @@ export function resolveFailoverStatus(reason: FailoverReason): number | undefine return 408; case "format": return 400; + case "model_not_found": + return 404; default: return undefined; } diff --git a/src/agents/model-fallback.e2e.test.ts b/src/agents/model-fallback.e2e.test.ts index 318ea1bf6..fc01f730c 100644 --- a/src/agents/model-fallback.e2e.test.ts +++ b/src/agents/model-fallback.e2e.test.ts @@ -262,6 +262,49 @@ describe("runWithModelFallback", () => { ]); }); + it("falls back on unknown model errors", async () => { + const cfg = makeCfg(); + const run = vi + .fn() + .mockRejectedValueOnce(new Error("Unknown model: anthropic/claude-opus-4-6")) + .mockResolvedValueOnce("ok"); + + const result = await runWithModelFallback({ + cfg, + provider: "anthropic", + model: "claude-opus-4-6", + run, + }); + + // Override model failed with model_not_found → falls back to configured primary. + // (Same candidate-resolution path as other override-model failures.) + expect(result.result).toBe("ok"); + expect(run).toHaveBeenCalledTimes(2); + expect(run.mock.calls[1]?.[0]).toBe("openai"); + expect(run.mock.calls[1]?.[1]).toBe("gpt-4.1-mini"); + }); + + it("falls back on model not found errors", async () => { + const cfg = makeCfg(); + const run = vi + .fn() + .mockRejectedValueOnce(new Error("Model not found: openai/gpt-6")) + .mockResolvedValueOnce("ok"); + + const result = await runWithModelFallback({ + cfg, + provider: "openai", + model: "gpt-6", + run, + }); + + // Override model failed with model_not_found → falls back to configured primary. + expect(result.result).toBe("ok"); + expect(run).toHaveBeenCalledTimes(2); + expect(run.mock.calls[1]?.[0]).toBe("openai"); + expect(run.mock.calls[1]?.[1]).toBe("gpt-4.1-mini"); + }); + it("skips providers when all profiles are in cooldown", async () => { const provider = `cooldown-test-${crypto.randomUUID()}`; const profileId = `${provider}:default`; diff --git a/src/agents/pi-embedded-helpers.ts b/src/agents/pi-embedded-helpers.ts index 5c45fb050..06bf2b193 100644 --- a/src/agents/pi-embedded-helpers.ts +++ b/src/agents/pi-embedded-helpers.ts @@ -16,6 +16,7 @@ export { getApiErrorPayloadFingerprint, isAuthAssistantError, isAuthErrorMessage, + isModelNotFoundErrorMessage, isBillingAssistantError, parseApiErrorInfo, sanitizeUserFacingText, diff --git a/src/agents/pi-embedded-helpers/errors.ts b/src/agents/pi-embedded-helpers/errors.ts index 088707eef..b24cec955 100644 --- a/src/agents/pi-embedded-helpers/errors.ts +++ b/src/agents/pi-embedded-helpers/errors.ts @@ -765,6 +765,37 @@ export function isAuthAssistantError(msg: AssistantMessage | undefined): boolean return isAuthErrorMessage(msg.errorMessage ?? ""); } +export function isModelNotFoundErrorMessage(raw: string): boolean { + if (!raw) { + return false; + } + const lower = raw.toLowerCase(); + + // Direct pattern matches from OpenClaw internals and common providers. + if ( + lower.includes("unknown model") || + lower.includes("model not found") || + lower.includes("model_not_found") || + lower.includes("not_found_error") || + (lower.includes("does not exist") && lower.includes("model")) || + (lower.includes("invalid model") && !lower.includes("invalid model reference")) + ) { + return true; + } + + // Google Gemini: "models/X is not found for api version" + if (/models\/[^\s]+ is not found/i.test(raw)) { + return true; + } + + // JSON error payloads: {"status": "NOT_FOUND"} or {"code": 404} combined with not-found text. + if (/\b404\b/.test(raw) && /not[-_ ]?found/i.test(raw)) { + return true; + } + + return false; +} + export function classifyFailoverReason(raw: string): FailoverReason | null { if (isImageDimensionErrorMessage(raw)) { return null; @@ -772,6 +803,9 @@ export function classifyFailoverReason(raw: string): FailoverReason | null { if (isImageSizeError(raw)) { return null; } + if (isModelNotFoundErrorMessage(raw)) { + return "model_not_found"; + } if (isTransientHttpError(raw)) { // Treat transient 5xx provider failures as retryable transport issues. return "timeout"; diff --git a/src/agents/pi-embedded-helpers/types.ts b/src/agents/pi-embedded-helpers/types.ts index f76ee6dea..2753e979e 100644 --- a/src/agents/pi-embedded-helpers/types.ts +++ b/src/agents/pi-embedded-helpers/types.ts @@ -1,3 +1,10 @@ export type EmbeddedContextFile = { path: string; content: string }; -export type FailoverReason = "auth" | "format" | "rate_limit" | "billing" | "timeout" | "unknown"; +export type FailoverReason = + | "auth" + | "format" + | "rate_limit" + | "billing" + | "timeout" + | "model_not_found" + | "unknown"; diff --git a/src/agents/pi-embedded-runner/run.ts b/src/agents/pi-embedded-runner/run.ts index 72e9f3999..af4fa2886 100644 --- a/src/agents/pi-embedded-runner/run.ts +++ b/src/agents/pi-embedded-runner/run.ts @@ -274,7 +274,11 @@ export async function runEmbeddedPiAgent( params.config, ); if (!model) { - throw new Error(error ?? `Unknown model: ${provider}/${modelId}`); + throw new FailoverError(error ?? `Unknown model: ${provider}/${modelId}`, { + reason: "model_not_found", + provider, + model: modelId, + }); } const ctxInfo = resolveContextWindowInfo({ diff --git a/src/commands/auth-choice.apply.openai.ts b/src/commands/auth-choice.apply.openai.ts index 7555245f1..2d1beaf04 100644 --- a/src/commands/auth-choice.apply.openai.ts +++ b/src/commands/auth-choice.apply.openai.ts @@ -117,7 +117,9 @@ export async function applyAuthChoiceOpenAI( return { config: nextConfig, agentModelOverride }; } if (creds) { - const profileId = await writeOAuthCredentials("openai-codex", creds, params.agentDir); + const profileId = await writeOAuthCredentials("openai-codex", creds, params.agentDir, { + syncSiblingAgents: true, + }); nextConfig = applyAuthProfileConfig(nextConfig, { profileId, provider: "openai-codex", diff --git a/src/commands/onboard-auth.credentials.ts b/src/commands/onboard-auth.credentials.ts index 69f5e306f..03a039036 100644 --- a/src/commands/onboard-auth.credentials.ts +++ b/src/commands/onboard-auth.credentials.ts @@ -1,28 +1,112 @@ +import fs from "node:fs"; +import path from "node:path"; import type { OAuthCredentials } from "@mariozechner/pi-ai"; import { resolveOpenClawAgentDir } from "../agents/agent-paths.js"; import { upsertAuthProfile } from "../agents/auth-profiles.js"; +import { resolveStateDir } from "../config/paths.js"; export { CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF } from "../agents/cloudflare-ai-gateway.js"; export { XAI_DEFAULT_MODEL_REF } from "./onboard-auth.models.js"; const resolveAuthAgentDir = (agentDir?: string) => agentDir ?? resolveOpenClawAgentDir(); +export type WriteOAuthCredentialsOptions = { + syncSiblingAgents?: boolean; +}; + +/** Resolve real path, returning null if the target doesn't exist. */ +function safeRealpathSync(dir: string): string | null { + try { + return fs.realpathSync(path.resolve(dir)); + } catch { + return null; + } +} + +function resolveSiblingAgentDirs(primaryAgentDir: string): string[] { + const normalized = path.resolve(primaryAgentDir); + + // Derive agentsRoot from primaryAgentDir when it matches the standard + // layout (.../agents//agent). Falls back to global state dir. + const parentOfAgent = path.dirname(normalized); + const candidateAgentsRoot = path.dirname(parentOfAgent); + const looksLikeStandardLayout = + path.basename(normalized) === "agent" && path.basename(candidateAgentsRoot) === "agents"; + + const agentsRoot = looksLikeStandardLayout + ? candidateAgentsRoot + : path.join(resolveStateDir(), "agents"); + + const entries = (() => { + try { + return fs.readdirSync(agentsRoot, { withFileTypes: true }); + } catch { + return []; + } + })(); + // Include both directories and symlinks-to-directories. + const discovered = entries + .filter((entry) => entry.isDirectory() || entry.isSymbolicLink()) + .map((entry) => path.join(agentsRoot, entry.name, "agent")); + + // Deduplicate via realpath to handle symlinks and path normalization. + const seen = new Set(); + const result: string[] = []; + for (const dir of [normalized, ...discovered]) { + const real = safeRealpathSync(dir); + if (real && !seen.has(real)) { + seen.add(real); + result.push(real); + } + } + return result; +} + export async function writeOAuthCredentials( provider: string, creds: OAuthCredentials, agentDir?: string, + options?: WriteOAuthCredentialsOptions, ): Promise { const email = typeof creds.email === "string" && creds.email.trim() ? creds.email.trim() : "default"; const profileId = `${provider}:${email}`; + const resolvedAgentDir = path.resolve(resolveAuthAgentDir(agentDir)); + const targetAgentDirs = options?.syncSiblingAgents + ? resolveSiblingAgentDirs(resolvedAgentDir) + : [resolvedAgentDir]; + + const credential = { + type: "oauth" as const, + provider, + ...creds, + }; + + // Primary write must succeed — let it throw on failure. upsertAuthProfile({ profileId, - credential: { - type: "oauth", - provider, - ...creds, - }, - agentDir: resolveAuthAgentDir(agentDir), + credential, + agentDir: resolvedAgentDir, }); + + // Sibling sync is best-effort — log and ignore individual failures. + if (options?.syncSiblingAgents) { + const primaryReal = safeRealpathSync(resolvedAgentDir); + for (const targetAgentDir of targetAgentDirs) { + const targetReal = safeRealpathSync(targetAgentDir); + if (targetReal && primaryReal && targetReal === primaryReal) { + continue; + } + try { + upsertAuthProfile({ + profileId, + credential, + agentDir: targetAgentDir, + }); + } catch { + // Best-effort: sibling sync failure must not block primary onboarding. + } + } + } return profileId; } diff --git a/src/commands/onboard-auth.e2e.test.ts b/src/commands/onboard-auth.e2e.test.ts index 2389aee79..49401616d 100644 --- a/src/commands/onboard-auth.e2e.test.ts +++ b/src/commands/onboard-auth.e2e.test.ts @@ -1,4 +1,5 @@ import fs from "node:fs/promises"; +import os from "node:os"; import path from "node:path"; import type { OAuthCredentials } from "@mariozechner/pi-ai"; import { afterEach, describe, expect, it } from "vitest"; @@ -111,6 +112,9 @@ describe("writeOAuthCredentials", () => { "OPENCLAW_OAUTH_DIR", ]); + let tempStateDir: string; + const authProfilePathFor = (dir: string) => path.join(dir, "auth-profiles.json"); + afterEach(async () => { await lifecycle.cleanup(); }); @@ -125,13 +129,12 @@ describe("writeOAuthCredentials", () => { expires: Date.now() + 60_000, } satisfies OAuthCredentials; - const profileId = await writeOAuthCredentials("openai-codex", creds); - expect(profileId).toBe("openai-codex:default"); + await writeOAuthCredentials("openai-codex", creds); const parsed = await readAuthProfilesForAgent<{ profiles?: Record; }>(env.agentDir); - expect(parsed.profiles?.[profileId]).toMatchObject({ + expect(parsed.profiles?.["openai-codex:default"]).toMatchObject({ refresh: "refresh-token", access: "access-token", type: "oauth", @@ -142,30 +145,114 @@ describe("writeOAuthCredentials", () => { ).rejects.toThrow(); }); - it("uses OAuth email as profile id when provided", async () => { - const env = await setupAuthTestEnv("openclaw-oauth-"); - lifecycle.setStateDir(env.stateDir); + it("writes OAuth credentials to all sibling agent dirs when syncSiblingAgents=true", async () => { + tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-oauth-sync-")); + process.env.OPENCLAW_STATE_DIR = tempStateDir; + + const mainAgentDir = path.join(tempStateDir, "agents", "main", "agent"); + const kidAgentDir = path.join(tempStateDir, "agents", "kid", "agent"); + const workerAgentDir = path.join(tempStateDir, "agents", "worker", "agent"); + await fs.mkdir(mainAgentDir, { recursive: true }); + await fs.mkdir(kidAgentDir, { recursive: true }); + await fs.mkdir(workerAgentDir, { recursive: true }); + + process.env.OPENCLAW_AGENT_DIR = kidAgentDir; + process.env.PI_CODING_AGENT_DIR = kidAgentDir; const creds = { - email: "user@example.com", - refresh: "refresh-token", - access: "access-token", + refresh: "refresh-sync", + access: "access-sync", expires: Date.now() + 60_000, } satisfies OAuthCredentials; - const profileId = await writeOAuthCredentials("openai-codex", creds); - expect(profileId).toBe("openai-codex:user@example.com"); - - const parsed = await readAuthProfilesForAgent<{ - profiles?: Record; - }>(env.agentDir); - expect(parsed.profiles?.[profileId]).toMatchObject({ - refresh: "refresh-token", - access: "access-token", - type: "oauth", - provider: "openai-codex", - email: "user@example.com", + await writeOAuthCredentials("openai-codex", creds, undefined, { + syncSiblingAgents: true, }); + + for (const dir of [mainAgentDir, kidAgentDir, workerAgentDir]) { + const raw = await fs.readFile(authProfilePathFor(dir), "utf8"); + const parsed = JSON.parse(raw) as { + profiles?: Record; + }; + expect(parsed.profiles?.["openai-codex:default"]).toMatchObject({ + refresh: "refresh-sync", + access: "access-sync", + type: "oauth", + }); + } + }); + + it("writes OAuth credentials only to target dir by default", async () => { + tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-oauth-nosync-")); + process.env.OPENCLAW_STATE_DIR = tempStateDir; + + const mainAgentDir = path.join(tempStateDir, "agents", "main", "agent"); + const kidAgentDir = path.join(tempStateDir, "agents", "kid", "agent"); + await fs.mkdir(mainAgentDir, { recursive: true }); + await fs.mkdir(kidAgentDir, { recursive: true }); + + process.env.OPENCLAW_AGENT_DIR = kidAgentDir; + process.env.PI_CODING_AGENT_DIR = kidAgentDir; + + const creds = { + refresh: "refresh-kid", + access: "access-kid", + expires: Date.now() + 60_000, + } satisfies OAuthCredentials; + + await writeOAuthCredentials("openai-codex", creds, kidAgentDir); + + const kidRaw = await fs.readFile(authProfilePathFor(kidAgentDir), "utf8"); + const kidParsed = JSON.parse(kidRaw) as { + profiles?: Record; + }; + expect(kidParsed.profiles?.["openai-codex:default"]).toMatchObject({ + access: "access-kid", + type: "oauth", + }); + + await expect(fs.readFile(authProfilePathFor(mainAgentDir), "utf8")).rejects.toThrow(); + }); + + it("syncs siblings from explicit agentDir outside OPENCLAW_STATE_DIR", async () => { + tempStateDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-oauth-external-")); + process.env.OPENCLAW_STATE_DIR = tempStateDir; + + // Create standard-layout agents tree *outside* OPENCLAW_STATE_DIR + const externalRoot = path.join(tempStateDir, "external", "agents"); + const extMain = path.join(externalRoot, "main", "agent"); + const extKid = path.join(externalRoot, "kid", "agent"); + const extWorker = path.join(externalRoot, "worker", "agent"); + await fs.mkdir(extMain, { recursive: true }); + await fs.mkdir(extKid, { recursive: true }); + await fs.mkdir(extWorker, { recursive: true }); + + const creds = { + refresh: "refresh-ext", + access: "access-ext", + expires: Date.now() + 60_000, + } satisfies OAuthCredentials; + + await writeOAuthCredentials("openai-codex", creds, extKid, { + syncSiblingAgents: true, + }); + + // All siblings under the external root should have credentials + for (const dir of [extMain, extKid, extWorker]) { + const raw = await fs.readFile(authProfilePathFor(dir), "utf8"); + const parsed = JSON.parse(raw) as { + profiles?: Record; + }; + expect(parsed.profiles?.["openai-codex:default"]).toMatchObject({ + refresh: "refresh-ext", + access: "access-ext", + type: "oauth", + }); + } + + // Global state dir should NOT have credentials written + const globalMain = path.join(tempStateDir, "agents", "main", "agent"); + await expect(fs.readFile(authProfilePathFor(globalMain), "utf8")).rejects.toThrow(); }); }); From 1da23be302d5901079ed755a4622a35a72ae3d4c Mon Sep 17 00:00:00 2001 From: Nimrod Gutman Date: Fri, 20 Feb 2026 14:16:00 +0200 Subject: [PATCH 0007/1007] fix(pairing): preserve operator scopes for ios onboarding --- apps/ios/Sources/Model/NodeAppModel.swift | 4 +- src/infra/device-pairing.test.ts | 32 +++++++ src/infra/device-pairing.ts | 112 +++++++++++++++++----- 3 files changed, 122 insertions(+), 26 deletions(-) diff --git a/apps/ios/Sources/Model/NodeAppModel.swift b/apps/ios/Sources/Model/NodeAppModel.swift index d9206c41e..a18e3d58b 100644 --- a/apps/ios/Sources/Model/NodeAppModel.swift +++ b/apps/ios/Sources/Model/NodeAppModel.swift @@ -2140,9 +2140,7 @@ private extension NodeAppModel { clientId: clientId, clientMode: "ui", clientDisplayName: displayName, - // Operator traffic should authenticate via shared gateway auth only. - // Including device identity here can trigger duplicate pairing flows. - includeDeviceIdentity: false) + includeDeviceIdentity: true) } func legacyClientIdFallback(currentClientId: String, error: Error) -> String? { diff --git a/src/infra/device-pairing.test.ts b/src/infra/device-pairing.test.ts index 9620da2f7..d0794de75 100644 --- a/src/infra/device-pairing.test.ts +++ b/src/infra/device-pairing.test.ts @@ -55,6 +55,38 @@ describe("device pairing tokens", () => { expect(second.request.requestId).toBe(first.request.requestId); }); + test("merges pending roles/scopes for the same device before approval", async () => { + const baseDir = await mkdtemp(join(tmpdir(), "openclaw-device-pairing-")); + const first = await requestDevicePairing( + { + deviceId: "device-1", + publicKey: "public-key-1", + role: "node", + scopes: [], + }, + baseDir, + ); + const second = await requestDevicePairing( + { + deviceId: "device-1", + publicKey: "public-key-1", + role: "operator", + scopes: ["operator.read", "operator.write"], + }, + baseDir, + ); + + expect(second.created).toBe(false); + expect(second.request.requestId).toBe(first.request.requestId); + expect(second.request.roles).toEqual(["node", "operator"]); + expect(second.request.scopes).toEqual(["operator.read", "operator.write"]); + + await approveDevicePairing(first.request.requestId, baseDir); + const paired = await getPairedDevice("device-1", baseDir); + expect(paired?.roles).toEqual(["node", "operator"]); + expect(paired?.scopes).toEqual(["operator.read", "operator.write"]); + }); + test("generates base64url device tokens with 256-bit entropy output length", async () => { const baseDir = await mkdtemp(join(tmpdir(), "openclaw-device-pairing-")); await setupPairedOperatorDevice(baseDir, ["operator.admin"]); diff --git a/src/infra/device-pairing.ts b/src/infra/device-pairing.ts index c776f9bf1..50cb4a8a1 100644 --- a/src/infra/device-pairing.ts +++ b/src/infra/device-pairing.ts @@ -6,7 +6,6 @@ import { pruneExpiredPending, readJsonFile, resolvePairingPaths, - upsertPendingPairingRequest, writeJsonAtomic, } from "./pairing-files.js"; import { generatePairingToken, verifyPairingToken } from "./pairing-token.js"; @@ -153,6 +152,61 @@ function mergeScopes(...items: Array): string[] | undefine return [...scopes]; } +function equalOptionalStringArray(a: string[] | undefined, b: string[] | undefined): boolean { + if (!a && !b) { + return true; + } + if (!a || !b || a.length !== b.length) { + return false; + } + for (let i = 0; i < a.length; i += 1) { + if (a[i] !== b[i]) { + return false; + } + } + return true; +} + +function mergePendingDevicePairingRequest( + existing: DevicePairingPendingRequest, + incoming: Omit & { + isRepair: boolean; + }, +): { request: DevicePairingPendingRequest; changed: boolean } { + const existingRole = normalizeRole(existing.role); + const incomingRole = normalizeRole(incoming.role); + const nextRole = existingRole ?? incomingRole ?? undefined; + const nextRoles = mergeRoles(existing.roles, existing.role, incoming.role); + const nextScopes = mergeScopes(existing.scopes, incoming.scopes); + const nextSilent = Boolean(existing.silent && incoming.silent); + const nextRequest: DevicePairingPendingRequest = { + ...existing, + displayName: incoming.displayName ?? existing.displayName, + platform: incoming.platform ?? existing.platform, + clientId: incoming.clientId ?? existing.clientId, + clientMode: incoming.clientMode ?? existing.clientMode, + role: nextRole, + roles: nextRoles, + scopes: nextScopes, + remoteIp: incoming.remoteIp ?? existing.remoteIp, + silent: nextSilent, + isRepair: existing.isRepair || incoming.isRepair, + ts: Date.now(), + }; + const changed = + nextRequest.displayName !== existing.displayName || + nextRequest.platform !== existing.platform || + nextRequest.clientId !== existing.clientId || + nextRequest.clientMode !== existing.clientMode || + nextRequest.role !== existing.role || + !equalOptionalStringArray(nextRequest.roles, existing.roles) || + !equalOptionalStringArray(nextRequest.scopes, existing.scopes) || + nextRequest.remoteIp !== existing.remoteIp || + nextRequest.silent !== existing.silent || + nextRequest.isRepair !== existing.isRepair; + return { request: nextRequest, changed }; +} + function newToken() { return generatePairingToken(); } @@ -217,29 +271,41 @@ export async function requestDevicePairing( if (!deviceId) { throw new Error("deviceId required"); } - - return await upsertPendingPairingRequest({ - pendingById: state.pendingById, - isExisting: (pending) => pending.deviceId === deviceId, - isRepair: Boolean(state.pairedByDeviceId[deviceId]), - createRequest: (isRepair) => ({ - requestId: randomUUID(), - deviceId, - publicKey: req.publicKey, - displayName: req.displayName, - platform: req.platform, - clientId: req.clientId, - clientMode: req.clientMode, - role: req.role, - roles: req.role ? [req.role] : undefined, - scopes: req.scopes, - remoteIp: req.remoteIp, - silent: req.silent, + const isRepair = Boolean(state.pairedByDeviceId[deviceId]); + const existing = Object.values(state.pendingById).find( + (pending) => pending.deviceId === deviceId, + ); + if (existing) { + const merged = mergePendingDevicePairingRequest(existing, { + ...req, isRepair, - ts: Date.now(), - }), - persist: async () => await persistState(state, baseDir), - }); + }); + state.pendingById[existing.requestId] = merged.request; + if (merged.changed) { + await persistState(state, baseDir); + } + return { status: "pending" as const, request: merged.request, created: false }; + } + + const request: DevicePairingPendingRequest = { + requestId: randomUUID(), + deviceId, + publicKey: req.publicKey, + displayName: req.displayName, + platform: req.platform, + clientId: req.clientId, + clientMode: req.clientMode, + role: req.role, + roles: req.role ? [req.role] : undefined, + scopes: req.scopes, + remoteIp: req.remoteIp, + silent: req.silent, + isRepair, + ts: Date.now(), + }; + state.pendingById[request.requestId] = request; + await persistState(state, baseDir); + return { status: "pending" as const, request, created: true }; }); } From 8775d34fba8988ee8c05b1ede30b411a5f098507 Mon Sep 17 00:00:00 2001 From: Nimrod Gutman Date: Fri, 20 Feb 2026 14:24:35 +0200 Subject: [PATCH 0008/1007] fix(pairing): simplify pending merge and harden mixed-role onboarding --- .../Sources/OpenClawKit/GatewayChannel.swift | 6 +- src/gateway/server.auth.e2e.test.ts | 95 +++++++++++++++++++ src/infra/device-pairing.ts | 64 +++---------- 3 files changed, 112 insertions(+), 53 deletions(-) diff --git a/apps/shared/OpenClawKit/Sources/OpenClawKit/GatewayChannel.swift b/apps/shared/OpenClawKit/Sources/OpenClawKit/GatewayChannel.swift index fc0be4a94..f6aac2697 100644 --- a/apps/shared/OpenClawKit/Sources/OpenClawKit/GatewayChannel.swift +++ b/apps/shared/OpenClawKit/Sources/OpenClawKit/GatewayChannel.swift @@ -85,9 +85,9 @@ public struct GatewayConnectOptions: Sendable { public var clientId: String public var clientMode: String public var clientDisplayName: String? - // When false, the connection omits the signed device identity payload. - // This is useful for secondary "operator" connections where the shared gateway token - // should authorize without triggering device pairing flows. + // When false, the connection omits the signed device identity payload and cannot use + // device-scoped auth (role/scope upgrades will require pairing). Keep this true for + // role/scoped sessions such as operator UI clients. public var includeDeviceIdentity: Bool public init( diff --git a/src/gateway/server.auth.e2e.test.ts b/src/gateway/server.auth.e2e.test.ts index 93854341d..b529a9ff2 100644 --- a/src/gateway/server.auth.e2e.test.ts +++ b/src/gateway/server.auth.e2e.test.ts @@ -948,6 +948,101 @@ describe("gateway server auth/connect", () => { restoreGatewayToken(prevToken); }); + test("single approval captures pending node and operator roles for the same device", async () => { + const { mkdtemp } = await import("node:fs/promises"); + const { tmpdir } = await import("node:os"); + const { join } = await import("node:path"); + const { loadOrCreateDeviceIdentity, publicKeyRawBase64UrlFromPem, signDevicePayload } = + await import("../infra/device-identity.js"); + const { approveDevicePairing, getPairedDevice, listDevicePairing } = + await import("../infra/device-pairing.js"); + const { server, ws, port, prevToken } = await startServerWithClient("secret"); + ws.close(); + const identityDir = await mkdtemp(join(tmpdir(), "openclaw-device-scope-")); + const identity = loadOrCreateDeviceIdentity(join(identityDir, "device.json")); + const client = { + id: GATEWAY_CLIENT_NAMES.TEST, + version: "1.0.0", + platform: "test", + mode: GATEWAY_CLIENT_MODES.TEST, + }; + const buildDevice = (role: "operator" | "node", scopes: string[], nonce?: string) => { + const signedAtMs = Date.now(); + const payload = buildDeviceAuthPayload({ + deviceId: identity.deviceId, + clientId: client.id, + clientMode: client.mode, + role, + scopes, + signedAtMs, + token: "secret", + nonce, + }); + return { + id: identity.deviceId, + publicKey: publicKeyRawBase64UrlFromPem(identity.publicKeyPem), + signature: signDevicePayload(identity.privateKeyPem, payload), + signedAt: signedAtMs, + nonce, + }; + }; + const connectWithNonce = async (role: "operator" | "node", scopes: string[]) => { + const socket = new WebSocket(`ws://127.0.0.1:${port}`, { + headers: { host: "gateway.example" }, + }); + const challengePromise = onceMessage<{ + type?: string; + event?: string; + payload?: Record | null; + }>(socket, (o) => o.type === "event" && o.event === "connect.challenge"); + await new Promise((resolve) => socket.once("open", resolve)); + const challenge = await challengePromise; + const nonce = (challenge.payload as { nonce?: unknown } | undefined)?.nonce; + expect(typeof nonce).toBe("string"); + const result = await connectReq(socket, { + token: "secret", + role, + scopes, + client, + device: buildDevice(role, scopes, String(nonce)), + }); + socket.close(); + return result; + }; + + const nodeConnect = await connectWithNonce("node", []); + expect(nodeConnect.ok).toBe(false); + expect(nodeConnect.error?.message ?? "").toContain("pairing required"); + + const operatorConnect = await connectWithNonce("operator", ["operator.read", "operator.write"]); + expect(operatorConnect.ok).toBe(false); + expect(operatorConnect.error?.message ?? "").toContain("pairing required"); + + const pending = await listDevicePairing(); + expect(pending.pending).toHaveLength(1); + expect(pending.pending[0]?.roles).toEqual(expect.arrayContaining(["node", "operator"])); + expect(pending.pending[0]?.scopes).toEqual( + expect.arrayContaining(["operator.read", "operator.write"]), + ); + if (!pending.pending[0]) { + throw new Error("expected pending pairing request"); + } + await approveDevicePairing(pending.pending[0].requestId); + + const paired = await getPairedDevice(identity.deviceId); + expect(paired?.roles).toEqual(expect.arrayContaining(["node", "operator"])); + expect(paired?.scopes).toEqual(expect.arrayContaining(["operator.read", "operator.write"])); + + const approvedOperatorConnect = await connectWithNonce("operator", ["operator.read"]); + expect(approvedOperatorConnect.ok).toBe(true); + + const afterApproval = await listDevicePairing(); + expect(afterApproval.pending).toEqual([]); + + await server.close(); + restoreGatewayToken(prevToken); + }); + test("allows operator.read connect when device is paired with operator.admin", async () => { const { mkdtemp } = await import("node:fs/promises"); const { tmpdir } = await import("node:os"); diff --git a/src/infra/device-pairing.ts b/src/infra/device-pairing.ts index 50cb4a8a1..313ee54c9 100644 --- a/src/infra/device-pairing.ts +++ b/src/infra/device-pairing.ts @@ -152,59 +152,28 @@ function mergeScopes(...items: Array): string[] | undefine return [...scopes]; } -function equalOptionalStringArray(a: string[] | undefined, b: string[] | undefined): boolean { - if (!a && !b) { - return true; - } - if (!a || !b || a.length !== b.length) { - return false; - } - for (let i = 0; i < a.length; i += 1) { - if (a[i] !== b[i]) { - return false; - } - } - return true; -} - function mergePendingDevicePairingRequest( existing: DevicePairingPendingRequest, - incoming: Omit & { - isRepair: boolean; - }, -): { request: DevicePairingPendingRequest; changed: boolean } { + incoming: Omit, + isRepair: boolean, +): DevicePairingPendingRequest { const existingRole = normalizeRole(existing.role); const incomingRole = normalizeRole(incoming.role); - const nextRole = existingRole ?? incomingRole ?? undefined; - const nextRoles = mergeRoles(existing.roles, existing.role, incoming.role); - const nextScopes = mergeScopes(existing.scopes, incoming.scopes); - const nextSilent = Boolean(existing.silent && incoming.silent); - const nextRequest: DevicePairingPendingRequest = { + return { ...existing, displayName: incoming.displayName ?? existing.displayName, platform: incoming.platform ?? existing.platform, clientId: incoming.clientId ?? existing.clientId, clientMode: incoming.clientMode ?? existing.clientMode, - role: nextRole, - roles: nextRoles, - scopes: nextScopes, + role: existingRole ?? incomingRole ?? undefined, + roles: mergeRoles(existing.roles, existing.role, incoming.role), + scopes: mergeScopes(existing.scopes, incoming.scopes), remoteIp: incoming.remoteIp ?? existing.remoteIp, - silent: nextSilent, - isRepair: existing.isRepair || incoming.isRepair, + // If either request is interactive, keep the pending request visible for approval. + silent: Boolean(existing.silent && incoming.silent), + isRepair: existing.isRepair || isRepair, ts: Date.now(), }; - const changed = - nextRequest.displayName !== existing.displayName || - nextRequest.platform !== existing.platform || - nextRequest.clientId !== existing.clientId || - nextRequest.clientMode !== existing.clientMode || - nextRequest.role !== existing.role || - !equalOptionalStringArray(nextRequest.roles, existing.roles) || - !equalOptionalStringArray(nextRequest.scopes, existing.scopes) || - nextRequest.remoteIp !== existing.remoteIp || - nextRequest.silent !== existing.silent || - nextRequest.isRepair !== existing.isRepair; - return { request: nextRequest, changed }; } function newToken() { @@ -276,15 +245,10 @@ export async function requestDevicePairing( (pending) => pending.deviceId === deviceId, ); if (existing) { - const merged = mergePendingDevicePairingRequest(existing, { - ...req, - isRepair, - }); - state.pendingById[existing.requestId] = merged.request; - if (merged.changed) { - await persistState(state, baseDir); - } - return { status: "pending" as const, request: merged.request, created: false }; + const merged = mergePendingDevicePairingRequest(existing, req, isRepair); + state.pendingById[existing.requestId] = merged; + await persistState(state, baseDir); + return { status: "pending" as const, request: merged, created: false }; } const request: DevicePairingPendingRequest = { From ac0c1c26b1848f526b05252384cf6c8d1b894d5a Mon Sep 17 00:00:00 2001 From: Nimrod Gutman Date: Fri, 20 Feb 2026 14:28:31 +0200 Subject: [PATCH 0009/1007] fix: preserve ios bg refresh plist key and handle web login retry failures --- apps/ios/project.yml | 2 ++ src/web/login.coverage.test.ts | 16 ++++++++++++++++ src/web/login.ts | 6 ++++++ 3 files changed, 24 insertions(+) diff --git a/apps/ios/project.yml b/apps/ios/project.yml index 45c5b1104..9b43db118 100644 --- a/apps/ios/project.yml +++ b/apps/ios/project.yml @@ -100,6 +100,8 @@ targets: UIBackgroundModes: - audio - remote-notification + BGTaskSchedulerPermittedIdentifiers: + - ai.openclaw.ios.bgrefresh NSLocalNetworkUsageDescription: OpenClaw discovers and connects to your OpenClaw gateway on the local network. NSAppTransportSecurity: NSAllowsArbitraryLoadsInWebContent: true diff --git a/src/web/login.coverage.test.ts b/src/web/login.coverage.test.ts index 8b3673006..3c92cf942 100644 --- a/src/web/login.coverage.test.ts +++ b/src/web/login.coverage.test.ts @@ -80,6 +80,22 @@ describe("loginWeb coverage", () => { expect(secondSock.ws.close).toHaveBeenCalled(); }); + it("formats retry failure when restart login also closes", async () => { + formatErrorMock.mockReturnValueOnce("status=408 Request Time-out QR refs attempts ended"); + waitForWaConnectionMock + .mockRejectedValueOnce({ output: { statusCode: 515 } }) + .mockRejectedValueOnce({ + output: { + statusCode: 408, + payload: { error: "Request Time-out", message: "QR refs attempts ended" }, + }, + }); + + await expect(loginWeb(false, waitForWaConnectionMock as never)).rejects.toThrow( + /status=408 Request Time-out QR refs attempts ended/i, + ); + }); + it("clears creds and throws when logged out", async () => { waitForWaConnectionMock.mockRejectedValueOnce({ output: { statusCode: DisconnectReason.loggedOut }, diff --git a/src/web/login.ts b/src/web/login.ts index b336f8ebe..edecaba33 100644 --- a/src/web/login.ts +++ b/src/web/login.ts @@ -45,6 +45,12 @@ export async function loginWeb( await wait(retry); console.log(success("✅ Linked after restart; web session ready.")); return; + } catch (retryErr) { + const formatted = formatError(retryErr); + console.error( + danger(`WhatsApp Web connection ended after restart before fully opening. ${formatted}`), + ); + throw new Error(formatted, { cause: retryErr }); } finally { setTimeout(() => retry.ws?.close(), 500); } From 741435aacd4c0b09b1c5ce57c2b9f66426e96b8a Mon Sep 17 00:00:00 2001 From: Nimrod Gutman Date: Fri, 20 Feb 2026 14:41:35 +0200 Subject: [PATCH 0010/1007] fix(web): remove unrelated login changes --- src/web/login.coverage.test.ts | 16 ---------------- src/web/login.ts | 6 ------ 2 files changed, 22 deletions(-) diff --git a/src/web/login.coverage.test.ts b/src/web/login.coverage.test.ts index 3c92cf942..8b3673006 100644 --- a/src/web/login.coverage.test.ts +++ b/src/web/login.coverage.test.ts @@ -80,22 +80,6 @@ describe("loginWeb coverage", () => { expect(secondSock.ws.close).toHaveBeenCalled(); }); - it("formats retry failure when restart login also closes", async () => { - formatErrorMock.mockReturnValueOnce("status=408 Request Time-out QR refs attempts ended"); - waitForWaConnectionMock - .mockRejectedValueOnce({ output: { statusCode: 515 } }) - .mockRejectedValueOnce({ - output: { - statusCode: 408, - payload: { error: "Request Time-out", message: "QR refs attempts ended" }, - }, - }); - - await expect(loginWeb(false, waitForWaConnectionMock as never)).rejects.toThrow( - /status=408 Request Time-out QR refs attempts ended/i, - ); - }); - it("clears creds and throws when logged out", async () => { waitForWaConnectionMock.mockRejectedValueOnce({ output: { statusCode: DisconnectReason.loggedOut }, diff --git a/src/web/login.ts b/src/web/login.ts index edecaba33..b336f8ebe 100644 --- a/src/web/login.ts +++ b/src/web/login.ts @@ -45,12 +45,6 @@ export async function loginWeb( await wait(retry); console.log(success("✅ Linked after restart; web session ready.")); return; - } catch (retryErr) { - const formatted = formatError(retryErr); - console.error( - danger(`WhatsApp Web connection ended after restart before fully opening. ${formatted}`), - ); - throw new Error(formatted, { cause: retryErr }); } finally { setTimeout(() => retry.ws?.close(), 500); } From e2c5f8fda4e7dda6cad8bfcc455b3ab032409e83 Mon Sep 17 00:00:00 2001 From: Seb Slight <19554889+sebslight@users.noreply.github.com> Date: Fri, 20 Feb 2026 08:50:42 -0500 Subject: [PATCH 0011/1007] chore: ignore .agents directory (#21877) Add .agents/ to .gitignore so generated or local agent files are excluded from version control. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 4278a24b0..df485d0f1 100644 --- a/.gitignore +++ b/.gitignore @@ -87,6 +87,7 @@ USER.md /memory/ .agent/*.json !.agent/workflows/ +.agents/ /local/ package-lock.json .claude/settings.local.json From 7bee4ea33650b279c4fb819a87d4f2466762faba Mon Sep 17 00:00:00 2001 From: Seb Slight <19554889+sebslight@users.noreply.github.com> Date: Fri, 20 Feb 2026 08:59:07 -0500 Subject: [PATCH 0012/1007] fix(gitignore): include top-level .agents directory (#21886) Add a .agents entry to .gitignore to ensure the repository ignores a top-level directory named ".agents" in addition to the existing .agents/ pattern and other agent-related files. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index df485d0f1..d41646546 100644 --- a/.gitignore +++ b/.gitignore @@ -88,6 +88,7 @@ USER.md .agent/*.json !.agent/workflows/ .agents/ +.agents /local/ package-lock.json .claude/settings.local.json From 1b886e73786e563a7d88943d1fab78f4679dfa09 Mon Sep 17 00:00:00 2001 From: Seb Slight <19554889+sebslight@users.noreply.github.com> Date: Fri, 20 Feb 2026 09:33:46 -0500 Subject: [PATCH 0013/1007] docs(ui): add animated underline for nav tabs (#21912) Add a responsive, animated underline indicator for navigation tabs to improve visual focus and active-state feedback. - Introduce CSS for .nav-tabs, .nav-tabs-item and a .nav-tabs-underline element, including transitions, positioning, and dark mode color. - Hide default first h1 in #content to keep header layout consistent. - Add docs/nav-tabs-underline.js to create and manage the underline element, observe DOM mutations, and update underline position/width on changes, resize, and when fonts load. - Preserve last known underline position/width across re-initializations to avoid visual jumps. This change makes active tab state visible with smooth movement and ensures the underline stays synchronized with dynamic content. --- docs/nav-tabs-underline.js | 100 +++++++++++++++++++++++++++++++++++++ docs/style.css | 31 ++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 docs/nav-tabs-underline.js diff --git a/docs/nav-tabs-underline.js b/docs/nav-tabs-underline.js new file mode 100644 index 000000000..d53471296 --- /dev/null +++ b/docs/nav-tabs-underline.js @@ -0,0 +1,100 @@ +(() => { + const NAV_TABS_SELECTOR = ".nav-tabs"; + const ACTIVE_UNDERLINE_SELECTOR = ".nav-tabs-item > div.bg-primary"; + const UNDERLINE_CLASS = "nav-tabs-underline"; + const READY_CLASS = "nav-tabs-underline-ready"; + + let navTabs = null; + let navTabsObserver = null; + let lastX = null; + let lastWidth = null; + + const ensureUnderline = (tabs) => { + let underline = tabs.querySelector(`.${UNDERLINE_CLASS}`); + if (!underline) { + underline = document.createElement("div"); + underline.className = UNDERLINE_CLASS; + tabs.appendChild(underline); + } + return underline; + }; + + const getActiveTab = (tabs) => { + const activeUnderline = tabs.querySelector(ACTIVE_UNDERLINE_SELECTOR); + return activeUnderline?.closest(".nav-tabs-item") ?? null; + }; + + const updateUnderline = () => { + if (!navTabs) { + return; + } + + ensureUnderline(navTabs); + + const activeTab = getActiveTab(navTabs); + if (!activeTab) { + navTabs.classList.remove(READY_CLASS); + return; + } + + const navRect = navTabs.getBoundingClientRect(); + const tabRect = activeTab.getBoundingClientRect(); + const left = tabRect.left - navRect.left; + + navTabs.style.setProperty("--nav-tab-underline-x", `${left}px`); + navTabs.style.setProperty("--nav-tab-underline-width", `${tabRect.width}px`); + navTabs.classList.add(READY_CLASS); + + lastX = left; + lastWidth = tabRect.width; + }; + + const scheduleUpdate = () => { + requestAnimationFrame(updateUnderline); + }; + + const setupNavTabsObserver = (tabs) => { + if (!tabs || tabs === navTabs) { + return; + } + + navTabs = tabs; + ensureUnderline(navTabs); + if (lastX !== null && lastWidth !== null) { + navTabs.style.setProperty("--nav-tab-underline-x", `${lastX}px`); + navTabs.style.setProperty("--nav-tab-underline-width", `${lastWidth}px`); + navTabs.classList.add(READY_CLASS); + } + navTabsObserver?.disconnect(); + navTabsObserver = new MutationObserver(scheduleUpdate); + navTabsObserver.observe(navTabs, { + subtree: true, + attributes: true, + attributeFilter: ["class"], + }); + + scheduleUpdate(); + }; + + const setupObservers = () => { + const tabs = document.querySelector(NAV_TABS_SELECTOR); + if (tabs) { + setupNavTabsObserver(tabs); + } + }; + + const rootObserver = new MutationObserver(setupObservers); + + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", () => { + setupObservers(); + rootObserver.observe(document.body, { childList: true, subtree: true }); + }); + } else { + setupObservers(); + rootObserver.observe(document.body, { childList: true, subtree: true }); + } + + window.addEventListener("resize", scheduleUpdate); + void document.fonts?.ready?.then(scheduleUpdate, () => {}); +})(); diff --git a/docs/style.css b/docs/style.css index 78d94ecb2..53ae289c3 100644 --- a/docs/style.css +++ b/docs/style.css @@ -1,3 +1,34 @@ #content > h1:first-of-type { display: none !important; } + +.nav-tabs { + position: relative; +} + +.nav-tabs-item > div { + opacity: 0; +} + +.nav-tabs-underline { + position: absolute; + left: 0; + bottom: 0; + height: 1.5px; + width: var(--nav-tab-underline-width, 0); + transform: translateX(var(--nav-tab-underline-x, 0)); + background-color: rgb(var(--primary)); + border-radius: 999px; + pointer-events: none; + opacity: 0; + transition: transform 260ms ease-in-out, width 260ms ease-in-out, opacity 160ms ease-in-out; + will-change: transform, width; +} + +html.dark .nav-tabs-underline { + background-color: rgb(var(--primary-light)); +} + +.nav-tabs-underline-ready .nav-tabs-underline { + opacity: 1; +} From 72e937a591e2cbd710836a31a5e4cf8c3651eaba Mon Sep 17 00:00:00 2001 From: Sebastian <19554889+sebslight@users.noreply.github.com> Date: Fri, 20 Feb 2026 10:17:31 -0500 Subject: [PATCH 0014/1007] fix(gitignore): add mise configuration files and correct .agents entries --- .gitignore | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index d41646546..6b1545350 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,9 @@ ui/src/ui/__screenshots__/ ui/playwright-report/ ui/test-results/ +# Mise configuration files +mise.toml + # Android build artifacts apps/android/.gradle/ apps/android/app/build/ @@ -87,11 +90,12 @@ USER.md /memory/ .agent/*.json !.agent/workflows/ -.agents/ -.agents /local/ package-lock.json .claude/settings.local.json +.agents/ +.agents +.agent/ # Local iOS signing overrides apps/ios/LocalSigning.xcconfig From 8fa46d709a1ee340eef5e8a6189a1f71c1397312 Mon Sep 17 00:00:00 2001 From: Mariano <132747814+mbelinky@users.noreply.github.com> Date: Fri, 20 Feb 2026 16:28:47 +0000 Subject: [PATCH 0015/1007] fix(ios): force tls for non-loopback manual gateway hosts (#21969) Merged via /review-pr -> /prepare-pr -> /merge-pr. Prepared head SHA: 9fb39f566eab971e1b3958974305cc0cdfe6ab9a Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com> Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com> Reviewed-by: @mbelinky --- CHANGELOG.md | 1 + .../Gateway/GatewayConnectionController.swift | 70 +++++++++++++++++-- .../GatewayConnectionSecurityTests.swift | 25 +++++++ docs/style.css | 5 +- 4 files changed, 96 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a6f50e96d..fbd748c13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ Docs: https://docs.openclaw.ai - Agents/Failover: treat non-default override runs as direct fallback-to-configured-primary (skip configured fallback chain), normalize default-model detection for provider casing/whitespace, and add regression coverage for override/auth error paths. (#18820) Thanks @Glucksberg. - Auto-reply/Tool results: serialize tool-result delivery and keep the delivery chain progressing after individual failures so concurrent tool outputs preserve user-visible ordering. (#21231) thanks @ahdernasr. - Auto-reply/Prompt caching: restore prefix-cache stability by keeping inbound system metadata session-stable and moving per-message IDs (`message_id`, `message_id_full`, `reply_to_id`, `sender_id`) into untrusted conversation context. (#20597) Thanks @anisoptera. +- iOS/Security: force `https://` for non-loopback manual gateway hosts during iOS onboarding to block insecure remote transport URLs. (#21969) Thanks @mbelinky. - CLI/Onboarding: fix Anthropic-compatible custom provider verification by normalizing base URLs to avoid duplicate `/v1` paths during setup checks. (#21336) Thanks @17jmumford. - Security/Dependencies: bump transitive `hono` usage to `4.11.10` to incorporate timing-safe authentication comparison hardening for `basicAuth`/`bearerAuth` (`GHSA-gq3j-xvxp-8hrf`). Thanks @vincentkoc. diff --git a/apps/ios/Sources/Gateway/GatewayConnectionController.swift b/apps/ios/Sources/Gateway/GatewayConnectionController.swift index 92abd996b..109defac3 100644 --- a/apps/ios/Sources/Gateway/GatewayConnectionController.swift +++ b/apps/ios/Sources/Gateway/GatewayConnectionController.swift @@ -5,6 +5,7 @@ import CoreMotion import CryptoKit import EventKit import Foundation +import Darwin import OpenClawKit import Network import Observation @@ -162,7 +163,7 @@ final class GatewayConnectionController { .trimmingCharacters(in: .whitespacesAndNewlines) ?? "" let token = GatewaySettingsStore.loadGatewayToken(instanceId: instanceId) let password = GatewaySettingsStore.loadGatewayPassword(instanceId: instanceId) - let resolvedUseTLS = useTLS + let resolvedUseTLS = self.resolveManualUseTLS(host: host, useTLS: useTLS) guard let resolvedPort = self.resolveManualPort(host: host, port: port, useTLS: resolvedUseTLS) else { return } let stableID = self.manualStableID(host: host, port: resolvedPort) @@ -309,7 +310,7 @@ final class GatewayConnectionController { let manualPort = defaults.integer(forKey: "gateway.manual.port") let manualTLS = defaults.bool(forKey: "gateway.manual.tls") - let resolvedUseTLS = manualTLS || self.shouldForceTLS(host: manualHost) + let resolvedUseTLS = self.resolveManualUseTLS(host: manualHost, useTLS: manualTLS) guard let resolvedPort = self.resolveManualPort( host: manualHost, port: manualPort, @@ -320,7 +321,7 @@ final class GatewayConnectionController { let tlsParams = self.resolveManualTLSParams( stableID: stableID, tlsEnabled: resolvedUseTLS, - allowTOFUReset: self.shouldForceTLS(host: manualHost)) + allowTOFUReset: self.shouldRequireTLS(host: manualHost)) guard let url = self.buildGatewayURL( host: manualHost, @@ -340,7 +341,7 @@ final class GatewayConnectionController { if let lastKnown = GatewaySettingsStore.loadLastGatewayConnection() { if case let .manual(host, port, useTLS, stableID) = lastKnown { - let resolvedUseTLS = useTLS || self.shouldForceTLS(host: host) + let resolvedUseTLS = self.resolveManualUseTLS(host: host, useTLS: useTLS) let stored = GatewayTLSStore.loadFingerprint(stableID: stableID) let tlsParams = stored.map { fp in GatewayTLSParams(required: true, expectedFingerprint: fp, allowTOFU: false, storeKey: stableID) @@ -646,12 +647,65 @@ final class GatewayConnectionController { return components.url } + private func resolveManualUseTLS(host: String, useTLS: Bool) -> Bool { + useTLS || self.shouldRequireTLS(host: host) + } + + private func shouldRequireTLS(host: String) -> Bool { + !Self.isLoopbackHost(host) + } + private func shouldForceTLS(host: String) -> Bool { let trimmed = host.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() if trimmed.isEmpty { return false } return trimmed.hasSuffix(".ts.net") || trimmed.hasSuffix(".ts.net.") } + private static func isLoopbackHost(_ rawHost: String) -> Bool { + var host = rawHost.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() + guard !host.isEmpty else { return false } + + if host.hasPrefix("[") && host.hasSuffix("]") { + host.removeFirst() + host.removeLast() + } + if host.hasSuffix(".") { + host.removeLast() + } + if let zoneIndex = host.firstIndex(of: "%") { + host = String(host[.. Bool { + var addr = in_addr() + let parsed = host.withCString { inet_pton(AF_INET, $0, &addr) == 1 } + guard parsed else { return false } + let value = ntohl(addr.s_addr) + let firstOctet = UInt8((value >> 24) & 0xFF) + return firstOctet == 127 + } + + private static func isLoopbackIPv6(_ host: String) -> Bool { + var addr = in6_addr() + let parsed = host.withCString { inet_pton(AF_INET6, $0, &addr) == 1 } + guard parsed else { return false } + return withUnsafeBytes(of: &addr) { rawBytes in + let bytes = rawBytes.bindMemory(to: UInt8.self) + let isV6Loopback = bytes[0..<15].allSatisfy { $0 == 0 } && bytes[15] == 1 + if isV6Loopback { return true } + + let isMappedV4 = bytes[0..<10].allSatisfy { $0 == 0 } && bytes[10] == 0xFF && bytes[11] == 0xFF + return isMappedV4 && bytes[12] == 127 + } + } + private func manualStableID(host: String, port: Int) -> String { "manual|\(host.lowercased())|\(port)" } @@ -942,6 +996,14 @@ extension GatewayConnectionController { { self.resolveDiscoveredTLSParams(gateway: gateway, allowTOFU: allowTOFU) } + + func _test_resolveManualUseTLS(host: String, useTLS: Bool) -> Bool { + self.resolveManualUseTLS(host: host, useTLS: useTLS) + } + + func _test_resolveManualPort(host: String, port: Int, useTLS: Bool) -> Int? { + self.resolveManualPort(host: host, port: port, useTLS: useTLS) + } } #endif diff --git a/apps/ios/Tests/GatewayConnectionSecurityTests.swift b/apps/ios/Tests/GatewayConnectionSecurityTests.swift index 066ccb1dd..bcac70b74 100644 --- a/apps/ios/Tests/GatewayConnectionSecurityTests.swift +++ b/apps/ios/Tests/GatewayConnectionSecurityTests.swift @@ -102,4 +102,29 @@ import Testing #expect(controller._test_didAutoConnect() == false) } + + @Test @MainActor func manualConnectionsForceTLSForNonLoopbackHosts() async { + let appModel = NodeAppModel() + let controller = GatewayConnectionController(appModel: appModel, startDiscovery: false) + + #expect(controller._test_resolveManualUseTLS(host: "gateway.example.com", useTLS: false) == true) + #expect(controller._test_resolveManualUseTLS(host: "openclaw.local", useTLS: false) == true) + #expect(controller._test_resolveManualUseTLS(host: "127.attacker.example", useTLS: false) == true) + + #expect(controller._test_resolveManualUseTLS(host: "localhost", useTLS: false) == false) + #expect(controller._test_resolveManualUseTLS(host: "127.0.0.1", useTLS: false) == false) + #expect(controller._test_resolveManualUseTLS(host: "::1", useTLS: false) == false) + #expect(controller._test_resolveManualUseTLS(host: "[::1]", useTLS: false) == false) + #expect(controller._test_resolveManualUseTLS(host: "0.0.0.0", useTLS: false) == false) + } + + @Test @MainActor func manualDefaultPortUses443OnlyForTailnetTLSHosts() async { + let appModel = NodeAppModel() + let controller = GatewayConnectionController(appModel: appModel, startDiscovery: false) + + #expect(controller._test_resolveManualPort(host: "gateway.example.com", port: 0, useTLS: true) == 18789) + #expect(controller._test_resolveManualPort(host: "device.sample.ts.net", port: 0, useTLS: true) == 443) + #expect(controller._test_resolveManualPort(host: "device.sample.ts.net.", port: 0, useTLS: true) == 443) + #expect(controller._test_resolveManualPort(host: "device.sample.ts.net", port: 18789, useTLS: true) == 18789) + } } diff --git a/docs/style.css b/docs/style.css index 53ae289c3..a972ac085 100644 --- a/docs/style.css +++ b/docs/style.css @@ -21,7 +21,10 @@ border-radius: 999px; pointer-events: none; opacity: 0; - transition: transform 260ms ease-in-out, width 260ms ease-in-out, opacity 160ms ease-in-out; + transition: + transform 260ms ease-in-out, + width 260ms ease-in-out, + opacity 160ms ease-in-out; will-change: transform, width; } From ebae6f918e18bf075ae07def346bc2233cf52b96 Mon Sep 17 00:00:00 2001 From: Mariano <132747814+mbelinky@users.noreply.github.com> Date: Fri, 20 Feb 2026 16:31:40 +0000 Subject: [PATCH 0016/1007] fix(shared): reject insecure non-loopback gateway deep links (#21970) Merged via /review-pr -> /prepare-pr -> /merge-pr. Prepared head SHA: 279173c7dbd3f0d9c5b4cbf1ef81f18c25d52241 Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com> Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com> Reviewed-by: @mbelinky --- CHANGELOG.md | 1 + apps/ios/Tests/DeepLinkParserTests.swift | 54 ++++++++++++++++ .../Sources/OpenClawKit/DeepLinks.swift | 42 +++++++++++++ .../DeepLinksSecurityTests.swift | 61 +++++++++++++++++++ 4 files changed, 158 insertions(+) create mode 100644 apps/shared/OpenClawKit/Tests/OpenClawKitTests/DeepLinksSecurityTests.swift diff --git a/CHANGELOG.md b/CHANGELOG.md index fbd748c13..29ad6ee91 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,7 @@ Docs: https://docs.openclaw.ai - Auto-reply/Tool results: serialize tool-result delivery and keep the delivery chain progressing after individual failures so concurrent tool outputs preserve user-visible ordering. (#21231) thanks @ahdernasr. - Auto-reply/Prompt caching: restore prefix-cache stability by keeping inbound system metadata session-stable and moving per-message IDs (`message_id`, `message_id_full`, `reply_to_id`, `sender_id`) into untrusted conversation context. (#20597) Thanks @anisoptera. - iOS/Security: force `https://` for non-loopback manual gateway hosts during iOS onboarding to block insecure remote transport URLs. (#21969) Thanks @mbelinky. +- Shared/Security: reject insecure deep links that use `ws://` non-loopback gateway URLs to prevent plaintext remote websocket configuration. (#21970) Thanks @mbelinky. - CLI/Onboarding: fix Anthropic-compatible custom provider verification by normalizing base URLs to avoid duplicate `/v1` paths during setup checks. (#21336) Thanks @17jmumford. - Security/Dependencies: bump transitive `hono` usage to `4.11.10` to incorporate timing-safe authentication comparison hardening for `basicAuth`/`bearerAuth` (`GHSA-gq3j-xvxp-8hrf`). Thanks @vincentkoc. diff --git a/apps/ios/Tests/DeepLinkParserTests.swift b/apps/ios/Tests/DeepLinkParserTests.swift index ea8b2a812..51ef9547a 100644 --- a/apps/ios/Tests/DeepLinkParserTests.swift +++ b/apps/ios/Tests/DeepLinkParserTests.swift @@ -85,6 +85,18 @@ import Testing .init(host: "openclaw.local", port: 18789, tls: true, token: "abc", password: "def"))) } + @Test func parseGatewayLinkRejectsInsecureNonLoopbackWs() { + let url = URL( + string: "openclaw://gateway?host=attacker.example&port=18789&tls=0&token=abc")! + #expect(DeepLinkParser.parse(url) == nil) + } + + @Test func parseGatewayLinkRejectsInsecurePrefixBypassHost() { + let url = URL( + string: "openclaw://gateway?host=127.attacker.example&port=18789&tls=0&token=abc")! + #expect(DeepLinkParser.parse(url) == nil) + } + @Test func parseGatewaySetupCodeParsesBase64UrlPayload() { let payload = #"{"url":"wss://gateway.example.com:443","token":"tok","password":"pw"}"# let encoded = Data(payload.utf8) @@ -124,4 +136,46 @@ import Testing token: "tok", password: nil)) } + + @Test func parseGatewaySetupCodeRejectsInsecureNonLoopbackWs() { + let payload = #"{"url":"ws://attacker.example:18789","token":"tok"}"# + let encoded = Data(payload.utf8) + .base64EncodedString() + .replacingOccurrences(of: "+", with: "-") + .replacingOccurrences(of: "/", with: "_") + .replacingOccurrences(of: "=", with: "") + + let link = GatewayConnectDeepLink.fromSetupCode(encoded) + #expect(link == nil) + } + + @Test func parseGatewaySetupCodeRejectsInsecurePrefixBypassHost() { + let payload = #"{"url":"ws://127.attacker.example:18789","token":"tok"}"# + let encoded = Data(payload.utf8) + .base64EncodedString() + .replacingOccurrences(of: "+", with: "-") + .replacingOccurrences(of: "/", with: "_") + .replacingOccurrences(of: "=", with: "") + + let link = GatewayConnectDeepLink.fromSetupCode(encoded) + #expect(link == nil) + } + + @Test func parseGatewaySetupCodeAllowsLoopbackWs() { + let payload = #"{"url":"ws://127.0.0.1:18789","token":"tok"}"# + let encoded = Data(payload.utf8) + .base64EncodedString() + .replacingOccurrences(of: "+", with: "-") + .replacingOccurrences(of: "/", with: "_") + .replacingOccurrences(of: "=", with: "") + + let link = GatewayConnectDeepLink.fromSetupCode(encoded) + + #expect(link == .init( + host: "127.0.0.1", + port: 18789, + tls: false, + token: "tok", + password: nil)) + } } diff --git a/apps/shared/OpenClawKit/Sources/OpenClawKit/DeepLinks.swift b/apps/shared/OpenClawKit/Sources/OpenClawKit/DeepLinks.swift index 30606ca26..507148846 100644 --- a/apps/shared/OpenClawKit/Sources/OpenClawKit/DeepLinks.swift +++ b/apps/shared/OpenClawKit/Sources/OpenClawKit/DeepLinks.swift @@ -1,4 +1,5 @@ import Foundation +import Network public enum DeepLinkRoute: Sendable, Equatable { case agent(AgentDeepLink) @@ -20,6 +21,40 @@ public struct GatewayConnectDeepLink: Codable, Sendable, Equatable { self.password = password } + fileprivate static func isLoopbackHost(_ raw: String) -> Bool { + var host = raw + .trimmingCharacters(in: .whitespacesAndNewlines) + .lowercased() + .trimmingCharacters(in: CharacterSet(charactersIn: "[]")) + if host.hasSuffix(".") { + host.removeLast() + } + if let zoneIndex = host.firstIndex(of: "%") { + host = String(host[.. Date: Fri, 20 Feb 2026 16:34:00 +0000 Subject: [PATCH 0017/1007] fix(macos): reject insecure non-loopback ws remote gateway urls (#21971) Merged via /review-pr -> /prepare-pr -> /merge-pr. Prepared head SHA: 9e8cdbf0951bf1e3ea7c98ef0c8ac1b5f7b408a9 Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com> Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com> Reviewed-by: @mbelinky --- CHANGELOG.md | 1 + .../OpenClaw/GatewayRemoteConfig.swift | 38 +++++++++++++++++++ .../GatewayEndpointStoreTests.swift | 16 ++++++-- 3 files changed, 52 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 29ad6ee91..7a40d0b39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,7 @@ Docs: https://docs.openclaw.ai - Auto-reply/Prompt caching: restore prefix-cache stability by keeping inbound system metadata session-stable and moving per-message IDs (`message_id`, `message_id_full`, `reply_to_id`, `sender_id`) into untrusted conversation context. (#20597) Thanks @anisoptera. - iOS/Security: force `https://` for non-loopback manual gateway hosts during iOS onboarding to block insecure remote transport URLs. (#21969) Thanks @mbelinky. - Shared/Security: reject insecure deep links that use `ws://` non-loopback gateway URLs to prevent plaintext remote websocket configuration. (#21970) Thanks @mbelinky. +- macOS/Security: reject non-loopback `ws://` remote gateway URLs in macOS remote config to block insecure plaintext websocket endpoints. (#21971) Thanks @mbelinky. - CLI/Onboarding: fix Anthropic-compatible custom provider verification by normalizing base URLs to avoid duplicate `/v1` paths during setup checks. (#21336) Thanks @17jmumford. - Security/Dependencies: bump transitive `hono` usage to `4.11.10` to incorporate timing-safe authentication comparison hardening for `basicAuth`/`bearerAuth` (`GHSA-gq3j-xvxp-8hrf`). Thanks @vincentkoc. diff --git a/apps/macos/Sources/OpenClaw/GatewayRemoteConfig.swift b/apps/macos/Sources/OpenClaw/GatewayRemoteConfig.swift index 0b8ab3515..64a6f92db 100644 --- a/apps/macos/Sources/OpenClaw/GatewayRemoteConfig.swift +++ b/apps/macos/Sources/OpenClaw/GatewayRemoteConfig.swift @@ -1,6 +1,41 @@ import Foundation +import Network enum GatewayRemoteConfig { + private static func isLoopbackHost(_ rawHost: String) -> Bool { + var host = rawHost + .trimmingCharacters(in: .whitespacesAndNewlines) + .lowercased() + .trimmingCharacters(in: CharacterSet(charactersIn: "[]")) + if host.hasSuffix(".") { + host.removeLast() + } + if let zoneIndex = host.firstIndex(of: "%") { + host = String(host[.. AppState.RemoteTransport { guard let gateway = root["gateway"] as? [String: Any], let remote = gateway["remote"] as? [String: Any], @@ -39,6 +74,9 @@ enum GatewayRemoteConfig { guard scheme == "ws" || scheme == "wss" else { return nil } let host = url.host?.trimmingCharacters(in: .whitespacesAndNewlines) ?? "" guard !host.isEmpty else { return nil } + if scheme == "ws", !self.isLoopbackHost(host) { + return nil + } if scheme == "ws", url.port == nil { guard var components = URLComponents(url: url, resolvingAgainstBaseURL: false) else { return url diff --git a/apps/macos/Tests/OpenClawIPCTests/GatewayEndpointStoreTests.swift b/apps/macos/Tests/OpenClawIPCTests/GatewayEndpointStoreTests.swift index 44c464c44..0d42e8d8c 100644 --- a/apps/macos/Tests/OpenClawIPCTests/GatewayEndpointStoreTests.swift +++ b/apps/macos/Tests/OpenClawIPCTests/GatewayEndpointStoreTests.swift @@ -218,9 +218,19 @@ import Testing #expect(url.absoluteString == "https://gateway.example:443/remote-ui/") } - @Test func normalizeGatewayUrlAddsDefaultPortForWs() { - let url = GatewayRemoteConfig.normalizeGatewayUrl("ws://gateway") + @Test func normalizeGatewayUrlAddsDefaultPortForLoopbackWs() { + let url = GatewayRemoteConfig.normalizeGatewayUrl("ws://127.0.0.1") #expect(url?.port == 18789) - #expect(url?.absoluteString == "ws://gateway:18789") + #expect(url?.absoluteString == "ws://127.0.0.1:18789") + } + + @Test func normalizeGatewayUrlRejectsNonLoopbackWs() { + let url = GatewayRemoteConfig.normalizeGatewayUrl("ws://gateway") + #expect(url == nil) + } + + @Test func normalizeGatewayUrlRejectsPrefixBypassLoopbackHost() { + let url = GatewayRemoteConfig.normalizeGatewayUrl("ws://127.attacker.example") + #expect(url == nil) } } From 8e4f6c03841bda492f827982d68ce5bd26c0e7fc Mon Sep 17 00:00:00 2001 From: Mariano <132747814+mbelinky@users.noreply.github.com> Date: Fri, 20 Feb 2026 16:36:25 +0000 Subject: [PATCH 0018/1007] fix(browser): block upload symlink escapes (#21972) Merged via /review-pr -> /prepare-pr -> /merge-pr. Prepared head SHA: 4381ef9a4d9107798c9c7c00aac62ee81a878789 Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com> Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com> Reviewed-by: @mbelinky --- CHANGELOG.md | 1 + src/agents/tools/browser-tool.ts | 4 +- src/browser/paths.test.ts | 105 ++++++++++++++++++ src/browser/paths.ts | 43 +++++++ src/browser/routes/agent.act.ts | 4 +- .../register.files-downloads.ts | 8 +- 6 files changed, 157 insertions(+), 8 deletions(-) create mode 100644 src/browser/paths.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a40d0b39..cd534d80e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ Docs: https://docs.openclaw.ai - iOS/Security: force `https://` for non-loopback manual gateway hosts during iOS onboarding to block insecure remote transport URLs. (#21969) Thanks @mbelinky. - Shared/Security: reject insecure deep links that use `ws://` non-loopback gateway URLs to prevent plaintext remote websocket configuration. (#21970) Thanks @mbelinky. - macOS/Security: reject non-loopback `ws://` remote gateway URLs in macOS remote config to block insecure plaintext websocket endpoints. (#21971) Thanks @mbelinky. +- Browser/Security: block upload path symlink escapes so browser upload sources cannot traverse outside the allowed workspace via symlinked paths. (#21972) Thanks @mbelinky. - CLI/Onboarding: fix Anthropic-compatible custom provider verification by normalizing base URLs to avoid duplicate `/v1` paths during setup checks. (#21336) Thanks @17jmumford. - Security/Dependencies: bump transitive `hono` usage to `4.11.10` to incorporate timing-safe authentication comparison hardening for `basicAuth`/`bearerAuth` (`GHSA-gq3j-xvxp-8hrf`). Thanks @vincentkoc. diff --git a/src/agents/tools/browser-tool.ts b/src/agents/tools/browser-tool.ts index e7fb904b2..9545ca3bc 100644 --- a/src/agents/tools/browser-tool.ts +++ b/src/agents/tools/browser-tool.ts @@ -21,7 +21,7 @@ import { } from "../../browser/client.js"; import { resolveBrowserConfig } from "../../browser/config.js"; import { DEFAULT_AI_SNAPSHOT_MAX_CHARS } from "../../browser/constants.js"; -import { DEFAULT_UPLOAD_DIR, resolvePathsWithinRoot } from "../../browser/paths.js"; +import { DEFAULT_UPLOAD_DIR, resolveExistingPathsWithinRoot } from "../../browser/paths.js"; import { applyBrowserProxyPaths, persistBrowserProxyFiles } from "../../browser/proxy-files.js"; import { loadConfig } from "../../config/config.js"; import { wrapExternalContent } from "../../security/external-content.js"; @@ -700,7 +700,7 @@ export function createBrowserTool(opts?: { if (paths.length === 0) { throw new Error("paths required"); } - const uploadPathsResult = resolvePathsWithinRoot({ + const uploadPathsResult = await resolveExistingPathsWithinRoot({ rootDir: DEFAULT_UPLOAD_DIR, requestedPaths: paths, scopeLabel: `uploads directory (${DEFAULT_UPLOAD_DIR})`, diff --git a/src/browser/paths.test.ts b/src/browser/paths.test.ts new file mode 100644 index 000000000..0ece74c48 --- /dev/null +++ b/src/browser/paths.test.ts @@ -0,0 +1,105 @@ +import fs from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; +import { afterEach, describe, expect, it } from "vitest"; +import { resolveExistingPathsWithinRoot } from "./paths.js"; + +async function createFixtureRoot(): Promise<{ baseDir: string; uploadsDir: string }> { + const baseDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-browser-paths-")); + const uploadsDir = path.join(baseDir, "uploads"); + await fs.mkdir(uploadsDir, { recursive: true }); + return { baseDir, uploadsDir }; +} + +describe("resolveExistingPathsWithinRoot", () => { + const cleanupDirs = new Set(); + + afterEach(async () => { + await Promise.all( + Array.from(cleanupDirs).map(async (dir) => { + await fs.rm(dir, { recursive: true, force: true }); + }), + ); + cleanupDirs.clear(); + }); + + it("accepts existing files under the upload root", async () => { + const { baseDir, uploadsDir } = await createFixtureRoot(); + cleanupDirs.add(baseDir); + + const nestedDir = path.join(uploadsDir, "nested"); + await fs.mkdir(nestedDir, { recursive: true }); + const filePath = path.join(nestedDir, "ok.txt"); + await fs.writeFile(filePath, "ok", "utf8"); + + const result = await resolveExistingPathsWithinRoot({ + rootDir: uploadsDir, + requestedPaths: [filePath], + scopeLabel: "uploads directory", + }); + + expect(result.ok).toBe(true); + if (result.ok) { + expect(result.paths).toEqual([await fs.realpath(filePath)]); + } + }); + + it("rejects traversal outside the upload root", async () => { + const { baseDir, uploadsDir } = await createFixtureRoot(); + cleanupDirs.add(baseDir); + + const outsidePath = path.join(baseDir, "outside.txt"); + await fs.writeFile(outsidePath, "nope", "utf8"); + + const result = await resolveExistingPathsWithinRoot({ + rootDir: uploadsDir, + requestedPaths: ["../outside.txt"], + scopeLabel: "uploads directory", + }); + + expect(result.ok).toBe(false); + if (!result.ok) { + expect(result.error).toContain("must stay within uploads directory"); + } + }); + + it("keeps lexical in-root paths when files do not exist yet", async () => { + const { baseDir, uploadsDir } = await createFixtureRoot(); + cleanupDirs.add(baseDir); + + const result = await resolveExistingPathsWithinRoot({ + rootDir: uploadsDir, + requestedPaths: ["missing.txt"], + scopeLabel: "uploads directory", + }); + + expect(result.ok).toBe(true); + if (result.ok) { + expect(result.paths).toEqual([path.join(uploadsDir, "missing.txt")]); + } + }); + + it.runIf(process.platform !== "win32")( + "rejects symlink escapes outside upload root", + async () => { + const { baseDir, uploadsDir } = await createFixtureRoot(); + cleanupDirs.add(baseDir); + + const outsidePath = path.join(baseDir, "secret.txt"); + await fs.writeFile(outsidePath, "secret", "utf8"); + const symlinkPath = path.join(uploadsDir, "leak.txt"); + await fs.symlink(outsidePath, symlinkPath); + + const result = await resolveExistingPathsWithinRoot({ + rootDir: uploadsDir, + requestedPaths: ["leak.txt"], + scopeLabel: "uploads directory", + }); + + expect(result.ok).toBe(false); + if (!result.ok) { + expect(result.error).toContain("regular non-symlink file"); + } + }, + ); +}); diff --git a/src/browser/paths.ts b/src/browser/paths.ts index 5d91c8287..3af2bd149 100644 --- a/src/browser/paths.ts +++ b/src/browser/paths.ts @@ -1,4 +1,5 @@ import path from "node:path"; +import { SafeOpenError, openFileWithinRoot } from "../infra/fs-safe.js"; import { resolvePreferredOpenClawTmpDir } from "../infra/tmp-openclaw-dir.js"; export const DEFAULT_BROWSER_TMP_DIR = resolvePreferredOpenClawTmpDir(); @@ -47,3 +48,45 @@ export function resolvePathsWithinRoot(params: { } return { ok: true, paths: resolvedPaths }; } + +export async function resolveExistingPathsWithinRoot(params: { + rootDir: string; + requestedPaths: string[]; + scopeLabel: string; +}): Promise<{ ok: true; paths: string[] } | { ok: false; error: string }> { + const resolvedPaths: string[] = []; + for (const raw of params.requestedPaths) { + const pathResult = resolvePathWithinRoot({ + rootDir: params.rootDir, + requestedPath: raw, + scopeLabel: params.scopeLabel, + }); + if (!pathResult.ok) { + return { ok: false, error: pathResult.error }; + } + + const rootDir = path.resolve(params.rootDir); + const relativePath = path.relative(rootDir, pathResult.path); + let opened: Awaited> | undefined; + try { + opened = await openFileWithinRoot({ + rootDir, + relativePath, + }); + resolvedPaths.push(opened.realPath); + } catch (err) { + if (err instanceof SafeOpenError && err.code === "not-found") { + // Preserve historical behavior for paths that do not exist yet. + resolvedPaths.push(pathResult.path); + continue; + } + return { + ok: false, + error: `Invalid path: must stay within ${params.scopeLabel} and be a regular non-symlink file`, + }; + } finally { + await opened?.handle.close().catch(() => {}); + } + } + return { ok: true, paths: resolvedPaths }; +} diff --git a/src/browser/routes/agent.act.ts b/src/browser/routes/agent.act.ts index b0c393eae..78fa2f685 100644 --- a/src/browser/routes/agent.act.ts +++ b/src/browser/routes/agent.act.ts @@ -16,7 +16,7 @@ import { DEFAULT_DOWNLOAD_DIR, DEFAULT_UPLOAD_DIR, resolvePathWithinRoot, - resolvePathsWithinRoot, + resolveExistingPathsWithinRoot, } from "./path-output.js"; import type { BrowserResponse, BrowserRouteRegistrar } from "./types.js"; import { jsonError, toBoolean, toNumber, toStringArray, toStringOrEmpty } from "./utils.js"; @@ -382,7 +382,7 @@ export function registerBrowserAgentActRoutes( targetId, feature: "file chooser hook", run: async ({ cdpUrl, tab, pw }) => { - const uploadPathsResult = resolvePathsWithinRoot({ + const uploadPathsResult = await resolveExistingPathsWithinRoot({ rootDir: DEFAULT_UPLOAD_DIR, requestedPaths: paths, scopeLabel: `uploads directory (${DEFAULT_UPLOAD_DIR})`, diff --git a/src/cli/browser-cli-actions-input/register.files-downloads.ts b/src/cli/browser-cli-actions-input/register.files-downloads.ts index 38c2c089d..af12682e3 100644 --- a/src/cli/browser-cli-actions-input/register.files-downloads.ts +++ b/src/cli/browser-cli-actions-input/register.files-downloads.ts @@ -1,13 +1,13 @@ import type { Command } from "commander"; -import { DEFAULT_UPLOAD_DIR, resolvePathsWithinRoot } from "../../browser/paths.js"; +import { DEFAULT_UPLOAD_DIR, resolveExistingPathsWithinRoot } from "../../browser/paths.js"; import { danger } from "../../globals.js"; import { defaultRuntime } from "../../runtime.js"; import { shortenHomePath } from "../../utils.js"; import { callBrowserRequest, type BrowserParentOpts } from "../browser-cli-shared.js"; import { resolveBrowserActionContext } from "./shared.js"; -function normalizeUploadPaths(paths: string[]): string[] { - const result = resolvePathsWithinRoot({ +async function normalizeUploadPaths(paths: string[]): Promise { + const result = await resolveExistingPathsWithinRoot({ rootDir: DEFAULT_UPLOAD_DIR, requestedPaths: paths, scopeLabel: `uploads directory (${DEFAULT_UPLOAD_DIR})`, @@ -81,7 +81,7 @@ export function registerBrowserFilesAndDownloadsCommands( .action(async (paths: string[], opts, cmd) => { const { parent, profile } = resolveBrowserActionContext(cmd, parentOpts); try { - const normalizedPaths = normalizeUploadPaths(paths); + const normalizedPaths = await normalizeUploadPaths(paths); const { timeoutMs, targetId } = resolveTimeoutAndTarget(opts); const result = await callBrowserRequest<{ download: { path: string } }>( parent, From 738b011624c7c8e6e2b250da1b5df53c97962678 Mon Sep 17 00:00:00 2001 From: Mariano <132747814+mbelinky@users.noreply.github.com> Date: Fri, 20 Feb 2026 16:39:13 +0000 Subject: [PATCH 0019/1007] iOS/watch: add actionable watch approvals and quick replies (#21996) Merged via /review-pr -> /prepare-pr -> /merge-pr. Prepared head SHA: 3c2a01f903c94207bec4de6865305ce33c3abdb7 Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com> Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com> Reviewed-by: @mbelinky --- CHANGELOG.md | 1 + apps/ios/Sources/Model/NodeAppModel.swift | 100 +++++++++++- .../Services/NodeServiceProtocols.swift | 16 +- .../Services/WatchMessagingService.swift | 118 +++++++++++++- apps/ios/Tests/NodeAppModelInvokeTests.swift | 42 +++-- .../Sources/OpenClawWatchApp.swift | 10 +- .../Sources/WatchConnectivityReceiver.swift | 146 +++++++++++++++++- .../Sources/WatchInboxStore.swift | 114 +++++++++++++- .../Sources/WatchInboxView.swift | 37 +++++ .../Sources/OpenClawKit/WatchCommands.swift | 45 +++++- 10 files changed, 598 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd534d80e..903123adb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,7 @@ Docs: https://docs.openclaw.ai - Shared/Security: reject insecure deep links that use `ws://` non-loopback gateway URLs to prevent plaintext remote websocket configuration. (#21970) Thanks @mbelinky. - macOS/Security: reject non-loopback `ws://` remote gateway URLs in macOS remote config to block insecure plaintext websocket endpoints. (#21971) Thanks @mbelinky. - Browser/Security: block upload path symlink escapes so browser upload sources cannot traverse outside the allowed workspace via symlinked paths. (#21972) Thanks @mbelinky. +- iOS/Watch: add actionable watch approval/reject controls and quick-reply actions so watch-originated approvals and responses can be sent directly from notification flows. (#21996) Thanks @mbelinky. - CLI/Onboarding: fix Anthropic-compatible custom provider verification by normalizing base URLs to avoid duplicate `/v1` paths during setup checks. (#21336) Thanks @17jmumford. - Security/Dependencies: bump transitive `hono` usage to `4.11.10` to incorporate timing-safe authentication comparison hardening for `basicAuth`/`bearerAuth` (`GHSA-gq3j-xvxp-8hrf`). Thanks @vincentkoc. diff --git a/apps/ios/Sources/Model/NodeAppModel.swift b/apps/ios/Sources/Model/NodeAppModel.swift index a18e3d58b..e86fb7562 100644 --- a/apps/ios/Sources/Model/NodeAppModel.swift +++ b/apps/ios/Sources/Model/NodeAppModel.swift @@ -43,6 +43,7 @@ final class NodeAppModel { private let deepLinkLogger = Logger(subsystem: "ai.openclaw.ios", category: "DeepLink") private let pushWakeLogger = Logger(subsystem: "ai.openclaw.ios", category: "PushWake") private let locationWakeLogger = Logger(subsystem: "ai.openclaw.ios", category: "LocationWake") + private let watchReplyLogger = Logger(subsystem: "ai.openclaw.ios", category: "WatchReply") enum CameraHUDKind { case photo case recording @@ -109,6 +110,8 @@ final class NodeAppModel { private var backgroundReconnectSuppressed = false private var backgroundReconnectLeaseUntil: Date? private var lastSignificantLocationWakeAt: Date? + private var queuedWatchReplies: [WatchQuickReplyEvent] = [] + private var seenWatchReplyIds = Set() private var gatewayConnected = false private var operatorConnected = false @@ -155,6 +158,11 @@ final class NodeAppModel { self.talkMode = talkMode self.apnsDeviceTokenHex = UserDefaults.standard.string(forKey: Self.apnsDeviceTokenUserDefaultsKey) GatewayDiagnostics.bootstrap() + self.watchMessagingService.setReplyHandler { [weak self] event in + Task { @MainActor in + await self?.handleWatchQuickReply(event) + } + } self.voiceWake.configure { [weak self] cmd in guard let self else { return } @@ -1608,9 +1616,7 @@ private extension NodeAppModel { do { let result = try await self.watchMessagingService.sendNotification( id: req.id, - title: title, - body: body, - priority: params.priority) + params: params) let payload = OpenClawWatchNotifyPayload( deliveredImmediately: result.deliveredImmediately, queuedForDelivery: result.queuedForDelivery, @@ -2255,6 +2261,90 @@ extension NodeAppModel { /// Back-compat hook retained for older gateway-connect flows. func onNodeGatewayConnected() async { await self.registerAPNsTokenIfNeeded() + await self.flushQueuedWatchRepliesIfConnected() + } + + private func handleWatchQuickReply(_ event: WatchQuickReplyEvent) async { + let replyId = event.replyId.trimmingCharacters(in: .whitespacesAndNewlines) + let actionId = event.actionId.trimmingCharacters(in: .whitespacesAndNewlines) + if replyId.isEmpty || actionId.isEmpty { + self.watchReplyLogger.info("watch reply dropped: missing replyId/actionId") + return + } + + if self.seenWatchReplyIds.contains(replyId) { + self.watchReplyLogger.debug( + "watch reply deduped replyId=\(replyId, privacy: .public)") + return + } + self.seenWatchReplyIds.insert(replyId) + + if await !self.isGatewayConnected() { + self.queuedWatchReplies.append(event) + self.watchReplyLogger.info( + "watch reply queued replyId=\(replyId, privacy: .public) action=\(actionId, privacy: .public)") + return + } + + await self.forwardWatchReplyToAgent(event) + } + + private func flushQueuedWatchRepliesIfConnected() async { + guard await self.isGatewayConnected() else { return } + guard !self.queuedWatchReplies.isEmpty else { return } + + let pending = self.queuedWatchReplies + self.queuedWatchReplies.removeAll() + for event in pending { + await self.forwardWatchReplyToAgent(event) + } + } + + private func forwardWatchReplyToAgent(_ event: WatchQuickReplyEvent) async { + let sessionKey = event.sessionKey?.trimmingCharacters(in: .whitespacesAndNewlines) + let effectiveSessionKey = (sessionKey?.isEmpty == false) ? sessionKey : self.mainSessionKey + let message = Self.makeWatchReplyAgentMessage(event) + let link = AgentDeepLink( + message: message, + sessionKey: effectiveSessionKey, + thinking: "low", + deliver: false, + to: nil, + channel: nil, + timeoutSeconds: nil, + key: event.replyId) + do { + try await self.sendAgentRequest(link: link) + self.watchReplyLogger.info( + "watch reply forwarded replyId=\(event.replyId, privacy: .public) action=\(event.actionId, privacy: .public)") + self.openChatRequestID &+= 1 + } catch { + self.watchReplyLogger.error( + "watch reply forwarding failed replyId=\(event.replyId, privacy: .public) error=\(error.localizedDescription, privacy: .public)") + self.queuedWatchReplies.insert(event, at: 0) + } + } + + private static func makeWatchReplyAgentMessage(_ event: WatchQuickReplyEvent) -> String { + let actionLabel = event.actionLabel?.trimmingCharacters(in: .whitespacesAndNewlines) + let promptId = event.promptId.trimmingCharacters(in: .whitespacesAndNewlines) + let transport = event.transport.trimmingCharacters(in: .whitespacesAndNewlines) + let summary = actionLabel?.isEmpty == false ? actionLabel! : event.actionId + var lines: [String] = [] + lines.append("Watch reply: \(summary)") + lines.append("promptId=\(promptId.isEmpty ? "unknown" : promptId)") + lines.append("actionId=\(event.actionId)") + lines.append("replyId=\(event.replyId)") + if !transport.isEmpty { + lines.append("transport=\(transport)") + } + if let sentAtMs = event.sentAtMs { + lines.append("sentAtMs=\(sentAtMs)") + } + if let note = event.note?.trimmingCharacters(in: .whitespacesAndNewlines), !note.isEmpty { + lines.append("note=\(note)") + } + return lines.joined(separator: "\n") } func handleSilentPushWake(_ userInfo: [AnyHashable: Any]) async -> Bool { @@ -2497,5 +2587,9 @@ extension NodeAppModel { func _test_applyTalkModeSync(enabled: Bool, phase: String? = nil) { self.applyTalkModeSync(enabled: enabled, phase: phase) } + + func _test_queuedWatchReplyCount() -> Int { + self.queuedWatchReplies.count + } } #endif diff --git a/apps/ios/Sources/Services/NodeServiceProtocols.swift b/apps/ios/Sources/Services/NodeServiceProtocols.swift index 6f882e82a..27ee7cc27 100644 --- a/apps/ios/Sources/Services/NodeServiceProtocols.swift +++ b/apps/ios/Sources/Services/NodeServiceProtocols.swift @@ -73,6 +73,17 @@ struct WatchMessagingStatus: Sendable, Equatable { var activationState: String } +struct WatchQuickReplyEvent: Sendable, Equatable { + var replyId: String + var promptId: String + var actionId: String + var actionLabel: String? + var sessionKey: String? + var note: String? + var sentAtMs: Int? + var transport: String +} + struct WatchNotificationSendResult: Sendable, Equatable { var deliveredImmediately: Bool var queuedForDelivery: Bool @@ -81,11 +92,10 @@ struct WatchNotificationSendResult: Sendable, Equatable { protocol WatchMessagingServicing: AnyObject, Sendable { func status() async -> WatchMessagingStatus + func setReplyHandler(_ handler: (@Sendable (WatchQuickReplyEvent) -> Void)?) func sendNotification( id: String, - title: String, - body: String, - priority: OpenClawNotificationPriority?) async throws -> WatchNotificationSendResult + params: OpenClawWatchNotifyParams) async throws -> WatchNotificationSendResult } extension CameraController: CameraServicing {} diff --git a/apps/ios/Sources/Services/WatchMessagingService.swift b/apps/ios/Sources/Services/WatchMessagingService.swift index 8332fb588..3511a06c2 100644 --- a/apps/ios/Sources/Services/WatchMessagingService.swift +++ b/apps/ios/Sources/Services/WatchMessagingService.swift @@ -23,6 +23,8 @@ enum WatchMessagingError: LocalizedError { final class WatchMessagingService: NSObject, WatchMessagingServicing, @unchecked Sendable { private static let logger = Logger(subsystem: "ai.openclaw", category: "watch.messaging") private let session: WCSession? + private let replyHandlerLock = NSLock() + private var replyHandler: (@Sendable (WatchQuickReplyEvent) -> Void)? override init() { if WCSession.isSupported() { @@ -67,11 +69,15 @@ final class WatchMessagingService: NSObject, WatchMessagingServicing, @unchecked return Self.status(for: session) } + func setReplyHandler(_ handler: (@Sendable (WatchQuickReplyEvent) -> Void)?) { + self.replyHandlerLock.lock() + self.replyHandler = handler + self.replyHandlerLock.unlock() + } + func sendNotification( id: String, - title: String, - body: String, - priority: OpenClawNotificationPriority?) async throws -> WatchNotificationSendResult + params: OpenClawWatchNotifyParams) async throws -> WatchNotificationSendResult { await self.ensureActivated() guard let session = self.session else { @@ -82,14 +88,44 @@ final class WatchMessagingService: NSObject, WatchMessagingServicing, @unchecked guard snapshot.paired else { throw WatchMessagingError.notPaired } guard snapshot.appInstalled else { throw WatchMessagingError.watchAppNotInstalled } - let payload: [String: Any] = [ + var payload: [String: Any] = [ "type": "watch.notify", "id": id, - "title": title, - "body": body, - "priority": priority?.rawValue ?? OpenClawNotificationPriority.active.rawValue, + "title": params.title, + "body": params.body, + "priority": params.priority?.rawValue ?? OpenClawNotificationPriority.active.rawValue, "sentAtMs": Int(Date().timeIntervalSince1970 * 1000), ] + if let promptId = Self.nonEmpty(params.promptId) { + payload["promptId"] = promptId + } + if let sessionKey = Self.nonEmpty(params.sessionKey) { + payload["sessionKey"] = sessionKey + } + if let kind = Self.nonEmpty(params.kind) { + payload["kind"] = kind + } + if let details = Self.nonEmpty(params.details) { + payload["details"] = details + } + if let expiresAtMs = params.expiresAtMs { + payload["expiresAtMs"] = expiresAtMs + } + if let risk = params.risk { + payload["risk"] = risk.rawValue + } + if let actions = params.actions, !actions.isEmpty { + payload["actions"] = actions.map { action in + var encoded: [String: Any] = [ + "id": action.id, + "label": action.label, + ] + if let style = Self.nonEmpty(action.style) { + encoded["style"] = style + } + return encoded + } + } if snapshot.reachable { do { @@ -120,6 +156,47 @@ final class WatchMessagingService: NSObject, WatchMessagingServicing, @unchecked } } + private func emitReply(_ event: WatchQuickReplyEvent) { + let handler: ((WatchQuickReplyEvent) -> Void)? + self.replyHandlerLock.lock() + handler = self.replyHandler + self.replyHandlerLock.unlock() + handler?(event) + } + + private static func nonEmpty(_ value: String?) -> String? { + let trimmed = value?.trimmingCharacters(in: .whitespacesAndNewlines) ?? "" + return trimmed.isEmpty ? nil : trimmed + } + + private static func parseQuickReplyPayload( + _ payload: [String: Any], + transport: String) -> WatchQuickReplyEvent? + { + guard (payload["type"] as? String) == "watch.reply" else { + return nil + } + guard let actionId = nonEmpty(payload["actionId"] as? String) else { + return nil + } + let promptId = nonEmpty(payload["promptId"] as? String) ?? "unknown" + let replyId = nonEmpty(payload["replyId"] as? String) ?? UUID().uuidString + let actionLabel = nonEmpty(payload["actionLabel"] as? String) + let sessionKey = nonEmpty(payload["sessionKey"] as? String) + let note = nonEmpty(payload["note"] as? String) + let sentAtMs = (payload["sentAtMs"] as? Int) ?? (payload["sentAtMs"] as? NSNumber)?.intValue + + return WatchQuickReplyEvent( + replyId: replyId, + promptId: promptId, + actionId: actionId, + actionLabel: actionLabel, + sessionKey: sessionKey, + note: note, + sentAtMs: sentAtMs, + transport: transport) + } + private func ensureActivated() async { guard let session = self.session else { return } if session.activationState == .activated { return } @@ -172,5 +249,32 @@ extension WatchMessagingService: WCSessionDelegate { session.activate() } + func session(_: WCSession, didReceiveMessage message: [String: Any]) { + guard let event = Self.parseQuickReplyPayload(message, transport: "sendMessage") else { + return + } + self.emitReply(event) + } + + func session( + _: WCSession, + didReceiveMessage message: [String: Any], + replyHandler: @escaping ([String: Any]) -> Void) + { + guard let event = Self.parseQuickReplyPayload(message, transport: "sendMessage") else { + replyHandler(["ok": false, "error": "unsupported_payload"]) + return + } + replyHandler(["ok": true]) + self.emitReply(event) + } + + func session(_: WCSession, didReceiveUserInfo userInfo: [String: Any]) { + guard let event = Self.parseQuickReplyPayload(userInfo, transport: "transferUserInfo") else { + return + } + self.emitReply(event) + } + func sessionReachabilityDidChange(_ session: WCSession) {} } diff --git a/apps/ios/Tests/NodeAppModelInvokeTests.swift b/apps/ios/Tests/NodeAppModelInvokeTests.swift index 403c08f5c..3d015afae 100644 --- a/apps/ios/Tests/NodeAppModelInvokeTests.swift +++ b/apps/ios/Tests/NodeAppModelInvokeTests.swift @@ -42,24 +42,28 @@ private final class MockWatchMessagingService: WatchMessagingServicing, @uncheck queuedForDelivery: false, transport: "sendMessage") var sendError: Error? - var lastSent: (id: String, title: String, body: String, priority: OpenClawNotificationPriority?)? + var lastSent: (id: String, params: OpenClawWatchNotifyParams)? + private var replyHandler: (@Sendable (WatchQuickReplyEvent) -> Void)? func status() async -> WatchMessagingStatus { self.currentStatus } - func sendNotification( - id: String, - title: String, - body: String, - priority: OpenClawNotificationPriority?) async throws -> WatchNotificationSendResult - { - self.lastSent = (id: id, title: title, body: body, priority: priority) + func setReplyHandler(_ handler: (@Sendable (WatchQuickReplyEvent) -> Void)?) { + self.replyHandler = handler + } + + func sendNotification(id: String, params: OpenClawWatchNotifyParams) async throws -> WatchNotificationSendResult { + self.lastSent = (id: id, params: params) if let sendError = self.sendError { throw sendError } return self.nextSendResult } + + func emitReply(_ event: WatchQuickReplyEvent) { + self.replyHandler?(event) + } } @Suite(.serialized) struct NodeAppModelInvokeTests { @@ -243,9 +247,9 @@ private final class MockWatchMessagingService: WatchMessagingServicing, @uncheck let res = await appModel._test_handleInvoke(req) #expect(res.ok == true) - #expect(watchService.lastSent?.title == "OpenClaw") - #expect(watchService.lastSent?.body == "Meeting with Peter is at 4pm") - #expect(watchService.lastSent?.priority == .timeSensitive) + #expect(watchService.lastSent?.params.title == "OpenClaw") + #expect(watchService.lastSent?.params.body == "Meeting with Peter is at 4pm") + #expect(watchService.lastSent?.params.priority == .timeSensitive) let payloadData = try #require(res.payloadJSON?.data(using: .utf8)) let payload = try JSONDecoder().decode(OpenClawWatchNotifyPayload.self, from: payloadData) @@ -292,6 +296,22 @@ private final class MockWatchMessagingService: WatchMessagingServicing, @uncheck #expect(res.error?.message.contains("WATCH_UNAVAILABLE") == true) } + @Test @MainActor func watchReplyQueuesWhenGatewayOffline() async { + let watchService = MockWatchMessagingService() + let appModel = NodeAppModel(watchMessagingService: watchService) + watchService.emitReply( + WatchQuickReplyEvent( + replyId: "reply-offline-1", + promptId: "prompt-1", + actionId: "approve", + actionLabel: "Approve", + sessionKey: "ios", + note: nil, + sentAtMs: 1234, + transport: "transferUserInfo")) + #expect(appModel._test_queuedWatchReplyCount() == 1) + } + @Test @MainActor func handleDeepLinkSetsErrorWhenNotConnected() async { let appModel = NodeAppModel() let url = URL(string: "openclaw://agent?message=hello")! diff --git a/apps/ios/WatchExtension/Sources/OpenClawWatchApp.swift b/apps/ios/WatchExtension/Sources/OpenClawWatchApp.swift index 6084f5744..4c123c49f 100644 --- a/apps/ios/WatchExtension/Sources/OpenClawWatchApp.swift +++ b/apps/ios/WatchExtension/Sources/OpenClawWatchApp.swift @@ -7,7 +7,15 @@ struct OpenClawWatchApp: App { var body: some Scene { WindowGroup { - WatchInboxView(store: self.inboxStore) + WatchInboxView(store: self.inboxStore) { action in + guard let receiver = self.receiver else { return } + let draft = self.inboxStore.makeReplyDraft(action: action) + self.inboxStore.markReplySending(actionLabel: action.label) + Task { @MainActor in + let result = await receiver.sendReply(draft) + self.inboxStore.markReplyResult(result, actionLabel: action.label) + } + } .task { if self.receiver == nil { let receiver = WatchConnectivityReceiver(store: self.inboxStore) diff --git a/apps/ios/WatchExtension/Sources/WatchConnectivityReceiver.swift b/apps/ios/WatchExtension/Sources/WatchConnectivityReceiver.swift index fd0d84cc5..da1c3c379 100644 --- a/apps/ios/WatchExtension/Sources/WatchConnectivityReceiver.swift +++ b/apps/ios/WatchExtension/Sources/WatchConnectivityReceiver.swift @@ -1,6 +1,23 @@ import Foundation import WatchConnectivity +struct WatchReplyDraft: Sendable { + var replyId: String + var promptId: String + var actionId: String + var actionLabel: String? + var sessionKey: String? + var note: String? + var sentAtMs: Int +} + +struct WatchReplySendResult: Sendable, Equatable { + var deliveredImmediately: Bool + var queuedForDelivery: Bool + var transport: String + var errorMessage: String? +} + final class WatchConnectivityReceiver: NSObject, @unchecked Sendable { private let store: WatchInboxStore private let session: WCSession? @@ -21,6 +38,114 @@ final class WatchConnectivityReceiver: NSObject, @unchecked Sendable { session.activate() } + private func ensureActivated() async { + guard let session = self.session else { return } + if session.activationState == .activated { + return + } + session.activate() + for _ in 0..<8 { + if session.activationState == .activated { + return + } + try? await Task.sleep(nanoseconds: 100_000_000) + } + } + + func sendReply(_ draft: WatchReplyDraft) async -> WatchReplySendResult { + await self.ensureActivated() + guard let session = self.session else { + return WatchReplySendResult( + deliveredImmediately: false, + queuedForDelivery: false, + transport: "none", + errorMessage: "watch session unavailable") + } + + var payload: [String: Any] = [ + "type": "watch.reply", + "replyId": draft.replyId, + "promptId": draft.promptId, + "actionId": draft.actionId, + "sentAtMs": draft.sentAtMs, + ] + if let actionLabel = draft.actionLabel?.trimmingCharacters(in: .whitespacesAndNewlines), + !actionLabel.isEmpty + { + payload["actionLabel"] = actionLabel + } + if let sessionKey = draft.sessionKey?.trimmingCharacters(in: .whitespacesAndNewlines), + !sessionKey.isEmpty + { + payload["sessionKey"] = sessionKey + } + if let note = draft.note?.trimmingCharacters(in: .whitespacesAndNewlines), !note.isEmpty { + payload["note"] = note + } + + if session.isReachable { + do { + try await withCheckedThrowingContinuation { continuation in + session.sendMessage(payload, replyHandler: { _ in + continuation.resume() + }, errorHandler: { error in + continuation.resume(throwing: error) + }) + } + return WatchReplySendResult( + deliveredImmediately: true, + queuedForDelivery: false, + transport: "sendMessage", + errorMessage: nil) + } catch { + // Fall through to queued delivery below. + } + } + + _ = session.transferUserInfo(payload) + return WatchReplySendResult( + deliveredImmediately: false, + queuedForDelivery: true, + transport: "transferUserInfo", + errorMessage: nil) + } + + private static func normalizeObject(_ value: Any) -> [String: Any]? { + if let object = value as? [String: Any] { + return object + } + if let object = value as? [AnyHashable: Any] { + var normalized: [String: Any] = [:] + normalized.reserveCapacity(object.count) + for (key, item) in object { + guard let stringKey = key as? String else { + continue + } + normalized[stringKey] = item + } + return normalized + } + return nil + } + + private static func parseActions(_ value: Any?) -> [WatchPromptAction] { + guard let raw = value as? [Any] else { + return [] + } + return raw.compactMap { item in + guard let obj = Self.normalizeObject(item) else { + return nil + } + let id = (obj["id"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines) ?? "" + let label = (obj["label"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines) ?? "" + guard !id.isEmpty, !label.isEmpty else { + return nil + } + let style = (obj["style"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines) + return WatchPromptAction(id: id, label: label, style: style) + } + } + private static func parseNotificationPayload(_ payload: [String: Any]) -> WatchNotifyMessage? { guard let type = payload["type"] as? String, type == "watch.notify" else { return nil @@ -38,12 +163,31 @@ final class WatchConnectivityReceiver: NSObject, @unchecked Sendable { let id = (payload["id"] as? String)? .trimmingCharacters(in: .whitespacesAndNewlines) let sentAtMs = (payload["sentAtMs"] as? Int) ?? (payload["sentAtMs"] as? NSNumber)?.intValue + let promptId = (payload["promptId"] as? String)? + .trimmingCharacters(in: .whitespacesAndNewlines) + let sessionKey = (payload["sessionKey"] as? String)? + .trimmingCharacters(in: .whitespacesAndNewlines) + let kind = (payload["kind"] as? String)? + .trimmingCharacters(in: .whitespacesAndNewlines) + let details = (payload["details"] as? String)? + .trimmingCharacters(in: .whitespacesAndNewlines) + let expiresAtMs = (payload["expiresAtMs"] as? Int) ?? (payload["expiresAtMs"] as? NSNumber)?.intValue + let risk = (payload["risk"] as? String)? + .trimmingCharacters(in: .whitespacesAndNewlines) + let actions = Self.parseActions(payload["actions"]) return WatchNotifyMessage( id: id, title: title, body: body, - sentAtMs: sentAtMs) + sentAtMs: sentAtMs, + promptId: promptId, + sessionKey: sessionKey, + kind: kind, + details: details, + expiresAtMs: expiresAtMs, + risk: risk, + actions: actions) } } diff --git a/apps/ios/WatchExtension/Sources/WatchInboxStore.swift b/apps/ios/WatchExtension/Sources/WatchInboxStore.swift index 0a715f16b..2ac1d75d6 100644 --- a/apps/ios/WatchExtension/Sources/WatchInboxStore.swift +++ b/apps/ios/WatchExtension/Sources/WatchInboxStore.swift @@ -3,11 +3,24 @@ import Observation import UserNotifications import WatchKit +struct WatchPromptAction: Codable, Sendable, Equatable, Identifiable { + var id: String + var label: String + var style: String? +} + struct WatchNotifyMessage: Sendable { var id: String? var title: String var body: String var sentAtMs: Int? + var promptId: String? + var sessionKey: String? + var kind: String? + var details: String? + var expiresAtMs: Int? + var risk: String? + var actions: [WatchPromptAction] } @MainActor @Observable final class WatchInboxStore { @@ -17,6 +30,15 @@ struct WatchNotifyMessage: Sendable { var transport: String var updatedAt: Date var lastDeliveryKey: String? + var promptId: String? + var sessionKey: String? + var kind: String? + var details: String? + var expiresAtMs: Int? + var risk: String? + var actions: [WatchPromptAction]? + var replyStatusText: String? + var replyStatusAt: Date? } private static let persistedStateKey = "watch.inbox.state.v1" @@ -26,6 +48,16 @@ struct WatchNotifyMessage: Sendable { var body = "Waiting for messages from your iPhone." var transport = "none" var updatedAt: Date? + var promptId: String? + var sessionKey: String? + var kind: String? + var details: String? + var expiresAtMs: Int? + var risk: String? + var actions: [WatchPromptAction] = [] + var replyStatusText: String? + var replyStatusAt: Date? + var isReplySending = false private var lastDeliveryKey: String? init(defaults: UserDefaults = .standard) { @@ -51,14 +83,25 @@ struct WatchNotifyMessage: Sendable { self.body = message.body self.transport = transport self.updatedAt = Date() + self.promptId = message.promptId + self.sessionKey = message.sessionKey + self.kind = message.kind + self.details = message.details + self.expiresAtMs = message.expiresAtMs + self.risk = message.risk + self.actions = message.actions self.lastDeliveryKey = deliveryKey + self.replyStatusText = nil + self.replyStatusAt = nil + self.isReplySending = false self.persistState() Task { await self.postLocalNotification( identifier: deliveryKey, title: normalizedTitle, - body: message.body) + body: message.body, + risk: message.risk) } } @@ -74,6 +117,15 @@ struct WatchNotifyMessage: Sendable { self.transport = state.transport self.updatedAt = state.updatedAt self.lastDeliveryKey = state.lastDeliveryKey + self.promptId = state.promptId + self.sessionKey = state.sessionKey + self.kind = state.kind + self.details = state.details + self.expiresAtMs = state.expiresAtMs + self.risk = state.risk + self.actions = state.actions ?? [] + self.replyStatusText = state.replyStatusText + self.replyStatusAt = state.replyStatusAt } private func persistState() { @@ -83,7 +135,16 @@ struct WatchNotifyMessage: Sendable { body: self.body, transport: self.transport, updatedAt: updatedAt, - lastDeliveryKey: self.lastDeliveryKey) + lastDeliveryKey: self.lastDeliveryKey, + promptId: self.promptId, + sessionKey: self.sessionKey, + kind: self.kind, + details: self.details, + expiresAtMs: self.expiresAtMs, + risk: self.risk, + actions: self.actions, + replyStatusText: self.replyStatusText, + replyStatusAt: self.replyStatusAt) guard let data = try? JSONEncoder().encode(state) else { return } self.defaults.set(data, forKey: Self.persistedStateKey) } @@ -106,7 +167,52 @@ struct WatchNotifyMessage: Sendable { } } - private func postLocalNotification(identifier: String, title: String, body: String) async { + private func mapHapticRisk(_ risk: String?) -> WKHapticType { + switch risk?.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() { + case "high": + return .failure + case "medium": + return .notification + default: + return .click + } + } + + func makeReplyDraft(action: WatchPromptAction) -> WatchReplyDraft { + let prompt = self.promptId?.trimmingCharacters(in: .whitespacesAndNewlines) + return WatchReplyDraft( + replyId: UUID().uuidString, + promptId: (prompt?.isEmpty == false) ? prompt! : "unknown", + actionId: action.id, + actionLabel: action.label, + sessionKey: self.sessionKey, + note: nil, + sentAtMs: Int(Date().timeIntervalSince1970 * 1000)) + } + + func markReplySending(actionLabel: String) { + self.isReplySending = true + self.replyStatusText = "Sending \(actionLabel)…" + self.replyStatusAt = Date() + self.persistState() + } + + func markReplyResult(_ result: WatchReplySendResult, actionLabel: String) { + self.isReplySending = false + if let errorMessage = result.errorMessage, !errorMessage.isEmpty { + self.replyStatusText = "Failed: \(errorMessage)" + } else if result.deliveredImmediately { + self.replyStatusText = "\(actionLabel): sent" + } else if result.queuedForDelivery { + self.replyStatusText = "\(actionLabel): queued" + } else { + self.replyStatusText = "\(actionLabel): sent" + } + self.replyStatusAt = Date() + self.persistState() + } + + private func postLocalNotification(identifier: String, title: String, body: String, risk: String?) async { let content = UNMutableNotificationContent() content.title = title content.body = body @@ -119,6 +225,6 @@ struct WatchNotifyMessage: Sendable { trigger: UNTimeIntervalNotificationTrigger(timeInterval: 0.2, repeats: false)) _ = try? await UNUserNotificationCenter.current().add(request) - WKInterfaceDevice.current().play(.notification) + WKInterfaceDevice.current().play(self.mapHapticRisk(risk)) } } diff --git a/apps/ios/WatchExtension/Sources/WatchInboxView.swift b/apps/ios/WatchExtension/Sources/WatchInboxView.swift index c5ea9a9f5..c6f944a94 100644 --- a/apps/ios/WatchExtension/Sources/WatchInboxView.swift +++ b/apps/ios/WatchExtension/Sources/WatchInboxView.swift @@ -2,6 +2,18 @@ import SwiftUI struct WatchInboxView: View { @Bindable var store: WatchInboxStore + var onAction: ((WatchPromptAction) -> Void)? + + private func role(for action: WatchPromptAction) -> ButtonRole? { + switch action.style?.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() { + case "destructive": + return .destructive + case "cancel": + return .cancel + default: + return nil + } + } var body: some View { ScrollView { @@ -14,6 +26,31 @@ struct WatchInboxView: View { .font(.body) .fixedSize(horizontal: false, vertical: true) + if let details = store.details, !details.isEmpty { + Text(details) + .font(.footnote) + .foregroundStyle(.secondary) + .fixedSize(horizontal: false, vertical: true) + } + + if !store.actions.isEmpty { + ForEach(store.actions) { action in + Button(role: self.role(for: action)) { + self.onAction?(action) + } label: { + Text(action.label) + .frame(maxWidth: .infinity) + } + .disabled(store.isReplySending) + } + } + + if let replyStatusText = store.replyStatusText, !replyStatusText.isEmpty { + Text(replyStatusText) + .font(.footnote) + .foregroundStyle(.secondary) + } + if let updatedAt = store.updatedAt { Text("Updated \(updatedAt.formatted(date: .omitted, time: .shortened))") .font(.footnote) diff --git a/apps/shared/OpenClawKit/Sources/OpenClawKit/WatchCommands.swift b/apps/shared/OpenClawKit/Sources/OpenClawKit/WatchCommands.swift index 814efe68a..0bd699071 100644 --- a/apps/shared/OpenClawKit/Sources/OpenClawKit/WatchCommands.swift +++ b/apps/shared/OpenClawKit/Sources/OpenClawKit/WatchCommands.swift @@ -5,6 +5,24 @@ public enum OpenClawWatchCommand: String, Codable, Sendable { case notify = "watch.notify" } +public enum OpenClawWatchRisk: String, Codable, Sendable, Equatable { + case low + case medium + case high +} + +public struct OpenClawWatchAction: Codable, Sendable, Equatable { + public var id: String + public var label: String + public var style: String? + + public init(id: String, label: String, style: String? = nil) { + self.id = id + self.label = label + self.style = style + } +} + public struct OpenClawWatchStatusPayload: Codable, Sendable, Equatable { public var supported: Bool public var paired: Bool @@ -31,11 +49,36 @@ public struct OpenClawWatchNotifyParams: Codable, Sendable, Equatable { public var title: String public var body: String public var priority: OpenClawNotificationPriority? + public var promptId: String? + public var sessionKey: String? + public var kind: String? + public var details: String? + public var expiresAtMs: Int? + public var risk: OpenClawWatchRisk? + public var actions: [OpenClawWatchAction]? - public init(title: String, body: String, priority: OpenClawNotificationPriority? = nil) { + public init( + title: String, + body: String, + priority: OpenClawNotificationPriority? = nil, + promptId: String? = nil, + sessionKey: String? = nil, + kind: String? = nil, + details: String? = nil, + expiresAtMs: Int? = nil, + risk: OpenClawWatchRisk? = nil, + actions: [OpenClawWatchAction]? = nil) + { self.title = title self.body = body self.priority = priority + self.promptId = promptId + self.sessionKey = sessionKey + self.kind = kind + self.details = details + self.expiresAtMs = expiresAtMs + self.risk = risk + self.actions = actions } } From fd8c6d1f77a2ab8366a3e02ae1626f3d87c733e9 Mon Sep 17 00:00:00 2001 From: Mariano <132747814+mbelinky@users.noreply.github.com> Date: Fri, 20 Feb 2026 16:41:41 +0000 Subject: [PATCH 0020/1007] iOS: refresh phone/watch app icons with lobster assets (#21997) Merged via /review-pr -> /prepare-pr -> /merge-pr. Prepared head SHA: d41caeff388ae14555543d42ca9cbf40582a23f7 Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com> Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com> Reviewed-by: @mbelinky --- CHANGELOG.md | 1 + .../AppIcon.appiconset/icon-1024.png | Bin 1393705 -> 213076 bytes .../AppIcon.appiconset/icon-20@1x.png | Bin 1929 -> 878 bytes .../AppIcon.appiconset/icon-20@2x.png | Bin 4332 -> 2383 bytes .../AppIcon.appiconset/icon-20@3x.png | Bin 8095 -> 4177 bytes .../AppIcon.appiconset/icon-29@1x.png | Bin 2834 -> 1459 bytes .../AppIcon.appiconset/icon-29@2x.png | Bin 7628 -> 4050 bytes .../AppIcon.appiconset/icon-29@3x.png | Bin 15054 -> 6951 bytes .../AppIcon.appiconset/icon-40@1x.png | Bin 4332 -> 2383 bytes .../AppIcon.appiconset/icon-40@2x.png | Bin 13064 -> 6170 bytes .../AppIcon.appiconset/icon-40@3x.png | Bin 26433 -> 10443 bytes .../AppIcon.appiconset/icon-60@2x.png | Bin 26433 -> 10443 bytes .../AppIcon.appiconset/icon-60@3x.png | Bin 54200 -> 17232 bytes .../AppIcon.appiconset/icon-76@2x.png | Bin 39887 -> 13936 bytes .../AppIcon.appiconset/icon-83.5@2x.png | Bin 47234 -> 15803 bytes .../AppIcon.appiconset/Contents.json | 116 ++++++++++++++++++ .../AppIcon.appiconset/watch-app-38@2x.png | Bin 0 -> 7845 bytes .../AppIcon.appiconset/watch-app-40@2x.png | Bin 0 -> 8759 bytes .../AppIcon.appiconset/watch-app-41@2x.png | Bin 0 -> 9281 bytes .../AppIcon.appiconset/watch-app-44@2x.png | Bin 0 -> 10297 bytes .../AppIcon.appiconset/watch-app-45@2x.png | Bin 0 -> 10544 bytes .../watch-companion-29@2x.png | Bin 0 -> 5032 bytes .../watch-companion-29@3x.png | Bin 0 -> 8650 bytes .../watch-marketing-1024.png | Bin 0 -> 206341 bytes .../watch-notification-38@2x.png | Bin 0 -> 3893 bytes .../watch-notification-42@2x.png | Bin 0 -> 4673 bytes .../watch-quicklook-38@2x.png | Bin 0 -> 19776 bytes .../watch-quicklook-42@2x.png | Bin 0 -> 23404 bytes .../watch-quicklook-44@2x.png | Bin 0 -> 26236 bytes .../watch-quicklook-45@2x.png | Bin 0 -> 28860 bytes .../WatchApp/Assets.xcassets/Contents.json | 6 + 31 files changed, 123 insertions(+) create mode 100644 apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-app-38@2x.png create mode 100644 apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-app-40@2x.png create mode 100644 apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-app-41@2x.png create mode 100644 apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-app-44@2x.png create mode 100644 apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-app-45@2x.png create mode 100644 apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-companion-29@2x.png create mode 100644 apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-companion-29@3x.png create mode 100644 apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-marketing-1024.png create mode 100644 apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-notification-38@2x.png create mode 100644 apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-notification-42@2x.png create mode 100644 apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-quicklook-38@2x.png create mode 100644 apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-quicklook-42@2x.png create mode 100644 apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-quicklook-44@2x.png create mode 100644 apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-quicklook-45@2x.png create mode 100644 apps/ios/WatchApp/Assets.xcassets/Contents.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 903123adb..f5bb02f99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,7 @@ Docs: https://docs.openclaw.ai - macOS/Security: reject non-loopback `ws://` remote gateway URLs in macOS remote config to block insecure plaintext websocket endpoints. (#21971) Thanks @mbelinky. - Browser/Security: block upload path symlink escapes so browser upload sources cannot traverse outside the allowed workspace via symlinked paths. (#21972) Thanks @mbelinky. - iOS/Watch: add actionable watch approval/reject controls and quick-reply actions so watch-originated approvals and responses can be sent directly from notification flows. (#21996) Thanks @mbelinky. +- iOS/Watch: refresh iOS and watch app icon assets with the lobster icon set to keep phone/watch branding aligned. (#21997) Thanks @mbelinky. - CLI/Onboarding: fix Anthropic-compatible custom provider verification by normalizing base URLs to avoid duplicate `/v1` paths during setup checks. (#21336) Thanks @17jmumford. - Security/Dependencies: bump transitive `hono` usage to `4.11.10` to incorporate timing-safe authentication comparison hardening for `basicAuth`/`bearerAuth` (`GHSA-gq3j-xvxp-8hrf`). Thanks @vincentkoc. diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-1024.png index 1ebd257d93f50734c55f46f1590af529f10d26c8..727447359895dc38222e4c7b3140b6bdf3103c87 100644 GIT binary patch literal 213076 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 NrB`b5<#HCG{|9)Nul)c3 literal 1393705 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�yoMo-wvxo)1}BV!eTNDbCQ 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̺HUq0qg{FWbZ^!Ff)?+P?aWqyc{kgO}1Ko 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

?sil+#W^Exu4 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�lX1a6J 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έrlIm{8^ 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 z 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 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-20@1x.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-20@1x.png index 0aa1506a095c4c7127fb0aac580df412ea745865..597a51c28c5baf3efc98d08f4f9569d99f64c950 100644 GIT binary patch delta 856 zcmV-e1E>6n5AFt#BYy)mNkl)iK*cB^)xk~AS z2P&NNK*6_L{-t*Br;RQFfcxysxk|R8l3A3<`41iMbgepV=w$N4l&+nwRTtd82aC?9#}8(CC=iPpJG0)GN_}{E|3jDSzjS&4aKxVe{lwANmfKw6 z#RGOHPN-4?&7A-BZ`Rxnmbb$vrf4AKn#4nP=G7_H_JfqJAF?wDkk(n#56_je9|yQ1 z(E%_R{Vj@Hen@(L@P{|lDG>k`sQEM@QZ9u_n25KIR)601;%ljTru@eTqu)pwKqy27cn9=n>svIL5$UbXqj^_#hR{O)J zuPlEb!hZpSp_C<^R&&|svX4NF6U3Sy@oZ|QxdH%@ zZY*^@YNrLEpEovf5`4pmH@$^GrEGcqmvd&>V6IT8X}~m3LM3I+JJvs5ACvf2_ua*b zIZ?|r7<=>Z>?`>cB7EYG&ezwul--g4Ux(iYL6DQ82&KpKHX>eiJt>k~ul8cHF>XJ> iyH&V1;~lW)V)_>!6m^J5I_=j00000t&@)i7<5EyiuqjGOvkG!?gK7uzY?U%fN(!v>^~=l4^~#O)@{7{- z4J|D#^$m>ljf`}GDs+o0^GXscbn}XpA%?)raY-#sF3Kz@$;{7F0GXSZlwVq6tE2?7 z2o50bEXc?&$uG{xFMwN@R}A$V(3kpfX?;UI1AS};covi-n*japS^=~H>SCbP$zb;u zm!#+;DbP1EFtE@yFw!-$)Q7tm=pY-oHCE0=sVSKycD{)zsS4$pB^e6t`T6NNsS1vs zHVDVSR3ZFhgJg@9OJ;gzNn%cLerZv1YDi^4svXo_$z^(Qr{$%V7boYZq!#O^K$I7Q zm6rgO>z5QIX6B`)IOe417XjUno0;qjbXB4avR|;+LX30VGIQwUB)CmbXW8h3k^)lF zfTTOHC@|sKaoOm@6R{oFyk#Dr7=XFJ)5S5wLQpj%HY3JW#O`zP^Lux9mz(eQHJfe1 z>APX$#RW@EMUvm}YXzy;aXLBvQs~&HB@w_f|BrJ`s7a_ux02GY01X$DtzKKV&Q_Y0 zmFs-l_s*3a|I6Rs+duR1oi8?L&d8oKe}3ov?=%i2ts_e}@2{(T)xPw-zL1l`O-7Xi z4(yCgRl;A*9sCbDw||qJJ>R;jpe@L0kw)FSr`yHF{h2fbluo+KoOu3a&(#d!!w#B^ zqAKl&9G5?2nfo;Fzwq(-zaE@r-B$l@qIi7OTuUYzGMet~-m)F=+b!ljzg`URL>1D5Xqb zcYg$5+d-A=b5f=HOQM2kWCU0(dXyD_G7dfZ(E7P_BZ*1z`6j>)oh zYyN)r%b2ev6Y1JC%UQQ)-WEHPi<7b%eY*}j?M%$qXpioYEbx`mSy>bMt=GU`-7D7M zBV&eU#->ZjkC^tdI8F?{aaaEs*Q0}pmqHF*_>^dK+Faw<-y`N*mA7p+{Zy7S-Ty$B zQdz9!`DFveHqPooUMZP zR=Ibjd)PeRZ``%{*jl40{}weTKA3dk`mu{Gx!YI!E^0R7mEZEnhh<}#(FX6cAw4SD zt5%8E-;>r}eq5nI`EPf~_wBwj@}@4hlA|gYHp!?*=+y>|CmP?Q1bvn?Y0sQ#;F|_a%ZW88ysnqWE7-thp}sCGGy)?3uRrzn$HAgm3D`dmXRW zePLRut<@_%dsb#>epkt>n}=8Gm1{*Cw7z~(UX%JqHhucteR`V~MW6J_pDS|e^@r1J z`>$eEmQtnfLe2 j|Gwh(x3AKuZ2QOlH1Xd8Q?Ik2x|PAx)z4*}Q$iB}b9NA! diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png index dd8a14724eb439e481ecbc7009f76ee6cd9d2151..28c7bb997fc0632e15c38a1104f970f7d04972e6 100644 GIT binary patch delta 2373 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 Rpa1nAL08jAqejgs;y+S4;OYPX diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png index ca160dc2e84624c09157b46647ebfb9e0b963a08..f06104aeb3f0b922be50ce5a8c3384b4df92d050 100644 GIT binary patch literal 4177 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 literal 8095 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 literal 2834 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 literal 7628 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 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png index e12fff03140063443d59f7db08bff3ad2d91217b..609a96df603553b56d1fae8a75b6db034b6619ec 100644 GIT binary patch literal 6951 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 Rpa1nAL08jAqejgs;y+S4;OYPX diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png index 9b3da5155efec127adbe4df5bf61d57ba5e53666..4d3cb60e1f634f3c50b114d2f98b98178fa7ff1b 100644 GIT binary patch literal 6170 zcmV+#80F`QP)s4J=u`OHf7#mYej19q<5HKB*kSxh2Ij~C!VS!|qmax0YS=i8W&Vo-8 zAR#P)(5u051KV-MMYbiY%c`&Uck9faxmS{96-zR9Hh=g#I`8P+H|6_gzViFNnG3)f zIzwmZ44t7fbcX)F2u`9Y>~Bmd1%DrO8d-v4{BO-_(J7vCv{}adb>icI3AgkF{D4q^ zU@{s*5U|-PForBGf{>hs%^x-_h5$fBDJ2kke11R(KqwiFOjHao>Qe{-rEDeu5MWZ> z_0?tfP6@_yd7n*uwmtmBhAsU~ZFaZQ2>{5+vYt+X(?p`=al0u1sZ0jsbJnx(UwH1r zGs|O{oL3T`ZSVWlrtJ_=VzNysg=4HfH}Vleh!6q<(NGm@fhotY4miDybr3)w0vAjE zcdDvp3h3P8;F8L+5{DhCN{Sb6eSbq^SNAF0XN&dPsnt&{Us4JT$_w4;%#mbfTUX!S zta3|rsr&Fg$nkbn`Cjc=&+T<9$s_=P&CZKdQ%2=v_zqi*rj(bxuyX18p6KISc5A6b zMOF32bEfmXM=37=LJW@Q{6S|r!5Nw&E1F>#lm;d7&*igj`NJCs5ORw2nnO@0^pQ(0 zd_*C)~d5+?%RPAJ}mlT zrjhrv1tG7g(bCFGHt+B2?X@O=5Ml@nI_ZF6btIH&rsYc9f#CYf&o6I3qHqEn9Bl{# zR#*}!aX1{Brl)0@aGazn>g)w8*X=yg);`pp(Xjb6Rmnx8ieX>`IiAlNG?LBc5jQ*} z44KR@45!oi=Y-tX+lvRJrIhM~ovg; zhIpQ_0U=am%`k>>a7+SThV5DcB3C=^o;A#CnE)pf}q zc&sbca zotOn3Ho_1Gmg1ZRVBqYI#5d}GOefW<%`aiObH?DOMiQ?Sq>B;T{98SI18r$SgvO8 zykwaHpk|QaJ8bFFtm>*eS6%Wy*R1-nm&+v*2;*_3B>*@u+J)^~8X7Tzx?%7x_lv79 zy)@Y!$tj%8CMM%oRF+scW?X>*0Lx1YT!|>$x~ z(I0#*l7_mD0kCU3{JR(TFX2z5oCL76WYH#9R{g=lG!pDK9(A%{_d(A6~i z(iO`^rwb4QiSc}WEAjZCu8+?dr8>e~XZuy5mS4c+;|pu(fMqd(O{bT~0Z0$2NrJ_Sz-Jrl!m23qC0S}KS56aQp-R`TU9{1!`_yH2cI@QxMkkx#^t5VdkH;0i8V#TIz)4BVl0ZCtf@RVP4ng76o6LT?X2k4N)8gdqRi| zLv{OhL=x6|Uo^F1X`;v9a9}yjOFS>y>??S~Uw`1-c=tI$uccEvdLmhmA2IbC&H!@< zf`}ub-%T%=!rutIdC9_-^32E1P1A z%1|Q#Ecfo$b4}AqYyu}qgy{m)^FQv`yUh`BV>CQ@p9HaW)Fpef!c1f6FvA6Ij>bEA zn`ox;CpQsL6tSZE{{1b9aM&sa5DIvktwQ28O#>8&k`0JrDw{PS2ha$uzzm|8GqR6d zDtX_|L&lV9q~z%Y9Lh+d5b%KZNzR?^or5+tLSRZUg!xo*t3vH|`?yeMRB1I$^Laf_ zXW@o@br?azs?-2b5e(D{ST+nD!XjO{clpv=&RO6~#SMrwN(*&)c5$I;oGdHG2<@qF zc&IB?SXRzT#go@HLa0-cwyU78x6i^nqX=wq3;=kuy+;ieB7K}_Jc_isUgWfYTu}AM z2kS8N)BPy~0N|#%GdWVQ=rPDW+_)5ykjQ%PwvwWnf4{qMMv2u2S z!=_JW^$kj0JikH58|w}uRyjRk9A-aK@@zwgT3R8hvToVg1m^Ja{1#8~%^z$^L?Xa6 zT{F@$xtEp~mq)r;q1T$5d1J(cHwjXzKvbDc+&F)hd3404W8EPn`P?mUeX^x$j#m;V zWMU8+0HSqOp z-S$*6i4huf60F<`;5W+xFqH&&lw+NKCOA$`#8>hJar__*WEDIFli|>HZ>()Dt(J%} zCcD$KV2Yhl0WfP?^+gg&tJ=`g;YcQO23bIr+M=LU=(W0A%uNjjBvmFS z$P;wkP7R;H`>UsZ;w!&&cgvF-w?Ts;STM5jSfgOm`~bw~%%1tJnN^FBUZUp3WNg%Z zCIE^EReSW_{Ek;6Jau;x0K9&Sba~7A_4+{UZN@z4-38*P2Hb{k(pC z$)YD`l=`|_v&2jxM+!ix=J6dx!cG-@6i%)?a0r;$=vWCoJOLACj!Lbb(Bb^=WsAS7 zCz7f*YEni3;51eA2R;);E31UjiVK&)Rzwg^VDVt0( zY&hE74Au)`Hj%g@+VRgsf1MO!R+cxCe9T za@Z@OR7FO<>N~P|7_3dlw zd)NERJq1N>2#BT{=1KcdyC8ttG3=C_`#QT>!eAGGB2!k!LsXG*ahdOd$B@qtbR8H5 zbbH)Cya&2Hz=Rg8WFX76Jd>v*mgtaNc8(h+EM=Yr5KXfaJy=k%*;9PY;qLq1{WO!y zP4MInO`y$SQ@U}-uIt|V^q&%7XX!MlpvcE_Sdn#|Nlwi8L`@Uu<-~kGZ+E$tRg}oG z!rUz}pv~d?w_m!h{g&%nKcK2Y<-F_qZ+m}mxA%^pP{MWwA*dS0bVNj(jjGC#oFWJU zJ4hUeI=Zf7Rq=7i9xSM@m~m%}T>ar^8}}Z-lR1t?6K`tTGZIAMe>ZHt?3MSfKHT$? z7*J=<4HOmo1l~>wHZ-bf2y@NpJXMuqpSO}nDvMH>btU6y`6c`5c5uF^o!^FlS0RpfrjFf-uoEq-!>!`vopgP@qn$eF3^w*L5y? zeeH{zwn(BVaNMLoKR21iY!6?$?83b{_4%Fqx79apt8e^eS=q|k>F4{(YKS_8YPNjV z>vcEwFo!v#xX58>nf}Ts5$7#rsVRVj=L&!EYpQ9$?y%}-!tD9VuC2_d0rVK!)Sz!q z1E}u}d8z|4!g;&1gA@1X^}oh*>vrt!?CJslc>MnFEGNkw*CM#>q;zjFpQd#LI6Np zZ>X&|)X$|P)s~f9UR!fzd2p7RbtYq}?zS`ld%b0$P>4-1;j0GR#056br^x%g@mr^t zC0bj;vVzk`t5N4q9L~GvP3c-#voDoPy1a*?@hxqg2U}XJ%gX?j`@yEop5OF|e&auY z8ME%Y_ukg_b^yR54?q0T+O@g$A1Pn#gf=_7VrDkhGHf%eOG_@OD4SE@FNa1A56d*! ztL4?U`kbyuIbJuYudMXlXc`zgLTDsrJ_Q0BCb;|Li+#TFKKl6cZQBH1xM=AG`7Ij~ zk3YiT#}Kk$#=XnV`)8U=#3RtqRZUYVh_T3pk;v<+QtGt7stYe~+Bj;4aB2hwmZ@mk zgP-l1e*M>$cQ(WlNrU4V62n*pK-P(_=7FZ>0W-qpwl**=Fwm1gNiw>QMt^i`&Bd!0 z%v}hGo_^uU=%#fnxN_`xwZA1ooLRL6`CKv+i6|P6F=V%DOfW|X&F4$K-p>oG{^f&> zM45Cwgqxherj?~*vDGiX^`j;8@2Q*`h=sDboB|kTL{-cM( zvZ^H62?l3(ET3I_`_jd~+_3eFrWQ-p{}uvM^D~;wtrE!1HNn;;vv=jRE#X96GaSiw#u62Fb)eoFO%wj(#$Y~KjF@)cEaarVB>o*saH)7E#Oxuq@= zzf=^Hl#YJ|%H*9#s2B6OY|bf(_n$pyj>kTyq$r@~rCf$)qM0rkLAr+8>KYnZO=B|A zXpl~(u5Tq05P&s%4;?C)B0vyQ^=LFIx3##A)Ge1|clm{Li-UlW9la4w5Qd%Tk2$7! zi=|1?A)pu5O#Rm~&qbMtyWv2-r7;o;g%lMSdSb@BU+k;{U*aSPom@A|SBH9gzq@U} zJZnLaUCF0J6m?NbBR&z0)d=iF^FT7Ai4vNiQWFA1shzM}H8X5NCY4G;tcwzrYyd(Z zAl$6^cO2~K3x&SS9dvYZ-3AM~bHXLnK6*Zz9=!)@EYsQm zuj}f$cEOzQO`ATK$bMZ#>E!uNVZpTOLmi#nlCuWE{CJL1@huMkz&pbI0yC_tsSw2Im(Q2$|G8dr2yl z(iC||-k2xZvI=_x;e_K*yC{B~lC!B)4uZ!+*}9Gt@Nh>`-SypDtk*|Q$=ehVoFc*& z037jr#iE7p%qR%AH1iIJ^#;L6qU^GR94IWj>TvI-hNdx#t|RBmecsm$@w4W3vmfhj4uY(&r%GCI z3U_$)(Ms*pUNE8GjN-2;3BWS<({lDbcUCWcij1y%E z{H>_0tZZ?>{ng5{vkLKj;D`ybz4{PPxot$@HCHa&S4%}4yq;Z z_BbR70Gg2%J(V0ZEvDzE|20l{x+gd`6D!{_$TIY*3WJ>Horu%%(&FfB{B5Q=ZptC? s>F?*w+%t5B&d?b;Lucp=fzwX^2VRAVodGX%0RR9107*qoM6N<$f=c_=#{d8T literal 13064 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 UpSCpl=N}Up2}SX0QKO*$1GX5EGynhq diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png index f57a0c1323c68de3cf69ad1eb96ec436709eec1e..d2bbed7f8be8b432cc0ccc1cdef252a1e9dbfe78 100644 GIT binary patch literal 10443 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 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png index f57a0c1323c68de3cf69ad1eb96ec436709eec1e..d2bbed7f8be8b432cc0ccc1cdef252a1e9dbfe78 100644 GIT binary patch literal 10443 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 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png index b94278f29d07b9b42b2fb0bf889c192ecb14d1e6..08dc3dc96e5f23731c71b8a653430a9394d4f494 100644 GIT binary patch literal 17232 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 B+G_v+ literal 54200 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

IPkZ^m@x3@4_{ncK5Kgztq~_wu04f;fVy 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 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png index 2d6240dc679c4d71f262e0196bc8ea275f4f4209..af7ae5efaedee5d9b65ac7e12bca022b4f7ec262 100644 GIT binary patch literal 13936 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 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png index 7321091c561e01119c292785b08f7889397d02f1..27dad1842fe20c88c537b111294d9e1713c5b8cd 100644 GIT binary patch literal 15803 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 Uc3JYDDH|XwsU%S^W*qYW0P6?%g#Z8m literal 47234 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 z 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 diff --git a/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/Contents.json b/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..a72027bb4 --- /dev/null +++ b/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,116 @@ +{ + "images": [ + { + "idiom": "watch", + "role": "notificationCenter", + "subtype": "38mm", + "size": "24x24", + "scale": "2x", + "filename": "watch-notification-38@2x.png" + }, + { + "idiom": "watch", + "role": "notificationCenter", + "subtype": "42mm", + "size": "27.5x27.5", + "scale": "2x", + "filename": "watch-notification-42@2x.png" + }, + { + "idiom": "watch", + "role": "companionSettings", + "size": "29x29", + "scale": "2x", + "filename": "watch-companion-29@2x.png" + }, + { + "idiom": "watch", + "role": "companionSettings", + "size": "29x29", + "scale": "3x", + "filename": "watch-companion-29@3x.png" + }, + { + "idiom": "watch", + "role": "appLauncher", + "subtype": "38mm", + "size": "40x40", + "scale": "2x", + "filename": "watch-app-38@2x.png" + }, + { + "idiom": "watch", + "role": "appLauncher", + "subtype": "40mm", + "size": "44x44", + "scale": "2x", + "filename": "watch-app-40@2x.png" + }, + { + "idiom": "watch", + "role": "appLauncher", + "subtype": "41mm", + "size": "46x46", + "scale": "2x", + "filename": "watch-app-41@2x.png" + }, + { + "idiom": "watch", + "role": "appLauncher", + "subtype": "44mm", + "size": "50x50", + "scale": "2x", + "filename": "watch-app-44@2x.png" + }, + { + "idiom": "watch", + "role": "appLauncher", + "subtype": "45mm", + "size": "51x51", + "scale": "2x", + "filename": "watch-app-45@2x.png" + }, + { + "idiom": "watch", + "role": "quickLook", + "subtype": "38mm", + "size": "86x86", + "scale": "2x", + "filename": "watch-quicklook-38@2x.png" + }, + { + "idiom": "watch", + "role": "quickLook", + "subtype": "42mm", + "size": "98x98", + "scale": "2x", + "filename": "watch-quicklook-42@2x.png" + }, + { + "idiom": "watch", + "role": "quickLook", + "subtype": "44mm", + "size": "108x108", + "scale": "2x", + "filename": "watch-quicklook-44@2x.png" + }, + { + "idiom": "watch", + "role": "quickLook", + "subtype": "45mm", + "size": "117x117", + "scale": "2x", + "filename": "watch-quicklook-45@2x.png" + }, + { + "idiom": "watch-marketing", + "size": "1024x1024", + "scale": "1x", + "filename": "watch-marketing-1024.png" + } + ], + "info": { + "version": 1, + "author": "xcode" + } +} diff --git a/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-app-38@2x.png b/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-app-38@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..82829afb947e2eab87442e658f7fc2ed03aaae66 GIT binary patch literal 7845 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 literal 0 HcmV?d00001 diff --git a/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-app-40@2x.png b/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-app-40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..114d4606420cb4dd8c3955d572a6b98521254b14 GIT binary patch literal 8759 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 literal 0 HcmV?d00001 diff --git a/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-app-41@2x.png b/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-app-41@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5f9578b1b9751ae556a718c420ba5eb510d652a2 GIT binary patch literal 9281 zcmV-HB);2;P)FMb-W8_Ez`T3!~MvfFDE$z4leWFBUWl0B*3-a>?$;=e^ z(NVtxKu8ClpD@79r=6K8+B!4;&d3n^UR-u+KCr9Os}fB?01&D9ZhM(39h*;b8PV zrKQ#+fI#s_?+v#$H(K`l{F+b<65xXHioMZ$AAR6XY4^@V=5e1Yo?SZ1s>tCoXTTW) zXP6zzAG+)A{*OKXyqGgbBFAYHyR+vILRiJJhti`~y_cbTJwRm{G$0TJ5_s;_=L(;> z;nGcF*w`BS_4>qp9u{ zA7efp0&X^tmd19!^!VA%7ngnfsNGrc@P<$C=s)A!Eg&nPmhHYw@_Q8_D~te<3`#)a zM!bE?h8HAV2Tj)@U@&lV&Vhg+gtD;OYKit9aD(9dMIeO#^5!Mm{68topQu;tA_ z`$m+#vHUi2!)l-triP-UA-H5WYqJ}SU+9$y3f|V zUNkQU+7b94;~XS{SW1WC_GB+CV3rbs`dozE3 zN949mFE%zcF)GW_fw7xLS#ZH|{!}^?6b`c021Z2mCg{_DGpVUqXsfP_M8%@L`vrVw zU3hKM?f3tqBlFTO;8|IzQd(LzD|z$Pb6p!hS?4a=1%{#u;9SU@Q%9H$bWH;<<3K3w z#*G?P4XLU000^iN zgqZFkE{je#daOQid8K7DY}M4*d|Cv@ObOclLzi2J zqa=bbgL)!*>HOSTZ<>=I5qhY&+hczlKKwAU_?4&5F#$P2pyS?9`qJZP7k~bFoY^jV zSSTY#n0*)*r@rfpa``ATD2}lU?NXpbMlA4e#KsvOPW{71y^?hMeK{T3@uRC~YAR%< z&XN4L+_%WvE4EqUOcGrf)WL!l(P_01(LeEvr1NI&YV%w1p=M@g@{*F0p~KhyZFBF> zKmK%Y=KWV8P-X<%O=3d>(GG z5FBGSyW=VW$s6vh+D1Sa(%qLp^*#csiVbvmdb$9i z27J9nzx&!`l9`E_030-8bs$h|lOq5$Z7C35E`+sg*RFwTVgAFUrCA0^>YjE3uy948 zzKG~eN%I!07U@7U(3}uLwh5ukx;ZV&`rVdOS~SB55-ObT#(~b2FU&Rvnx5WuEzeFv zn=0&2Ju=<0uVR2M%ecAgVR_$;j=27^7YS~1nVFE0A2KT|uAKjgH!|kya8*Gi=+1^s z1f@dqxUEV>*(+6f-;LNKL?mL^p0XSO9BnE7TlUWKf&0_%UZpIU^S$yvcjiO>4--+< zx@5Bt62TY|VRjJ1M*lfvo6~6qrU+z(_g;KQmUC~(r5?r^k*G{%Nr1;Kq@4w4nYvw2 z(DjG>a;<4srLy9g7A=6g94C^bGzNl3#J;j?s&2b>C6Q&Gk(r5;mNE(9M&Eu*nJtV1 zLyWpEXw!Y@$p7@+Fj(^754Kyc*Swu<}xc{rGMFm>u6=!Rz*)iCUhMks=+{q)?D`FBi;^ z6^$#ZXbW1pBb+f2=5P?BcmL(dgftgjaDhrTZZu*te)q6z*N-=Nd_J9E(9vo)(Wq;h z21Hhe>=h!K0PusgqcdW*#2G+igUwte2R;x$WLa)#YBr*Fd_TWp$)Xn~=H}|9r8#OE zAqLu+RhHdGYW7i3lrFi5xS}O= zbw`eE3dZ(Xvo9)oy?5%&&j22Rl+4Tn-cN@h?!9B~!;yt~k2GnTLBNbIJKH%6CqnX_ zGG%N0b8k#7UjEF?=q>9%^OqEXE~|o??rHnqb5J6AM~+<+|KeXSL|+!|c&BIGmf`&1 z16DqF)=Fn(=?yK0VZc$w&Iu7xFd*y$2h*1GF1<2g?!v5!yROf%|CD>Cn+Zlp=RGrY zDI-)x@}*qxw?2#icunU6AAAT4C&eEq_Fh>D`XIfM8Cm87;3gr;K>sNL>xm2uT70;R>m zw&sJEindvMbi`o&M(tz~h02=4PX@xy68nItmu6fb5V7^3T8h z+hCNdUO`1B9s64pfO-WHw61!9vTX6Eys|vTpi-w(wxJ2&90*8y&>|mD&m+Iyt=z~l z`^MUd*DGs#ia@6nkv{goIp;R36_}zfA3;dHNI%nDeFjd2QVfn{LM7R>>IX(o&431f z@E$Wa(wg`hLdbsI8Tp>gVlmr3R`-+u(Fhf+tOSIoMZ&hbHFw53?5o38Nmy9-y+Q;- zwV3JL&fHHpqdvP+*CwC#zIkEf?PlMmw(yQaZjR z?uhzuU<~*lCa}5#Ha=<2K{z6mpEdl*E<3cTB(|S~jdVNK?4(;I09cqLfsv5BrSg{h z3e8MgYMQAj`vDBr+=yDNdHVs(V5+Uaa>#hw{qmV-n%9}8eIv;-+U1j1gd!`k%wVj2UlJdW1gx9~Y*&LV6!$(=ML zEAg87YeGzcYz74dp{(BzTb;5Vv;qxzAEs>(f(R{WR;kTK2obU#1kutIi+^Sp6quzo zEN~>xUAW1cH26J-)hc0MCv775;1vaUY@b5>GiO97YuQ{Vz9xm722pv0_nv#>t>sBy+Q_l%k{rJ5t@s5LxKiH$`kR#45GqM%|DLj0O8 zRGV#Ffe?LC4PBz%7KgcEQiN*DC zC)z}E3ne7zh$yYS?3!=Qr=1qsgF074HmO@@%BK?I7lVhdvpXE*Snf`jgb?7GZbbKT z$&EwDJThRxUGE`Zq>UnB=1{V;*#^O_qP~8nKY)b~;e2 zN!b|ia5RfY@rpX|Qc_G-lsq#)+bL+LFVl5_H z7SA*lCN0zk%8blRwr$}AB{B2qKeP-Pz0&1$$O3Z~CjfNB1hH|4IUDOHO?koGS6akrKMyi3+vJgu zoq5*_cMAqL2R=j41B7xP)(j5<4DX>nH&JUVAH-T|MyOiUc7vGk>NZ293#vW4^4^y5 z)4qzZS`}d!XseEQLddKoT72T`<7TB*ntYoMNSz&f_*q#dt-yQd;#b^#`Zt7gLlJ`O z-L-*S2<}i-sU>01>K|VG>zs=S2_jwLV6aUZ1Ar*}%j?7BJ-f&I3_~0~&NlMRA&nCv zd2}W$HI>s`AG|X;6M$#6u9VQnL}WlZVCBjC=<^o^CZ4+4Zc!y+1{z%##6W=1!wg;V z#Kkvhw=a4gwc9L^cRSK-1!B~wQ4KIH<$9Koyf@lrQ!vRcI5#j+)mZ`!1|C)r)E(t2 zT=iPkr56yQ^Y%D+IXR~1XWN=H&+hlw1d-7HKDHVP0aTHhrLkT}8`jRoOR0wuL~s*D zHZX!-xb)?V0`ZB}3Nt!g;X(6(bH=$7El46&RpH4)Yy87Urw$!Dv=WsE`{<~RW9AkNwn<>N6p2>m^`#mKl`HJ_PyrDx6R44Qp2$B zX_n$%dg9io&;Pl+sji-xMdmIDXN)@{B52E*=l&+~{zv}W#+LoLm_eX?`4bl?-)wqU zDl3Wf2{VmJjs>=i6`*iO0HRzw<;3JQ+RTfy<4;TZ-u%3iV54-cB90o8mPXrnb9q9j z5ubgQK;M7;S?lf{7h$!Z9D~0igy5>+lt)AfF?hst^|wFx_?YD68uPPOP%7@4|B?Nt zZI`&Yz^ql505_{f1SH?s$)ERo;jMGTLyVHlP;IxMprDWAuINznpOTbN?q2^%-qgMm(pTpgqNMoaQWn=rmCX|(fr?TP@r<} zq<~5GL_YX2+n_-z3!||CoCV+C()~WNNBOEw;E^BO_cfu?k}nFaudb$Id;2AVg6}gWs>K zdkP1TlA@acK*7&!8&^-VYyN(ksokvwfHt7b%;iBCwf%l5|Aa6?h1K2cP}hDiE%Z4B zUii}`YVpnppTRWjyEDZFb2BvzZjp#gWZACxJW)93f&yUOJsR1?qTSD8a=C>d36y4+ z{4?u3`-as|JBxOV3N|-EK!8DHg?3ow5f};*Dv)C4i1-*IH1m4i_roQh7Y}5KgYp#S zzryIiT`@`c0?5VcP)zTO z8C(S+TbvP6AaU@wo>R}cYw)%6HshSzOiFj;xGFwvME8N0q<*^knKvf2Og!x-HgIrp zOs`(Dl^Yb9S7=j@>N+w8Qkb2RehGQ44FdIhrwatI?K|l0at=|8mVoP-m1aiH^eXV4 zFgwIN`v!zxH6H{%q_&(nrBn|F32CYuho{xd`}-yQ#1sow3EI!{hIr`=Njz4;XcR`H ziG#}BUh`?yPN7^I*FGoO&afQ+YC24DWy>7E(qFV+VnZ?{KA zk#GVM`m7jX3IS+_xarTDEL}kYifTae;8JX>sJyVhq$tyU!60gxS>_UcA2_aC0QU1Q z15I$$Fc})ZZ5PrpVU>!dNB5%D9ER#<^06HS7WA&xEd2n7;RXDcIV`6t`Nb)fc zP?^UHLO!(+49AACg@b~m*zJTT4k_@SHuE9hldn%2u;hhzk?`3TkR2~x-8Lx)3%ZM_ z=@|ediI8dlSh`M#=Z8PG_;huD)tz$v{|2%7zm$zWk{=q0O!>=f^XfwOkf>p^Fo>~N#=tH=57u_LI?>O zT*x32EuVZe1^~Y1qo;WJ+J7}ugW0*nDPfFSDIpeB1z`&VpEKI)b2`^BXVi-o%U=E# z6L;{3rGWhPg&7&$w%I2Ia5G_(kwI>%FMi{eM<2+od}!IqiG+9oU>(THx~gwBjR{jF?a+XGlwuenXhyJ95}F3;fFzJ(`~18y zMnppNA72jP>Wm0&q#!^^9s)En8t|clBq2S4g)>ayHjF^P>qn0+?nA&G8x;{zFDNj3 zI5Wb-i$zqgZy;&#*KGP(pZA}5dXY&4eSA3}$J_E$=8fd>hpya}GV?;n%&coWkoBtr zjzS(?!Yk&SHO{qn_dMg83l>x^y8RtK^RhMlXP&dY@A#<&n571Q=d*-RPksB9B!6zM zt4^Ym4b3QzrxYI!(E6JGDo2vn&-NQ>Yo={B>C7P;XdO1{ppNlDATLZocB~nsv|Sgv z21Zk3B>ri|Gd;0=7uUwdxip(SUmiK3Qo3^Pp16==goIKkTm6q@dHvd1Wd3EhN7Ysi zYUtg6AAMj+Tf}U*;(*d9?bT`D@v*F<%Bp zP5S%5>C?;7@K`m#uGXKg@atmX1ckhotF!7VU6{-?vjlE>9!5bSF{&L8;ulkMoPw}>G z1H!kgzlay_nkD}7r_;ll>K#6>4+0X=Au@X75JFn;(c=-B{|LZyu%sojfe#rFL zq}SHy&0a5omS)9PQ!z^_-Z@Kr_VJ>s8?X2VTybBr$f&Qx_^EY)nHN?MQPlnLT5f0} zx@MB+TT38-=iOOF8F;^34~`2ih21-M!Wq-2oBIIDw%lC!;)^c;&rEvPd;}2i1B5$6 z{O~r~a#Mq;@?;|z=#TH<%wb>kj|3>$6;I1{kK%Q8)9A9_pB||cbXa8$z zc&H?oPA?=RSon{>T`l{)KiG?RhIsl;zCH!)F{cE#gnFnc-yd3 zqCtpSR=w{hS(aym9>fB18-X6g{uv&u+}2K!6YtKofyXPbyP97iB(R!3`T@vXMNrF>vne zxx)!@w;kL)5m=qLO%v0&0ta?=@!pT$pCf*A1X*+v)X{y*Fp6|cY_?C0JelA;JOACB}Kq%tAX0WLeb~pX;$3~LBlG2=U$RJ($yaTN~t5# ze5XUJGyQYJ==v!No@xMm%Y%DwNeE0;#S$J^g|! zKZzeVt_gt-brCux4JScP3gB%?p3>z{Tp`?Ef70(W)*yWt0B}YtkUK&@${uQz?e1G^ zvz^isG(N@eF`fRXg;II=vVrasE0NAY1ocX?@DuVaUU4h%o^<*-0nt#um5iRy6g>B$ z;v_g3OJET()PTt7PY*@@p^nnl8R; zE9=wmQ+nw&-^R;IJuu@30KlKsZC{h7PGRuXT7%T=lUmc`-4a|M3ZX>jqFNs`x&*Hc znR{znv>Osxf#TxgIP0e$juCr`Qpo(vE{O59jH??v`8@#mb55w3{a*q&q;P9KxySf+Q|-Pxt}BAb=-s+(+2pS%-v-l8s~dX#t(8BHnUFsQ zV2?$X2M3Y-)7@;Q5JHtGVODGTu(Qst!xfjm;^`<${;ouu%Qcw_eL8KdAH*NMcc9!< z@3IE{5NK(JMpqp3CXILzo7f*4dr}y~C&z~4#%Z!(=l)do`&-_31bo-lyFGpa9;;Gc z7pqFev9hY3#uRm)5)5+T2rJAJV$vu{@|6E(_BM;63=W#qx?`8@+7$spk|+qfqd;(z z3zwAw0ZN)6Qi-2V4pldMD<|d1$pI1( z2x?sSn|oV&_x~YMrZz!|VJIs15z3l1oq0SSczs?S`}Pr;GsVJzN=7(vt8dVVTJrm)OAdZ{&VLo) zAy+#clE+M|@n5%ao;GYuVU(&Wm@hFiddOLmBuN9pRmOVROY_I#_juBfotmN=T{_To zxNuH2)dDQGFYXaw{7dVzkRZ-ZO38le{)6P#wNT@QIU?=fa zt|w2!4+?~mXI{8{-=bwxy`v{CS7PH>gd$6dp%XJtB7|-U__(sK5|0A{nL2Z4Ak5*B z&_C}+IBk+EkqK?JH3Y_v+lJRHfxyK!L&Mid8K7%I)`BELktC^?%kYdGw_@jA>64Q# zy!88%<(d4V@18|Dcp|&s`qM;v{ttITP1RZ8Zi!d)AUL!D)W#W;Y^ zt@+=D?L_9?f?7APPza~x?G>jOyYpjw&F+3=K#~LBr7~*9 z46X992RF&ZJ0=sKpPS3SE5f-@Y&H>e#jHZwoDf2(95igjej@D$hjTwYWxN-zoS)l= z&^mK>O$7%ue!lxd1a@jn#BK;df4hP`Q>^#OoTuZR~p3= zl{qih67z^jb~f64tdG*Ycg%e?c6a^_`#nAbWTo}(p6DhXnGwXCs#$?EG!_#cuGS13 z_G-fNcW!N?<)NF0XNFR4N8dUXD^y*gr~RJ*{AkjagDI>NPRAb?d|)ZepDFo$;Ma7} z%y-yg*nXhqiL_~Aktnq)3Mi3L(2_Xhv!+E$uNW2+<2m@vpZ_WH9|t(ff$F#9WHB^+TZMTarxI{m75(4k jksj%h9_bPI|0MqlU_CpA#>ZSV00000NkvXXu0mjfGE@q? literal 0 HcmV?d00001 diff --git a/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-app-44@2x.png b/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-app-44@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe022ac772005f38771f01ebf2c64828d6cb63c1 GIT binary patch literal 10297 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 E0Y?}Ic>n+a literal 0 HcmV?d00001 diff --git a/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-app-45@2x.png b/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-app-45@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..55977b8f6e75c44b1def842100ed78b0995f3067 GIT binary patch literal 10544 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 literal 0 HcmV?d00001 diff --git a/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-companion-29@2x.png b/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-companion-29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f8be7d06911e9d8564e96c194fa78ccdf49d71e9 GIT binary patch literal 5032 zcmV;Z6IbksP)0d|aco%Y)i$G^5+6n*{R99>8zerUjB~q#Q!{Ok_)(V#DIju1jzyy$Vcu&c6?wg2Ik z>r=H@v7hqZocq??CBD}eOLFohEdk#P5eWdH!~8LZ*5532ry*|dX6RGr%EzDQo^lN3 z9)|RzC(r)1f^rTBA>fsqE9IEPfiu|7xykvn3wj-Wy++kw1b^XaSCK#$LzK@z21Bt7 zAjNE{59F>|_X2m{iBUxb`?i)8Jeq#9XpY(6b+gKWVwTveVM7%fk)4w9#iwggC8VAPA<`hXS7=Jq}y=Vj8^3vS~&ZhdV`1vJ8Wo6!eW%V;Y z4_w~$F6A>+@QN-g^EWrq4 z2>}5$8U?cN%ay!w|1wi7Y9)y{q`dINd(F?SJs;*SY#C_TLl*6SSik96hjGLD-K4uC zD}gYRIhPUu`j>+oju|<_YP#c}>Wftq#~~CKJavo8GC<-4<5tAGmJoaeu<;tsW!uk6 zzA*ZF#>I3@Iu`ImP)fj&hOj0xhG~|gTbuKX)AP&bwjYc`UC=`>iU+lYg@(eid7UtB z;_?)e2_wcKfzY5r>cluR8;yYS#ynSqP^|7pg$hELHQhY#E^pa|JDRp{H}#|DaF!IG z7S7Ert_ycG-B9jE7_$Qz;yAD1IkVA-IAepxy*QhOFbBqw*<{3ttejg$m(6X1 zi4*04ae9P?it6iQLP5OUJDn!t{bn2-nE|*AoCFj@mv-*-Cq$|#dZRwpaPu|S+YZ$J zKGWAZ4K_VzbC@-njh0O>=)Srn*`cJlV{$^#Ox9 zAORPtY|toBxghL7{gb{*bHCjMLjA04KqY=rnf8PuHE0)gE*PJ%>nUG@A z5M#qAK8X(TSd8JO1EZnoz~Dc3oNGm=GWs3zr?99{{z=62wd?Z|2>4 z$H$E;mY$cgbNdF(-;1e8@Bmn&6tKaR6#z)ll~Y+s1mqu5mfMYWq!+{(a5bu1771X% zm}>zaw(Q*YO#Q9bPtCjit}nFI^ePJ>!aBp2d|Z!OQD+>flO#}xBvDh7;(hXgrEfbm_oeTgKj9+x>wcLxc=kZgS4K zEJ=WzqxU9k>6`Gpf4^ts)TvQj^Wp$HIu#d(oew^>Ebh#|Cq+>Z41sbYrC23`dlb{Q z@b4e4x9xa)3l>6hM1_z^?Qt#>0-zY`5ymmS2wC%BUc;jgoO19)sB!J8Q=8YW&J}45 zs0Q3%Xpj&Rn$`CeyrO_9?&(UmZF}v_z`z`kE7KsR489Wp?XDNz|v{B9q=R@n4 zy+3uTzPI=sE|RBAk*X{fj`r;tLqyEuW9!9!A&_u!XZ}9h!XLk4>~7EZ3n2#p7iXNy z1_dB1d$;fw@5YTzzWM1-jd3-t@%9_X;fGgQE$_end6@C`ZcEk_;Jg*GM}8^!d;X0_ zV;~UppcP1%BWmwzAC)ot!cBN=(SFp`b`H{*?rz5rMjSK^cxy{>RY}Pvy~C-lPJVT0 zk;TGA`^AHSI3I#fQc^_vGz!YzFBT~6EmQmq*bzeNr3)v0fYeyJFcqfU?3d_ zd^i#5F{4N@MGE?X`Fd=z*8TdsZ1lLzAxYK{=zw!L{~;iL#<{`QbDp$o=UlNj43iCz zh&MuPN4Jv4_&Q3@l8^wTp*SUzG^mjXS1D&04FI$xu@r(Kk(#!B?42vW5D(%}pUQ!2 zT#~rNWlN5%@zccraaPb7~&5&Bue$(6(@vaY65IPX3QuzH)rXK z1o)kH`YI6b(qn;D>?QUb?o7ZqVweC!s80O5bud9a4u^g!o?EatN+c#c5KfRdfM!=D z;!AhDlIOnvB|c?}XjT#LY#(U^hAALWSt5$LA;v}S)Z#!p+Z_743#Z6V_o~N1obbsI+tC9lR*i&l7zg-7qIzrHLk4JYGZP~s1v=m#DF_{mJyRQ`KK%p9mq-S-J zD_l2ms-c>K0=?~GeZk2{(?CWDOgYZ8wZ85=0U8qL!2JG6Is;z;67TR!X5AFFXSN#| z6WTtJzLps<61lyR-*(3*17$iwP+cD`7a4<)inB*;G%5<>qU$~m5&$GoibzHl#3r3N z$5}SlyVdO`r+PezCeBSL5^}{Ug@`B$K6-B*{_KMd(P)&#H3~fFo5eXN;PE8D<-+-M zZfK28m~~Xn8bl6 zl6A${1vTf~U@+ofZvM4nRz10qyIhJsnJf1Q zG~;y7u6Ym%i`=Vk%rNFuv{m|sn3I?a@YU}5Vy(yHfeR|Cwc5o$GUP2=xjuN>)Emty zDHt(2c=5tH!;B&;0vV^K$60>iEfeQ2?h$jYilfFk$D*#sLq#2$fB)KN{L?NtOU*0z ztCXIhT1BgWyrdQ( z#F`h+Tbfo^b8l}Xsv(lB_H{?och+Ziz!}rhO-9K-VbZeP)lc8WtE!{}pT9Rw`S^ns zR$pgXARJ+UMISfdY>Y9*YGw44$;)t2@e4VNZfgLc5I0~k!Wm4SAybGDQlG0%JVnWy zx1gRHXp|f#gM=l?UyMl{Q+}=q z0bT7Pgd|hf$GiX0wc~ zsX#|M_k^5dmxV6AJkRm;t7UN3bm(@wZC`h7GLVM7%Q#}@iV)w)IURB3Mb+(B&iIUW z)IXH7{_l4Jz@5G89?1`Fee;Jj*gJ)p%x$91AX=i3imebFB8jdLE>2hnCr788dzno#1OwGe%N4RrQ} zfLW{%L_9nu-sPrgRB5_ zc3f-fYE6p+29sF`9>H0A^*;MUptuR>31%uAOYc(E+BcUo~k&oQp^0y8TbzeIZm-a?^~||ysMhsbHS)z&o5*b-_erLgd<{aDEv#9)mru*E}#ohzw!^cbLgau8)Iqd(-UmVJo=UUBi6-QI7 zUlE)AQ!tx$NNW5e^wXd3Q$N{urfJ8!Z-+x6hK{OLkLAg@VlY8$^tdzgz_zP7-g-K* zJI=x3&{;Il`vW=Pn?Ow|T)lSTn1b2YHXeQV`Mn4#NRJVZhc@1N{i3YByB_Zgg+MkK zKur3rDQ0LHGyWIOIX6A$U3O!)6p7gM8@XXFt0c}4v!;e4uWZjSEhwLr-PPiWswyx| zgP5v9y4?zk2=S{d>a+5{7R;NdyL*zxwGXx(X(&#Hn^My@y~V5)b?R6nUGc zqN!&jkioo9NzSu|OXyq?Zfi6(6cH%~zMko7Fh~QTa4aFlE%r3%7<8zQ~hn`s?>cheM%4k#{2)U!_nI@u`8iZ8N}S^pd0IV zb|g!YpwpJVi_V%qZS-~5>31aqd5E#dx3T1RDri56Yry4u_9S^uoX7<-Hb4HSai$O6 zzc1d^F~iKLMdD1Cgb@NE4t?^--0ghYc{gV-SW>U2jicWGuFi(wd!$311;Wt$;N7`$ zr}unWQO=+mV+^BD6Y1I8oVVWL72VE>{DS5GB=O|W+=c`_@!g>d;qQ?U{EJ8kQ@V94 y*01u!y-2CJ8!2T+k0npiNjga<=_JAb1Nt9<2dJQkU$bT2%<`|A-!^SIsjV2xnE6RkCQ= zbpXKdoE?HYoa?_E$m$!Y932H!XO7!6iV(dk9qh(QBtTZ6`s>d}65T8F@F=}uTd=K^_q>|i+ z1cP8x6-apfh2m{OOof61BQ$CLLo-tds0FaIyJo(nJ^k>-K|Cl)5F>bb&9o^ynW}xm zMvU7^Oa3vbrffemRF!)I0Ya&A&aU;V`ec+A9uPBTD5S7Z|6B1%jFdd>#(~$Aw8iFvc8CCv{J}a894w=RJvSRXx9OlD2;3bHRw1 z&6^*7`l^cv37km5$5bv}P(TQoBSeH}&JB-Swr%_!4+KEOCxSmJ_94;ciqO1m(^*T4 zl@WrCgxV1T1m_$GMFR~$32pz4Sp=tn)B)QY=Py2UXkwzb{pSC%*}Gi`#d-bZYb^Ws z4D%C$z5pF9&OTupImRiGC_OY303ithG%Vb2L`J_sV&ht+vORyK4Yef95f07iS<9s- zU!9pyP~d}tf@3Njx4h-|eINKRcmEHTjoxw)wHLk{BW{Cv4PBNvgMFXN0o zbf74g4k9GT(g(hz+H6EHhBwB(VLv1QBAcu4@Sy+@93N|Iu{vrit`FP({T!pQo&*$) zA9TC*sNJR4@Oy81i9GNihk^pqC7VkmNgTNK+Io-Q4?rH`AWo_f z0YqpZsM{G`<-XuQpW+N|zZUX^pmp=_o&Lj1FZDTeA3_A)7gr7Mmr-o7SkSh1$|T`9JI0Jb6PgQE zaO#flz1LIl{N1JrMSUGZj{D@qt+#4@?e=OtCgDYg-A;hvTI!+@B7iZ;8x;$|b1!`b z4^5abft${(u#i_)R%WEE`R3bR>%V@{@#<4^&{T-r+!M~G;|g9!C|rO4t#`+*|K_FG zZ$9{R_Ydp((85BF3dZ~5X>9T(uXv(j7-5W>{p;$GIA?a7o%pTxCkKX;#HmyEyvw!do)b=f|FHh^?dxdeb2H0W@$U`E#Cg{E!Ir#R4ZA*@6HaOJzUAGeNi z1$2YUGK72Dq8y(VU1DBZP#|^XP9+5s%=4|UKlUqYb3+7ERN^+cVK3d1oqX+-7tEm- z7GhjR!7xBiPoE!fI1R#$E}I~<(>^YQy`}MtsCjdqt6BQom3!B&%ph=rXhG!WnjNfu z@b3Ggo}6E*ee~uB+PYP@d0nl7%JL~hO@f8VG6dri*L*)`?iREC(n3KLRY-TtSQ>F) z??r8l8$_bApp zX6EmOh3xB`969Z#KdtjQ!as4S3Kasg$*u|N!`0f#Eo(}y)81SDM&#m0wpHIdYu4d< zG|&6@CB^3dvb$}xQnp9-A8ZV^1%r%G3<|m)jta&=a)c9+J?!N?LfCfLE|GU-R{5u! zifliu`)!lQqZ3JzLv0f?ToWw^d!s4pa`sjnO3A_J8^jC@6fhJK0Fop(dwoX4p3fi(rN~t@jGj~H>K&vcMq~_+4=5O`&huZte zQYR91Gu6UCQA{t{FK!_~TkYXH{Il;{hQl0GTpBFD{f2ptjjMCr{vZQMRt`Nh zN@zgWf!e~d&IPa|;L}yR3urzMHZU`JIa~>{EH|~a>CrnjU!8i-ALeF!_E`XOftJmE z=u=;GY?+my4$N?{%VI_mib|QHF(A})^zT2lql7xGOqWD3D4oiTHH9-_33CvUn7lB9 zkO0QwlPK3Cmp>gLf&t`}(P(ng_ddKSG2o zICX_N8;uE5{(%m1@4P#vhHYA1*xKC0g<=NcM=MZJbH<5gAAsKBdClcpR3u?2b;QZ} z`P4jqcsqmwiHQ97YB*8}L@0_B@VL2i|E`7Qj}+WW3V}C_n)tjcJhEQFOt*`s2=zi$ z6_n%@qb)u2N7_I0OS9i`afjMD<}AT5DZ6}kZ+ge9f2j?%eFKEzC^|Kx1PCKSRb|)6 zv)<^vVDZ%lo_^#H5i7oUx~=?x!7Y|hO8k?K0t=U^@i0zPo zAJnX&0eZ)S7ri@h;HsH~n6Tvu%>w4-i1v8DUFjo+5oxqLoKA`$29vxtN3d=5Irr^< z@}Y^guRnXtU0K18r`SW~0Z9@N9ka_kkdtE~a-}O)B-Sr~E@$66ONSnIHtc!*)lv1! zo*lny<;qy|(2N-p+Fa@gFO^jFxY-xppQ$SKR90}?s((JQ^Dp_s0>93EBoG-bh+&W; z?DYvpDL_&b5~!`we|+k}&8XO~^K*UzB^)buHJypJ{@Yj*@P~6i)Jt^Q1UWHji0}2D zB`qV-v1a8zjM{3ep{N*UAE)O8Z5{!87$JSrwwQ+|OyK*sZA%D$^V!wX+sjJA-hXpr z`NMzC!Jo>PJbHQbm+!5o#jmZfy|!@O{8uc-ZruRtYMrP)TJV)oS!NANvY;oxArPCAK}ar(-R-_O&#ZM~YHTUpkgPS<^>tU4 z>q*~gw$6J^C6bfg+vLVN>!31+2xMGz%O?D_D*DIN4C(}d$o5Oh(RexRb_Ev-!4l) zQpCx;KM|bSEf(Oi@=`{hK9z|0<8jUQIN*T&d!h|0nIKK)2W!UWz`b7m1ot>v@`NuDhdXj%7QEENfm1fvR1p;(**JfWxp*Iekc1CS48@*KffB9X`# z8y?i#C2dA+|7l zJY7ZsO_)w}roV()2#{b>@>VwYp)DB76o2`pIpYHRb{O2}4Mo03J>O8n+_0;Ps&M}( z{5CQpQ6Ml>{-+1N4Yi6dgvnGa*K0YybLH#gV(S&fVvX$uvJj+Gf;f)C*JfU$L} zX%Y}F1`lmN2Bv$=nTs=MSf6AM ziH@y1rTn)O!Z~N*nku#S>G#Q+8)g?H;9(Xlw=WJQ5c_sT$R>o`?wA-0F=DXKW^_mZ z&?+0jKIZQw2xS&COfdT1IQtV)7 z$!+e~=pH!t0!2FkYkDb-^n5Zbl zHF)Hs$+z6|5@v)Q`~{QI10YhKe`=J{){^N(&I6%}C#VBm|Lw2oRg_~?tUZ@*@$mQxrt}Y!V@!@TgMt z_p?h(JRvuacUrljifJy5C&X<;$Iq4RVYmdv&sMBq7?F0Ha&W+qcatA{Vy+1+hp0j! z*sy~E;elYvUy^re)7?(+({sytD5yG@cw`*Ch{yNJ4T+f1~ChtD5V!N28F z%HN*7&pTplag4(*b6q!nu7U+)Lb2J29uxma5+UAD!S&cF>~TXeg3Bx)Xy1pPc+C?X zyU|WS5(JJLFrQ2~V?5GokzFYn?=E@d*()d^K`gN!L2xSszIoF|Oh6`i1HmKeb_m)B zB}JIv{h{7d>h=eO+R}9G-nDBoOobl7R}iL&@Ge;Vd)KfrUq#w&GWO$C#~=W7I}uWA zLZ4mUN1uBGxe*grtT?X2JW-%6Ftjm?Z{sEvl7wDhH4Fu5KDacxG6RGV+^)#fm6ZD7 zmS^9%x_}Tiuf61b=%fjuI#|?e&-~Wj+~_nYWk<)KM`uv@yO1PiZ)&hAA1=Qv1XY&& z`+*Q5u z;+z#L7;+9oW!dj|z>hPvb7QBJ=squqU8R>2q)`09B)`ym}DfUu5B5eGo|mG`#v=J5XHqO4D(Jp0_S#dpqd zkC`})We(YFi%TRCHmii?9ML%ii0HlBmXv?~{`icAp9OH1VU%DF1fvB2aotM`C)@m< z(Vh^)rL!S6MaQOj-Dm86cMP1hz=65VWbJ{e&@{*5gS%L=51{iU{aTkFE}2R z8|L_w=orGYhL#4-n{sRX8(*B+|DM86ItVQ%>sY7PHg-6#{Yhb{H1Nfz$I(5dqgmzt zJgKsLc)$d>j{mSYfUtoeJgKj)rwy3dyYTO?bdWO41fsZ@Ro?T5rH)OjuXUm00n%CS zut}qfP-V$Abj($aNe}|e%rw=F+#7@NS6bdqH(gv2% zsHmq{zsz+@X3be!NQiN?9!@4*b)5tmF^86eBt!Xc&;6&hq4rlk&QGXZ6ogwyFi0Jd zkr3#e@|8Yl#N$b~-2Evg6(#$H)_?AW-)mLn0|P|DXVH21j}W2gLBjhFtYt61pPfud zlMsSdKmXKK^2Sv&#QuHbh2IN0m3U|Rs0jf^=8zpro_T#(hf+Hx0CYh*Jv$DKqqvwM zD{%qW02T`ik@=4gf)K>2HBGqM+IaYmE$14#F>c?!?fugL$`5?; z*eKQO$p|0?)ueK^r?`jie3uu>PzgTFm zDvNAlg0&L|PyE14J{;#v56Tfub=lJ%EjTMXH}_k_J5Gg5+*Re8GO@7Gz|hGD@Kv3` zZj)8pgSM(Nr_1XDP9*~*dZLmJdU#@RbJ=d(*e|;ZkBg1#23mYx8Xz=8BtXS71BAiM zIF}%XYm$Zth=4DY`dV#=0XdXwJ`eTp-j0~%XO6hI0Lb#@fPnEK=XfH(o*?m%6T^@q zY*yKq+^@cI(9nBQ?<`oAiYa$-@hQdlr$%~f4|5R7O1k;Zg)R5w4{ysH`nVL|%NJ$U zWXaHp>1oNaLpJ6E~Z<0!nk!*}!y@EfWG|3?LR8L@!tb_KPkD?rt*`EIe+o zUy=vT+4o_#ci2cMVZi|K`nq9wJ?_1L_+CHAs)|+OV+|k_VhO=y!yryYmZbPZ!=0Y} z*QOcw4DWmQUtVe7|8UC5(<#l|!^N~k1BdMgfZHoR|M)Fm$)~f#&eBVr-nPhq#|_A< zB9de>cW{207cowRq5{Mx;&o8kDx&3C7f$pAbr2G6^+1jXgUH+Gfo=RG(6WYtf88oz zwbdZ??h6sK?gZ+L0HdY~+;6>t>~G9ch|V|=S5xLL&NY1SJj}6`XchpUAK5pUrkDYi zz)*}c$tqDQYZmZ3Bb)qv`+sVT8uw)KmDjF^#mi2~#&+Ax?GWrh5r$N<0(~Y=SsS}x z@pO9q&BNV;NB)rw9J15eD~Vucgc+X78KImb0MB(<;nW$i9oq=|YI!db^!L?GiZTJ= z_ko%@1niThm@`<4i37*AGl98UA^dlxBnZEDH1FeZ?uO$enXh@LsPy$WIa7_eRZ8<2aafI4(k2d)58d?LunsSw=uJrLPO zxBwQ$3=JBqG5}z!UzWFPilR6j;m{_lIyjxJep}cUUtHp97(D!okFT7*#^f6;ejPRo zVUK&XU>eN-)3o4-oXY^9=I3td>K5frd}zK=b=kNxBFgt(GvulZX4Tw3yI9XT|C3}w zegJ@fnSX>r>6+Ei;h($}?ehAD3%^%xtf)7YOX_PAF=+RM>~9DR$Legmtwe_;X%?`K zKKsZUqw?i;N7wNk?QmP0$!G9IS{v1bKGS^tGlj5)eQ#X;n}aFYqiYVq(^uU9<)3}f zpMLStWHRlNn<5%(vznq48rXdc%ndO=SGvdMzVi+f@kwj^rJMT6F4stVTl2`)-KF_; zciy-Pl2bqQ^vn3D-(^=F$Qm=|AOPT>N&diKA3sS=g%6#R34#lb-B4OL}DYqJ^nXBQQb(s)Orv%I1|l<)5Y2OCB}T}?K;^4Rb&Js8hDZt&^`v`P}g z=*AHnuX+Xz`v|WsL3FJXDeh@iE(X^o9e?H>?^JBw_=Tgf;ruov(~LyAdA!*I#8aAuKB=sl&xkfPBwFgLBRvg`h70+|5)#R=bc=hx zh{&;N`X6_p$akqLq}GPsaPq5vbASpf-!DoSM!eUjLCe zw?nW)h|H&-HE~b;OYi^MHTGAtczV_@M|89lj{6gXK_U#@v~5VrQ82AcN=6(2AR>yO zqJEM|p&iA&xz0#H-5_mKR#lL~Bic8&9%T-YB2Fl(MvW(<1YKlh;$j12JH{BBlkw=4IMi6|XNEio$F4$U^ZlFKIeYoPdAj?UJKL`p1 zsKktzga-3_RCJ3wd&FL!*ZmzyN%ulT#7fVI@hdaVJhKwuLxB6|!_JRC?)UnXDP=#Y zjC6-CPS+0ch(BKcrPk6|%`yhPDbBrQbK=;sWrv@aF9beVUH~9!*R9LqPvmdo<@*3s z&7@*={k}xV+#oC_p(Sv~y#xB6J-Hs+$;an?RJ>ZY;?qQJCN8V`uTN*0 zFWETs8iZfy%*B#C7VpY$o?04RS2?q>vEd41`xaNttSi3bNqu)nQSqBZa?<8RfbHm9 z3NfP)qQa)Cl?oxfgQxh!krkv#lH}!l_olPXKWHk75HUdr>86k08^Wr~hR~*lQM{ro zOFZ-V5ZTif8y)aMr8DB4kpKo(7`g*bIK9ekrzN>B`oF)|F0Gv|%FC#5wT9aj=>n;2 z&js9K1&^%i6^kF;CC#~^DsaP`X{nM_TXF5LH(4~bcaR;+@Sa@Ej2S_nh{ywZl(G#Q zHYgQ~{<1{A^qjK{)zZ(-f-?1a!3YGv&p7BtFjybg%gqK1y}x|}cDIuayDeHcIxNe& z_&2-s0fXn+Bco&iLU#+Iw|ITb)!4{*UA1EMxU}qIWcz-t#gE1C}j!RGjXPmt-b>?k9noOV5 zU~{`&xhNsNmXP{B@c6@RBgeiF85OO_hOU^-N>K>D2E|LMPJKS6R#px%eNkM(wt%d1 zd}GI{+!JeNx~hRlP6=&V*}S2@&C^Z9$>gF0Q3OJdVoe)RGB9Bu4+DG{7p#<7EJ>z zJ{A|Bws)PK)|a-Sba-Ig_7wT~+c!aNRUU6{OtUgWviiNy7@Jhv_?JbQ_LLN#ZRVA0 zwVgi<^$~i~D(&HdZVGhzBEzU&#vW-I?y%yEj6~$V|3u z*}^hXQv;RrZvRFp+cm@=4B|%V&aW!Yg{oOZATs7N#5lGU6|u+xgPv>zvPVtp@8tuA zRH?tYW@{`VZE)XTyQPHli%>4gp%+x-NyBV<_X2Q&Uy7&*nj6e|L!X0v5 zujCi|-Bs{|SYK++N}Qb~xIKTu1Zc=E6}h=4qq18#x}BB(+?`G$9rdccLO88={C)}9 zyE8A$?}b1h00F}Q0|B2<^%glJ625Rv(=4EeM?f%b!29smXQn0);%$G)(J$gnsJ|HH zq8wfjtbFy^vC@X`F4UV3PNIe}*eOePq6cv^AhZe5##PH6qFUZ1Ig?6~uA8+AYiIw3 zcSQd0C>O=F%^@=oiak{gYIbc&4LeXVT54(rBRYz?`VCzBT~bnY2ce|1FRtv7!{4cp z^V6N+hYSARK^Ofc$}eu_9#7Gx18kQPMAHy6{_no%xJP=VM|z}3dZb5sq(^$BM|z}3 c;D1H_A0ZLz;be5NZvX%Q07*qoM6N<$f@-RsLjV8( literal 0 HcmV?d00001 diff --git a/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-marketing-1024.png b/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-marketing-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..005486f2ee12c76078004af2df84000ecdd55761 GIT binary patch literal 206341 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 z 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

90@H{C57B{rTY5(Nl?K(BLA{zS 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 literal 0 HcmV?d00001 diff --git a/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-notification-38@2x.png b/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-notification-38@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7b7a0ee0b65b5255003eeae7b519387725402b3b GIT binary patch literal 3893 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 D@>h5i literal 0 HcmV?d00001 diff --git a/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-notification-42@2x.png b/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-notification-42@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f13c9cdddda0fc5206930521af6bb19e18f102af GIT binary patch literal 4673 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 D9@*eR literal 0 HcmV?d00001 diff --git a/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-quicklook-38@2x.png b/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-quicklook-38@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..aac0859b44c6e8e5742f6e962abbe64a7615f5d7 GIT binary patch literal 19776 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 literal 0 HcmV?d00001 diff --git a/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-quicklook-42@2x.png b/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-quicklook-42@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d09be6e98a6a113d9666f969665269d64517aaf1 GIT binary patch literal 23404 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 Ee`XnAY5)KL literal 0 HcmV?d00001 diff --git a/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-quicklook-45@2x.png b/apps/ios/WatchApp/Assets.xcassets/AppIcon.appiconset/watch-quicklook-45@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..72ba51ebb1d8cb27f5c5f667475895acb15e5164 GIT binary patch literal 28860 zcmc#)Q z^9N2!QdIfB_2T~qB=~=GbuvKy&mYGiDN!L+kL+t-C?D08=ii=Jx+Vp3Z%8doVa>tb z33Ad%VoE~mLRTvrofhpHyX%+B)Z**D8oQR38toRk8=1nuK*FqG-vqotP-IBPfY)ObV3x<7Zuecj*KF_9TOr9Xcs%aEXY&Oj{~sF?+5ja6ppvJ+ zwMeE?jT7s?!93;s27@m1u4nDz?~61i=r?dd@R^Cq)P%u%VY#RJ-NA^JR@giz&<2&U zjKC$y5|9xX=?wgV4W(eGn9wHuGr>LaKVSD_Bsl7Hdep4!Piv|%#({IRjF?1nN@y;@ zIdussV#$lQNQk!e!94zw+j{kbA4K{joVzUfdVCPm8H2yy44pSobGuE=>UGO@G$sB{JmT%YzVhN-pMYmVBJ;jSb9-|Q=UD{)?i{wxcBOp|3o zneiQp`-nvigL!^@{{1q`2U7xDZ62@j0GCsvtPHRm!`Kw(a?+KnfV4$qri&wXgOUuzVa*WhwX z++9$NacrC4yGrV>c&xM*KVOS4z~U}0P?O{R<@JdBgTl|%D5e%sl+NU0hod>3*H2K< z$PkK8>mDAC(717~M%Ms~Ek9WpXwl_mQ6y}4^RKE*N^5PnIa%&Y&R|KU|1LE>m5+Ja zf1k{^+wG&RtHnfp^6cMRLus{$X7RE{(4*JMTjt6PI*+C^d`IA#~(QpW@Q^CR_h2QORM>zWa zZa4T2Ub65Fk0+hte)9x}mH9$KGbguVU1>&|=0s!{^NAeUjDmW-UU>8TPB6B_+%_Kw z41ao*O?SjiZ>Ce^>$fMkv8N)D_ZJhcsT^n`Jo{)J;=?c)HiBCIt3&a#24a_&?oiA} zIZ;R&uXxW=hY2`f5yTIwek`zd7uL*jxc=+QhJ5e~i3C(aFtU_;Pey zwhgn)mIbB)=NuyjbD!9zaCl=;Grr04DRnA=Id-}3ScUx<2?9UID_xh>n{teu28wFd zI!%(;!sUt4U}+l~_KTmD(#3=S?a+u(cjAsPSS7PusvJudc88Nv#L)?4G`YQ7P@@r(~zr1-sft92LKBjD*ru^1E z)3NSGwIa|eFp8djsRti>S>1m2Cxf=Iew(y+Y^8h%`>bfV3&9R>k}A%5-mD-V<~NIp zr}=;%o@SYo@7JbA+H+JUMX(RNPD?jGx5y~3 z<>UuUHRflm45J_Hr5|U5+BtTTWao?}#?5u%ZJ)ULqi|GIz)8ThJ|vOINV*=BelzM(eqW(#+Q$N?^MyjMnrtV!$x# zXR-&OM$IBZajpZYQ-J~_s3pe~h};(PURqx@L@P;cWMbb$D5JijLIZDGH}fn~&K{bl z_U&yqq;f>}^Yr_K15(vpCDYlCYDfoS{k5DNyG4dcvq+|liv?_ii$8Bt!TsbcY5e)X zYkL(p15ZZ}etuTyOYb8!?+d5fVimr(QW;E_&gA!*SJ`+~*}bT`DuhInI(-&N&Gnfp zBMBazETR2D@}+1W^l@FqpnxG*No%7?#H$EYoGXo!OaK#}Qa$DcU77JS^int7mNl0O zG`Gw7;^}E#m!4oe^6IB;xK#XLXX+bV1x0$|qveOTW#3;(nK5$Z>Gb^+?fb~uI|p{A zni3poJ?q%=n&gzMkS%g2whleb!3(X;cu%&*1|gKvvgxHHq4bPSkkeBuhxgj77k3#I zTXTKm2Bu6*6Ys}J8Z)FHg4|g*j_M|@kj1&IEAwt?M0&~oB0)9{M3d*A9ssHrVB()^Hj5sz?GQ#b*98s@w6EW?mAm?~ zw8;&6mp)?^h~)Ftg$UNreyqIB!_EI^BvMooh)s=A3 zz0o*A_Je;FO^18g`mVZ&uSs8T4b;+o>6r;w!`nHKTs9y6%C)?VoeJ-IMy{pu<0y~10@HteOs z=MLou9!rm|%Ti9>Wr@z@o4=^0^Pr>~IySQT ziQXCQ%oVUQNlyoT45wQo*W+9tnY1k085&Dy#L%S2a5u@ZM4KXx>w19hOVF7OyOc z92kD>lGQm_a(*HK4g+%enc#<`w%;zJdTG(Ljjyi#V3gpb8b@%%eb*E$%>e1IQD!du zXs643F5CLwWY<7PoV6!tro6pgSR`m~Rf-@iCd7{Q9S!JkAf8XKJprf$Wj%ruUqq(rB zWExeqF8>OB+8!nIGB{aX2EV;PxqWw^F8@g_aac@G$KTlye&YY;nh>=gk~pcMKUpC~ z*J+h$?bq5zgae_&g1kR3ZF)xU1gvl_cjNn?ZMCwXu_X(tJRMsYK2vpRiCn}YMmsKI{&>@BB5 zzhWrpzBfc>cLUYkN}5iHrO_%$?ovVyEr-hxF@+Zwd2@NX$Q_5I=}=_-hr{lxL*rq^ zPL0GZQ{@jk#p)IBs)vSpa2O2y!-SDy*YUiHKbrg-u!}IJ>4V=N0HpQUdWO<&zb9IbkVZo^Q`9 z_Vdk0jH!p^)h;Qrg0hj-4v~IY)Ky>3QGa6VT(rxD_(R~aL&@#u?JlUI9p^3xvmko8 UUE>+)ux;_8+HXLZ&F|U&0I?WB!~g&Q literal 0 HcmV?d00001 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/180.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/180.png new file mode 100644 index 0000000000000000000000000000000000000000..d01e83d8cccc850b2f323e7f1f307991193e8b72 GIT binary patch literal 22378 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 UbpSNzY$kY*0yA*si2gJ6KSa7RbpQYW literal 0 HcmV?d00001 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/196.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/196.png new file mode 100644 index 0000000000000000000000000000000000000000..b7989e43d84126226410d92a39717ce916cf9863 GIT binary patch literal 25563 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 RaS}sM=x%j>t2h2z`hRidu<-x@ literal 0 HcmV?d00001 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/216.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/216.png new file mode 100644 index 0000000000000000000000000000000000000000..4dfb94abefb98982515d1667849d652e9501a61b GIT binary patch literal 29020 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 Qk&)5U8h_T78o|)N0jn`(V*mgE literal 0 HcmV?d00001 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/40.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/40.png new file mode 100644 index 0000000000000000000000000000000000000000..87a14602e3c473a75b97228215adc89aac071d4c GIT binary patch literal 2865 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 J?3E+RzW@*z6IK8K literal 0 HcmV?d00001 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/60.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/60.png new file mode 100644 index 0000000000000000000000000000000000000000..03231a71d18936e6554f975c5267baa62de54ded GIT binary patch literal 4750 zcmbtWcQ~9&+kdR?5M`s6uuAl(8$E(3(SlvQgwyrdtA@|L2$e$lh^D3 zFfQ~TeEvT*sjZzi0_U)g>s(&A#c|2r#NnF`e`DTjZ1XpkyT(s^JbZ9IkFK#7OkWv? zZE={_;a}M1Ul`%xb?qOA^N~Zk`d+VfE!P>7+quCFa5D+6vjEInOJanx#OAx;0o9Q?0^Q~1|R@o91;UW08s#X^%YRYUFUx% z*ChWP11|dN13*mz$N_Trc+>!h8V{cu@2U&80RV)5&HaCy#hpKhl#GNBpBQHqr2+sV zJbVy{g!q3Q@Id$kgha#u2{nfvDGe>1sMvjL)F}8S#51>Q|4&>98;%MD!g2nKkeGy& zkO&t@hO>)M19$`=5I}%W0>b~x2OkeaKnM^KQTb#OHU zkmI;O)cDlEJz$|kQ7(6c_$RPeC}#O+`id04{v`w%QK%j<&9V5ZA|qw;ltRAD9r7 zynd90*;ZD2x2&wJPTqU4KHn%5rJtibyV!_ZM^5eX*JI`IP&HX;xvR|M5HLg3O>^p+ zSfN6TWq)U^C*cs$d0Rn|m6+Skw1M&H!4;61cuxE9v$`9lZSza?*zo(r2~Hc*oA=c? zEg<(#Y=|h$T<-pjNaZgdX@s@7p5hNkY zd!eO)(PYgumsNeK+ z=qsbm%+0wJFpquq0m3hd`H|UI)wK$TBXm%++*ZvceAEW5HK3mfw+L0Y#I^HZSL}ti%adHDlxbckA_u zsk}!@AV~Az`a}CqdC1e97WE2&Qpu7O)G^wB96|GTR9-1>AVs6Xh3oBTa^g4kmqO}$ zALUq@wZs%Wv3KgUKTOd!m`(D zviTZzw@S{{-+1!mD3EX0j$>o-;jdcQWmw?VvW= zekX9^N3~B^Mw8_8HHenO&>mG}Qy>6Fy+}1+_8o&dnU%klh!z#zE*mW)FD9)jjMrch z3&%L&u`3ZgFInohiC2xWekC0dZqek`WwcdAIUwnGoNScoUV^0ba;4I+t1x#N%b*zx z=K9uyqU$e(ZSkjf8(EC?x=yn0VA5zNTg`IowJq6ALdcOe?vB5-4l5HAbvJiJwzuf3 z`Repz!{Dvo)QZ}S0cO?*rQ3;}uRJOy)yWzwEE{2=He8D_w$Lr40XoB^#8ZXpHF>E3 zi)vm+u?bdKqv(NiX*a@op1#ZgYt%FyXg+Z-GK(`{wU?!{S&Ze3^gwX9u}cb)SW>wc zmopDaKX%Tgj;~L&7!ur%iz#n^7n`Oy5r+? ztX-UZ=@@!H>$XdE_!+NW1s|VX<_1v=u;aYBVrovt(o{^C68lh{##SiqA$s4faM0wb zVr71mzBCccvFW0tV}mBO%gM@GB@G?9HlzqZbk_tct3r7|iJQ$Fic%|}x}~T>RMUi% zdaF7ji+5KAen?n3$SU{gP$l3UY4)pzg*&dF7MQ0*TU#h_n3Fy#>=K})gL#YUEs2mrsob4UzF_Ia)v`TqsO(n_Rhq?pC7LLG z6WrF`@=$f$$?9E$q`bS_n8s<=eeCePWozIfyJBS}#@Fgo|qkx*;vzn7l3u^EeUAUxP`wgtt)#tXiJly&u3{2-8(a^ELO^h(?NvrJS3muHFu8SASbQf zD*2O{$xCuwyQ#(ab_d~^AiRP`Pr9O%?St=n3bI>ZH6s}x$nZ&FhgG3?YGn({Y!RiqN;AS1C z*;m9HD28&*7IE=fnwGxZEXbL|cl_tSV`EGGH6xej4{v0s$xD!t+`&{&l`ajEZZ4y> z-l1sM4Z55khS@4*fatD+#nS zm8}a~kB_94Kzi&rDkRvW4<9c2fgg{4?qZEDscD)cn2?t6r(Nw zRdh6w;HXyOD~B%GZy-&?5WnQx+!-(hthl=}8|pirK4; z1T&CZ;tR$28VZFC6`TZqrscb2Do!dZV9#q_MKMnoc~5Nf1+H6U@RLh)Ga>%2wiH_1 z=5Y^1?zdy{@7@Lm6T_|`dg1mJ+gM40#f(B4ie&qP>aeul9G)h-Wc4NG#6^Rs#E*AD zYy`|?VkGfuapfMpANPtxcMKcKzG#l8m&T6$+{;$c&}Z+DhvI%4dN&yL;^vb( z1)lbzkI3U(#%p0aU|bg~UTUv&vL!EV2o%)3giXCY623p-!Z%{qFBaA%HqSP&$vNB=IP|jy1!szOn^8bel*T- zzWjkw*YW2s&!gWPah9Ijw}uzA5cp9iC!xUs|7fh&+1k%9esqgUg+}>&=Umt;6ahz( WMCydeU!Eqk!F89<9(0FXP5%#lwHsFe literal 0 HcmV?d00001 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/66.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/66.png new file mode 100644 index 0000000000000000000000000000000000000000..834c6b0987f9a294782d4a695cf3f261ed8a013f GIT binary patch literal 5512 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%0Dr z(Om&5bM>goD)W%mz~J#VJY;|vz^CZBG%_Kld-;Sr6tHNK*<2N~Wtk-`QnHGxME|tlJvVH})L|uJZjjpW5-e~U9-okJZ9YuYQ)8-Ah>0rj!+o}U{ z4g>VN`Q~uVx=hWQBzuK7Nuvw%XF%|-`r_#Bs!g`R{?t?wi-?qb@XP$T@(OCJRGso9 zEj3KQ6Y<_xc8Qd?Pp5anT9ZfzF3EPL;^YiK{;Gff_#;z??8I!?@fncgB|lc0vwXvI zk-lWrW|FdP#HsB#d;8l^Y)*=O-wA^#Ly0S~S+hue^=OD3-LRJ} zZ4``Ig8L<1V-l4ta)eL5)-l)ydkCslfI(DPDk854CH-1PuwM3_-o?(td6UJpurb`a zLYU~+6QTJFKkYyGx_Q(ww07bu#l&|d4~%*P(z*yXDqsE-C0f$Wq7|MNH!e1Na0Ql= zO@H*uR-xd_*sU?HN4y4wktt+Bs(wdq|~gd zxp_fZbT!ozkhTUbM8^U z4i8std(g7^c6zfE|9G||x6a-)YaU7zbia5{ErJ(uU){Hl!>!n>hEUh^sc%R4P*o?q z*f8ni23`j8drU|?));;L{tJRqjR8y;$@<7;mTn&J5q9wdLLgoa!awz&QG6ZjD*ecUKe66tYSxHQr)W_%*m1O5=&P3;-)MxoOQ4=-~rX-u@kCyO| zQ&!$Og<3y$Sp_n2Yx=58oabz_4Wr1sSMRQI-0i_%Y=y$a@>#+BYZO9Lq1^F13q1`K zA@M0J$UgJ+u0uPu2m3?xZI1(znzwSb@*T;rp|o)TOUsRyqm8>Bt0zh z?-S{~;{fJ!S*1>8=9^WGHwJ??$EhR1j2bpo;`vvqRDY}fj!+Ak*6ZuJ>ca;aC`NG< zQ{>9so#8OzE;NJmz^FzH(rAUrPzjr^yB| z_(q!GCETyTZ&>~V42%V1O)ZhxE!%$xNw!x(4eG1x`WFgHH)h`@97O{U$e3 HIGgz&1>0`y literal 0 HcmV?d00001 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/80.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/80.png new file mode 100644 index 0000000000000000000000000000000000000000..485a1aae7bdc8d36d26d7aa6ecb35580edeb1db4 GIT binary patch literal 6923 zcmbtYWmr_vy54k14c(H`NDC4Q3_~Lf4BZ_A0waiofzk~_4IoPA&@qHc!_Xsf2P>+8K@KYQ)#`RmUBjSfT`0^s2R03NOY*Xwxm+Un|dhR_EP zZ9R>D3I+ij5lR4nx6dPgsHPg1xrHSc$>)Ds{FOO4A$FD4Ea>(h z*zrHGldu0@{dk;?k~ciyZ>+!cH)9GHADA(&C&g8E00BS&O+fAM^W(-idRPDe@}~em zko<3+V>SS^L;wKu;=g%(ZvcS$6#z7k|C{&kIq`Mycld`pLR^dQ>IwiSr2s%_0RVIp z06=c_4;ilcFS&8yMC`b{9^#4{00&$EEp zdB9m;e*i$FfFWQ=fCmEbL3jipyz5?o6F1*P0Kwm#_`igQPeMjcKuAhNjFZdJ001!_ z0X_i{2?5bRH1O~V2#JVE08$W{5iNHLy`b27x0ZM~Gcp1~e4JPT1mF?k5#SNw!VvvKhX4;B=N2FV(UQ_}OMav0QB7fBG;=+pTFPTQ#R9lrAYF| zv(5c8uJaf`!|r*@_;S3QkeQXgx&~zJJ|QR9sJgze`dtH0z4lK|W*_0C)B46q_wL=C z{`D`bntPvMQ%q~rHRJj+hcYuvtqB8;`qfSf@S1GV@{gX!vA2c_NDJJ)H!BQ)O^#

g>|+|H`0{D1 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 E0r_4uW&i*H literal 0 HcmV?d00001 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/88.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/88.png new file mode 100644 index 0000000000000000000000000000000000000000..f47fb37b5fcd294e85166493405cf9ea5e4cf520 GIT binary patch literal 7800 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 Aw*UYD literal 0 HcmV?d00001 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/Contents.json b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/Contents.json index 13847b5b5..922e8c6d7 100644 --- a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,31 +1 @@ -{ - "images" : [ - { "filename" : "icon-20@1x.png", "idiom" : "ipad", "scale" : "1x", "size" : "20x20" }, - { "filename" : "icon-20@2x.png", "idiom" : "ipad", "scale" : "2x", "size" : "20x20" }, - { "filename" : "icon-20@2x.png", "idiom" : "iphone","scale" : "2x", "size" : "20x20" }, - { "filename" : "icon-20@3x.png", "idiom" : "iphone","scale" : "3x", "size" : "20x20" }, - - { "filename" : "icon-29@1x.png", "idiom" : "ipad", "scale" : "1x", "size" : "29x29" }, - { "filename" : "icon-29@2x.png", "idiom" : "ipad", "scale" : "2x", "size" : "29x29" }, - { "filename" : "icon-29@2x.png", "idiom" : "iphone","scale" : "2x", "size" : "29x29" }, - { "filename" : "icon-29@3x.png", "idiom" : "iphone","scale" : "3x", "size" : "29x29" }, - - { "filename" : "icon-40@1x.png", "idiom" : "ipad", "scale" : "1x", "size" : "40x40" }, - { "filename" : "icon-40@2x.png", "idiom" : "ipad", "scale" : "2x", "size" : "40x40" }, - { "filename" : "icon-40@2x.png", "idiom" : "iphone","scale" : "2x", "size" : "40x40" }, - { "filename" : "icon-40@3x.png", "idiom" : "iphone","scale" : "3x", "size" : "40x40" }, - - { "filename" : "icon-60@2x.png", "idiom" : "iphone","scale" : "2x", "size" : "60x60" }, - { "filename" : "icon-60@3x.png", "idiom" : "iphone","scale" : "3x", "size" : "60x60" }, - - { "filename" : "icon-76@2x.png", "idiom" : "ipad", "scale" : "2x", "size" : "76x76" }, - - { "filename" : "icon-83.5@2x.png", "idiom" : "ipad", "scale" : "2x", "size" : "83.5x83.5" }, - - { "filename" : "icon-1024.png", "idiom" : "ios-marketing", "scale" : "1x", "size" : "1024x1024" } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} +{"images":[{"size":"60x60","expected-size":"180","filename":"180.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"40x40","expected-size":"80","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"40x40","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"60x60","expected-size":"120","filename":"120.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"57x57","expected-size":"57","filename":"57.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"29x29","expected-size":"29","filename":"29.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"1x"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"57x57","expected-size":"114","filename":"114.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"40","filename":"40.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"2x"},{"size":"20x20","expected-size":"60","filename":"60.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"iphone","scale":"3x"},{"size":"1024x1024","filename":"1024.png","expected-size":"1024","idiom":"ios-marketing","folder":"Assets.xcassets/AppIcon.appiconset/","scale":"1x"},{"idiom":"watch","filename":"172.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"38mm","scale":"2x","size":"86x86","expected-size":"172","role":"quickLook"},{"idiom":"watch","filename":"80.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"38mm","scale":"2x","size":"40x40","expected-size":"80","role":"appLauncher"},{"idiom":"watch","filename":"88.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"40mm","scale":"2x","size":"44x44","expected-size":"88","role":"appLauncher"},{"idiom":"watch","filename":"102.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"45mm","scale":"2x","size":"51x51","expected-size":"102","role":"appLauncher"},{"idiom":"watch","filename":"108.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"49mm","scale":"2x","size":"54x54","expected-size":"108","role":"appLauncher"},{"idiom":"watch","filename":"92.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"41mm","scale":"2x","size":"46x46","expected-size":"92","role":"appLauncher"},{"idiom":"watch","filename":"100.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"44mm","scale":"2x","size":"50x50","expected-size":"100","role":"appLauncher"},{"idiom":"watch","filename":"196.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"42mm","scale":"2x","size":"98x98","expected-size":"196","role":"quickLook"},{"idiom":"watch","filename":"216.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"44mm","scale":"2x","size":"108x108","expected-size":"216","role":"quickLook"},{"idiom":"watch","filename":"234.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"45mm","scale":"2x","size":"117x117","expected-size":"234","role":"quickLook"},{"idiom":"watch","filename":"258.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"49mm","scale":"2x","size":"129x129","expected-size":"258","role":"quickLook"},{"idiom":"watch","filename":"48.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"38mm","scale":"2x","size":"24x24","expected-size":"48","role":"notificationCenter"},{"idiom":"watch","filename":"55.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"42mm","scale":"2x","size":"27.5x27.5","expected-size":"55","role":"notificationCenter"},{"idiom":"watch","filename":"66.png","folder":"Assets.xcassets/AppIcon.appiconset/","subtype":"45mm","scale":"2x","size":"33x33","expected-size":"66","role":"notificationCenter"},{"size":"29x29","expected-size":"87","filename":"87.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"watch","role":"companionSettings","scale":"3x"},{"size":"29x29","expected-size":"58","filename":"58.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"watch","role":"companionSettings","scale":"2x"},{"size":"1024x1024","expected-size":"1024","filename":"1024.png","folder":"Assets.xcassets/AppIcon.appiconset/","idiom":"watch-marketing","scale":"1x"}]} \ No newline at end of file diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-1024.png deleted file mode 100644 index 727447359895dc38222e4c7b3140b6bdf3103c87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 213076 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 NrB`b5<#HCG{|9)Nul)c3 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-20@1x.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-20@1x.png deleted file mode 100644 index 597a51c28c5baf3efc98d08f4f9569d99f64c950..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 878 zcmV-!1CjiRP)-t1SfB6)S+bO6h|KDxC8`!M9ufrFQS9jV=Lz`|QlQO17es zS(M264;}AxtvYS!Wb(t5uAQz`7u>$&(X2}Dk?}j_%>CK)_}vGK&Zox@W_c(OiyAw# z-j_;!czFLqm+QZDdH`_5p8oyB(btyST;at7b|+4#QUlGL|MhRy+zytv!zZR_Amp0F zLw4rXDb@Cal&&ALGYF8@Swv&09O0Mr>`u3AHo5Hp_C<^R&&|svX1cqURVbb4p2g-277atULh)6o^*8l(j07*qoM6N<$ Ef|tdg$^ZZW diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png deleted file mode 100644 index 28c7bb997fc0632e15c38a1104f970f7d04972e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2383 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 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-29@1x.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-29@1x.png deleted file mode 100644 index c760572de77fe1d7aaebe2992ef2646669e6a9e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1459 zcmV;k1x)&hP)l#f!6ohq zL4qU@BY}_*iN``(?~+!INCcrT&yOra#}q&T7(lf|k7tS{Djn`_w)45L zOnsWlgb>0d8WDrsF^k2+%bOXMj?R>;DPiE++5k(?>8%S3Bm|hV>0)98Wfk1&5FyHh zoe)Ntqo}El2|Pv#6V&r22JDZ&clYC?J206E>zc$Xo?WJW1do>Z&R+)rL{CG^ z?^rvcnr@ai)JFjEor{Ctl+jPAN309NSgo!d_~Qn5Y>G&{62qaPv0bT>qx-pVvnC*H zS=lj^EEq;C6zmBp1;!O-7rEFFQtN_&vT5!ZN?NK$Jbf;J`~177jRQmDh`@xnqfs

RYc&ge7utVQea$mVADvREpPxdxvL63Z)M_8f)z`1Behv`m5IU z4J4-ix}0Qo4;!7n{_53jq?$%}G-1qo1MEB`y*8^i+y3|!2TCRu? zB~`NYgG0CV4=1LkC3OAV>>)P^1@}fEz)zE@fU10sWQAW|UN+BU@~=g8*0>=4_Ip;} zX?fL}-1F;~+p69al0pGM~e=%LmnAYoY|K65b>XmwS)4PLTg2;tf*WCC) zTWlc}pvqgu3Qzdy8ZdM5#(ZN-Xmrq@n(SADM+(mSaRn?V!O7OasS}CuiY?6Hp#tvJ z@#OIM3qU$TzSTjIFf0}ffTWVCiRi?rDM>_A3#N4~YkaDbA2Y>ai=9f0qh|}VFn2T% zcLL$l@v6;HU)Hj3c9&e&P=3$Ih9HFkNl#y-qc3i)bYTJ@lZrlZkYDLRQ{vO zgI-Vd)Ufh+FCZS*HzUh(ZB-S>%B>0SZoz*9o#o;_xSNB2_bYUt@h2L3oD6%tUHt$6 N002ovPDHLkV1k6*uh#$o diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png deleted file mode 100644 index b804a6f1f2bb66bf873df8be660818c5fd769227..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4050 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 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png deleted file mode 100644 index 609a96df603553b56d1fae8a75b6db034b6619ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6951 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 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png deleted file mode 100644 index d2bbed7f8be8b432cc0ccc1cdef252a1e9dbfe78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10443 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 B+G_v+ diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png deleted file mode 100644 index af7ae5efaedee5d9b65ac7e12bca022b4f7ec262..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13936 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 Uc3JYDDH|XwsU%S^W*qYW0P6?%g#Z8m diff --git a/apps/ios/Sources/Assets.xcassets/Contents.json b/apps/ios/Sources/Assets.xcassets/Contents.json deleted file mode 100644 index 73c00596a..000000000 --- a/apps/ios/Sources/Assets.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/apps/ios/Sources/Model/NodeAppModel.swift b/apps/ios/Sources/Model/NodeAppModel.swift index 06cb5453f..5bd98e6f4 100644 --- a/apps/ios/Sources/Model/NodeAppModel.swift +++ b/apps/ios/Sources/Model/NodeAppModel.swift @@ -1904,6 +1904,7 @@ private extension NodeAppModel { } GatewayDiagnostics.log( "operator gateway connected host=\(url.host ?? "?") scheme=\(url.scheme ?? "?")") + await self.talkMode.reloadConfig() await self.refreshBrandingFromGateway() await self.refreshAgentsFromGateway() await self.refreshShareRouteFromGateway() diff --git a/apps/ios/Sources/Settings/SettingsTab.swift b/apps/ios/Sources/Settings/SettingsTab.swift index a74f2fed9..024a4cbf4 100644 --- a/apps/ios/Sources/Settings/SettingsTab.swift +++ b/apps/ios/Sources/Settings/SettingsTab.swift @@ -306,6 +306,26 @@ struct SettingsTab: View { help: "Keeps the screen awake while OpenClaw is open.") DisclosureGroup("Advanced") { + VStack(alignment: .leading, spacing: 8) { + Text("Talk Voice (Gateway)") + .font(.footnote.weight(.semibold)) + .foregroundStyle(.secondary) + LabeledContent("Provider", value: "ElevenLabs") + LabeledContent( + "API Key", + value: self.appModel.talkMode.gatewayTalkConfigLoaded + ? (self.appModel.talkMode.gatewayTalkApiKeyConfigured ? "Configured" : "Not configured") + : "Not loaded") + LabeledContent( + "Default Model", + value: self.appModel.talkMode.gatewayTalkDefaultModelId ?? "eleven_v3 (fallback)") + LabeledContent( + "Default Voice", + value: self.appModel.talkMode.gatewayTalkDefaultVoiceId ?? "auto (first available)") + Text("Configured on gateway via talk.apiKey, talk.modelId, and talk.voiceId.") + .font(.footnote) + .foregroundStyle(.secondary) + } self.featureToggle( "Voice Directive Hint", isOn: self.$talkVoiceDirectiveHintEnabled, @@ -399,6 +419,9 @@ struct SettingsTab: View { // Keep setup front-and-center when disconnected; keep things compact once connected. self.gatewayExpanded = !self.isGatewayConnected self.selectedAgentPickerId = self.appModel.selectedAgentId ?? "" + if self.isGatewayConnected { + self.appModel.reloadTalkConfig() + } } .onChange(of: self.selectedAgentPickerId) { _, newValue in let trimmed = newValue.trimmingCharacters(in: .whitespacesAndNewlines) diff --git a/apps/ios/Sources/Voice/TalkModeManager.swift b/apps/ios/Sources/Voice/TalkModeManager.swift index be90208af..0f5ffde4e 100644 --- a/apps/ios/Sources/Voice/TalkModeManager.swift +++ b/apps/ios/Sources/Voice/TalkModeManager.swift @@ -24,6 +24,10 @@ final class TalkModeManager: NSObject { var statusText: String = "Off" /// 0..1-ish (not calibrated). Intended for UI feedback only. var micLevel: Double = 0 + var gatewayTalkConfigLoaded: Bool = false + var gatewayTalkApiKeyConfigured: Bool = false + var gatewayTalkDefaultModelId: String? + var gatewayTalkDefaultVoiceId: String? private enum CaptureMode { case idle @@ -1733,6 +1737,10 @@ extension TalkModeManager { } else { self.apiKey = (localApiKey?.isEmpty == false) ? localApiKey : configApiKey } + self.gatewayTalkDefaultVoiceId = self.defaultVoiceId + self.gatewayTalkDefaultModelId = self.defaultModelId + self.gatewayTalkApiKeyConfigured = (self.apiKey?.isEmpty == false) + self.gatewayTalkConfigLoaded = true if let interrupt = talk?["interruptOnSpeech"] as? Bool { self.interruptOnSpeech = interrupt } @@ -1741,6 +1749,10 @@ extension TalkModeManager { if !self.modelOverrideActive { self.currentModelId = self.defaultModelId } + self.gatewayTalkDefaultVoiceId = nil + self.gatewayTalkDefaultModelId = nil + self.gatewayTalkApiKeyConfigured = false + self.gatewayTalkConfigLoaded = false } } From d7891badda916ad078bff1a95b6d8f4d478be869 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sat, 21 Feb 2026 03:36:03 -0500 Subject: [PATCH 0127/1007] docs: more channel heading consistency updates (#22541) * docs: fix thinking link and add reasoning anchor reference * docs(channels): rename LINE setup heading to onboarding * docs(channels): normalize Nextcloud Talk onboarding headings * docs(channels): use onboarding heading for Matrix setup * docs(channels): standardize Discord onboarding heading * docs(channels): standardize Telegram onboarding heading * docs(channels): standardize WhatsApp onboarding heading * docs(channels): rename iMessage onboarding and configuration sections * docs(channels): rename Slack onboarding and configuration sections * docs(channels): rename Signal onboarding heading * docs(channels): standardize Nostr onboarding and configuration headings * docs(channels): standardize Zalo onboarding and configuration headings * docs(channels): standardize Twitch onboarding heading * docs(channels): standardize Google Chat onboarding heading * docs(channels): standardize Mattermost onboarding heading * docs(channels): standardize Zalo Personal onboarding heading * docs(channels): normalize Discord configuration heading * docs(channels): standardize Microsoft Teams onboarding heading * docs(channels): rename Signal configuration reference heading * docs(channels): rename Matrix configuration reference heading * docs(channels): normalize WhatsApp configuration heading * docs(thinking): link reasoning section heading to in-page anchor * docs(channels): normalize BlueBubbles configuration heading * docs(channels): normalize Feishu configuration heading * docs(channels): standardize Signal setup option headings --- docs/channels/bluebubbles.md | 2 +- docs/channels/feishu.md | 2 +- docs/channels/signal.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/channels/bluebubbles.md b/docs/channels/bluebubbles.md index fd677a1d5..c639cacec 100644 --- a/docs/channels/bluebubbles.md +++ b/docs/channels/bluebubbles.md @@ -284,7 +284,7 @@ Control whether responses are sent as a single message or streamed in blocks: - Media cap via `channels.bluebubbles.mediaMaxMb` (default: 8 MB). - Outbound text is chunked to `channels.bluebubbles.textChunkLimit` (default: 4000 chars). -## Configuration reference +## Configuration Full configuration: [Configuration](/gateway/configuration) diff --git a/docs/channels/feishu.md b/docs/channels/feishu.md index e92f84460..8a1853dd2 100644 --- a/docs/channels/feishu.md +++ b/docs/channels/feishu.md @@ -523,7 +523,7 @@ See [Get group/user IDs](#get-groupuser-ids) for lookup tips. --- -## Configuration reference +## Configuration Full configuration: [Gateway configuration](/gateway/configuration) diff --git a/docs/channels/signal.md b/docs/channels/signal.md index f5a9ad147..150b80b3f 100644 --- a/docs/channels/signal.md +++ b/docs/channels/signal.md @@ -76,7 +76,7 @@ Disable with: - If you run the bot on **your personal Signal account**, it will ignore your own messages (loop protection). - For "I text the bot and it replies," use a **separate bot number**. -## Setup path A: link existing Signal account (QR) +## Setup (option A): link existing Signal account (QR) 1. Install `signal-cli` (JVM or native build). 2. Link a bot account: @@ -101,7 +101,7 @@ Example: Multi-account support: use `channels.signal.accounts` with per-account config and optional `name`. See [`gateway/configuration`](/gateway/configuration#telegramaccounts--discordaccounts--slackaccounts--signalaccounts--imessageaccounts) for the shared pattern. -## Setup path B: register dedicated bot number (SMS, Linux) +## Setup (option B): register dedicated bot number (SMS, Linux) Use this when you want a dedicated bot number instead of linking an existing Signal app account. From b5a77b9cb20217879bec037db1b3d06463cd1380 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sat, 21 Feb 2026 03:36:39 -0500 Subject: [PATCH 0128/1007] docs: finalize remaining setup heading phrasing (#22543) * docs: fix thinking link and add reasoning anchor reference * docs(channels): rename LINE setup heading to onboarding * docs(channels): normalize Nextcloud Talk onboarding headings * docs(channels): use onboarding heading for Matrix setup * docs(channels): standardize Discord onboarding heading * docs(channels): standardize Telegram onboarding heading * docs(channels): standardize WhatsApp onboarding heading * docs(channels): rename iMessage onboarding and configuration sections * docs(channels): rename Slack onboarding and configuration sections * docs(channels): rename Signal onboarding heading * docs(channels): standardize Nostr onboarding and configuration headings * docs(channels): standardize Zalo onboarding and configuration headings * docs(channels): standardize Twitch onboarding heading * docs(channels): standardize Google Chat onboarding heading * docs(channels): standardize Mattermost onboarding heading * docs(channels): standardize Zalo Personal onboarding heading * docs(channels): normalize Discord configuration heading * docs(channels): standardize Microsoft Teams onboarding heading * docs(channels): rename Signal configuration reference heading * docs(channels): rename Matrix configuration reference heading * docs(channels): normalize WhatsApp configuration heading * docs(thinking): link reasoning section heading to in-page anchor * docs(channels): normalize BlueBubbles configuration heading * docs(channels): normalize Feishu configuration heading * docs(channels): standardize Signal setup option headings * docs(channels): refine Twitch setup heading clarity * docs(channels): simplify Zalo setup heading phrasing * docs(channels): trim Microsoft Teams minimal setup heading --- docs/channels/msteams.md | 3 ++- docs/channels/twitch.md | 2 +- docs/channels/zalo.md | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/channels/msteams.md b/docs/channels/msteams.md index ea4ede61b..58028b9eb 100644 --- a/docs/channels/msteams.md +++ b/docs/channels/msteams.md @@ -236,7 +236,8 @@ This is often easier than hand-editing JSON manifests. 2. Find the bot in Teams and send a DM 3. Check gateway logs for incoming activity -## Setup (minimal text-only) +## Setup (minimal) + 1. **Install the Microsoft Teams plugin** - From npm: `openclaw plugins install @openclaw/msteams` diff --git a/docs/channels/twitch.md b/docs/channels/twitch.md index 6390be668..4e75a5090 100644 --- a/docs/channels/twitch.md +++ b/docs/channels/twitch.md @@ -67,7 +67,7 @@ Minimal config: - Each account maps to an isolated session key `agent::twitch:`. - `username` is the bot's account (who authenticates), `channel` is which chat room to join. -## Setup (detailed) +## Setup (detailed, recommended) ### Generate credentials diff --git a/docs/channels/zalo.md b/docs/channels/zalo.md index d230f3032..24e51f870 100644 --- a/docs/channels/zalo.md +++ b/docs/channels/zalo.md @@ -53,7 +53,7 @@ It is a good fit for support or notifications where you want deterministic routi - DMs share the agent's main session. - Groups are not yet supported (Zalo docs state "coming soon"). -## Setup (fast path) +## Setup (quick path) ### 1) Create a bot token (Zalo Bot Platform) From ef42fe0094f57c87d6b1dba23dce657fe55493c8 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sat, 21 Feb 2026 03:37:27 -0500 Subject: [PATCH 0129/1007] docs: rename Tlon setup heading (#22544) * docs: fix thinking link and add reasoning anchor reference * docs(channels): rename LINE setup heading to onboarding * docs(channels): normalize Nextcloud Talk onboarding headings * docs(channels): use onboarding heading for Matrix setup * docs(channels): standardize Discord onboarding heading * docs(channels): standardize Telegram onboarding heading * docs(channels): standardize WhatsApp onboarding heading * docs(channels): rename iMessage onboarding and configuration sections * docs(channels): rename Slack onboarding and configuration sections * docs(channels): rename Signal onboarding heading * docs(channels): standardize Nostr onboarding and configuration headings * docs(channels): standardize Zalo onboarding and configuration headings * docs(channels): standardize Twitch onboarding heading * docs(channels): standardize Google Chat onboarding heading * docs(channels): standardize Mattermost onboarding heading * docs(channels): standardize Zalo Personal onboarding heading * docs(channels): normalize Discord configuration heading * docs(channels): standardize Microsoft Teams onboarding heading * docs(channels): rename Signal configuration reference heading * docs(channels): rename Matrix configuration reference heading * docs(channels): normalize WhatsApp configuration heading * docs(thinking): link reasoning section heading to in-page anchor * docs(channels): normalize BlueBubbles configuration heading * docs(channels): normalize Feishu configuration heading * docs(channels): standardize Signal setup option headings * docs(channels): refine Twitch setup heading clarity * docs(channels): simplify Zalo setup heading phrasing * docs(channels): trim Microsoft Teams minimal setup heading * docs(channels): rename Tlon setup to onboarding --- docs/channels/tlon.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/channels/tlon.md b/docs/channels/tlon.md index dbd2015c4..039f32288 100644 --- a/docs/channels/tlon.md +++ b/docs/channels/tlon.md @@ -32,7 +32,7 @@ openclaw plugins install ./extensions/tlon Details: [Plugins](/tools/plugin) -## Setup +## Onboarding 1. Install the Tlon plugin. 2. Gather your ship URL and login code. From e36245bd3717f9a6258a0fc67e70b83ae5dd5410 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sat, 21 Feb 2026 03:38:37 -0500 Subject: [PATCH 0130/1007] docs: finalize onboarding option heading normalization (#22547) * docs(channels): promote Signal option setups to onboarding sections * docs(channels): rename Microsoft Teams minimal setup section * docs(channels): standardize onboarding option headings for Zalo and Twitch --- docs/channels/msteams.md | 2 +- docs/channels/signal.md | 4 ++-- docs/channels/twitch.md | 2 +- docs/channels/zalo.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/channels/msteams.md b/docs/channels/msteams.md index 58028b9eb..a8ba59efc 100644 --- a/docs/channels/msteams.md +++ b/docs/channels/msteams.md @@ -236,7 +236,7 @@ This is often easier than hand-editing JSON manifests. 2. Find the bot in Teams and send a DM 3. Check gateway logs for incoming activity -## Setup (minimal) +## Onboarding (minimal) 1. **Install the Microsoft Teams plugin** diff --git a/docs/channels/signal.md b/docs/channels/signal.md index 150b80b3f..e28238db0 100644 --- a/docs/channels/signal.md +++ b/docs/channels/signal.md @@ -76,7 +76,7 @@ Disable with: - If you run the bot on **your personal Signal account**, it will ignore your own messages (loop protection). - For "I text the bot and it replies," use a **separate bot number**. -## Setup (option A): link existing Signal account (QR) +## Onboarding (option A): link existing Signal account (QR) 1. Install `signal-cli` (JVM or native build). 2. Link a bot account: @@ -101,7 +101,7 @@ Example: Multi-account support: use `channels.signal.accounts` with per-account config and optional `name`. See [`gateway/configuration`](/gateway/configuration#telegramaccounts--discordaccounts--slackaccounts--signalaccounts--imessageaccounts) for the shared pattern. -## Setup (option B): register dedicated bot number (SMS, Linux) +## Onboarding (option B): register dedicated bot number (SMS, Linux) Use this when you want a dedicated bot number instead of linking an existing Signal app account. diff --git a/docs/channels/twitch.md b/docs/channels/twitch.md index 4e75a5090..ff1ff7166 100644 --- a/docs/channels/twitch.md +++ b/docs/channels/twitch.md @@ -67,7 +67,7 @@ Minimal config: - Each account maps to an isolated session key `agent::twitch:`. - `username` is the bot's account (who authenticates), `channel` is which chat room to join. -## Setup (detailed, recommended) +## Onboarding (detailed, recommended) ### Generate credentials diff --git a/docs/channels/zalo.md b/docs/channels/zalo.md index 24e51f870..a3c042c99 100644 --- a/docs/channels/zalo.md +++ b/docs/channels/zalo.md @@ -53,7 +53,7 @@ It is a good fit for support or notifications where you want deterministic routi - DMs share the agent's main session. - Groups are not yet supported (Zalo docs state "coming soon"). -## Setup (quick path) +## Onboarding (quick path) ### 1) Create a bot token (Zalo Bot Platform) From dcf2c6d7f14d3a7bc88c3680a6a5cfe968842b7d Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sat, 21 Feb 2026 03:40:54 -0500 Subject: [PATCH 0131/1007] docs: normalize Amazon Bedrock setup section labels (#22549) * docs(channels): promote Signal option setups to onboarding sections * docs(channels): rename Microsoft Teams minimal setup section * docs(channels): standardize onboarding option headings for Zalo and Twitch * docs(providers): normalize Amazon Bedrock onboarding section labels --- docs/providers/bedrock.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/providers/bedrock.md b/docs/providers/bedrock.md index 34c759dbb..e6e3f807e 100644 --- a/docs/providers/bedrock.md +++ b/docs/providers/bedrock.md @@ -51,7 +51,7 @@ Notes: - `defaultContextWindow` (default: `32000`) and `defaultMaxTokens` (default: `4096`) are used for discovered models (override if you know your model limits). -## Setup (manual) +## Onboarding 1. Ensure AWS credentials are available on the **gateway host**: @@ -122,7 +122,7 @@ export AWS_REGION=us-east-1 Or attach the managed policy `AmazonBedrockFullAccess`. -**Quick setup:** +## Quick setup (AWS path) ```bash # 1. Create IAM role and instance profile From d2a7293744a572edf96cb8757ef3994ed4f07226 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sat, 21 Feb 2026 03:43:35 -0500 Subject: [PATCH 0132/1007] Docs: issue template copy cleanup (#22546) * docs: reduce channel-specific wording in feature template placeholder * docs: make bug report template placeholders version-neutral * docs: fix YAML indentation in bug report placeholder * docs: fix indentation of version field in bug report template --- .github/ISSUE_TEMPLATE/bug_report.yml | 8 ++++---- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 56a343c38..deff1dd81 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -13,7 +13,7 @@ body: attributes: label: Summary description: One-sentence statement of what is broken. - placeholder: After upgrading to 2026.2.13, Telegram thread replies fail with "reply target not found". + placeholder: After upgrading to , behavior regressed from . validations: required: true - type: textarea @@ -48,7 +48,7 @@ body: attributes: label: OpenClaw version description: Exact version/build tested. - placeholder: 2026.2.13 + placeholder: 2026.2.17 validations: required: true - type: input @@ -83,7 +83,7 @@ body: - Frequency (always/intermittent/edge case) - Consequence (missed messages, failed onboarding, extra cost, etc.) placeholder: | - Affected: Telegram group users on 2026.2.13 + Affected: Telegram group users on Severity: High (blocks replies) Frequency: 100% repro Consequence: Agents cannot respond in threads @@ -92,4 +92,4 @@ body: attributes: label: Additional information description: Add any context that helps triage but does not fit above. - placeholder: Regression started after upgrade from 2026.2.12; temporary workaround is restarting gateway every 30m. + placeholder: Regression started after upgrade from ; temporary workaround is ... diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 3594b73a2..a08b45678 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -21,7 +21,7 @@ body: attributes: label: Problem to solve description: What user pain this solves and why current behavior is insufficient. - placeholder: Teams cannot distinguish agent personas in mixed channels, causing misrouted follow-ups. + placeholder: Agents cannot distinguish persona context in mixed channels, causing misrouted follow-ups. validations: required: true - type: textarea From 3f19259843f56dd4da72d9a1ae9e78cbba74e09c Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sat, 21 Feb 2026 04:06:07 -0500 Subject: [PATCH 0133/1007] Update bug_report.yml --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index deff1dd81..927aa7079 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -48,7 +48,7 @@ body: attributes: label: OpenClaw version description: Exact version/build tested. - placeholder: 2026.2.17 + placeholder: validations: required: true - type: input From e1cb73cdeb60dbbd8c444e62c3e3e6a68b970980 Mon Sep 17 00:00:00 2001 From: Ayaan Zaidi Date: Sat, 21 Feb 2026 14:47:28 +0530 Subject: [PATCH 0134/1007] fix: unblock Docker build by aligning commands schema default (#22558) Merged via /review-pr -> /prepare-pr -> /merge-pr. Prepared head SHA: 1ad610176d0d08eb5ba055429a10d7e8f9ec07a4 Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com> Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com> Reviewed-by: @obviyus --- CHANGELOG.md | 1 + docs/channels/msteams.md | 1 - src/agents/system-prompt.ts | 4 ++-- src/agents/tool-call-id.ts | 2 +- src/config/zod-schema.session.ts | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 01e8c20d2..63c12b141 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,7 @@ Docs: https://docs.openclaw.ai ### Fixes +- Docker/Build: include `ownerDisplay` in `CommandsSchema` object-level defaults so Docker `pnpm build` no longer fails with `TS2769` during plugin SDK d.ts generation. (#22558) Thanks @obviyus. - Security/Gateway/Hooks: block `__proto__`, `constructor`, and `prototype` traversal in webhook template path resolution to prevent prototype-chain payload data leakage in `messageTemplate` rendering. (#22213) Thanks @SleuthCo. - Cron: honor `cron.maxConcurrentRuns` in the timer loop so due jobs can execute up to the configured parallelism instead of always running serially. (#11595) Thanks @Takhoffman. - Agents/Compaction: restore embedded compaction safeguard/context-pruning extension loading in production by wiring bundled extension factories into the resource loader instead of runtime file-path resolution. (#22349) Thanks @Glucksberg. diff --git a/docs/channels/msteams.md b/docs/channels/msteams.md index a8ba59efc..21c352032 100644 --- a/docs/channels/msteams.md +++ b/docs/channels/msteams.md @@ -238,7 +238,6 @@ This is often easier than hand-editing JSON manifests. ## Onboarding (minimal) - 1. **Install the Microsoft Teams plugin** - From npm: `openclaw plugins install @openclaw/msteams` - From a local checkout: `openclaw plugins install ./extensions/msteams` diff --git a/src/agents/system-prompt.ts b/src/agents/system-prompt.ts index e92207972..74530db68 100644 --- a/src/agents/system-prompt.ts +++ b/src/agents/system-prompt.ts @@ -1,10 +1,10 @@ import { createHmac, createHash } from "node:crypto"; import type { ReasoningLevel, ThinkLevel } from "../auto-reply/thinking.js"; +import { SILENT_REPLY_TOKEN } from "../auto-reply/tokens.js"; import type { MemoryCitationsMode } from "../config/types.memory.js"; +import { listDeliverableMessageChannels } from "../utils/message-channel.js"; import type { ResolvedTimeFormat } from "./date-time.js"; import type { EmbeddedContextFile } from "./pi-embedded-helpers.js"; -import { SILENT_REPLY_TOKEN } from "../auto-reply/tokens.js"; -import { listDeliverableMessageChannels } from "../utils/message-channel.js"; import { sanitizeForPromptLiteral } from "./sanitize-for-prompt.js"; /** diff --git a/src/agents/tool-call-id.ts b/src/agents/tool-call-id.ts index fa28d6f0c..e30236e6e 100644 --- a/src/agents/tool-call-id.ts +++ b/src/agents/tool-call-id.ts @@ -1,5 +1,5 @@ -import type { AgentMessage } from "@mariozechner/pi-agent-core"; import { createHash } from "node:crypto"; +import type { AgentMessage } from "@mariozechner/pi-agent-core"; export type ToolCallIdMode = "strict" | "strict9"; diff --git a/src/config/zod-schema.session.ts b/src/config/zod-schema.session.ts index 08fcafa2e..8139d2368 100644 --- a/src/config/zod-schema.session.ts +++ b/src/config/zod-schema.session.ts @@ -168,4 +168,4 @@ export const CommandsSchema = z }) .strict() .optional() - .default({ native: "auto", nativeSkills: "auto", restart: true }); + .default({ native: "auto", nativeSkills: "auto", restart: true, ownerDisplay: "raw" }); From 677384c519b74906fce8f649dfb82331c70f84ec Mon Sep 17 00:00:00 2001 From: Ayaan Zaidi Date: Sat, 21 Feb 2026 15:19:13 +0530 Subject: [PATCH 0135/1007] refactor: simplify Telegram preview streaming to single boolean (#22012) Merged via /review-pr -> /prepare-pr -> /merge-pr. Prepared head SHA: a4017d3b9469d0c25c6ab3f4d9be06b98445474e Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com> Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com> Reviewed-by: @obviyus --- CHANGELOG.md | 1 + docs/channels/grammy.md | 2 +- docs/channels/telegram.md | 23 +--- docs/concepts/streaming.md | 11 +- docs/gateway/configuration-reference.md | 7 +- ...tion.rejects-routing-allowfrom.e2e.test.ts | 39 ++++++- src/config/schema.help.ts | 10 +- src/config/schema.labels.ts | 5 +- src/config/types.telegram.ts | 6 +- src/config/zod-schema.providers-core.ts | 27 ++++- src/telegram/bot-message-dispatch.test.ts | 9 +- src/telegram/bot-message-dispatch.ts | 102 ++++-------------- src/telegram/bot/helpers.ts | 11 +- 13 files changed, 116 insertions(+), 137 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 63c12b141..95f839055 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ Docs: https://docs.openclaw.ai - Security/Unused Dependencies: remove unused plugin-local `openclaw` devDependencies from `extensions/open-prose`, `extensions/lobster`, and `extensions/llm-task` after removing this dependency from build-time requirements. (#22495) Thanks @vincentkoc. - Agents/Subagents: default subagent spawn depth now uses shared `maxSpawnDepth=2`, enabling depth-1 orchestrator spawning by default while keeping depth policy checks consistent across spawn and prompt paths. (#22223) Thanks @tyler6204. - Channels/CLI: add per-account/channel `defaultTo` outbound routing fallback so `openclaw agent --deliver` can send without explicit `--reply-to` when a default target is configured. (#16985) Thanks @KirillShchetinin. +- Telegram/Streaming: simplify preview streaming config to `channels.telegram.streaming` (boolean), auto-map legacy `streamMode` values, and remove block-vs-partial preview branching. (#22012) thanks @obviyus. - iOS/Chat: clean chat UI noise by stripping inbound untrusted metadata/timestamp prefixes, formatting tool outputs into concise summaries/errors, compacting the composer while typing, and supporting tap-to-dismiss keyboard in chat view. (#22122) thanks @mbelinky. - iOS/Watch: bridge mirrored watch prompt notification actions into iOS quick-reply handling, including queued action handoff until app model initialization. (#22123) thanks @mbelinky. - iOS/Tests: cover IPv4-mapped IPv6 loopback in manual TLS policy tests for connect validation paths. (#22045) Thanks @mbelinky. diff --git a/docs/channels/grammy.md b/docs/channels/grammy.md index ae92c5292..570acabfb 100644 --- a/docs/channels/grammy.md +++ b/docs/channels/grammy.md @@ -21,7 +21,7 @@ title: grammY - **Webhook support:** `webhook-set.ts` wraps `setWebhook/deleteWebhook`; `webhook.ts` hosts the callback with health + graceful shutdown. Gateway enables webhook mode when `channels.telegram.webhookUrl` + `channels.telegram.webhookSecret` are set (otherwise it long-polls). - **Sessions:** direct chats collapse into the agent main session (`agent::`); groups use `agent::telegram:group:`; replies route back to the same channel. - **Config knobs:** `channels.telegram.botToken`, `channels.telegram.dmPolicy`, `channels.telegram.groups` (allowlist + mention defaults), `channels.telegram.allowFrom`, `channels.telegram.groupAllowFrom`, `channels.telegram.groupPolicy`, `channels.telegram.mediaMaxMb`, `channels.telegram.linkPreview`, `channels.telegram.proxy`, `channels.telegram.webhookSecret`, `channels.telegram.webhookUrl`, `channels.telegram.webhookHost`. -- **Live stream preview:** optional `channels.telegram.streamMode` sends a temporary message and updates it with `editMessageText`. This is separate from channel block streaming. +- **Live stream preview:** optional `channels.telegram.streaming` sends a temporary message and updates it with `editMessageText`. This is separate from channel block streaming. - **Tests:** grammy mocks cover DM + group mention gating and outbound send; more media/webhook fixtures still welcome. Open questions diff --git a/docs/channels/telegram.md b/docs/channels/telegram.md index b354a37ac..01e13ea1a 100644 --- a/docs/channels/telegram.md +++ b/docs/channels/telegram.md @@ -226,21 +226,8 @@ curl "https://api.telegram.org/bot/getUpdates" Requirement: - - `channels.telegram.streamMode` is not `"off"` (default: `"partial"`) - - Modes: - - - `off`: no live preview - - `partial`: frequent preview updates from partial text - - `block`: chunked preview updates using `channels.telegram.draftChunk` - - `draftChunk` defaults for `streamMode: "block"`: - - - `minChars: 200` - - `maxChars: 800` - - `breakPreference: "paragraph"` - - `maxChars` is clamped by `channels.telegram.textChunkLimit`. + - `channels.telegram.streaming` is `true` (default) + - legacy `channels.telegram.streamMode` values are auto-mapped to `streaming` This works in direct chats and groups/topics. @@ -248,7 +235,7 @@ curl "https://api.telegram.org/bot/getUpdates" For complex replies (for example media payloads), OpenClaw falls back to normal final delivery and then cleans up the preview message. - `streamMode` is separate from block streaming. When block streaming is explicitly enabled for Telegram, OpenClaw skips the preview stream to avoid double-streaming. + Preview streaming is separate from block streaming. When block streaming is explicitly enabled for Telegram, OpenClaw skips the preview stream to avoid double-streaming. Telegram-only reasoning stream: @@ -721,7 +708,7 @@ Primary reference: - `channels.telegram.textChunkLimit`: outbound chunk size (chars). - `channels.telegram.chunkMode`: `length` (default) or `newline` to split on blank lines (paragraph boundaries) before length chunking. - `channels.telegram.linkPreview`: toggle link previews for outbound messages (default: true). -- `channels.telegram.streamMode`: `off | partial | block` (live stream preview). +- `channels.telegram.streaming`: `true | false` (live stream preview; default: true). - `channels.telegram.mediaMaxMb`: inbound/outbound media cap (MB). - `channels.telegram.retry`: retry policy for outbound Telegram API calls (attempts, minDelayMs, maxDelayMs, jitter). - `channels.telegram.network.autoSelectFamily`: override Node autoSelectFamily (true=enable, false=disable). Defaults to disabled on Node 22 to avoid Happy Eyeballs timeouts. @@ -745,7 +732,7 @@ Telegram-specific high-signal fields: - access control: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`, `groups.*.topics.*` - command/menu: `commands.native`, `customCommands` - threading/replies: `replyToMode` -- streaming: `streamMode` (preview), `draftChunk`, `blockStreaming` +- streaming: `streaming` (preview), `blockStreaming` - formatting/delivery: `textChunkLimit`, `chunkMode`, `linkPreview`, `responsePrefix` - media/network: `mediaMaxMb`, `timeoutSeconds`, `retry`, `network.autoSelectFamily`, `proxy` - webhook: `webhookUrl`, `webhookSecret`, `webhookPath`, `webhookHost` diff --git a/docs/concepts/streaming.md b/docs/concepts/streaming.md index b81f87606..1ac8da84c 100644 --- a/docs/concepts/streaming.md +++ b/docs/concepts/streaming.md @@ -100,7 +100,7 @@ This maps to: **Channel note:** For non-Telegram channels, block streaming is **off unless** `*.blockStreaming` is explicitly set to `true`. Telegram can stream a live preview -(`channels.telegram.streamMode`) without block replies. +(`channels.telegram.streaming`) without block replies. Config location reminder: the `blockStreaming*` defaults live under `agents.defaults`, not the root config. @@ -110,11 +110,7 @@ Config location reminder: the `blockStreaming*` defaults live under Telegram is the only channel with live preview streaming: - Uses Bot API `sendMessage` (first update) + `editMessageText` (subsequent updates). -- `channels.telegram.streamMode: "partial" | "block" | "off"`. - - `partial`: preview updates with latest stream text. - - `block`: preview updates in chunked blocks (same chunker rules). - - `off`: no preview streaming. -- Preview chunk config (only for `streamMode: "block"`): `channels.telegram.draftChunk` (defaults: `minChars: 200`, `maxChars: 800`). +- `channels.telegram.streaming: true | false` (default: `true`). - Preview streaming is separate from block streaming. - When Telegram block streaming is explicitly enabled, preview streaming is skipped to avoid double-streaming. - Text-only finals are applied by editing the preview message in place. @@ -124,8 +120,7 @@ Telegram is the only channel with live preview streaming: ``` Telegram └─ sendMessage (temporary preview message) - ├─ streamMode=partial → edit latest text - └─ streamMode=block → chunker + edit updates + └─ streaming=true → edit latest text └─ final text-only reply → final edit on same message └─ fallback: cleanup preview + normal final delivery (media/complex) ``` diff --git a/docs/gateway/configuration-reference.md b/docs/gateway/configuration-reference.md index cb46bf4ec..547083886 100644 --- a/docs/gateway/configuration-reference.md +++ b/docs/gateway/configuration-reference.md @@ -151,12 +151,7 @@ WhatsApp runs through the gateway's web channel (Baileys Web). It starts automat historyLimit: 50, replyToMode: "first", // off | first | all linkPreview: true, - streamMode: "partial", // off | partial | block - draftChunk: { - minChars: 200, - maxChars: 800, - breakPreference: "paragraph", // paragraph | newline | sentence - }, + streaming: true, // live preview on/off (default true) actions: { reactions: true, sendMessage: true }, reactionNotifications: "own", // off | own | all mediaMaxMb: 5, diff --git a/src/config/config.legacy-config-detection.rejects-routing-allowfrom.e2e.test.ts b/src/config/config.legacy-config-detection.rejects-routing-allowfrom.e2e.test.ts index 0fe46d9d5..1a88e3e78 100644 --- a/src/config/config.legacy-config-detection.rejects-routing-allowfrom.e2e.test.ts +++ b/src/config/config.legacy-config-detection.rejects-routing-allowfrom.e2e.test.ts @@ -378,11 +378,46 @@ describe("legacy config detection", () => { expect(res.config.channels?.telegram?.groupPolicy).toBe("allowlist"); } }); - it("defaults telegram.streamMode to partial when telegram section exists", async () => { + it("defaults telegram.streaming to true when telegram section exists", async () => { const res = validateConfigObject({ channels: { telegram: {} } }); expect(res.ok).toBe(true); if (res.ok) { - expect(res.config.channels?.telegram?.streamMode).toBe("partial"); + expect(res.config.channels?.telegram?.streaming).toBe(true); + expect(res.config.channels?.telegram?.streamMode).toBeUndefined(); + } + }); + it("migrates legacy telegram.streamMode=off to streaming=false", async () => { + const res = validateConfigObject({ channels: { telegram: { streamMode: "off" } } }); + expect(res.ok).toBe(true); + if (res.ok) { + expect(res.config.channels?.telegram?.streaming).toBe(false); + expect(res.config.channels?.telegram?.streamMode).toBeUndefined(); + } + }); + it("migrates legacy telegram.streamMode=block to streaming=true", async () => { + const res = validateConfigObject({ channels: { telegram: { streamMode: "block" } } }); + expect(res.ok).toBe(true); + if (res.ok) { + expect(res.config.channels?.telegram?.streaming).toBe(true); + expect(res.config.channels?.telegram?.streamMode).toBeUndefined(); + } + }); + it("migrates legacy telegram.accounts.*.streamMode to streaming", async () => { + const res = validateConfigObject({ + channels: { + telegram: { + accounts: { + ops: { + streamMode: "off", + }, + }, + }, + }, + }); + expect(res.ok).toBe(true); + if (res.ok) { + expect(res.config.channels?.telegram?.accounts?.ops?.streaming).toBe(false); + expect(res.config.channels?.telegram?.accounts?.ops?.streamMode).toBeUndefined(); } }); it('rejects whatsapp.dmPolicy="open" without allowFrom "*"', async () => { diff --git a/src/config/schema.help.ts b/src/config/schema.help.ts index d2dc3e24e..95520da20 100644 --- a/src/config/schema.help.ts +++ b/src/config/schema.help.ts @@ -391,14 +391,8 @@ export const FIELD_HELP: Record = { "Debounce window (ms) for batching rapid inbound messages from the same sender (0 to disable).", "channels.telegram.dmPolicy": 'Direct message access control ("pairing" recommended). "open" requires channels.telegram.allowFrom=["*"].', - "channels.telegram.streamMode": - "Live stream preview mode for Telegram replies (off | partial | block). Separate from block streaming; uses sendMessage + editMessageText.", - "channels.telegram.draftChunk.minChars": - 'Minimum chars before emitting a Telegram stream preview update when channels.telegram.streamMode="block" (default: 200).', - "channels.telegram.draftChunk.maxChars": - 'Target max size for a Telegram stream preview chunk when channels.telegram.streamMode="block" (default: 800; clamped to channels.telegram.textChunkLimit).', - "channels.telegram.draftChunk.breakPreference": - "Preferred breakpoints for Telegram draft chunks (paragraph | newline | sentence). Default: paragraph.", + "channels.telegram.streaming": + "Enable Telegram live stream preview via message edits (default: true; legacy streamMode auto-maps here).", "channels.discord.streamMode": "Live stream preview mode for Discord replies (off | partial | block). Separate from block streaming; uses sendMessage + editMessage.", "channels.discord.draftChunk.minChars": diff --git a/src/config/schema.labels.ts b/src/config/schema.labels.ts index 2f9a1a2e5..cd8020b4d 100644 --- a/src/config/schema.labels.ts +++ b/src/config/schema.labels.ts @@ -263,10 +263,7 @@ export const FIELD_LABELS: Record = { ...IRC_FIELD_LABELS, "channels.telegram.botToken": "Telegram Bot Token", "channels.telegram.dmPolicy": "Telegram DM Policy", - "channels.telegram.streamMode": "Telegram Stream Mode", - "channels.telegram.draftChunk.minChars": "Telegram Draft Chunk Min Chars", - "channels.telegram.draftChunk.maxChars": "Telegram Draft Chunk Max Chars", - "channels.telegram.draftChunk.breakPreference": "Telegram Draft Chunk Break Preference", + "channels.telegram.streaming": "Telegram Streaming", "channels.telegram.retry.attempts": "Telegram Retry Attempts", "channels.telegram.retry.minDelayMs": "Telegram Retry Min Delay (ms)", "channels.telegram.retry.maxDelayMs": "Telegram Retry Max Delay (ms)", diff --git a/src/config/types.telegram.ts b/src/config/types.telegram.ts index 0de285a24..68079ebf1 100644 --- a/src/config/types.telegram.ts +++ b/src/config/types.telegram.ts @@ -95,13 +95,15 @@ export type TelegramAccountConfig = { textChunkLimit?: number; /** Chunking mode: "length" (default) splits by size; "newline" splits on every newline. */ chunkMode?: "length" | "newline"; + /** Enable live stream preview via message edits (default: true). */ + streaming?: boolean; /** Disable block streaming for this account. */ blockStreaming?: boolean; - /** Chunking config for Telegram stream previews in `streamMode: "block"`. */ + /** @deprecated Legacy chunking config from `streamMode: "block"`; ignored after migration. */ draftChunk?: BlockStreamingChunkConfig; /** Merge streamed block replies before sending. */ blockStreamingCoalesce?: BlockStreamingCoalesceConfig; - /** Telegram stream preview mode (off|partial|block). Default: partial. */ + /** @deprecated Legacy key; migrated automatically to `streaming` boolean. */ streamMode?: "off" | "partial" | "block"; mediaMaxMb?: number; /** Telegram API client timeout in seconds (grammY ApiClientOptions). */ diff --git a/src/config/zod-schema.providers-core.ts b/src/config/zod-schema.providers-core.ts index 5109ac269..22c55b403 100644 --- a/src/config/zod-schema.providers-core.ts +++ b/src/config/zod-schema.providers-core.ts @@ -99,6 +99,27 @@ const validateTelegramCustomCommands = ( } }; +function normalizeTelegramStreamingConfig(value: { + streaming?: boolean; + streamMode?: "off" | "partial" | "block"; +}) { + if (typeof value.streaming === "boolean") { + delete value.streamMode; + return; + } + if (value.streamMode === "off") { + value.streaming = false; + delete value.streamMode; + return; + } + if (value.streamMode === "partial" || value.streamMode === "block") { + value.streaming = true; + delete value.streamMode; + return; + } + value.streaming = true; +} + export const TelegramAccountSchemaBase = z .object({ name: z.string().optional(), @@ -122,10 +143,12 @@ export const TelegramAccountSchemaBase = z dms: z.record(z.string(), DmConfigSchema.optional()).optional(), textChunkLimit: z.number().int().positive().optional(), chunkMode: z.enum(["length", "newline"]).optional(), + streaming: z.boolean().optional(), blockStreaming: z.boolean().optional(), draftChunk: BlockStreamingChunkSchema.optional(), blockStreamingCoalesce: BlockStreamingCoalesceSchema.optional(), - streamMode: z.enum(["off", "partial", "block"]).optional().default("partial"), + // Legacy key kept for automatic migration to `streaming`. + streamMode: z.enum(["off", "partial", "block"]).optional(), mediaMaxMb: z.number().positive().optional(), timeoutSeconds: z.number().int().positive().optional(), retry: RetryConfigSchema, @@ -159,6 +182,7 @@ export const TelegramAccountSchemaBase = z .strict(); export const TelegramAccountSchema = TelegramAccountSchemaBase.superRefine((value, ctx) => { + normalizeTelegramStreamingConfig(value); requireOpenAllowFrom({ policy: value.dmPolicy, allowFrom: value.allowFrom, @@ -173,6 +197,7 @@ export const TelegramAccountSchema = TelegramAccountSchemaBase.superRefine((valu export const TelegramConfigSchema = TelegramAccountSchemaBase.extend({ accounts: z.record(z.string(), TelegramAccountSchema.optional()).optional(), }).superRefine((value, ctx) => { + normalizeTelegramStreamingConfig(value); requireOpenAllowFrom({ policy: value.dmPolicy, allowFrom: value.allowFrom, diff --git a/src/telegram/bot-message-dispatch.test.ts b/src/telegram/bot-message-dispatch.test.ts index 95c2c0af7..c2f847309 100644 --- a/src/telegram/bot-message-dispatch.test.ts +++ b/src/telegram/bot-message-dispatch.test.ts @@ -193,7 +193,7 @@ describe("dispatchTelegramMessage draft streaming", () => { expect(draftStream.clear).toHaveBeenCalledTimes(1); }); - it("keeps a higher initial debounce threshold in block stream mode", async () => { + it("uses immediate preview updates for legacy block stream mode", async () => { const draftStream = createDraftStream(); createTelegramDraftStream.mockReturnValue(draftStream); dispatchReplyWithBufferedBlockDispatcher.mockImplementation( @@ -209,7 +209,7 @@ describe("dispatchTelegramMessage draft streaming", () => { expect(createTelegramDraftStream).toHaveBeenCalledWith( expect.objectContaining({ - minInitialChars: 30, + minInitialChars: 1, }), ); }); @@ -445,7 +445,7 @@ describe("dispatchTelegramMessage draft streaming", () => { ); }); - it("forces new message when new assistant message starts after previous output", async () => { + it("does not force new message for legacy block stream mode", async () => { const draftStream = createDraftStream(999); createTelegramDraftStream.mockReturnValue(draftStream); dispatchReplyWithBufferedBlockDispatcher.mockImplementation( @@ -464,8 +464,7 @@ describe("dispatchTelegramMessage draft streaming", () => { await dispatchWithContext({ context: createContext(), streamMode: "block" }); - // Should force new message when assistant message starts after previous output - expect(draftStream.forceNewMessage).toHaveBeenCalled(); + expect(draftStream.forceNewMessage).not.toHaveBeenCalled(); }); it("does not force new message in partial mode when assistant message restarts", async () => { diff --git a/src/telegram/bot-message-dispatch.ts b/src/telegram/bot-message-dispatch.ts index a2419da65..7026b8cca 100644 --- a/src/telegram/bot-message-dispatch.ts +++ b/src/telegram/bot-message-dispatch.ts @@ -6,7 +6,6 @@ import { modelSupportsVision, } from "../agents/model-catalog.js"; import { resolveDefaultModelForAgent } from "../agents/model-selection.js"; -import { EmbeddedBlockChunker } from "../agents/pi-embedded-block-chunker.js"; import { resolveChunkMode } from "../auto-reply/chunk.js"; import { clearHistoryEntriesIfEnabled } from "../auto-reply/reply/history.js"; import { dispatchReplyWithBufferedBlockDispatcher } from "../auto-reply/reply/provider-dispatcher.js"; @@ -26,7 +25,6 @@ import type { TelegramBotOptions } from "./bot.js"; import { deliverReplies } from "./bot/delivery.js"; import type { TelegramStreamMode } from "./bot/types.js"; import type { TelegramInlineButtons } from "./button-types.js"; -import { resolveTelegramDraftStreamingChunking } from "./draft-chunking.js"; import { createTelegramDraftStream } from "./draft-stream.js"; import { renderTelegramHtmlText } from "./format.js"; import { @@ -143,21 +141,20 @@ export const dispatchTelegramMessage = async ({ }); const forceBlockStreamingForReasoning = resolvedReasoningLevel === "on"; const streamReasoningDraft = resolvedReasoningLevel === "stream"; + const previewStreamingEnabled = streamMode !== "off"; const canStreamAnswerDraft = - streamMode !== "off" && !accountBlockStreamingEnabled && !forceBlockStreamingForReasoning; + previewStreamingEnabled && !accountBlockStreamingEnabled && !forceBlockStreamingForReasoning; const canStreamReasoningDraft = canStreamAnswerDraft || streamReasoningDraft; const draftReplyToMessageId = replyToMode !== "off" && typeof msg.message_id === "number" ? msg.message_id : undefined; const draftMinInitialChars = - streamMode === "partial" || streamReasoningDraft ? 1 : DRAFT_MIN_INITIAL_CHARS; + previewStreamingEnabled || streamReasoningDraft ? 1 : DRAFT_MIN_INITIAL_CHARS; const mediaLocalRoots = getAgentScopedMediaLocalRoots(cfg, route.agentId); type LaneName = "answer" | "reasoning"; type DraftLaneState = { stream: ReturnType | undefined; lastPartialText: string; - draftText: string; hasStreamedMessage: boolean; - chunker: EmbeddedBlockChunker | undefined; }; const createDraftLane = (enabled: boolean): DraftLaneState => { const stream = enabled @@ -173,16 +170,10 @@ export const dispatchTelegramMessage = async ({ warn: logVerbose, }) : undefined; - const chunker = - stream && streamMode === "block" - ? new EmbeddedBlockChunker(resolveTelegramDraftStreamingChunking(cfg, route.accountId)) - : undefined; return { stream, lastPartialText: "", - draftText: "", hasStreamedMessage: false, - chunker, }; }; const lanes: Record = { @@ -207,9 +198,7 @@ export const dispatchTelegramMessage = async ({ }; const resetDraftLaneState = (lane: DraftLaneState) => { lane.lastPartialText = ""; - lane.draftText = ""; lane.hasStreamedMessage = false; - lane.chunker?.reset(); }; const updateDraftFromPartial = (lane: DraftLaneState, text: string | undefined) => { const laneStream = lane.stream; @@ -221,46 +210,18 @@ export const dispatchTelegramMessage = async ({ } // Mark that we've received streaming content (for forceNewMessage decision). lane.hasStreamedMessage = true; - if (streamMode === "partial") { - // Some providers briefly emit a shorter prefix snapshot (for example - // "Sure." -> "Sure" -> "Sure."). Keep the longer preview to avoid - // visible punctuation flicker. - if ( - lane.lastPartialText && - lane.lastPartialText.startsWith(text) && - text.length < lane.lastPartialText.length - ) { - return; - } - lane.lastPartialText = text; - laneStream.update(text); + // Some providers briefly emit a shorter prefix snapshot (for example + // "Sure." -> "Sure" -> "Sure."). Keep the longer preview to avoid + // visible punctuation flicker. + if ( + lane.lastPartialText && + lane.lastPartialText.startsWith(text) && + text.length < lane.lastPartialText.length + ) { return; } - let delta = text; - if (text.startsWith(lane.lastPartialText)) { - delta = text.slice(lane.lastPartialText.length); - } else { - // Streaming buffer reset (or non-monotonic stream). Start fresh. - lane.chunker?.reset(); - lane.draftText = ""; - } lane.lastPartialText = text; - if (!delta) { - return; - } - if (!lane.chunker) { - lane.draftText = text; - laneStream.update(lane.draftText); - return; - } - lane.chunker.append(delta); - lane.chunker.drain({ - force: false, - emit: (chunk) => { - lane.draftText += chunk; - laneStream.update(lane.draftText); - }, - }); + laneStream.update(text); }; const ingestDraftLaneSegments = (text: string | undefined) => { for (const segment of splitTextIntoLaneSegments(text)) { @@ -275,31 +236,18 @@ export const dispatchTelegramMessage = async ({ if (!lane.stream) { return; } - if (lane.chunker?.hasBuffered()) { - lane.chunker.drain({ - force: true, - emit: (chunk) => { - lane.draftText += chunk; - }, - }); - lane.chunker.reset(); - if (lane.draftText) { - lane.stream.update(lane.draftText); - } - } await lane.stream.flush(); }; - const disableBlockStreaming = - streamMode === "off" - ? true - : forceBlockStreamingForReasoning - ? false - : typeof telegramCfg.blockStreaming === "boolean" - ? !telegramCfg.blockStreaming - : canStreamAnswerDraft - ? true - : undefined; + const disableBlockStreaming = !previewStreamingEnabled + ? true + : forceBlockStreamingForReasoning + ? false + : typeof telegramCfg.blockStreaming === "boolean" + ? !telegramCfg.blockStreaming + : canStreamAnswerDraft + ? true + : undefined; const { onModelSelected, ...prefixOptions } = createReplyPrefixOptions({ cfg, @@ -395,8 +343,7 @@ export const dispatchTelegramMessage = async ({ linkPreview: telegramCfg.linkPreview, replyQuoteText, }; - const getLanePreviewText = (lane: DraftLaneState) => - streamMode === "block" ? lane.draftText : lane.lastPartialText; + const getLanePreviewText = (lane: DraftLaneState) => lane.lastPartialText; const tryUpdatePreviewForLane = async (params: { lane: DraftLaneState; laneName: LaneName; @@ -449,7 +396,6 @@ export const dispatchTelegramMessage = async ({ }); if (updateLaneSnapshot) { lane.lastPartialText = text; - lane.draftText = text; } deliveryState.delivered = true; return true; @@ -684,10 +630,6 @@ export const dispatchTelegramMessage = async ({ onAssistantMessageStart: answerLane.stream ? () => { reasoningStepState.resetForNextStep(); - // Keep answer blocks separated in block mode; partial mode keeps one answer lane. - if (streamMode === "block" && answerLane.hasStreamedMessage) { - answerLane.stream?.forceNewMessage(); - } resetDraftLaneState(answerLane); } : undefined, diff --git a/src/telegram/bot/helpers.ts b/src/telegram/bot/helpers.ts index b6cf1783f..4ee703655 100644 --- a/src/telegram/bot/helpers.ts +++ b/src/telegram/bot/helpers.ts @@ -154,11 +154,18 @@ export function buildTypingThreadParams(messageThreadId?: number) { } export function resolveTelegramStreamMode(telegramCfg?: { + streaming?: boolean; streamMode?: TelegramStreamMode; }): TelegramStreamMode { + if (typeof telegramCfg?.streaming === "boolean") { + return telegramCfg.streaming ? "partial" : "off"; + } const raw = telegramCfg?.streamMode?.trim().toLowerCase(); - if (raw === "off" || raw === "partial" || raw === "block") { - return raw; + if (raw === "off") { + return "off"; + } + if (raw === "partial" || raw === "block") { + return "partial"; } return "partial"; } From 9231d7d30f685f8efd9a9e1fe4d13260f9e1bda3 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 11:02:30 +0100 Subject: [PATCH 0136/1007] chore: bump version to 2026.2.21 --- CHANGELOG.md | 2 +- apps/android/app/build.gradle.kts | 4 ++-- apps/ios/ShareExtension/Info.plist | 2 +- apps/ios/Sources/Info.plist | 2 +- apps/ios/Tests/Info.plist | 2 +- apps/ios/WatchApp/Info.plist | 2 +- apps/ios/WatchExtension/Info.plist | 2 +- apps/ios/project.yml | 10 +++++----- apps/macos/Sources/OpenClaw/Resources/Info.plist | 4 ++-- docs/platforms/mac/release.md | 14 +++++++------- extensions/bluebubbles/package.json | 2 +- extensions/copilot-proxy/package.json | 2 +- extensions/diagnostics-otel/package.json | 2 +- extensions/discord/package.json | 2 +- extensions/feishu/package.json | 2 +- extensions/google-antigravity-auth/package.json | 2 +- extensions/google-gemini-cli-auth/package.json | 2 +- extensions/googlechat/package.json | 2 +- extensions/imessage/package.json | 2 +- extensions/irc/package.json | 2 +- extensions/line/package.json | 2 +- extensions/llm-task/package.json | 2 +- extensions/lobster/package.json | 2 +- extensions/matrix/package.json | 2 +- extensions/mattermost/package.json | 2 +- extensions/memory-core/package.json | 2 +- extensions/memory-lancedb/package.json | 2 +- extensions/minimax-portal-auth/package.json | 2 +- extensions/msteams/package.json | 2 +- extensions/nextcloud-talk/package.json | 2 +- extensions/nostr/package.json | 2 +- extensions/open-prose/package.json | 2 +- extensions/signal/package.json | 2 +- extensions/slack/package.json | 2 +- extensions/telegram/package.json | 2 +- extensions/tlon/package.json | 2 +- extensions/twitch/package.json | 2 +- extensions/voice-call/package.json | 2 +- extensions/whatsapp/package.json | 2 +- extensions/zalo/package.json | 2 +- extensions/zalouser/package.json | 2 +- package.json | 2 +- 42 files changed, 54 insertions(+), 54 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95f839055..58df1c966 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ Docs: https://docs.openclaw.ai -## 2026.2.20 (Unreleased) +## 2026.2.21 (Unreleased) ### Changes diff --git a/apps/android/app/build.gradle.kts b/apps/android/app/build.gradle.kts index 6606bda11..b91b1e215 100644 --- a/apps/android/app/build.gradle.kts +++ b/apps/android/app/build.gradle.kts @@ -21,8 +21,8 @@ android { applicationId = "ai.openclaw.android" minSdk = 31 targetSdk = 36 - versionCode = 202602200 - versionName = "2026.2.20" + versionCode = 202602210 + versionName = "2026.2.21" ndk { // Support all major ABIs — native libs are tiny (~47 KB per ABI) abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64") diff --git a/apps/ios/ShareExtension/Info.plist b/apps/ios/ShareExtension/Info.plist index a515cfc35..0656afbf2 100644 --- a/apps/ios/ShareExtension/Info.plist +++ b/apps/ios/ShareExtension/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 2026.2.20 + 2026.2.21 CFBundleVersion 20260220 NSExtension diff --git a/apps/ios/Sources/Info.plist b/apps/ios/Sources/Info.plist index 37ab15e4a..c3b469e70 100644 --- a/apps/ios/Sources/Info.plist +++ b/apps/ios/Sources/Info.plist @@ -19,7 +19,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2026.2.20 + 2026.2.21 CFBundleURLTypes diff --git a/apps/ios/Tests/Info.plist b/apps/ios/Tests/Info.plist index 610ea8758..7fc8d8270 100644 --- a/apps/ios/Tests/Info.plist +++ b/apps/ios/Tests/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 2026.2.20 + 2026.2.21 CFBundleVersion 20260220 diff --git a/apps/ios/WatchApp/Info.plist b/apps/ios/WatchApp/Info.plist index 58913176e..cc5dbf6cd 100644 --- a/apps/ios/WatchApp/Info.plist +++ b/apps/ios/WatchApp/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2026.2.20 + 2026.2.21 CFBundleVersion 20260220 WKCompanionAppBundleIdentifier diff --git a/apps/ios/WatchExtension/Info.plist b/apps/ios/WatchExtension/Info.plist index 6153c4f35..2d6b7baa7 100644 --- a/apps/ios/WatchExtension/Info.plist +++ b/apps/ios/WatchExtension/Info.plist @@ -15,7 +15,7 @@ CFBundleName $(PRODUCT_NAME) CFBundleShortVersionString - 2026.2.20 + 2026.2.21 CFBundleVersion 20260220 NSExtension diff --git a/apps/ios/project.yml b/apps/ios/project.yml index 9b43db118..613322f3e 100644 --- a/apps/ios/project.yml +++ b/apps/ios/project.yml @@ -92,7 +92,7 @@ targets: - CFBundleURLName: ai.openclaw.ios CFBundleURLSchemes: - openclaw - CFBundleShortVersionString: "2026.2.20" + CFBundleShortVersionString: "2026.2.21" CFBundleVersion: "20260220" UILaunchScreen: {} UIApplicationSceneManifest: @@ -146,7 +146,7 @@ targets: path: ShareExtension/Info.plist properties: CFBundleDisplayName: OpenClaw Share - CFBundleShortVersionString: "2026.2.20" + CFBundleShortVersionString: "2026.2.21" CFBundleVersion: "20260220" NSExtension: NSExtensionPointIdentifier: com.apple.share-services @@ -176,7 +176,7 @@ targets: path: WatchApp/Info.plist properties: CFBundleDisplayName: OpenClaw - CFBundleShortVersionString: "2026.2.20" + CFBundleShortVersionString: "2026.2.21" CFBundleVersion: "20260220" WKCompanionAppBundleIdentifier: "$(OPENCLAW_APP_BUNDLE_ID)" WKWatchKitApp: true @@ -200,7 +200,7 @@ targets: path: WatchExtension/Info.plist properties: CFBundleDisplayName: OpenClaw - CFBundleShortVersionString: "2026.2.20" + CFBundleShortVersionString: "2026.2.21" CFBundleVersion: "20260220" NSExtension: NSExtensionAttributes: @@ -228,5 +228,5 @@ targets: path: Tests/Info.plist properties: CFBundleDisplayName: OpenClawTests - CFBundleShortVersionString: "2026.2.20" + CFBundleShortVersionString: "2026.2.21" CFBundleVersion: "20260220" diff --git a/apps/macos/Sources/OpenClaw/Resources/Info.plist b/apps/macos/Sources/OpenClaw/Resources/Info.plist index c1cd75807..e7ca1ad54 100644 --- a/apps/macos/Sources/OpenClaw/Resources/Info.plist +++ b/apps/macos/Sources/OpenClaw/Resources/Info.plist @@ -15,9 +15,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2026.2.20 + 2026.2.21 CFBundleVersion - 202602200 + 202602210 CFBundleIconFile OpenClaw CFBundleURLTypes diff --git a/docs/platforms/mac/release.md b/docs/platforms/mac/release.md index 4628de08a..7d3a8d019 100644 --- a/docs/platforms/mac/release.md +++ b/docs/platforms/mac/release.md @@ -34,17 +34,17 @@ Notes: # From repo root; set release IDs so Sparkle feed is enabled. # APP_BUILD must be numeric + monotonic for Sparkle compare. BUNDLE_ID=bot.molt.mac \ -APP_VERSION=2026.2.20 \ +APP_VERSION=2026.2.21 \ APP_BUILD="$(git rev-list --count HEAD)" \ BUILD_CONFIG=release \ SIGN_IDENTITY="Developer ID Application: ()" \ scripts/package-mac-app.sh # Zip for distribution (includes resource forks for Sparkle delta support) -ditto -c -k --sequesterRsrc --keepParent dist/OpenClaw.app dist/OpenClaw-2026.2.20.zip +ditto -c -k --sequesterRsrc --keepParent dist/OpenClaw.app dist/OpenClaw-2026.2.21.zip # Optional: also build a styled DMG for humans (drag to /Applications) -scripts/create-dmg.sh dist/OpenClaw.app dist/OpenClaw-2026.2.20.dmg +scripts/create-dmg.sh dist/OpenClaw.app dist/OpenClaw-2026.2.21.dmg # Recommended: build + notarize/staple zip + DMG # First, create a keychain profile once: @@ -52,14 +52,14 @@ scripts/create-dmg.sh dist/OpenClaw.app dist/OpenClaw-2026.2.20.dmg # --apple-id "" --team-id "" --password "" NOTARIZE=1 NOTARYTOOL_PROFILE=openclaw-notary \ BUNDLE_ID=bot.molt.mac \ -APP_VERSION=2026.2.20 \ +APP_VERSION=2026.2.21 \ APP_BUILD="$(git rev-list --count HEAD)" \ BUILD_CONFIG=release \ SIGN_IDENTITY="Developer ID Application: ()" \ scripts/package-mac-dist.sh # Optional: ship dSYM alongside the release -ditto -c -k --keepParent apps/macos/.build/release/OpenClaw.app.dSYM dist/OpenClaw-2026.2.20.dSYM.zip +ditto -c -k --keepParent apps/macos/.build/release/OpenClaw.app.dSYM dist/OpenClaw-2026.2.21.dSYM.zip ``` ## Appcast entry @@ -67,7 +67,7 @@ ditto -c -k --keepParent apps/macos/.build/release/OpenClaw.app.dSYM dist/OpenCl Use the release note generator so Sparkle renders formatted HTML notes: ```bash -SPARKLE_PRIVATE_KEY_FILE=/path/to/ed25519-private-key scripts/make_appcast.sh dist/OpenClaw-2026.2.20.zip https://raw.githubusercontent.com/openclaw/openclaw/main/appcast.xml +SPARKLE_PRIVATE_KEY_FILE=/path/to/ed25519-private-key scripts/make_appcast.sh dist/OpenClaw-2026.2.21.zip https://raw.githubusercontent.com/openclaw/openclaw/main/appcast.xml ``` Generates HTML release notes from `CHANGELOG.md` (via [`scripts/changelog-to-html.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/changelog-to-html.sh)) and embeds them in the appcast entry. @@ -75,7 +75,7 @@ Commit the updated `appcast.xml` alongside the release assets (zip + dSYM) when ## Publish & verify -- Upload `OpenClaw-2026.2.20.zip` (and `OpenClaw-2026.2.20.dSYM.zip`) to the GitHub release for tag `v2026.2.20`. +- Upload `OpenClaw-2026.2.21.zip` (and `OpenClaw-2026.2.21.dSYM.zip`) to the GitHub release for tag `v2026.2.21`. - Ensure the raw appcast URL matches the baked feed: `https://raw.githubusercontent.com/openclaw/openclaw/main/appcast.xml`. - Sanity checks: - `curl -I https://raw.githubusercontent.com/openclaw/openclaw/main/appcast.xml` returns 200. diff --git a/extensions/bluebubbles/package.json b/extensions/bluebubbles/package.json index 116452d19..e9a4b2d51 100644 --- a/extensions/bluebubbles/package.json +++ b/extensions/bluebubbles/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/bluebubbles", - "version": "2026.2.20", + "version": "2026.2.21", "description": "OpenClaw BlueBubbles channel plugin", "type": "module", "devDependencies": { diff --git a/extensions/copilot-proxy/package.json b/extensions/copilot-proxy/package.json index 2106942ef..3313ca930 100644 --- a/extensions/copilot-proxy/package.json +++ b/extensions/copilot-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/copilot-proxy", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenClaw Copilot Proxy provider plugin", "type": "module", diff --git a/extensions/diagnostics-otel/package.json b/extensions/diagnostics-otel/package.json index c1f604fdc..840533835 100644 --- a/extensions/diagnostics-otel/package.json +++ b/extensions/diagnostics-otel/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/diagnostics-otel", - "version": "2026.2.20", + "version": "2026.2.21", "description": "OpenClaw diagnostics OpenTelemetry exporter", "type": "module", "dependencies": { diff --git a/extensions/discord/package.json b/extensions/discord/package.json index 328841692..da300d60d 100644 --- a/extensions/discord/package.json +++ b/extensions/discord/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/discord", - "version": "2026.2.20", + "version": "2026.2.21", "description": "OpenClaw Discord channel plugin", "type": "module", "devDependencies": { diff --git a/extensions/feishu/package.json b/extensions/feishu/package.json index 822eca01b..07dab8525 100644 --- a/extensions/feishu/package.json +++ b/extensions/feishu/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/feishu", - "version": "2026.2.20", + "version": "2026.2.21", "description": "OpenClaw Feishu/Lark channel plugin (community maintained by @m1heng)", "type": "module", "dependencies": { diff --git a/extensions/google-antigravity-auth/package.json b/extensions/google-antigravity-auth/package.json index 20b047eb3..21b897008 100644 --- a/extensions/google-antigravity-auth/package.json +++ b/extensions/google-antigravity-auth/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/google-antigravity-auth", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenClaw Google Antigravity OAuth provider plugin", "type": "module", diff --git a/extensions/google-gemini-cli-auth/package.json b/extensions/google-gemini-cli-auth/package.json index 366605639..e2ea59657 100644 --- a/extensions/google-gemini-cli-auth/package.json +++ b/extensions/google-gemini-cli-auth/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/google-gemini-cli-auth", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenClaw Gemini CLI OAuth provider plugin", "type": "module", diff --git a/extensions/googlechat/package.json b/extensions/googlechat/package.json index c2946918c..61cc58342 100644 --- a/extensions/googlechat/package.json +++ b/extensions/googlechat/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/googlechat", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenClaw Google Chat channel plugin", "type": "module", diff --git a/extensions/imessage/package.json b/extensions/imessage/package.json index fbe3ac36c..ffdfdff4a 100644 --- a/extensions/imessage/package.json +++ b/extensions/imessage/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/imessage", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenClaw iMessage channel plugin", "type": "module", diff --git a/extensions/irc/package.json b/extensions/irc/package.json index f216668bf..d1121ba0c 100644 --- a/extensions/irc/package.json +++ b/extensions/irc/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/irc", - "version": "2026.2.20", + "version": "2026.2.21", "description": "OpenClaw IRC channel plugin", "type": "module", "devDependencies": { diff --git a/extensions/line/package.json b/extensions/line/package.json index 9ce913ceb..3c6814fcc 100644 --- a/extensions/line/package.json +++ b/extensions/line/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/line", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenClaw LINE channel plugin", "type": "module", diff --git a/extensions/llm-task/package.json b/extensions/llm-task/package.json index ffc5054dc..2bc3be207 100644 --- a/extensions/llm-task/package.json +++ b/extensions/llm-task/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/llm-task", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenClaw JSON-only LLM task plugin", "type": "module", diff --git a/extensions/lobster/package.json b/extensions/lobster/package.json index 4a91041c2..7ec26ab61 100644 --- a/extensions/lobster/package.json +++ b/extensions/lobster/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/lobster", - "version": "2026.2.20", + "version": "2026.2.21", "description": "Lobster workflow tool plugin (typed pipelines + resumable approvals)", "type": "module", "openclaw": { diff --git a/extensions/matrix/package.json b/extensions/matrix/package.json index 1b438b4a7..04273abda 100644 --- a/extensions/matrix/package.json +++ b/extensions/matrix/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/matrix", - "version": "2026.2.20", + "version": "2026.2.21", "description": "OpenClaw Matrix channel plugin", "type": "module", "dependencies": { diff --git a/extensions/mattermost/package.json b/extensions/mattermost/package.json index 5ecf2eef7..d44d4aee1 100644 --- a/extensions/mattermost/package.json +++ b/extensions/mattermost/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/mattermost", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenClaw Mattermost channel plugin", "type": "module", diff --git a/extensions/memory-core/package.json b/extensions/memory-core/package.json index 11ca2d11c..e52e3bcad 100644 --- a/extensions/memory-core/package.json +++ b/extensions/memory-core/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/memory-core", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenClaw core memory search plugin", "type": "module", diff --git a/extensions/memory-lancedb/package.json b/extensions/memory-lancedb/package.json index 4d07cb962..3dbd8b379 100644 --- a/extensions/memory-lancedb/package.json +++ b/extensions/memory-lancedb/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/memory-lancedb", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenClaw LanceDB-backed long-term memory plugin with auto-recall/capture", "type": "module", diff --git a/extensions/minimax-portal-auth/package.json b/extensions/minimax-portal-auth/package.json index 69277e772..b616dd17e 100644 --- a/extensions/minimax-portal-auth/package.json +++ b/extensions/minimax-portal-auth/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/minimax-portal-auth", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenClaw MiniMax Portal OAuth provider plugin", "type": "module", diff --git a/extensions/msteams/package.json b/extensions/msteams/package.json index ebd598988..85b36d6ff 100644 --- a/extensions/msteams/package.json +++ b/extensions/msteams/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/msteams", - "version": "2026.2.20", + "version": "2026.2.21", "description": "OpenClaw Microsoft Teams channel plugin", "type": "module", "dependencies": { diff --git a/extensions/nextcloud-talk/package.json b/extensions/nextcloud-talk/package.json index 3b5aa9845..bd18be7a4 100644 --- a/extensions/nextcloud-talk/package.json +++ b/extensions/nextcloud-talk/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/nextcloud-talk", - "version": "2026.2.20", + "version": "2026.2.21", "description": "OpenClaw Nextcloud Talk channel plugin", "type": "module", "devDependencies": { diff --git a/extensions/nostr/package.json b/extensions/nostr/package.json index 0891ff327..7d4789cd1 100644 --- a/extensions/nostr/package.json +++ b/extensions/nostr/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/nostr", - "version": "2026.2.20", + "version": "2026.2.21", "description": "OpenClaw Nostr channel plugin for NIP-04 encrypted DMs", "type": "module", "dependencies": { diff --git a/extensions/open-prose/package.json b/extensions/open-prose/package.json index f2e164a02..3efcaf8fd 100644 --- a/extensions/open-prose/package.json +++ b/extensions/open-prose/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/open-prose", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenProse VM skill pack plugin (slash command + telemetry).", "type": "module", diff --git a/extensions/signal/package.json b/extensions/signal/package.json index 36c106511..af2e1d81f 100644 --- a/extensions/signal/package.json +++ b/extensions/signal/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/signal", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenClaw Signal channel plugin", "type": "module", diff --git a/extensions/slack/package.json b/extensions/slack/package.json index 1c7b158a4..338f38a6c 100644 --- a/extensions/slack/package.json +++ b/extensions/slack/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/slack", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenClaw Slack channel plugin", "type": "module", diff --git a/extensions/telegram/package.json b/extensions/telegram/package.json index f60cfc3e6..8f0c06432 100644 --- a/extensions/telegram/package.json +++ b/extensions/telegram/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/telegram", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenClaw Telegram channel plugin", "type": "module", diff --git a/extensions/tlon/package.json b/extensions/tlon/package.json index 6b06f46a8..4842abd38 100644 --- a/extensions/tlon/package.json +++ b/extensions/tlon/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/tlon", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenClaw Tlon/Urbit channel plugin", "type": "module", diff --git a/extensions/twitch/package.json b/extensions/twitch/package.json index d996c48c6..68a5167e7 100644 --- a/extensions/twitch/package.json +++ b/extensions/twitch/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/twitch", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenClaw Twitch channel plugin", "type": "module", diff --git a/extensions/voice-call/package.json b/extensions/voice-call/package.json index 9610156cb..4e2518894 100644 --- a/extensions/voice-call/package.json +++ b/extensions/voice-call/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/voice-call", - "version": "2026.2.20", + "version": "2026.2.21", "description": "OpenClaw voice-call plugin", "type": "module", "dependencies": { diff --git a/extensions/whatsapp/package.json b/extensions/whatsapp/package.json index 67728e78c..a5ef97a6a 100644 --- a/extensions/whatsapp/package.json +++ b/extensions/whatsapp/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/whatsapp", - "version": "2026.2.20", + "version": "2026.2.21", "private": true, "description": "OpenClaw WhatsApp channel plugin", "type": "module", diff --git a/extensions/zalo/package.json b/extensions/zalo/package.json index 345afd603..fcaad2e14 100644 --- a/extensions/zalo/package.json +++ b/extensions/zalo/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/zalo", - "version": "2026.2.20", + "version": "2026.2.21", "description": "OpenClaw Zalo channel plugin", "type": "module", "dependencies": { diff --git a/extensions/zalouser/package.json b/extensions/zalouser/package.json index 69a7dbf0d..c9ba753b2 100644 --- a/extensions/zalouser/package.json +++ b/extensions/zalouser/package.json @@ -1,6 +1,6 @@ { "name": "@openclaw/zalouser", - "version": "2026.2.20", + "version": "2026.2.21", "description": "OpenClaw Zalo Personal Account plugin via zca-cli", "type": "module", "dependencies": { diff --git a/package.json b/package.json index 8b1660e9c..7fdf1d013 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "openclaw", - "version": "2026.2.20", + "version": "2026.2.21", "description": "Multi-channel AI gateway with extensible messaging integrations", "keywords": [], "homepage": "https://github.com/openclaw/openclaw#readme", From eccff0b6c080c9258c7dc42097b840a7e3b8f374 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 11:05:05 +0100 Subject: [PATCH 0137/1007] docs: relabel dependency hygiene changelog entries --- CHANGELOG.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 58df1c966..017c5a199 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,21 +7,21 @@ Docs: https://docs.openclaw.ai ### Changes - Docs: fix FAQ typos and add documentation spellcheck automation with a custom codespell dictionary/ignore list, including CI coverage. (#22457) Thanks @vincentkoc. -- Security/Unused Dependencies: add dead-code scans to CI via Knip/ts-prune/ts-unused-exports and report unused dependencies/exports in non-blocking checks. (#22468) Thanks @vincentkoc. +- Dependencies/Unused Dependencies: add dead-code scans to CI via Knip/ts-prune/ts-unused-exports and report unused dependencies/exports in non-blocking checks. (#22468) Thanks @vincentkoc. - Security/Agents: make owner-ID obfuscation use a dedicated HMAC secret from configuration (`ownerDisplaySecret`) and update hashing behavior so obfuscation is decoupled from gateway token handling for improved control. (#7343) Thanks @vincentkoc. - Security/Infra: switch gateway lock and tool-call synthetic IDs from SHA-1 to SHA-256 with unchanged truncation length to strengthen hash basis while keeping deterministic behavior and lock key format. (#7343) Thanks @vincentkoc. -- Security/Unused Dependencies: move `@larksuiteoapi/node-sdk` out of root `package.json` and keep it scoped to `extensions/feishu` where it is used. (#22471) Thanks @vincentkoc. -- Security/Unused Dependencies: remove unused root dependency `signal-utils` from core manifest after confirming it was only used by extension-only paths. (#22471) Thanks @vincentkoc. -- Security/Unused Dependencies: remove unused root devDependency `ollama` now that native Ollama support uses local HTTP transport code paths only. (#22471) Thanks @vincentkoc. -- Security/Unused Dependencies: remove unused root devDependencies `@lit/context` and `@lit-labs/signals` flagged as unused by Knip dead-code reports. (#22471) Thanks @vincentkoc. -- Security/Unused Dependencies: remove unused root dependency `lit` that is now scoped to `ui/` package dependencies. (#22471) Thanks @vincentkoc. -- Security/Unused Dependencies: remove unused root dependencies `long` and `rolldown`; keep A2UI bundling functional by falling back to `pnpm dlx rolldown` when the binary is not locally installed. (#22481) Thanks @vincentkoc. -- Security/Unused Dependencies: harden A2UI bundling dependency resolution by resolving `lit`, `@lit/context`, `@lit-labs/signals`, and `signal-utils` from UI workspace or repo-root dependency locations to tolerate Docker layout differences without root-only assumptions. (#22507) Thanks @vincentkoc. -- Security/Unused Dependencies: fix A2UI bundle resolution for removed root `lit` deps by resolving `lit`, `@lit/context`, `@lit-labs/signals`, and `signal-utils` from UI workspace dependencies in `rolldown.config.mjs` during bundling. (#22481) Thanks @vincentkoc. -- Security/Unused Dependencies: simplify `canvas-a2ui` bundling script by removing temporary vendored `node_modules` symlink logic now that `ui` workspace dependencies are explicit. (#22481) Thanks @vincentkoc. -- Security/Unused Dependencies: remove unused `@microsoft/agents-hosting-express` and `@microsoft/agents-hosting-extensions-teams` from `extensions/msteams` because current code only uses `@microsoft/agents-hosting`. Thanks @vincentkoc. +- Dependencies/Unused Dependencies: move `@larksuiteoapi/node-sdk` out of root `package.json` and keep it scoped to `extensions/feishu` where it is used. (#22471) Thanks @vincentkoc. +- Dependencies/Unused Dependencies: remove unused root dependency `signal-utils` from core manifest after confirming it was only used by extension-only paths. (#22471) Thanks @vincentkoc. +- Dependencies/Unused Dependencies: remove unused root devDependency `ollama` now that native Ollama support uses local HTTP transport code paths only. (#22471) Thanks @vincentkoc. +- Dependencies/Unused Dependencies: remove unused root devDependencies `@lit/context` and `@lit-labs/signals` flagged as unused by Knip dead-code reports. (#22471) Thanks @vincentkoc. +- Dependencies/Unused Dependencies: remove unused root dependency `lit` that is now scoped to `ui/` package dependencies. (#22471) Thanks @vincentkoc. +- Dependencies/Unused Dependencies: remove unused root dependencies `long` and `rolldown`; keep A2UI bundling functional by falling back to `pnpm dlx rolldown` when the binary is not locally installed. (#22481) Thanks @vincentkoc. +- Dependencies/Unused Dependencies: harden A2UI bundling dependency resolution by resolving `lit`, `@lit/context`, `@lit-labs/signals`, and `signal-utils` from UI workspace or repo-root dependency locations to tolerate Docker layout differences without root-only assumptions. (#22507) Thanks @vincentkoc. +- Dependencies/Unused Dependencies: fix A2UI bundle resolution for removed root `lit` deps by resolving `lit`, `@lit/context`, `@lit-labs/signals`, and `signal-utils` from UI workspace dependencies in `rolldown.config.mjs` during bundling. (#22481) Thanks @vincentkoc. +- Dependencies/Unused Dependencies: simplify `canvas-a2ui` bundling script by removing temporary vendored `node_modules` symlink logic now that `ui` workspace dependencies are explicit. (#22481) Thanks @vincentkoc. +- Dependencies/Unused Dependencies: remove unused `@microsoft/agents-hosting-express` and `@microsoft/agents-hosting-extensions-teams` from `extensions/msteams` because current code only uses `@microsoft/agents-hosting`. Thanks @vincentkoc. - MSTeams: dedupe sent-message cache storage by removing duplicate per-message Set storage and using timestamps Map keys as the single membership source. (#22514) Thanks @TaKO8Ki. -- Security/Unused Dependencies: remove unused plugin-local `openclaw` devDependencies from `extensions/open-prose`, `extensions/lobster`, and `extensions/llm-task` after removing this dependency from build-time requirements. (#22495) Thanks @vincentkoc. +- Dependencies/Unused Dependencies: remove unused plugin-local `openclaw` devDependencies from `extensions/open-prose`, `extensions/lobster`, and `extensions/llm-task` after removing this dependency from build-time requirements. (#22495) Thanks @vincentkoc. - Agents/Subagents: default subagent spawn depth now uses shared `maxSpawnDepth=2`, enabling depth-1 orchestrator spawning by default while keeping depth policy checks consistent across spawn and prompt paths. (#22223) Thanks @tyler6204. - Channels/CLI: add per-account/channel `defaultTo` outbound routing fallback so `openclaw agent --deliver` can send without explicit `--reply-to` when a default target is configured. (#16985) Thanks @KirillShchetinin. - Telegram/Streaming: simplify preview streaming config to `channels.telegram.streaming` (boolean), auto-map legacy `streamMode` values, and remove block-vs-partial preview branching. (#22012) thanks @obviyus. From 75d4f6d51b2b695a68402fc535f7c090c5b0a92d Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 11:12:58 +0100 Subject: [PATCH 0138/1007] docs: reorder and trim 2026.2.21 changelog entries --- CHANGELOG.md | 127 +++++++++++++++++++++++---------------------------- 1 file changed, 57 insertions(+), 70 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 017c5a199..0c3f5eb0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,81 +6,60 @@ Docs: https://docs.openclaw.ai ### Changes -- Docs: fix FAQ typos and add documentation spellcheck automation with a custom codespell dictionary/ignore list, including CI coverage. (#22457) Thanks @vincentkoc. -- Dependencies/Unused Dependencies: add dead-code scans to CI via Knip/ts-prune/ts-unused-exports and report unused dependencies/exports in non-blocking checks. (#22468) Thanks @vincentkoc. -- Security/Agents: make owner-ID obfuscation use a dedicated HMAC secret from configuration (`ownerDisplaySecret`) and update hashing behavior so obfuscation is decoupled from gateway token handling for improved control. (#7343) Thanks @vincentkoc. -- Security/Infra: switch gateway lock and tool-call synthetic IDs from SHA-1 to SHA-256 with unchanged truncation length to strengthen hash basis while keeping deterministic behavior and lock key format. (#7343) Thanks @vincentkoc. -- Dependencies/Unused Dependencies: move `@larksuiteoapi/node-sdk` out of root `package.json` and keep it scoped to `extensions/feishu` where it is used. (#22471) Thanks @vincentkoc. -- Dependencies/Unused Dependencies: remove unused root dependency `signal-utils` from core manifest after confirming it was only used by extension-only paths. (#22471) Thanks @vincentkoc. -- Dependencies/Unused Dependencies: remove unused root devDependency `ollama` now that native Ollama support uses local HTTP transport code paths only. (#22471) Thanks @vincentkoc. -- Dependencies/Unused Dependencies: remove unused root devDependencies `@lit/context` and `@lit-labs/signals` flagged as unused by Knip dead-code reports. (#22471) Thanks @vincentkoc. -- Dependencies/Unused Dependencies: remove unused root dependency `lit` that is now scoped to `ui/` package dependencies. (#22471) Thanks @vincentkoc. -- Dependencies/Unused Dependencies: remove unused root dependencies `long` and `rolldown`; keep A2UI bundling functional by falling back to `pnpm dlx rolldown` when the binary is not locally installed. (#22481) Thanks @vincentkoc. -- Dependencies/Unused Dependencies: harden A2UI bundling dependency resolution by resolving `lit`, `@lit/context`, `@lit-labs/signals`, and `signal-utils` from UI workspace or repo-root dependency locations to tolerate Docker layout differences without root-only assumptions. (#22507) Thanks @vincentkoc. -- Dependencies/Unused Dependencies: fix A2UI bundle resolution for removed root `lit` deps by resolving `lit`, `@lit/context`, `@lit-labs/signals`, and `signal-utils` from UI workspace dependencies in `rolldown.config.mjs` during bundling. (#22481) Thanks @vincentkoc. -- Dependencies/Unused Dependencies: simplify `canvas-a2ui` bundling script by removing temporary vendored `node_modules` symlink logic now that `ui` workspace dependencies are explicit. (#22481) Thanks @vincentkoc. -- Dependencies/Unused Dependencies: remove unused `@microsoft/agents-hosting-express` and `@microsoft/agents-hosting-extensions-teams` from `extensions/msteams` because current code only uses `@microsoft/agents-hosting`. Thanks @vincentkoc. -- MSTeams: dedupe sent-message cache storage by removing duplicate per-message Set storage and using timestamps Map keys as the single membership source. (#22514) Thanks @TaKO8Ki. -- Dependencies/Unused Dependencies: remove unused plugin-local `openclaw` devDependencies from `extensions/open-prose`, `extensions/lobster`, and `extensions/llm-task` after removing this dependency from build-time requirements. (#22495) Thanks @vincentkoc. -- Agents/Subagents: default subagent spawn depth now uses shared `maxSpawnDepth=2`, enabling depth-1 orchestrator spawning by default while keeping depth policy checks consistent across spawn and prompt paths. (#22223) Thanks @tyler6204. - Channels/CLI: add per-account/channel `defaultTo` outbound routing fallback so `openclaw agent --deliver` can send without explicit `--reply-to` when a default target is configured. (#16985) Thanks @KirillShchetinin. +- Channels: allow per-channel model overrides via `channels.modelByChannel` and note them in /status. Thanks @thewilloftheshadow. - Telegram/Streaming: simplify preview streaming config to `channels.telegram.streaming` (boolean), auto-map legacy `streamMode` values, and remove block-vs-partial preview branching. (#22012) thanks @obviyus. -- iOS/Chat: clean chat UI noise by stripping inbound untrusted metadata/timestamp prefixes, formatting tool outputs into concise summaries/errors, compacting the composer while typing, and supporting tap-to-dismiss keyboard in chat view. (#22122) thanks @mbelinky. -- iOS/Watch: bridge mirrored watch prompt notification actions into iOS quick-reply handling, including queued action handoff until app model initialization. (#22123) thanks @mbelinky. -- iOS/Tests: cover IPv4-mapped IPv6 loopback in manual TLS policy tests for connect validation paths. (#22045) Thanks @mbelinky. -- iOS/Gateway: stabilize background wake and reconnect behavior with background reconnect suppression/lease windows, BGAppRefresh wake fallback, location wake hook throttling, and APNs wake retry+nudge instrumentation. (#21226) thanks @mbelinky. -- Auto-reply/UI: add model fallback lifecycle visibility in verbose logs, /status active-model context with fallback reason, and cohesive WebUI fallback indicators. (#20704) Thanks @joshavant. - Discord/Streaming: add stream preview mode for live draft replies with partial/block options and configurable chunking. Thanks @thewilloftheshadow. Inspiration @neoagentic-ship-it. -- Discord: add configurable ephemeral defaults for slash-command responses. (#16563) Thanks @wei. - Discord/Telegram: add configurable lifecycle status reactions for queued/thinking/tool/done/error phases with a shared controller and emoji/timing overrides. Thanks @wolly-tundracube and @thewilloftheshadow. - Discord/Voice: add voice channel join/leave/status via `/vc`, plus auto-join configuration for realtime voice conversations. Thanks @thewilloftheshadow. +- Discord: add configurable ephemeral defaults for slash-command responses. (#16563) Thanks @wei. - Discord: support updating forum `available_tags` via channel edit actions for forum tag management. (#12070) Thanks @xiaoyaner0201. -- Channels: allow per-channel model overrides via `channels.modelByChannel` and note them in /status. Thanks @thewilloftheshadow. - Discord: include channel topics in trusted inbound metadata on new sessions. Thanks @thewilloftheshadow. -- Docs/Discord: document forum channel thread creation flows and component limits. Thanks @thewilloftheshadow. +- iOS/Chat: clean chat UI noise by stripping inbound untrusted metadata/timestamp prefixes, formatting tool outputs into concise summaries/errors, compacting the composer while typing, and supporting tap-to-dismiss keyboard in chat view. (#22122) thanks @mbelinky. +- iOS/Watch: bridge mirrored watch prompt notification actions into iOS quick-reply handling, including queued action handoff until app model initialization. (#22123) thanks @mbelinky. +- iOS/Gateway: stabilize background wake and reconnect behavior with background reconnect suppression/lease windows, BGAppRefresh wake fallback, location wake hook throttling, and APNs wake retry+nudge instrumentation. (#21226) thanks @mbelinky. +- Auto-reply/UI: add model fallback lifecycle visibility in verbose logs, /status active-model context with fallback reason, and cohesive WebUI fallback indicators. (#20704) Thanks @joshavant. +- MSTeams: dedupe sent-message cache storage by removing duplicate per-message Set storage and using timestamps Map keys as the single membership source. (#22514) Thanks @TaKO8Ki. +- Agents/Subagents: default subagent spawn depth now uses shared `maxSpawnDepth=2`, enabling depth-1 orchestrator spawning by default while keeping depth policy checks consistent across spawn and prompt paths. (#22223) Thanks @tyler6204. +- Security/Agents: make owner-ID obfuscation use a dedicated HMAC secret from configuration (`ownerDisplaySecret`) and update hashing behavior so obfuscation is decoupled from gateway token handling for improved control. (#7343) Thanks @vincentkoc. +- Security/Infra: switch gateway lock and tool-call synthetic IDs from SHA-1 to SHA-256 with unchanged truncation length to strengthen hash basis while keeping deterministic behavior and lock key format. (#7343) Thanks @vincentkoc. +- Dependencies/Tooling: add non-blocking dead-code scans in CI via Knip/ts-prune/ts-unused-exports to surface unused dependencies and exports earlier. (#22468) Thanks @vincentkoc. +- Dependencies/Unused Dependencies: remove or scope unused root and extension deps (`@larksuiteoapi/node-sdk`, `signal-utils`, `ollama`, `lit`, `@lit/context`, `@lit-labs/signals`, `@microsoft/agents-hosting-express`, `@microsoft/agents-hosting-extensions-teams`, and plugin-local `openclaw` devDeps in `extensions/open-prose`, `extensions/lobster`, and `extensions/llm-task`). (#22471, #22495) Thanks @vincentkoc. +- Dependencies/A2UI: harden dependency resolution after root cleanup (resolve `lit`, `@lit/context`, `@lit-labs/signals`, and `signal-utils` from workspace/root) and simplify bundling fallback behavior, including `pnpm dlx rolldown` compatibility. (#22481, #22507) Thanks @vincentkoc. ### Fixes -- Docker/Build: include `ownerDisplay` in `CommandsSchema` object-level defaults so Docker `pnpm build` no longer fails with `TS2769` during plugin SDK d.ts generation. (#22558) Thanks @obviyus. +- iOS/Security: force `https://` for non-loopback manual gateway hosts during iOS onboarding to block insecure remote transport URLs. (#21969) Thanks @mbelinky. +- Gateway/Security: remove shared-IP fallback for canvas endpoints and require token or session capability for canvas access. Thanks @thewilloftheshadow. +- Gateway/Security: require secure context and paired-device checks for Control UI auth even when `gateway.controlUi.allowInsecureAuth` is set, and align audit messaging with the hardened behavior. (#20684) thanks @coygeek. +- Docker/Security: run E2E and install-sh test images as non-root by adding appuser directives. Thanks @thewilloftheshadow. +- Skills/Security: sanitize skill env overrides to block unsafe runtime injection variables and only allow sensitive keys when declared in skill metadata, with warnings for suspicious values. Thanks @thewilloftheshadow. - Security/Gateway/Hooks: block `__proto__`, `constructor`, and `prototype` traversal in webhook template path resolution to prevent prototype-chain payload data leakage in `messageTemplate` rendering. (#22213) Thanks @SleuthCo. -- Cron: honor `cron.maxConcurrentRuns` in the timer loop so due jobs can execute up to the configured parallelism instead of always running serially. (#11595) Thanks @Takhoffman. -- Agents/Compaction: restore embedded compaction safeguard/context-pruning extension loading in production by wiring bundled extension factories into the resource loader instead of runtime file-path resolution. (#22349) Thanks @Glucksberg. -- Auto-reply/Tools: forward `senderIsOwner` through embedded queued/followup runner params so owner-only tools remain available for authorized senders. (#22296) thanks @hcoj. -- Agents/Subagents: restore announce-chain delivery to agent injection, defer nested announce output until descendant follow-up content is ready, and prevent descendant deferrals from consuming announce retry budget so deep chains do not drop final completions. (#22223) Thanks @tyler6204. -- Gateway/Auth: require `gateway.trustedProxies` to include a loopback proxy address when `auth.mode="trusted-proxy"` and `bind="loopback"`, preventing same-host proxy misconfiguration from silently blocking auth. (#22082, follow-up to #20097) thanks @mbelinky. - Security/OpenClawKit/UI: prevent injected inbound user context metadata blocks from leaking into chat history in TUI, webchat, and macOS surfaces by stripping all untrusted metadata prefixes at display boundaries. (#22142) Thanks @Mellowambience, @vincentkoc. - Security/OpenClawKit/UI: strip inbound metadata blocks from user messages in TUI rendering while preserving user-authored content. (#22345) Thanks @kansodata, @vincentkoc. - Security/OpenClawKit/UI: prevent inbound metadata leaks and reply-tag streaming artifacts in TUI rendering by stripping untrusted metadata prefixes at display boundaries. (#22346) Thanks @akramcodez, @vincentkoc. -- Agents/System Prompt: label allowlisted senders as authorized senders to avoid implying ownership. Thanks @thewilloftheshadow. -- Agents/Tool display: fix exec cwd suffix inference so `pushd ... && popd ... && ` does not keep stale `(in

)` context in summaries. (#21925) Thanks @Lukavyi. -- Discord: restore model picker back navigation when a provider is missing and document the Discord picker flow. (#21458) Thanks @pejmanjohn and @thewilloftheshadow. -- Gateway/Auth: allow trusted-proxy mode with loopback bind for same-host reverse-proxy deployments, while still requiring configured `gateway.trustedProxies`. (#20097) thanks @xinhuagu. -- Gateway/Auth: allow authenticated clients across roles/scopes to call `health` while preserving role and scope enforcement for non-health methods. (#19699) thanks @Nachx639. -- Gateway/Security: remove shared-IP fallback for canvas endpoints and require token or session capability for canvas access. Thanks @thewilloftheshadow. -- Gateway/Hooks: include transform export name in hook-transform cache keys so distinct exports from the same module do not reuse the wrong cached transform function. (#13855) thanks @mcaxtr. -- Gateway/Control UI: return 404 for missing static-asset paths instead of serving SPA fallback HTML, while preserving client-route fallback behavior for extensionless and non-asset dotted paths. (#12060) thanks @mcaxtr. -- Gateway/Pairing: prevent device-token rotate scope escalation by enforcing an approved-scope baseline, preserving approved scopes across metadata updates, and rejecting rotate requests that exceed approved role scope implications. (#20703) thanks @coygeek. -- Gateway/Security: require secure context and paired-device checks for Control UI auth even when `gateway.controlUi.allowInsecureAuth` is set, and align audit messaging with the hardened behavior. (#20684) thanks @coygeek. - Security/Agents: restrict local MEDIA tool attachments to core tools and the OpenClaw temp root to prevent untrusted MCP tool file exfiltration. Thanks @NucleiAv and @thewilloftheshadow. -- macOS/Build: default release packaging to `BUNDLE_ID=ai.openclaw.mac` in `scripts/package-mac-dist.sh`, so Sparkle feed URL is retained and auto-update no longer fails with an empty appcast feed. (#19750) thanks @loganprit. -- Gateway/Pairing: clear persisted paired-device state when the gateway client closes with `device token mismatch` (`1008`) so reconnect flows can cleanly re-enter pairing. (#22071) Thanks @mbelinky. +- Security/Net: strip sensitive headers (`Authorization`, `Proxy-Authorization`, `Cookie`, `Cookie2`) on cross-origin redirects in `fetchWithSsrFGuard` to prevent credential forwarding across origin boundaries. (#20313) Thanks @afurm. +- Security/Systemd: reject CR/LF in systemd unit environment values and fix argument escaping so generated units cannot be injected with extra directives. Thanks @thewilloftheshadow. +- Security/Tools: add per-wrapper random IDs to untrusted-content markers from `wrapExternalContent`/`wrapWebContent`, preventing marker spoofing from escaping content boundaries. (#19009) Thanks @Whoaa512. +- Shared/Security: reject insecure deep links that use `ws://` non-loopback gateway URLs to prevent plaintext remote websocket configuration. (#21970) Thanks @mbelinky. +- macOS/Security: reject non-loopback `ws://` remote gateway URLs in macOS remote config to block insecure plaintext websocket endpoints. (#21971) Thanks @mbelinky. +- Browser/Security: block upload path symlink escapes so browser upload sources cannot traverse outside the allowed workspace via symlinked paths. (#21972) Thanks @mbelinky. +- Security/Dependencies: bump transitive `hono` usage to `4.11.10` to incorporate timing-safe authentication comparison hardening for `basicAuth`/`bearerAuth` (`GHSA-gq3j-xvxp-8hrf`). Thanks @vincentkoc. +- Security/Gateway: parse `X-Forwarded-For` with trust-preserving semantics when requests come from configured trusted proxies, preventing proxy-chain spoofing from influencing client IP classification and rate-limit identity. Thanks @AnthonyDiSanti and @vincentkoc. +- Security/Sandbox: remove default `--no-sandbox` for the browser container entrypoint, add explicit opt-in via `OPENCLAW_BROWSER_NO_SANDBOX` / `CLAWDBOT_BROWSER_NO_SANDBOX`, and harden the default container security posture (`GHSA-43x4-g22p-3hrq`). Thanks @TerminalsandCoffee and @vincentkoc. +- Auto-reply/Tools: forward `senderIsOwner` through embedded queued/followup runner params so owner-only tools remain available for authorized senders. (#22296) thanks @hcoj. +- Discord: restore model picker back navigation when a provider is missing and document the Discord picker flow. (#21458) Thanks @pejmanjohn and @thewilloftheshadow. - Memory/QMD: respect per-agent `memorySearch.enabled=false` during gateway QMD startup initialization, split multi-collection QMD searches into per-collection queries (`search`/`vsearch`/`query`) to avoid sparse-term drops, prefer collection-hinted doc resolution to avoid stale-hash collisions, retry boot updates on transient lock/timeout failures, skip `qmd embed` in BM25-only `search` mode (including `memory index --force`), and serialize embed runs globally with failure backoff to prevent CPU storms on multi-agent hosts. (#20581, #21590, #20513, #20001, #21266, #21583, #20346, #19493) Thanks @danielrevivo, @zanderkrause, @sunyan034-cmd, @tilleulenspiegel, @dae-oss, @adamlongcreativellc, @jonathanadams96, and @kiliansitel. - Memory/Builtin: prevent automatic sync races with manager shutdown by skipping post-close sync starts and waiting for in-flight sync before closing SQLite, so `onSearch`/`onSessionStart` no longer fail with `database is not open` in ephemeral CLI flows. (#20556, #7464) Thanks @FuzzyTG and @henrybottter. -- Hooks/Session memory: trigger bundled `session-memory` persistence on both `/new` and `/reset` so reset flows no longer skip markdown transcript capture before archival. (#21382) Thanks @mofesolapaul. -- Signal/Outbound: preserve case for Base64 group IDs during outbound target normalization so cross-context routing and policy checks no longer break when group IDs include uppercase characters. (#5578) Thanks @heyhudson. - Providers/Copilot: drop persisted assistant `thinking` blocks for Claude models (while preserving turn structure/tool blocks) so follow-up requests no longer fail on invalid `thinkingSignature` payloads. (#19459) Thanks @jackheuberger. - Providers/Copilot: add `claude-sonnet-4.6` and `claude-sonnet-4.5` to the default GitHub Copilot model catalog and add coverage for model-list/definition helpers. (#20270, fixes #20091) Thanks @Clawborn. -- Dependencies/Agents: bump embedded Pi SDK packages (`@mariozechner/pi-agent-core`, `@mariozechner/pi-ai`, `@mariozechner/pi-coding-agent`, `@mariozechner/pi-tui`) to `0.54.0`. (#21578) Thanks @Takhoffman. -- Gateway/Config: allow `gateway.customBindHost` in strict config validation when `gateway.bind="custom"` so valid custom bind-host configurations no longer fail startup. (#20318, fixes #20289) Thanks @MisterGuy420. -- Config/Agents: expose Pi compaction tuning values `agents.defaults.compaction.reserveTokens` and `agents.defaults.compaction.keepRecentTokens` in config schema/types and apply them in embedded Pi runner settings overrides with floor enforcement via `reserveTokensFloor`. (#21568) Thanks @Takhoffman. - Auto-reply/WebChat: avoid defaulting inbound runtime channel labels to unrelated providers (for example `whatsapp`) for webchat sessions so channel-specific formatting guidance stays accurate. (#21534) Thanks @lbo728. - Status: include persisted `cacheRead`/`cacheWrite` in session summaries so compact `/status` output consistently shows cache hit percentages from real session data. - Heartbeat/Cron: restore interval heartbeat behavior so missing `HEARTBEAT.md` no longer suppresses runs (only effectively empty files skip), preserving prompt-driven and tagged-cron execution paths. - WhatsApp/Cron/Heartbeat: enforce allowlisted routing for implicit scheduled/system delivery by merging pairing-store + configured `allowFrom` recipients, selecting authorized recipients when last-route context points to a non-allowlisted chat, and preventing heartbeat fan-out to recent unauthorized chats. - Heartbeat/Active hours: constrain active-hours `24` sentinel parsing to `24:00` in time validation so invalid values like `24:30` are rejected early. (#21410) thanks @adhitShet. - Heartbeat: treat `activeHours` windows with identical `start`/`end` times as zero-width (always outside the window) instead of always-active. (#21408) thanks @adhitShet. -- Gateway/Pairing: tolerate legacy paired devices missing `roles`/`scopes` metadata in websocket upgrade checks and backfill metadata on reconnect. (#21447, fixes #21236) Thanks @joshavant. -- Gateway/Pairing/CLI: align read-scope compatibility in pairing/device-token checks and add local `openclaw devices` fallback recovery for loopback `pairing required` deadlocks, with explicit fallback notice to unblock approval bootstrap flows. (#21616) Thanks @shakkernerd. - CLI/Pairing: default `pairing list` and `pairing approve` to the sole available pairing channel when omitted, so TUI-only setups can recover from `pairing required` without guessing channel arguments. (#21527) Thanks @losts1. - TUI/Pairing: show explicit pairing-required recovery guidance after gateway disconnects that return `pairing required`, including approval steps to unblock quickstart TUI hatching on fresh installs. (#21841) Thanks @nicolinux. - TUI/Input: suppress duplicate backspace events arriving in the same input burst window so SSH sessions no longer delete two characters per backspace press in the composer. (#19318) Thanks @eheimer. @@ -90,17 +69,11 @@ Docs: https://docs.openclaw.ai - Memory/Tools: return explicit `unavailable` warnings/actions from `memory_search` when embedding/provider failures occur (including quota exhaustion), so disabled memory does not look like an empty recall result. (#21894) Thanks @XBS9. - Session/Startup: require the `/new` and `/reset` greeting path to run Session Startup file-reading instructions before responding, so daily memory startup context is not skipped on fresh-session greetings. (#22338) Thanks @armstrong-pv. - Auth/Onboarding: align OAuth profile-id config mapping with stored credential IDs for OpenAI Codex and Chutes flows, preventing `provider:default` mismatches when OAuth returns email-scoped credentials. (#12692) thanks @mudrii. -- Docker: pin base images to SHA256 digests in Docker builds to prevent mutable tag drift. (#7734) Thanks @coygeek. -- Docker/Security: run E2E and install-sh test images as non-root by adding appuser directives. Thanks @thewilloftheshadow. -- Docker: run build steps as the `node` user and use `COPY --chown` to avoid recursive ownership changes, trimming image size and layer churn. Thanks @huntharo. - Provider/HTTP: treat HTTP 503 as failover-eligible for LLM provider errors. (#21086) Thanks @Protocol-zero-0. -- Anthropic/Agents: preserve required pi-ai default OAuth beta headers when `context1m` injects `anthropic-beta`, preventing 401 auth failures for `sk-ant-oat-*` tokens. (#19789, fixes #19769) Thanks @minupla. - Slack: pass `recipient_team_id` / `recipient_user_id` through Slack native streaming calls so `chat.startStream`/`appendStream`/`stopStream` work reliably across DMs and Slack Connect setups, and disable block streaming when native streaming is active. (#20988) Thanks @Dithilli. Earlier recipient-ID groundwork was contributed in #20377 by @AsserAl1012. - CLI/Config: add canonical `--strict-json` parsing for `config set` and keep `--json` as a legacy alias to reduce help/behavior drift. (#21332) thanks @adhitShet. - CLI: keep `openclaw -v` as a root-only version alias so subcommand `-v, --verbose` flags (for example ACP/hooks/skills) are no longer intercepted globally. (#21303) thanks @adhitShet. -- Config/Memory: restore schema help/label metadata for hybrid `mmr` and `temporalDecay` settings so configuration surfaces show correct names and guidance. (#18786) Thanks @rodrigouroz. - Memory: return empty snippets when `memory_get`/QMD read files that have not been created yet, and harden memory indexing/session helpers against ENOENT races so missing Markdown no longer crashes tools. (#20680) Thanks @pahdo. -- Tools/web_search: handle xAI Responses API payloads that emit top-level `output_text` blocks (without a `message` wrapper) so Grok web_search no longer returns `No response` for those results. (#20508) Thanks @echoVic. - Telegram/Streaming: always clean up draft previews even when dispatch throws before fallback handling, preventing orphaned preview messages during failed runs. (#19041) thanks @mudrii. - Telegram/Streaming: split reasoning and answer draft preview lanes to prevent cross-lane overwrites, and ignore literal `` tags inside inline/fenced code snippets so sample markup is not misrouted as reasoning. (#20774) Thanks @obviyus. - Telegram/Status reactions: refresh stall timers on repeated phase updates and honor ack-reaction scope when lifecycle reactions are enabled, preventing false stall emojis and unwanted group reactions. Thanks @wolly-tundracube and @thewilloftheshadow. @@ -108,29 +81,43 @@ Docs: https://docs.openclaw.ai - Discord/Streaming: apply `replyToMode: first` only to the first Discord chunk so block-streamed replies do not spam mention pings. (#20726) Thanks @thewilloftheshadow for the report. - Discord/Components: map DM channel targets back to user-scoped component sessions so button/select interactions stay in the main DM session. Thanks @thewilloftheshadow. - Discord/Allowlist: lazy-load guild lists when resolving Discord user allowlists so ID-only entries resolve even if guild fetch fails. (#20208) Thanks @zhangjunmengyang. - - Discord/Gateway: handle close code 4014 (missing privileged gateway intents) without crashing the gateway. Thanks @thewilloftheshadow. - Discord: ingest inbound stickers as media so sticker-only messages and forwarded stickers are visible to agents. Thanks @thewilloftheshadow. -- Security/Net: strip sensitive headers (`Authorization`, `Proxy-Authorization`, `Cookie`, `Cookie2`) on cross-origin redirects in `fetchWithSsrFGuard` to prevent credential forwarding across origin boundaries. (#20313) Thanks @afurm. -- Security/Systemd: reject CR/LF in systemd unit environment values and fix argument escaping so generated units cannot be injected with extra directives. Thanks @thewilloftheshadow. -- Security/Tools: add per-wrapper random IDs to untrusted-content markers from `wrapExternalContent`/`wrapWebContent`, preventing marker spoofing from escaping content boundaries. (#19009) Thanks @Whoaa512. -- Skills/Security: sanitize skill env overrides to block unsafe runtime injection variables and only allow sensitive keys when declared in skill metadata, with warnings for suspicious values. Thanks @thewilloftheshadow. -- Skills/SonosCLI: add troubleshooting guidance for `sonos discover` failures on macOS direct mode (`sendto: no route to host`) and sandbox network restrictions (`bind: operation not permitted`). (#21316) Thanks @huntharo. - Auto-reply/Runner: emit `onAgentRunStart` only after agent lifecycle or tool activity begins (and only once per run), so fallback preflight errors no longer mark runs as started. (#21165) Thanks @shakkernerd. -- Agents/Failover: treat non-default override runs as direct fallback-to-configured-primary (skip configured fallback chain), normalize default-model detection for provider casing/whitespace, and add regression coverage for override/auth error paths. (#18820) Thanks @Glucksberg. - Auto-reply/Tool results: serialize tool-result delivery and keep the delivery chain progressing after individual failures so concurrent tool outputs preserve user-visible ordering. (#21231) thanks @ahdernasr. - Auto-reply/Prompt caching: restore prefix-cache stability by keeping inbound system metadata session-stable and moving per-message IDs (`message_id`, `message_id_full`, `reply_to_id`, `sender_id`) into untrusted conversation context. (#20597) Thanks @anisoptera. -- iOS/Security: force `https://` for non-loopback manual gateway hosts during iOS onboarding to block insecure remote transport URLs. (#21969) Thanks @mbelinky. -- Shared/Security: reject insecure deep links that use `ws://` non-loopback gateway URLs to prevent plaintext remote websocket configuration. (#21970) Thanks @mbelinky. -- macOS/Security: reject non-loopback `ws://` remote gateway URLs in macOS remote config to block insecure plaintext websocket endpoints. (#21971) Thanks @mbelinky. -- Browser/Security: block upload path symlink escapes so browser upload sources cannot traverse outside the allowed workspace via symlinked paths. (#21972) Thanks @mbelinky. - iOS/Watch: add actionable watch approval/reject controls and quick-reply actions so watch-originated approvals and responses can be sent directly from notification flows. (#21996) Thanks @mbelinky. - iOS/Watch: refresh iOS and watch app icon assets with the lobster icon set to keep phone/watch branding aligned. (#21997) Thanks @mbelinky. - CLI/Onboarding: fix Anthropic-compatible custom provider verification by normalizing base URLs to avoid duplicate `/v1` paths during setup checks. (#21336) Thanks @17jmumford. -- Security/Dependencies: bump transitive `hono` usage to `4.11.10` to incorporate timing-safe authentication comparison hardening for `basicAuth`/`bearerAuth` (`GHSA-gq3j-xvxp-8hrf`). Thanks @vincentkoc. -- Security/Gateway: parse `X-Forwarded-For` with trust-preserving semantics when requests come from configured trusted proxies, preventing proxy-chain spoofing from influencing client IP classification and rate-limit identity. Thanks @AnthonyDiSanti and @vincentkoc. - iOS/Gateway/Tools: prefer uniquely connected node matches when duplicate display names exist, surface actionable `nodes invoke` pairing-required guidance with request IDs, and refresh active iOS gateway registration after location-capability setting changes so capability updates apply immediately. (#22120) thanks @mbelinky. -- Security/Sandbox: remove default `--no-sandbox` for the browser container entrypoint, add explicit opt-in via `OPENCLAW_BROWSER_NO_SANDBOX` / `CLAWDBOT_BROWSER_NO_SANDBOX`, and harden the default container security posture (`GHSA-43x4-g22p-3hrq`). Thanks @TerminalsandCoffee and @vincentkoc. +- Gateway/Auth: require `gateway.trustedProxies` to include a loopback proxy address when `auth.mode="trusted-proxy"` and `bind="loopback"`, preventing same-host proxy misconfiguration from silently blocking auth. (#22082, follow-up to #20097) thanks @mbelinky. +- Gateway/Auth: allow trusted-proxy mode with loopback bind for same-host reverse-proxy deployments, while still requiring configured `gateway.trustedProxies`. (#20097) thanks @xinhuagu. +- Gateway/Auth: allow authenticated clients across roles/scopes to call `health` while preserving role and scope enforcement for non-health methods. (#19699) thanks @Nachx639. +- Gateway/Hooks: include transform export name in hook-transform cache keys so distinct exports from the same module do not reuse the wrong cached transform function. (#13855) thanks @mcaxtr. +- Gateway/Control UI: return 404 for missing static-asset paths instead of serving SPA fallback HTML, while preserving client-route fallback behavior for extensionless and non-asset dotted paths. (#12060) thanks @mcaxtr. +- Gateway/Pairing: prevent device-token rotate scope escalation by enforcing an approved-scope baseline, preserving approved scopes across metadata updates, and rejecting rotate requests that exceed approved role scope implications. (#20703) thanks @coygeek. +- Gateway/Pairing: clear persisted paired-device state when the gateway client closes with `device token mismatch` (`1008`) so reconnect flows can cleanly re-enter pairing. (#22071) Thanks @mbelinky. +- Gateway/Config: allow `gateway.customBindHost` in strict config validation when `gateway.bind="custom"` so valid custom bind-host configurations no longer fail startup. (#20318, fixes #20289) Thanks @MisterGuy420. +- Gateway/Pairing: tolerate legacy paired devices missing `roles`/`scopes` metadata in websocket upgrade checks and backfill metadata on reconnect. (#21447, fixes #21236) Thanks @joshavant. +- Gateway/Pairing/CLI: align read-scope compatibility in pairing/device-token checks and add local `openclaw devices` fallback recovery for loopback `pairing required` deadlocks, with explicit fallback notice to unblock approval bootstrap flows. (#21616) Thanks @shakkernerd. +- Cron: honor `cron.maxConcurrentRuns` in the timer loop so due jobs can execute up to the configured parallelism instead of always running serially. (#11595) Thanks @Takhoffman. +- Agents/Compaction: restore embedded compaction safeguard/context-pruning extension loading in production by wiring bundled extension factories into the resource loader instead of runtime file-path resolution. (#22349) Thanks @Glucksberg. +- Agents/Subagents: restore announce-chain delivery to agent injection, defer nested announce output until descendant follow-up content is ready, and prevent descendant deferrals from consuming announce retry budget so deep chains do not drop final completions. (#22223) Thanks @tyler6204. +- Agents/System Prompt: label allowlisted senders as authorized senders to avoid implying ownership. Thanks @thewilloftheshadow. +- Agents/Tool display: fix exec cwd suffix inference so `pushd ... && popd ... && ` does not keep stale `(in )` context in summaries. (#21925) Thanks @Lukavyi. +- Tools/web_search: handle xAI Responses API payloads that emit top-level `output_text` blocks (without a `message` wrapper) so Grok web_search no longer returns `No response` for those results. (#20508) Thanks @echoVic. +- Agents/Failover: treat non-default override runs as direct fallback-to-configured-primary (skip configured fallback chain), normalize default-model detection for provider casing/whitespace, and add regression coverage for override/auth error paths. (#18820) Thanks @Glucksberg. +- Docker/Build: include `ownerDisplay` in `CommandsSchema` object-level defaults so Docker `pnpm build` no longer fails with `TS2769` during plugin SDK d.ts generation. (#22558) Thanks @obviyus. +- Hooks/Session memory: trigger bundled `session-memory` persistence on both `/new` and `/reset` so reset flows no longer skip markdown transcript capture before archival. (#21382) Thanks @mofesolapaul. +- Dependencies/Agents: bump embedded Pi SDK packages (`@mariozechner/pi-agent-core`, `@mariozechner/pi-ai`, `@mariozechner/pi-coding-agent`, `@mariozechner/pi-tui`) to `0.54.0`. (#21578) Thanks @Takhoffman. +- Config/Agents: expose Pi compaction tuning values `agents.defaults.compaction.reserveTokens` and `agents.defaults.compaction.keepRecentTokens` in config schema/types and apply them in embedded Pi runner settings overrides with floor enforcement via `reserveTokensFloor`. (#21568) Thanks @Takhoffman. +- Docker: pin base images to SHA256 digests in Docker builds to prevent mutable tag drift. (#7734) Thanks @coygeek. +- Docker: run build steps as the `node` user and use `COPY --chown` to avoid recursive ownership changes, trimming image size and layer churn. Thanks @huntharo. +- Config/Memory: restore schema help/label metadata for hybrid `mmr` and `temporalDecay` settings so configuration surfaces show correct names and guidance. (#18786) Thanks @rodrigouroz. +- Skills/SonosCLI: add troubleshooting guidance for `sonos discover` failures on macOS direct mode (`sendto: no route to host`) and sandbox network restrictions (`bind: operation not permitted`). (#21316) Thanks @huntharo. +- macOS/Build: default release packaging to `BUNDLE_ID=ai.openclaw.mac` in `scripts/package-mac-dist.sh`, so Sparkle feed URL is retained and auto-update no longer fails with an empty appcast feed. (#19750) thanks @loganprit. +- Signal/Outbound: preserve case for Base64 group IDs during outbound target normalization so cross-context routing and policy checks no longer break when group IDs include uppercase characters. (#5578) Thanks @heyhudson. +- Anthropic/Agents: preserve required pi-ai default OAuth beta headers when `context1m` injects `anthropic-beta`, preventing 401 auth failures for `sk-ant-oat-*` tokens. (#19789, fixes #19769) Thanks @minupla. ## 2026.2.19 From f81522af2ed3315eec52ada513c44bb1eae26e94 Mon Sep 17 00:00:00 2001 From: Ayaan Zaidi Date: Sat, 21 Feb 2026 15:48:27 +0530 Subject: [PATCH 0139/1007] fix(docker): install Playwright Chromium into node cache (#22585) Merged via /review-pr -> /prepare-pr -> /merge-pr. Prepared head SHA: 84dc9ffccd27a51a5c9b8793e55d44abfc7ee520 Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com> Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com> Reviewed-by: @obviyus --- CHANGELOG.md | 1 + Dockerfile | 3 +++ 2 files changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c3f5eb0f..a7e4cfd55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -108,6 +108,7 @@ Docs: https://docs.openclaw.ai - Tools/web_search: handle xAI Responses API payloads that emit top-level `output_text` blocks (without a `message` wrapper) so Grok web_search no longer returns `No response` for those results. (#20508) Thanks @echoVic. - Agents/Failover: treat non-default override runs as direct fallback-to-configured-primary (skip configured fallback chain), normalize default-model detection for provider casing/whitespace, and add regression coverage for override/auth error paths. (#18820) Thanks @Glucksberg. - Docker/Build: include `ownerDisplay` in `CommandsSchema` object-level defaults so Docker `pnpm build` no longer fails with `TS2769` during plugin SDK d.ts generation. (#22558) Thanks @obviyus. +- Docker/Browser: install Playwright Chromium into `/home/node/.cache/ms-playwright` and set `node:node` ownership so browser binaries are available to the runtime user in browser-enabled images. (#22585) thanks @obviyus. - Hooks/Session memory: trigger bundled `session-memory` persistence on both `/new` and `/reset` so reset flows no longer skip markdown transcript capture before archival. (#21382) Thanks @mofesolapaul. - Dependencies/Agents: bump embedded Pi SDK packages (`@mariozechner/pi-agent-core`, `@mariozechner/pi-ai`, `@mariozechner/pi-coding-agent`, `@mariozechner/pi-tui`) to `0.54.0`. (#21578) Thanks @Takhoffman. - Config/Agents: expose Pi compaction tuning values `agents.defaults.compaction.reserveTokens` and `agents.defaults.compaction.keepRecentTokens` in config schema/types and apply them in embedded Pi runner settings overrides with floor enforcement via `reserveTokensFloor`. (#21568) Thanks @Takhoffman. diff --git a/Dockerfile b/Dockerfile index b174f9c8d..255340cb0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,7 +34,10 @@ ARG OPENCLAW_INSTALL_BROWSER="" RUN if [ -n "$OPENCLAW_INSTALL_BROWSER" ]; then \ apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends xvfb && \ + mkdir -p /home/node/.cache/ms-playwright && \ + PLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwright \ node /app/node_modules/playwright-core/cli.js install --with-deps chromium && \ + chown -R node:node /home/node/.cache/ms-playwright && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*; \ fi From c6ee14d60e4cbd6a82f9b2d74ebeb1e8ee814964 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 11:18:19 +0100 Subject: [PATCH 0140/1007] fix(security): block grep safe-bin file-read bypass --- CHANGELOG.md | 1 + docs/tools/exec-approvals.md | 2 ++ src/infra/exec-approvals.test.ts | 16 ++++++++++++++++ src/infra/exec-safe-bin-policy.test.ts | 22 ++++++++++++++++++++++ src/infra/exec-safe-bin-policy.ts | 5 ++++- 5 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 src/infra/exec-safe-bin-policy.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index a7e4cfd55..97775abc6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -202,6 +202,7 @@ Docs: https://docs.openclaw.ai - Security/Exec: remove file-existence oracle behavior from `tools.exec.safeBins` by using deterministic argv-only stdin-safe validation and blocking file-oriented flags (for example `sort -o`, `jq -f`, `grep -f`) so allow/deny results no longer disclose host file presence. This ships in the next npm release. Thanks @nedlir for reporting. - Security/Browser: route browser URL navigation through one SSRF-guarded validation path for tab-open/CDP-target/Playwright navigation flows and block private/metadata destinations by default (configurable via `browser.ssrfPolicy`). This ships in the next npm release. Thanks @dorjoos for reporting. - Security/Exec: for the next npm release, harden safe-bin stdin-only enforcement by blocking output/recursive flags (`sort -o/--output`, grep recursion) and tightening default safe bins to remove `sort`/`grep`, preventing safe-bin allowlist bypass for file writes/recursive reads. Thanks @nedlir for reporting. +- Security/Exec: block grep safe-bin positional operand bypass by setting grep positional budget to zero, so `-e/--regexp` cannot smuggle bare filename reads (for example `.env`) via ambiguous positionals; safe-bin grep patterns must come from `-e/--regexp`. This ships in the next npm release. Thanks @athuljayaram for reporting. - Security/Gateway/Agents: remove implicit admin scopes from agent tool gateway calls by classifying methods to least-privilege operator scopes, and enforce owner-only tooling (`cron`, `gateway`, `whatsapp_login`) through centralized tool-policy wrappers plus tool metadata to prevent non-owner DM privilege escalation. Ships in the next npm release. Thanks @Adam55A-code for reporting. - Security/Gateway: centralize gateway method-scope authorization and default non-CLI gateway callers to least-privilege method scopes, with explicit CLI scope handling, full core-handler scope classification coverage, and regression guards to prevent scope drift. - Security/Net: block SSRF bypass via NAT64 (`64:ff9b::/96`, `64:ff9b:1::/48`), 6to4 (`2002::/16`), and Teredo (`2001:0000::/32`) IPv6 transition addresses, and fail closed on IPv6 parse errors. Thanks @jackhax. diff --git a/docs/tools/exec-approvals.md b/docs/tools/exec-approvals.md index f813b89c8..567706d2d 100644 --- a/docs/tools/exec-approvals.md +++ b/docs/tools/exec-approvals.md @@ -146,6 +146,8 @@ Default safe bins: `jq`, `cut`, `uniq`, `head`, `tail`, `tr`, `wc`. `grep` and `sort` are not in the default list. If you opt in, keep explicit allowlist entries for their non-stdin workflows. +For `grep` in safe-bin mode, provide the pattern with `-e`/`--regexp`; positional pattern form is +rejected so file operands cannot be smuggled as ambiguous positionals. ## Control UI editing diff --git a/src/infra/exec-approvals.test.ts b/src/infra/exec-approvals.test.ts index 887f1980c..b1a3d2022 100644 --- a/src/infra/exec-approvals.test.ts +++ b/src/infra/exec-approvals.test.ts @@ -497,6 +497,22 @@ describe("exec approvals safe bins", () => { safeBins: ["grep"], executableName: "grep", }, + { + name: "blocks grep file positional when pattern uses -e", + argv: ["grep", "-e", "needle", ".env"], + resolvedPath: "/usr/bin/grep", + expected: false, + safeBins: ["grep"], + executableName: "grep", + }, + { + name: "blocks grep file positional after -- terminator", + argv: ["grep", "-e", "needle", "--", ".env"], + resolvedPath: "/usr/bin/grep", + expected: false, + safeBins: ["grep"], + executableName: "grep", + }, ]; for (const testCase of cases) { diff --git a/src/infra/exec-safe-bin-policy.test.ts b/src/infra/exec-safe-bin-policy.test.ts new file mode 100644 index 000000000..5e808a320 --- /dev/null +++ b/src/infra/exec-safe-bin-policy.test.ts @@ -0,0 +1,22 @@ +import { describe, expect, it } from "vitest"; +import { SAFE_BIN_PROFILES, validateSafeBinArgv } from "./exec-safe-bin-policy.js"; + +describe("exec safe bin policy grep", () => { + const grepProfile = SAFE_BIN_PROFILES.grep; + + it("allows stdin-only grep when pattern comes from flags", () => { + expect(validateSafeBinArgv(["-e", "needle"], grepProfile)).toBe(true); + expect(validateSafeBinArgv(["--regexp=needle"], grepProfile)).toBe(true); + }); + + it("blocks grep positional pattern form to avoid filename ambiguity", () => { + expect(validateSafeBinArgv(["needle"], grepProfile)).toBe(false); + }); + + it("blocks file positionals when pattern comes from -e/--regexp", () => { + expect(validateSafeBinArgv(["-e", "SECRET", ".env"], grepProfile)).toBe(false); + expect(validateSafeBinArgv(["--regexp", "KEY", "config.py"], grepProfile)).toBe(false); + expect(validateSafeBinArgv(["--regexp=KEY", ".env"], grepProfile)).toBe(false); + expect(validateSafeBinArgv(["-e", "KEY", "--", ".env"], grepProfile)).toBe(false); + }); +}); diff --git a/src/infra/exec-safe-bin-policy.ts b/src/infra/exec-safe-bin-policy.ts index dad6af099..a2986190a 100644 --- a/src/infra/exec-safe-bin-policy.ts +++ b/src/infra/exec-safe-bin-policy.ts @@ -91,7 +91,10 @@ export const SAFE_BIN_PROFILE_FIXTURES: Record = ], }, grep: { - maxPositional: 1, + // Keep grep stdin-only: pattern must come from -e/--regexp. + // Allowing one positional is ambiguous because -e consumes the pattern and + // frees the positional slot for a filename. + maxPositional: 0, valueFlags: [ "--regexp", "--file", From 220bd95eff6838234e8b4b711f86d4565e16e401 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 11:31:13 +0100 Subject: [PATCH 0141/1007] fix(browser): block non-network navigation schemes --- CHANGELOG.md | 1 + src/browser/navigation-guard.test.ts | 34 +++++++++++++++++++++++++++- src/browser/navigation-guard.ts | 8 ++++++- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97775abc6..d5f68b1a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ Docs: https://docs.openclaw.ai - Gateway/Security: require secure context and paired-device checks for Control UI auth even when `gateway.controlUi.allowInsecureAuth` is set, and align audit messaging with the hardened behavior. (#20684) thanks @coygeek. - Docker/Security: run E2E and install-sh test images as non-root by adding appuser directives. Thanks @thewilloftheshadow. - Skills/Security: sanitize skill env overrides to block unsafe runtime injection variables and only allow sensitive keys when declared in skill metadata, with warnings for suspicious values. Thanks @thewilloftheshadow. +- Security/Browser: block non-network browser navigation protocols (including `file:`, `data:`, and `javascript:`) while preserving `about:blank`, preventing local file reads via browser tool navigation. This ships in the next npm release. Thanks @q1uf3ng for reporting. - Security/Gateway/Hooks: block `__proto__`, `constructor`, and `prototype` traversal in webhook template path resolution to prevent prototype-chain payload data leakage in `messageTemplate` rendering. (#22213) Thanks @SleuthCo. - Security/OpenClawKit/UI: prevent injected inbound user context metadata blocks from leaking into chat history in TUI, webchat, and macOS surfaces by stripping all untrusted metadata prefixes at display boundaries. (#22142) Thanks @Mellowambience, @vincentkoc. - Security/OpenClawKit/UI: strip inbound metadata blocks from user messages in TUI rendering while preserving user-authored content. (#22345) Thanks @kansodata, @vincentkoc. diff --git a/src/browser/navigation-guard.test.ts b/src/browser/navigation-guard.test.ts index efa07be63..3a096aac8 100644 --- a/src/browser/navigation-guard.test.ts +++ b/src/browser/navigation-guard.test.ts @@ -19,7 +19,7 @@ describe("browser navigation guard", () => { ).rejects.toBeInstanceOf(SsrFBlockedError); }); - it("allows non-network schemes", async () => { + it("allows about:blank", async () => { await expect( assertBrowserNavigationAllowed({ url: "about:blank", @@ -27,6 +27,38 @@ describe("browser navigation guard", () => { ).resolves.toBeUndefined(); }); + it("blocks file URLs", async () => { + await expect( + assertBrowserNavigationAllowed({ + url: "file:///etc/passwd", + }), + ).rejects.toBeInstanceOf(InvalidBrowserNavigationUrlError); + }); + + it("blocks data URLs", async () => { + await expect( + assertBrowserNavigationAllowed({ + url: "data:text/html,

owned

", + }), + ).rejects.toBeInstanceOf(InvalidBrowserNavigationUrlError); + }); + + it("blocks javascript URLs", async () => { + await expect( + assertBrowserNavigationAllowed({ + url: "javascript:alert(1)", + }), + ).rejects.toBeInstanceOf(InvalidBrowserNavigationUrlError); + }); + + it("blocks non-blank about URLs", async () => { + await expect( + assertBrowserNavigationAllowed({ + url: "about:srcdoc", + }), + ).rejects.toBeInstanceOf(InvalidBrowserNavigationUrlError); + }); + it("allows blocked hostnames when explicitly allowed", async () => { const lookupFn = createLookupFn("127.0.0.1"); await expect( diff --git a/src/browser/navigation-guard.ts b/src/browser/navigation-guard.ts index f5c404847..5567642e3 100644 --- a/src/browser/navigation-guard.ts +++ b/src/browser/navigation-guard.ts @@ -5,6 +5,7 @@ import { } from "../infra/net/ssrf.js"; const NETWORK_NAVIGATION_PROTOCOLS = new Set(["http:", "https:"]); +const SAFE_NON_NETWORK_URLS = new Set(["about:blank"]); export class InvalidBrowserNavigationUrlError extends Error { constructor(message: string) { @@ -42,7 +43,12 @@ export async function assertBrowserNavigationAllowed( } if (!NETWORK_NAVIGATION_PROTOCOLS.has(parsed.protocol)) { - return; + if (SAFE_NON_NETWORK_URLS.has(parsed.href)) { + return; + } + throw new InvalidBrowserNavigationUrlError( + `Navigation blocked: unsupported protocol "${parsed.protocol}"`, + ); } await resolvePinnedHostnameWithPolicy(parsed.hostname, { From 6b2f2811dc623e5faaf2f76afaa9279637174590 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 11:41:35 +0100 Subject: [PATCH 0142/1007] fix(security): require BlueBubbles webhook auth --- CHANGELOG.md | 1 + docs/channels/bluebubbles.md | 3 +- extensions/bluebubbles/src/monitor.test.ts | 118 ++++++++------------- extensions/bluebubbles/src/monitor.ts | 84 ++++----------- 4 files changed, 71 insertions(+), 135 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5f68b1a4..db6a9ac32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ Docs: https://docs.openclaw.ai ### Fixes +- BlueBubbles/Security (optional beta iMessage plugin): require webhook token authentication for all BlueBubbles webhook requests (including loopback/proxied setups), removing passwordless webhook fallback behavior. Thanks @zpbrent. - iOS/Security: force `https://` for non-loopback manual gateway hosts during iOS onboarding to block insecure remote transport URLs. (#21969) Thanks @mbelinky. - Gateway/Security: remove shared-IP fallback for canvas endpoints and require token or session capability for canvas access. Thanks @thewilloftheshadow. - Gateway/Security: require secure context and paired-device checks for Control UI auth even when `gateway.controlUi.allowInsecureAuth` is set, and align audit messaging with the hardened behavior. (#20684) thanks @coygeek. diff --git a/docs/channels/bluebubbles.md b/docs/channels/bluebubbles.md index c639cacec..f9dcff3b6 100644 --- a/docs/channels/bluebubbles.md +++ b/docs/channels/bluebubbles.md @@ -46,7 +46,8 @@ Status: bundled plugin that talks to the BlueBubbles macOS server over HTTP. **R Security note: -- Always set a webhook password. If you expose the gateway through a reverse proxy (Tailscale Serve/Funnel, nginx, Cloudflare Tunnel, ngrok), the proxy may connect to the gateway over loopback. The BlueBubbles webhook handler treats requests with forwarding headers as proxied and will not accept passwordless webhooks. +- Always set a webhook password. +- Webhook authentication is always required. OpenClaw rejects BlueBubbles webhook requests unless they include a password/guid that matches `channels.bluebubbles.password` (for example `?password=` or `x-password`), regardless of loopback/proxy topology. ## Keeping Messages.app alive (VM / headless setups) diff --git a/extensions/bluebubbles/src/monitor.test.ts b/extensions/bluebubbles/src/monitor.test.ts index 6e4d39cbb..7b4d95d76 100644 --- a/extensions/bluebubbles/src/monitor.test.ts +++ b/extensions/bluebubbles/src/monitor.test.ts @@ -659,15 +659,15 @@ describe("BlueBubbles webhook monitor", () => { expect(sinkB).not.toHaveBeenCalled(); }); - it("does not route to passwordless targets when a password-authenticated target matches", async () => { + it("ignores targets without passwords when a password-authenticated target matches", async () => { const accountStrict = createMockAccount({ password: "secret-token" }); - const accountFallback = createMockAccount({ password: undefined }); + const accountWithoutPassword = createMockAccount({ password: undefined }); const config: OpenClawConfig = {}; const core = createMockRuntime(); setBlueBubblesRuntime(core); const sinkStrict = vi.fn(); - const sinkFallback = vi.fn(); + const sinkWithoutPassword = vi.fn(); const req = createMockRequest("POST", "/bluebubbles-webhook?password=secret-token", { type: "new-message", @@ -691,17 +691,17 @@ describe("BlueBubbles webhook monitor", () => { path: "/bluebubbles-webhook", statusSink: sinkStrict, }); - const unregisterFallback = registerBlueBubblesWebhookTarget({ - account: accountFallback, + const unregisterNoPassword = registerBlueBubblesWebhookTarget({ + account: accountWithoutPassword, config, runtime: { log: vi.fn(), error: vi.fn() }, core, path: "/bluebubbles-webhook", - statusSink: sinkFallback, + statusSink: sinkWithoutPassword, }); unregister = () => { unregisterStrict(); - unregisterFallback(); + unregisterNoPassword(); }; const res = createMockResponse(); @@ -710,7 +710,7 @@ describe("BlueBubbles webhook monitor", () => { expect(handled).toBe(true); expect(res.statusCode).toBe(200); expect(sinkStrict).toHaveBeenCalledTimes(1); - expect(sinkFallback).not.toHaveBeenCalled(); + expect(sinkWithoutPassword).not.toHaveBeenCalled(); }); it("requires authentication for loopback requests when password is configured", async () => { @@ -750,77 +750,49 @@ describe("BlueBubbles webhook monitor", () => { } }); - it("rejects passwordless targets when the request looks proxied (has forwarding headers)", async () => { + it("rejects targets without passwords for loopback and proxied-looking requests", async () => { const account = createMockAccount({ password: undefined }); const config: OpenClawConfig = {}; const core = createMockRuntime(); setBlueBubblesRuntime(core); - const req = createMockRequest( - "POST", - "/bluebubbles-webhook", - { - type: "new-message", - data: { - text: "hello", - handle: { address: "+15551234567" }, - isGroup: false, - isFromMe: false, - guid: "msg-1", + unregister = registerBlueBubblesWebhookTarget({ + account, + config, + runtime: { log: vi.fn(), error: vi.fn() }, + core, + path: "/bluebubbles-webhook", + }); + + const headerVariants: Record[] = [ + { host: "localhost" }, + { host: "localhost", "x-forwarded-for": "203.0.113.10" }, + { host: "localhost", forwarded: "for=203.0.113.10;proto=https;host=example.com" }, + ]; + for (const headers of headerVariants) { + const req = createMockRequest( + "POST", + "/bluebubbles-webhook", + { + type: "new-message", + data: { + text: "hello", + handle: { address: "+15551234567" }, + isGroup: false, + isFromMe: false, + guid: "msg-1", + }, }, - }, - { "x-forwarded-for": "203.0.113.10", host: "localhost" }, - ); - (req as unknown as { socket: { remoteAddress: string } }).socket = { - remoteAddress: "127.0.0.1", - }; - - unregister = registerBlueBubblesWebhookTarget({ - account, - config, - runtime: { log: vi.fn(), error: vi.fn() }, - core, - path: "/bluebubbles-webhook", - }); - - const res = createMockResponse(); - const handled = await handleBlueBubblesWebhookRequest(req, res); - expect(handled).toBe(true); - expect(res.statusCode).toBe(401); - }); - - it("accepts passwordless targets for direct localhost loopback requests (no forwarding headers)", async () => { - const account = createMockAccount({ password: undefined }); - const config: OpenClawConfig = {}; - const core = createMockRuntime(); - setBlueBubblesRuntime(core); - - const req = createMockRequest("POST", "/bluebubbles-webhook", { - type: "new-message", - data: { - text: "hello", - handle: { address: "+15551234567" }, - isGroup: false, - isFromMe: false, - guid: "msg-1", - }, - }); - (req as unknown as { socket: { remoteAddress: string } }).socket = { - remoteAddress: "127.0.0.1", - }; - - unregister = registerBlueBubblesWebhookTarget({ - account, - config, - runtime: { log: vi.fn(), error: vi.fn() }, - core, - path: "/bluebubbles-webhook", - }); - - const res = createMockResponse(); - const handled = await handleBlueBubblesWebhookRequest(req, res); - expect(handled).toBe(true); - expect(res.statusCode).toBe(200); + headers, + ); + (req as unknown as { socket: { remoteAddress: string } }).socket = { + remoteAddress: "127.0.0.1", + }; + const res = createMockResponse(); + const handled = await handleBlueBubblesWebhookRequest(req, res); + expect(handled).toBe(true); + expect(res.statusCode).toBe(401); + } }); it("ignores unregistered webhook paths", async () => { diff --git a/extensions/bluebubbles/src/monitor.ts b/extensions/bluebubbles/src/monitor.ts index 9b5bd2409..367f095b8 100644 --- a/extensions/bluebubbles/src/monitor.ts +++ b/extensions/bluebubbles/src/monitor.ts @@ -231,6 +231,12 @@ function removeDebouncer(target: WebhookTarget): void { } export function registerBlueBubblesWebhookTarget(target: WebhookTarget): () => void { + const webhookPassword = target.account.config.password?.trim() ?? ""; + if (!webhookPassword) { + target.runtime.error?.( + `[${target.account.accountId}] BlueBubbles webhook auth requires channels.bluebubbles.password. Configure a password and include it in the webhook URL.`, + ); + } const registered = registerWebhookTarget(webhookTargets, target); return () => { registered.unregister(); @@ -337,46 +343,24 @@ function safeEqualSecret(aRaw: string, bRaw: string): boolean { return timingSafeEqual(bufA, bufB); } -function getHostName(hostHeader?: string | string[]): string { - const host = (Array.isArray(hostHeader) ? hostHeader[0] : (hostHeader ?? "")) - .trim() - .toLowerCase(); - if (!host) { - return ""; - } - // Bracketed IPv6: [::1]:18789 - if (host.startsWith("[")) { - const end = host.indexOf("]"); - if (end !== -1) { - return host.slice(1, end); +function resolveAuthenticatedWebhookTargets( + targets: WebhookTarget[], + presentedToken: string, +): WebhookTarget[] { + const matches: WebhookTarget[] = []; + for (const target of targets) { + const token = target.account.config.password?.trim() ?? ""; + if (!token) { + continue; + } + if (safeEqualSecret(presentedToken, token)) { + matches.push(target); + if (matches.length > 1) { + break; + } } } - const [name] = host.split(":"); - return name ?? ""; -} - -function isDirectLocalLoopbackRequest(req: IncomingMessage): boolean { - const remote = (req.socket?.remoteAddress ?? "").trim().toLowerCase(); - const remoteIsLoopback = - remote === "127.0.0.1" || remote === "::1" || remote === "::ffff:127.0.0.1"; - if (!remoteIsLoopback) { - return false; - } - - const host = getHostName(req.headers?.host); - const hostIsLocal = host === "localhost" || host === "127.0.0.1" || host === "::1"; - if (!hostIsLocal) { - return false; - } - - // If a reverse proxy is in front, it will usually inject forwarding headers. - // Passwordless webhooks must never be accepted through a proxy. - const hasForwarded = Boolean( - req.headers?.["x-forwarded-for"] || - req.headers?.["x-real-ip"] || - req.headers?.["x-forwarded-host"], - ); - return !hasForwarded; + return matches; } export async function handleBlueBubblesWebhookRequest( @@ -466,29 +450,7 @@ export async function handleBlueBubblesWebhookRequest( req.headers["x-bluebubbles-guid"] ?? req.headers["authorization"]; const guid = (Array.isArray(headerToken) ? headerToken[0] : headerToken) ?? guidParam ?? ""; - - const strictMatches: WebhookTarget[] = []; - const passwordlessTargets: WebhookTarget[] = []; - for (const target of targets) { - const token = target.account.config.password?.trim() ?? ""; - if (!token) { - passwordlessTargets.push(target); - continue; - } - if (safeEqualSecret(guid, token)) { - strictMatches.push(target); - if (strictMatches.length > 1) { - break; - } - } - } - - const matching = - strictMatches.length > 0 - ? strictMatches - : isDirectLocalLoopbackRequest(req) - ? passwordlessTargets - : []; + const matching = resolveAuthenticatedWebhookTargets(targets, guid); if (matching.length === 0) { res.statusCode = 401; From 2cdbadee1f8fcaa93302d7debbfc529e19868ea4 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 11:43:53 +0100 Subject: [PATCH 0143/1007] fix(security): block startup-file env injection across host execution paths --- CHANGELOG.md | 1 + .../OpenClaw/ExecApprovalsSocket.swift | 29 +------- .../Sources/OpenClaw/HostEnvSanitizer.swift | 54 ++++++++++++++ .../OpenClaw/NodeMode/MacNodeRuntime.swift | 29 +------- src/agents/bash-tools.exec-runtime.ts | 30 +------- src/agents/skills.e2e.test.ts | 44 +++++++++++ src/agents/skills/env-overrides.ts | 43 ++++++----- src/config/config.env-vars.test.ts | 17 ++++- src/config/env-vars.ts | 7 ++ src/infra/host-env-security.test.ts | 51 +++++++++++++ src/infra/host-env-security.ts | 74 +++++++++++++++++++ src/node-host/invoke.sanitize-env.test.ts | 45 +++++++++-- src/node-host/invoke.ts | 41 +--------- 13 files changed, 318 insertions(+), 147 deletions(-) create mode 100644 apps/macos/Sources/OpenClaw/HostEnvSanitizer.swift create mode 100644 src/infra/host-env-security.test.ts create mode 100644 src/infra/host-env-security.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index db6a9ac32..c720ff92f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ Docs: https://docs.openclaw.ai - Docker/Security: run E2E and install-sh test images as non-root by adding appuser directives. Thanks @thewilloftheshadow. - Skills/Security: sanitize skill env overrides to block unsafe runtime injection variables and only allow sensitive keys when declared in skill metadata, with warnings for suspicious values. Thanks @thewilloftheshadow. - Security/Browser: block non-network browser navigation protocols (including `file:`, `data:`, and `javascript:`) while preserving `about:blank`, preventing local file reads via browser tool navigation. This ships in the next npm release. Thanks @q1uf3ng for reporting. +- Security/Exec: block shell startup-file env injection (`BASH_ENV`, `ENV`, `BASH_FUNC_*`, `LD_*`, `DYLD_*`) across config env ingestion, node-host inherited environment sanitization, and macOS exec host runtime to prevent pre-command execution from attacker-controlled environment variables. Thanks @tdjackey. - Security/Gateway/Hooks: block `__proto__`, `constructor`, and `prototype` traversal in webhook template path resolution to prevent prototype-chain payload data leakage in `messageTemplate` rendering. (#22213) Thanks @SleuthCo. - Security/OpenClawKit/UI: prevent injected inbound user context metadata blocks from leaking into chat history in TUI, webchat, and macOS surfaces by stripping all untrusted metadata prefixes at display boundaries. (#22142) Thanks @Mellowambience, @vincentkoc. - Security/OpenClawKit/UI: strip inbound metadata blocks from user messages in TUI rendering while preserving user-authored content. (#22345) Thanks @kansodata, @vincentkoc. diff --git a/apps/macos/Sources/OpenClaw/ExecApprovalsSocket.swift b/apps/macos/Sources/OpenClaw/ExecApprovalsSocket.swift index e1432aaea..fdef131ba 100644 --- a/apps/macos/Sources/OpenClaw/ExecApprovalsSocket.swift +++ b/apps/macos/Sources/OpenClaw/ExecApprovalsSocket.swift @@ -364,21 +364,6 @@ private enum ExecHostExecutor { let skillAllow: Bool } - private static let blockedEnvKeys: Set = [ - "PATH", - "NODE_OPTIONS", - "PYTHONHOME", - "PYTHONPATH", - "PERL5LIB", - "PERL5OPT", - "RUBYOPT", - ] - - private static let blockedEnvPrefixes: [String] = [ - "DYLD_", - "LD_", - ] - static func handle(_ request: ExecHostRequest) async -> ExecHostResponse { let command = request.command.map { $0.trimmingCharacters(in: .whitespacesAndNewlines) } guard !command.isEmpty else { @@ -580,18 +565,8 @@ private enum ExecHostExecutor { error: nil) } - private static func sanitizedEnv(_ overrides: [String: String]?) -> [String: String]? { - guard let overrides else { return nil } - var merged = ProcessInfo.processInfo.environment - for (rawKey, value) in overrides { - let key = rawKey.trimmingCharacters(in: .whitespacesAndNewlines) - guard !key.isEmpty else { continue } - let upper = key.uppercased() - if self.blockedEnvKeys.contains(upper) { continue } - if self.blockedEnvPrefixes.contains(where: { upper.hasPrefix($0) }) { continue } - merged[key] = value - } - return merged + private static func sanitizedEnv(_ overrides: [String: String]?) -> [String: String] { + HostEnvSanitizer.sanitize(overrides: overrides) } } diff --git a/apps/macos/Sources/OpenClaw/HostEnvSanitizer.swift b/apps/macos/Sources/OpenClaw/HostEnvSanitizer.swift new file mode 100644 index 000000000..bbef0486f --- /dev/null +++ b/apps/macos/Sources/OpenClaw/HostEnvSanitizer.swift @@ -0,0 +1,54 @@ +import Foundation + +enum HostEnvSanitizer { + private static let blockedKeys: Set = [ + "NODE_OPTIONS", + "NODE_PATH", + "PYTHONHOME", + "PYTHONPATH", + "PERL5LIB", + "PERL5OPT", + "RUBYLIB", + "RUBYOPT", + "BASH_ENV", + "ENV", + "GCONV_PATH", + "IFS", + "SSLKEYLOGFILE", + ] + + private static let blockedPrefixes: [String] = [ + "DYLD_", + "LD_", + "BASH_FUNC_", + ] + + private static func isBlocked(_ upperKey: String) -> Bool { + if self.blockedKeys.contains(upperKey) { return true } + return self.blockedPrefixes.contains(where: { upperKey.hasPrefix($0) }) + } + + static func sanitize(overrides: [String: String]?) -> [String: String] { + var merged: [String: String] = [:] + for (rawKey, value) in ProcessInfo.processInfo.environment { + let key = rawKey.trimmingCharacters(in: .whitespacesAndNewlines) + guard !key.isEmpty else { continue } + let upper = key.uppercased() + if self.isBlocked(upper) { continue } + merged[key] = value + } + + guard let overrides else { return merged } + for (rawKey, value) in overrides { + let key = rawKey.trimmingCharacters(in: .whitespacesAndNewlines) + guard !key.isEmpty else { continue } + let upper = key.uppercased() + // PATH is part of the security boundary (command resolution + safe-bin checks). Never + // allow request-scoped PATH overrides from agents/gateways. + if upper == "PATH" { continue } + if self.isBlocked(upper) { continue } + merged[key] = value + } + return merged + } +} diff --git a/apps/macos/Sources/OpenClaw/NodeMode/MacNodeRuntime.swift b/apps/macos/Sources/OpenClaw/NodeMode/MacNodeRuntime.swift index 60bd95f28..0d096a1ef 100644 --- a/apps/macos/Sources/OpenClaw/NodeMode/MacNodeRuntime.swift +++ b/apps/macos/Sources/OpenClaw/NodeMode/MacNodeRuntime.swift @@ -862,33 +862,8 @@ extension MacNodeRuntime { UserDefaults.standard.object(forKey: cameraEnabledKey) as? Bool ?? false } - private static let blockedEnvKeys: Set = [ - "PATH", - "NODE_OPTIONS", - "PYTHONHOME", - "PYTHONPATH", - "PERL5LIB", - "PERL5OPT", - "RUBYOPT", - ] - - private static let blockedEnvPrefixes: [String] = [ - "DYLD_", - "LD_", - ] - - private static func sanitizedEnv(_ overrides: [String: String]?) -> [String: String]? { - guard let overrides else { return nil } - var merged = ProcessInfo.processInfo.environment - for (rawKey, value) in overrides { - let key = rawKey.trimmingCharacters(in: .whitespacesAndNewlines) - guard !key.isEmpty else { continue } - let upper = key.uppercased() - if self.blockedEnvKeys.contains(upper) { continue } - if self.blockedEnvPrefixes.contains(where: { upper.hasPrefix($0) }) { continue } - merged[key] = value - } - return merged + private static func sanitizedEnv(_ overrides: [String: String]?) -> [String: String] { + HostEnvSanitizer.sanitize(overrides: overrides) } private nonisolated static func locationMode() -> OpenClawLocationMode { diff --git a/src/agents/bash-tools.exec-runtime.ts b/src/agents/bash-tools.exec-runtime.ts index bc6022555..e342df623 100644 --- a/src/agents/bash-tools.exec-runtime.ts +++ b/src/agents/bash-tools.exec-runtime.ts @@ -3,6 +3,7 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; import { Type } from "@sinclair/typebox"; import type { ExecAsk, ExecHost, ExecSecurity } from "../infra/exec-approvals.js"; import { requestHeartbeatNow } from "../infra/heartbeat-wake.js"; +import { isDangerousHostEnvVarName } from "../infra/host-env-security.js"; import { mergePathPrepend } from "../infra/path-prepend.js"; import { enqueueSystemEvent } from "../infra/system-events.js"; import type { ProcessSession } from "./bash-process-registry.js"; @@ -28,28 +29,6 @@ import { import { buildCursorPositionResponse, stripDsrRequests } from "./pty-dsr.js"; import { getShellConfig, sanitizeBinaryOutput } from "./shell-utils.js"; -// Security: Blocklist of environment variables that could alter execution flow -// or inject code when running on non-sandboxed hosts (Gateway/Node). -const DANGEROUS_HOST_ENV_VARS = new Set([ - "LD_PRELOAD", - "LD_LIBRARY_PATH", - "LD_AUDIT", - "DYLD_INSERT_LIBRARIES", - "DYLD_LIBRARY_PATH", - "NODE_OPTIONS", - "NODE_PATH", - "PYTHONPATH", - "PYTHONHOME", - "RUBYLIB", - "PERL5LIB", - "BASH_ENV", - "ENV", - "GCONV_PATH", - "IFS", - "SSLKEYLOGFILE", -]); -const DANGEROUS_HOST_ENV_PREFIXES = ["DYLD_", "LD_"]; - // Centralized sanitization helper. // Throws an error if dangerous variables or PATH modifications are detected on the host. export function validateHostEnv(env: Record): void { @@ -57,12 +36,7 @@ export function validateHostEnv(env: Record): void { const upperKey = key.toUpperCase(); // 1. Block known dangerous variables (Fail Closed) - if (DANGEROUS_HOST_ENV_PREFIXES.some((prefix) => upperKey.startsWith(prefix))) { - throw new Error( - `Security Violation: Environment variable '${key}' is forbidden during host execution.`, - ); - } - if (DANGEROUS_HOST_ENV_VARS.has(upperKey)) { + if (isDangerousHostEnvVarName(upperKey)) { throw new Error( `Security Violation: Environment variable '${key}' is forbidden during host execution.`, ); diff --git a/src/agents/skills.e2e.test.ts b/src/agents/skills.e2e.test.ts index 72dbc84af..f23d914a4 100644 --- a/src/agents/skills.e2e.test.ts +++ b/src/agents/skills.e2e.test.ts @@ -351,6 +351,50 @@ describe("applySkillEnvOverrides", () => { } }); + it("blocks dangerous host env overrides even when declared", async () => { + const workspaceDir = await makeWorkspace(); + const skillDir = path.join(workspaceDir, "skills", "dangerous-env-skill"); + await writeSkill({ + dir: skillDir, + name: "dangerous-env-skill", + description: "Needs env", + metadata: '{"openclaw":{"requires":{"env":["BASH_ENV"]}}}', + }); + + const entries = loadWorkspaceSkillEntries(workspaceDir, { + managedSkillsDir: path.join(workspaceDir, ".managed"), + }); + + const originalBashEnv = process.env.BASH_ENV; + delete process.env.BASH_ENV; + + const restore = applySkillEnvOverrides({ + skills: entries, + config: { + skills: { + entries: { + "dangerous-env-skill": { + env: { + BASH_ENV: "/tmp/pwn.sh", + }, + }, + }, + }, + }, + }); + + try { + expect(process.env.BASH_ENV).toBeUndefined(); + } finally { + restore(); + if (originalBashEnv === undefined) { + expect(process.env.BASH_ENV).toBeUndefined(); + } else { + expect(process.env.BASH_ENV).toBe(originalBashEnv); + } + } + }); + it("allows required env overrides from snapshots", async () => { const workspaceDir = await makeWorkspace(); const skillDir = path.join(workspaceDir, "skills", "snapshot-env-skill"); diff --git a/src/agents/skills/env-overrides.ts b/src/agents/skills/env-overrides.ts index df19f79ef..e2c736e36 100644 --- a/src/agents/skills/env-overrides.ts +++ b/src/agents/skills/env-overrides.ts @@ -1,4 +1,5 @@ import type { OpenClawConfig } from "../../config/config.js"; +import { isDangerousHostEnvVarName } from "../../infra/host-env-security.js"; import { sanitizeEnvVars, validateEnvVarValue } from "../sandbox/sanitize-env-vars.js"; import { resolveSkillConfig } from "./config.js"; import { resolveSkillKey } from "./frontmatter.js"; @@ -13,18 +14,19 @@ type SanitizedSkillEnvOverrides = { warnings: string[]; }; -// Never allow skill env overrides that can alter runtime loader flags. -const HARD_BLOCKED_SKILL_ENV_PATTERNS: ReadonlyArray = [ - /^NODE_OPTIONS$/i, - /^OPENSSL_CONF$/i, - /^LD_PRELOAD$/i, - /^DYLD_INSERT_LIBRARIES$/i, -]; +// Always block skill env overrides that can alter runtime loading or host execution behavior. +const SKILL_ALWAYS_BLOCKED_ENV_PATTERNS: ReadonlyArray = [/^OPENSSL_CONF$/i]; function matchesAnyPattern(value: string, patterns: readonly RegExp[]): boolean { return patterns.some((pattern) => pattern.test(value)); } +function isAlwaysBlockedSkillEnvKey(key: string): boolean { + return ( + isDangerousHostEnvVarName(key) || matchesAnyPattern(key, SKILL_ALWAYS_BLOCKED_ENV_PATTERNS) + ); +} + function sanitizeSkillEnvOverrides(params: { overrides: Record; allowedSensitiveKeys: Set; @@ -33,19 +35,22 @@ function sanitizeSkillEnvOverrides(params: { return { allowed: {}, blocked: [], warnings: [] }; } - const result = sanitizeEnvVars(params.overrides, { - customBlockedPatterns: HARD_BLOCKED_SKILL_ENV_PATTERNS, - }); - const allowed = { ...result.allowed }; - const blocked: string[] = []; + const result = sanitizeEnvVars(params.overrides); + const allowed: Record = {}; + const blocked = new Set(); const warnings = [...result.warnings]; + for (const [key, value] of Object.entries(result.allowed)) { + if (isAlwaysBlockedSkillEnvKey(key)) { + blocked.add(key); + continue; + } + allowed[key] = value; + } + for (const key of result.blocked) { - if ( - matchesAnyPattern(key, HARD_BLOCKED_SKILL_ENV_PATTERNS) || - !params.allowedSensitiveKeys.has(key) - ) { - blocked.push(key); + if (isAlwaysBlockedSkillEnvKey(key) || !params.allowedSensitiveKeys.has(key)) { + blocked.add(key); continue; } const value = params.overrides[key]; @@ -55,7 +60,7 @@ function sanitizeSkillEnvOverrides(params: { const warning = validateEnvVarValue(value); if (warning) { if (warning === "Contains null bytes") { - blocked.push(key); + blocked.add(key); continue; } warnings.push(`${key}: ${warning}`); @@ -63,7 +68,7 @@ function sanitizeSkillEnvOverrides(params: { allowed[key] = value; } - return { allowed, blocked, warnings }; + return { allowed, blocked: [...blocked], warnings }; } function applySkillConfigEnvOverrides(params: { diff --git a/src/config/config.env-vars.test.ts b/src/config/config.env-vars.test.ts index 5b628c6fe..37fa7f8fe 100644 --- a/src/config/config.env-vars.test.ts +++ b/src/config/config.env-vars.test.ts @@ -3,7 +3,7 @@ import path from "node:path"; import { describe, expect, it } from "vitest"; import { loadDotEnv } from "../infra/dotenv.js"; import { resolveConfigEnvVars } from "./env-substitution.js"; -import { applyConfigEnvVars } from "./env-vars.js"; +import { applyConfigEnvVars, collectConfigEnvVars } from "./env-vars.js"; import { withEnvOverride, withTempHome } from "./test-helpers.js"; import type { OpenClawConfig } from "./types.js"; @@ -29,6 +29,21 @@ describe("config env vars", () => { }); }); + it("blocks dangerous startup env vars from config env", async () => { + await withEnvOverride({ BASH_ENV: undefined, OPENROUTER_API_KEY: undefined }, async () => { + const config = { + env: { vars: { BASH_ENV: "/tmp/pwn.sh", OPENROUTER_API_KEY: "config-key" } }, + }; + const entries = collectConfigEnvVars(config as OpenClawConfig); + expect(entries.BASH_ENV).toBeUndefined(); + expect(entries.OPENROUTER_API_KEY).toBe("config-key"); + + applyConfigEnvVars(config as OpenClawConfig); + expect(process.env.BASH_ENV).toBeUndefined(); + expect(process.env.OPENROUTER_API_KEY).toBe("config-key"); + }); + }); + it("loads ${VAR} substitutions from ~/.openclaw/.env on repeated runtime loads", async () => { await withTempHome(async (_home) => { await withEnvOverride({ BRAVE_API_KEY: undefined }, async () => { diff --git a/src/config/env-vars.ts b/src/config/env-vars.ts index 458674b75..cff37b1ef 100644 --- a/src/config/env-vars.ts +++ b/src/config/env-vars.ts @@ -1,3 +1,4 @@ +import { isDangerousHostEnvVarName } from "../infra/host-env-security.js"; import type { OpenClawConfig } from "./types.js"; export function collectConfigEnvVars(cfg?: OpenClawConfig): Record { @@ -13,6 +14,9 @@ export function collectConfigEnvVars(cfg?: OpenClawConfig): Record { + it("matches dangerous keys and prefixes case-insensitively", () => { + expect(isDangerousHostEnvVarName("BASH_ENV")).toBe(true); + expect(isDangerousHostEnvVarName("bash_env")).toBe(true); + expect(isDangerousHostEnvVarName("DYLD_INSERT_LIBRARIES")).toBe(true); + expect(isDangerousHostEnvVarName("ld_preload")).toBe(true); + expect(isDangerousHostEnvVarName("BASH_FUNC_echo%%")).toBe(true); + expect(isDangerousHostEnvVarName("PATH")).toBe(false); + expect(isDangerousHostEnvVarName("FOO")).toBe(false); + }); +}); + +describe("sanitizeHostExecEnv", () => { + it("removes dangerous inherited keys while preserving PATH", () => { + const env = sanitizeHostExecEnv({ + baseEnv: { + PATH: "/usr/bin:/bin", + BASH_ENV: "/tmp/pwn.sh", + LD_PRELOAD: "/tmp/pwn.so", + OK: "1", + }, + }); + + expect(env).toEqual({ + PATH: "/usr/bin:/bin", + OK: "1", + }); + }); + + it("blocks PATH and dangerous override values", () => { + const env = sanitizeHostExecEnv({ + baseEnv: { + PATH: "/usr/bin:/bin", + HOME: "/tmp/home", + }, + overrides: { + PATH: "/tmp/evil", + BASH_ENV: "/tmp/pwn.sh", + SAFE: "ok", + }, + }); + + expect(env.PATH).toBe("/usr/bin:/bin"); + expect(env.BASH_ENV).toBeUndefined(); + expect(env.SAFE).toBe("ok"); + expect(env.HOME).toBe("/tmp/home"); + }); +}); diff --git a/src/infra/host-env-security.ts b/src/infra/host-env-security.ts new file mode 100644 index 000000000..a3347c608 --- /dev/null +++ b/src/infra/host-env-security.ts @@ -0,0 +1,74 @@ +const HOST_DANGEROUS_ENV_KEY_VALUES = [ + "NODE_OPTIONS", + "NODE_PATH", + "PYTHONHOME", + "PYTHONPATH", + "PERL5LIB", + "PERL5OPT", + "RUBYLIB", + "RUBYOPT", + "BASH_ENV", + "ENV", + "GCONV_PATH", + "IFS", + "SSLKEYLOGFILE", +] as const; + +export const HOST_DANGEROUS_ENV_KEYS = new Set(HOST_DANGEROUS_ENV_KEY_VALUES); +export const HOST_DANGEROUS_ENV_PREFIXES = ["DYLD_", "LD_", "BASH_FUNC_"] as const; + +export function isDangerousHostEnvVarName(key: string): boolean { + const upper = key.toUpperCase(); + if (HOST_DANGEROUS_ENV_KEYS.has(upper)) { + return true; + } + return HOST_DANGEROUS_ENV_PREFIXES.some((prefix) => upper.startsWith(prefix)); +} + +export function sanitizeHostExecEnv(params?: { + baseEnv?: Record; + overrides?: Record | null; + blockPathOverrides?: boolean; +}): Record { + const baseEnv = params?.baseEnv ?? process.env; + const overrides = params?.overrides ?? undefined; + const blockPathOverrides = params?.blockPathOverrides ?? true; + + const merged: Record = {}; + for (const [rawKey, value] of Object.entries(baseEnv)) { + if (typeof value !== "string") { + continue; + } + const key = rawKey.trim(); + if (!key || isDangerousHostEnvVarName(key)) { + continue; + } + merged[key] = value; + } + + if (!overrides) { + return merged; + } + + for (const [rawKey, value] of Object.entries(overrides)) { + if (typeof value !== "string") { + continue; + } + const key = rawKey.trim(); + if (!key) { + continue; + } + const upper = key.toUpperCase(); + // PATH is part of the security boundary (command resolution + safe-bin checks). Never allow + // request-scoped PATH overrides from agents/gateways. + if (blockPathOverrides && upper === "PATH") { + continue; + } + if (isDangerousHostEnvVarName(upper)) { + continue; + } + merged[key] = value; + } + + return merged; +} diff --git a/src/node-host/invoke.sanitize-env.test.ts b/src/node-host/invoke.sanitize-env.test.ts index 589d61960..f3a64ad9b 100644 --- a/src/node-host/invoke.sanitize-env.test.ts +++ b/src/node-host/invoke.sanitize-env.test.ts @@ -7,7 +7,7 @@ describe("node-host sanitizeEnv", () => { const prev = process.env.PATH; process.env.PATH = "/usr/bin"; try { - const env = sanitizeEnv({ PATH: "/tmp/evil:/usr/bin" }) ?? {}; + const env = sanitizeEnv({ PATH: "/tmp/evil:/usr/bin" }); expect(env.PATH).toBe("/usr/bin"); } finally { if (prev === undefined) { @@ -21,18 +21,21 @@ describe("node-host sanitizeEnv", () => { it("blocks dangerous env keys/prefixes", () => { const prevPythonPath = process.env.PYTHONPATH; const prevLdPreload = process.env.LD_PRELOAD; + const prevBashEnv = process.env.BASH_ENV; try { delete process.env.PYTHONPATH; delete process.env.LD_PRELOAD; - const env = - sanitizeEnv({ - PYTHONPATH: "/tmp/pwn", - LD_PRELOAD: "/tmp/pwn.so", - FOO: "bar", - }) ?? {}; + delete process.env.BASH_ENV; + const env = sanitizeEnv({ + PYTHONPATH: "/tmp/pwn", + LD_PRELOAD: "/tmp/pwn.so", + BASH_ENV: "/tmp/pwn.sh", + FOO: "bar", + }); expect(env.FOO).toBe("bar"); expect(env.PYTHONPATH).toBeUndefined(); expect(env.LD_PRELOAD).toBeUndefined(); + expect(env.BASH_ENV).toBeUndefined(); } finally { if (prevPythonPath === undefined) { delete process.env.PYTHONPATH; @@ -44,6 +47,34 @@ describe("node-host sanitizeEnv", () => { } else { process.env.LD_PRELOAD = prevLdPreload; } + if (prevBashEnv === undefined) { + delete process.env.BASH_ENV; + } else { + process.env.BASH_ENV = prevBashEnv; + } + } + }); + + it("drops dangerous inherited env keys even without overrides", () => { + const prevPath = process.env.PATH; + const prevBashEnv = process.env.BASH_ENV; + try { + process.env.PATH = "/usr/bin:/bin"; + process.env.BASH_ENV = "/tmp/pwn.sh"; + const env = sanitizeEnv(undefined); + expect(env.PATH).toBe("/usr/bin:/bin"); + expect(env.BASH_ENV).toBeUndefined(); + } finally { + if (prevPath === undefined) { + delete process.env.PATH; + } else { + process.env.PATH = prevPath; + } + if (prevBashEnv === undefined) { + delete process.env.BASH_ENV; + } else { + process.env.BASH_ENV = prevBashEnv; + } } }); }); diff --git a/src/node-host/invoke.ts b/src/node-host/invoke.ts index b5cbec126..d2c95b7e0 100644 --- a/src/node-host/invoke.ts +++ b/src/node-host/invoke.ts @@ -32,6 +32,7 @@ import { type ExecHostRunResult, } from "../infra/exec-host.js"; import { getTrustedSafeBinDirs } from "../infra/exec-safe-bin-trust.js"; +import { sanitizeHostExecEnv } from "../infra/host-env-security.js"; import { validateSystemRunCommandConsistency } from "../infra/system-run-command.js"; import { runBrowserProxyCommand } from "./invoke-browser.js"; @@ -43,17 +44,6 @@ const execHostEnforced = process.env.OPENCLAW_NODE_EXEC_HOST?.trim().toLowerCase const execHostFallbackAllowed = process.env.OPENCLAW_NODE_EXEC_FALLBACK?.trim().toLowerCase() !== "0"; -const blockedEnvKeys = new Set([ - "NODE_OPTIONS", - "PYTHONHOME", - "PYTHONPATH", - "PERL5LIB", - "PERL5OPT", - "RUBYOPT", -]); - -const blockedEnvPrefixes = ["DYLD_", "LD_"]; - type SystemRunParams = { command: string[]; rawCommand?: string | null; @@ -136,33 +126,8 @@ function resolveExecAsk(value?: string): ExecAsk { return value === "off" || value === "on-miss" || value === "always" ? value : "on-miss"; } -export function sanitizeEnv( - overrides?: Record | null, -): Record | undefined { - if (!overrides) { - return undefined; - } - const merged = { ...process.env } as Record; - for (const [rawKey, value] of Object.entries(overrides)) { - const key = rawKey.trim(); - if (!key) { - continue; - } - const upper = key.toUpperCase(); - // PATH is part of the security boundary (command resolution + safe-bin checks). Never allow - // request-scoped PATH overrides from agents/gateways. - if (upper === "PATH") { - continue; - } - if (blockedEnvKeys.has(upper)) { - continue; - } - if (blockedEnvPrefixes.some((prefix) => upper.startsWith(prefix))) { - continue; - } - merged[key] = value; - } - return merged; +export function sanitizeEnv(overrides?: Record | null): Record { + return sanitizeHostExecEnv({ overrides, blockPathOverrides: true }); } function truncateOutput(raw: string, maxChars: number): { text: string; truncated: boolean } { From 55aaeb5085a0d86b4f44b49312723c4561f9f866 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 11:45:23 +0100 Subject: [PATCH 0144/1007] refactor(browser): centralize navigation guard enforcement --- src/browser/cdp.test.ts | 16 ++++ src/browser/cdp.ts | 11 +-- src/browser/navigation-guard.ts | 7 +- ...ssion.create-page.navigation-guard.test.ts | 95 +++++++++++++++++++ src/browser/pw-session.ts | 13 +-- ...tools-core.snapshot.navigate-guard.test.ts | 47 +++++++++ .../server-context.remote-tab-ops.test.ts | 21 +++- src/browser/server-context.ts | 26 +++-- 8 files changed, 203 insertions(+), 33 deletions(-) create mode 100644 src/browser/pw-session.create-page.navigation-guard.test.ts create mode 100644 src/browser/pw-tools-core.snapshot.navigate-guard.test.ts diff --git a/src/browser/cdp.test.ts b/src/browser/cdp.test.ts index 1acd0004e..e8e2b9f6d 100644 --- a/src/browser/cdp.test.ts +++ b/src/browser/cdp.test.ts @@ -4,6 +4,7 @@ import { type WebSocket, WebSocketServer } from "ws"; import { SsrFBlockedError } from "../infra/net/ssrf.js"; import { rawDataToString } from "../infra/ws.js"; import { createTargetViaCdp, evaluateJavaScript, normalizeCdpWsUrl, snapshotAria } from "./cdp.js"; +import { InvalidBrowserNavigationUrlError } from "./navigation-guard.js"; describe("cdp", () => { let httpServer: ReturnType | null = null; @@ -109,6 +110,21 @@ describe("cdp", () => { } }); + it("blocks unsupported non-network navigation URLs", async () => { + const fetchSpy = vi.spyOn(globalThis, "fetch"); + try { + await expect( + createTargetViaCdp({ + cdpUrl: "http://127.0.0.1:9222", + url: "file:///etc/passwd", + }), + ).rejects.toBeInstanceOf(InvalidBrowserNavigationUrlError); + expect(fetchSpy).not.toHaveBeenCalled(); + } finally { + fetchSpy.mockRestore(); + } + }); + it("allows private navigation targets when explicitly configured", async () => { const wsPort = await startWsServerWithMessages((msg, socket) => { if (msg.method !== "Target.createTarget") { diff --git a/src/browser/cdp.ts b/src/browser/cdp.ts index 577ac37a4..20686b76f 100644 --- a/src/browser/cdp.ts +++ b/src/browser/cdp.ts @@ -88,14 +88,11 @@ export async function createTargetViaCdp(opts: { cdpUrl: string; url: string; ssrfPolicy?: SsrFPolicy; - navigationChecked?: boolean; }): Promise<{ targetId: string }> { - if (!opts.navigationChecked) { - await assertBrowserNavigationAllowed({ - url: opts.url, - ...withBrowserNavigationPolicy(opts.ssrfPolicy), - }); - } + await assertBrowserNavigationAllowed({ + url: opts.url, + ...withBrowserNavigationPolicy(opts.ssrfPolicy), + }); const version = await fetchJson<{ webSocketDebuggerUrl?: string }>( appendCdpPath(opts.cdpUrl, "/json/version"), diff --git a/src/browser/navigation-guard.ts b/src/browser/navigation-guard.ts index 5567642e3..f9b9fe226 100644 --- a/src/browser/navigation-guard.ts +++ b/src/browser/navigation-guard.ts @@ -7,6 +7,11 @@ import { const NETWORK_NAVIGATION_PROTOCOLS = new Set(["http:", "https:"]); const SAFE_NON_NETWORK_URLS = new Set(["about:blank"]); +function isAllowedNonNetworkNavigationUrl(parsed: URL): boolean { + // Keep non-network navigation explicit; about:blank is the only allowed bootstrap URL. + return SAFE_NON_NETWORK_URLS.has(parsed.href); +} + export class InvalidBrowserNavigationUrlError extends Error { constructor(message: string) { super(message); @@ -43,7 +48,7 @@ export async function assertBrowserNavigationAllowed( } if (!NETWORK_NAVIGATION_PROTOCOLS.has(parsed.protocol)) { - if (SAFE_NON_NETWORK_URLS.has(parsed.href)) { + if (isAllowedNonNetworkNavigationUrl(parsed)) { return; } throw new InvalidBrowserNavigationUrlError( diff --git a/src/browser/pw-session.create-page.navigation-guard.test.ts b/src/browser/pw-session.create-page.navigation-guard.test.ts new file mode 100644 index 000000000..088cbeaa7 --- /dev/null +++ b/src/browser/pw-session.create-page.navigation-guard.test.ts @@ -0,0 +1,95 @@ +import { afterEach, describe, expect, it, vi } from "vitest"; +import { InvalidBrowserNavigationUrlError } from "./navigation-guard.js"; +import { closePlaywrightBrowserConnection, createPageViaPlaywright } from "./pw-session.js"; + +const connectOverCdpMock = vi.fn(); +const getChromeWebSocketUrlMock = vi.fn(); + +vi.mock("playwright-core", () => ({ + chromium: { + connectOverCDP: (...args: unknown[]) => connectOverCdpMock(...args), + }, +})); + +vi.mock("./chrome.js", () => ({ + getChromeWebSocketUrl: (...args: unknown[]) => getChromeWebSocketUrlMock(...args), +})); + +function installBrowserMocks() { + const pageOn = vi.fn(); + const pageGoto = vi.fn(async () => {}); + const pageTitle = vi.fn(async () => ""); + const pageUrl = vi.fn(() => "about:blank"); + const contextOn = vi.fn(); + const browserOn = vi.fn(); + const browserClose = vi.fn(async () => {}); + const sessionSend = vi.fn(async (method: string) => { + if (method === "Target.getTargetInfo") { + return { targetInfo: { targetId: "TARGET_1" } }; + } + return {}; + }); + const sessionDetach = vi.fn(async () => {}); + + const context = { + pages: () => [], + on: contextOn, + newPage: vi.fn(async () => page), + newCDPSession: vi.fn(async () => ({ + send: sessionSend, + detach: sessionDetach, + })), + } as unknown as import("playwright-core").BrowserContext; + + const page = { + on: pageOn, + context: () => context, + goto: pageGoto, + title: pageTitle, + url: pageUrl, + } as unknown as import("playwright-core").Page; + + const browser = { + contexts: () => [context], + on: browserOn, + close: browserClose, + } as unknown as import("playwright-core").Browser; + + connectOverCdpMock.mockResolvedValue(browser); + getChromeWebSocketUrlMock.mockResolvedValue(null); + + return { pageGoto, browserClose }; +} + +afterEach(async () => { + connectOverCdpMock.mockReset(); + getChromeWebSocketUrlMock.mockReset(); + await closePlaywrightBrowserConnection().catch(() => {}); +}); + +describe("pw-session createPageViaPlaywright navigation guard", () => { + it("blocks unsupported non-network URLs", async () => { + const { pageGoto } = installBrowserMocks(); + + await expect( + createPageViaPlaywright({ + cdpUrl: "http://127.0.0.1:18792", + url: "file:///etc/passwd", + }), + ).rejects.toBeInstanceOf(InvalidBrowserNavigationUrlError); + + expect(pageGoto).not.toHaveBeenCalled(); + }); + + it("allows about:blank without network navigation", async () => { + const { pageGoto } = installBrowserMocks(); + + const created = await createPageViaPlaywright({ + cdpUrl: "http://127.0.0.1:18792", + url: "about:blank", + }); + + expect(created.targetId).toBe("TARGET_1"); + expect(pageGoto).not.toHaveBeenCalled(); + }); +}); diff --git a/src/browser/pw-session.ts b/src/browser/pw-session.ts index a8ff3c3f3..b1a704b12 100644 --- a/src/browser/pw-session.ts +++ b/src/browser/pw-session.ts @@ -7,8 +7,8 @@ import type { Response, } from "playwright-core"; import { chromium } from "playwright-core"; -import { formatErrorMessage } from "../infra/errors.js"; import type { SsrFPolicy } from "../infra/net/ssrf.js"; +import { formatErrorMessage } from "../infra/errors.js"; import { appendCdpPath, fetchJson, getHeadersWithAuth, withCdpSocket } from "./cdp.helpers.js"; import { normalizeCdpWsUrl } from "./cdp.js"; import { getChromeWebSocketUrl } from "./chrome.js"; @@ -722,7 +722,6 @@ export async function createPageViaPlaywright(opts: { cdpUrl: string; url: string; ssrfPolicy?: SsrFPolicy; - navigationChecked?: boolean; }): Promise<{ targetId: string; title: string; @@ -739,12 +738,10 @@ export async function createPageViaPlaywright(opts: { // Navigate to the URL const targetUrl = opts.url.trim() || "about:blank"; if (targetUrl !== "about:blank") { - if (!opts.navigationChecked) { - await assertBrowserNavigationAllowed({ - url: targetUrl, - ...withBrowserNavigationPolicy(opts.ssrfPolicy), - }); - } + await assertBrowserNavigationAllowed({ + url: targetUrl, + ...withBrowserNavigationPolicy(opts.ssrfPolicy), + }); await page.goto(targetUrl, { timeout: 30_000 }).catch(() => { // Navigation might fail for some URLs, but page is still created }); diff --git a/src/browser/pw-tools-core.snapshot.navigate-guard.test.ts b/src/browser/pw-tools-core.snapshot.navigate-guard.test.ts new file mode 100644 index 000000000..07c2aa19f --- /dev/null +++ b/src/browser/pw-tools-core.snapshot.navigate-guard.test.ts @@ -0,0 +1,47 @@ +import { describe, expect, it, vi } from "vitest"; +import { InvalidBrowserNavigationUrlError } from "./navigation-guard.js"; +import { + getPwToolsCoreSessionMocks, + installPwToolsCoreTestHooks, + setPwToolsCoreCurrentPage, +} from "./pw-tools-core.test-harness.js"; + +installPwToolsCoreTestHooks(); +const mod = await import("./pw-tools-core.snapshot.js"); + +describe("pw-tools-core.snapshot navigate guard", () => { + it("blocks unsupported non-network URLs before page lookup", async () => { + const goto = vi.fn(async () => {}); + setPwToolsCoreCurrentPage({ + goto, + url: vi.fn(() => "about:blank"), + }); + + await expect( + mod.navigateViaPlaywright({ + cdpUrl: "http://127.0.0.1:18792", + url: "file:///etc/passwd", + }), + ).rejects.toBeInstanceOf(InvalidBrowserNavigationUrlError); + + expect(getPwToolsCoreSessionMocks().getPageForTargetId).not.toHaveBeenCalled(); + expect(goto).not.toHaveBeenCalled(); + }); + + it("navigates valid network URLs with clamped timeout", async () => { + const goto = vi.fn(async () => {}); + setPwToolsCoreCurrentPage({ + goto, + url: vi.fn(() => "https://example.com"), + }); + + const result = await mod.navigateViaPlaywright({ + cdpUrl: "http://127.0.0.1:18792", + url: "https://example.com", + timeoutMs: 10, + }); + + expect(goto).toHaveBeenCalledWith("https://example.com", { timeout: 1000 }); + expect(result.url).toBe("https://example.com"); + }); +}); diff --git a/src/browser/server-context.remote-tab-ops.test.ts b/src/browser/server-context.remote-tab-ops.test.ts index 05b6a5153..70d4ea844 100644 --- a/src/browser/server-context.remote-tab-ops.test.ts +++ b/src/browser/server-context.remote-tab-ops.test.ts @@ -1,8 +1,9 @@ import { afterEach, describe, expect, it, vi } from "vitest"; +import type { BrowserServerState } from "./server-context.js"; import { withFetchPreconnect } from "../test-utils/fetch-mock.js"; import * as cdpModule from "./cdp.js"; +import { InvalidBrowserNavigationUrlError } from "./navigation-guard.js"; import * as pwAiModule from "./pw-ai-module.js"; -import type { BrowserServerState } from "./server-context.js"; import "./server-context.chrome-test-harness.js"; import { createBrowserRouteContext } from "./server-context.js"; @@ -94,7 +95,6 @@ describe("browser server-context remote profile tab operations", () => { cdpUrl: "https://browserless.example/chrome?token=abc", url: "http://127.0.0.1:3000", ssrfPolicy: { allowPrivateNetwork: true }, - navigationChecked: true, }); await remote.closeTab("T1"); @@ -256,7 +256,22 @@ describe("browser server-context tab selection state", () => { cdpUrl: "http://127.0.0.1:18800", url: "http://127.0.0.1:8080", ssrfPolicy: { allowPrivateNetwork: true }, - navigationChecked: true, }); }); + + it("blocks unsupported non-network URLs before any HTTP tab-open fallback", async () => { + const fetchMock = vi.fn(async () => { + throw new Error("unexpected fetch"); + }); + + global.fetch = withFetchPreconnect(fetchMock); + const state = makeState("openclaw"); + const ctx = createBrowserRouteContext({ getState: () => state }); + const openclaw = ctx.forProfile("openclaw"); + + await expect(openclaw.openTab("file:///etc/passwd")).rejects.toBeInstanceOf( + InvalidBrowserNavigationUrlError, + ); + expect(fetchMock).not.toHaveBeenCalled(); + }); }); diff --git a/src/browser/server-context.ts b/src/browser/server-context.ts index 7c7e27f34..93c90b1ef 100644 --- a/src/browser/server-context.ts +++ b/src/browser/server-context.ts @@ -1,4 +1,15 @@ import fs from "node:fs"; +import type { ResolvedBrowserProfile } from "./config.js"; +import type { PwAiModule } from "./pw-ai-module.js"; +import type { + BrowserServerState, + BrowserRouteContext, + BrowserTab, + ContextOptions, + ProfileContext, + ProfileRuntimeState, + ProfileStatus, +} from "./server-context.types.js"; import { SsrFBlockedError } from "../infra/net/ssrf.js"; import { fetchJson, fetchOk } from "./cdp.helpers.js"; import { appendCdpPath, createTargetViaCdp, normalizeCdpWsUrl } from "./cdp.js"; @@ -9,7 +20,6 @@ import { resolveOpenClawUserDataDir, stopOpenClawChrome, } from "./chrome.js"; -import type { ResolvedBrowserProfile } from "./config.js"; import { resolveProfile } from "./config.js"; import { ensureChromeExtensionRelayServer, @@ -20,21 +30,11 @@ import { InvalidBrowserNavigationUrlError, withBrowserNavigationPolicy, } from "./navigation-guard.js"; -import type { PwAiModule } from "./pw-ai-module.js"; import { getPwAiModule } from "./pw-ai-module.js"; import { refreshResolvedBrowserConfigFromDisk, resolveBrowserProfileWithHotReload, } from "./resolved-config-refresh.js"; -import type { - BrowserServerState, - BrowserRouteContext, - BrowserTab, - ContextOptions, - ProfileContext, - ProfileRuntimeState, - ProfileStatus, -} from "./server-context.types.js"; import { resolveTargetIdFromTabs } from "./target-id.js"; import { movePathToTrash } from "./trash.js"; @@ -137,7 +137,6 @@ function createProfileContext( const openTab = async (url: string): Promise => { const ssrfPolicyOpts = withBrowserNavigationPolicy(state().resolved.ssrfPolicy); - await assertBrowserNavigationAllowed({ url, ...ssrfPolicyOpts }); // For remote profiles, use Playwright's persistent connection to create tabs // This ensures the tab persists beyond a single request @@ -149,7 +148,6 @@ function createProfileContext( cdpUrl: profile.cdpUrl, url, ...ssrfPolicyOpts, - navigationChecked: true, }); const profileState = getProfileState(); profileState.lastTargetId = page.targetId; @@ -166,7 +164,6 @@ function createProfileContext( cdpUrl: profile.cdpUrl, url, ...ssrfPolicyOpts, - navigationChecked: true, }) .then((r) => r.targetId) .catch(() => null); @@ -196,6 +193,7 @@ function createProfileContext( }; const endpointUrl = new URL(appendCdpPath(profile.cdpUrl, "/json/new")); + await assertBrowserNavigationAllowed({ url, ...ssrfPolicyOpts }); const endpoint = endpointUrl.search ? (() => { endpointUrl.searchParams.set("url", url); From 5cc631cc9cd14b123918c673f1580a35b78d16ff Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 11:48:02 +0100 Subject: [PATCH 0145/1007] fix(agents): harden model-skip and tool-policy imports --- src/agents/models.profiles.live.test.ts | 8 +++++++- src/agents/tool-policy.ts | 15 ++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/agents/models.profiles.live.test.ts b/src/agents/models.profiles.live.test.ts index 45024be49..1fb7232dc 100644 --- a/src/agents/models.profiles.live.test.ts +++ b/src/agents/models.profiles.live.test.ts @@ -50,6 +50,9 @@ function isGoogleModelNotFoundError(err: unknown): boolean { if (!/not found/i.test(msg)) { return false; } + if (/\b404\b/.test(msg)) { + return true; + } if (/models\/.+ is not found for api version/i.test(msg)) { return true; } @@ -445,7 +448,10 @@ describeLive("live models (profile keys)", () => { logProgress(`${progressLabel}: skip (anthropic billing)`); break; } - if (model.provider === "google" && isGoogleModelNotFoundError(err)) { + if ( + (model.provider === "google" || model.provider === "google-gemini-cli") && + isGoogleModelNotFoundError(err) + ) { skipped.push({ model: id, reason: message }); logProgress(`${progressLabel}: skip (google model not found)`); break; diff --git a/src/agents/tool-policy.ts b/src/agents/tool-policy.ts index 393a11006..bd029643a 100644 --- a/src/agents/tool-policy.ts +++ b/src/agents/tool-policy.ts @@ -1,4 +1,17 @@ -import { type AnyAgentTool, wrapOwnerOnlyToolExecution } from "./tools/common.js"; +import type { AnyAgentTool } from "./tools/common.js"; + +// Keep tool-policy browser-safe: do not import tools/common at runtime. +function wrapOwnerOnlyToolExecution(tool: AnyAgentTool, senderIsOwner: boolean): AnyAgentTool { + if (tool.ownerOnly !== true || senderIsOwner || !tool.execute) { + return tool; + } + return { + ...tool, + execute: async () => { + throw new Error("Tool restricted to owner senders."); + }, + }; +} export type ToolProfileId = "minimal" | "coding" | "messaging" | "full"; From 6007941f04df1edcca679dd6c95949744fdbd4df Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 11:49:13 +0100 Subject: [PATCH 0146/1007] fix(security): harden and refactor system.run command resolution --- .../node-invoke-system-run-approval.test.ts | 85 ++++ .../node-invoke-system-run-approval.ts | 78 ++-- src/infra/system-run-command.test.ts | 44 ++ src/infra/system-run-command.ts | 74 ++- src/node-host/invoke-system-run.ts | 422 ++++++++++++++++++ src/node-host/invoke.ts | 344 +------------- 6 files changed, 679 insertions(+), 368 deletions(-) create mode 100644 src/gateway/node-invoke-system-run-approval.test.ts create mode 100644 src/node-host/invoke-system-run.ts diff --git a/src/gateway/node-invoke-system-run-approval.test.ts b/src/gateway/node-invoke-system-run-approval.test.ts new file mode 100644 index 000000000..e0bc8fdd4 --- /dev/null +++ b/src/gateway/node-invoke-system-run-approval.test.ts @@ -0,0 +1,85 @@ +import { describe, expect, test } from "vitest"; +import type { ExecApprovalRecord } from "./exec-approval-manager.js"; +import { sanitizeSystemRunParamsForForwarding } from "./node-invoke-system-run-approval.js"; + +describe("sanitizeSystemRunParamsForForwarding", () => { + const now = Date.now(); + const client = { + connId: "conn-1", + connect: { + scopes: ["operator.write", "operator.approvals"], + device: { id: "dev-1" }, + client: { id: "cli-1" }, + }, + }; + + function makeRecord(command: string): ExecApprovalRecord { + return { + id: "approval-1", + request: { + host: "node", + command, + cwd: null, + agentId: null, + sessionKey: null, + }, + createdAtMs: now - 1_000, + expiresAtMs: now + 60_000, + requestedByConnId: "conn-1", + requestedByDeviceId: "dev-1", + requestedByClientId: "cli-1", + resolvedAtMs: now - 500, + decision: "allow-once", + resolvedBy: "operator", + }; + } + + function manager(record: ReturnType) { + return { + getSnapshot: () => record, + }; + } + + test("rejects cmd.exe /c trailing-arg mismatch against rawCommand", () => { + const result = sanitizeSystemRunParamsForForwarding({ + rawParams: { + command: ["cmd.exe", "/d", "/s", "/c", "echo", "SAFE&&whoami"], + rawCommand: "echo", + runId: "approval-1", + approved: true, + approvalDecision: "allow-once", + }, + client, + execApprovalManager: manager(makeRecord("echo")), + nowMs: now, + }); + expect(result.ok).toBe(false); + if (result.ok) { + throw new Error("unreachable"); + } + expect(result.message).toContain("rawCommand does not match command"); + expect(result.details?.code).toBe("RAW_COMMAND_MISMATCH"); + }); + + test("accepts matching cmd.exe /c command text for approval binding", () => { + const result = sanitizeSystemRunParamsForForwarding({ + rawParams: { + command: ["cmd.exe", "/d", "/s", "/c", "echo", "SAFE&&whoami"], + rawCommand: "echo SAFE&&whoami", + runId: "approval-1", + approved: true, + approvalDecision: "allow-once", + }, + client, + execApprovalManager: manager(makeRecord("echo SAFE&&whoami")), + nowMs: now, + }); + expect(result.ok).toBe(true); + if (!result.ok) { + throw new Error("unreachable"); + } + const params = result.params as Record; + expect(params.approved).toBe(true); + expect(params.approvalDecision).toBe("allow-once"); + }); +}); diff --git a/src/gateway/node-invoke-system-run-approval.ts b/src/gateway/node-invoke-system-run-approval.ts index 66865953d..5684f4221 100644 --- a/src/gateway/node-invoke-system-run-approval.ts +++ b/src/gateway/node-invoke-system-run-approval.ts @@ -1,9 +1,5 @@ -import { - formatExecCommand, - validateSystemRunCommandConsistency, -} from "../infra/system-run-command.js"; -import type { ExecApprovalManager, ExecApprovalRecord } from "./exec-approval-manager.js"; -import type { GatewayClient } from "./server-methods/types.js"; +import { resolveSystemRunCommand } from "../infra/system-run-command.js"; +import type { ExecApprovalRecord } from "./exec-approval-manager.js"; type SystemRunParamsLike = { command?: unknown; @@ -19,6 +15,18 @@ type SystemRunParamsLike = { runId?: unknown; }; +type ApprovalLookup = { + getSnapshot: (recordId: string) => ExecApprovalRecord | null; +}; + +type ApprovalClient = { + connId?: string | null; + connect?: { + scopes?: unknown; + device?: { id?: string | null } | null; + } | null; +}; + function asRecord(value: unknown): Record | null { if (!value || typeof value !== "object" || Array.isArray(value)) { return null; @@ -39,31 +47,20 @@ function normalizeApprovalDecision(value: unknown): "allow-once" | "allow-always return s === "allow-once" || s === "allow-always" ? s : null; } -function clientHasApprovals(client: GatewayClient | null): boolean { +function clientHasApprovals(client: ApprovalClient | null): boolean { const scopes = Array.isArray(client?.connect?.scopes) ? client?.connect?.scopes : []; return scopes.includes("operator.admin") || scopes.includes("operator.approvals"); } -function getCmdText(params: SystemRunParamsLike): string { - const raw = normalizeString(params.rawCommand); - if (raw) { - return raw; - } - if (Array.isArray(params.command)) { - const parts = params.command.map((v) => String(v)); - if (parts.length > 0) { - return formatExecCommand(parts); - } - } - return ""; -} - -function approvalMatchesRequest(params: SystemRunParamsLike, record: ExecApprovalRecord): boolean { +function approvalMatchesRequest( + cmdText: string, + params: SystemRunParamsLike, + record: ExecApprovalRecord, +): boolean { if (record.request.host !== "node") { return false; } - const cmdText = getCmdText(params); if (!cmdText || record.request.command !== cmdText) { return false; } @@ -118,8 +115,8 @@ function pickSystemRunParams(raw: Record): Record String(v)) : []; - const raw = normalizeString(p.rawCommand); - if (raw) { - if (!Array.isArray(p.command) || argv.length === 0) { - return { - ok: false, - message: "rawCommand requires params.command", - details: { code: "MISSING_COMMAND" }, - }; - } - const validation = validateSystemRunCommandConsistency({ argv, rawCommand: raw }); - if (!validation.ok) { - return { - ok: false, - message: validation.message, - details: validation.details ?? { code: "RAW_COMMAND_MISMATCH" }, - }; - } + const cmdTextResolution = resolveSystemRunCommand({ + command: p.command, + rawCommand: p.rawCommand, + }); + if (!cmdTextResolution.ok) { + return { + ok: false, + message: cmdTextResolution.message, + details: cmdTextResolution.details, + }; } + const cmdText = cmdTextResolution.cmdText; const approved = p.approved === true; const requestedDecision = normalizeApprovalDecision(p.approvalDecision); @@ -221,7 +211,7 @@ export function sanitizeSystemRunParamsForForwarding(opts: { }; } - if (!approvalMatchesRequest(p, snapshot)) { + if (!approvalMatchesRequest(cmdText, p, snapshot)) { return { ok: false, message: "approval id does not match request", diff --git a/src/infra/system-run-command.test.ts b/src/infra/system-run-command.test.ts index 28fa16cec..b375c0791 100644 --- a/src/infra/system-run-command.test.ts +++ b/src/infra/system-run-command.test.ts @@ -2,6 +2,7 @@ import { describe, expect, test } from "vitest"; import { extractShellCommandFromArgv, formatExecCommand, + resolveSystemRunCommand, validateSystemRunCommandConsistency, } from "./system-run-command.js"; @@ -18,6 +19,12 @@ describe("system run command helpers", () => { expect(extractShellCommandFromArgv(["cmd.exe", "/d", "/s", "/c", "echo hi"])).toBe("echo hi"); }); + test("extractShellCommandFromArgv includes trailing cmd.exe args after /c", () => { + expect(extractShellCommandFromArgv(["cmd.exe", "/d", "/s", "/c", "echo", "SAFE&&whoami"])).toBe( + "echo SAFE&&whoami", + ); + }); + test("validateSystemRunCommandConsistency accepts rawCommand matching direct argv", () => { const res = validateSystemRunCommandConsistency({ argv: ["echo", "hi"], @@ -51,4 +58,41 @@ describe("system run command helpers", () => { }); expect(res.ok).toBe(true); }); + + test("validateSystemRunCommandConsistency rejects cmd.exe /c trailing-arg smuggling", () => { + const res = validateSystemRunCommandConsistency({ + argv: ["cmd.exe", "/d", "/s", "/c", "echo", "SAFE&&whoami"], + rawCommand: "echo", + }); + expect(res.ok).toBe(false); + if (res.ok) { + throw new Error("unreachable"); + } + expect(res.message).toContain("rawCommand does not match command"); + expect(res.details?.code).toBe("RAW_COMMAND_MISMATCH"); + }); + + test("resolveSystemRunCommand requires command when rawCommand is present", () => { + const res = resolveSystemRunCommand({ rawCommand: "echo hi" }); + expect(res.ok).toBe(false); + if (res.ok) { + throw new Error("unreachable"); + } + expect(res.message).toContain("rawCommand requires params.command"); + expect(res.details?.code).toBe("MISSING_COMMAND"); + }); + + test("resolveSystemRunCommand returns normalized argv and cmdText", () => { + const res = resolveSystemRunCommand({ + command: ["cmd.exe", "/d", "/s", "/c", "echo", "SAFE&&whoami"], + rawCommand: "echo SAFE&&whoami", + }); + expect(res.ok).toBe(true); + if (!res.ok) { + throw new Error("unreachable"); + } + expect(res.argv).toEqual(["cmd.exe", "/d", "/s", "/c", "echo", "SAFE&&whoami"]); + expect(res.shellCommand).toBe("echo SAFE&&whoami"); + expect(res.cmdText).toBe("echo SAFE&&whoami"); + }); }); diff --git a/src/infra/system-run-command.ts b/src/infra/system-run-command.ts index 5ba6e669c..4d61c2e24 100644 --- a/src/infra/system-run-command.ts +++ b/src/infra/system-run-command.ts @@ -12,6 +12,20 @@ export type SystemRunCommandValidation = details?: Record; }; +export type ResolvedSystemRunCommand = + | { + ok: true; + argv: string[]; + rawCommand: string | null; + shellCommand: string | null; + cmdText: string; + } + | { + ok: false; + message: string; + details?: Record; + }; + function basenameLower(token: string): string { const win = path.win32.basename(token); const posix = path.posix.basename(token); @@ -65,8 +79,12 @@ export function extractShellCommandFromArgv(argv: string[]): string | null { if (idx === -1) { return null; } - const cmd = argv[idx + 1]; - return typeof cmd === "string" ? cmd : null; + const tail = argv.slice(idx + 1).map((item) => String(item)); + if (tail.length === 0) { + return null; + } + const cmd = tail.join(" ").trim(); + return cmd.length > 0 ? cmd : null; } return null; @@ -81,7 +99,7 @@ export function validateSystemRunCommandConsistency(params: { ? params.rawCommand.trim() : null; const shellCommand = extractShellCommandFromArgv(params.argv); - const inferred = shellCommand ? shellCommand.trim() : formatExecCommand(params.argv); + const inferred = shellCommand !== null ? shellCommand.trim() : formatExecCommand(params.argv); if (raw && raw !== inferred) { return { @@ -100,7 +118,55 @@ export function validateSystemRunCommandConsistency(params: { // Only treat this as a shell command when argv is a recognized shell wrapper. // For direct argv execution, rawCommand is purely display/approval text and // must match the formatted argv. - shellCommand: shellCommand ? (raw ?? shellCommand) : null, + shellCommand: shellCommand !== null ? (raw ?? shellCommand) : null, cmdText: raw ?? shellCommand ?? inferred, }; } + +export function resolveSystemRunCommand(params: { + command?: unknown; + rawCommand?: unknown; +}): ResolvedSystemRunCommand { + const raw = + typeof params.rawCommand === "string" && params.rawCommand.trim().length > 0 + ? params.rawCommand.trim() + : null; + const command = Array.isArray(params.command) ? params.command : []; + if (command.length === 0) { + if (raw) { + return { + ok: false, + message: "rawCommand requires params.command", + details: { code: "MISSING_COMMAND" }, + }; + } + return { + ok: true, + argv: [], + rawCommand: null, + shellCommand: null, + cmdText: "", + }; + } + + const argv = command.map((v) => String(v)); + const validation = validateSystemRunCommandConsistency({ + argv, + rawCommand: raw, + }); + if (!validation.ok) { + return { + ok: false, + message: validation.message, + details: validation.details ?? { code: "RAW_COMMAND_MISMATCH" }, + }; + } + + return { + ok: true, + argv, + rawCommand: raw, + shellCommand: validation.shellCommand, + cmdText: validation.cmdText, + }; +} diff --git a/src/node-host/invoke-system-run.ts b/src/node-host/invoke-system-run.ts new file mode 100644 index 000000000..fc1a2fee3 --- /dev/null +++ b/src/node-host/invoke-system-run.ts @@ -0,0 +1,422 @@ +import crypto from "node:crypto"; +import { resolveAgentConfig } from "../agents/agent-scope.js"; +import { loadConfig } from "../config/config.js"; +import type { GatewayClient } from "../gateway/client.js"; +import { + addAllowlistEntry, + analyzeArgvCommand, + evaluateExecAllowlist, + evaluateShellAllowlist, + recordAllowlistUse, + requiresExecApproval, + resolveExecApprovals, + resolveSafeBins, + type ExecAllowlistEntry, + type ExecAsk, + type ExecCommandSegment, + type ExecSecurity, +} from "../infra/exec-approvals.js"; +import type { ExecHostRequest, ExecHostResponse, ExecHostRunResult } from "../infra/exec-host.js"; +import { getTrustedSafeBinDirs } from "../infra/exec-safe-bin-trust.js"; +import { resolveSystemRunCommand } from "../infra/system-run-command.js"; + +type SystemRunParams = { + command: string[]; + rawCommand?: string | null; + cwd?: string | null; + env?: Record; + timeoutMs?: number | null; + needsScreenRecording?: boolean | null; + agentId?: string | null; + sessionKey?: string | null; + approved?: boolean | null; + approvalDecision?: string | null; + runId?: string | null; +}; + +type RunResult = { + exitCode?: number; + timedOut: boolean; + success: boolean; + stdout: string; + stderr: string; + error?: string | null; + truncated: boolean; +}; + +type ExecEventPayload = { + sessionKey: string; + runId: string; + host: string; + command?: string; + exitCode?: number; + timedOut?: boolean; + success?: boolean; + output?: string; + reason?: string; +}; + +export type SkillBinsProvider = { + current(force?: boolean): Promise>; +}; + +type SystemRunInvokeResult = { + ok: boolean; + payloadJSON?: string | null; + error?: { code?: string; message?: string } | null; +}; + +export async function handleSystemRunInvoke(opts: { + client: GatewayClient; + params: SystemRunParams; + skillBins: SkillBinsProvider; + execHostEnforced: boolean; + execHostFallbackAllowed: boolean; + resolveExecSecurity: (value?: string) => ExecSecurity; + resolveExecAsk: (value?: string) => ExecAsk; + isCmdExeInvocation: (argv: string[]) => boolean; + sanitizeEnv: (overrides?: Record | null) => Record | undefined; + runCommand: ( + argv: string[], + cwd: string | undefined, + env: Record | undefined, + timeoutMs: number | undefined, + ) => Promise; + runViaMacAppExecHost: (params: { + approvals: ReturnType; + request: ExecHostRequest; + }) => Promise; + sendNodeEvent: (client: GatewayClient, event: string, payload: unknown) => Promise; + buildExecEventPayload: (payload: ExecEventPayload) => ExecEventPayload; + sendInvokeResult: (result: SystemRunInvokeResult) => Promise; + sendExecFinishedEvent: (params: { + sessionKey: string; + runId: string; + cmdText: string; + result: { + stdout?: string; + stderr?: string; + error?: string | null; + exitCode?: number | null; + timedOut?: boolean; + success?: boolean; + }; + }) => Promise; +}): Promise { + const command = resolveSystemRunCommand({ + command: opts.params.command, + rawCommand: opts.params.rawCommand, + }); + if (!command.ok) { + await opts.sendInvokeResult({ + ok: false, + error: { code: "INVALID_REQUEST", message: command.message }, + }); + return; + } + if (command.argv.length === 0) { + await opts.sendInvokeResult({ + ok: false, + error: { code: "INVALID_REQUEST", message: "command required" }, + }); + return; + } + + const argv = command.argv; + const rawCommand = command.rawCommand ?? ""; + const shellCommand = command.shellCommand; + const cmdText = command.cmdText; + const agentId = opts.params.agentId?.trim() || undefined; + const cfg = loadConfig(); + const agentExec = agentId ? resolveAgentConfig(cfg, agentId)?.tools?.exec : undefined; + const configuredSecurity = opts.resolveExecSecurity( + agentExec?.security ?? cfg.tools?.exec?.security, + ); + const configuredAsk = opts.resolveExecAsk(agentExec?.ask ?? cfg.tools?.exec?.ask); + const approvals = resolveExecApprovals(agentId, { + security: configuredSecurity, + ask: configuredAsk, + }); + const security = approvals.agent.security; + const ask = approvals.agent.ask; + const autoAllowSkills = approvals.agent.autoAllowSkills; + const sessionKey = opts.params.sessionKey?.trim() || "node"; + const runId = opts.params.runId?.trim() || crypto.randomUUID(); + const env = opts.sanitizeEnv(opts.params.env ?? undefined); + const safeBins = resolveSafeBins(agentExec?.safeBins ?? cfg.tools?.exec?.safeBins); + const trustedSafeBinDirs = getTrustedSafeBinDirs(); + const bins = autoAllowSkills ? await opts.skillBins.current() : new Set(); + let analysisOk = false; + let allowlistMatches: ExecAllowlistEntry[] = []; + let allowlistSatisfied = false; + let segments: ExecCommandSegment[] = []; + if (shellCommand) { + const allowlistEval = evaluateShellAllowlist({ + command: shellCommand, + allowlist: approvals.allowlist, + safeBins, + cwd: opts.params.cwd ?? undefined, + env, + trustedSafeBinDirs, + skillBins: bins, + autoAllowSkills, + platform: process.platform, + }); + analysisOk = allowlistEval.analysisOk; + allowlistMatches = allowlistEval.allowlistMatches; + allowlistSatisfied = + security === "allowlist" && analysisOk ? allowlistEval.allowlistSatisfied : false; + segments = allowlistEval.segments; + } else { + const analysis = analyzeArgvCommand({ argv, cwd: opts.params.cwd ?? undefined, env }); + const allowlistEval = evaluateExecAllowlist({ + analysis, + allowlist: approvals.allowlist, + safeBins, + cwd: opts.params.cwd ?? undefined, + trustedSafeBinDirs, + skillBins: bins, + autoAllowSkills, + }); + analysisOk = analysis.ok; + allowlistMatches = allowlistEval.allowlistMatches; + allowlistSatisfied = + security === "allowlist" && analysisOk ? allowlistEval.allowlistSatisfied : false; + segments = analysis.segments; + } + const isWindows = process.platform === "win32"; + const cmdInvocation = shellCommand + ? opts.isCmdExeInvocation(segments[0]?.argv ?? []) + : opts.isCmdExeInvocation(argv); + if (security === "allowlist" && isWindows && cmdInvocation) { + analysisOk = false; + allowlistSatisfied = false; + } + + const useMacAppExec = process.platform === "darwin"; + if (useMacAppExec) { + const approvalDecision = + opts.params.approvalDecision === "allow-once" || + opts.params.approvalDecision === "allow-always" + ? opts.params.approvalDecision + : null; + const execRequest: ExecHostRequest = { + command: argv, + rawCommand: rawCommand || shellCommand || null, + cwd: opts.params.cwd ?? null, + env: opts.params.env ?? null, + timeoutMs: opts.params.timeoutMs ?? null, + needsScreenRecording: opts.params.needsScreenRecording ?? null, + agentId: agentId ?? null, + sessionKey: sessionKey ?? null, + approvalDecision, + }; + const response = await opts.runViaMacAppExecHost({ approvals, request: execRequest }); + if (!response) { + if (opts.execHostEnforced || !opts.execHostFallbackAllowed) { + await opts.sendNodeEvent( + opts.client, + "exec.denied", + opts.buildExecEventPayload({ + sessionKey, + runId, + host: "node", + command: cmdText, + reason: "companion-unavailable", + }), + ); + await opts.sendInvokeResult({ + ok: false, + error: { + code: "UNAVAILABLE", + message: "COMPANION_APP_UNAVAILABLE: macOS app exec host unreachable", + }, + }); + return; + } + } else if (!response.ok) { + const reason = response.error.reason ?? "approval-required"; + await opts.sendNodeEvent( + opts.client, + "exec.denied", + opts.buildExecEventPayload({ + sessionKey, + runId, + host: "node", + command: cmdText, + reason, + }), + ); + await opts.sendInvokeResult({ + ok: false, + error: { code: "UNAVAILABLE", message: response.error.message }, + }); + return; + } else { + const result: ExecHostRunResult = response.payload; + await opts.sendExecFinishedEvent({ sessionKey, runId, cmdText, result }); + await opts.sendInvokeResult({ + ok: true, + payloadJSON: JSON.stringify(result), + }); + return; + } + } + + if (security === "deny") { + await opts.sendNodeEvent( + opts.client, + "exec.denied", + opts.buildExecEventPayload({ + sessionKey, + runId, + host: "node", + command: cmdText, + reason: "security=deny", + }), + ); + await opts.sendInvokeResult({ + ok: false, + error: { code: "UNAVAILABLE", message: "SYSTEM_RUN_DISABLED: security=deny" }, + }); + return; + } + + const requiresAsk = requiresExecApproval({ + ask, + security, + analysisOk, + allowlistSatisfied, + }); + + const approvalDecision = + opts.params.approvalDecision === "allow-once" || opts.params.approvalDecision === "allow-always" + ? opts.params.approvalDecision + : null; + const approvedByAsk = approvalDecision !== null || opts.params.approved === true; + if (requiresAsk && !approvedByAsk) { + await opts.sendNodeEvent( + opts.client, + "exec.denied", + opts.buildExecEventPayload({ + sessionKey, + runId, + host: "node", + command: cmdText, + reason: "approval-required", + }), + ); + await opts.sendInvokeResult({ + ok: false, + error: { code: "UNAVAILABLE", message: "SYSTEM_RUN_DENIED: approval required" }, + }); + return; + } + if (approvalDecision === "allow-always" && security === "allowlist") { + if (analysisOk) { + for (const segment of segments) { + const pattern = segment.resolution?.resolvedPath ?? ""; + if (pattern) { + addAllowlistEntry(approvals.file, agentId, pattern); + } + } + } + } + + if (security === "allowlist" && (!analysisOk || !allowlistSatisfied) && !approvedByAsk) { + await opts.sendNodeEvent( + opts.client, + "exec.denied", + opts.buildExecEventPayload({ + sessionKey, + runId, + host: "node", + command: cmdText, + reason: "allowlist-miss", + }), + ); + await opts.sendInvokeResult({ + ok: false, + error: { code: "UNAVAILABLE", message: "SYSTEM_RUN_DENIED: allowlist miss" }, + }); + return; + } + + if (allowlistMatches.length > 0) { + const seen = new Set(); + for (const match of allowlistMatches) { + if (!match?.pattern || seen.has(match.pattern)) { + continue; + } + seen.add(match.pattern); + recordAllowlistUse( + approvals.file, + agentId, + match, + cmdText, + segments[0]?.resolution?.resolvedPath, + ); + } + } + + if (opts.params.needsScreenRecording === true) { + await opts.sendNodeEvent( + opts.client, + "exec.denied", + opts.buildExecEventPayload({ + sessionKey, + runId, + host: "node", + command: cmdText, + reason: "permission:screenRecording", + }), + ); + await opts.sendInvokeResult({ + ok: false, + error: { code: "UNAVAILABLE", message: "PERMISSION_MISSING: screenRecording" }, + }); + return; + } + + let execArgv = argv; + if ( + security === "allowlist" && + isWindows && + !approvedByAsk && + shellCommand && + analysisOk && + allowlistSatisfied && + segments.length === 1 && + segments[0]?.argv.length > 0 + ) { + execArgv = segments[0].argv; + } + + const result = await opts.runCommand( + execArgv, + opts.params.cwd?.trim() || undefined, + env, + opts.params.timeoutMs ?? undefined, + ); + if (result.truncated) { + const suffix = "... (truncated)"; + if (result.stderr.trim().length > 0) { + result.stderr = `${result.stderr}\n${suffix}`; + } else { + result.stdout = `${result.stdout}\n${suffix}`; + } + } + await opts.sendExecFinishedEvent({ sessionKey, runId, cmdText, result }); + + await opts.sendInvokeResult({ + ok: true, + payloadJSON: JSON.stringify({ + exitCode: result.exitCode, + timedOut: result.timedOut, + success: result.success, + stdout: result.stdout, + stderr: result.stderr, + error: result.error ?? null, + }), + }); +} diff --git a/src/node-host/invoke.ts b/src/node-host/invoke.ts index d2c95b7e0..5b9ae8370 100644 --- a/src/node-host/invoke.ts +++ b/src/node-host/invoke.ts @@ -1,40 +1,26 @@ import { spawn } from "node:child_process"; -import crypto from "node:crypto"; import fs from "node:fs"; import path from "node:path"; -import { resolveAgentConfig } from "../agents/agent-scope.js"; -import { loadConfig } from "../config/config.js"; import { GatewayClient } from "../gateway/client.js"; import { - addAllowlistEntry, - analyzeArgvCommand, - evaluateExecAllowlist, - evaluateShellAllowlist, - requiresExecApproval, - normalizeExecApprovals, - mergeExecApprovalsSocketDefaults, - recordAllowlistUse, - resolveExecApprovals, - resolveSafeBins, ensureExecApprovals, + mergeExecApprovalsSocketDefaults, + normalizeExecApprovals, readExecApprovalsSnapshot, saveExecApprovals, type ExecAsk, type ExecApprovalsFile, - type ExecAllowlistEntry, - type ExecCommandSegment, + type ExecApprovalsResolved, type ExecSecurity, } from "../infra/exec-approvals.js"; import { requestExecHostViaSocket, type ExecHostRequest, type ExecHostResponse, - type ExecHostRunResult, } from "../infra/exec-host.js"; -import { getTrustedSafeBinDirs } from "../infra/exec-safe-bin-trust.js"; import { sanitizeHostExecEnv } from "../infra/host-env-security.js"; -import { validateSystemRunCommandConsistency } from "../infra/system-run-command.js"; import { runBrowserProxyCommand } from "./invoke-browser.js"; +import { handleSystemRunInvoke } from "./invoke-system-run.js"; const OUTPUT_CAP = 200_000; const OUTPUT_EVENT_TAIL = 20_000; @@ -336,7 +322,7 @@ async function sendExecFinishedEvent(params: { } async function runViaMacAppExecHost(params: { - approvals: ReturnType; + approvals: ExecApprovalsResolved; request: ExecHostRequest; }): Promise { const { approvals, request } = params; @@ -483,308 +469,26 @@ export async function handleInvoke( return; } - const argv = params.command.map((item) => String(item)); - const rawCommand = typeof params.rawCommand === "string" ? params.rawCommand.trim() : ""; - const consistency = validateSystemRunCommandConsistency({ - argv, - rawCommand: rawCommand || null, - }); - if (!consistency.ok) { - await sendErrorResult(client, frame, "INVALID_REQUEST", consistency.message); - return; - } - - const shellCommand = consistency.shellCommand; - const cmdText = consistency.cmdText; - const agentId = params.agentId?.trim() || undefined; - const cfg = loadConfig(); - const agentExec = agentId ? resolveAgentConfig(cfg, agentId)?.tools?.exec : undefined; - const configuredSecurity = resolveExecSecurity(agentExec?.security ?? cfg.tools?.exec?.security); - const configuredAsk = resolveExecAsk(agentExec?.ask ?? cfg.tools?.exec?.ask); - const approvals = resolveExecApprovals(agentId, { - security: configuredSecurity, - ask: configuredAsk, - }); - const security = approvals.agent.security; - const ask = approvals.agent.ask; - const autoAllowSkills = approvals.agent.autoAllowSkills; - const sessionKey = params.sessionKey?.trim() || "node"; - const runId = params.runId?.trim() || crypto.randomUUID(); - const env = sanitizeEnv(params.env ?? undefined); - const safeBins = resolveSafeBins(agentExec?.safeBins ?? cfg.tools?.exec?.safeBins); - const trustedSafeBinDirs = getTrustedSafeBinDirs(); - const bins = autoAllowSkills ? await skillBins.current() : new Set(); - let analysisOk = false; - let allowlistMatches: ExecAllowlistEntry[] = []; - let allowlistSatisfied = false; - let segments: ExecCommandSegment[] = []; - if (shellCommand) { - const allowlistEval = evaluateShellAllowlist({ - command: shellCommand, - allowlist: approvals.allowlist, - safeBins, - cwd: params.cwd ?? undefined, - env, - trustedSafeBinDirs, - skillBins: bins, - autoAllowSkills, - platform: process.platform, - }); - analysisOk = allowlistEval.analysisOk; - allowlistMatches = allowlistEval.allowlistMatches; - allowlistSatisfied = - security === "allowlist" && analysisOk ? allowlistEval.allowlistSatisfied : false; - segments = allowlistEval.segments; - } else { - const analysis = analyzeArgvCommand({ argv, cwd: params.cwd ?? undefined, env }); - const allowlistEval = evaluateExecAllowlist({ - analysis, - allowlist: approvals.allowlist, - safeBins, - cwd: params.cwd ?? undefined, - trustedSafeBinDirs, - skillBins: bins, - autoAllowSkills, - }); - analysisOk = analysis.ok; - allowlistMatches = allowlistEval.allowlistMatches; - allowlistSatisfied = - security === "allowlist" && analysisOk ? allowlistEval.allowlistSatisfied : false; - segments = analysis.segments; - } - const isWindows = process.platform === "win32"; - const cmdInvocation = shellCommand - ? isCmdExeInvocation(segments[0]?.argv ?? []) - : isCmdExeInvocation(argv); - if (security === "allowlist" && isWindows && cmdInvocation) { - analysisOk = false; - allowlistSatisfied = false; - } - - const useMacAppExec = process.platform === "darwin"; - if (useMacAppExec) { - const approvalDecision = - params.approvalDecision === "allow-once" || params.approvalDecision === "allow-always" - ? params.approvalDecision - : null; - const execRequest: ExecHostRequest = { - command: argv, - rawCommand: rawCommand || shellCommand || null, - cwd: params.cwd ?? null, - env: params.env ?? null, - timeoutMs: params.timeoutMs ?? null, - needsScreenRecording: params.needsScreenRecording ?? null, - agentId: agentId ?? null, - sessionKey: sessionKey ?? null, - approvalDecision, - }; - const response = await runViaMacAppExecHost({ approvals, request: execRequest }); - if (!response) { - if (execHostEnforced || !execHostFallbackAllowed) { - await sendNodeEvent( - client, - "exec.denied", - buildExecEventPayload({ - sessionKey, - runId, - host: "node", - command: cmdText, - reason: "companion-unavailable", - }), - ); - await sendInvokeResult(client, frame, { - ok: false, - error: { - code: "UNAVAILABLE", - message: "COMPANION_APP_UNAVAILABLE: macOS app exec host unreachable", - }, - }); - return; - } - } else if (!response.ok) { - const reason = response.error.reason ?? "approval-required"; - await sendNodeEvent( - client, - "exec.denied", - buildExecEventPayload({ - sessionKey, - runId, - host: "node", - command: cmdText, - reason, - }), - ); - await sendInvokeResult(client, frame, { - ok: false, - error: { code: "UNAVAILABLE", message: response.error.message }, - }); - return; - } else { - const result: ExecHostRunResult = response.payload; + await handleSystemRunInvoke({ + client, + params, + skillBins, + execHostEnforced, + execHostFallbackAllowed, + resolveExecSecurity, + resolveExecAsk, + isCmdExeInvocation, + sanitizeEnv, + runCommand, + runViaMacAppExecHost, + sendNodeEvent, + buildExecEventPayload, + sendInvokeResult: async (result) => { + await sendInvokeResult(client, frame, result); + }, + sendExecFinishedEvent: async ({ sessionKey, runId, cmdText, result }) => { await sendExecFinishedEvent({ client, sessionKey, runId, cmdText, result }); - await sendInvokeResult(client, frame, { - ok: true, - payloadJSON: JSON.stringify(result), - }); - return; - } - } - - if (security === "deny") { - await sendNodeEvent( - client, - "exec.denied", - buildExecEventPayload({ - sessionKey, - runId, - host: "node", - command: cmdText, - reason: "security=deny", - }), - ); - await sendInvokeResult(client, frame, { - ok: false, - error: { code: "UNAVAILABLE", message: "SYSTEM_RUN_DISABLED: security=deny" }, - }); - return; - } - - const requiresAsk = requiresExecApproval({ - ask, - security, - analysisOk, - allowlistSatisfied, - }); - - const approvalDecision = - params.approvalDecision === "allow-once" || params.approvalDecision === "allow-always" - ? params.approvalDecision - : null; - const approvedByAsk = approvalDecision !== null || params.approved === true; - if (requiresAsk && !approvedByAsk) { - await sendNodeEvent( - client, - "exec.denied", - buildExecEventPayload({ - sessionKey, - runId, - host: "node", - command: cmdText, - reason: "approval-required", - }), - ); - await sendInvokeResult(client, frame, { - ok: false, - error: { code: "UNAVAILABLE", message: "SYSTEM_RUN_DENIED: approval required" }, - }); - return; - } - if (approvalDecision === "allow-always" && security === "allowlist") { - if (analysisOk) { - for (const segment of segments) { - const pattern = segment.resolution?.resolvedPath ?? ""; - if (pattern) { - addAllowlistEntry(approvals.file, agentId, pattern); - } - } - } - } - - if (security === "allowlist" && (!analysisOk || !allowlistSatisfied) && !approvedByAsk) { - await sendNodeEvent( - client, - "exec.denied", - buildExecEventPayload({ - sessionKey, - runId, - host: "node", - command: cmdText, - reason: "allowlist-miss", - }), - ); - await sendInvokeResult(client, frame, { - ok: false, - error: { code: "UNAVAILABLE", message: "SYSTEM_RUN_DENIED: allowlist miss" }, - }); - return; - } - - if (allowlistMatches.length > 0) { - const seen = new Set(); - for (const match of allowlistMatches) { - if (!match?.pattern || seen.has(match.pattern)) { - continue; - } - seen.add(match.pattern); - recordAllowlistUse( - approvals.file, - agentId, - match, - cmdText, - segments[0]?.resolution?.resolvedPath, - ); - } - } - - if (params.needsScreenRecording === true) { - await sendNodeEvent( - client, - "exec.denied", - buildExecEventPayload({ - sessionKey, - runId, - host: "node", - command: cmdText, - reason: "permission:screenRecording", - }), - ); - await sendInvokeResult(client, frame, { - ok: false, - error: { code: "UNAVAILABLE", message: "PERMISSION_MISSING: screenRecording" }, - }); - return; - } - - let execArgv = argv; - if ( - security === "allowlist" && - isWindows && - !approvedByAsk && - shellCommand && - analysisOk && - allowlistSatisfied && - segments.length === 1 && - segments[0]?.argv.length > 0 - ) { - execArgv = segments[0].argv; - } - - const result = await runCommand( - execArgv, - params.cwd?.trim() || undefined, - env, - params.timeoutMs ?? undefined, - ); - if (result.truncated) { - const suffix = "... (truncated)"; - if (result.stderr.trim().length > 0) { - result.stderr = `${result.stderr}\n${suffix}`; - } else { - result.stdout = `${result.stdout}\n${suffix}`; - } - } - await sendExecFinishedEvent({ client, sessionKey, runId, cmdText, result }); - - await sendInvokeResult(client, frame, { - ok: true, - payloadJSON: JSON.stringify({ - exitCode: result.exitCode, - timedOut: result.timedOut, - success: result.success, - stdout: result.stdout, - stderr: result.stderr, - error: result.error ?? null, - }), + }, }); } From 283029bdea23164ab7482b320cb420d1b90df806 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 11:52:21 +0100 Subject: [PATCH 0147/1007] refactor(security): unify webhook auth matching paths --- .../bluebubbles/src/config-schema.test.ts | 55 ++++++ extensions/bluebubbles/src/config-schema.ts | 54 +++--- extensions/bluebubbles/src/monitor.test.ts | 39 +++++ extensions/bluebubbles/src/monitor.ts | 162 ++++++++---------- extensions/googlechat/src/monitor.ts | 19 +- extensions/zalo/src/monitor.ts | 11 +- src/plugin-sdk/index.ts | 3 + src/plugin-sdk/webhook-targets.test.ts | 120 +++++++++++++ src/plugin-sdk/webhook-targets.ts | 45 +++++ 9 files changed, 376 insertions(+), 132 deletions(-) create mode 100644 extensions/bluebubbles/src/config-schema.test.ts create mode 100644 src/plugin-sdk/webhook-targets.test.ts diff --git a/extensions/bluebubbles/src/config-schema.test.ts b/extensions/bluebubbles/src/config-schema.test.ts new file mode 100644 index 000000000..be32c8f96 --- /dev/null +++ b/extensions/bluebubbles/src/config-schema.test.ts @@ -0,0 +1,55 @@ +import { describe, expect, it } from "vitest"; +import { BlueBubblesConfigSchema } from "./config-schema.js"; + +describe("BlueBubblesConfigSchema", () => { + it("accepts account config when serverUrl and password are both set", () => { + const parsed = BlueBubblesConfigSchema.safeParse({ + serverUrl: "http://localhost:1234", + password: "secret", + }); + expect(parsed.success).toBe(true); + }); + + it("requires password when top-level serverUrl is configured", () => { + const parsed = BlueBubblesConfigSchema.safeParse({ + serverUrl: "http://localhost:1234", + }); + expect(parsed.success).toBe(false); + if (parsed.success) { + return; + } + expect(parsed.error.issues[0]?.path).toEqual(["password"]); + expect(parsed.error.issues[0]?.message).toBe( + "password is required when serverUrl is configured", + ); + }); + + it("requires password when account serverUrl is configured", () => { + const parsed = BlueBubblesConfigSchema.safeParse({ + accounts: { + work: { + serverUrl: "http://localhost:1234", + }, + }, + }); + expect(parsed.success).toBe(false); + if (parsed.success) { + return; + } + expect(parsed.error.issues[0]?.path).toEqual(["accounts", "work", "password"]); + expect(parsed.error.issues[0]?.message).toBe( + "password is required when serverUrl is configured", + ); + }); + + it("allows password omission when serverUrl is not configured", () => { + const parsed = BlueBubblesConfigSchema.safeParse({ + accounts: { + work: { + name: "Work iMessage", + }, + }, + }); + expect(parsed.success).toBe(true); + }); +}); diff --git a/extensions/bluebubbles/src/config-schema.ts b/extensions/bluebubbles/src/config-schema.ts index 097071757..b575ab85f 100644 --- a/extensions/bluebubbles/src/config-schema.ts +++ b/extensions/bluebubbles/src/config-schema.ts @@ -24,27 +24,39 @@ const bluebubblesGroupConfigSchema = z.object({ tools: ToolPolicySchema, }); -const bluebubblesAccountSchema = z.object({ - name: z.string().optional(), - enabled: z.boolean().optional(), - markdown: MarkdownConfigSchema, - serverUrl: z.string().optional(), - password: z.string().optional(), - webhookPath: z.string().optional(), - dmPolicy: z.enum(["pairing", "allowlist", "open", "disabled"]).optional(), - allowFrom: z.array(allowFromEntry).optional(), - groupAllowFrom: z.array(allowFromEntry).optional(), - groupPolicy: z.enum(["open", "disabled", "allowlist"]).optional(), - historyLimit: z.number().int().min(0).optional(), - dmHistoryLimit: z.number().int().min(0).optional(), - textChunkLimit: z.number().int().positive().optional(), - chunkMode: z.enum(["length", "newline"]).optional(), - mediaMaxMb: z.number().int().positive().optional(), - mediaLocalRoots: z.array(z.string()).optional(), - sendReadReceipts: z.boolean().optional(), - blockStreaming: z.boolean().optional(), - groups: z.object({}).catchall(bluebubblesGroupConfigSchema).optional(), -}); +const bluebubblesAccountSchema = z + .object({ + name: z.string().optional(), + enabled: z.boolean().optional(), + markdown: MarkdownConfigSchema, + serverUrl: z.string().optional(), + password: z.string().optional(), + webhookPath: z.string().optional(), + dmPolicy: z.enum(["pairing", "allowlist", "open", "disabled"]).optional(), + allowFrom: z.array(allowFromEntry).optional(), + groupAllowFrom: z.array(allowFromEntry).optional(), + groupPolicy: z.enum(["open", "disabled", "allowlist"]).optional(), + historyLimit: z.number().int().min(0).optional(), + dmHistoryLimit: z.number().int().min(0).optional(), + textChunkLimit: z.number().int().positive().optional(), + chunkMode: z.enum(["length", "newline"]).optional(), + mediaMaxMb: z.number().int().positive().optional(), + mediaLocalRoots: z.array(z.string()).optional(), + sendReadReceipts: z.boolean().optional(), + blockStreaming: z.boolean().optional(), + groups: z.object({}).catchall(bluebubblesGroupConfigSchema).optional(), + }) + .superRefine((value, ctx) => { + const serverUrl = value.serverUrl?.trim() ?? ""; + const password = value.password?.trim() ?? ""; + if (serverUrl && !password) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + path: ["password"], + message: "password is required when serverUrl is configured", + }); + } + }); export const BlueBubblesConfigSchema = bluebubblesAccountSchema.extend({ accounts: z.object({}).catchall(bluebubblesAccountSchema).optional(), diff --git a/extensions/bluebubbles/src/monitor.test.ts b/extensions/bluebubbles/src/monitor.test.ts index 7b4d95d76..1ebd94558 100644 --- a/extensions/bluebubbles/src/monitor.test.ts +++ b/extensions/bluebubbles/src/monitor.test.ts @@ -452,6 +452,45 @@ describe("BlueBubbles webhook monitor", () => { expect(res.statusCode).toBe(400); }); + it("accepts URL-encoded payload wrappers", async () => { + const account = createMockAccount(); + const config: OpenClawConfig = {}; + const core = createMockRuntime(); + setBlueBubblesRuntime(core); + + unregister = registerBlueBubblesWebhookTarget({ + account, + config, + runtime: { log: vi.fn(), error: vi.fn() }, + core, + path: "/bluebubbles-webhook", + }); + + const payload = { + type: "new-message", + data: { + text: "hello", + handle: { address: "+15551234567" }, + isGroup: false, + isFromMe: false, + guid: "msg-1", + date: Date.now(), + }, + }; + const encodedBody = new URLSearchParams({ + payload: JSON.stringify(payload), + }).toString(); + + const req = createMockRequest("POST", "/bluebubbles-webhook", encodedBody); + const res = createMockResponse(); + + const handled = await handleBlueBubblesWebhookRequest(req, res); + + expect(handled).toBe(true); + expect(res.statusCode).toBe(200); + expect(res.body).toBe("ok"); + }); + it("returns 408 when request body times out (Slow-Loris protection)", async () => { vi.useFakeTimers(); try { diff --git a/extensions/bluebubbles/src/monitor.ts b/extensions/bluebubbles/src/monitor.ts index 367f095b8..fa148e5dd 100644 --- a/extensions/bluebubbles/src/monitor.ts +++ b/extensions/bluebubbles/src/monitor.ts @@ -2,8 +2,12 @@ import { timingSafeEqual } from "node:crypto"; import type { IncomingMessage, ServerResponse } from "node:http"; import type { OpenClawConfig } from "openclaw/plugin-sdk"; import { + isRequestBodyLimitError, + readRequestBodyWithLimit, registerWebhookTarget, rejectNonPostWebhookRequest, + requestBodyErrorToText, + resolveSingleWebhookTarget, resolveWebhookTargets, } from "openclaw/plugin-sdk"; import { @@ -231,12 +235,6 @@ function removeDebouncer(target: WebhookTarget): void { } export function registerBlueBubblesWebhookTarget(target: WebhookTarget): () => void { - const webhookPassword = target.account.config.password?.trim() ?? ""; - if (!webhookPassword) { - target.runtime.error?.( - `[${target.account.accountId}] BlueBubbles webhook auth requires channels.bluebubbles.password. Configure a password and include it in the webhook URL.`, - ); - } const registered = registerWebhookTarget(webhookTargets, target); return () => { registered.unregister(); @@ -245,64 +243,61 @@ export function registerBlueBubblesWebhookTarget(target: WebhookTarget): () => v }; } -async function readJsonBody(req: IncomingMessage, maxBytes: number, timeoutMs = 30_000) { - const chunks: Buffer[] = []; - let total = 0; - return await new Promise<{ ok: boolean; value?: unknown; error?: string }>((resolve) => { - let done = false; - const finish = (result: { ok: boolean; value?: unknown; error?: string }) => { - if (done) { - return; - } - done = true; - clearTimeout(timer); - resolve(result); +type ReadBlueBubblesWebhookBodyResult = + | { ok: true; value: unknown } + | { ok: false; statusCode: number; error: string }; + +function parseBlueBubblesWebhookPayload( + rawBody: string, +): { ok: true; value: unknown } | { ok: false; error: string } { + const trimmed = rawBody.trim(); + if (!trimmed) { + return { ok: false, error: "empty payload" }; + } + try { + return { ok: true, value: JSON.parse(trimmed) as unknown }; + } catch { + const params = new URLSearchParams(rawBody); + const payload = params.get("payload") ?? params.get("data") ?? params.get("message"); + if (!payload) { + return { ok: false, error: "invalid json" }; + } + try { + return { ok: true, value: JSON.parse(payload) as unknown }; + } catch (error) { + return { ok: false, error: error instanceof Error ? error.message : String(error) }; + } + } +} + +async function readBlueBubblesWebhookBody( + req: IncomingMessage, + maxBytes: number, +): Promise { + try { + const rawBody = await readRequestBodyWithLimit(req, { + maxBytes, + timeoutMs: 30_000, + }); + const parsed = parseBlueBubblesWebhookPayload(rawBody); + if (!parsed.ok) { + return { ok: false, statusCode: 400, error: parsed.error }; + } + return parsed; + } catch (error) { + if (isRequestBodyLimitError(error)) { + return { + ok: false, + statusCode: error.statusCode, + error: requestBodyErrorToText(error.code), + }; + } + return { + ok: false, + statusCode: 400, + error: error instanceof Error ? error.message : String(error), }; - - const timer = setTimeout(() => { - finish({ ok: false, error: "request body timeout" }); - req.destroy(); - }, timeoutMs); - - req.on("data", (chunk: Buffer) => { - total += chunk.length; - if (total > maxBytes) { - finish({ ok: false, error: "payload too large" }); - req.destroy(); - return; - } - chunks.push(chunk); - }); - req.on("end", () => { - try { - const raw = Buffer.concat(chunks).toString("utf8"); - if (!raw.trim()) { - finish({ ok: false, error: "empty payload" }); - return; - } - try { - finish({ ok: true, value: JSON.parse(raw) as unknown }); - return; - } catch { - const params = new URLSearchParams(raw); - const payload = params.get("payload") ?? params.get("data") ?? params.get("message"); - if (payload) { - finish({ ok: true, value: JSON.parse(payload) as unknown }); - return; - } - throw new Error("invalid json"); - } - } catch (err) { - finish({ ok: false, error: err instanceof Error ? err.message : String(err) }); - } - }); - req.on("error", (err) => { - finish({ ok: false, error: err instanceof Error ? err.message : String(err) }); - }); - req.on("close", () => { - finish({ ok: false, error: "connection closed" }); - }); - }); + } } function asRecord(value: unknown): Record | null { @@ -343,26 +338,6 @@ function safeEqualSecret(aRaw: string, bRaw: string): boolean { return timingSafeEqual(bufA, bufB); } -function resolveAuthenticatedWebhookTargets( - targets: WebhookTarget[], - presentedToken: string, -): WebhookTarget[] { - const matches: WebhookTarget[] = []; - for (const target of targets) { - const token = target.account.config.password?.trim() ?? ""; - if (!token) { - continue; - } - if (safeEqualSecret(presentedToken, token)) { - matches.push(target); - if (matches.length > 1) { - break; - } - } - } - return matches; -} - export async function handleBlueBubblesWebhookRequest( req: IncomingMessage, res: ServerResponse, @@ -378,15 +353,9 @@ export async function handleBlueBubblesWebhookRequest( return true; } - const body = await readJsonBody(req, 1024 * 1024); + const body = await readBlueBubblesWebhookBody(req, 1024 * 1024); if (!body.ok) { - if (body.error === "payload too large") { - res.statusCode = 413; - } else if (body.error === "request body timeout") { - res.statusCode = 408; - } else { - res.statusCode = 400; - } + res.statusCode = body.statusCode; res.end(body.error ?? "invalid payload"); console.warn(`[bluebubbles] webhook rejected: ${body.error ?? "invalid payload"}`); return true; @@ -450,9 +419,12 @@ export async function handleBlueBubblesWebhookRequest( req.headers["x-bluebubbles-guid"] ?? req.headers["authorization"]; const guid = (Array.isArray(headerToken) ? headerToken[0] : headerToken) ?? guidParam ?? ""; - const matching = resolveAuthenticatedWebhookTargets(targets, guid); + const matchedTarget = resolveSingleWebhookTarget(targets, (target) => { + const token = target.account.config.password?.trim() ?? ""; + return safeEqualSecret(guid, token); + }); - if (matching.length === 0) { + if (matchedTarget.kind === "none") { res.statusCode = 401; res.end("unauthorized"); console.warn( @@ -461,14 +433,14 @@ export async function handleBlueBubblesWebhookRequest( return true; } - if (matching.length > 1) { + if (matchedTarget.kind === "ambiguous") { res.statusCode = 401; res.end("ambiguous webhook target"); console.warn(`[bluebubbles] webhook rejected: ambiguous target match path=${path}`); return true; } - const target = matching[0]; + const target = matchedTarget.target; target.statusSink?.({ lastInboundAt: Date.now() }); if (reaction) { processReaction(reaction, target).catch((err) => { diff --git a/extensions/googlechat/src/monitor.ts b/extensions/googlechat/src/monitor.ts index 272f3abc8..9cdcbc070 100644 --- a/extensions/googlechat/src/monitor.ts +++ b/extensions/googlechat/src/monitor.ts @@ -5,6 +5,7 @@ import { readJsonBodyWithLimit, registerWebhookTarget, rejectNonPostWebhookRequest, + resolveSingleWebhookTargetAsync, resolveWebhookPath, resolveWebhookTargets, requestBodyErrorToText, @@ -208,8 +209,7 @@ export async function handleGoogleChatWebhookRequest( ? authHeaderNow.slice("bearer ".length) : bearer; - const matchedTargets: WebhookTarget[] = []; - for (const target of targets) { + const matchedTarget = await resolveSingleWebhookTargetAsync(targets, async (target) => { const audienceType = target.audienceType; const audience = target.audience; const verification = await verifyGoogleChatRequest({ @@ -217,27 +217,22 @@ export async function handleGoogleChatWebhookRequest( audienceType, audience, }); - if (verification.ok) { - matchedTargets.push(target); - if (matchedTargets.length > 1) { - break; - } - } - } + return verification.ok; + }); - if (matchedTargets.length === 0) { + if (matchedTarget.kind === "none") { res.statusCode = 401; res.end("unauthorized"); return true; } - if (matchedTargets.length > 1) { + if (matchedTarget.kind === "ambiguous") { res.statusCode = 401; res.end("ambiguous webhook target"); return true; } - const selected = matchedTargets[0]; + const selected = matchedTarget.target; selected.statusSink?.({ lastInboundAt: Date.now() }); processGoogleChatEvent(event, selected).catch((err) => { selected?.runtime.error?.( diff --git a/extensions/zalo/src/monitor.ts b/extensions/zalo/src/monitor.ts index 8a28927f6..3e1b3256f 100644 --- a/extensions/zalo/src/monitor.ts +++ b/extensions/zalo/src/monitor.ts @@ -6,6 +6,7 @@ import { readJsonBodyWithLimit, registerWebhookTarget, rejectNonPostWebhookRequest, + resolveSingleWebhookTarget, resolveSenderCommandAuthorization, resolveWebhookPath, resolveWebhookTargets, @@ -195,20 +196,22 @@ export async function handleZaloWebhookRequest( } const headerToken = String(req.headers["x-bot-api-secret-token"] ?? ""); - const matching = targets.filter((entry) => timingSafeEquals(entry.secret, headerToken)); - if (matching.length === 0) { + const matchedTarget = resolveSingleWebhookTarget(targets, (entry) => + timingSafeEquals(entry.secret, headerToken), + ); + if (matchedTarget.kind === "none") { res.statusCode = 401; res.end("unauthorized"); recordWebhookStatus(targets[0]?.runtime, req.url ?? "", res.statusCode); return true; } - if (matching.length > 1) { + if (matchedTarget.kind === "ambiguous") { res.statusCode = 401; res.end("ambiguous webhook target"); recordWebhookStatus(targets[0]?.runtime, req.url ?? "", res.statusCode); return true; } - const target = matching[0]; + const target = matchedTarget.target; const path = req.url ?? ""; const rateLimitKey = `${path}:${req.socket.remoteAddress ?? "unknown"}`; const nowMs = Date.now(); diff --git a/src/plugin-sdk/index.ts b/src/plugin-sdk/index.ts index c18892c6f..f70fc1419 100644 --- a/src/plugin-sdk/index.ts +++ b/src/plugin-sdk/index.ts @@ -88,8 +88,11 @@ export { normalizeWebhookPath, resolveWebhookPath } from "./webhook-path.js"; export { registerWebhookTarget, rejectNonPostWebhookRequest, + resolveSingleWebhookTarget, + resolveSingleWebhookTargetAsync, resolveWebhookTargets, } from "./webhook-targets.js"; +export type { WebhookTargetMatchResult } from "./webhook-targets.js"; export type { AgentMediaPayload } from "./agent-media-payload.js"; export { buildAgentMediaPayload } from "./agent-media-payload.js"; export { diff --git a/src/plugin-sdk/webhook-targets.test.ts b/src/plugin-sdk/webhook-targets.test.ts new file mode 100644 index 000000000..5c4255533 --- /dev/null +++ b/src/plugin-sdk/webhook-targets.test.ts @@ -0,0 +1,120 @@ +import { EventEmitter } from "node:events"; +import type { IncomingMessage, ServerResponse } from "node:http"; +import { describe, expect, it, vi } from "vitest"; +import { + registerWebhookTarget, + rejectNonPostWebhookRequest, + resolveSingleWebhookTarget, + resolveSingleWebhookTargetAsync, + resolveWebhookTargets, +} from "./webhook-targets.js"; + +function createRequest(method: string, url: string): IncomingMessage { + const req = new EventEmitter() as IncomingMessage; + req.method = method; + req.url = url; + req.headers = {}; + return req; +} + +describe("registerWebhookTarget", () => { + it("normalizes the path and unregisters cleanly", () => { + const targets = new Map>(); + const registered = registerWebhookTarget(targets, { + path: "hook", + id: "A", + }); + + expect(registered.target.path).toBe("/hook"); + expect(targets.get("/hook")).toEqual([registered.target]); + + registered.unregister(); + expect(targets.has("/hook")).toBe(false); + }); +}); + +describe("resolveWebhookTargets", () => { + it("resolves normalized path targets", () => { + const targets = new Map>(); + targets.set("/hook", [{ id: "A" }]); + + expect(resolveWebhookTargets(createRequest("POST", "/hook/"), targets)).toEqual({ + path: "/hook", + targets: [{ id: "A" }], + }); + }); + + it("returns null when path has no targets", () => { + const targets = new Map>(); + expect(resolveWebhookTargets(createRequest("POST", "/missing"), targets)).toBeNull(); + }); +}); + +describe("rejectNonPostWebhookRequest", () => { + it("sets 405 for non-POST requests", () => { + const setHeaderMock = vi.fn(); + const endMock = vi.fn(); + const res = { + statusCode: 200, + setHeader: setHeaderMock, + end: endMock, + } as unknown as ServerResponse; + + const rejected = rejectNonPostWebhookRequest(createRequest("GET", "/hook"), res); + + expect(rejected).toBe(true); + expect(res.statusCode).toBe(405); + expect(setHeaderMock).toHaveBeenCalledWith("Allow", "POST"); + expect(endMock).toHaveBeenCalledWith("Method Not Allowed"); + }); +}); + +describe("resolveSingleWebhookTarget", () => { + it("returns none when no target matches", () => { + const result = resolveSingleWebhookTarget(["a", "b"], (value) => value === "c"); + expect(result).toEqual({ kind: "none" }); + }); + + it("returns the single match", () => { + const result = resolveSingleWebhookTarget(["a", "b"], (value) => value === "b"); + expect(result).toEqual({ kind: "single", target: "b" }); + }); + + it("returns ambiguous after second match", () => { + const calls: string[] = []; + const result = resolveSingleWebhookTarget(["a", "b", "c"], (value) => { + calls.push(value); + return value === "a" || value === "b"; + }); + expect(result).toEqual({ kind: "ambiguous" }); + expect(calls).toEqual(["a", "b"]); + }); +}); + +describe("resolveSingleWebhookTargetAsync", () => { + it("returns none when no target matches", async () => { + const result = await resolveSingleWebhookTargetAsync( + ["a", "b"], + async (value) => value === "c", + ); + expect(result).toEqual({ kind: "none" }); + }); + + it("returns the single async match", async () => { + const result = await resolveSingleWebhookTargetAsync( + ["a", "b"], + async (value) => value === "b", + ); + expect(result).toEqual({ kind: "single", target: "b" }); + }); + + it("returns ambiguous after second async match", async () => { + const calls: string[] = []; + const result = await resolveSingleWebhookTargetAsync(["a", "b", "c"], async (value) => { + calls.push(value); + return value === "a" || value === "b"; + }); + expect(result).toEqual({ kind: "ambiguous" }); + expect(calls).toEqual(["a", "b"]); + }); +}); diff --git a/src/plugin-sdk/webhook-targets.ts b/src/plugin-sdk/webhook-targets.ts index 81747c894..1a7cd40ac 100644 --- a/src/plugin-sdk/webhook-targets.ts +++ b/src/plugin-sdk/webhook-targets.ts @@ -38,6 +38,51 @@ export function resolveWebhookTargets( return { path, targets }; } +export type WebhookTargetMatchResult = + | { kind: "none" } + | { kind: "single"; target: T } + | { kind: "ambiguous" }; + +export function resolveSingleWebhookTarget( + targets: readonly T[], + isMatch: (target: T) => boolean, +): WebhookTargetMatchResult { + let matched: T | undefined; + for (const target of targets) { + if (!isMatch(target)) { + continue; + } + if (matched) { + return { kind: "ambiguous" }; + } + matched = target; + } + if (!matched) { + return { kind: "none" }; + } + return { kind: "single", target: matched }; +} + +export async function resolveSingleWebhookTargetAsync( + targets: readonly T[], + isMatch: (target: T) => Promise, +): Promise> { + let matched: T | undefined; + for (const target of targets) { + if (!(await isMatch(target))) { + continue; + } + if (matched) { + return { kind: "ambiguous" }; + } + matched = target; + } + if (!matched) { + return { kind: "none" }; + } + return { kind: "single", target: matched }; +} + export function rejectNonPostWebhookRequest(req: IncomingMessage, res: ServerResponse): boolean { if (req.method === "POST") { return false; From 635b6298e33b02fc0ad2a284c9d3576114513412 Mon Sep 17 00:00:00 2001 From: Santiago Medina Rolong Date: Thu, 19 Feb 2026 20:14:06 -0800 Subject: [PATCH 0148/1007] skills: add xurl skill --- skills/xurl/SKILL.md | 423 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 423 insertions(+) create mode 100644 skills/xurl/SKILL.md diff --git a/skills/xurl/SKILL.md b/skills/xurl/SKILL.md new file mode 100644 index 000000000..82f955da9 --- /dev/null +++ b/skills/xurl/SKILL.md @@ -0,0 +1,423 @@ +--- +name: xurl +description: A curl-like CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint. Supports multiple apps, OAuth 2.0, OAuth 1.0a, and app-only auth. +--- + +# xurl — Agent Skill Reference + +`xurl` is a CLI tool for the X API. It supports both **shortcut commands** (human/agent‑friendly one‑liners) and **raw curl‑style** access to any v2 endpoint. All commands return JSON to stdout. + +--- + +## Installation + +### Homebrew (macOS) +```bash +brew install --cask xdevplatform/tap/xurl +``` + +### npm +```bash +npm install -g @xdevplatform/xurl +``` + +### Shell script +```bash +curl -fsSL https://raw.githubusercontent.com/xdevplatform/xurl/main/install.sh | bash +``` +Installs to `~/.local/bin`. If it's not in your PATH, the script will tell you what to add. + +### Go +```bash +go install github.com/xdevplatform/xurl@latest +``` + +--- + +## Prerequisites + +Before using any command you must be authenticated. Run `xurl auth status` to check. + +### Register an app (recommended) + +```bash +# Register your X API app credentials (stored in ~/.xurl) +xurl auth apps add my-app --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET + +# Then authenticate +xurl auth oauth2 +``` + +You can register multiple apps and switch between them: +```bash +xurl auth apps add prod-app --client-id PROD_ID --client-secret PROD_SECRET +xurl auth apps add dev-app --client-id DEV_ID --client-secret DEV_SECRET +xurl auth default prod-app # set default app +xurl auth default prod-app alice # set default app + user +xurl --app dev-app /2/users/me # one-off override +``` + +### Other auth methods + +```bash +# OAuth 1.0a +xurl auth oauth1 \ + --consumer-key KEY --consumer-secret SECRET \ + --access-token TOKEN --token-secret SECRET + +# App‑only bearer token +xurl auth app --bearer-token TOKEN +``` + +Tokens are persisted to `~/.xurl` in YAML format. Each app has its own isolated tokens. Once authenticated, every command below will auto‑attach the right `Authorization` header. + +--- + +## Quick Reference + +| Action | Command | +|---|---| +| Post | `xurl post "Hello world!"` | +| Reply | `xurl reply POST_ID "Nice post!"` | +| Quote | `xurl quote POST_ID "My take"` | +| Delete a post | `xurl delete POST_ID` | +| Read a post | `xurl read POST_ID` | +| Search posts | `xurl search "QUERY" -n 10` | +| Who am I | `xurl whoami` | +| Look up a user | `xurl user @handle` | +| Home timeline | `xurl timeline -n 20` | +| Mentions | `xurl mentions -n 10` | +| Like | `xurl like POST_ID` | +| Unlike | `xurl unlike POST_ID` | +| Repost | `xurl repost POST_ID` | +| Undo repost | `xurl unrepost POST_ID` | +| Bookmark | `xurl bookmark POST_ID` | +| Remove bookmark | `xurl unbookmark POST_ID` | +| List bookmarks | `xurl bookmarks -n 10` | +| List likes | `xurl likes -n 10` | +| Follow | `xurl follow @handle` | +| Unfollow | `xurl unfollow @handle` | +| List following | `xurl following -n 20` | +| List followers | `xurl followers -n 20` | +| Block | `xurl block @handle` | +| Unblock | `xurl unblock @handle` | +| Mute | `xurl mute @handle` | +| Unmute | `xurl unmute @handle` | +| Send DM | `xurl dm @handle "message"` | +| List DMs | `xurl dms -n 10` | +| Upload media | `xurl media upload path/to/file.mp4` | +| Media status | `xurl media status MEDIA_ID` | +| **App Management** | | +| Register app | `xurl auth apps add NAME --client-id ID --client-secret SEC` | +| List apps | `xurl auth apps list` | +| Update app creds | `xurl auth apps update NAME --client-id ID` | +| Remove app | `xurl auth apps remove NAME` | +| Set default (interactive) | `xurl auth default` | +| Set default (command) | `xurl auth default APP_NAME [USERNAME]` | +| Use app per-request | `xurl --app NAME /2/users/me` | +| Auth status | `xurl auth status` | + +> **Post IDs vs URLs:** Anywhere `POST_ID` appears above you can also paste a full post URL (e.g. `https://x.com/user/status/1234567890`) — xurl extracts the ID automatically. + +> **Usernames:** Leading `@` is optional. `@elonmusk` and `elonmusk` both work. + +--- + +## Command Details + +### Posting + +```bash +# Simple post +xurl post "Hello world!" + +# Post with media (upload first, then attach) +xurl media upload photo.jpg # → note the media_id from response +xurl post "Check this out" --media-id MEDIA_ID + +# Multiple media +xurl post "Thread pics" --media-id 111 --media-id 222 + +# Reply to a post (by ID or URL) +xurl reply 1234567890 "Great point!" +xurl reply https://x.com/user/status/1234567890 "Agreed!" + +# Reply with media +xurl reply 1234567890 "Look at this" --media-id MEDIA_ID + +# Quote a post +xurl quote 1234567890 "Adding my thoughts" + +# Delete your own post +xurl delete 1234567890 +``` + +### Reading + +```bash +# Read a single post (returns author, text, metrics, entities) +xurl read 1234567890 +xurl read https://x.com/user/status/1234567890 + +# Search recent posts (default 10 results) +xurl search "golang" +xurl search "from:elonmusk" -n 20 +xurl search "#buildinpublic lang:en" -n 15 +``` + +### User Info + +```bash +# Your own profile +xurl whoami + +# Look up any user +xurl user elonmusk +xurl user @XDevelopers +``` + +### Timelines & Mentions + +```bash +# Home timeline (reverse chronological) +xurl timeline +xurl timeline -n 25 + +# Your mentions +xurl mentions +xurl mentions -n 20 +``` + +### Engagement + +```bash +# Like / unlike +xurl like 1234567890 +xurl unlike 1234567890 + +# Repost / undo +xurl repost 1234567890 +xurl unrepost 1234567890 + +# Bookmark / remove +xurl bookmark 1234567890 +xurl unbookmark 1234567890 + +# List your bookmarks / likes +xurl bookmarks -n 20 +xurl likes -n 20 +``` + +### Social Graph + +```bash +# Follow / unfollow +xurl follow @XDevelopers +xurl unfollow @XDevelopers + +# List who you follow / your followers +xurl following -n 50 +xurl followers -n 50 + +# List another user's following/followers +xurl following --of elonmusk -n 20 +xurl followers --of elonmusk -n 20 + +# Block / unblock +xurl block @spammer +xurl unblock @spammer + +# Mute / unmute +xurl mute @annoying +xurl unmute @annoying +``` + +### Direct Messages + +```bash +# Send a DM +xurl dm @someuser "Hey, saw your post!" + +# List recent DM events +xurl dms +xurl dms -n 25 +``` + +### Media Upload + +```bash +# Upload a file (auto‑detects type for images/videos) +xurl media upload photo.jpg +xurl media upload video.mp4 + +# Specify type and category explicitly +xurl media upload --media-type image/jpeg --category tweet_image photo.jpg + +# Check processing status (videos need server‑side processing) +xurl media status MEDIA_ID +xurl media status --wait MEDIA_ID # poll until done + +# Full workflow: upload then post +xurl media upload meme.png # response includes media id +xurl post "lol" --media-id MEDIA_ID +``` + +--- + +## Global Flags + +These flags work on every command: + +| Flag | Short | Description | +|---|---|---| +| `--app` | | Use a specific registered app for this request (overrides default) | +| `--auth` | | Force auth type: `oauth1`, `oauth2`, or `app` | +| `--username` | `-u` | Which OAuth2 account to use (if you have multiple) | +| `--verbose` | `-v` | Print full request/response headers | +| `--trace` | `-t` | Add `X-B3-Flags: 1` trace header | + +--- + +## Raw API Access + +The shortcut commands cover the most common operations. For anything else, use xurl's raw curl‑style mode — it works with **any** X API v2 endpoint: + +```bash +# GET request (default) +xurl /2/users/me + +# POST with JSON body +xurl -X POST /2/tweets -d '{"text":"Hello world!"}' + +# PUT, PATCH, DELETE +xurl -X DELETE /2/tweets/1234567890 + +# Custom headers +xurl -H "Content-Type: application/json" /2/some/endpoint + +# Force streaming mode +xurl -s /2/tweets/search/stream + +# Full URLs also work +xurl https://api.x.com/2/users/me +``` + +--- + +## Streaming + +Streaming endpoints are auto‑detected. Known streaming endpoints include: +- `/2/tweets/search/stream` +- `/2/tweets/sample/stream` +- `/2/tweets/sample10/stream` + +You can force streaming on any endpoint with `-s`: +```bash +xurl -s /2/some/endpoint +``` + +--- + +## Output Format + +All commands return **JSON** to stdout, pretty‑printed with syntax highlighting. The output structure matches the X API v2 response format. A typical response looks like: + +```json +{ + "data": { + "id": "1234567890", + "text": "Hello world!" + } +} +``` + +Errors are also returned as JSON: +```json +{ + "errors": [ + { + "message": "Not authorized", + "code": 403 + } + ] +} +``` + +--- + +## Common Workflows + +### Post with an image +```bash +# 1. Upload the image +xurl media upload photo.jpg +# 2. Copy the media_id from the response, then post +xurl post "Check out this photo!" --media-id MEDIA_ID +``` + +### Reply to a conversation +```bash +# 1. Read the post to understand context +xurl read https://x.com/user/status/1234567890 +# 2. Reply +xurl reply 1234567890 "Here are my thoughts..." +``` + +### Search and engage +```bash +# 1. Search for relevant posts +xurl search "topic of interest" -n 10 +# 2. Like an interesting one +xurl like POST_ID_FROM_RESULTS +# 3. Reply to it +xurl reply POST_ID_FROM_RESULTS "Great point!" +``` + +### Check your activity +```bash +# See who you are +xurl whoami +# Check your mentions +xurl mentions -n 20 +# Check your timeline +xurl timeline -n 20 +``` + +### Set up multiple apps +```bash +# Register two apps +xurl auth apps add prod --client-id PROD_ID --client-secret PROD_SECRET +xurl auth apps add staging --client-id STG_ID --client-secret STG_SECRET + +# Authenticate users on each +xurl auth default prod +xurl auth oauth2 # authenticates on prod app + +xurl auth default staging +xurl auth oauth2 # authenticates on staging app + +# Switch between them +xurl auth default prod alice # prod app, alice user +xurl --app staging /2/users/me # one-off request against staging +``` + +--- + +## Error Handling + +- Non‑zero exit code on any error. +- API errors are printed as JSON to stdout (so you can still parse them). +- Auth errors suggest re‑running `xurl auth oauth2` or checking your tokens. +- If a command requires your user ID (like, repost, bookmark, follow, etc.), xurl will automatically fetch it via `/2/users/me`. If that fails, you'll see an auth error. + +--- + +## Notes + +- **Rate limits:** The X API enforces rate limits per endpoint. If you get a 429 error, wait and retry. Write endpoints (post, reply, like, repost) have stricter limits than read endpoints. +- **Scopes:** OAuth 2.0 tokens are requested with broad scopes. If you get a 403 on a specific action, your token may lack the required scope — re‑run `xurl auth oauth2` to get a fresh token. +- **Token refresh:** OAuth 2.0 tokens auto‑refresh when expired. No manual intervention needed. +- **Multiple apps:** Register multiple apps with `xurl auth apps add`. Each app has its own isolated credentials and tokens. Switch with `xurl auth default` or `--app`. +- **Multiple accounts:** You can authenticate multiple OAuth 2.0 accounts per app and switch between them with `--username` / `-u` or set a default with `xurl auth default APP USER`. +- **Default user:** When no `-u` flag is given, xurl uses the default user for the active app (set via `xurl auth default`). If no default user is set, it uses the first available token. +- **Token storage:** `~/.xurl` is YAML. Each app stores its own credentials and tokens. From ac2ef69454e6319fe5f34b782437b9a942ab85d6 Mon Sep 17 00:00:00 2001 From: Santiago Medina Date: Thu, 19 Feb 2026 20:19:14 -0800 Subject: [PATCH 0149/1007] Update skills/xurl/SKILL.md Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- skills/xurl/SKILL.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/skills/xurl/SKILL.md b/skills/xurl/SKILL.md index 82f955da9..a457131f4 100644 --- a/skills/xurl/SKILL.md +++ b/skills/xurl/SKILL.md @@ -1,6 +1,31 @@ --- name: xurl description: A curl-like CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint. Supports multiple apps, OAuth 2.0, OAuth 1.0a, and app-only auth. +metadata: + { + "openclaw": + { + "emoji": "𝕏", + "requires": { "bins": ["xurl"] }, + "install": + [ + { + "id": "brew", + "kind": "brew", + "formula": "xdevplatform/tap/xurl", + "bins": ["xurl"], + "label": "Install xurl (brew)", + }, + { + "id": "npm", + "kind": "npm", + "package": "@xdevplatform/xurl", + "bins": ["xurl"], + "label": "Install xurl (npm)", + }, + ], + }, + } --- # xurl — Agent Skill Reference From da844d6411b4bd4ce61a87765cc0510761200594 Mon Sep 17 00:00:00 2001 From: Santiago Medina Rolong Date: Thu, 19 Feb 2026 20:28:28 -0800 Subject: [PATCH 0150/1007] skills: update xurl description --- skills/xurl/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skills/xurl/SKILL.md b/skills/xurl/SKILL.md index a457131f4..6319b51a5 100644 --- a/skills/xurl/SKILL.md +++ b/skills/xurl/SKILL.md @@ -1,6 +1,6 @@ --- name: xurl -description: A curl-like CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint. Supports multiple apps, OAuth 2.0, OAuth 1.0a, and app-only auth. +description: A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint. metadata: { "openclaw": From 8db5e77ffa7b0190da478e36d05d59505d0ac56a Mon Sep 17 00:00:00 2001 From: Santiago Medina Rolong Date: Thu, 19 Feb 2026 20:37:36 -0800 Subject: [PATCH 0151/1007] skills: fmt --- skills/xurl/SKILL.md | 110 ++++++++++++++++++++++++------------------- 1 file changed, 62 insertions(+), 48 deletions(-) diff --git a/skills/xurl/SKILL.md b/skills/xurl/SKILL.md index 6319b51a5..7980e9748 100644 --- a/skills/xurl/SKILL.md +++ b/skills/xurl/SKILL.md @@ -37,22 +37,27 @@ metadata: ## Installation ### Homebrew (macOS) + ```bash brew install --cask xdevplatform/tap/xurl ``` ### npm + ```bash npm install -g @xdevplatform/xurl ``` ### Shell script + ```bash curl -fsSL https://raw.githubusercontent.com/xdevplatform/xurl/main/install.sh | bash ``` + Installs to `~/.local/bin`. If it's not in your PATH, the script will tell you what to add. ### Go + ```bash go install github.com/xdevplatform/xurl@latest ``` @@ -74,6 +79,7 @@ xurl auth oauth2 ``` You can register multiple apps and switch between them: + ```bash xurl auth apps add prod-app --client-id PROD_ID --client-secret PROD_SECRET xurl auth apps add dev-app --client-id DEV_ID --client-secret DEV_SECRET @@ -100,47 +106,47 @@ Tokens are persisted to `~/.xurl` in YAML format. Each app has its own isolated ## Quick Reference -| Action | Command | -|---|---| -| Post | `xurl post "Hello world!"` | -| Reply | `xurl reply POST_ID "Nice post!"` | -| Quote | `xurl quote POST_ID "My take"` | -| Delete a post | `xurl delete POST_ID` | -| Read a post | `xurl read POST_ID` | -| Search posts | `xurl search "QUERY" -n 10` | -| Who am I | `xurl whoami` | -| Look up a user | `xurl user @handle` | -| Home timeline | `xurl timeline -n 20` | -| Mentions | `xurl mentions -n 10` | -| Like | `xurl like POST_ID` | -| Unlike | `xurl unlike POST_ID` | -| Repost | `xurl repost POST_ID` | -| Undo repost | `xurl unrepost POST_ID` | -| Bookmark | `xurl bookmark POST_ID` | -| Remove bookmark | `xurl unbookmark POST_ID` | -| List bookmarks | `xurl bookmarks -n 10` | -| List likes | `xurl likes -n 10` | -| Follow | `xurl follow @handle` | -| Unfollow | `xurl unfollow @handle` | -| List following | `xurl following -n 20` | -| List followers | `xurl followers -n 20` | -| Block | `xurl block @handle` | -| Unblock | `xurl unblock @handle` | -| Mute | `xurl mute @handle` | -| Unmute | `xurl unmute @handle` | -| Send DM | `xurl dm @handle "message"` | -| List DMs | `xurl dms -n 10` | -| Upload media | `xurl media upload path/to/file.mp4` | -| Media status | `xurl media status MEDIA_ID` | -| **App Management** | | -| Register app | `xurl auth apps add NAME --client-id ID --client-secret SEC` | -| List apps | `xurl auth apps list` | -| Update app creds | `xurl auth apps update NAME --client-id ID` | -| Remove app | `xurl auth apps remove NAME` | -| Set default (interactive) | `xurl auth default` | -| Set default (command) | `xurl auth default APP_NAME [USERNAME]` | -| Use app per-request | `xurl --app NAME /2/users/me` | -| Auth status | `xurl auth status` | +| Action | Command | +| ------------------------- | ------------------------------------------------------------ | +| Post | `xurl post "Hello world!"` | +| Reply | `xurl reply POST_ID "Nice post!"` | +| Quote | `xurl quote POST_ID "My take"` | +| Delete a post | `xurl delete POST_ID` | +| Read a post | `xurl read POST_ID` | +| Search posts | `xurl search "QUERY" -n 10` | +| Who am I | `xurl whoami` | +| Look up a user | `xurl user @handle` | +| Home timeline | `xurl timeline -n 20` | +| Mentions | `xurl mentions -n 10` | +| Like | `xurl like POST_ID` | +| Unlike | `xurl unlike POST_ID` | +| Repost | `xurl repost POST_ID` | +| Undo repost | `xurl unrepost POST_ID` | +| Bookmark | `xurl bookmark POST_ID` | +| Remove bookmark | `xurl unbookmark POST_ID` | +| List bookmarks | `xurl bookmarks -n 10` | +| List likes | `xurl likes -n 10` | +| Follow | `xurl follow @handle` | +| Unfollow | `xurl unfollow @handle` | +| List following | `xurl following -n 20` | +| List followers | `xurl followers -n 20` | +| Block | `xurl block @handle` | +| Unblock | `xurl unblock @handle` | +| Mute | `xurl mute @handle` | +| Unmute | `xurl unmute @handle` | +| Send DM | `xurl dm @handle "message"` | +| List DMs | `xurl dms -n 10` | +| Upload media | `xurl media upload path/to/file.mp4` | +| Media status | `xurl media status MEDIA_ID` | +| **App Management** | | +| Register app | `xurl auth apps add NAME --client-id ID --client-secret SEC` | +| List apps | `xurl auth apps list` | +| Update app creds | `xurl auth apps update NAME --client-id ID` | +| Remove app | `xurl auth apps remove NAME` | +| Set default (interactive) | `xurl auth default` | +| Set default (command) | `xurl auth default APP_NAME [USERNAME]` | +| Use app per-request | `xurl --app NAME /2/users/me` | +| Auth status | `xurl auth status` | > **Post IDs vs URLs:** Anywhere `POST_ID` appears above you can also paste a full post URL (e.g. `https://x.com/user/status/1234567890`) — xurl extracts the ID automatically. @@ -293,13 +299,13 @@ xurl post "lol" --media-id MEDIA_ID These flags work on every command: -| Flag | Short | Description | -|---|---|---| -| `--app` | | Use a specific registered app for this request (overrides default) | -| `--auth` | | Force auth type: `oauth1`, `oauth2`, or `app` | -| `--username` | `-u` | Which OAuth2 account to use (if you have multiple) | -| `--verbose` | `-v` | Print full request/response headers | -| `--trace` | `-t` | Add `X-B3-Flags: 1` trace header | +| Flag | Short | Description | +| ------------ | ----- | ------------------------------------------------------------------ | +| `--app` | | Use a specific registered app for this request (overrides default) | +| `--auth` | | Force auth type: `oauth1`, `oauth2`, or `app` | +| `--username` | `-u` | Which OAuth2 account to use (if you have multiple) | +| `--verbose` | `-v` | Print full request/response headers | +| `--trace` | `-t` | Add `X-B3-Flags: 1` trace header | --- @@ -332,11 +338,13 @@ xurl https://api.x.com/2/users/me ## Streaming Streaming endpoints are auto‑detected. Known streaming endpoints include: + - `/2/tweets/search/stream` - `/2/tweets/sample/stream` - `/2/tweets/sample10/stream` You can force streaming on any endpoint with `-s`: + ```bash xurl -s /2/some/endpoint ``` @@ -357,6 +365,7 @@ All commands return **JSON** to stdout, pretty‑printed with syntax highlightin ``` Errors are also returned as JSON: + ```json { "errors": [ @@ -373,6 +382,7 @@ Errors are also returned as JSON: ## Common Workflows ### Post with an image + ```bash # 1. Upload the image xurl media upload photo.jpg @@ -381,6 +391,7 @@ xurl post "Check out this photo!" --media-id MEDIA_ID ``` ### Reply to a conversation + ```bash # 1. Read the post to understand context xurl read https://x.com/user/status/1234567890 @@ -389,6 +400,7 @@ xurl reply 1234567890 "Here are my thoughts..." ``` ### Search and engage + ```bash # 1. Search for relevant posts xurl search "topic of interest" -n 10 @@ -399,6 +411,7 @@ xurl reply POST_ID_FROM_RESULTS "Great point!" ``` ### Check your activity + ```bash # See who you are xurl whoami @@ -409,6 +422,7 @@ xurl timeline -n 20 ``` ### Set up multiple apps + ```bash # Register two apps xurl auth apps add prod --client-id PROD_ID --client-secret PROD_SECRET From 11f6bea598d780023a60e3dc40383a1ce08df5d3 Mon Sep 17 00:00:00 2001 From: Santiago Medina Rolong Date: Fri, 20 Feb 2026 15:54:59 -0800 Subject: [PATCH 0152/1007] add secret safety --- skills/xurl/SKILL.md | 131 +++++++++++++++++++++---------------------- 1 file changed, 65 insertions(+), 66 deletions(-) diff --git a/skills/xurl/SKILL.md b/skills/xurl/SKILL.md index 7980e9748..cf76bf158 100644 --- a/skills/xurl/SKILL.md +++ b/skills/xurl/SKILL.md @@ -66,23 +66,33 @@ go install github.com/xdevplatform/xurl@latest ## Prerequisites +This skill requires the `xurl` CLI utility: . + Before using any command you must be authenticated. Run `xurl auth status` to check. +### Secret Safety (Mandatory) + +- Never read, print, parse, summarize, upload, or send `~/.xurl` (or copies of it) to the LLM context. +- Never ask the user to paste credentials/tokens into chat. +- The user must fill `~/.xurl` with required secrets manually on their own machine. +- Do not recommend or execute auth commands with inline secrets in agent/LLM sessions. +- Warn that using CLI secret options in agent sessions can leak credentials (prompt/context, logs, shell history). +- Never use `--verbose` / `-v` in agent/LLM sessions; it can expose sensitive headers/tokens in output. +- Sensitive flags that must never be used in agent commands: `--bearer-token`, `--consumer-key`, `--consumer-secret`, `--access-token`, `--token-secret`, `--client-id`, `--client-secret`. +- To verify whether at least one app with credentials is already registered, run: `xurl auth status`. + ### Register an app (recommended) -```bash -# Register your X API app credentials (stored in ~/.xurl) -xurl auth apps add my-app --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET +App credential registration must be done manually by the user outside the agent/LLM session. +After credentials are registered, authenticate with: -# Then authenticate +```bash xurl auth oauth2 ``` -You can register multiple apps and switch between them: +For multiple pre-configured apps, switch between them: ```bash -xurl auth apps add prod-app --client-id PROD_ID --client-secret PROD_SECRET -xurl auth apps add dev-app --client-id DEV_ID --client-secret DEV_SECRET xurl auth default prod-app # set default app xurl auth default prod-app alice # set default app + user xurl --app dev-app /2/users/me # one-off override @@ -90,63 +100,55 @@ xurl --app dev-app /2/users/me # one-off override ### Other auth methods -```bash -# OAuth 1.0a -xurl auth oauth1 \ - --consumer-key KEY --consumer-secret SECRET \ - --access-token TOKEN --token-secret SECRET +Examples with inline secret flags are intentionally omitted. If OAuth1 or app-only auth is needed, the user must run those commands manually outside agent/LLM context. -# App‑only bearer token -xurl auth app --bearer-token TOKEN -``` - -Tokens are persisted to `~/.xurl` in YAML format. Each app has its own isolated tokens. Once authenticated, every command below will auto‑attach the right `Authorization` header. +Tokens are persisted to `~/.xurl` in YAML format. Each app has its own isolated tokens. Do not read this file through the agent/LLM. Once authenticated, every command below will auto‑attach the right `Authorization` header. --- ## Quick Reference -| Action | Command | -| ------------------------- | ------------------------------------------------------------ | -| Post | `xurl post "Hello world!"` | -| Reply | `xurl reply POST_ID "Nice post!"` | -| Quote | `xurl quote POST_ID "My take"` | -| Delete a post | `xurl delete POST_ID` | -| Read a post | `xurl read POST_ID` | -| Search posts | `xurl search "QUERY" -n 10` | -| Who am I | `xurl whoami` | -| Look up a user | `xurl user @handle` | -| Home timeline | `xurl timeline -n 20` | -| Mentions | `xurl mentions -n 10` | -| Like | `xurl like POST_ID` | -| Unlike | `xurl unlike POST_ID` | -| Repost | `xurl repost POST_ID` | -| Undo repost | `xurl unrepost POST_ID` | -| Bookmark | `xurl bookmark POST_ID` | -| Remove bookmark | `xurl unbookmark POST_ID` | -| List bookmarks | `xurl bookmarks -n 10` | -| List likes | `xurl likes -n 10` | -| Follow | `xurl follow @handle` | -| Unfollow | `xurl unfollow @handle` | -| List following | `xurl following -n 20` | -| List followers | `xurl followers -n 20` | -| Block | `xurl block @handle` | -| Unblock | `xurl unblock @handle` | -| Mute | `xurl mute @handle` | -| Unmute | `xurl unmute @handle` | -| Send DM | `xurl dm @handle "message"` | -| List DMs | `xurl dms -n 10` | -| Upload media | `xurl media upload path/to/file.mp4` | -| Media status | `xurl media status MEDIA_ID` | -| **App Management** | | -| Register app | `xurl auth apps add NAME --client-id ID --client-secret SEC` | -| List apps | `xurl auth apps list` | -| Update app creds | `xurl auth apps update NAME --client-id ID` | -| Remove app | `xurl auth apps remove NAME` | -| Set default (interactive) | `xurl auth default` | -| Set default (command) | `xurl auth default APP_NAME [USERNAME]` | -| Use app per-request | `xurl --app NAME /2/users/me` | -| Auth status | `xurl auth status` | +| Action | Command | +| ------------------------- | ----------------------------------------------------- | +| Post | `xurl post "Hello world!"` | +| Reply | `xurl reply POST_ID "Nice post!"` | +| Quote | `xurl quote POST_ID "My take"` | +| Delete a post | `xurl delete POST_ID` | +| Read a post | `xurl read POST_ID` | +| Search posts | `xurl search "QUERY" -n 10` | +| Who am I | `xurl whoami` | +| Look up a user | `xurl user @handle` | +| Home timeline | `xurl timeline -n 20` | +| Mentions | `xurl mentions -n 10` | +| Like | `xurl like POST_ID` | +| Unlike | `xurl unlike POST_ID` | +| Repost | `xurl repost POST_ID` | +| Undo repost | `xurl unrepost POST_ID` | +| Bookmark | `xurl bookmark POST_ID` | +| Remove bookmark | `xurl unbookmark POST_ID` | +| List bookmarks | `xurl bookmarks -n 10` | +| List likes | `xurl likes -n 10` | +| Follow | `xurl follow @handle` | +| Unfollow | `xurl unfollow @handle` | +| List following | `xurl following -n 20` | +| List followers | `xurl followers -n 20` | +| Block | `xurl block @handle` | +| Unblock | `xurl unblock @handle` | +| Mute | `xurl mute @handle` | +| Unmute | `xurl unmute @handle` | +| Send DM | `xurl dm @handle "message"` | +| List DMs | `xurl dms -n 10` | +| Upload media | `xurl media upload path/to/file.mp4` | +| Media status | `xurl media status MEDIA_ID` | +| **App Management** | | +| Register app | Manual, outside agent (do not pass secrets via agent) | +| List apps | `xurl auth apps list` | +| Update app creds | Manual, outside agent (do not pass secrets via agent) | +| Remove app | `xurl auth apps remove NAME` | +| Set default (interactive) | `xurl auth default` | +| Set default (command) | `xurl auth default APP_NAME [USERNAME]` | +| Use app per-request | `xurl --app NAME /2/users/me` | +| Auth status | `xurl auth status` | > **Post IDs vs URLs:** Anywhere `POST_ID` appears above you can also paste a full post URL (e.g. `https://x.com/user/status/1234567890`) — xurl extracts the ID automatically. @@ -304,7 +306,7 @@ These flags work on every command: | `--app` | | Use a specific registered app for this request (overrides default) | | `--auth` | | Force auth type: `oauth1`, `oauth2`, or `app` | | `--username` | `-u` | Which OAuth2 account to use (if you have multiple) | -| `--verbose` | `-v` | Print full request/response headers | +| `--verbose` | `-v` | Forbidden in agent/LLM sessions (can leak auth headers/tokens) | | `--trace` | `-t` | Add `X-B3-Flags: 1` trace header | --- @@ -424,11 +426,8 @@ xurl timeline -n 20 ### Set up multiple apps ```bash -# Register two apps -xurl auth apps add prod --client-id PROD_ID --client-secret PROD_SECRET -xurl auth apps add staging --client-id STG_ID --client-secret STG_SECRET - -# Authenticate users on each +# App credentials must already be configured manually outside agent/LLM context. +# Authenticate users on each pre-configured app xurl auth default prod xurl auth oauth2 # authenticates on prod app @@ -456,7 +455,7 @@ xurl --app staging /2/users/me # one-off request against staging - **Rate limits:** The X API enforces rate limits per endpoint. If you get a 429 error, wait and retry. Write endpoints (post, reply, like, repost) have stricter limits than read endpoints. - **Scopes:** OAuth 2.0 tokens are requested with broad scopes. If you get a 403 on a specific action, your token may lack the required scope — re‑run `xurl auth oauth2` to get a fresh token. - **Token refresh:** OAuth 2.0 tokens auto‑refresh when expired. No manual intervention needed. -- **Multiple apps:** Register multiple apps with `xurl auth apps add`. Each app has its own isolated credentials and tokens. Switch with `xurl auth default` or `--app`. +- **Multiple apps:** Each app has its own isolated credentials and tokens. Configure credentials manually outside agent/LLM context, then switch with `xurl auth default` or `--app`. - **Multiple accounts:** You can authenticate multiple OAuth 2.0 accounts per app and switch between them with `--username` / `-u` or set a default with `xurl auth default APP USER`. - **Default user:** When no `-u` flag is given, xurl uses the default user for the active app (set via `xurl auth default`). If no default user is set, it uses the first available token. -- **Token storage:** `~/.xurl` is YAML. Each app stores its own credentials and tokens. +- **Token storage:** `~/.xurl` is YAML. Each app stores its own credentials and tokens. Never read or send this file to LLM context. From dff61a10e162c0f86f7c49e0b99f1cb1f0df5288 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 11:58:35 +0100 Subject: [PATCH 0153/1007] docs(changelog): add windows system.run approval mismatch fix note --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c720ff92f..ab2d03865 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,7 @@ Docs: https://docs.openclaw.ai - Skills/Security: sanitize skill env overrides to block unsafe runtime injection variables and only allow sensitive keys when declared in skill metadata, with warnings for suspicious values. Thanks @thewilloftheshadow. - Security/Browser: block non-network browser navigation protocols (including `file:`, `data:`, and `javascript:`) while preserving `about:blank`, preventing local file reads via browser tool navigation. This ships in the next npm release. Thanks @q1uf3ng for reporting. - Security/Exec: block shell startup-file env injection (`BASH_ENV`, `ENV`, `BASH_FUNC_*`, `LD_*`, `DYLD_*`) across config env ingestion, node-host inherited environment sanitization, and macOS exec host runtime to prevent pre-command execution from attacker-controlled environment variables. Thanks @tdjackey. +- Security/Exec (Windows): canonicalize `cmd.exe /c` command text across validation, approval binding, and audit/event rendering to prevent trailing-argument approval mismatches in `system.run`. This ships in the next npm release. Thanks @tdjackey for reporting. - Security/Gateway/Hooks: block `__proto__`, `constructor`, and `prototype` traversal in webhook template path resolution to prevent prototype-chain payload data leakage in `messageTemplate` rendering. (#22213) Thanks @SleuthCo. - Security/OpenClawKit/UI: prevent injected inbound user context metadata blocks from leaking into chat history in TUI, webchat, and macOS surfaces by stripping all untrusted metadata prefixes at display boundaries. (#22142) Thanks @Mellowambience, @vincentkoc. - Security/OpenClawKit/UI: strip inbound metadata blocks from user messages in TUI rendering while preserving user-authored content. (#22345) Thanks @kansodata, @vincentkoc. From e393d7aa5b39996329754b2bd2a56ec4533f268f Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 12:43:59 +0100 Subject: [PATCH 0154/1007] docs(changelog): clarify Security/Exec release note --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab2d03865..cafd5a179 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,7 +36,7 @@ Docs: https://docs.openclaw.ai - Docker/Security: run E2E and install-sh test images as non-root by adding appuser directives. Thanks @thewilloftheshadow. - Skills/Security: sanitize skill env overrides to block unsafe runtime injection variables and only allow sensitive keys when declared in skill metadata, with warnings for suspicious values. Thanks @thewilloftheshadow. - Security/Browser: block non-network browser navigation protocols (including `file:`, `data:`, and `javascript:`) while preserving `about:blank`, preventing local file reads via browser tool navigation. This ships in the next npm release. Thanks @q1uf3ng for reporting. -- Security/Exec: block shell startup-file env injection (`BASH_ENV`, `ENV`, `BASH_FUNC_*`, `LD_*`, `DYLD_*`) across config env ingestion, node-host inherited environment sanitization, and macOS exec host runtime to prevent pre-command execution from attacker-controlled environment variables. Thanks @tdjackey. +- Security/Exec: block shell startup-file env injection (`BASH_ENV`, `ENV`, `BASH_FUNC_*`, `LD_*`, `DYLD_*`) across config env ingestion, node-host inherited environment sanitization, and macOS exec host runtime to prevent pre-command execution from attacker-controlled environment variables. This ships in the next npm release. Thanks @tdjackey. - Security/Exec (Windows): canonicalize `cmd.exe /c` command text across validation, approval binding, and audit/event rendering to prevent trailing-argument approval mismatches in `system.run`. This ships in the next npm release. Thanks @tdjackey for reporting. - Security/Gateway/Hooks: block `__proto__`, `constructor`, and `prototype` traversal in webhook template path resolution to prevent prototype-chain payload data leakage in `messageTemplate` rendering. (#22213) Thanks @SleuthCo. - Security/OpenClawKit/UI: prevent injected inbound user context metadata blocks from leaking into chat history in TUI, webchat, and macOS surfaces by stripping all untrusted metadata prefixes at display boundaries. (#22142) Thanks @Mellowambience, @vincentkoc. From cb84c537f4baaa2b1b3e1d4ba5a8754adc4c9cdd Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 12:44:06 +0100 Subject: [PATCH 0155/1007] fix: normalize status auth cost handling and models header tests --- ...-allowlisted-models-model-list.e2e.test.ts | 2 +- src/auto-reply/reply/commands.test.ts | 6 +- src/auto-reply/status.ts | 57 ++++++++++++++----- 3 files changed, 48 insertions(+), 17 deletions(-) diff --git a/src/auto-reply/reply.directive.directive-behavior.lists-allowlisted-models-model-list.e2e.test.ts b/src/auto-reply/reply.directive.directive-behavior.lists-allowlisted-models-model-list.e2e.test.ts index a4a045e0b..7581e3886 100644 --- a/src/auto-reply/reply.directive.directive-behavior.lists-allowlisted-models-model-list.e2e.test.ts +++ b/src/auto-reply/reply.directive.directive-behavior.lists-allowlisted-models-model-list.e2e.test.ts @@ -122,7 +122,7 @@ describe("directive behavior", () => { }, }, }); - expect(text).toContain("Models (minimax)"); + expect(text).toContain("Models (minimax"); expect(text).toContain("minimax/MiniMax-M2.1"); expect(runEmbeddedPiAgent).not.toHaveBeenCalled(); }); diff --git a/src/auto-reply/reply/commands.test.ts b/src/auto-reply/reply/commands.test.ts index af10d5484..d0a80beb0 100644 --- a/src/auto-reply/reply/commands.test.ts +++ b/src/auto-reply/reply/commands.test.ts @@ -717,7 +717,7 @@ describe("/models command", () => { const params = buildPolicyParams("/models anthropic", cfg, { Surface: "discord" }); const result = await handleCommands(params); expect(result.shouldContinue).toBe(false); - expect(result.reply?.text).toContain("Models (anthropic)"); + expect(result.reply?.text).toContain("Models (anthropic"); expect(result.reply?.text).toContain("page 1/"); expect(result.reply?.text).toContain("anthropic/claude-opus-4-5"); expect(result.reply?.text).toContain("Switch: /model "); @@ -729,7 +729,7 @@ describe("/models command", () => { const params = buildPolicyParams("/models anthropic 3 all", cfg, { Surface: "discord" }); const result = await handleCommands(params); expect(result.shouldContinue).toBe(false); - expect(result.reply?.text).toContain("Models (anthropic)"); + expect(result.reply?.text).toContain("Models (anthropic"); expect(result.reply?.text).toContain("page 1/1"); expect(result.reply?.text).toContain("anthropic/claude-opus-4-5"); expect(result.reply?.text).not.toContain("Page out of range"); @@ -777,7 +777,7 @@ describe("/models command", () => { buildPolicyParams("/models localai", customCfg, { Surface: "discord" }), ); expect(result.shouldContinue).toBe(false); - expect(result.reply?.text).toContain("Models (localai)"); + expect(result.reply?.text).toContain("Models (localai"); expect(result.reply?.text).toContain("localai/ultra-chat"); expect(result.reply?.text).not.toContain("Unknown provider"); }); diff --git a/src/auto-reply/status.ts b/src/auto-reply/status.ts index d94784755..8148cb12e 100644 --- a/src/auto-reply/status.ts +++ b/src/auto-reply/status.ts @@ -90,6 +90,34 @@ type StatusArgs = { now?: number; }; +type NormalizedAuthMode = "api-key" | "oauth" | "token" | "aws-sdk" | "mixed" | "unknown"; + +function normalizeAuthMode(value?: string): NormalizedAuthMode | undefined { + const normalized = value?.trim().toLowerCase(); + if (!normalized) { + return undefined; + } + if (normalized === "api-key" || normalized.startsWith("api-key ")) { + return "api-key"; + } + if (normalized === "oauth" || normalized.startsWith("oauth ")) { + return "oauth"; + } + if (normalized === "token" || normalized.startsWith("token ")) { + return "token"; + } + if (normalized === "aws-sdk" || normalized.startsWith("aws-sdk ")) { + return "aws-sdk"; + } + if (normalized === "mixed" || normalized.startsWith("mixed ")) { + return "mixed"; + } + if (normalized === "unknown") { + return "unknown"; + } + return undefined; +} + function resolveRuntimeLabel( args: Pick, ): string { @@ -498,17 +526,27 @@ export function buildStatusMessage(args: StatusArgs): string { ]; const activationLine = activationParts.filter(Boolean).join(" · "); - const activeAuthMode = resolveModelAuthMode(activeProvider, args.config); + const selectedAuthMode = + normalizeAuthMode(args.modelAuth) ?? resolveModelAuthMode(selectedProvider, args.config); const selectedAuthLabelValue = args.modelAuth ?? - (() => { - const selectedAuthMode = resolveModelAuthMode(selectedProvider, args.config); - return selectedAuthMode && selectedAuthMode !== "unknown" ? selectedAuthMode : undefined; - })(); + (selectedAuthMode && selectedAuthMode !== "unknown" ? selectedAuthMode : undefined); + const activeAuthMode = + normalizeAuthMode(args.activeModelAuth) ?? resolveModelAuthMode(activeProvider, args.config); const activeAuthLabelValue = args.activeModelAuth ?? (activeAuthMode && activeAuthMode !== "unknown" ? activeAuthMode : undefined); - const showCost = activeAuthLabelValue === "api-key" || activeAuthLabelValue === "mixed"; + const selectedModelLabel = modelRefs.selected.label || "unknown"; + const activeModelLabel = formatProviderModelRef(activeProvider, activeModel) || "unknown"; + const fallbackState = resolveActiveFallbackState({ + selectedModelRef: selectedModelLabel, + activeModelRef: activeModelLabel, + state: entry, + }); + const effectiveCostAuthMode = fallbackState.active + ? activeAuthMode + : (selectedAuthMode ?? activeAuthMode); + const showCost = effectiveCostAuthMode === "api-key" || effectiveCostAuthMode === "mixed"; const costConfig = showCost ? resolveModelCostConfig({ provider: activeProvider, @@ -529,13 +567,6 @@ export function buildStatusMessage(args: StatusArgs): string { : undefined; const costLabel = showCost && hasUsage ? formatUsd(cost) : undefined; - const selectedModelLabel = modelRefs.selected.label || "unknown"; - const activeModelLabel = formatProviderModelRef(activeProvider, activeModel) || "unknown"; - const fallbackState = resolveActiveFallbackState({ - selectedModelRef: selectedModelLabel, - activeModelRef: activeModelLabel, - state: entry, - }); const selectedAuthLabel = selectedAuthLabelValue ? ` · 🔑 ${selectedAuthLabelValue}` : ""; const channelModelNote = (() => { if (!args.config || !entry) { From fbb79d4013000552d6a2c23b9613d8b3cb92f6b6 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 12:49:45 +0100 Subject: [PATCH 0156/1007] fix(security): harden runtime command override gating --- CHANGELOG.md | 1 + src/auto-reply/commands-registry.test.ts | 14 +++++++++++ src/auto-reply/commands-registry.ts | 7 +++--- src/auto-reply/reply/bash-command.ts | 3 ++- src/auto-reply/reply/commands-allowlist.ts | 3 ++- src/auto-reply/reply/commands-config.ts | 5 ++-- src/auto-reply/reply/commands.test.ts | 24 +++++++++++++++++++ src/auto-reply/status.ts | 5 ++-- src/config/commands.test.ts | 24 +++++++++++++++++++ src/config/commands.ts | 20 ++++++++++++++-- src/config/runtime-overrides.test.ts | 28 ++++++++++++++++++++++ src/config/runtime-overrides.ts | 28 ++++++++++++++++++++-- 12 files changed, 149 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cafd5a179..e625e71b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ Docs: https://docs.openclaw.ai - Gateway/Security: require secure context and paired-device checks for Control UI auth even when `gateway.controlUi.allowInsecureAuth` is set, and align audit messaging with the hardened behavior. (#20684) thanks @coygeek. - Docker/Security: run E2E and install-sh test images as non-root by adding appuser directives. Thanks @thewilloftheshadow. - Skills/Security: sanitize skill env overrides to block unsafe runtime injection variables and only allow sensitive keys when declared in skill metadata, with warnings for suspicious values. Thanks @thewilloftheshadow. +- Security/Commands: block prototype-key injection in runtime `/debug` overrides and require own-property checks for gated command flags (`bash`, `config`, `debug`) so inherited prototype values cannot enable privileged commands. Thanks @tdjackey for reporting. - Security/Browser: block non-network browser navigation protocols (including `file:`, `data:`, and `javascript:`) while preserving `about:blank`, preventing local file reads via browser tool navigation. This ships in the next npm release. Thanks @q1uf3ng for reporting. - Security/Exec: block shell startup-file env injection (`BASH_ENV`, `ENV`, `BASH_FUNC_*`, `LD_*`, `DYLD_*`) across config env ingestion, node-host inherited environment sanitization, and macOS exec host runtime to prevent pre-command execution from attacker-controlled environment variables. This ships in the next npm release. Thanks @tdjackey. - Security/Exec (Windows): canonicalize `cmd.exe /c` command text across validation, approval binding, and audit/event rendering to prevent trailing-argument approval mismatches in `system.run`. This ships in the next npm release. Thanks @tdjackey for reporting. diff --git a/src/auto-reply/commands-registry.test.ts b/src/auto-reply/commands-registry.test.ts index a38bb5a10..b05e5ea83 100644 --- a/src/auto-reply/commands-registry.test.ts +++ b/src/auto-reply/commands-registry.test.ts @@ -62,6 +62,20 @@ describe("commands registry", () => { expect(nativeDisabled.find((spec) => spec.name === "debug")).toBeFalsy(); }); + it("does not enable restricted commands from inherited flags", () => { + const inheritedCommands = Object.create({ + config: true, + debug: true, + bash: true, + }) as Record; + const commands = listChatCommandsForConfig({ + commands: inheritedCommands as never, + }); + expect(commands.find((spec) => spec.key === "config")).toBeFalsy(); + expect(commands.find((spec) => spec.key === "debug")).toBeFalsy(); + expect(commands.find((spec) => spec.key === "bash")).toBeFalsy(); + }); + it("appends skill commands when provided", () => { const skillCommands = [ { diff --git a/src/auto-reply/commands-registry.ts b/src/auto-reply/commands-registry.ts index dbfc789e7..34ca31492 100644 --- a/src/auto-reply/commands-registry.ts +++ b/src/auto-reply/commands-registry.ts @@ -1,6 +1,7 @@ import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "../agents/defaults.js"; import { resolveConfiguredModelRef } from "../agents/model-selection.js"; import type { SkillCommandSpec } from "../agents/skills.js"; +import { isCommandFlagEnabled } from "../config/commands.js"; import type { OpenClawConfig } from "../config/types.js"; import { escapeRegExp } from "../utils.js"; import { getChatCommands, getNativeCommandSurfaces } from "./commands-registry.data.js"; @@ -96,13 +97,13 @@ export function listChatCommands(params?: { export function isCommandEnabled(cfg: OpenClawConfig, commandKey: string): boolean { if (commandKey === "config") { - return cfg.commands?.config === true; + return isCommandFlagEnabled(cfg, "config"); } if (commandKey === "debug") { - return cfg.commands?.debug === true; + return isCommandFlagEnabled(cfg, "debug"); } if (commandKey === "bash") { - return cfg.commands?.bash === true; + return isCommandFlagEnabled(cfg, "bash"); } return true; } diff --git a/src/auto-reply/reply/bash-command.ts b/src/auto-reply/reply/bash-command.ts index 49a1c4df1..c442dbe1b 100644 --- a/src/auto-reply/reply/bash-command.ts +++ b/src/auto-reply/reply/bash-command.ts @@ -3,6 +3,7 @@ import { getFinishedSession, getSession, markExited } from "../../agents/bash-pr import { createExecTool } from "../../agents/bash-tools.js"; import { resolveSandboxRuntimeStatus } from "../../agents/sandbox.js"; import { killProcessTree } from "../../agents/shell-utils.js"; +import { isCommandFlagEnabled } from "../../config/commands.js"; import type { OpenClawConfig } from "../../config/config.js"; import { logVerbose } from "../../globals.js"; import { clampInt } from "../../utils.js"; @@ -186,7 +187,7 @@ export async function handleBashChatCommand(params: { failures: Array<{ gate: string; key: string }>; }; }): Promise { - if (params.cfg.commands?.bash !== true) { + if (!isCommandFlagEnabled(params.cfg, "bash")) { return { text: "⚠️ bash is disabled. Set commands.bash=true to enable. Docs: https://docs.openclaw.ai/tools/slash-commands#config", }; diff --git a/src/auto-reply/reply/commands-allowlist.ts b/src/auto-reply/reply/commands-allowlist.ts index 3b1b88776..79d040b97 100644 --- a/src/auto-reply/reply/commands-allowlist.ts +++ b/src/auto-reply/reply/commands-allowlist.ts @@ -3,6 +3,7 @@ import { resolveChannelConfigWrites } from "../../channels/plugins/config-writes import { listPairingChannels } from "../../channels/plugins/pairing.js"; import type { ChannelId } from "../../channels/plugins/types.js"; import { normalizeChannelId } from "../../channels/registry.js"; +import { isCommandFlagEnabled } from "../../config/commands.js"; import type { OpenClawConfig } from "../../config/config.js"; import { readConfigFileSnapshot, @@ -519,7 +520,7 @@ export const handleAllowlistCommand: CommandHandler = async (params, allowTextCo return { shouldContinue: false, reply: { text: lines.join("\n") } }; } - if (params.cfg.commands?.config !== true) { + if (!isCommandFlagEnabled(params.cfg, "config")) { return { shouldContinue: false, reply: { text: "⚠️ /allowlist edits are disabled. Set commands.config=true to enable." }, diff --git a/src/auto-reply/reply/commands-config.ts b/src/auto-reply/reply/commands-config.ts index 87aa8732f..c6578d7d4 100644 --- a/src/auto-reply/reply/commands-config.ts +++ b/src/auto-reply/reply/commands-config.ts @@ -1,5 +1,6 @@ import { resolveChannelConfigWrites } from "../../channels/plugins/config-writes.js"; import { normalizeChannelId } from "../../channels/registry.js"; +import { isCommandFlagEnabled } from "../../config/commands.js"; import { getConfigValueAtPath, parseConfigPath, @@ -36,7 +37,7 @@ export const handleConfigCommand: CommandHandler = async (params, allowTextComma ); return { shouldContinue: false }; } - if (params.cfg.commands?.config !== true) { + if (!isCommandFlagEnabled(params.cfg, "config")) { return { shouldContinue: false, reply: { @@ -190,7 +191,7 @@ export const handleDebugCommand: CommandHandler = async (params, allowTextComman ); return { shouldContinue: false }; } - if (params.cfg.commands?.debug !== true) { + if (!isCommandFlagEnabled(params.cfg, "debug")) { return { shouldContinue: false, reply: { diff --git a/src/auto-reply/reply/commands.test.ts b/src/auto-reply/reply/commands.test.ts index d0a80beb0..842aaa3ff 100644 --- a/src/auto-reply/reply/commands.test.ts +++ b/src/auto-reply/reply/commands.test.ts @@ -186,6 +186,30 @@ describe("handleCommands gating", () => { expect(result.shouldContinue).toBe(false); expect(result.reply?.text).toContain("/debug is disabled"); }); + + it("does not enable gated commands from inherited command flags", async () => { + const inheritedCommands = Object.create({ + bash: true, + config: true, + debug: true, + }) as Record; + const cfg = { + commands: inheritedCommands as never, + channels: { whatsapp: { allowFrom: ["*"] } }, + } as OpenClawConfig; + + const bashResult = await handleCommands(buildParams("/bash echo hi", cfg)); + expect(bashResult.shouldContinue).toBe(false); + expect(bashResult.reply?.text).toContain("bash is disabled"); + + const configResult = await handleCommands(buildParams("/config show", cfg)); + expect(configResult.shouldContinue).toBe(false); + expect(configResult.reply?.text).toContain("/config is disabled"); + + const debugResult = await handleCommands(buildParams("/debug show", cfg)); + expect(debugResult.shouldContinue).toBe(false); + expect(debugResult.reply?.text).toContain("/debug is disabled"); + }); }); describe("/approve command", () => { diff --git a/src/auto-reply/status.ts b/src/auto-reply/status.ts index 8148cb12e..399997ea2 100644 --- a/src/auto-reply/status.ts +++ b/src/auto-reply/status.ts @@ -11,6 +11,7 @@ import { resolveSandboxRuntimeStatus } from "../agents/sandbox.js"; import type { SkillCommandSpec } from "../agents/skills.js"; import { derivePromptTokens, normalizeUsage, type UsageLike } from "../agents/usage.js"; import { resolveChannelModelOverride } from "../channels/model-overrides.js"; +import { isCommandFlagEnabled } from "../config/commands.js"; import type { OpenClawConfig } from "../config/config.js"; import { resolveMainSessionKey, @@ -688,10 +689,10 @@ export function buildHelpMessage(cfg?: OpenClawConfig): string { lines.push(""); const optionParts = ["/think ", "/model ", "/verbose on|off"]; - if (cfg?.commands?.config === true) { + if (isCommandFlagEnabled(cfg, "config")) { optionParts.push("/config"); } - if (cfg?.commands?.debug === true) { + if (isCommandFlagEnabled(cfg, "debug")) { optionParts.push("/debug"); } lines.push("Options"); diff --git a/src/config/commands.test.ts b/src/config/commands.test.ts index eb9060767..c96c8122a 100644 --- a/src/config/commands.test.ts +++ b/src/config/commands.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from "vitest"; import { + isCommandFlagEnabled, isRestartEnabled, isNativeCommandsExplicitlyDisabled, resolveNativeCommandsEnabled, @@ -107,4 +108,27 @@ describe("isRestartEnabled", () => { expect(isRestartEnabled({ commands: { restart: true } })).toBe(true); expect(isRestartEnabled({ commands: { restart: false } })).toBe(false); }); + + it("ignores inherited restart flags", () => { + expect( + isRestartEnabled({ + commands: Object.create({ restart: false }) as Record, + }), + ).toBe(true); + }); +}); + +describe("isCommandFlagEnabled", () => { + it("requires own boolean true", () => { + expect(isCommandFlagEnabled({ commands: { bash: true } }, "bash")).toBe(true); + expect(isCommandFlagEnabled({ commands: { bash: false } }, "bash")).toBe(false); + expect( + isCommandFlagEnabled( + { + commands: Object.create({ bash: true }) as Record, + }, + "bash", + ), + ).toBe(false); + }); }); diff --git a/src/config/commands.ts b/src/config/commands.ts index c5b145d76..1be69e970 100644 --- a/src/config/commands.ts +++ b/src/config/commands.ts @@ -1,5 +1,6 @@ import { normalizeChannelId } from "../channels/plugins/index.js"; import type { ChannelId } from "../channels/plugins/types.js"; +import { isPlainObject } from "../infra/plain-object.js"; import type { NativeCommandsSetting } from "./types.js"; function resolveAutoDefault(providerId?: ChannelId): boolean { @@ -62,6 +63,21 @@ export function isNativeCommandsExplicitlyDisabled(params: { return false; } -export function isRestartEnabled(config?: { commands?: { restart?: boolean } }): boolean { - return config?.commands?.restart !== false; +function getOwnCommandFlagValue(config: { commands?: unknown } | undefined, key: string): unknown { + const { commands } = config ?? {}; + if (!isPlainObject(commands) || !Object.hasOwn(commands, key)) { + return undefined; + } + return commands[key]; +} + +export function isCommandFlagEnabled( + config: { commands?: unknown } | undefined, + key: string, +): boolean { + return getOwnCommandFlagValue(config, key) === true; +} + +export function isRestartEnabled(config?: { commands?: unknown }): boolean { + return getOwnCommandFlagValue(config, "restart") !== false; } diff --git a/src/config/runtime-overrides.test.ts b/src/config/runtime-overrides.test.ts index 2f859e10b..1dee97805 100644 --- a/src/config/runtime-overrides.test.ts +++ b/src/config/runtime-overrides.test.ts @@ -48,4 +48,32 @@ describe("runtime overrides", () => { expect(Object.keys(getConfigOverrides()).length).toBe(0); } }); + + it("blocks __proto__ keys inside override object values", () => { + const cfg = { commands: {} } as OpenClawConfig; + setConfigOverride("commands", JSON.parse('{"__proto__":{"bash":true}}')); + + const next = applyConfigOverrides(cfg); + expect(next.commands?.bash).toBeUndefined(); + expect(Object.prototype.hasOwnProperty.call(next.commands ?? {}, "bash")).toBe(false); + }); + + it("blocks constructor/prototype keys inside override object values", () => { + const cfg = { commands: {} } as OpenClawConfig; + setConfigOverride("commands", JSON.parse('{"constructor":{"prototype":{"bash":true}}}')); + + const next = applyConfigOverrides(cfg); + expect(next.commands?.bash).toBeUndefined(); + expect(Object.prototype.hasOwnProperty.call(next.commands ?? {}, "bash")).toBe(false); + }); + + it("sanitizes blocked object keys when writing overrides", () => { + setConfigOverride("commands", JSON.parse('{"__proto__":{"bash":true},"debug":true}')); + + expect(getConfigOverrides()).toEqual({ + commands: { + debug: true, + }, + }); + }); }); diff --git a/src/config/runtime-overrides.ts b/src/config/runtime-overrides.ts index 14de08304..da3a2ec25 100644 --- a/src/config/runtime-overrides.ts +++ b/src/config/runtime-overrides.ts @@ -4,15 +4,39 @@ import type { OpenClawConfig } from "./types.js"; type OverrideTree = Record; +const BLOCKED_MERGE_KEYS = new Set(["__proto__", "prototype", "constructor"]); + let overrides: OverrideTree = {}; +function sanitizeOverrideValue(value: unknown, seen = new WeakSet()): unknown { + if (Array.isArray(value)) { + return value.map((entry) => sanitizeOverrideValue(entry, seen)); + } + if (!isPlainObject(value)) { + return value; + } + if (seen.has(value)) { + return {}; + } + seen.add(value); + const sanitized: OverrideTree = {}; + for (const [key, entry] of Object.entries(value)) { + if (entry === undefined || BLOCKED_MERGE_KEYS.has(key)) { + continue; + } + sanitized[key] = sanitizeOverrideValue(entry, seen); + } + seen.delete(value); + return sanitized; +} + function mergeOverrides(base: unknown, override: unknown): unknown { if (!isPlainObject(base) || !isPlainObject(override)) { return override; } const next: OverrideTree = { ...base }; for (const [key, value] of Object.entries(override)) { - if (value === undefined) { + if (value === undefined || BLOCKED_MERGE_KEYS.has(key)) { continue; } next[key] = mergeOverrides((base as OverrideTree)[key], value); @@ -39,7 +63,7 @@ export function setConfigOverride( if (!parsed.ok || !parsed.path) { return { ok: false, error: parsed.error ?? "Invalid path." }; } - setConfigValueAtPath(overrides, parsed.path, value); + setConfigValueAtPath(overrides, parsed.path, sanitizeOverrideValue(value)); return { ok: true }; } From ede496fa1a32e1a12e7174b639450219030929d9 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 12:52:45 +0100 Subject: [PATCH 0157/1007] docs: clarify trusted-host assumption for tokenless tailscale --- docs/gateway/configuration-reference.md | 2 +- docs/gateway/remote.md | 3 ++- docs/gateway/security/index.md | 5 +++++ docs/gateway/tailscale.md | 3 +++ docs/help/faq.md | 2 +- docs/platforms/digitalocean.md | 2 +- docs/web/control-ui.md | 2 ++ docs/web/dashboard.md | 2 +- docs/web/index.md | 3 ++- 9 files changed, 18 insertions(+), 6 deletions(-) diff --git a/docs/gateway/configuration-reference.md b/docs/gateway/configuration-reference.md index 547083886..699d557e4 100644 --- a/docs/gateway/configuration-reference.md +++ b/docs/gateway/configuration-reference.md @@ -2060,7 +2060,7 @@ See [Plugins](/tools/plugin). - **Auth**: required by default. Non-loopback binds require a shared token/password. Onboarding wizard generates a token by default. - `auth.mode: "none"`: explicit no-auth mode. Use only for trusted local loopback setups; this is intentionally not offered by onboarding prompts. - `auth.mode: "trusted-proxy"`: delegate auth to an identity-aware reverse proxy and trust identity headers from `gateway.trustedProxies` (see [Trusted Proxy Auth](/gateway/trusted-proxy-auth)). -- `auth.allowTailscale`: when `true`, Tailscale Serve identity headers satisfy auth (verified via `tailscale whois`). Defaults to `true` when `tailscale.mode = "serve"`. +- `auth.allowTailscale`: when `true`, Tailscale Serve identity headers satisfy auth (verified via `tailscale whois`). This tokenless flow assumes the gateway host is trusted. Defaults to `true` when `tailscale.mode = "serve"`. - `auth.rateLimit`: optional failed-auth limiter. Applies per client IP and per auth scope (shared-secret and device-token are tracked independently). Blocked attempts return `429` + `Retry-After`. - `auth.rateLimit.exemptLoopback` defaults to `true`; set `false` when you intentionally want localhost traffic rate-limited too (for test setups or strict proxy deployments). - `tailscale.mode`: `serve` (tailnet only, loopback bind) or `funnel` (public, requires auth). diff --git a/docs/gateway/remote.md b/docs/gateway/remote.md index fa6a08b42..f95ecd90a 100644 --- a/docs/gateway/remote.md +++ b/docs/gateway/remote.md @@ -123,7 +123,8 @@ Short version: **keep the Gateway loopback-only** unless you’re sure you need - `gateway.remote.token` is **only** for remote CLI calls — it does **not** enable local auth. - `gateway.remote.tlsFingerprint` pins the remote TLS cert when using `wss://`. - **Tailscale Serve** can authenticate via identity headers when `gateway.auth.allowTailscale: true`. - Set it to `false` if you want tokens/passwords instead. + This tokenless flow assumes the gateway host is trusted. Set it to `false` if you + want tokens/passwords instead. - Treat browser control like operator access: tailnet-only + deliberate node pairing. Deep dive: [Security](/gateway/security). diff --git a/docs/gateway/security/index.md b/docs/gateway/security/index.md index 4d0ba9005..ee873a0f0 100644 --- a/docs/gateway/security/index.md +++ b/docs/gateway/security/index.md @@ -528,6 +528,11 @@ and matching it to the header. This only triggers for requests that hit loopback and include `x-forwarded-for`, `x-forwarded-proto`, and `x-forwarded-host` as injected by Tailscale. +**Trust assumption:** tokenless Serve auth assumes the gateway host is trusted. +Do not treat this as protection against hostile same-host processes. If untrusted +local code may run on the gateway host, disable `gateway.auth.allowTailscale` +and require token/password auth. + **Security rule:** do not forward these headers from your own reverse proxy. If you terminate TLS or proxy in front of the gateway, disable `gateway.auth.allowTailscale` and use token/password auth (or [Trusted Proxy Auth](/gateway/trusted-proxy-auth)) instead. diff --git a/docs/gateway/tailscale.md b/docs/gateway/tailscale.md index 3a12b7fe1..8a195d6d3 100644 --- a/docs/gateway/tailscale.md +++ b/docs/gateway/tailscale.md @@ -33,6 +33,9 @@ daemon (`tailscale whois`) and matching it to the header before accepting it. OpenClaw only treats a request as Serve when it arrives from loopback with Tailscale’s `x-forwarded-for`, `x-forwarded-proto`, and `x-forwarded-host` headers. +This tokenless flow assumes the gateway host is trusted. If untrusted local code +may run on the same host, disable `gateway.auth.allowTailscale` and require +token/password auth instead. To require explicit credentials, set `gateway.auth.allowTailscale: false` or force `gateway.auth.mode: "password"`. diff --git a/docs/help/faq.md b/docs/help/faq.md index 9e61b5957..6958fec32 100644 --- a/docs/help/faq.md +++ b/docs/help/faq.md @@ -348,7 +348,7 @@ The wizard opens your browser with a clean (non-tokenized) dashboard URL right a **Not on localhost:** -- **Tailscale Serve** (recommended): keep bind loopback, run `openclaw gateway --tailscale serve`, open `https:///`. If `gateway.auth.allowTailscale` is `true`, identity headers satisfy auth (no token). +- **Tailscale Serve** (recommended): keep bind loopback, run `openclaw gateway --tailscale serve`, open `https:///`. If `gateway.auth.allowTailscale` is `true`, identity headers satisfy auth (no token, assumes trusted gateway host). - **Tailnet bind**: run `openclaw gateway --bind tailnet --token ""`, open `http://:18789/`, paste token in dashboard settings. - **SSH tunnel**: `ssh -N -L 18789:127.0.0.1:18789 user@host` then open `http://127.0.0.1:18789/` and paste the token in Control UI settings. diff --git a/docs/platforms/digitalocean.md b/docs/platforms/digitalocean.md index 17012388b..4cd608770 100644 --- a/docs/platforms/digitalocean.md +++ b/docs/platforms/digitalocean.md @@ -132,7 +132,7 @@ Open: `https:///` Notes: -- Serve keeps the Gateway loopback-only and authenticates via Tailscale identity headers. +- Serve keeps the Gateway loopback-only and authenticates via Tailscale identity headers (tokenless auth assumes trusted gateway host). - To require token/password instead, set `gateway.auth.allowTailscale: false` or use `gateway.auth.mode: "password"`. **Option C: Tailnet bind (no Serve)** diff --git a/docs/web/control-ui.md b/docs/web/control-ui.md index fad37a47a..5050236bc 100644 --- a/docs/web/control-ui.md +++ b/docs/web/control-ui.md @@ -124,6 +124,8 @@ verifies the identity by resolving the `x-forwarded-for` address with request hits loopback with Tailscale’s `x-forwarded-*` headers. Set `gateway.auth.allowTailscale: false` (or force `gateway.auth.mode: "password"`) if you want to require a token/password even for Serve traffic. +Tokenless Serve auth assumes the gateway host is trusted. If untrusted local +code may run on that host, require token/password auth. ### Bind to tailnet + token diff --git a/docs/web/dashboard.md b/docs/web/dashboard.md index 5c33455f0..b4432a598 100644 --- a/docs/web/dashboard.md +++ b/docs/web/dashboard.md @@ -37,7 +37,7 @@ Prefer localhost, Tailscale Serve, or an SSH tunnel. - **Localhost**: open `http://127.0.0.1:18789/`. - **Token source**: `gateway.auth.token` (or `OPENCLAW_GATEWAY_TOKEN`); the UI stores a copy in localStorage after you connect. -- **Not localhost**: use Tailscale Serve (tokenless if `gateway.auth.allowTailscale: true`), tailnet bind with a token, or an SSH tunnel. See [Web surfaces](/web). +- **Not localhost**: use Tailscale Serve (tokenless if `gateway.auth.allowTailscale: true`, assumes trusted gateway host), tailnet bind with a token, or an SSH tunnel. See [Web surfaces](/web). ## If you see “unauthorized” / 1008 diff --git a/docs/web/index.md b/docs/web/index.md index 3ec00abad..6d1b40990 100644 --- a/docs/web/index.md +++ b/docs/web/index.md @@ -104,7 +104,8 @@ Open: - With Serve, Tailscale identity headers can satisfy auth when `gateway.auth.allowTailscale` is `true` (no token/password required). Set `gateway.auth.allowTailscale: false` to require explicit credentials. See - [Tailscale](/gateway/tailscale) and [Security](/gateway/security). + [Tailscale](/gateway/tailscale) and [Security](/gateway/security). This + tokenless flow assumes the gateway host is trusted. - `gateway.tailscale.mode: "funnel"` requires `gateway.auth.mode: "password"` (shared password). ## Building the UI From 810218756dc6329fb4aa02cec36a730e96875222 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 12:53:07 +0100 Subject: [PATCH 0158/1007] docs(security): clarify trusted-host deployment assumptions --- SECURITY.md | 9 +++++++++ docs/cli/security.md | 1 + docs/gateway/security/index.md | 11 +++++++++++ 3 files changed, 21 insertions(+) diff --git a/SECURITY.md b/SECURITY.md index d02b9fb80..4b51daeaa 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -47,8 +47,17 @@ When patching a GHSA via `gh api`, include `X-GitHub-Api-Version: 2022-11-28` (o - Public Internet Exposure - Using OpenClaw in ways that the docs recommend not to +- Deployments where mutually untrusted/adversarial operators share one gateway host and config - Prompt injection attacks +## Deployment Assumptions + +OpenClaw security guidance assumes: + +- The host where OpenClaw runs is within a trusted OS/admin boundary. +- Anyone who can modify `~/.openclaw` state/config (including `openclaw.json`) is effectively a trusted operator. +- A single Gateway shared by mutually untrusted people is **not a recommended setup**. Use separate gateways (or at minimum separate OS users/hosts) per trust boundary. + ## Plugin Trust Boundary Plugins/extensions are loaded **in-process** with the Gateway and are treated as trusted code. diff --git a/docs/cli/security.md b/docs/cli/security.md index fee202300..129f004c7 100644 --- a/docs/cli/security.md +++ b/docs/cli/security.md @@ -24,6 +24,7 @@ openclaw security audit --json ``` The audit warns when multiple DM senders share the main session and recommends **secure DM mode**: `session.dmScope="per-channel-peer"` (or `per-account-channel-peer` for multi-account channels) for shared inboxes. +This is for cooperative/shared inbox hardening. A single Gateway shared by mutually untrusted/adversarial operators is not a recommended setup; split trust boundaries with separate gateways (or separate OS users/hosts). It also warns when small models (`<=300B`) are used without sandboxing and with web/browser tools enabled. For webhook ingress, it warns when `hooks.defaultSessionKey` is unset, when request `sessionKey` overrides are enabled, and when overrides are enabled without `hooks.allowedSessionKeyPrefixes`. It also warns when sandbox Docker settings are configured while sandbox mode is off, when `gateway.nodes.denyCommands` uses ineffective pattern-like/unknown entries, when global `tools.profile="minimal"` is overridden by agent tool profiles, and when installed extension plugin tools may be reachable under permissive tool policy. diff --git a/docs/gateway/security/index.md b/docs/gateway/security/index.md index ee873a0f0..6b7eadbb6 100644 --- a/docs/gateway/security/index.md +++ b/docs/gateway/security/index.md @@ -30,6 +30,14 @@ OpenClaw is both a product and an experiment: you’re wiring frontier-model beh Start with the smallest access that still works, then widen it as you gain confidence. +## Deployment assumption (important) + +OpenClaw assumes the host and config boundary are trusted: + +- If someone can modify Gateway host state/config (`~/.openclaw`, including `openclaw.json`), treat them as a trusted operator. +- Running one Gateway for multiple mutually untrusted/adversarial operators is **not a recommended setup**. +- For mixed-trust teams, split trust boundaries with separate gateways (or at minimum separate OS users/hosts). + ## Hardened baseline in 60 seconds Use this baseline first, then selectively re-enable tools per trusted agent: @@ -66,6 +74,7 @@ If more than one person can DM your bot: - Set `session.dmScope: "per-channel-peer"` (or `"per-account-channel-peer"` for multi-account channels). - Keep `dmPolicy: "pairing"` or strict allowlists. - Never combine shared DMs with broad tool access. +- This hardens cooperative/shared inboxes, but is not designed as hostile co-tenant isolation when users share host/config write access. ### What the audit checks (high level) @@ -285,6 +294,8 @@ By default, OpenClaw routes **all DMs into the main session** so your assistant This prevents cross-user context leakage while keeping group chats isolated. +This is a messaging-context boundary, not a host-admin boundary. If users are mutually adversarial and share the same Gateway host/config, run separate gateways per trust boundary instead. + ### Secure DM mode (recommended) Treat the snippet above as **secure DM mode**: From 99048dbec2cc6ce7f8825383f5afdede27dbf223 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 12:55:18 +0100 Subject: [PATCH 0159/1007] fix(gateway): align insecure-auth toggle messaging --- docs/gateway/protocol.md | 4 ++-- docs/gateway/security/index.md | 8 ++++---- docs/web/control-ui.md | 20 ++++++++++++++++--- src/config/schema.help.ts | 2 +- src/config/schema.labels.ts | 2 +- src/config/types.gateway.ts | 6 +++++- .../server/ws-connection/message-handler.ts | 6 +++--- src/security/audit.ts | 4 ++-- 8 files changed, 35 insertions(+), 17 deletions(-) diff --git a/docs/gateway/protocol.md b/docs/gateway/protocol.md index ccb069ab2..fde213bb1 100644 --- a/docs/gateway/protocol.md +++ b/docs/gateway/protocol.md @@ -204,8 +204,8 @@ The Gateway treats these as **claims** and enforces server-side allowlists. - **Local** connects include loopback and the gateway host’s own tailnet address (so same‑host tailnet binds can still auto‑approve). - All WS clients must include `device` identity during `connect` (operator + node). - Control UI can omit it **only** when `gateway.controlUi.allowInsecureAuth` is enabled - (or `gateway.controlUi.dangerouslyDisableDeviceAuth` for break-glass use). + Control UI can omit it **only** when `gateway.controlUi.dangerouslyDisableDeviceAuth` + is enabled for break-glass use. - Non-local connections must sign the server-provided `connect.challenge` nonce. ## TLS + pinning diff --git a/docs/gateway/security/index.md b/docs/gateway/security/index.md index 6b7eadbb6..517cbaa68 100644 --- a/docs/gateway/security/index.md +++ b/docs/gateway/security/index.md @@ -127,7 +127,7 @@ High-signal `checkId` values you will most likely see in real deployments (not e | `gateway.http.no_auth` | warn/critical | Gateway HTTP APIs reachable with `auth.mode="none"` | `gateway.auth.mode`, `gateway.http.endpoints.*` | no | | `gateway.tools_invoke_http.dangerous_allow` | warn/critical | Re-enables dangerous tools over HTTP API | `gateway.tools.allow` | no | | `gateway.tailscale_funnel` | critical | Public internet exposure | `gateway.tailscale.mode` | no | -| `gateway.control_ui.insecure_auth` | critical | Token-only over HTTP, no device identity | `gateway.controlUi.allowInsecureAuth` | no | +| `gateway.control_ui.insecure_auth` | critical | Insecure-auth toggle enabled | `gateway.controlUi.allowInsecureAuth` | no | | `gateway.control_ui.device_auth_disabled` | critical | Disables device identity check | `gateway.controlUi.dangerouslyDisableDeviceAuth` | no | | `hooks.token_too_short` | warn | Easier brute force on hook ingress | `hooks.token` | no | | `hooks.request_session_key_enabled` | warn/critical | External caller can choose sessionKey | `hooks.allowRequestSessionKey` | no | @@ -143,9 +143,9 @@ High-signal `checkId` values you will most likely see in real deployments (not e ## Control UI over HTTP The Control UI needs a **secure context** (HTTPS or localhost) to generate device -identity. If you enable `gateway.controlUi.allowInsecureAuth`, the UI falls back -to **token-only auth** and skips device pairing when device identity is omitted. This is a security -downgrade—prefer HTTPS (Tailscale Serve) or open the UI on `127.0.0.1`. +identity. `gateway.controlUi.allowInsecureAuth` does **not** bypass secure-context, +device-identity, or device-pairing checks. Prefer HTTPS (Tailscale Serve) or open +the UI on `127.0.0.1`. For break-glass scenarios only, `gateway.controlUi.dangerouslyDisableDeviceAuth` disables device identity checks entirely. This is a severe security downgrade; diff --git a/docs/web/control-ui.md b/docs/web/control-ui.md index 5050236bc..4a3decb7e 100644 --- a/docs/web/control-ui.md +++ b/docs/web/control-ui.md @@ -150,7 +150,7 @@ OpenClaw **blocks** Control UI connections without device identity. - `https:///` (Serve) - `http://127.0.0.1:18789/` (on the gateway host) -**Downgrade example (token-only over HTTP):** +**Insecure-auth toggle behavior:** ```json5 { @@ -162,8 +162,22 @@ OpenClaw **blocks** Control UI connections without device identity. } ``` -This disables device identity + pairing for the Control UI (even on HTTPS). Use -only if you trust the network. +`allowInsecureAuth` does not bypass Control UI device identity or pairing checks. + +**Break-glass only:** + +```json5 +{ + gateway: { + controlUi: { dangerouslyDisableDeviceAuth: true }, + bind: "tailnet", + auth: { mode: "token", token: "replace-me" }, + }, +} +``` + +`dangerouslyDisableDeviceAuth` disables Control UI device identity checks and is a +severe security downgrade. Revert quickly after emergency use. See [Tailscale](/gateway/tailscale) for HTTPS setup guidance. diff --git a/src/config/schema.help.ts b/src/config/schema.help.ts index 95520da20..1c7dffda8 100644 --- a/src/config/schema.help.ts +++ b/src/config/schema.help.ts @@ -33,7 +33,7 @@ export const FIELD_HELP: Record = { "gateway.controlUi.allowedOrigins": "Allowed browser origins for Control UI/WebChat websocket connections (full origins only, e.g. https://control.example.com).", "gateway.controlUi.allowInsecureAuth": - "Allow Control UI auth over insecure HTTP (token-only; not recommended).", + "Insecure-auth toggle; Control UI still enforces secure context + device identity unless dangerouslyDisableDeviceAuth is enabled.", "gateway.controlUi.dangerouslyDisableDeviceAuth": "DANGEROUS. Disable Control UI device identity checks (token/password only).", "gateway.http.endpoints.chatCompletions.enabled": diff --git a/src/config/schema.labels.ts b/src/config/schema.labels.ts index cd8020b4d..2a6bf2dbc 100644 --- a/src/config/schema.labels.ts +++ b/src/config/schema.labels.ts @@ -114,7 +114,7 @@ export const FIELD_LABELS: Record = { "gateway.controlUi.basePath": "Control UI Base Path", "gateway.controlUi.root": "Control UI Assets Root", "gateway.controlUi.allowedOrigins": "Control UI Allowed Origins", - "gateway.controlUi.allowInsecureAuth": "Allow Insecure Control UI Auth", + "gateway.controlUi.allowInsecureAuth": "Insecure Control UI Auth Toggle", "gateway.controlUi.dangerouslyDisableDeviceAuth": "Dangerously Disable Control UI Device Auth", "gateway.http.endpoints.chatCompletions.enabled": "OpenAI Chat Completions Endpoint", "gateway.reload.mode": "Config Reload Mode", diff --git a/src/config/types.gateway.ts b/src/config/types.gateway.ts index 5015286e8..182806314 100644 --- a/src/config/types.gateway.ts +++ b/src/config/types.gateway.ts @@ -70,7 +70,11 @@ export type GatewayControlUiConfig = { root?: string; /** Allowed browser origins for Control UI/WebChat websocket connections. */ allowedOrigins?: string[]; - /** Allow token-only auth over insecure HTTP (default: false). */ + /** + * Insecure-auth toggle. + * Control UI still requires secure context + device identity unless + * dangerouslyDisableDeviceAuth is enabled. + */ allowInsecureAuth?: boolean; /** DANGEROUS: Disable device identity checks for the Control UI (default: false). */ dangerouslyDisableDeviceAuth?: boolean; diff --git a/src/gateway/server/ws-connection/message-handler.ts b/src/gateway/server/ws-connection/message-handler.ts index 2f0550854..40dcc54e6 100644 --- a/src/gateway/server/ws-connection/message-handler.ts +++ b/src/gateway/server/ws-connection/message-handler.ts @@ -341,8 +341,7 @@ export function attachGatewayWsMessageHandler(params: { isControlUi && configSnapshot.gateway?.controlUi?.allowInsecureAuth === true; const disableControlUiDeviceAuth = isControlUi && configSnapshot.gateway?.controlUi?.dangerouslyDisableDeviceAuth === true; - // `allowInsecureAuth` is retained for compatibility, but must not bypass - // secure-context/device-auth requirements. + // `allowInsecureAuth` must not bypass secure-context/device-auth requirements. const allowControlUiBypass = disableControlUiDeviceAuth; const device = disableControlUiDeviceAuth ? null : deviceRaw; @@ -429,7 +428,8 @@ export function attachGatewayWsMessageHandler(params: { const canSkipDevice = sharedAuthOk; if (isControlUi && !allowControlUiBypass) { - const errorMessage = "control ui requires HTTPS or localhost (secure context)"; + const errorMessage = + "control ui requires device identity (use HTTPS or localhost secure context)"; markHandshakeFailure("control-ui-insecure-auth", { insecureAuthConfigured: allowInsecureControlUi, }); diff --git a/src/security/audit.ts b/src/security/audit.ts index 7d79c18a3..294110158 100644 --- a/src/security/audit.ts +++ b/src/security/audit.ts @@ -349,9 +349,9 @@ function collectGatewayConfigFindings( findings.push({ checkId: "gateway.control_ui.insecure_auth", severity: "critical", - title: "Control UI allows insecure HTTP auth", + title: "Control UI insecure auth toggle enabled", detail: - "gateway.controlUi.allowInsecureAuth=true is a legacy insecure-auth toggle; Control UI still enforces secure context and device identity unless dangerouslyDisableDeviceAuth is enabled.", + "gateway.controlUi.allowInsecureAuth=true does not bypass secure context or device identity checks; only dangerouslyDisableDeviceAuth disables Control UI device identity checks.", remediation: "Disable it or switch to HTTPS (Tailscale Serve) or localhost.", }); } From 2b76901f35c847f565203d9481709f4510a8db3e Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 12:57:09 +0100 Subject: [PATCH 0160/1007] docs(changelog): credit reporter for control-ui auth hardening --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e625e71b4..bb464099b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,7 +32,7 @@ Docs: https://docs.openclaw.ai - BlueBubbles/Security (optional beta iMessage plugin): require webhook token authentication for all BlueBubbles webhook requests (including loopback/proxied setups), removing passwordless webhook fallback behavior. Thanks @zpbrent. - iOS/Security: force `https://` for non-loopback manual gateway hosts during iOS onboarding to block insecure remote transport URLs. (#21969) Thanks @mbelinky. - Gateway/Security: remove shared-IP fallback for canvas endpoints and require token or session capability for canvas access. Thanks @thewilloftheshadow. -- Gateway/Security: require secure context and paired-device checks for Control UI auth even when `gateway.controlUi.allowInsecureAuth` is set, and align audit messaging with the hardened behavior. (#20684) thanks @coygeek. +- Gateway/Security: require secure context and paired-device checks for Control UI auth even when `gateway.controlUi.allowInsecureAuth` is set, and align audit messaging with the hardened behavior. This ships in the next npm release. (#20684) Thanks @coygeek and @Vasco0x4 for reporting. - Docker/Security: run E2E and install-sh test images as non-root by adding appuser directives. Thanks @thewilloftheshadow. - Skills/Security: sanitize skill env overrides to block unsafe runtime injection variables and only allow sensitive keys when declared in skill metadata, with warnings for suspicious values. Thanks @thewilloftheshadow. - Security/Commands: block prototype-key injection in runtime `/debug` overrides and require own-property checks for gated command flags (`bash`, `config`, `debug`) so inherited prototype values cannot enable privileged commands. Thanks @tdjackey for reporting. From 084f6210255da3ad3f2129ccfcfc84a094e10094 Mon Sep 17 00:00:00 2001 From: Aether AI Agent Date: Wed, 18 Feb 2026 15:27:57 +1100 Subject: [PATCH 0161/1007] =?UTF-8?q?fix(security):=20OC-65=20prevent=20co?= =?UTF-8?q?mpaction=20counter=20reset=20to=20enforce=20context=20exhaustio?= =?UTF-8?q?n=20limit=20=E2=80=94=20Aether=20AI=20Agent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the `overflowCompactionAttempts = 0` reset inside the inner loop's tool-result-truncation branch. The counter was being zeroed on each truncation cycle, allowing prompt-injection attacks to bypass the MAX_OVERFLOW_COMPACTION_ATTEMPTS guard and trigger unbounded auto-compaction, exhausting context window resources (DoS). CWE-400 / GHSA-x2g4-7mj7-2hhj --- src/agents/pi-embedded-runner/run.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/agents/pi-embedded-runner/run.ts b/src/agents/pi-embedded-runner/run.ts index af4fa2886..81f26a479 100644 --- a/src/agents/pi-embedded-runner/run.ts +++ b/src/agents/pi-embedded-runner/run.ts @@ -714,8 +714,8 @@ export async function runEmbeddedPiAgent( log.info( `[context-overflow-recovery] Truncated ${truncResult.truncatedCount} tool result(s); retrying prompt`, ); - // Session is now smaller; allow compaction retries again. - overflowCompactionAttempts = 0; + // Do NOT reset overflowCompactionAttempts here — the global cap must remain + // enforced across all iterations to prevent unbounded compaction cycles (OC-65). continue; } log.warn( From b577228d6ba3a924c2b788100779b6098ea70b21 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 12:58:44 +0100 Subject: [PATCH 0162/1007] test(security): add overflow compaction truncation-budget regression --- CHANGELOG.md | 1 + .../run.overflow-compaction.test.ts | 71 ++++++++++++++++++- 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb464099b..2e34dbf87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ Docs: https://docs.openclaw.ai ### Fixes +- Security/Agents: keep overflow compaction retry budgeting global across tool-result truncation recovery so successful truncation cannot reset the overflow retry counter and amplify retry/cost cycles. This ships in the next npm release. Thanks @aether-ai-agent for reporting. - BlueBubbles/Security (optional beta iMessage plugin): require webhook token authentication for all BlueBubbles webhook requests (including loopback/proxied setups), removing passwordless webhook fallback behavior. Thanks @zpbrent. - iOS/Security: force `https://` for non-loopback manual gateway hosts during iOS onboarding to block insecure remote transport URLs. (#21969) Thanks @mbelinky. - Gateway/Security: remove shared-IP fallback for canvas endpoints and require token or session capability for canvas access. Thanks @thewilloftheshadow. diff --git a/src/agents/pi-embedded-runner/run.overflow-compaction.test.ts b/src/agents/pi-embedded-runner/run.overflow-compaction.test.ts index 6aac2ea77..1dc794baa 100644 --- a/src/agents/pi-embedded-runner/run.overflow-compaction.test.ts +++ b/src/agents/pi-embedded-runner/run.overflow-compaction.test.ts @@ -2,11 +2,20 @@ import "./run.overflow-compaction.mocks.shared.js"; import { beforeEach, describe, expect, it, vi } from "vitest"; import { compactEmbeddedPiSessionDirect } from "./compact.js"; import { runEmbeddedPiAgent } from "./run.js"; -import { mockOverflowRetrySuccess } from "./run.overflow-compaction.fixture.js"; +import { makeAttemptResult, mockOverflowRetrySuccess } from "./run.overflow-compaction.fixture.js"; import { runEmbeddedAttempt } from "./run/attempt.js"; +import type { EmbeddedRunAttemptResult } from "./run/types.js"; +import { + sessionLikelyHasOversizedToolResults, + truncateOversizedToolResultsInSession, +} from "./tool-result-truncation.js"; const mockedRunEmbeddedAttempt = vi.mocked(runEmbeddedAttempt); const mockedCompactDirect = vi.mocked(compactEmbeddedPiSessionDirect); +const mockedSessionLikelyHasOversizedToolResults = vi.mocked(sessionLikelyHasOversizedToolResults); +const mockedTruncateOversizedToolResultsInSession = vi.mocked( + truncateOversizedToolResultsInSession, +); describe("runEmbeddedPiAgent overflow compaction trigger routing", () => { beforeEach(() => { @@ -37,4 +46,64 @@ describe("runEmbeddedPiAgent overflow compaction trigger routing", () => { }), ); }); + + it("does not reset compaction attempt budget after successful tool-result truncation", async () => { + const overflowError = new Error("request_too_large: Request size exceeds model context window"); + + mockedRunEmbeddedAttempt + .mockResolvedValueOnce( + makeAttemptResult({ + promptError: overflowError, + messagesSnapshot: [ + { + role: "assistant", + content: "big tool output", + } as unknown as EmbeddedRunAttemptResult["messagesSnapshot"][number], + ], + }), + ) + .mockResolvedValueOnce(makeAttemptResult({ promptError: overflowError })) + .mockResolvedValueOnce(makeAttemptResult({ promptError: overflowError })) + .mockResolvedValueOnce(makeAttemptResult({ promptError: overflowError })) + // Keep one extra mocked response so legacy reset behavior does not crash the test. + .mockResolvedValueOnce(makeAttemptResult({ promptError: overflowError })); + + mockedCompactDirect + .mockResolvedValueOnce({ + ok: false, + compacted: false, + reason: "nothing to compact", + }) + .mockResolvedValueOnce({ + ok: true, + compacted: true, + result: { summary: "Compacted 2", firstKeptEntryId: "entry-5", tokensBefore: 160000 }, + }) + .mockResolvedValueOnce({ + ok: true, + compacted: true, + result: { summary: "Compacted 3", firstKeptEntryId: "entry-7", tokensBefore: 140000 }, + }); + + mockedSessionLikelyHasOversizedToolResults.mockReturnValue(true); + mockedTruncateOversizedToolResultsInSession.mockResolvedValueOnce({ + truncated: true, + truncatedCount: 1, + }); + + const result = await runEmbeddedPiAgent({ + sessionId: "test-session", + sessionKey: "test-key", + sessionFile: "/tmp/session.json", + workspaceDir: "/tmp/workspace", + prompt: "hello", + timeoutMs: 30000, + runId: "run-1", + }); + + expect(mockedCompactDirect).toHaveBeenCalledTimes(3); + expect(mockedTruncateOversizedToolResultsInSession).toHaveBeenCalledTimes(1); + expect(mockedRunEmbeddedAttempt).toHaveBeenCalledTimes(4); + expect(result.meta.error?.kind).toBe("context_overflow"); + }); }); From 073651fb570a9ef555c44e4f1ea54b3d78d84ec2 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 12:59:51 +0100 Subject: [PATCH 0163/1007] docs: add sponsors section to README --- README.md | 18 ++++++++++++++++++ docs/assets/sponsors/blacksmith.svg | 14 ++++++++++++++ docs/assets/sponsors/openai.svg | 3 +++ 3 files changed, 35 insertions(+) create mode 100644 docs/assets/sponsors/blacksmith.svg create mode 100644 docs/assets/sponsors/openai.svg diff --git a/README.md b/README.md index 9fa670c01..9bab8d035 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,24 @@ The wizard guides you step by step through setting up the gateway, workspace, ch Works with npm, pnpm, or bun. New install? Start here: [Getting started](https://docs.openclaw.ai/start/getting-started) +## Sponsors + + + + + + + +
+ + OpenAI + + + + Blacksmith + +
+ **Subscriptions (OAuth):** - **[Anthropic](https://www.anthropic.com/)** (Claude Pro/Max) diff --git a/docs/assets/sponsors/blacksmith.svg b/docs/assets/sponsors/blacksmith.svg new file mode 100644 index 000000000..5bb1bc2e7 --- /dev/null +++ b/docs/assets/sponsors/blacksmith.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/docs/assets/sponsors/openai.svg b/docs/assets/sponsors/openai.svg new file mode 100644 index 000000000..1c3491b9b --- /dev/null +++ b/docs/assets/sponsors/openai.svg @@ -0,0 +1,3 @@ + + + From 6aa11f30924ee08d0e6f36ede4877e44c553b984 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 12:59:54 +0100 Subject: [PATCH 0164/1007] fix(acp): harden resource link metadata formatting --- src/acp/client.test.ts | 24 ++++++++++++++++++++++++ src/acp/event-mapper.ts | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/src/acp/client.test.ts b/src/acp/client.test.ts index e258942f2..2ed1e3823 100644 --- a/src/acp/client.test.ts +++ b/src/acp/client.test.ts @@ -153,6 +153,30 @@ describe("acp event mapper", () => { expect(text).toBe("Hello\nFile contents\n[Resource link (Spec)] https://example.com"); }); + it("escapes control and delimiter characters in resource link metadata", () => { + const text = extractTextFromPrompt([ + { + type: "resource_link", + uri: "https://example.com/path?\nq=1\u2028tail", + name: "Spec", + title: "Spec)]\nIGNORE\n[system]", + }, + ]); + + expect(text).toContain("[Resource link (Spec\\)\\]\\nIGNORE\\n\\[system\\])]"); + expect(text).toContain("https://example.com/path?\\nq=1\\u2028tail"); + expect(text).not.toContain("IGNORE\n"); + }); + + it("keeps full resource link title content without truncation", () => { + const longTitle = "x".repeat(512); + const text = extractTextFromPrompt([ + { type: "resource_link", uri: "https://example.com", name: "Spec", title: longTitle }, + ]); + + expect(text).toContain(`(${longTitle})`); + }); + it("counts newline separators toward prompt byte limits", () => { expect(() => extractTextFromPrompt( diff --git a/src/acp/event-mapper.ts b/src/acp/event-mapper.ts index 83f4ba07b..bf31247d6 100644 --- a/src/acp/event-mapper.ts +++ b/src/acp/event-mapper.ts @@ -6,6 +6,35 @@ export type GatewayAttachment = { content: string; }; +function escapeInlineControlChars(value: string): string { + const withoutNull = value.replaceAll("\0", "\\0"); + return withoutNull.replace(/[\r\n\t\v\f\u2028\u2029]/g, (char) => { + switch (char) { + case "\r": + return "\\r"; + case "\n": + return "\\n"; + case "\t": + return "\\t"; + case "\v": + return "\\v"; + case "\f": + return "\\f"; + case "\u2028": + return "\\u2028"; + case "\u2029": + return "\\u2029"; + default: + return char; + } + }); +} + +function escapeResourceTitle(value: string): string { + // Keep title content, but escape characters that can break the resource-link annotation shape. + return escapeInlineControlChars(value).replace(/[()[\]]/g, (char) => `\\${char}`); +} + export function extractTextFromPrompt(prompt: ContentBlock[], maxBytes?: number): string { const parts: string[] = []; // Track accumulated byte count per block to catch oversized prompts before full concatenation @@ -20,8 +49,8 @@ export function extractTextFromPrompt(prompt: ContentBlock[], maxBytes?: number) blockText = resource.text; } } else if (block.type === "resource_link") { - const title = block.title ? ` (${block.title})` : ""; - const uri = block.uri ?? ""; + const title = block.title ? ` (${escapeResourceTitle(block.title)})` : ""; + const uri = block.uri ? escapeInlineControlChars(block.uri) : ""; blockText = uri ? `[Resource link${title}] ${uri}` : `[Resource link${title}]`; } if (blockText !== undefined) { From 356d61aacfa5b0f1d5830716ec59d70682a3e7b8 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:03:08 +0100 Subject: [PATCH 0165/1007] fix(gateway): scope tailscale tokenless auth to websocket --- docs/gateway/configuration-reference.md | 2 +- docs/gateway/remote.md | 7 +- docs/gateway/security/index.md | 6 +- docs/gateway/tailscale.md | 4 +- docs/help/faq.md | 2 +- docs/platforms/digitalocean.md | 2 +- docs/web/control-ui.md | 2 +- docs/web/dashboard.md | 2 +- docs/web/index.md | 5 +- src/gateway/auth.test.ts | 25 +++++- src/gateway/auth.ts | 8 +- src/gateway/http-auth-helpers.test.ts | 79 +++++++++++++++++++ src/gateway/http-auth-helpers.ts | 1 + src/gateway/server-http.ts | 2 + .../server/ws-connection/message-handler.ts | 1 + src/gateway/tools-invoke-http.ts | 1 + 16 files changed, 134 insertions(+), 15 deletions(-) create mode 100644 src/gateway/http-auth-helpers.test.ts diff --git a/docs/gateway/configuration-reference.md b/docs/gateway/configuration-reference.md index 699d557e4..c3f8cb72f 100644 --- a/docs/gateway/configuration-reference.md +++ b/docs/gateway/configuration-reference.md @@ -2060,7 +2060,7 @@ See [Plugins](/tools/plugin). - **Auth**: required by default. Non-loopback binds require a shared token/password. Onboarding wizard generates a token by default. - `auth.mode: "none"`: explicit no-auth mode. Use only for trusted local loopback setups; this is intentionally not offered by onboarding prompts. - `auth.mode: "trusted-proxy"`: delegate auth to an identity-aware reverse proxy and trust identity headers from `gateway.trustedProxies` (see [Trusted Proxy Auth](/gateway/trusted-proxy-auth)). -- `auth.allowTailscale`: when `true`, Tailscale Serve identity headers satisfy auth (verified via `tailscale whois`). This tokenless flow assumes the gateway host is trusted. Defaults to `true` when `tailscale.mode = "serve"`. +- `auth.allowTailscale`: when `true`, Tailscale Serve identity headers can satisfy Control UI/WebSocket auth (verified via `tailscale whois`); HTTP API endpoints still require token/password auth. This tokenless flow assumes the gateway host is trusted. Defaults to `true` when `tailscale.mode = "serve"`. - `auth.rateLimit`: optional failed-auth limiter. Applies per client IP and per auth scope (shared-secret and device-token are tracked independently). Blocked attempts return `429` + `Retry-After`. - `auth.rateLimit.exemptLoopback` defaults to `true`; set `false` when you intentionally want localhost traffic rate-limited too (for test setups or strict proxy deployments). - `tailscale.mode`: `serve` (tailnet only, loopback bind) or `funnel` (public, requires auth). diff --git a/docs/gateway/remote.md b/docs/gateway/remote.md index f95ecd90a..6eedfc3b3 100644 --- a/docs/gateway/remote.md +++ b/docs/gateway/remote.md @@ -122,9 +122,10 @@ Short version: **keep the Gateway loopback-only** unless you’re sure you need - **Non-loopback binds** (`lan`/`tailnet`/`custom`, or `auto` when loopback is unavailable) must use auth tokens/passwords. - `gateway.remote.token` is **only** for remote CLI calls — it does **not** enable local auth. - `gateway.remote.tlsFingerprint` pins the remote TLS cert when using `wss://`. -- **Tailscale Serve** can authenticate via identity headers when `gateway.auth.allowTailscale: true`. - This tokenless flow assumes the gateway host is trusted. Set it to `false` if you - want tokens/passwords instead. +- **Tailscale Serve** can authenticate Control UI/WebSocket traffic via identity + headers when `gateway.auth.allowTailscale: true`; HTTP API endpoints still + require token/password auth. This tokenless flow assumes the gateway host is + trusted. Set it to `false` if you want tokens/passwords everywhere. - Treat browser control like operator access: tailnet-only + deliberate node pairing. Deep dive: [Security](/gateway/security). diff --git a/docs/gateway/security/index.md b/docs/gateway/security/index.md index 517cbaa68..467cdb371 100644 --- a/docs/gateway/security/index.md +++ b/docs/gateway/security/index.md @@ -532,12 +532,14 @@ Rotation checklist (token/password): ### 0.6) Tailscale Serve identity headers When `gateway.auth.allowTailscale` is `true` (default for Serve), OpenClaw -accepts Tailscale Serve identity headers (`tailscale-user-login`) as -authentication. OpenClaw verifies the identity by resolving the +accepts Tailscale Serve identity headers (`tailscale-user-login`) for Control +UI/WebSocket authentication. OpenClaw verifies the identity by resolving the `x-forwarded-for` address through the local Tailscale daemon (`tailscale whois`) and matching it to the header. This only triggers for requests that hit loopback and include `x-forwarded-for`, `x-forwarded-proto`, and `x-forwarded-host` as injected by Tailscale. +HTTP API endpoints (for example `/v1/*`, `/tools/invoke`, and `/api/channels/*`) +still require token/password auth. **Trust assumption:** tokenless Serve auth assumes the gateway host is trusted. Do not treat this as protection against hostile same-host processes. If untrusted diff --git a/docs/gateway/tailscale.md b/docs/gateway/tailscale.md index 8a195d6d3..6bc518769 100644 --- a/docs/gateway/tailscale.md +++ b/docs/gateway/tailscale.md @@ -26,13 +26,15 @@ Set `gateway.auth.mode` to control the handshake: - `password` (shared secret via `OPENCLAW_GATEWAY_PASSWORD` or config) When `tailscale.mode = "serve"` and `gateway.auth.allowTailscale` is `true`, -valid Serve proxy requests can authenticate via Tailscale identity headers +Control UI/WebSocket auth can use Tailscale identity headers (`tailscale-user-login`) without supplying a token/password. OpenClaw verifies the identity by resolving the `x-forwarded-for` address via the local Tailscale daemon (`tailscale whois`) and matching it to the header before accepting it. OpenClaw only treats a request as Serve when it arrives from loopback with Tailscale’s `x-forwarded-for`, `x-forwarded-proto`, and `x-forwarded-host` headers. +HTTP API endpoints (for example `/v1/*`, `/tools/invoke`, and `/api/channels/*`) +still require token/password auth. This tokenless flow assumes the gateway host is trusted. If untrusted local code may run on the same host, disable `gateway.auth.allowTailscale` and require token/password auth instead. diff --git a/docs/help/faq.md b/docs/help/faq.md index 6958fec32..5b1941516 100644 --- a/docs/help/faq.md +++ b/docs/help/faq.md @@ -348,7 +348,7 @@ The wizard opens your browser with a clean (non-tokenized) dashboard URL right a **Not on localhost:** -- **Tailscale Serve** (recommended): keep bind loopback, run `openclaw gateway --tailscale serve`, open `https:///`. If `gateway.auth.allowTailscale` is `true`, identity headers satisfy auth (no token, assumes trusted gateway host). +- **Tailscale Serve** (recommended): keep bind loopback, run `openclaw gateway --tailscale serve`, open `https:///`. If `gateway.auth.allowTailscale` is `true`, identity headers satisfy Control UI/WebSocket auth (no token, assumes trusted gateway host); HTTP APIs still require token/password. - **Tailnet bind**: run `openclaw gateway --bind tailnet --token ""`, open `http://:18789/`, paste token in dashboard settings. - **SSH tunnel**: `ssh -N -L 18789:127.0.0.1:18789 user@host` then open `http://127.0.0.1:18789/` and paste the token in Control UI settings. diff --git a/docs/platforms/digitalocean.md b/docs/platforms/digitalocean.md index 4cd608770..bddc63b9d 100644 --- a/docs/platforms/digitalocean.md +++ b/docs/platforms/digitalocean.md @@ -132,7 +132,7 @@ Open: `https:///` Notes: -- Serve keeps the Gateway loopback-only and authenticates via Tailscale identity headers (tokenless auth assumes trusted gateway host). +- Serve keeps the Gateway loopback-only and authenticates Control UI/WebSocket traffic via Tailscale identity headers (tokenless auth assumes trusted gateway host; HTTP APIs still require token/password). - To require token/password instead, set `gateway.auth.allowTailscale: false` or use `gateway.auth.mode: "password"`. **Option C: Tailnet bind (no Serve)** diff --git a/docs/web/control-ui.md b/docs/web/control-ui.md index 4a3decb7e..9ff05572c 100644 --- a/docs/web/control-ui.md +++ b/docs/web/control-ui.md @@ -117,7 +117,7 @@ Open: - `https:///` (or your configured `gateway.controlUi.basePath`) -By default, Serve requests can authenticate via Tailscale identity headers +By default, Control UI/WebSocket Serve requests can authenticate via Tailscale identity headers (`tailscale-user-login`) when `gateway.auth.allowTailscale` is `true`. OpenClaw verifies the identity by resolving the `x-forwarded-for` address with `tailscale whois` and matching it to the header, and only accepts these when the diff --git a/docs/web/dashboard.md b/docs/web/dashboard.md index b4432a598..0aed38b2c 100644 --- a/docs/web/dashboard.md +++ b/docs/web/dashboard.md @@ -37,7 +37,7 @@ Prefer localhost, Tailscale Serve, or an SSH tunnel. - **Localhost**: open `http://127.0.0.1:18789/`. - **Token source**: `gateway.auth.token` (or `OPENCLAW_GATEWAY_TOKEN`); the UI stores a copy in localStorage after you connect. -- **Not localhost**: use Tailscale Serve (tokenless if `gateway.auth.allowTailscale: true`, assumes trusted gateway host), tailnet bind with a token, or an SSH tunnel. See [Web surfaces](/web). +- **Not localhost**: use Tailscale Serve (tokenless for Control UI/WebSocket if `gateway.auth.allowTailscale: true`, assumes trusted gateway host; HTTP APIs still need token/password), tailnet bind with a token, or an SSH tunnel. See [Web surfaces](/web). ## If you see “unauthorized” / 1008 diff --git a/docs/web/index.md b/docs/web/index.md index 6d1b40990..42baffe80 100644 --- a/docs/web/index.md +++ b/docs/web/index.md @@ -101,8 +101,9 @@ Open: - The UI sends `connect.params.auth.token` or `connect.params.auth.password`. - The Control UI sends anti-clickjacking headers and only accepts same-origin browser websocket connections unless `gateway.controlUi.allowedOrigins` is set. -- With Serve, Tailscale identity headers can satisfy auth when - `gateway.auth.allowTailscale` is `true` (no token/password required). Set +- With Serve, Tailscale identity headers can satisfy Control UI/WebSocket auth + when `gateway.auth.allowTailscale` is `true` (no token/password required). + HTTP API endpoints still require token/password. Set `gateway.auth.allowTailscale: false` to require explicit credentials. See [Tailscale](/gateway/tailscale) and [Security](/gateway/security). This tokenless flow assumes the gateway host is trusted. diff --git a/src/gateway/auth.test.ts b/src/gateway/auth.test.ts index acc761ea8..6cdc645f7 100644 --- a/src/gateway/auth.test.ts +++ b/src/gateway/auth.test.ts @@ -188,7 +188,7 @@ describe("gateway auth", () => { expect(res.method).toBe("token"); }); - it("allows tailscale identity to satisfy token mode auth", async () => { + it("does not allow tailscale identity to satisfy token mode auth by default", async () => { const res = await authorizeGatewayConnect({ auth: { mode: "token", token: "secret", allowTailscale: true }, connectAuth: null, @@ -206,6 +206,29 @@ describe("gateway auth", () => { } as never, }); + expect(res.ok).toBe(false); + expect(res.reason).toBe("token_missing"); + }); + + it("allows tailscale identity when header auth is explicitly enabled", async () => { + const res = await authorizeGatewayConnect({ + auth: { mode: "token", token: "secret", allowTailscale: true }, + connectAuth: null, + tailscaleWhois: async () => ({ login: "peter", name: "Peter" }), + allowTailscaleHeaderAuth: true, + req: { + socket: { remoteAddress: "127.0.0.1" }, + headers: { + host: "gateway.local", + "x-forwarded-for": "100.64.0.1", + "x-forwarded-proto": "https", + "x-forwarded-host": "ai-hub.bone-egret.ts.net", + "tailscale-user-login": "peter", + "tailscale-user-name": "Peter", + }, + } as never, + }); + expect(res.ok).toBe(true); expect(res.method).toBe("tailscale"); expect(res.user).toBe("peter"); diff --git a/src/gateway/auth.ts b/src/gateway/auth.ts index f3a7f2d90..76236dc2e 100644 --- a/src/gateway/auth.ts +++ b/src/gateway/auth.ts @@ -325,6 +325,11 @@ export async function authorizeGatewayConnect(params: { req?: IncomingMessage; trustedProxies?: string[]; tailscaleWhois?: TailscaleWhoisLookup; + /** + * Opt-in for accepting Tailscale Serve identity headers as primary auth. + * Default is disabled for HTTP surfaces; WS connect enables this explicitly. + */ + allowTailscaleHeaderAuth?: boolean; /** Optional rate limiter instance; when provided, failed attempts are tracked per IP. */ rateLimiter?: AuthRateLimiter; /** Client IP used for rate-limit tracking. Falls back to proxy-aware request IP resolution. */ @@ -334,6 +339,7 @@ export async function authorizeGatewayConnect(params: { }): Promise { const { auth, connectAuth, req, trustedProxies } = params; const tailscaleWhois = params.tailscaleWhois ?? readTailscaleWhoisIdentity; + const allowTailscaleHeaderAuth = params.allowTailscaleHeaderAuth === true; const localDirect = isLocalDirectRequest(req, trustedProxies); if (auth.mode === "trusted-proxy") { @@ -376,7 +382,7 @@ export async function authorizeGatewayConnect(params: { } } - if (auth.allowTailscale && !localDirect) { + if (allowTailscaleHeaderAuth && auth.allowTailscale && !localDirect) { const tailscaleCheck = await resolveVerifiedTailscaleUser({ req, tailscaleWhois, diff --git a/src/gateway/http-auth-helpers.test.ts b/src/gateway/http-auth-helpers.test.ts new file mode 100644 index 000000000..0a4cab7d4 --- /dev/null +++ b/src/gateway/http-auth-helpers.test.ts @@ -0,0 +1,79 @@ +import type { IncomingMessage, ServerResponse } from "node:http"; +import { beforeEach, describe, expect, it, vi } from "vitest"; +import type { ResolvedGatewayAuth } from "./auth.js"; +import { authorizeGatewayBearerRequestOrReply } from "./http-auth-helpers.js"; + +vi.mock("./auth.js", () => ({ + authorizeGatewayConnect: vi.fn(), +})); + +vi.mock("./http-common.js", () => ({ + sendGatewayAuthFailure: vi.fn(), +})); + +vi.mock("./http-utils.js", () => ({ + getBearerToken: vi.fn(), +})); + +const { authorizeGatewayConnect } = await import("./auth.js"); +const { sendGatewayAuthFailure } = await import("./http-common.js"); +const { getBearerToken } = await import("./http-utils.js"); + +describe("authorizeGatewayBearerRequestOrReply", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + it("disables tailscale header auth for HTTP bearer checks", async () => { + vi.mocked(getBearerToken).mockReturnValue(null); + vi.mocked(authorizeGatewayConnect).mockResolvedValue({ + ok: false, + reason: "token_missing", + }); + + const ok = await authorizeGatewayBearerRequestOrReply({ + req: {} as IncomingMessage, + res: {} as ServerResponse, + auth: { + mode: "token", + token: "secret", + password: undefined, + allowTailscale: true, + } satisfies ResolvedGatewayAuth, + }); + + expect(ok).toBe(false); + expect(vi.mocked(authorizeGatewayConnect)).toHaveBeenCalledWith( + expect.objectContaining({ + allowTailscaleHeaderAuth: false, + connectAuth: null, + }), + ); + expect(vi.mocked(sendGatewayAuthFailure)).toHaveBeenCalledTimes(1); + }); + + it("forwards bearer token and returns true on successful auth", async () => { + vi.mocked(getBearerToken).mockReturnValue("abc"); + vi.mocked(authorizeGatewayConnect).mockResolvedValue({ ok: true, method: "token" }); + + const ok = await authorizeGatewayBearerRequestOrReply({ + req: {} as IncomingMessage, + res: {} as ServerResponse, + auth: { + mode: "token", + token: "secret", + password: undefined, + allowTailscale: true, + } satisfies ResolvedGatewayAuth, + }); + + expect(ok).toBe(true); + expect(vi.mocked(authorizeGatewayConnect)).toHaveBeenCalledWith( + expect.objectContaining({ + allowTailscaleHeaderAuth: false, + connectAuth: { token: "abc", password: "abc" }, + }), + ); + expect(vi.mocked(sendGatewayAuthFailure)).not.toHaveBeenCalled(); + }); +}); diff --git a/src/gateway/http-auth-helpers.ts b/src/gateway/http-auth-helpers.ts index 449e9369c..a7ee69eb6 100644 --- a/src/gateway/http-auth-helpers.ts +++ b/src/gateway/http-auth-helpers.ts @@ -17,6 +17,7 @@ export async function authorizeGatewayBearerRequestOrReply(params: { connectAuth: token ? { token, password: token } : null, req: params.req, trustedProxies: params.trustedProxies, + allowTailscaleHeaderAuth: false, rateLimiter: params.rateLimiter, }); if (!authResult.ok) { diff --git a/src/gateway/server-http.ts b/src/gateway/server-http.ts index 63185280c..6cabb0fb4 100644 --- a/src/gateway/server-http.ts +++ b/src/gateway/server-http.ts @@ -155,6 +155,7 @@ async function authorizeCanvasRequest(params: { connectAuth: { token, password: token }, req, trustedProxies, + allowTailscaleHeaderAuth: false, rateLimiter, }); if (authResult.ok) { @@ -532,6 +533,7 @@ export function createGatewayHttpServer(opts: { connectAuth: token ? { token, password: token } : null, req, trustedProxies, + allowTailscaleHeaderAuth: false, rateLimiter, }); if (!authResult.ok) { diff --git a/src/gateway/server/ws-connection/message-handler.ts b/src/gateway/server/ws-connection/message-handler.ts index 40dcc54e6..61be61faf 100644 --- a/src/gateway/server/ws-connection/message-handler.ts +++ b/src/gateway/server/ws-connection/message-handler.ts @@ -351,6 +351,7 @@ export function attachGatewayWsMessageHandler(params: { connectAuth: connectParams.auth, req: upgradeReq, trustedProxies, + allowTailscaleHeaderAuth: true, rateLimiter: hasDeviceTokenCandidate ? undefined : rateLimiter, clientIp, rateLimitScope: AUTH_RATE_LIMIT_SCOPE_SHARED_SECRET, diff --git a/src/gateway/tools-invoke-http.ts b/src/gateway/tools-invoke-http.ts index bd2c78a6d..eda5b8164 100644 --- a/src/gateway/tools-invoke-http.ts +++ b/src/gateway/tools-invoke-http.ts @@ -151,6 +151,7 @@ export async function handleToolsInvokeHttpRequest( connectAuth: token ? { token, password: token } : null, req, trustedProxies: opts.trustedProxies ?? cfg.gateway?.trustedProxies, + allowTailscaleHeaderAuth: false, rateLimiter: opts.rateLimiter, }); if (!authResult.ok) { From 08e020881d6e1c868ec59e5d0b7d040a60afcec7 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:04:31 +0100 Subject: [PATCH 0166/1007] refactor(security): unify command gating and blocked-key guards --- src/auto-reply/reply/bash-command.ts | 9 ++-- src/auto-reply/reply/command-gates.ts | 49 ++++++++++++++++++++++ src/auto-reply/reply/commands-allowlist.ts | 23 +++++----- src/auto-reply/reply/commands-bash.ts | 8 ++-- src/auto-reply/reply/commands-config.ts | 45 +++++++++----------- src/config/commands.ts | 13 ++++-- src/config/config-paths.ts | 5 +-- src/config/includes.ts | 5 +-- src/config/prototype-keys.ts | 5 +++ src/config/runtime-overrides.ts | 7 ++-- 10 files changed, 111 insertions(+), 58 deletions(-) create mode 100644 src/auto-reply/reply/command-gates.ts create mode 100644 src/config/prototype-keys.ts diff --git a/src/auto-reply/reply/bash-command.ts b/src/auto-reply/reply/bash-command.ts index c442dbe1b..466173de2 100644 --- a/src/auto-reply/reply/bash-command.ts +++ b/src/auto-reply/reply/bash-command.ts @@ -9,6 +9,7 @@ import { logVerbose } from "../../globals.js"; import { clampInt } from "../../utils.js"; import type { MsgContext } from "../templating.js"; import type { ReplyPayload } from "../types.js"; +import { buildDisabledCommandReply } from "./command-gates.js"; import { formatElevatedUnavailableMessage } from "./elevated-unavailable.js"; import { stripMentions, stripStructuralPrefixes } from "./mentions.js"; @@ -188,9 +189,11 @@ export async function handleBashChatCommand(params: { }; }): Promise { if (!isCommandFlagEnabled(params.cfg, "bash")) { - return { - text: "⚠️ bash is disabled. Set commands.bash=true to enable. Docs: https://docs.openclaw.ai/tools/slash-commands#config", - }; + return buildDisabledCommandReply({ + label: "bash", + configKey: "bash", + docsUrl: "https://docs.openclaw.ai/tools/slash-commands#config", + }); } const agentId = diff --git a/src/auto-reply/reply/command-gates.ts b/src/auto-reply/reply/command-gates.ts new file mode 100644 index 000000000..721d9c1e2 --- /dev/null +++ b/src/auto-reply/reply/command-gates.ts @@ -0,0 +1,49 @@ +import type { CommandFlagKey } from "../../config/commands.js"; +import { isCommandFlagEnabled } from "../../config/commands.js"; +import { logVerbose } from "../../globals.js"; +import type { ReplyPayload } from "../types.js"; +import type { CommandHandlerResult, HandleCommandsParams } from "./commands-types.js"; + +export function rejectUnauthorizedCommand( + params: HandleCommandsParams, + commandLabel: string, +): CommandHandlerResult | null { + if (params.command.isAuthorizedSender) { + return null; + } + logVerbose( + `Ignoring ${commandLabel} from unauthorized sender: ${params.command.senderId || ""}`, + ); + return { shouldContinue: false }; +} + +export function buildDisabledCommandReply(params: { + label: string; + configKey: CommandFlagKey; + disabledVerb?: "is" | "are"; + docsUrl?: string; +}): ReplyPayload { + const disabledVerb = params.disabledVerb ?? "is"; + const docsSuffix = params.docsUrl ? ` Docs: ${params.docsUrl}` : ""; + return { + text: `⚠️ ${params.label} ${disabledVerb} disabled. Set commands.${params.configKey}=true to enable.${docsSuffix}`, + }; +} + +export function requireCommandFlagEnabled( + cfg: { commands?: unknown } | undefined, + params: { + label: string; + configKey: CommandFlagKey; + disabledVerb?: "is" | "are"; + docsUrl?: string; + }, +): CommandHandlerResult | null { + if (isCommandFlagEnabled(cfg, params.configKey)) { + return null; + } + return { + shouldContinue: false, + reply: buildDisabledCommandReply(params), + }; +} diff --git a/src/auto-reply/reply/commands-allowlist.ts b/src/auto-reply/reply/commands-allowlist.ts index 79d040b97..7024dcd1f 100644 --- a/src/auto-reply/reply/commands-allowlist.ts +++ b/src/auto-reply/reply/commands-allowlist.ts @@ -3,7 +3,6 @@ import { resolveChannelConfigWrites } from "../../channels/plugins/config-writes import { listPairingChannels } from "../../channels/plugins/pairing.js"; import type { ChannelId } from "../../channels/plugins/types.js"; import { normalizeChannelId } from "../../channels/registry.js"; -import { isCommandFlagEnabled } from "../../config/commands.js"; import type { OpenClawConfig } from "../../config/config.js"; import { readConfigFileSnapshot, @@ -12,7 +11,6 @@ import { } from "../../config/config.js"; import { resolveDiscordAccount } from "../../discord/accounts.js"; import { resolveDiscordUserAllowlist } from "../../discord/resolve-users.js"; -import { logVerbose } from "../../globals.js"; import { resolveIMessageAccount } from "../../imessage/accounts.js"; import { addChannelAllowFromStoreEntry, @@ -25,6 +23,7 @@ import { resolveSlackAccount } from "../../slack/accounts.js"; import { resolveSlackUserAllowlist } from "../../slack/resolve-users.js"; import { resolveTelegramAccount } from "../../telegram/accounts.js"; import { resolveWhatsAppAccount } from "../../web/accounts.js"; +import { rejectUnauthorizedCommand, requireCommandFlagEnabled } from "./command-gates.js"; import type { CommandHandler } from "./commands-types.js"; type AllowlistScope = "dm" | "group" | "all"; @@ -331,11 +330,9 @@ export const handleAllowlistCommand: CommandHandler = async (params, allowTextCo if (parsed.action === "error") { return { shouldContinue: false, reply: { text: `⚠️ ${parsed.message}` } }; } - if (!params.command.isAuthorizedSender) { - logVerbose( - `Ignoring /allowlist from unauthorized sender: ${params.command.senderId || ""}`, - ); - return { shouldContinue: false }; + const unauthorized = rejectUnauthorizedCommand(params, "/allowlist"); + if (unauthorized) { + return unauthorized; } const channelId = @@ -520,11 +517,13 @@ export const handleAllowlistCommand: CommandHandler = async (params, allowTextCo return { shouldContinue: false, reply: { text: lines.join("\n") } }; } - if (!isCommandFlagEnabled(params.cfg, "config")) { - return { - shouldContinue: false, - reply: { text: "⚠️ /allowlist edits are disabled. Set commands.config=true to enable." }, - }; + const disabled = requireCommandFlagEnabled(params.cfg, { + label: "/allowlist edits", + configKey: "config", + disabledVerb: "are", + }); + if (disabled) { + return disabled; } const shouldUpdateConfig = parsed.target !== "store"; diff --git a/src/auto-reply/reply/commands-bash.ts b/src/auto-reply/reply/commands-bash.ts index de884241e..83a0e8d19 100644 --- a/src/auto-reply/reply/commands-bash.ts +++ b/src/auto-reply/reply/commands-bash.ts @@ -1,5 +1,5 @@ -import { logVerbose } from "../../globals.js"; import { handleBashChatCommand } from "./bash-command.js"; +import { rejectUnauthorizedCommand } from "./command-gates.js"; import type { CommandHandler } from "./commands-types.js"; export const handleBashCommand: CommandHandler = async (params, allowTextCommands) => { @@ -13,9 +13,9 @@ export const handleBashCommand: CommandHandler = async (params, allowTextCommand if (!bashSlashRequested && !(bashBangRequested && command.isAuthorizedSender)) { return null; } - if (!command.isAuthorizedSender) { - logVerbose(`Ignoring /bash from unauthorized sender: ${command.senderId || ""}`); - return { shouldContinue: false }; + const unauthorized = rejectUnauthorizedCommand(params, "/bash"); + if (unauthorized) { + return unauthorized; } const reply = await handleBashChatCommand({ ctx: params.ctx, diff --git a/src/auto-reply/reply/commands-config.ts b/src/auto-reply/reply/commands-config.ts index c6578d7d4..e8d04b160 100644 --- a/src/auto-reply/reply/commands-config.ts +++ b/src/auto-reply/reply/commands-config.ts @@ -1,6 +1,5 @@ import { resolveChannelConfigWrites } from "../../channels/plugins/config-writes.js"; import { normalizeChannelId } from "../../channels/registry.js"; -import { isCommandFlagEnabled } from "../../config/commands.js"; import { getConfigValueAtPath, parseConfigPath, @@ -18,7 +17,7 @@ import { setConfigOverride, unsetConfigOverride, } from "../../config/runtime-overrides.js"; -import { logVerbose } from "../../globals.js"; +import { rejectUnauthorizedCommand, requireCommandFlagEnabled } from "./command-gates.js"; import type { CommandHandler } from "./commands-types.js"; import { parseConfigCommand } from "./config-commands.js"; import { parseDebugCommand } from "./debug-commands.js"; @@ -31,19 +30,16 @@ export const handleConfigCommand: CommandHandler = async (params, allowTextComma if (!configCommand) { return null; } - if (!params.command.isAuthorizedSender) { - logVerbose( - `Ignoring /config from unauthorized sender: ${params.command.senderId || ""}`, - ); - return { shouldContinue: false }; + const unauthorized = rejectUnauthorizedCommand(params, "/config"); + if (unauthorized) { + return unauthorized; } - if (!isCommandFlagEnabled(params.cfg, "config")) { - return { - shouldContinue: false, - reply: { - text: "⚠️ /config is disabled. Set commands.config=true to enable.", - }, - }; + const disabled = requireCommandFlagEnabled(params.cfg, { + label: "/config", + configKey: "config", + }); + if (disabled) { + return disabled; } if (configCommand.action === "error") { return { @@ -185,19 +181,16 @@ export const handleDebugCommand: CommandHandler = async (params, allowTextComman if (!debugCommand) { return null; } - if (!params.command.isAuthorizedSender) { - logVerbose( - `Ignoring /debug from unauthorized sender: ${params.command.senderId || ""}`, - ); - return { shouldContinue: false }; + const unauthorized = rejectUnauthorizedCommand(params, "/debug"); + if (unauthorized) { + return unauthorized; } - if (!isCommandFlagEnabled(params.cfg, "debug")) { - return { - shouldContinue: false, - reply: { - text: "⚠️ /debug is disabled. Set commands.debug=true to enable.", - }, - }; + const disabled = requireCommandFlagEnabled(params.cfg, { + label: "/debug", + configKey: "debug", + }); + if (disabled) { + return disabled; } if (debugCommand.action === "error") { return { diff --git a/src/config/commands.ts b/src/config/commands.ts index 1be69e970..4d174d7c3 100644 --- a/src/config/commands.ts +++ b/src/config/commands.ts @@ -1,7 +1,11 @@ import { normalizeChannelId } from "../channels/plugins/index.js"; import type { ChannelId } from "../channels/plugins/types.js"; import { isPlainObject } from "../infra/plain-object.js"; -import type { NativeCommandsSetting } from "./types.js"; +import type { CommandsConfig, NativeCommandsSetting } from "./types.js"; + +export type CommandFlagKey = { + [K in keyof CommandsConfig]-?: Exclude extends boolean ? K : never; +}[keyof CommandsConfig]; function resolveAutoDefault(providerId?: ChannelId): boolean { const id = normalizeChannelId(providerId); @@ -63,7 +67,10 @@ export function isNativeCommandsExplicitlyDisabled(params: { return false; } -function getOwnCommandFlagValue(config: { commands?: unknown } | undefined, key: string): unknown { +function getOwnCommandFlagValue( + config: { commands?: unknown } | undefined, + key: CommandFlagKey, +): unknown { const { commands } = config ?? {}; if (!isPlainObject(commands) || !Object.hasOwn(commands, key)) { return undefined; @@ -73,7 +80,7 @@ function getOwnCommandFlagValue(config: { commands?: unknown } | undefined, key: export function isCommandFlagEnabled( config: { commands?: unknown } | undefined, - key: string, + key: CommandFlagKey, ): boolean { return getOwnCommandFlagValue(config, key) === true; } diff --git a/src/config/config-paths.ts b/src/config/config-paths.ts index 899b89706..1bdd9275e 100644 --- a/src/config/config-paths.ts +++ b/src/config/config-paths.ts @@ -1,9 +1,8 @@ import { isPlainObject } from "../utils.js"; +import { isBlockedObjectKey } from "./prototype-keys.js"; type PathNode = Record; -const BLOCKED_KEYS = new Set(["__proto__", "prototype", "constructor"]); - export function parseConfigPath(raw: string): { ok: boolean; path?: string[]; @@ -23,7 +22,7 @@ export function parseConfigPath(raw: string): { error: "Invalid path. Use dot notation (e.g. foo.bar).", }; } - if (parts.some((part) => BLOCKED_KEYS.has(part))) { + if (parts.some((part) => isBlockedObjectKey(part))) { return { ok: false, error: "Invalid path segment." }; } return { ok: true, path: parts }; diff --git a/src/config/includes.ts b/src/config/includes.ts index ce0545669..c9a14a363 100644 --- a/src/config/includes.ts +++ b/src/config/includes.ts @@ -15,6 +15,7 @@ import path from "node:path"; import JSON5 from "json5"; import { isPathInside } from "../security/scan-paths.js"; import { isPlainObject } from "../utils.js"; +import { isBlockedObjectKey } from "./prototype-keys.js"; export const INCLUDE_KEY = "$include"; export const MAX_INCLUDE_DEPTH = 10; @@ -54,8 +55,6 @@ export class CircularIncludeError extends ConfigIncludeError { // Utilities // ============================================================================ -const BLOCKED_MERGE_KEYS = new Set(["__proto__", "prototype", "constructor"]); - /** Deep merge: arrays concatenate, objects merge recursively, primitives: source wins */ export function deepMerge(target: unknown, source: unknown): unknown { if (Array.isArray(target) && Array.isArray(source)) { @@ -64,7 +63,7 @@ export function deepMerge(target: unknown, source: unknown): unknown { if (isPlainObject(target) && isPlainObject(source)) { const result: Record = { ...target }; for (const key of Object.keys(source)) { - if (BLOCKED_MERGE_KEYS.has(key)) { + if (isBlockedObjectKey(key)) { continue; } result[key] = key in result ? deepMerge(result[key], source[key]) : source[key]; diff --git a/src/config/prototype-keys.ts b/src/config/prototype-keys.ts new file mode 100644 index 000000000..9762aae01 --- /dev/null +++ b/src/config/prototype-keys.ts @@ -0,0 +1,5 @@ +const BLOCKED_OBJECT_KEYS = new Set(["__proto__", "prototype", "constructor"]); + +export function isBlockedObjectKey(key: string): boolean { + return BLOCKED_OBJECT_KEYS.has(key); +} diff --git a/src/config/runtime-overrides.ts b/src/config/runtime-overrides.ts index da3a2ec25..44b772e0b 100644 --- a/src/config/runtime-overrides.ts +++ b/src/config/runtime-overrides.ts @@ -1,11 +1,10 @@ import { isPlainObject } from "../utils.js"; import { parseConfigPath, setConfigValueAtPath, unsetConfigValueAtPath } from "./config-paths.js"; +import { isBlockedObjectKey } from "./prototype-keys.js"; import type { OpenClawConfig } from "./types.js"; type OverrideTree = Record; -const BLOCKED_MERGE_KEYS = new Set(["__proto__", "prototype", "constructor"]); - let overrides: OverrideTree = {}; function sanitizeOverrideValue(value: unknown, seen = new WeakSet()): unknown { @@ -21,7 +20,7 @@ function sanitizeOverrideValue(value: unknown, seen = new WeakSet()): un seen.add(value); const sanitized: OverrideTree = {}; for (const [key, entry] of Object.entries(value)) { - if (entry === undefined || BLOCKED_MERGE_KEYS.has(key)) { + if (entry === undefined || isBlockedObjectKey(key)) { continue; } sanitized[key] = sanitizeOverrideValue(entry, seen); @@ -36,7 +35,7 @@ function mergeOverrides(base: unknown, override: unknown): unknown { } const next: OverrideTree = { ...base }; for (const [key, value] of Object.entries(override)) { - if (value === undefined || BLOCKED_MERGE_KEYS.has(key)) { + if (value === undefined || isBlockedObjectKey(key)) { continue; } next[key] = mergeOverrides((base as OverrideTree)[key], value); From f202e73077a2a419595f395f4bc0a6185fa8307b Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:04:34 +0100 Subject: [PATCH 0167/1007] refactor(security): centralize host env policy and harden env ingestion --- .../Sources/OpenClaw/HostEnvSanitizer.swift | 2 + .../daemon-install-helpers.e2e.test.ts | 25 +++++++++ src/commands/daemon-install-helpers.ts | 4 +- src/config/config.env-vars.test.ts | 22 +++++++- src/config/env-vars.ts | 33 +++++++++-- src/discord/voice/manager.ts | 2 +- src/infra/host-env-security-policy.json | 18 ++++++ .../host-env-security.policy-parity.test.ts | 38 +++++++++++++ src/infra/host-env-security.test.ts | 32 ++++++++++- src/infra/host-env-security.ts | 56 ++++++++++++------- 10 files changed, 201 insertions(+), 31 deletions(-) create mode 100644 src/infra/host-env-security-policy.json create mode 100644 src/infra/host-env-security.policy-parity.test.ts diff --git a/apps/macos/Sources/OpenClaw/HostEnvSanitizer.swift b/apps/macos/Sources/OpenClaw/HostEnvSanitizer.swift index bbef0486f..330e5b3b6 100644 --- a/apps/macos/Sources/OpenClaw/HostEnvSanitizer.swift +++ b/apps/macos/Sources/OpenClaw/HostEnvSanitizer.swift @@ -1,6 +1,8 @@ import Foundation enum HostEnvSanitizer { + // Keep in sync with src/infra/host-env-security-policy.json. + // Parity is validated by src/infra/host-env-security.policy-parity.test.ts. private static let blockedKeys: Set = [ "NODE_OPTIONS", "NODE_PATH", diff --git a/src/commands/daemon-install-helpers.e2e.test.ts b/src/commands/daemon-install-helpers.e2e.test.ts index 2fb1645f9..cf3c6a8af 100644 --- a/src/commands/daemon-install-helpers.e2e.test.ts +++ b/src/commands/daemon-install-helpers.e2e.test.ts @@ -140,6 +140,31 @@ describe("buildGatewayInstallPlan", () => { expect(plan.environment.HOME).toBe("/Users/me"); }); + it("drops dangerous config env vars before service merge", async () => { + mockNodeGatewayPlanFixture({ + serviceEnvironment: { + OPENCLAW_PORT: "3000", + }, + }); + + const plan = await buildGatewayInstallPlan({ + env: {}, + port: 3000, + runtime: "node", + config: { + env: { + vars: { + NODE_OPTIONS: "--require /tmp/evil.js", + SAFE_KEY: "safe-value", + }, + }, + }, + }); + + expect(plan.environment.NODE_OPTIONS).toBeUndefined(); + expect(plan.environment.SAFE_KEY).toBe("safe-value"); + }); + it("does not include empty config env values", async () => { mockNodeGatewayPlanFixture(); diff --git a/src/commands/daemon-install-helpers.ts b/src/commands/daemon-install-helpers.ts index f027d2fdc..8bcd717c3 100644 --- a/src/commands/daemon-install-helpers.ts +++ b/src/commands/daemon-install-helpers.ts @@ -1,5 +1,5 @@ import { formatCliCommand } from "../cli/command-format.js"; -import { collectConfigEnvVars } from "../config/env-vars.js"; +import { collectConfigServiceEnvVars } from "../config/env-vars.js"; import type { OpenClawConfig } from "../config/types.js"; import { resolveGatewayLaunchAgentLabel } from "../daemon/constants.js"; import { resolveGatewayProgramArguments } from "../daemon/program-args.js"; @@ -67,7 +67,7 @@ export async function buildGatewayInstallPlan(params: { // Merge config env vars into the service environment (vars + inline env keys). // Config env vars are added first so service-specific vars take precedence. const environment: Record = { - ...collectConfigEnvVars(params.config), + ...collectConfigServiceEnvVars(params.config), }; Object.assign(environment, serviceEnvironment); diff --git a/src/config/config.env-vars.test.ts b/src/config/config.env-vars.test.ts index 37fa7f8fe..9aba6f6db 100644 --- a/src/config/config.env-vars.test.ts +++ b/src/config/config.env-vars.test.ts @@ -3,7 +3,7 @@ import path from "node:path"; import { describe, expect, it } from "vitest"; import { loadDotEnv } from "../infra/dotenv.js"; import { resolveConfigEnvVars } from "./env-substitution.js"; -import { applyConfigEnvVars, collectConfigEnvVars } from "./env-vars.js"; +import { applyConfigEnvVars, collectConfigRuntimeEnvVars } from "./env-vars.js"; import { withEnvOverride, withTempHome } from "./test-helpers.js"; import type { OpenClawConfig } from "./types.js"; @@ -34,7 +34,7 @@ describe("config env vars", () => { const config = { env: { vars: { BASH_ENV: "/tmp/pwn.sh", OPENROUTER_API_KEY: "config-key" } }, }; - const entries = collectConfigEnvVars(config as OpenClawConfig); + const entries = collectConfigRuntimeEnvVars(config as OpenClawConfig); expect(entries.BASH_ENV).toBeUndefined(); expect(entries.OPENROUTER_API_KEY).toBe("config-key"); @@ -44,6 +44,24 @@ describe("config env vars", () => { }); }); + it("drops non-portable env keys from config env", async () => { + await withEnvOverride({ OPENROUTER_API_KEY: undefined }, async () => { + const config = { + env: { + vars: { + " BAD KEY": "oops", + OPENROUTER_API_KEY: "config-key", + }, + "NOT-PORTABLE": "bad", + }, + }; + const entries = collectConfigRuntimeEnvVars(config as OpenClawConfig); + expect(entries.OPENROUTER_API_KEY).toBe("config-key"); + expect(entries[" BAD KEY"]).toBeUndefined(); + expect(entries["NOT-PORTABLE"]).toBeUndefined(); + }); + }); + it("loads ${VAR} substitutions from ~/.openclaw/.env on repeated runtime loads", async () => { await withTempHome(async (_home) => { await withEnvOverride({ BRAVE_API_KEY: undefined }, async () => { diff --git a/src/config/env-vars.ts b/src/config/env-vars.ts index cff37b1ef..a26d69a62 100644 --- a/src/config/env-vars.ts +++ b/src/config/env-vars.ts @@ -1,7 +1,7 @@ -import { isDangerousHostEnvVarName } from "../infra/host-env-security.js"; +import { isDangerousHostEnvVarName, normalizeEnvVarKey } from "../infra/host-env-security.js"; import type { OpenClawConfig } from "./types.js"; -export function collectConfigEnvVars(cfg?: OpenClawConfig): Record { +function collectConfigEnvVarsByTarget(cfg?: OpenClawConfig): Record { const envConfig = cfg?.env; if (!envConfig) { return {}; @@ -10,10 +10,14 @@ export function collectConfigEnvVars(cfg?: OpenClawConfig): Record = {}; if (envConfig.vars) { - for (const [key, value] of Object.entries(envConfig.vars)) { + for (const [rawKey, value] of Object.entries(envConfig.vars)) { if (!value) { continue; } + const key = normalizeEnvVarKey(rawKey, { portable: true }); + if (!key) { + continue; + } if (isDangerousHostEnvVarName(key)) { continue; } @@ -21,13 +25,17 @@ export function collectConfigEnvVars(cfg?: OpenClawConfig): Record { + return collectConfigEnvVarsByTarget(cfg); +} + +export function collectConfigServiceEnvVars(cfg?: OpenClawConfig): Record { + return collectConfigEnvVarsByTarget(cfg); +} + +/** @deprecated Use `collectConfigRuntimeEnvVars` or `collectConfigServiceEnvVars`. */ +export function collectConfigEnvVars(cfg?: OpenClawConfig): Record { + return collectConfigRuntimeEnvVars(cfg); +} + export function applyConfigEnvVars( cfg: OpenClawConfig, env: NodeJS.ProcessEnv = process.env, ): void { - const entries = collectConfigEnvVars(cfg); + const entries = collectConfigRuntimeEnvVars(cfg); for (const [key, value] of Object.entries(entries)) { if (env[key]?.trim()) { continue; diff --git a/src/discord/voice/manager.ts b/src/discord/voice/manager.ts index ff048d7ac..8668e57b6 100644 --- a/src/discord/voice/manager.ts +++ b/src/discord/voice/manager.ts @@ -37,7 +37,6 @@ import { parseTtsDirectives } from "../../tts/tts-core.js"; import { resolveTtsConfig, textToSpeech, type ResolvedTtsConfig } from "../../tts/tts.js"; const require = createRequire(import.meta.url); -const OpusScript = require("opusscript") as typeof import("opusscript"); const SAMPLE_RATE = 48_000; const CHANNELS = 2; @@ -149,6 +148,7 @@ type OpusDecoder = { function createOpusDecoder(): { decoder: OpusDecoder; name: string } | null { try { + const OpusScript = require("opusscript") as typeof import("opusscript"); const decoder = new OpusScript(SAMPLE_RATE, CHANNELS, OpusScript.Application.AUDIO); return { decoder, name: "opusscript" }; } catch (err) { diff --git a/src/infra/host-env-security-policy.json b/src/infra/host-env-security-policy.json new file mode 100644 index 000000000..b7760800b --- /dev/null +++ b/src/infra/host-env-security-policy.json @@ -0,0 +1,18 @@ +{ + "blockedKeys": [ + "NODE_OPTIONS", + "NODE_PATH", + "PYTHONHOME", + "PYTHONPATH", + "PERL5LIB", + "PERL5OPT", + "RUBYLIB", + "RUBYOPT", + "BASH_ENV", + "ENV", + "GCONV_PATH", + "IFS", + "SSLKEYLOGFILE" + ], + "blockedPrefixes": ["DYLD_", "LD_", "BASH_FUNC_"] +} diff --git a/src/infra/host-env-security.policy-parity.test.ts b/src/infra/host-env-security.policy-parity.test.ts new file mode 100644 index 000000000..1b989d522 --- /dev/null +++ b/src/infra/host-env-security.policy-parity.test.ts @@ -0,0 +1,38 @@ +import fs from "node:fs"; +import path from "node:path"; +import { describe, expect, it } from "vitest"; + +type HostEnvSecurityPolicy = { + blockedKeys: string[]; + blockedPrefixes: string[]; +}; + +function parseSwiftStringArray(source: string, marker: string): string[] { + const escapedMarker = marker.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); + const re = new RegExp(`${escapedMarker}[\\s\\S]*?=\\s*\\[([\\s\\S]*?)\\]`, "m"); + const match = source.match(re); + if (!match) { + throw new Error(`Failed to parse Swift array for marker: ${marker}`); + } + return Array.from(match[1].matchAll(/"([^"]+)"/g), (m) => m[1]); +} + +describe("host env security policy parity", () => { + it("keeps macOS HostEnvSanitizer lists in sync with shared JSON policy", () => { + const repoRoot = process.cwd(); + const policyPath = path.join(repoRoot, "src/infra/host-env-security-policy.json"); + const swiftPath = path.join(repoRoot, "apps/macos/Sources/OpenClaw/HostEnvSanitizer.swift"); + + const policy = JSON.parse(fs.readFileSync(policyPath, "utf8")) as HostEnvSecurityPolicy; + const swiftSource = fs.readFileSync(swiftPath, "utf8"); + + const swiftBlockedKeys = parseSwiftStringArray(swiftSource, "private static let blockedKeys"); + const swiftBlockedPrefixes = parseSwiftStringArray( + swiftSource, + "private static let blockedPrefixes", + ); + + expect(swiftBlockedKeys).toEqual(policy.blockedKeys); + expect(swiftBlockedPrefixes).toEqual(policy.blockedPrefixes); + }); +}); diff --git a/src/infra/host-env-security.test.ts b/src/infra/host-env-security.test.ts index 47a860c6b..773b27dde 100644 --- a/src/infra/host-env-security.test.ts +++ b/src/infra/host-env-security.test.ts @@ -1,5 +1,9 @@ import { describe, expect, it } from "vitest"; -import { isDangerousHostEnvVarName, sanitizeHostExecEnv } from "./host-env-security.js"; +import { + isDangerousHostEnvVarName, + normalizeEnvVarKey, + sanitizeHostExecEnv, +} from "./host-env-security.js"; describe("isDangerousHostEnvVarName", () => { it("matches dangerous keys and prefixes case-insensitively", () => { @@ -48,4 +52,30 @@ describe("sanitizeHostExecEnv", () => { expect(env.SAFE).toBe("ok"); expect(env.HOME).toBe("/tmp/home"); }); + + it("drops non-portable env key names", () => { + const env = sanitizeHostExecEnv({ + baseEnv: { + PATH: "/usr/bin:/bin", + }, + overrides: { + " BAD KEY": "x", + "NOT-PORTABLE": "x", + GOOD_KEY: "ok", + }, + }); + + expect(env.GOOD_KEY).toBe("ok"); + expect(env[" BAD KEY"]).toBeUndefined(); + expect(env["NOT-PORTABLE"]).toBeUndefined(); + }); +}); + +describe("normalizeEnvVarKey", () => { + it("normalizes and validates keys", () => { + expect(normalizeEnvVarKey(" OPENROUTER_API_KEY ")).toBe("OPENROUTER_API_KEY"); + expect(normalizeEnvVarKey("NOT-PORTABLE", { portable: true })).toBeNull(); + expect(normalizeEnvVarKey(" BASH_FUNC_echo%% ")).toBe("BASH_FUNC_echo%%"); + expect(normalizeEnvVarKey(" ")).toBeNull(); + }); }); diff --git a/src/infra/host-env-security.ts b/src/infra/host-env-security.ts index a3347c608..f5cd775e7 100644 --- a/src/infra/host-env-security.ts +++ b/src/infra/host-env-security.ts @@ -1,23 +1,41 @@ -const HOST_DANGEROUS_ENV_KEY_VALUES = [ - "NODE_OPTIONS", - "NODE_PATH", - "PYTHONHOME", - "PYTHONPATH", - "PERL5LIB", - "PERL5OPT", - "RUBYLIB", - "RUBYOPT", - "BASH_ENV", - "ENV", - "GCONV_PATH", - "IFS", - "SSLKEYLOGFILE", -] as const; +import HOST_ENV_SECURITY_POLICY_JSON from "./host-env-security-policy.json" with { type: "json" }; +const PORTABLE_ENV_VAR_KEY = /^[A-Za-z_][A-Za-z0-9_]*$/; + +type HostEnvSecurityPolicy = { + blockedKeys: string[]; + blockedPrefixes: string[]; +}; + +const HOST_ENV_SECURITY_POLICY = HOST_ENV_SECURITY_POLICY_JSON as HostEnvSecurityPolicy; + +export const HOST_DANGEROUS_ENV_KEY_VALUES: readonly string[] = Object.freeze( + HOST_ENV_SECURITY_POLICY.blockedKeys.map((key) => key.toUpperCase()), +); +export const HOST_DANGEROUS_ENV_PREFIXES: readonly string[] = Object.freeze( + HOST_ENV_SECURITY_POLICY.blockedPrefixes.map((prefix) => prefix.toUpperCase()), +); export const HOST_DANGEROUS_ENV_KEYS = new Set(HOST_DANGEROUS_ENV_KEY_VALUES); -export const HOST_DANGEROUS_ENV_PREFIXES = ["DYLD_", "LD_", "BASH_FUNC_"] as const; -export function isDangerousHostEnvVarName(key: string): boolean { +export function normalizeEnvVarKey( + rawKey: string, + options?: { portable?: boolean }, +): string | null { + const key = rawKey.trim(); + if (!key) { + return null; + } + if (options?.portable && !PORTABLE_ENV_VAR_KEY.test(key)) { + return null; + } + return key; +} + +export function isDangerousHostEnvVarName(rawKey: string): boolean { + const key = normalizeEnvVarKey(rawKey); + if (!key) { + return false; + } const upper = key.toUpperCase(); if (HOST_DANGEROUS_ENV_KEYS.has(upper)) { return true; @@ -39,7 +57,7 @@ export function sanitizeHostExecEnv(params?: { if (typeof value !== "string") { continue; } - const key = rawKey.trim(); + const key = normalizeEnvVarKey(rawKey, { portable: true }); if (!key || isDangerousHostEnvVarName(key)) { continue; } @@ -54,7 +72,7 @@ export function sanitizeHostExecEnv(params?: { if (typeof value !== "string") { continue; } - const key = rawKey.trim(); + const key = normalizeEnvVarKey(rawKey, { portable: true }); if (!key) { continue; } From d25a10662859aad9516e7c0ece7387daccef02c5 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:06:44 +0100 Subject: [PATCH 0168/1007] docs(changelog): add tailscale auth hardening release note --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e34dbf87..31c3fa2cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ Docs: https://docs.openclaw.ai - iOS/Security: force `https://` for non-loopback manual gateway hosts during iOS onboarding to block insecure remote transport URLs. (#21969) Thanks @mbelinky. - Gateway/Security: remove shared-IP fallback for canvas endpoints and require token or session capability for canvas access. Thanks @thewilloftheshadow. - Gateway/Security: require secure context and paired-device checks for Control UI auth even when `gateway.controlUi.allowInsecureAuth` is set, and align audit messaging with the hardened behavior. This ships in the next npm release. (#20684) Thanks @coygeek and @Vasco0x4 for reporting. +- Gateway/Security: scope tokenless Tailscale forwarded-header auth to Control UI websocket auth only, so HTTP gateway routes still require token/password even on trusted hosts. This ships in the next npm release. Thanks @zpbrent for reporting. - Docker/Security: run E2E and install-sh test images as non-root by adding appuser directives. Thanks @thewilloftheshadow. - Skills/Security: sanitize skill env overrides to block unsafe runtime injection variables and only allow sensitive keys when declared in skill metadata, with warnings for suspicious values. Thanks @thewilloftheshadow. - Security/Commands: block prototype-key injection in runtime `/debug` overrides and require own-property checks for gated command flags (`bash`, `config`, `debug`) so inherited prototype values cannot enable privileged commands. Thanks @tdjackey for reporting. From f265d458403d31e510e73026852ed3d512a9ee01 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:15:53 +0100 Subject: [PATCH 0169/1007] fix(tts): make model provider overrides opt-in --- docs/gateway/configuration-reference.md | 1 + docs/tts.md | 11 +++++++---- src/config/types.tts.ts | 2 +- src/tts/tts.test.ts | 13 +++++++++++-- src/tts/tts.ts | 5 +++-- 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/docs/gateway/configuration-reference.md b/docs/gateway/configuration-reference.md index c3f8cb72f..e3a46d677 100644 --- a/docs/gateway/configuration-reference.md +++ b/docs/gateway/configuration-reference.md @@ -1342,6 +1342,7 @@ Batches rapid text-only messages from the same sender into a single agent turn. - `auto` controls auto-TTS. `/tts off|always|inbound|tagged` overrides per session. - `summaryModel` overrides `agents.defaults.model.primary` for auto-summary. +- `modelOverrides` is enabled by default; `modelOverrides.allowProvider` defaults to `false` (opt-in). - API keys fall back to `ELEVENLABS_API_KEY`/`XI_API_KEY` and `OPENAI_API_KEY`. --- diff --git a/docs/tts.md b/docs/tts.md index c52a1546c..24ca527e1 100644 --- a/docs/tts.md +++ b/docs/tts.md @@ -210,6 +210,7 @@ Then run: - `summaryModel`: optional cheap model for auto-summary; defaults to `agents.defaults.model.primary`. - Accepts `provider/model` or a configured model alias. - `modelOverrides`: allow the model to emit TTS directives (on by default). + - `allowProvider` defaults to `false` (provider switching is opt-in). - `maxTextLength`: hard cap for TTS input (chars). `/tts audio` fails if exceeded. - `timeoutMs`: request timeout (ms). - `prefsPath`: override the local prefs JSON path (provider/limit/summary). @@ -242,18 +243,20 @@ for a single reply, plus an optional `[[tts:text]]...[[/tts:text]]` block to provide expressive tags (laughter, singing cues, etc) that should only appear in the audio. +`provider=...` directives are ignored unless `modelOverrides.allowProvider: true`. + Example reply payload: ``` Here you go. -[[tts:provider=elevenlabs voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]] +[[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]] [[tts:text]](laughs) Read the song once more.[[/tts:text]] ``` Available directive keys (when enabled): -- `provider` (`openai` | `elevenlabs` | `edge`) +- `provider` (`openai` | `elevenlabs` | `edge`, requires `allowProvider: true`) - `voice` (OpenAI voice) or `voiceId` (ElevenLabs) - `model` (OpenAI TTS model or ElevenLabs model id) - `stability`, `similarityBoost`, `style`, `speed`, `useSpeakerBoost` @@ -275,7 +278,7 @@ Disable all model overrides: } ``` -Optional allowlist (disable specific overrides while keeping tags enabled): +Optional allowlist (enable provider switching while keeping other knobs configurable): ```json5 { @@ -283,7 +286,7 @@ Optional allowlist (disable specific overrides while keeping tags enabled): tts: { modelOverrides: { enabled: true, - allowProvider: false, + allowProvider: true, allowSeed: false, }, }, diff --git a/src/config/types.tts.ts b/src/config/types.tts.ts index 4eb4989b9..82875d55e 100644 --- a/src/config/types.tts.ts +++ b/src/config/types.tts.ts @@ -9,7 +9,7 @@ export type TtsModelOverrideConfig = { enabled?: boolean; /** Allow model-provided TTS text blocks. */ allowText?: boolean; - /** Allow model-provided provider override. */ + /** Allow model-provided provider override (default: false). */ allowProvider?: boolean; /** Allow model-provided voice/voiceId override. */ allowVoice?: boolean; diff --git a/src/tts/tts.test.ts b/src/tts/tts.test.ts index 1c5ecfb55..09dc90e64 100644 --- a/src/tts/tts.test.ts +++ b/src/tts/tts.test.ts @@ -215,7 +215,7 @@ describe("tts", () => { describe("parseTtsDirectives", () => { it("extracts overrides and strips directives when enabled", () => { - const policy = resolveModelOverridePolicy({ enabled: true }); + const policy = resolveModelOverridePolicy({ enabled: true, allowProvider: true }); const input = "Hello [[tts:provider=elevenlabs voiceId=pMsXgVXv3BLzUgSXRplE stability=0.4 speed=1.1]] world\n\n" + "[[tts:text]](laughs) Read the song once more.[[/tts:text]]"; @@ -230,13 +230,22 @@ describe("tts", () => { }); it("accepts edge as provider override", () => { - const policy = resolveModelOverridePolicy({ enabled: true }); + const policy = resolveModelOverridePolicy({ enabled: true, allowProvider: true }); const input = "Hello [[tts:provider=edge]] world"; const result = parseTtsDirectives(input, policy); expect(result.overrides.provider).toBe("edge"); }); + it("rejects provider override by default while keeping voice overrides enabled", () => { + const policy = resolveModelOverridePolicy({ enabled: true }); + const input = "Hello [[tts:provider=edge voice=alloy]] world"; + const result = parseTtsDirectives(input, policy); + + expect(result.overrides.provider).toBeUndefined(); + expect(result.overrides.openai?.voice).toBe("alloy"); + }); + it("keeps text intact when overrides are disabled", () => { const policy = resolveModelOverridePolicy({ enabled: false }); const input = "Hello [[tts:voice=alloy]] world"; diff --git a/src/tts/tts.ts b/src/tts/tts.ts index fb27eddd2..3130cf396 100644 --- a/src/tts/tts.ts +++ b/src/tts/tts.ts @@ -238,11 +238,12 @@ function resolveModelOverridePolicy( allowSeed: false, }; } - const allow = (value?: boolean) => value ?? true; + const allow = (value: boolean | undefined, defaultValue = true) => value ?? defaultValue; return { enabled: true, allowText: allow(overrides?.allowText), - allowProvider: allow(overrides?.allowProvider), + // Provider switching is higher-impact than voice/style tweaks; keep opt-in. + allowProvider: allow(overrides?.allowProvider, false), allowVoice: allow(overrides?.allowVoice), allowModelId: allow(overrides?.allowModelId), allowVoiceSettings: allow(overrides?.allowVoiceSettings), From 4cd7d95746a425d81cdf8d6e131c2c554c26bfe9 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:15:58 +0100 Subject: [PATCH 0170/1007] style(browser): apply oxfmt cleanup for gate --- src/browser/pw-session.ts | 2 +- .../server-context.remote-tab-ops.test.ts | 2 +- src/browser/server-context.ts | 22 +++++++++---------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/browser/pw-session.ts b/src/browser/pw-session.ts index b1a704b12..08371f4bd 100644 --- a/src/browser/pw-session.ts +++ b/src/browser/pw-session.ts @@ -7,8 +7,8 @@ import type { Response, } from "playwright-core"; import { chromium } from "playwright-core"; -import type { SsrFPolicy } from "../infra/net/ssrf.js"; import { formatErrorMessage } from "../infra/errors.js"; +import type { SsrFPolicy } from "../infra/net/ssrf.js"; import { appendCdpPath, fetchJson, getHeadersWithAuth, withCdpSocket } from "./cdp.helpers.js"; import { normalizeCdpWsUrl } from "./cdp.js"; import { getChromeWebSocketUrl } from "./chrome.js"; diff --git a/src/browser/server-context.remote-tab-ops.test.ts b/src/browser/server-context.remote-tab-ops.test.ts index 70d4ea844..a4ae8b539 100644 --- a/src/browser/server-context.remote-tab-ops.test.ts +++ b/src/browser/server-context.remote-tab-ops.test.ts @@ -1,9 +1,9 @@ import { afterEach, describe, expect, it, vi } from "vitest"; -import type { BrowserServerState } from "./server-context.js"; import { withFetchPreconnect } from "../test-utils/fetch-mock.js"; import * as cdpModule from "./cdp.js"; import { InvalidBrowserNavigationUrlError } from "./navigation-guard.js"; import * as pwAiModule from "./pw-ai-module.js"; +import type { BrowserServerState } from "./server-context.js"; import "./server-context.chrome-test-harness.js"; import { createBrowserRouteContext } from "./server-context.js"; diff --git a/src/browser/server-context.ts b/src/browser/server-context.ts index 93c90b1ef..22aba46d9 100644 --- a/src/browser/server-context.ts +++ b/src/browser/server-context.ts @@ -1,15 +1,4 @@ import fs from "node:fs"; -import type { ResolvedBrowserProfile } from "./config.js"; -import type { PwAiModule } from "./pw-ai-module.js"; -import type { - BrowserServerState, - BrowserRouteContext, - BrowserTab, - ContextOptions, - ProfileContext, - ProfileRuntimeState, - ProfileStatus, -} from "./server-context.types.js"; import { SsrFBlockedError } from "../infra/net/ssrf.js"; import { fetchJson, fetchOk } from "./cdp.helpers.js"; import { appendCdpPath, createTargetViaCdp, normalizeCdpWsUrl } from "./cdp.js"; @@ -20,6 +9,7 @@ import { resolveOpenClawUserDataDir, stopOpenClawChrome, } from "./chrome.js"; +import type { ResolvedBrowserProfile } from "./config.js"; import { resolveProfile } from "./config.js"; import { ensureChromeExtensionRelayServer, @@ -30,11 +20,21 @@ import { InvalidBrowserNavigationUrlError, withBrowserNavigationPolicy, } from "./navigation-guard.js"; +import type { PwAiModule } from "./pw-ai-module.js"; import { getPwAiModule } from "./pw-ai-module.js"; import { refreshResolvedBrowserConfigFromDisk, resolveBrowserProfileWithHotReload, } from "./resolved-config-refresh.js"; +import type { + BrowserServerState, + BrowserRouteContext, + BrowserTab, + ContextOptions, + ProfileContext, + ProfileRuntimeState, + ProfileStatus, +} from "./server-context.types.js"; import { resolveTargetIdFromTabs } from "./target-id.js"; import { movePathToTrash } from "./trash.js"; From 14b0d2b816d8c045add78c38a32ea1b72ad9b4c4 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:17:44 +0100 Subject: [PATCH 0171/1007] refactor: harden control-ui auth flow and add insecure-flag audit summary --- docs/gateway/security/index.md | 13 +- .../server/ws-connection/message-handler.ts | 179 ++++++++++++------ src/security/audit.test.ts | 37 +++- src/security/audit.ts | 38 +++- 4 files changed, 203 insertions(+), 64 deletions(-) diff --git a/docs/gateway/security/index.md b/docs/gateway/security/index.md index 467cdb371..d30f5f8c7 100644 --- a/docs/gateway/security/index.md +++ b/docs/gateway/security/index.md @@ -127,8 +127,9 @@ High-signal `checkId` values you will most likely see in real deployments (not e | `gateway.http.no_auth` | warn/critical | Gateway HTTP APIs reachable with `auth.mode="none"` | `gateway.auth.mode`, `gateway.http.endpoints.*` | no | | `gateway.tools_invoke_http.dangerous_allow` | warn/critical | Re-enables dangerous tools over HTTP API | `gateway.tools.allow` | no | | `gateway.tailscale_funnel` | critical | Public internet exposure | `gateway.tailscale.mode` | no | -| `gateway.control_ui.insecure_auth` | critical | Insecure-auth toggle enabled | `gateway.controlUi.allowInsecureAuth` | no | +| `gateway.control_ui.insecure_auth` | warn | Insecure-auth compatibility toggle enabled | `gateway.controlUi.allowInsecureAuth` | no | | `gateway.control_ui.device_auth_disabled` | critical | Disables device identity check | `gateway.controlUi.dangerouslyDisableDeviceAuth` | no | +| `config.insecure_or_dangerous_flags` | warn | Any insecure/dangerous debug flags enabled | multiple keys (see finding detail) | no | | `hooks.token_too_short` | warn | Easier brute force on hook ingress | `hooks.token` | no | | `hooks.request_session_key_enabled` | warn/critical | External caller can choose sessionKey | `hooks.allowRequestSessionKey` | no | | `hooks.request_session_key_prefixes_missing` | warn/critical | No bound on external session key shapes | `hooks.allowedSessionKeyPrefixes` | no | @@ -153,6 +154,16 @@ keep it off unless you are actively debugging and can revert quickly. `openclaw security audit` warns when this setting is enabled. +## Insecure or dangerous flags summary + +`openclaw security audit` includes `config.insecure_or_dangerous_flags` when any +insecure/dangerous debug switches are enabled. This warning aggregates the exact +keys so you can review them in one place (for example +`gateway.controlUi.allowInsecureAuth=true`, +`gateway.controlUi.dangerouslyDisableDeviceAuth=true`, +`hooks.gmail.allowUnsafeExternalContent=true`, or +`tools.exec.applyPatch.workspaceOnly=false`). + ## Reverse Proxy Configuration If you run the Gateway behind a reverse proxy (nginx, Caddy, Traefik, etc.), you should configure `gateway.trustedProxies` for proper client IP detection. diff --git a/src/gateway/server/ws-connection/message-handler.ts b/src/gateway/server/ws-connection/message-handler.ts index 61be61faf..92a3d1e5c 100644 --- a/src/gateway/server/ws-connection/message-handler.ts +++ b/src/gateway/server/ws-connection/message-handler.ts @@ -72,6 +72,40 @@ type SubsystemLogger = ReturnType; const DEVICE_SIGNATURE_SKEW_MS = 10 * 60 * 1000; +type ControlUiAuthPolicy = { + allowInsecureAuthConfigured: boolean; + dangerouslyDisableDeviceAuth: boolean; + allowBypass: boolean; + device: ConnectParams["device"] | null | undefined; +}; + +function resolveControlUiAuthPolicy(params: { + isControlUi: boolean; + controlUiConfig: + | { + allowInsecureAuth?: boolean; + dangerouslyDisableDeviceAuth?: boolean; + } + | undefined; + deviceRaw: ConnectParams["device"] | null | undefined; +}): ControlUiAuthPolicy { + const allowInsecureAuthConfigured = + params.isControlUi && params.controlUiConfig?.allowInsecureAuth === true; + const dangerouslyDisableDeviceAuth = + params.isControlUi && params.controlUiConfig?.dangerouslyDisableDeviceAuth === true; + return { + allowInsecureAuthConfigured, + dangerouslyDisableDeviceAuth, + // `allowInsecureAuth` must not bypass secure-context/device-auth requirements. + allowBypass: dangerouslyDisableDeviceAuth, + device: dangerouslyDisableDeviceAuth ? null : params.deviceRaw, + }; +} + +function shouldSkipControlUiPairing(policy: ControlUiAuthPolicy, sharedAuthOk: boolean): boolean { + return policy.allowBypass && sharedAuthOk; +} + export function attachGatewayWsMessageHandler(params: { socket: WebSocket; upgradeReq: IncomingMessage; @@ -337,62 +371,74 @@ export function attachGatewayWsMessageHandler(params: { const hasTokenAuth = Boolean(connectParams.auth?.token); const hasPasswordAuth = Boolean(connectParams.auth?.password); const hasSharedAuth = hasTokenAuth || hasPasswordAuth; - const allowInsecureControlUi = - isControlUi && configSnapshot.gateway?.controlUi?.allowInsecureAuth === true; - const disableControlUiDeviceAuth = - isControlUi && configSnapshot.gateway?.controlUi?.dangerouslyDisableDeviceAuth === true; - // `allowInsecureAuth` must not bypass secure-context/device-auth requirements. - const allowControlUiBypass = disableControlUiDeviceAuth; - const device = disableControlUiDeviceAuth ? null : deviceRaw; - - const hasDeviceTokenCandidate = Boolean(connectParams.auth?.token && device); - let authResult: GatewayAuthResult = await authorizeGatewayConnect({ - auth: resolvedAuth, - connectAuth: connectParams.auth, - req: upgradeReq, - trustedProxies, - allowTailscaleHeaderAuth: true, - rateLimiter: hasDeviceTokenCandidate ? undefined : rateLimiter, - clientIp, - rateLimitScope: AUTH_RATE_LIMIT_SCOPE_SHARED_SECRET, + const controlUiAuthPolicy = resolveControlUiAuthPolicy({ + isControlUi, + controlUiConfig: configSnapshot.gateway?.controlUi, + deviceRaw, }); + const device = controlUiAuthPolicy.device; - if ( - hasDeviceTokenCandidate && - authResult.ok && - rateLimiter && - (authResult.method === "token" || authResult.method === "password") - ) { - const sharedRateCheck = rateLimiter.check(clientIp, AUTH_RATE_LIMIT_SCOPE_SHARED_SECRET); - if (!sharedRateCheck.allowed) { - authResult = { - ok: false, - reason: "rate_limited", - rateLimited: true, - retryAfterMs: sharedRateCheck.retryAfterMs, - }; - } else { - rateLimiter.reset(clientIp, AUTH_RATE_LIMIT_SCOPE_SHARED_SECRET); + const resolveAuthState = async () => { + const hasDeviceTokenCandidate = Boolean(connectParams.auth?.token && device); + let nextAuthResult: GatewayAuthResult = await authorizeGatewayConnect({ + auth: resolvedAuth, + connectAuth: connectParams.auth, + req: upgradeReq, + trustedProxies, + allowTailscaleHeaderAuth: true, + rateLimiter: hasDeviceTokenCandidate ? undefined : rateLimiter, + clientIp, + rateLimitScope: AUTH_RATE_LIMIT_SCOPE_SHARED_SECRET, + }); + + if ( + hasDeviceTokenCandidate && + nextAuthResult.ok && + rateLimiter && + (nextAuthResult.method === "token" || nextAuthResult.method === "password") + ) { + const sharedRateCheck = rateLimiter.check( + clientIp, + AUTH_RATE_LIMIT_SCOPE_SHARED_SECRET, + ); + if (!sharedRateCheck.allowed) { + nextAuthResult = { + ok: false, + reason: "rate_limited", + rateLimited: true, + retryAfterMs: sharedRateCheck.retryAfterMs, + }; + } else { + rateLimiter.reset(clientIp, AUTH_RATE_LIMIT_SCOPE_SHARED_SECRET); + } } - } - let authOk = authResult.ok; - let authMethod = - authResult.method ?? (resolvedAuth.mode === "password" ? "password" : "token"); - const sharedAuthResult = hasSharedAuth - ? await authorizeGatewayConnect({ - auth: { ...resolvedAuth, allowTailscale: false }, - connectAuth: connectParams.auth, - req: upgradeReq, - trustedProxies, - // Shared-auth probe only; rate-limit side effects are handled in - // the primary auth flow (or deferred for device-token candidates). - rateLimitScope: AUTH_RATE_LIMIT_SCOPE_SHARED_SECRET, - }) - : null; - const sharedAuthOk = - sharedAuthResult?.ok === true && - (sharedAuthResult.method === "token" || sharedAuthResult.method === "password"); + const nextAuthMethod = + nextAuthResult.method ?? (resolvedAuth.mode === "password" ? "password" : "token"); + const sharedAuthResult = hasSharedAuth + ? await authorizeGatewayConnect({ + auth: { ...resolvedAuth, allowTailscale: false }, + connectAuth: connectParams.auth, + req: upgradeReq, + trustedProxies, + // Shared-auth probe only; rate-limit side effects are handled in + // the primary auth flow (or deferred for device-token candidates). + rateLimitScope: AUTH_RATE_LIMIT_SCOPE_SHARED_SECRET, + }) + : null; + const nextSharedAuthOk = + sharedAuthResult?.ok === true && + (sharedAuthResult.method === "token" || sharedAuthResult.method === "password"); + + return { + authResult: nextAuthResult, + authOk: nextAuthResult.ok, + authMethod: nextAuthMethod, + sharedAuthOk: nextSharedAuthOk, + }; + }; + + let { authResult, authOk, authMethod, sharedAuthOk } = await resolveAuthState(); const rejectUnauthorized = (failedAuth: GatewayAuthResult) => { markHandshakeFailure("unauthorized", { authMode: resolvedAuth.mode, @@ -421,35 +467,46 @@ export function attachGatewayWsMessageHandler(params: { sendHandshakeErrorResponse(ErrorCodes.INVALID_REQUEST, authMessage); close(1008, truncateCloseReason(authMessage)); }; - if (!device) { - if (scopes.length > 0 && !allowControlUiBypass) { + const clearUnboundScopes = () => { + if (scopes.length > 0 && !controlUiAuthPolicy.allowBypass) { scopes = []; connectParams.scopes = scopes; } + }; + const handleMissingDeviceIdentity = (): boolean => { + if (device) { + return true; + } + clearUnboundScopes(); const canSkipDevice = sharedAuthOk; - if (isControlUi && !allowControlUiBypass) { + if (isControlUi && !controlUiAuthPolicy.allowBypass) { const errorMessage = "control ui requires device identity (use HTTPS or localhost secure context)"; markHandshakeFailure("control-ui-insecure-auth", { - insecureAuthConfigured: allowInsecureControlUi, + insecureAuthConfigured: controlUiAuthPolicy.allowInsecureAuthConfigured, }); sendHandshakeErrorResponse(ErrorCodes.INVALID_REQUEST, errorMessage); close(1008, errorMessage); - return; + return false; } - // Allow shared-secret authenticated connections (e.g., control-ui) to skip device identity + // Allow shared-secret authenticated connections (e.g., control-ui) to skip device identity. if (!canSkipDevice) { if (!authOk && hasSharedAuth) { rejectUnauthorized(authResult); - return; + return false; } markHandshakeFailure("device-required"); sendHandshakeErrorResponse(ErrorCodes.NOT_PAIRED, "device identity required"); close(1008, "device identity required"); - return; + return false; } + + return true; + }; + if (!handleMissingDeviceIdentity()) { + return; } if (device) { const derivedId = deriveDeviceIdFromPublicKey(device.publicKey); @@ -625,7 +682,7 @@ export function attachGatewayWsMessageHandler(params: { return; } - const skipPairing = allowControlUiBypass && sharedAuthOk; + const skipPairing = shouldSkipControlUiPairing(controlUiAuthPolicy, sharedAuthOk); if (device && devicePublicKey && !skipPairing) { const formatAuditList = (items: string[] | undefined): string => { if (!items || items.length === 0) { diff --git a/src/security/audit.test.ts b/src/security/audit.test.ts index 3585a7b69..8e6a04725 100644 --- a/src/security/audit.test.ts +++ b/src/security/audit.test.ts @@ -707,7 +707,12 @@ describe("security audit", () => { expect.arrayContaining([ expect.objectContaining({ checkId: "gateway.control_ui.insecure_auth", - severity: "critical", + severity: "warn", + }), + expect.objectContaining({ + checkId: "config.insecure_or_dangerous_flags", + severity: "warn", + detail: expect.stringContaining("gateway.controlUi.allowInsecureAuth=true"), }), ]), ); @@ -728,10 +733,40 @@ describe("security audit", () => { checkId: "gateway.control_ui.device_auth_disabled", severity: "critical", }), + expect.objectContaining({ + checkId: "config.insecure_or_dangerous_flags", + severity: "warn", + detail: expect.stringContaining("gateway.controlUi.dangerouslyDisableDeviceAuth=true"), + }), ]), ); }); + it("warns when insecure/dangerous debug flags are enabled", async () => { + const cfg: OpenClawConfig = { + hooks: { + gmail: { allowUnsafeExternalContent: true }, + mappings: [{ allowUnsafeExternalContent: true }], + }, + tools: { + exec: { + applyPatch: { + workspaceOnly: false, + }, + }, + }, + }; + + const res = await audit(cfg); + const finding = res.findings.find((f) => f.checkId === "config.insecure_or_dangerous_flags"); + + expect(finding).toBeTruthy(); + expect(finding?.severity).toBe("warn"); + expect(finding?.detail).toContain("hooks.gmail.allowUnsafeExternalContent=true"); + expect(finding?.detail).toContain("hooks.mappings[0].allowUnsafeExternalContent=true"); + expect(finding?.detail).toContain("tools.exec.applyPatch.workspaceOnly=false"); + }); + it("flags trusted-proxy auth mode without generic shared-secret findings", async () => { const cfg: OpenClawConfig = { gateway: { diff --git a/src/security/audit.ts b/src/security/audit.ts index 294110158..8d4b3427f 100644 --- a/src/security/audit.ts +++ b/src/security/audit.ts @@ -114,6 +114,30 @@ function normalizeAllowFromList(list: Array | undefined | null) return list.map((v) => String(v).trim()).filter(Boolean); } +function collectEnabledInsecureOrDangerousFlags(cfg: OpenClawConfig): string[] { + const enabledFlags: string[] = []; + if (cfg.gateway?.controlUi?.allowInsecureAuth === true) { + enabledFlags.push("gateway.controlUi.allowInsecureAuth=true"); + } + if (cfg.gateway?.controlUi?.dangerouslyDisableDeviceAuth === true) { + enabledFlags.push("gateway.controlUi.dangerouslyDisableDeviceAuth=true"); + } + if (cfg.hooks?.gmail?.allowUnsafeExternalContent === true) { + enabledFlags.push("hooks.gmail.allowUnsafeExternalContent=true"); + } + if (Array.isArray(cfg.hooks?.mappings)) { + for (const [index, mapping] of cfg.hooks.mappings.entries()) { + if (mapping?.allowUnsafeExternalContent === true) { + enabledFlags.push(`hooks.mappings[${index}].allowUnsafeExternalContent=true`); + } + } + } + if (cfg.tools?.exec?.applyPatch?.workspaceOnly === false) { + enabledFlags.push("tools.exec.applyPatch.workspaceOnly=false"); + } + return enabledFlags; +} + async function collectFilesystemFindings(params: { stateDir: string; configPath: string; @@ -348,7 +372,7 @@ function collectGatewayConfigFindings( if (cfg.gateway?.controlUi?.allowInsecureAuth === true) { findings.push({ checkId: "gateway.control_ui.insecure_auth", - severity: "critical", + severity: "warn", title: "Control UI insecure auth toggle enabled", detail: "gateway.controlUi.allowInsecureAuth=true does not bypass secure context or device identity checks; only dangerouslyDisableDeviceAuth disables Control UI device identity checks.", @@ -367,6 +391,18 @@ function collectGatewayConfigFindings( }); } + const enabledDangerousFlags = collectEnabledInsecureOrDangerousFlags(cfg); + if (enabledDangerousFlags.length > 0) { + findings.push({ + checkId: "config.insecure_or_dangerous_flags", + severity: "warn", + title: "Insecure or dangerous config flags enabled", + detail: `Detected ${enabledDangerousFlags.length} enabled flag(s): ${enabledDangerousFlags.join(", ")}.`, + remediation: + "Disable these flags when not actively debugging, or keep deployment scoped to trusted/local-only networks.", + }); + } + const token = typeof auth.token === "string" && auth.token.trim().length > 0 ? auth.token.trim() : null; if (auth.mode === "token" && token && token.length < 24) { From 9516ace3c950d816cfbbef9f0be6ed9b7c4300e4 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:23:41 +0100 Subject: [PATCH 0172/1007] docs(changelog): note ACP resource-link prompt hardening --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 31c3fa2cf..e43af8d72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ Docs: https://docs.openclaw.ai ### Fixes +- ACP/Security: escape control and delimiter characters in ACP `resource_link` title/URI metadata before prompt interpolation to prevent metadata-driven prompt injection through resource links. This ships in the next npm release. Thanks @aether-ai-agent for reporting. - Security/Agents: keep overflow compaction retry budgeting global across tool-result truncation recovery so successful truncation cannot reset the overflow retry counter and amplify retry/cost cycles. This ships in the next npm release. Thanks @aether-ai-agent for reporting. - BlueBubbles/Security (optional beta iMessage plugin): require webhook token authentication for all BlueBubbles webhook requests (including loopback/proxied setups), removing passwordless webhook fallback behavior. Thanks @zpbrent. - iOS/Security: force `https://` for non-loopback manual gateway hosts during iOS onboarding to block insecure remote transport URLs. (#21969) Thanks @mbelinky. From f4c89aa66e5e2c474b76036b6d07c1153384c153 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:24:19 +0100 Subject: [PATCH 0173/1007] docs(changelog): add tts provider-override hardening note --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e43af8d72..9cd632e4c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ Docs: https://docs.openclaw.ai ### Fixes - ACP/Security: escape control and delimiter characters in ACP `resource_link` title/URI metadata before prompt interpolation to prevent metadata-driven prompt injection through resource links. This ships in the next npm release. Thanks @aether-ai-agent for reporting. +- TTS/Security: make model-driven provider switching opt-in by default (`messages.tts.modelOverrides.allowProvider=false` unless explicitly enabled), while keeping voice/style overrides available, to reduce prompt-injection-driven provider hops and unexpected TTS cost escalation. This ships in the next npm release. Thanks @aether-ai-agent for reporting. - Security/Agents: keep overflow compaction retry budgeting global across tool-result truncation recovery so successful truncation cannot reset the overflow retry counter and amplify retry/cost cycles. This ships in the next npm release. Thanks @aether-ai-agent for reporting. - BlueBubbles/Security (optional beta iMessage plugin): require webhook token authentication for all BlueBubbles webhook requests (including loopback/proxied setups), removing passwordless webhook fallback behavior. Thanks @zpbrent. - iOS/Security: force `https://` for non-loopback manual gateway hosts during iOS onboarding to block insecure remote transport URLs. (#21969) Thanks @mbelinky. From b2d84528f8d2d4d7f49da7c673da2d09616c6050 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 12:25:13 +0000 Subject: [PATCH 0174/1007] refactor(test): remove duplicate cron tool harnesses --- src/acp/translator.prompt-prefix.test.ts | 20 +++++++++++++++++--- src/agents/tools/cron-tool.test-harness.ts | 12 ------------ src/agents/tools/cron-tool.test-helpers.ts | 21 --------------------- 3 files changed, 17 insertions(+), 36 deletions(-) delete mode 100644 src/agents/tools/cron-tool.test-harness.ts delete mode 100644 src/agents/tools/cron-tool.test-helpers.ts diff --git a/src/acp/translator.prompt-prefix.test.ts b/src/acp/translator.prompt-prefix.test.ts index 77aeddb01..2faf40ff8 100644 --- a/src/acp/translator.prompt-prefix.test.ts +++ b/src/acp/translator.prompt-prefix.test.ts @@ -13,13 +13,12 @@ function createConnection(): AgentSideConnection { } describe("acp prompt cwd prefix", () => { - it("redacts home directory in prompt prefix", async () => { + async function runPromptWithCwd(cwd: string) { const sessionStore = createInMemorySessionStore(); - const homeCwd = path.join(os.homedir(), "openclaw-test"); sessionStore.createSession({ sessionId: "session-1", sessionKey: "agent:main:main", - cwd: homeCwd, + cwd, }); const requestSpy = vi.fn(async (method: string) => { @@ -44,7 +43,11 @@ describe("acp prompt cwd prefix", () => { _meta: {}, } as unknown as PromptRequest), ).rejects.toThrow("stop-after-send"); + return requestSpy; + } + it("redacts home directory in prompt prefix", async () => { + const requestSpy = await runPromptWithCwd(path.join(os.homedir(), "openclaw-test")); expect(requestSpy).toHaveBeenCalledWith( "chat.send", expect.objectContaining({ @@ -53,4 +56,15 @@ describe("acp prompt cwd prefix", () => { { expectFinal: true }, ); }); + + it("keeps backslash separators when cwd uses them", async () => { + const requestSpy = await runPromptWithCwd(`${os.homedir()}\\openclaw-test`); + expect(requestSpy).toHaveBeenCalledWith( + "chat.send", + expect.objectContaining({ + message: expect.stringContaining("[Working directory: ~\\openclaw-test]"), + }), + { expectFinal: true }, + ); + }); }); diff --git a/src/agents/tools/cron-tool.test-harness.ts b/src/agents/tools/cron-tool.test-harness.ts deleted file mode 100644 index af8153f3b..000000000 --- a/src/agents/tools/cron-tool.test-harness.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { vi } from "vitest"; -import type { MockFn } from "../../test-utils/vitest-mock-fn.js"; - -export const callGatewayMock = vi.fn() as unknown as MockFn; - -vi.mock("../../gateway/call.js", () => ({ - callGateway: (opts: unknown) => callGatewayMock(opts), -})); - -vi.mock("../agent-scope.js", () => ({ - resolveSessionAgentId: () => "agent-123", -})); diff --git a/src/agents/tools/cron-tool.test-helpers.ts b/src/agents/tools/cron-tool.test-helpers.ts deleted file mode 100644 index 904563686..000000000 --- a/src/agents/tools/cron-tool.test-helpers.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { vi } from "vitest"; - -type GatewayMockFn = ((opts: unknown) => unknown) & { - mockReset: () => void; - mockResolvedValue: (value: unknown) => void; -}; - -export const callGatewayMock = vi.fn() as GatewayMockFn; - -vi.mock("../../gateway/call.js", () => ({ - callGateway: (opts: unknown) => callGatewayMock(opts), -})); - -vi.mock("../agent-scope.js", () => ({ - resolveSessionAgentId: () => "agent-123", -})); - -export function resetCronToolGatewayMock() { - callGatewayMock.mockReset(); - callGatewayMock.mockResolvedValue({ ok: true }); -} From 1835dec2004fe7a62c6a7ba46b8485f124ec6199 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:25:35 +0100 Subject: [PATCH 0175/1007] fix(security): force sandbox browser hash migration and audit stale labels --- CHANGELOG.md | 2 +- docs/cli/security.md | 1 + src/agents/sandbox/browser.ts | 12 ++- src/agents/sandbox/config-hash.test.ts | 26 ++++++ src/agents/sandbox/config-hash.ts | 1 + src/agents/sandbox/constants.ts | 1 + src/discord/voice/manager.ts | 9 +- src/gateway/http-auth-helpers.test.ts | 2 +- src/security/audit-extra.async.ts | 117 +++++++++++++++++++++++++ src/security/audit-extra.ts | 1 + src/security/audit.test.ts | 79 +++++++++++++++++ src/security/audit.ts | 9 ++ 12 files changed, 254 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cd632e4c..9d9247fb8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,7 +56,7 @@ Docs: https://docs.openclaw.ai - Browser/Security: block upload path symlink escapes so browser upload sources cannot traverse outside the allowed workspace via symlinked paths. (#21972) Thanks @mbelinky. - Security/Dependencies: bump transitive `hono` usage to `4.11.10` to incorporate timing-safe authentication comparison hardening for `basicAuth`/`bearerAuth` (`GHSA-gq3j-xvxp-8hrf`). Thanks @vincentkoc. - Security/Gateway: parse `X-Forwarded-For` with trust-preserving semantics when requests come from configured trusted proxies, preventing proxy-chain spoofing from influencing client IP classification and rate-limit identity. Thanks @AnthonyDiSanti and @vincentkoc. -- Security/Sandbox: remove default `--no-sandbox` for the browser container entrypoint, add explicit opt-in via `OPENCLAW_BROWSER_NO_SANDBOX` / `CLAWDBOT_BROWSER_NO_SANDBOX`, and harden the default container security posture (`GHSA-43x4-g22p-3hrq`). Thanks @TerminalsandCoffee and @vincentkoc. +- Security/Sandbox: remove default `--no-sandbox` for the browser container entrypoint, add explicit opt-in via `OPENCLAW_BROWSER_NO_SANDBOX` / `CLAWDBOT_BROWSER_NO_SANDBOX`, and add security-audit checks for stale/missing sandbox browser Docker hash labels. This ships in the next npm release. Thanks @TerminalsandCoffee and @vincentkoc. - Auto-reply/Tools: forward `senderIsOwner` through embedded queued/followup runner params so owner-only tools remain available for authorized senders. (#22296) thanks @hcoj. - Discord: restore model picker back navigation when a provider is missing and document the Discord picker flow. (#21458) Thanks @pejmanjohn and @thewilloftheshadow. - Memory/QMD: respect per-agent `memorySearch.enabled=false` during gateway QMD startup initialization, split multi-collection QMD searches into per-collection queries (`search`/`vsearch`/`query`) to avoid sparse-term drops, prefer collection-hinted doc resolution to avoid stale-hash collisions, retry boot updates on transient lock/timeout failures, skip `qmd embed` in BM25-only `search` mode (including `memory index --force`), and serialize embed runs globally with failure backoff to prevent CPU storms on multi-agent hosts. (#20581, #21590, #20513, #20001, #21266, #21583, #20346, #19493) Thanks @danielrevivo, @zanderkrause, @sunyan034-cmd, @tilleulenspiegel, @dae-oss, @adamlongcreativellc, @jonathanadams96, and @kiliansitel. diff --git a/docs/cli/security.md b/docs/cli/security.md index 129f004c7..1e97225c8 100644 --- a/docs/cli/security.md +++ b/docs/cli/security.md @@ -28,6 +28,7 @@ This is for cooperative/shared inbox hardening. A single Gateway shared by mutua It also warns when small models (`<=300B`) are used without sandboxing and with web/browser tools enabled. For webhook ingress, it warns when `hooks.defaultSessionKey` is unset, when request `sessionKey` overrides are enabled, and when overrides are enabled without `hooks.allowedSessionKeyPrefixes`. It also warns when sandbox Docker settings are configured while sandbox mode is off, when `gateway.nodes.denyCommands` uses ineffective pattern-like/unknown entries, when global `tools.profile="minimal"` is overridden by agent tool profiles, and when installed extension plugin tools may be reachable under permissive tool policy. +It also warns when existing sandbox browser Docker containers have missing/stale hash labels (for example pre-migration containers missing `openclaw.browserConfigEpoch`) and recommends `openclaw sandbox recreate --browser --all`. It also warns when npm-based plugin/hook install records are unpinned, missing integrity metadata, or drift from currently installed package versions. It warns when `gateway.auth.mode="none"` leaves Gateway HTTP APIs reachable without a shared secret (`/tools/invoke` plus any enabled `/v1/*` endpoint). diff --git a/src/agents/sandbox/browser.ts b/src/agents/sandbox/browser.ts index 487cd3e29..069eea617 100644 --- a/src/agents/sandbox/browser.ts +++ b/src/agents/sandbox/browser.ts @@ -10,7 +10,11 @@ import { defaultRuntime } from "../../runtime.js"; import { BROWSER_BRIDGES } from "./browser-bridges.js"; import { computeSandboxBrowserConfigHash } from "./config-hash.js"; import { resolveSandboxBrowserDockerCreateConfig } from "./config.js"; -import { DEFAULT_SANDBOX_BROWSER_IMAGE, SANDBOX_AGENT_WORKSPACE_MOUNT } from "./constants.js"; +import { + DEFAULT_SANDBOX_BROWSER_IMAGE, + SANDBOX_AGENT_WORKSPACE_MOUNT, + SANDBOX_BROWSER_SECURITY_HASH_EPOCH, +} from "./constants.js"; import { buildSandboxCreateArgs, dockerContainerState, @@ -125,6 +129,7 @@ export async function ensureSandboxBrowser(params: { headless: params.cfg.browser.headless, enableNoVnc: params.cfg.browser.enableNoVnc, }, + securityEpoch: SANDBOX_BROWSER_SECURITY_HASH_EPOCH, workspaceAccess: params.cfg.workspaceAccess, workspaceDir: params.workspaceDir, agentWorkspaceDir: params.agentWorkspaceDir, @@ -177,7 +182,10 @@ export async function ensureSandboxBrowser(params: { name: containerName, cfg: browserDockerCfg, scopeKey: params.scopeKey, - labels: { "openclaw.sandboxBrowser": "1" }, + labels: { + "openclaw.sandboxBrowser": "1", + "openclaw.browserConfigEpoch": SANDBOX_BROWSER_SECURITY_HASH_EPOCH, + }, configHash: expectedHash, }); const mainMountSuffix = diff --git a/src/agents/sandbox/config-hash.test.ts b/src/agents/sandbox/config-hash.test.ts index be70a0470..852bfea1d 100644 --- a/src/agents/sandbox/config-hash.test.ts +++ b/src/agents/sandbox/config-hash.test.ts @@ -115,6 +115,7 @@ describe("computeSandboxBrowserConfigHash", () => { headless: false, enableNoVnc: true, }, + securityEpoch: "epoch-v1", workspaceAccess: "rw" as const, workspaceDir: "/tmp/workspace", agentWorkspaceDir: "/tmp/workspace", @@ -133,4 +134,29 @@ describe("computeSandboxBrowserConfigHash", () => { }); expect(left).not.toBe(right); }); + + it("changes when security epoch changes", () => { + const shared = { + docker: createDockerConfig(), + browser: { + cdpPort: 9222, + vncPort: 5900, + noVncPort: 6080, + headless: false, + enableNoVnc: true, + }, + workspaceAccess: "rw" as const, + workspaceDir: "/tmp/workspace", + agentWorkspaceDir: "/tmp/workspace", + }; + const left = computeSandboxBrowserConfigHash({ + ...shared, + securityEpoch: "epoch-v1", + }); + const right = computeSandboxBrowserConfigHash({ + ...shared, + securityEpoch: "epoch-v2", + }); + expect(left).not.toBe(right); + }); }); diff --git a/src/agents/sandbox/config-hash.ts b/src/agents/sandbox/config-hash.ts index 62dfd9142..e77652aab 100644 --- a/src/agents/sandbox/config-hash.ts +++ b/src/agents/sandbox/config-hash.ts @@ -14,6 +14,7 @@ type SandboxBrowserHashInput = { SandboxBrowserConfig, "cdpPort" | "vncPort" | "noVncPort" | "headless" | "enableNoVnc" >; + securityEpoch: string; workspaceAccess: SandboxWorkspaceAccess; workspaceDir: string; agentWorkspaceDir: string; diff --git a/src/agents/sandbox/constants.ts b/src/agents/sandbox/constants.ts index 3076dac5d..6e3c4f776 100644 --- a/src/agents/sandbox/constants.ts +++ b/src/agents/sandbox/constants.ts @@ -38,6 +38,7 @@ export const DEFAULT_TOOL_DENY = [ export const DEFAULT_SANDBOX_BROWSER_IMAGE = "openclaw-sandbox-browser:bookworm-slim"; export const DEFAULT_SANDBOX_COMMON_IMAGE = "openclaw-sandbox-common:bookworm-slim"; +export const SANDBOX_BROWSER_SECURITY_HASH_EPOCH = "2026-02-21-no-sandbox-default"; export const DEFAULT_SANDBOX_BROWSER_PREFIX = "openclaw-sbx-browser-"; export const DEFAULT_SANDBOX_BROWSER_CDP_PORT = 9222; diff --git a/src/discord/voice/manager.ts b/src/discord/voice/manager.ts index 8668e57b6..f1e7585d6 100644 --- a/src/discord/voice/manager.ts +++ b/src/discord/voice/manager.ts @@ -148,14 +148,19 @@ type OpusDecoder = { function createOpusDecoder(): { decoder: OpusDecoder; name: string } | null { try { - const OpusScript = require("opusscript") as typeof import("opusscript"); + const OpusScript = require("opusscript") as { + new (sampleRate: number, channels: number, application: number): OpusDecoder; + Application: { AUDIO: number }; + }; const decoder = new OpusScript(SAMPLE_RATE, CHANNELS, OpusScript.Application.AUDIO); return { decoder, name: "opusscript" }; } catch (err) { logger.warn(`discord voice: opusscript init failed: ${formatErrorMessage(err)}`); } try { - const { OpusEncoder } = require("@discordjs/opus") as typeof import("@discordjs/opus"); + const { OpusEncoder } = require("@discordjs/opus") as { + OpusEncoder: new (sampleRate: number, channels: number) => OpusDecoder; + }; const decoder = new OpusEncoder(SAMPLE_RATE, CHANNELS); return { decoder, name: "@discordjs/opus" }; } catch (err) { diff --git a/src/gateway/http-auth-helpers.test.ts b/src/gateway/http-auth-helpers.test.ts index 0a4cab7d4..22ceb975d 100644 --- a/src/gateway/http-auth-helpers.test.ts +++ b/src/gateway/http-auth-helpers.test.ts @@ -25,7 +25,7 @@ describe("authorizeGatewayBearerRequestOrReply", () => { }); it("disables tailscale header auth for HTTP bearer checks", async () => { - vi.mocked(getBearerToken).mockReturnValue(null); + vi.mocked(getBearerToken).mockReturnValue(undefined); vi.mocked(authorizeGatewayConnect).mockResolvedValue({ ok: false, reason: "token_missing", diff --git a/src/security/audit-extra.async.ts b/src/security/audit-extra.async.ts index 2b61bf1e9..ef83ab9f4 100644 --- a/src/security/audit-extra.async.ts +++ b/src/security/audit-extra.async.ts @@ -11,10 +11,13 @@ import { resolveSandboxConfigForAgent, resolveSandboxToolPolicyForAgent, } from "../agents/sandbox.js"; +import { SANDBOX_BROWSER_SECURITY_HASH_EPOCH } from "../agents/sandbox/constants.js"; +import { execDockerRaw, type ExecDockerRawResult } from "../agents/sandbox/docker.js"; import type { SandboxToolPolicy } from "../agents/sandbox/types.js"; import { loadWorkspaceSkillEntries } from "../agents/skills.js"; import { resolveToolProfilePolicy } from "../agents/tool-policy.js"; import { listAgentWorkspaceDirs } from "../agents/workspace-dirs.js"; +import { formatCliCommand } from "../cli/command-format.js"; import { MANIFEST_KEY } from "../compat/legacy-names.js"; import { resolveNativeSkillsEnabled } from "../config/commands.js"; import type { OpenClawConfig, ConfigFileSnapshot } from "../config/config.js"; @@ -44,6 +47,11 @@ export type SecurityAuditFinding = { remediation?: string; }; +type ExecDockerRawFn = ( + args: string[], + opts?: { allowFailure?: boolean; input?: Buffer | string; signal?: AbortSignal }, +) => Promise; + // -------------------------------------------------------------------------- // Helpers // -------------------------------------------------------------------------- @@ -242,6 +250,115 @@ async function readInstalledPackageVersion(dir: string): Promise") { + return null; + } + return trimmed; +} + +async function listSandboxBrowserContainers( + execDockerRawFn: ExecDockerRawFn, +): Promise { + try { + const result = await execDockerRawFn( + ["ps", "-a", "--filter", "label=openclaw.sandboxBrowser=1", "--format", "{{.Names}}"], + { allowFailure: true }, + ); + if (result.code !== 0) { + return null; + } + return result.stdout + .toString("utf8") + .split(/\r?\n/) + .map((entry) => entry.trim()) + .filter(Boolean); + } catch { + return null; + } +} + +async function readSandboxBrowserHashLabels(params: { + containerName: string; + execDockerRawFn: ExecDockerRawFn; +}): Promise<{ configHash: string | null; epoch: string | null } | null> { + try { + const result = await params.execDockerRawFn( + [ + "inspect", + "-f", + '{{ index .Config.Labels "openclaw.configHash" }}\t{{ index .Config.Labels "openclaw.browserConfigEpoch" }}', + params.containerName, + ], + { allowFailure: true }, + ); + if (result.code !== 0) { + return null; + } + const [hashRaw, epochRaw] = result.stdout.toString("utf8").split("\t"); + return { + configHash: normalizeDockerLabelValue(hashRaw), + epoch: normalizeDockerLabelValue(epochRaw), + }; + } catch { + return null; + } +} + +export async function collectSandboxBrowserHashLabelFindings(params?: { + execDockerRawFn?: ExecDockerRawFn; +}): Promise { + const findings: SecurityAuditFinding[] = []; + const execFn = params?.execDockerRawFn ?? execDockerRaw; + const containers = await listSandboxBrowserContainers(execFn); + if (!containers || containers.length === 0) { + return findings; + } + + const missingHash: string[] = []; + const staleEpoch: string[] = []; + + for (const containerName of containers) { + const labels = await readSandboxBrowserHashLabels({ containerName, execDockerRawFn: execFn }); + if (!labels) { + continue; + } + if (!labels.configHash) { + missingHash.push(containerName); + } + if (labels.epoch !== SANDBOX_BROWSER_SECURITY_HASH_EPOCH) { + staleEpoch.push(containerName); + } + } + + if (missingHash.length > 0) { + findings.push({ + checkId: "sandbox.browser_container.hash_label_missing", + severity: "warn", + title: "Sandbox browser container missing config hash label", + detail: + `Containers: ${missingHash.join(", ")}. ` + + "These browser containers predate hash-based drift checks and may miss security remediations until recreated.", + remediation: `${formatCliCommand("openclaw sandbox recreate --browser --all")} (add --force to skip prompt).`, + }); + } + + if (staleEpoch.length > 0) { + findings.push({ + checkId: "sandbox.browser_container.hash_epoch_stale", + severity: "warn", + title: "Sandbox browser container hash epoch is stale", + detail: + `Containers: ${staleEpoch.join(", ")}. ` + + `Expected openclaw.browserConfigEpoch=${SANDBOX_BROWSER_SECURITY_HASH_EPOCH}.`, + remediation: `${formatCliCommand("openclaw sandbox recreate --browser --all")} (add --force to skip prompt).`, + }); + } + + return findings; +} + export async function collectPluginsTrustFindings(params: { cfg: OpenClawConfig; stateDir: string; diff --git a/src/security/audit-extra.ts b/src/security/audit-extra.ts index 4e101ba65..d38e753ca 100644 --- a/src/security/audit-extra.ts +++ b/src/security/audit-extra.ts @@ -27,6 +27,7 @@ export { // Async collectors export { + collectSandboxBrowserHashLabelFindings, collectIncludeFilePermFindings, collectInstalledSkillsCodeSafetyFindings, collectPluginsCodeSafetyFindings, diff --git a/src/security/audit.test.ts b/src/security/audit.test.ts index 8e6a04725..bcef4baf9 100644 --- a/src/security/audit.test.ts +++ b/src/security/audit.test.ts @@ -419,6 +419,85 @@ describe("security audit", () => { ).toBe(true); }); + it("warns when sandbox browser containers have missing or stale hash labels", async () => { + const tmp = await makeTmpDir("browser-hash-labels"); + const stateDir = path.join(tmp, "state"); + await fs.mkdir(stateDir, { recursive: true, mode: 0o700 }); + const configPath = path.join(stateDir, "openclaw.json"); + await fs.writeFile(configPath, "{}\n", "utf-8"); + await fs.chmod(configPath, 0o600); + + const execDockerRawFn = (async (args: string[]) => { + if (args[0] === "ps") { + return { + stdout: Buffer.from("openclaw-sbx-browser-old\nopenclaw-sbx-browser-missing-hash\n"), + stderr: Buffer.alloc(0), + code: 0, + }; + } + if (args[0] === "inspect" && args.at(-1) === "openclaw-sbx-browser-old") { + return { + stdout: Buffer.from("abc123\tepoch-v0\n"), + stderr: Buffer.alloc(0), + code: 0, + }; + } + if (args[0] === "inspect" && args.at(-1) === "openclaw-sbx-browser-missing-hash") { + return { + stdout: Buffer.from("\t\n"), + stderr: Buffer.alloc(0), + code: 0, + }; + } + return { + stdout: Buffer.alloc(0), + stderr: Buffer.from("not found"), + code: 1, + }; + }) as NonNullable; + + const res = await runSecurityAudit({ + config: {}, + includeFilesystem: true, + includeChannelSecurity: false, + stateDir, + configPath, + execDockerRawFn, + }); + + expect(hasFinding(res, "sandbox.browser_container.hash_label_missing", "warn")).toBe(true); + expect(hasFinding(res, "sandbox.browser_container.hash_epoch_stale", "warn")).toBe(true); + const staleEpoch = res.findings.find( + (f) => f.checkId === "sandbox.browser_container.hash_epoch_stale", + ); + expect(staleEpoch?.detail).toContain("openclaw-sbx-browser-old"); + }); + + it("skips sandbox browser hash label checks when docker inspect is unavailable", async () => { + const tmp = await makeTmpDir("browser-hash-labels-skip"); + const stateDir = path.join(tmp, "state"); + await fs.mkdir(stateDir, { recursive: true, mode: 0o700 }); + const configPath = path.join(stateDir, "openclaw.json"); + await fs.writeFile(configPath, "{}\n", "utf-8"); + await fs.chmod(configPath, 0o600); + + const execDockerRawFn = (async () => { + throw new Error("spawn docker ENOENT"); + }) as NonNullable; + + const res = await runSecurityAudit({ + config: {}, + includeFilesystem: true, + includeChannelSecurity: false, + stateDir, + configPath, + execDockerRawFn, + }); + + expect(hasFinding(res, "sandbox.browser_container.hash_label_missing")).toBe(false); + expect(hasFinding(res, "sandbox.browser_container.hash_epoch_stale")).toBe(false); + }); + it("uses symlink target permissions for config checks", async () => { if (isWindows) { return; diff --git a/src/security/audit.ts b/src/security/audit.ts index 8d4b3427f..92bf54f49 100644 --- a/src/security/audit.ts +++ b/src/security/audit.ts @@ -1,4 +1,5 @@ import { resolveSandboxConfigForAgent } from "../agents/sandbox.js"; +import { execDockerRaw } from "../agents/sandbox/docker.js"; import { resolveBrowserConfig, resolveProfile } from "../browser/config.js"; import { resolveBrowserControlAuth } from "../browser/control-auth.js"; import { listChannelPlugins } from "../channels/plugins/index.js"; @@ -18,6 +19,7 @@ import { collectHooksHardeningFindings, collectIncludeFilePermFindings, collectInstalledSkillsCodeSafetyFindings, + collectSandboxBrowserHashLabelFindings, collectMinimalProfileOverrideFindings, collectModelHygieneFindings, collectNodeDenyCommandPatternFindings, @@ -89,6 +91,8 @@ export type SecurityAuditOptions = { probeGatewayFn?: typeof probeGateway; /** Dependency injection for tests (Windows ACL checks). */ execIcacls?: ExecFn; + /** Dependency injection for tests (Docker label checks). */ + execDockerRawFn?: typeof execDockerRaw; }; function countBySeverity(findings: SecurityAuditFinding[]): SecurityAuditSummary { @@ -742,6 +746,11 @@ export async function runSecurityAudit(opts: SecurityAuditOptions): Promise Date: Sat, 21 Feb 2026 13:31:58 +0100 Subject: [PATCH 0176/1007] refactor(gateway): make ws and http auth surfaces explicit --- src/gateway/auth.test.ts | 52 +++++++++++++- src/gateway/auth.ts | 67 +++++++++++++------ src/gateway/http-auth-helpers.test.ts | 14 ++-- src/gateway/http-auth-helpers.ts | 5 +- src/gateway/server-http.ts | 8 +-- .../server/ws-connection/message-handler.ts | 11 +-- src/gateway/tools-invoke-http.test.ts | 2 +- src/gateway/tools-invoke-http.ts | 5 +- 8 files changed, 119 insertions(+), 45 deletions(-) diff --git a/src/gateway/auth.test.ts b/src/gateway/auth.test.ts index 6cdc645f7..1d96886fc 100644 --- a/src/gateway/auth.test.ts +++ b/src/gateway/auth.test.ts @@ -1,6 +1,11 @@ import { describe, expect, it, vi } from "vitest"; import type { AuthRateLimiter } from "./auth-rate-limit.js"; -import { authorizeGatewayConnect, resolveGatewayAuth } from "./auth.js"; +import { + authorizeGatewayConnect, + authorizeHttpGatewayConnect, + authorizeWsControlUiGatewayConnect, + resolveGatewayAuth, +} from "./auth.js"; function createLimiterSpy(): AuthRateLimiter & { check: ReturnType; @@ -215,7 +220,7 @@ describe("gateway auth", () => { auth: { mode: "token", token: "secret", allowTailscale: true }, connectAuth: null, tailscaleWhois: async () => ({ login: "peter", name: "Peter" }), - allowTailscaleHeaderAuth: true, + authSurface: "ws-control-ui", req: { socket: { remoteAddress: "127.0.0.1" }, headers: { @@ -234,6 +239,49 @@ describe("gateway auth", () => { expect(res.user).toBe("peter"); }); + it("keeps tailscale header auth disabled on HTTP auth wrapper", async () => { + const res = await authorizeHttpGatewayConnect({ + auth: { mode: "token", token: "secret", allowTailscale: true }, + connectAuth: null, + tailscaleWhois: async () => ({ login: "peter", name: "Peter" }), + req: { + socket: { remoteAddress: "127.0.0.1" }, + headers: { + host: "gateway.local", + "x-forwarded-for": "100.64.0.1", + "x-forwarded-proto": "https", + "x-forwarded-host": "ai-hub.bone-egret.ts.net", + "tailscale-user-login": "peter", + "tailscale-user-name": "Peter", + }, + } as never, + }); + expect(res.ok).toBe(false); + expect(res.reason).toBe("token_missing"); + }); + + it("enables tailscale header auth on ws control-ui auth wrapper", async () => { + const res = await authorizeWsControlUiGatewayConnect({ + auth: { mode: "token", token: "secret", allowTailscale: true }, + connectAuth: null, + tailscaleWhois: async () => ({ login: "peter", name: "Peter" }), + req: { + socket: { remoteAddress: "127.0.0.1" }, + headers: { + host: "gateway.local", + "x-forwarded-for": "100.64.0.1", + "x-forwarded-proto": "https", + "x-forwarded-host": "ai-hub.bone-egret.ts.net", + "tailscale-user-login": "peter", + "tailscale-user-name": "Peter", + }, + } as never, + }); + expect(res.ok).toBe(true); + expect(res.method).toBe("tailscale"); + expect(res.user).toBe("peter"); + }); + it("uses proxy-aware request client IP by default for rate-limit checks", async () => { const limiter = createLimiterSpy(); const res = await authorizeGatewayConnect({ diff --git a/src/gateway/auth.ts b/src/gateway/auth.ts index 76236dc2e..14c05a817 100644 --- a/src/gateway/auth.ts +++ b/src/gateway/auth.ts @@ -52,6 +52,27 @@ type ConnectAuth = { password?: string; }; +export type GatewayAuthSurface = "http" | "ws-control-ui"; + +export type AuthorizeGatewayConnectParams = { + auth: ResolvedGatewayAuth; + connectAuth?: ConnectAuth | null; + req?: IncomingMessage; + trustedProxies?: string[]; + tailscaleWhois?: TailscaleWhoisLookup; + /** + * Explicit auth surface. HTTP keeps Tailscale forwarded-header auth disabled. + * WS Control UI enables it intentionally for tokenless trusted-host login. + */ + authSurface?: GatewayAuthSurface; + /** Optional rate limiter instance; when provided, failed attempts are tracked per IP. */ + rateLimiter?: AuthRateLimiter; + /** Client IP used for rate-limit tracking. Falls back to proxy-aware request IP resolution. */ + clientIp?: string; + /** Optional limiter scope; defaults to shared-secret auth scope. */ + rateLimitScope?: string; +}; + type TailscaleUser = { login: string; name: string; @@ -319,27 +340,17 @@ function authorizeTrustedProxy(params: { return { user }; } -export async function authorizeGatewayConnect(params: { - auth: ResolvedGatewayAuth; - connectAuth?: ConnectAuth | null; - req?: IncomingMessage; - trustedProxies?: string[]; - tailscaleWhois?: TailscaleWhoisLookup; - /** - * Opt-in for accepting Tailscale Serve identity headers as primary auth. - * Default is disabled for HTTP surfaces; WS connect enables this explicitly. - */ - allowTailscaleHeaderAuth?: boolean; - /** Optional rate limiter instance; when provided, failed attempts are tracked per IP. */ - rateLimiter?: AuthRateLimiter; - /** Client IP used for rate-limit tracking. Falls back to proxy-aware request IP resolution. */ - clientIp?: string; - /** Optional limiter scope; defaults to shared-secret auth scope. */ - rateLimitScope?: string; -}): Promise { +function shouldAllowTailscaleHeaderAuth(authSurface: GatewayAuthSurface): boolean { + return authSurface === "ws-control-ui"; +} + +export async function authorizeGatewayConnect( + params: AuthorizeGatewayConnectParams, +): Promise { const { auth, connectAuth, req, trustedProxies } = params; const tailscaleWhois = params.tailscaleWhois ?? readTailscaleWhoisIdentity; - const allowTailscaleHeaderAuth = params.allowTailscaleHeaderAuth === true; + const authSurface = params.authSurface ?? "http"; + const allowTailscaleHeaderAuth = shouldAllowTailscaleHeaderAuth(authSurface); const localDirect = isLocalDirectRequest(req, trustedProxies); if (auth.mode === "trusted-proxy") { @@ -433,3 +444,21 @@ export async function authorizeGatewayConnect(params: { limiter?.recordFailure(ip, rateLimitScope); return { ok: false, reason: "unauthorized" }; } + +export async function authorizeHttpGatewayConnect( + params: Omit, +): Promise { + return authorizeGatewayConnect({ + ...params, + authSurface: "http", + }); +} + +export async function authorizeWsControlUiGatewayConnect( + params: Omit, +): Promise { + return authorizeGatewayConnect({ + ...params, + authSurface: "ws-control-ui", + }); +} diff --git a/src/gateway/http-auth-helpers.test.ts b/src/gateway/http-auth-helpers.test.ts index 22ceb975d..aa3d83d5b 100644 --- a/src/gateway/http-auth-helpers.test.ts +++ b/src/gateway/http-auth-helpers.test.ts @@ -4,7 +4,7 @@ import type { ResolvedGatewayAuth } from "./auth.js"; import { authorizeGatewayBearerRequestOrReply } from "./http-auth-helpers.js"; vi.mock("./auth.js", () => ({ - authorizeGatewayConnect: vi.fn(), + authorizeHttpGatewayConnect: vi.fn(), })); vi.mock("./http-common.js", () => ({ @@ -15,7 +15,7 @@ vi.mock("./http-utils.js", () => ({ getBearerToken: vi.fn(), })); -const { authorizeGatewayConnect } = await import("./auth.js"); +const { authorizeHttpGatewayConnect } = await import("./auth.js"); const { sendGatewayAuthFailure } = await import("./http-common.js"); const { getBearerToken } = await import("./http-utils.js"); @@ -26,7 +26,7 @@ describe("authorizeGatewayBearerRequestOrReply", () => { it("disables tailscale header auth for HTTP bearer checks", async () => { vi.mocked(getBearerToken).mockReturnValue(undefined); - vi.mocked(authorizeGatewayConnect).mockResolvedValue({ + vi.mocked(authorizeHttpGatewayConnect).mockResolvedValue({ ok: false, reason: "token_missing", }); @@ -43,9 +43,8 @@ describe("authorizeGatewayBearerRequestOrReply", () => { }); expect(ok).toBe(false); - expect(vi.mocked(authorizeGatewayConnect)).toHaveBeenCalledWith( + expect(vi.mocked(authorizeHttpGatewayConnect)).toHaveBeenCalledWith( expect.objectContaining({ - allowTailscaleHeaderAuth: false, connectAuth: null, }), ); @@ -54,7 +53,7 @@ describe("authorizeGatewayBearerRequestOrReply", () => { it("forwards bearer token and returns true on successful auth", async () => { vi.mocked(getBearerToken).mockReturnValue("abc"); - vi.mocked(authorizeGatewayConnect).mockResolvedValue({ ok: true, method: "token" }); + vi.mocked(authorizeHttpGatewayConnect).mockResolvedValue({ ok: true, method: "token" }); const ok = await authorizeGatewayBearerRequestOrReply({ req: {} as IncomingMessage, @@ -68,9 +67,8 @@ describe("authorizeGatewayBearerRequestOrReply", () => { }); expect(ok).toBe(true); - expect(vi.mocked(authorizeGatewayConnect)).toHaveBeenCalledWith( + expect(vi.mocked(authorizeHttpGatewayConnect)).toHaveBeenCalledWith( expect.objectContaining({ - allowTailscaleHeaderAuth: false, connectAuth: { token: "abc", password: "abc" }, }), ); diff --git a/src/gateway/http-auth-helpers.ts b/src/gateway/http-auth-helpers.ts index a7ee69eb6..36edb7c8d 100644 --- a/src/gateway/http-auth-helpers.ts +++ b/src/gateway/http-auth-helpers.ts @@ -1,6 +1,6 @@ import type { IncomingMessage, ServerResponse } from "node:http"; import type { AuthRateLimiter } from "./auth-rate-limit.js"; -import { authorizeGatewayConnect, type ResolvedGatewayAuth } from "./auth.js"; +import { authorizeHttpGatewayConnect, type ResolvedGatewayAuth } from "./auth.js"; import { sendGatewayAuthFailure } from "./http-common.js"; import { getBearerToken } from "./http-utils.js"; @@ -12,12 +12,11 @@ export async function authorizeGatewayBearerRequestOrReply(params: { rateLimiter?: AuthRateLimiter; }): Promise { const token = getBearerToken(params.req); - const authResult = await authorizeGatewayConnect({ + const authResult = await authorizeHttpGatewayConnect({ auth: params.auth, connectAuth: token ? { token, password: token } : null, req: params.req, trustedProxies: params.trustedProxies, - allowTailscaleHeaderAuth: false, rateLimiter: params.rateLimiter, }); if (!authResult.ok) { diff --git a/src/gateway/server-http.ts b/src/gateway/server-http.ts index 6cabb0fb4..c1c29b355 100644 --- a/src/gateway/server-http.ts +++ b/src/gateway/server-http.ts @@ -21,7 +21,7 @@ import { safeEqualSecret } from "../security/secret-equal.js"; import { handleSlackHttpRequest } from "../slack/http/index.js"; import type { AuthRateLimiter } from "./auth-rate-limit.js"; import { - authorizeGatewayConnect, + authorizeHttpGatewayConnect, isLocalDirectRequest, type GatewayAuthResult, type ResolvedGatewayAuth, @@ -150,12 +150,11 @@ async function authorizeCanvasRequest(params: { let lastAuthFailure: GatewayAuthResult | null = null; const token = getBearerToken(req); if (token) { - const authResult = await authorizeGatewayConnect({ + const authResult = await authorizeHttpGatewayConnect({ auth: { ...auth, allowTailscale: false }, connectAuth: { token, password: token }, req, trustedProxies, - allowTailscaleHeaderAuth: false, rateLimiter, }); if (authResult.ok) { @@ -528,12 +527,11 @@ export function createGatewayHttpServer(opts: { // their own auth when exposing sensitive functionality. if (requestPath.startsWith("/api/channels/")) { const token = getBearerToken(req); - const authResult = await authorizeGatewayConnect({ + const authResult = await authorizeHttpGatewayConnect({ auth: resolvedAuth, connectAuth: token ? { token, password: token } : null, req, trustedProxies, - allowTailscaleHeaderAuth: false, rateLimiter, }); if (!authResult.ok) { diff --git a/src/gateway/server/ws-connection/message-handler.ts b/src/gateway/server/ws-connection/message-handler.ts index 92a3d1e5c..1be8b5778 100644 --- a/src/gateway/server/ws-connection/message-handler.ts +++ b/src/gateway/server/ws-connection/message-handler.ts @@ -30,7 +30,11 @@ import { type AuthRateLimiter, } from "../../auth-rate-limit.js"; import type { GatewayAuthResult, ResolvedGatewayAuth } from "../../auth.js"; -import { authorizeGatewayConnect, isLocalDirectRequest } from "../../auth.js"; +import { + authorizeHttpGatewayConnect, + authorizeWsControlUiGatewayConnect, + isLocalDirectRequest, +} from "../../auth.js"; import { buildCanvasScopedHostUrl, CANVAS_CAPABILITY_TTL_MS, @@ -380,12 +384,11 @@ export function attachGatewayWsMessageHandler(params: { const resolveAuthState = async () => { const hasDeviceTokenCandidate = Boolean(connectParams.auth?.token && device); - let nextAuthResult: GatewayAuthResult = await authorizeGatewayConnect({ + let nextAuthResult: GatewayAuthResult = await authorizeWsControlUiGatewayConnect({ auth: resolvedAuth, connectAuth: connectParams.auth, req: upgradeReq, trustedProxies, - allowTailscaleHeaderAuth: true, rateLimiter: hasDeviceTokenCandidate ? undefined : rateLimiter, clientIp, rateLimitScope: AUTH_RATE_LIMIT_SCOPE_SHARED_SECRET, @@ -416,7 +419,7 @@ export function attachGatewayWsMessageHandler(params: { const nextAuthMethod = nextAuthResult.method ?? (resolvedAuth.mode === "password" ? "password" : "token"); const sharedAuthResult = hasSharedAuth - ? await authorizeGatewayConnect({ + ? await authorizeHttpGatewayConnect({ auth: { ...resolvedAuth, allowTailscale: false }, connectAuth: connectParams.auth, req: upgradeReq, diff --git a/src/gateway/tools-invoke-http.test.ts b/src/gateway/tools-invoke-http.test.ts index eea4ebb8b..2a631f9c3 100644 --- a/src/gateway/tools-invoke-http.test.ts +++ b/src/gateway/tools-invoke-http.test.ts @@ -34,7 +34,7 @@ vi.mock("../config/sessions.js", () => ({ })); vi.mock("./auth.js", () => ({ - authorizeGatewayConnect: async () => ({ ok: true }), + authorizeHttpGatewayConnect: async () => ({ ok: true }), })); vi.mock("../logger.js", () => ({ diff --git a/src/gateway/tools-invoke-http.ts b/src/gateway/tools-invoke-http.ts index eda5b8164..84f14457f 100644 --- a/src/gateway/tools-invoke-http.ts +++ b/src/gateway/tools-invoke-http.ts @@ -24,7 +24,7 @@ import { isSubagentSessionKey } from "../routing/session-key.js"; import { DEFAULT_GATEWAY_HTTP_TOOL_DENY } from "../security/dangerous-tools.js"; import { normalizeMessageChannel } from "../utils/message-channel.js"; import type { AuthRateLimiter } from "./auth-rate-limit.js"; -import { authorizeGatewayConnect, type ResolvedGatewayAuth } from "./auth.js"; +import { authorizeHttpGatewayConnect, type ResolvedGatewayAuth } from "./auth.js"; import { readJsonBodyOrError, sendGatewayAuthFailure, @@ -146,12 +146,11 @@ export async function handleToolsInvokeHttpRequest( const cfg = loadConfig(); const token = getBearerToken(req); - const authResult = await authorizeGatewayConnect({ + const authResult = await authorizeHttpGatewayConnect({ auth: opts.auth, connectAuth: token ? { token, password: token } : null, req, trustedProxies: opts.trustedProxies ?? cfg.gateway?.trustedProxies, - allowTailscaleHeaderAuth: false, rateLimiter: opts.rateLimiter, }); if (!authResult.ok) { From 8b1fe0d1e2408546264e2cf5ebb56277880c7dae Mon Sep 17 00:00:00 2001 From: Ayaan Zaidi Date: Sat, 21 Feb 2026 18:05:23 +0530 Subject: [PATCH 0177/1007] fix(telegram): split streaming preview per assistant block (#22613) Merged via /review-pr -> /prepare-pr -> /merge-pr. Prepared head SHA: 26f35f4411e65cf14587efeedc4e326a71d54ee0 Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com> Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com> Reviewed-by: @obviyus --- CHANGELOG.md | 1 + .../reply/agent-runner-execution.ts | 5 +- .../reply/agent-runner.runreplyagent.test.ts | 44 ++++++++++ src/auto-reply/tokens.ts | 20 +++++ src/channels/draft-stream-loop.ts | 8 ++ ...tion.rejects-routing-allowfrom.e2e.test.ts | 4 +- src/config/schema.help.ts | 2 +- src/config/zod-schema.providers-core.ts | 2 +- src/telegram/bot-message-dispatch.test.ts | 83 +++++++++++++++++-- src/telegram/bot-message-dispatch.ts | 71 ++++++++++++++-- src/telegram/bot.helpers.test.ts | 20 +++++ src/telegram/bot/helpers.ts | 2 +- src/telegram/draft-stream.test.ts | 33 ++++++++ src/telegram/draft-stream.ts | 1 + 14 files changed, 277 insertions(+), 19 deletions(-) create mode 100644 src/telegram/bot.helpers.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d9247fb8..02bb3e8ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -85,6 +85,7 @@ Docs: https://docs.openclaw.ai - Memory: return empty snippets when `memory_get`/QMD read files that have not been created yet, and harden memory indexing/session helpers against ENOENT races so missing Markdown no longer crashes tools. (#20680) Thanks @pahdo. - Telegram/Streaming: always clean up draft previews even when dispatch throws before fallback handling, preventing orphaned preview messages during failed runs. (#19041) thanks @mudrii. - Telegram/Streaming: split reasoning and answer draft preview lanes to prevent cross-lane overwrites, and ignore literal `` tags inside inline/fenced code snippets so sample markup is not misrouted as reasoning. (#20774) Thanks @obviyus. +- Telegram/Streaming: restore 30-char first-preview debounce and scope `NO_REPLY` prefix suppression to partial sentinel fragments so normal `No...` text is not filtered. (#22613) thanks @obviyus. - Telegram/Status reactions: refresh stall timers on repeated phase updates and honor ack-reaction scope when lifecycle reactions are enabled, preventing false stall emojis and unwanted group reactions. Thanks @wolly-tundracube and @thewilloftheshadow. - Telegram/Status reactions: keep lifecycle reactions active when available-reactions lookup fails by falling back to unrestricted variant selection instead of suppressing reaction updates. (#22380) thanks @obviyus. - Discord/Streaming: apply `replyToMode: first` only to the first Discord chunk so block-streamed replies do not spam mention pings. (#20726) Thanks @thewilloftheshadow for the report. diff --git a/src/auto-reply/reply/agent-runner-execution.ts b/src/auto-reply/reply/agent-runner-execution.ts index 4becf72c7..eaabfe2f2 100644 --- a/src/auto-reply/reply/agent-runner-execution.ts +++ b/src/auto-reply/reply/agent-runner-execution.ts @@ -28,7 +28,7 @@ import { import { stripHeartbeatToken } from "../heartbeat.js"; import type { TemplateContext } from "../templating.js"; import type { VerboseLevel } from "../thinking.js"; -import { isSilentReplyText, SILENT_REPLY_TOKEN } from "../tokens.js"; +import { isSilentReplyPrefixText, isSilentReplyText, SILENT_REPLY_TOKEN } from "../tokens.js"; import type { GetReplyOptions, ReplyPayload } from "../types.js"; import { buildEmbeddedRunBaseParams, @@ -157,6 +157,9 @@ export async function runAgentTurnWithFallback(params: { return { text: sanitized, skip: false }; }; const handlePartialForTyping = async (payload: ReplyPayload): Promise => { + if (isSilentReplyPrefixText(payload.text, SILENT_REPLY_TOKEN)) { + return undefined; + } const { text, skip } = normalizeStreamingText(payload); if (skip || !text) { return undefined; diff --git a/src/auto-reply/reply/agent-runner.runreplyagent.test.ts b/src/auto-reply/reply/agent-runner.runreplyagent.test.ts index b009a8b63..f7fd979c1 100644 --- a/src/auto-reply/reply/agent-runner.runreplyagent.test.ts +++ b/src/auto-reply/reply/agent-runner.runreplyagent.test.ts @@ -383,6 +383,50 @@ describe("runReplyAgent typing (heartbeat)", () => { expect(typing.startTypingLoop).not.toHaveBeenCalled(); }); + it("suppresses partial streaming for NO_REPLY prefixes", async () => { + const onPartialReply = vi.fn(); + state.runEmbeddedPiAgentMock.mockImplementationOnce(async (params: AgentRunParams) => { + await params.onPartialReply?.({ text: "NO_" }); + await params.onPartialReply?.({ text: "NO_RE" }); + await params.onPartialReply?.({ text: "NO_REPLY" }); + return { payloads: [{ text: "NO_REPLY" }], meta: {} }; + }); + + const { run, typing } = createMinimalRun({ + opts: { isHeartbeat: false, onPartialReply }, + typingMode: "message", + }); + await run(); + + expect(onPartialReply).not.toHaveBeenCalled(); + expect(typing.startTypingOnText).not.toHaveBeenCalled(); + expect(typing.startTypingLoop).not.toHaveBeenCalled(); + }); + + it("does not suppress partial streaming for normal 'No' prefixes", async () => { + const onPartialReply = vi.fn(); + state.runEmbeddedPiAgentMock.mockImplementationOnce(async (params: AgentRunParams) => { + await params.onPartialReply?.({ text: "No" }); + await params.onPartialReply?.({ text: "No, that is valid" }); + return { payloads: [{ text: "No, that is valid" }], meta: {} }; + }); + + const { run, typing } = createMinimalRun({ + opts: { isHeartbeat: false, onPartialReply }, + typingMode: "message", + }); + await run(); + + expect(onPartialReply).toHaveBeenCalledTimes(2); + expect(onPartialReply).toHaveBeenNthCalledWith(1, { text: "No", mediaUrls: undefined }); + expect(onPartialReply).toHaveBeenNthCalledWith(2, { + text: "No, that is valid", + mediaUrls: undefined, + }); + expect(typing.startTypingOnText).toHaveBeenCalled(); + expect(typing.startTypingLoop).not.toHaveBeenCalled(); + }); + it("does not start typing on assistant message start without prior text in message mode", async () => { state.runEmbeddedPiAgentMock.mockImplementationOnce(async (params: AgentRunParams) => { await params.onAssistantMessageStart?.(); diff --git a/src/auto-reply/tokens.ts b/src/auto-reply/tokens.ts index b305391dc..c0bce2a2d 100644 --- a/src/auto-reply/tokens.ts +++ b/src/auto-reply/tokens.ts @@ -18,3 +18,23 @@ export function isSilentReplyText( const suffix = new RegExp(`\\b${escaped}\\b\\W*$`); return suffix.test(text); } + +export function isSilentReplyPrefixText( + text: string | undefined, + token: string = SILENT_REPLY_TOKEN, +): boolean { + if (!text) { + return false; + } + const normalized = text.trimStart().toUpperCase(); + if (!normalized) { + return false; + } + if (!normalized.includes("_")) { + return false; + } + if (/[^A-Z_]/.test(normalized)) { + return false; + } + return token.toUpperCase().startsWith(normalized); +} diff --git a/src/channels/draft-stream-loop.ts b/src/channels/draft-stream-loop.ts index 69f16c46d..ed4656dd0 100644 --- a/src/channels/draft-stream-loop.ts +++ b/src/channels/draft-stream-loop.ts @@ -3,6 +3,7 @@ export type DraftStreamLoop = { flush: () => Promise; stop: () => void; resetPending: () => void; + resetThrottleWindow: () => void; waitForInFlight: () => Promise; }; @@ -87,6 +88,13 @@ export function createDraftStreamLoop(params: { resetPending: () => { pendingText = ""; }, + resetThrottleWindow: () => { + lastSentAt = 0; + if (timer) { + clearTimeout(timer); + timer = undefined; + } + }, waitForInFlight: async () => { if (inFlightPromise) { await inFlightPromise; diff --git a/src/config/config.legacy-config-detection.rejects-routing-allowfrom.e2e.test.ts b/src/config/config.legacy-config-detection.rejects-routing-allowfrom.e2e.test.ts index 1a88e3e78..ac83e659a 100644 --- a/src/config/config.legacy-config-detection.rejects-routing-allowfrom.e2e.test.ts +++ b/src/config/config.legacy-config-detection.rejects-routing-allowfrom.e2e.test.ts @@ -378,11 +378,11 @@ describe("legacy config detection", () => { expect(res.config.channels?.telegram?.groupPolicy).toBe("allowlist"); } }); - it("defaults telegram.streaming to true when telegram section exists", async () => { + it("defaults telegram.streaming to false when telegram section exists", async () => { const res = validateConfigObject({ channels: { telegram: {} } }); expect(res.ok).toBe(true); if (res.ok) { - expect(res.config.channels?.telegram?.streaming).toBe(true); + expect(res.config.channels?.telegram?.streaming).toBe(false); expect(res.config.channels?.telegram?.streamMode).toBeUndefined(); } }); diff --git a/src/config/schema.help.ts b/src/config/schema.help.ts index 1c7dffda8..e96e6f149 100644 --- a/src/config/schema.help.ts +++ b/src/config/schema.help.ts @@ -392,7 +392,7 @@ export const FIELD_HELP: Record = { "channels.telegram.dmPolicy": 'Direct message access control ("pairing" recommended). "open" requires channels.telegram.allowFrom=["*"].', "channels.telegram.streaming": - "Enable Telegram live stream preview via message edits (default: true; legacy streamMode auto-maps here).", + "Enable Telegram live stream preview via message edits (default: false; legacy streamMode auto-maps here).", "channels.discord.streamMode": "Live stream preview mode for Discord replies (off | partial | block). Separate from block streaming; uses sendMessage + editMessage.", "channels.discord.draftChunk.minChars": diff --git a/src/config/zod-schema.providers-core.ts b/src/config/zod-schema.providers-core.ts index 22c55b403..668c413a4 100644 --- a/src/config/zod-schema.providers-core.ts +++ b/src/config/zod-schema.providers-core.ts @@ -117,7 +117,7 @@ function normalizeTelegramStreamingConfig(value: { delete value.streamMode; return; } - value.streaming = true; + value.streaming = false; } export const TelegramAccountSchemaBase = z diff --git a/src/telegram/bot-message-dispatch.test.ts b/src/telegram/bot-message-dispatch.test.ts index c2f847309..ede7a1288 100644 --- a/src/telegram/bot-message-dispatch.test.ts +++ b/src/telegram/bot-message-dispatch.test.ts @@ -63,6 +63,25 @@ describe("dispatchTelegramMessage draft streaming", () => { }; } + function createSequencedDraftStream(startMessageId = 1001) { + let activeMessageId: number | undefined; + let nextMessageId = startMessageId; + return { + update: vi.fn().mockImplementation(() => { + if (activeMessageId == null) { + activeMessageId = nextMessageId++; + } + }), + flush: vi.fn().mockResolvedValue(undefined), + messageId: vi.fn().mockImplementation(() => activeMessageId), + clear: vi.fn().mockResolvedValue(undefined), + stop: vi.fn().mockResolvedValue(undefined), + forceNewMessage: vi.fn().mockImplementation(() => { + activeMessageId = undefined; + }), + }; + } + function setupDraftStreams(params?: { answerMessageId?: number; reasoningMessageId?: number }) { const answerDraftStream = createDraftStream(params?.answerMessageId); const reasoningDraftStream = createDraftStream(params?.reasoningMessageId); @@ -172,7 +191,7 @@ describe("dispatchTelegramMessage draft streaming", () => { expect.objectContaining({ chatId: 123, thread: { id: 777, scope: "dm" }, - minInitialChars: 1, + minInitialChars: 30, }), ); expect(draftStream.update).toHaveBeenCalledWith("Hello"); @@ -193,7 +212,7 @@ describe("dispatchTelegramMessage draft streaming", () => { expect(draftStream.clear).toHaveBeenCalledTimes(1); }); - it("uses immediate preview updates for legacy block stream mode", async () => { + it("uses 30-char preview debounce for legacy block stream mode", async () => { const draftStream = createDraftStream(); createTelegramDraftStream.mockReturnValue(draftStream); dispatchReplyWithBufferedBlockDispatcher.mockImplementation( @@ -209,7 +228,7 @@ describe("dispatchTelegramMessage draft streaming", () => { expect(createTelegramDraftStream).toHaveBeenCalledWith( expect.objectContaining({ - minInitialChars: 1, + minInitialChars: 30, }), ); }); @@ -445,7 +464,7 @@ describe("dispatchTelegramMessage draft streaming", () => { ); }); - it("does not force new message for legacy block stream mode", async () => { + it("forces new message for next assistant block in legacy block stream mode", async () => { const draftStream = createDraftStream(999); createTelegramDraftStream.mockReturnValue(draftStream); dispatchReplyWithBufferedBlockDispatcher.mockImplementation( @@ -464,10 +483,10 @@ describe("dispatchTelegramMessage draft streaming", () => { await dispatchWithContext({ context: createContext(), streamMode: "block" }); - expect(draftStream.forceNewMessage).not.toHaveBeenCalled(); + expect(draftStream.forceNewMessage).toHaveBeenCalledTimes(1); }); - it("does not force new message in partial mode when assistant message restarts", async () => { + it("forces new message in partial mode when assistant message restarts", async () => { const draftStream = createDraftStream(999); createTelegramDraftStream.mockReturnValue(draftStream); dispatchReplyWithBufferedBlockDispatcher.mockImplementation( @@ -483,7 +502,7 @@ describe("dispatchTelegramMessage draft streaming", () => { await dispatchWithContext({ context: createContext(), streamMode: "partial" }); - expect(draftStream.forceNewMessage).not.toHaveBeenCalled(); + expect(draftStream.forceNewMessage).toHaveBeenCalledTimes(1); }); it("does not force new message on first assistant message start", async () => { @@ -508,6 +527,56 @@ describe("dispatchTelegramMessage draft streaming", () => { expect(draftStream.forceNewMessage).not.toHaveBeenCalled(); }); + it("finalizes multi-message assistant stream to matching preview messages in order", async () => { + const answerDraftStream = createSequencedDraftStream(1001); + const reasoningDraftStream = createDraftStream(); + createTelegramDraftStream + .mockImplementationOnce(() => answerDraftStream) + .mockImplementationOnce(() => reasoningDraftStream); + dispatchReplyWithBufferedBlockDispatcher.mockImplementation( + async ({ dispatcherOptions, replyOptions }) => { + await replyOptions?.onPartialReply?.({ text: "Message A partial" }); + await replyOptions?.onAssistantMessageStart?.(); + await replyOptions?.onPartialReply?.({ text: "Message B partial" }); + await replyOptions?.onAssistantMessageStart?.(); + await replyOptions?.onPartialReply?.({ text: "Message C partial" }); + + await dispatcherOptions.deliver({ text: "Message A final" }, { kind: "final" }); + await dispatcherOptions.deliver({ text: "Message B final" }, { kind: "final" }); + await dispatcherOptions.deliver({ text: "Message C final" }, { kind: "final" }); + return { queuedFinal: true }; + }, + ); + deliverReplies.mockResolvedValue({ delivered: true }); + editMessageTelegram.mockResolvedValue({ ok: true, chatId: "123", messageId: "1001" }); + + await dispatchWithContext({ context: createContext(), streamMode: "partial" }); + + expect(answerDraftStream.forceNewMessage).toHaveBeenCalledTimes(2); + expect(editMessageTelegram).toHaveBeenNthCalledWith( + 1, + 123, + 1001, + "Message A final", + expect.any(Object), + ); + expect(editMessageTelegram).toHaveBeenNthCalledWith( + 2, + 123, + 1002, + "Message B final", + expect.any(Object), + ); + expect(editMessageTelegram).toHaveBeenNthCalledWith( + 3, + 123, + 1003, + "Message C final", + expect.any(Object), + ); + expect(deliverReplies).not.toHaveBeenCalled(); + }); + it.each(["block", "partial"] as const)( "splits reasoning lane only when a later reasoning block starts (%s mode)", async (streamMode) => { diff --git a/src/telegram/bot-message-dispatch.ts b/src/telegram/bot-message-dispatch.ts index 7026b8cca..71e535280 100644 --- a/src/telegram/bot-message-dispatch.ts +++ b/src/telegram/bot-message-dispatch.ts @@ -147,8 +147,7 @@ export const dispatchTelegramMessage = async ({ const canStreamReasoningDraft = canStreamAnswerDraft || streamReasoningDraft; const draftReplyToMessageId = replyToMode !== "off" && typeof msg.message_id === "number" ? msg.message_id : undefined; - const draftMinInitialChars = - previewStreamingEnabled || streamReasoningDraft ? 1 : DRAFT_MIN_INITIAL_CHARS; + const draftMinInitialChars = DRAFT_MIN_INITIAL_CHARS; const mediaLocalRoots = getAgentScopedMediaLocalRoots(cfg, route.agentId); type LaneName = "answer" | "reasoning"; type DraftLaneState = { @@ -184,6 +183,8 @@ export const dispatchTelegramMessage = async ({ const reasoningLane = lanes.reasoning; let splitReasoningOnNextStream = false; const reasoningStepState = createTelegramReasoningStepState(); + type ArchivedPreview = { messageId: number; textSnapshot: string }; + const archivedAnswerPreviews: ArchivedPreview[] = []; type SplitLaneSegment = { lane: LaneName; text: string }; const splitTextIntoLaneSegments = (text?: string): SplitLaneSegment[] => { const split = splitTelegramReasoningText(text); @@ -353,6 +354,8 @@ export const dispatchTelegramMessage = async ({ updateLaneSnapshot?: boolean; skipRegressive: "always" | "existingOnly"; context: "final" | "update"; + previewMessageId?: number; + previewTextSnapshot?: string; }): Promise => { const { lane, @@ -363,19 +366,26 @@ export const dispatchTelegramMessage = async ({ updateLaneSnapshot = false, skipRegressive, context, + previewMessageId: previewMessageIdOverride, + previewTextSnapshot, } = params; if (!lane.stream) { return false; } - const hadPreviewMessage = typeof lane.stream.messageId() === "number"; + const lanePreviewMessageId = lane.stream.messageId(); + const hadPreviewMessage = + typeof previewMessageIdOverride === "number" || typeof lanePreviewMessageId === "number"; if (stopBeforeEdit) { await lane.stream.stop(); } - const previewMessageId = lane.stream.messageId(); + const previewMessageId = + typeof previewMessageIdOverride === "number" + ? previewMessageIdOverride + : lane.stream.messageId(); if (typeof previewMessageId !== "number") { return false; } - const currentPreviewText = getLanePreviewText(lane); + const currentPreviewText = previewTextSnapshot ?? getLanePreviewText(lane); const shouldSkipRegressive = Boolean(currentPreviewText) && currentPreviewText.startsWith(text) && @@ -446,6 +456,36 @@ export const dispatchTelegramMessage = async ({ !hasMedia && text.length > 0 && text.length <= draftMaxChars && !payload.isError; if (infoKind === "final") { + if (laneName === "answer" && archivedAnswerPreviews.length > 0) { + const archivedPreview = archivedAnswerPreviews.shift(); + if (archivedPreview) { + if (canEditViaPreview) { + const finalized = await tryUpdatePreviewForLane({ + lane, + laneName, + text, + previewButtons, + stopBeforeEdit: false, + skipRegressive: "existingOnly", + context: "final", + previewMessageId: archivedPreview.messageId, + previewTextSnapshot: archivedPreview.textSnapshot, + }); + if (finalized) { + return "preview-finalized"; + } + } + try { + await bot.api.deleteMessage(chatId, archivedPreview.messageId); + } catch (err) { + logVerbose( + `telegram: archived answer preview cleanup failed (${archivedPreview.messageId}): ${String(err)}`, + ); + } + const delivered = await sendPayload(applyTextToPayload(payload, text)); + return delivered ? "sent" : "skipped"; + } + } if (canEditViaPreview && !finalizedPreviewByLane[laneName]) { await flushDraftLane(lane); const finalized = await tryUpdatePreviewForLane({ @@ -628,8 +668,18 @@ export const dispatchTelegramMessage = async ({ } : undefined, onAssistantMessageStart: answerLane.stream - ? () => { + ? async () => { reasoningStepState.resetForNextStep(); + if (answerLane.hasStreamedMessage) { + const previewMessageId = answerLane.stream?.messageId(); + if (typeof previewMessageId === "number") { + archivedAnswerPreviews.push({ + messageId: previewMessageId, + textSnapshot: answerLane.lastPartialText, + }); + } + answerLane.stream?.forceNewMessage(); + } resetDraftLaneState(answerLane); } : undefined, @@ -676,6 +726,15 @@ export const dispatchTelegramMessage = async ({ await stream.clear(); } } + for (const archivedPreview of archivedAnswerPreviews) { + try { + await bot.api.deleteMessage(chatId, archivedPreview.messageId); + } catch (err) { + logVerbose( + `telegram: archived answer preview cleanup failed (${archivedPreview.messageId}): ${String(err)}`, + ); + } + } } let sentFallback = false; if ( diff --git a/src/telegram/bot.helpers.test.ts b/src/telegram/bot.helpers.test.ts new file mode 100644 index 000000000..aa68107bf --- /dev/null +++ b/src/telegram/bot.helpers.test.ts @@ -0,0 +1,20 @@ +import { describe, expect, it } from "vitest"; +import { resolveTelegramStreamMode } from "./bot/helpers.js"; + +describe("resolveTelegramStreamMode", () => { + it("defaults to off when telegram streaming is unset", () => { + expect(resolveTelegramStreamMode(undefined)).toBe("off"); + expect(resolveTelegramStreamMode({})).toBe("off"); + }); + + it("prefers explicit streaming boolean", () => { + expect(resolveTelegramStreamMode({ streaming: true })).toBe("partial"); + expect(resolveTelegramStreamMode({ streaming: false })).toBe("off"); + }); + + it("maps legacy streamMode values", () => { + expect(resolveTelegramStreamMode({ streamMode: "off" })).toBe("off"); + expect(resolveTelegramStreamMode({ streamMode: "partial" })).toBe("partial"); + expect(resolveTelegramStreamMode({ streamMode: "block" })).toBe("partial"); + }); +}); diff --git a/src/telegram/bot/helpers.ts b/src/telegram/bot/helpers.ts index 4ee703655..59e063413 100644 --- a/src/telegram/bot/helpers.ts +++ b/src/telegram/bot/helpers.ts @@ -167,7 +167,7 @@ export function resolveTelegramStreamMode(telegramCfg?: { if (raw === "partial" || raw === "block") { return "partial"; } - return "partial"; + return "off"; } export function buildTelegramGroupPeerId(chatId: number | string, messageThreadId?: number) { diff --git a/src/telegram/draft-stream.test.ts b/src/telegram/draft-stream.test.ts index 7532015a5..fda42e9e9 100644 --- a/src/telegram/draft-stream.test.ts +++ b/src/telegram/draft-stream.test.ts @@ -134,6 +134,39 @@ describe("createTelegramDraftStream", () => { expect(api.sendMessage).toHaveBeenLastCalledWith(123, "After thinking", undefined); }); + it("sends first update immediately after forceNewMessage within throttle window", async () => { + vi.useFakeTimers(); + try { + const api = { + sendMessage: vi + .fn() + .mockResolvedValueOnce({ message_id: 17 }) + .mockResolvedValueOnce({ message_id: 42 }), + editMessageText: vi.fn().mockResolvedValue(true), + deleteMessage: vi.fn().mockResolvedValue(true), + }; + const stream = createTelegramDraftStream({ + // oxlint-disable-next-line typescript/no-explicit-any + api: api as any, + chatId: 123, + throttleMs: 1000, + }); + + stream.update("Hello"); + await vi.waitFor(() => expect(api.sendMessage).toHaveBeenCalledTimes(1)); + + stream.update("Hello edited"); + expect(api.editMessageText).not.toHaveBeenCalled(); + + stream.forceNewMessage(); + stream.update("Second message"); + await vi.waitFor(() => expect(api.sendMessage).toHaveBeenCalledTimes(2)); + expect(api.sendMessage).toHaveBeenLastCalledWith(123, "Second message", undefined); + } finally { + vi.useRealTimers(); + } + }); + it("supports rendered previews with parse_mode", async () => { const api = createMockDraftApi(); const stream = createTelegramDraftStream({ diff --git a/src/telegram/draft-stream.ts b/src/telegram/draft-stream.ts index a4a6b2db2..e4fb2ca41 100644 --- a/src/telegram/draft-stream.ts +++ b/src/telegram/draft-stream.ts @@ -167,6 +167,7 @@ export function createTelegramDraftStream(params: { lastSentText = ""; lastSentParseMode = undefined; loop.resetPending(); + loop.resetThrottleWindow(); }; params.log?.(`telegram stream preview ready (maxChars=${maxChars}, throttleMs=${throttleMs})`); From be7f825006d2c3a2c2840e7647aa55cabc6516ca Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:32:25 +0100 Subject: [PATCH 0178/1007] refactor(gateway): harden proxy client ip resolution --- docs/gateway/configuration-reference.md | 3 + docs/gateway/security/index.md | 20 ++++- src/config/types.gateway.ts | 9 +- src/config/zod-schema.ts | 1 + src/gateway/auth.test.ts | 39 ++++++++ src/gateway/auth.ts | 36 ++++++-- src/gateway/http-auth-helpers.ts | 2 + src/gateway/http-endpoint-helpers.ts | 2 + src/gateway/net.test.ts | 89 ++++++++++++------- src/gateway/net.ts | 87 ++++++++++-------- src/gateway/openai-http.ts | 2 + src/gateway/openresponses-http.ts | 2 + src/gateway/server-http.ts | 24 ++++- .../server/ws-connection/message-handler.ts | 15 +++- src/gateway/tools-invoke-http.ts | 2 + 15 files changed, 246 insertions(+), 87 deletions(-) diff --git a/docs/gateway/configuration-reference.md b/docs/gateway/configuration-reference.md index e3a46d677..b3bc9b77b 100644 --- a/docs/gateway/configuration-reference.md +++ b/docs/gateway/configuration-reference.md @@ -2043,6 +2043,8 @@ See [Plugins](/tools/plugin). // password: "your-password", }, trustedProxies: ["10.0.0.1"], + // Optional. Default false. + allowRealIpFallback: false, tools: { // Additional /tools/invoke HTTP denies deny: ["browser"], @@ -2068,6 +2070,7 @@ See [Plugins](/tools/plugin). - `remote.transport`: `ssh` (default) or `direct` (ws/wss). For `direct`, `remote.url` must be `ws://` or `wss://`. - `gateway.remote.token` is for remote CLI calls only; does not enable local gateway auth. - `trustedProxies`: reverse proxy IPs that terminate TLS. Only list proxies you control. +- `allowRealIpFallback`: when `true`, the gateway accepts `X-Real-IP` if `X-Forwarded-For` is missing. Default `false` for fail-closed behavior. - `gateway.tools.deny`: extra tool names blocked for HTTP `POST /tools/invoke` (extends default deny list). - `gateway.tools.allow`: remove tool names from the default HTTP deny list. diff --git a/docs/gateway/security/index.md b/docs/gateway/security/index.md index d30f5f8c7..188573ba6 100644 --- a/docs/gateway/security/index.md +++ b/docs/gateway/security/index.md @@ -168,18 +168,34 @@ keys so you can review them in one place (for example If you run the Gateway behind a reverse proxy (nginx, Caddy, Traefik, etc.), you should configure `gateway.trustedProxies` for proper client IP detection. -When the Gateway detects proxy headers (`X-Forwarded-For` or `X-Real-IP`) from an address that is **not** in `trustedProxies`, it will **not** treat connections as local clients. If gateway auth is disabled, those connections are rejected. This prevents authentication bypass where proxied connections would otherwise appear to come from localhost and receive automatic trust. +When the Gateway detects proxy headers from an address that is **not** in `trustedProxies`, it will **not** treat connections as local clients. If gateway auth is disabled, those connections are rejected. This prevents authentication bypass where proxied connections would otherwise appear to come from localhost and receive automatic trust. ```yaml gateway: trustedProxies: - "127.0.0.1" # if your proxy runs on localhost + # Optional. Default false. + # Only enable if your proxy cannot provide X-Forwarded-For. + allowRealIpFallback: false auth: mode: password password: ${OPENCLAW_GATEWAY_PASSWORD} ``` -When `trustedProxies` is configured, the Gateway will use `X-Forwarded-For` headers to determine the real client IP for local client detection. Make sure your proxy overwrites (not appends to) incoming `X-Forwarded-For` headers to prevent spoofing. +When `trustedProxies` is configured, the Gateway uses `X-Forwarded-For` to determine the client IP. `X-Real-IP` is ignored by default unless `gateway.allowRealIpFallback: true` is explicitly set. + +Good reverse proxy behavior (overwrite incoming forwarding headers): + +```nginx +proxy_set_header X-Forwarded-For $remote_addr; +proxy_set_header X-Real-IP $remote_addr; +``` + +Bad reverse proxy behavior (append/preserve untrusted forwarding headers): + +```nginx +proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +``` ## Local session logs live on disk diff --git a/src/config/types.gateway.ts b/src/config/types.gateway.ts index 182806314..13a36c7f4 100644 --- a/src/config/types.gateway.ts +++ b/src/config/types.gateway.ts @@ -310,10 +310,15 @@ export type GatewayConfig = { nodes?: GatewayNodesConfig; /** * IPs of trusted reverse proxies (e.g. Traefik, nginx). When a connection - * arrives from one of these IPs, the Gateway trusts `x-forwarded-for` (or - * `x-real-ip`) to determine the client IP for local pairing and HTTP checks. + * arrives from one of these IPs, the Gateway trusts `x-forwarded-for` + * to determine the client IP for local pairing and HTTP checks. */ trustedProxies?: string[]; + /** + * Allow `x-real-ip` as a fallback only when `x-forwarded-for` is missing. + * Default: false (safer fail-closed behavior). + */ + allowRealIpFallback?: boolean; /** Tool access restrictions for HTTP /tools/invoke endpoint. */ tools?: GatewayToolsConfig; /** diff --git a/src/config/zod-schema.ts b/src/config/zod-schema.ts index ce6f68312..42c9207a9 100644 --- a/src/config/zod-schema.ts +++ b/src/config/zod-schema.ts @@ -450,6 +450,7 @@ export const OpenClawSchema = z .strict() .optional(), trustedProxies: z.array(z.string()).optional(), + allowRealIpFallback: z.boolean().optional(), tools: z .object({ deny: z.array(z.string()).optional(), diff --git a/src/gateway/auth.test.ts b/src/gateway/auth.test.ts index 1d96886fc..bd075ddfd 100644 --- a/src/gateway/auth.test.ts +++ b/src/gateway/auth.test.ts @@ -301,6 +301,45 @@ describe("gateway auth", () => { expect(limiter.recordFailure).toHaveBeenCalledWith("203.0.113.10", "shared-secret"); }); + it("ignores X-Real-IP fallback by default for rate-limit checks", async () => { + const limiter = createLimiterSpy(); + const res = await authorizeGatewayConnect({ + auth: { mode: "token", token: "secret", allowTailscale: false }, + connectAuth: { token: "wrong" }, + req: { + socket: { remoteAddress: "127.0.0.1" }, + headers: { "x-real-ip": "203.0.113.77" }, + } as never, + trustedProxies: ["127.0.0.1"], + rateLimiter: limiter, + }); + + expect(res.ok).toBe(false); + expect(res.reason).toBe("token_mismatch"); + expect(limiter.check).toHaveBeenCalledWith("127.0.0.1", "shared-secret"); + expect(limiter.recordFailure).toHaveBeenCalledWith("127.0.0.1", "shared-secret"); + }); + + it("uses X-Real-IP when fallback is explicitly enabled", async () => { + const limiter = createLimiterSpy(); + const res = await authorizeGatewayConnect({ + auth: { mode: "token", token: "secret", allowTailscale: false }, + connectAuth: { token: "wrong" }, + req: { + socket: { remoteAddress: "127.0.0.1" }, + headers: { "x-real-ip": "203.0.113.77" }, + } as never, + trustedProxies: ["127.0.0.1"], + allowRealIpFallback: true, + rateLimiter: limiter, + }); + + expect(res.ok).toBe(false); + expect(res.reason).toBe("token_mismatch"); + expect(limiter.check).toHaveBeenCalledWith("203.0.113.77", "shared-secret"); + expect(limiter.recordFailure).toHaveBeenCalledWith("203.0.113.77", "shared-secret"); + }); + it("passes custom rate-limit scope to limiter operations", async () => { const limiter = createLimiterSpy(); const res = await authorizeGatewayConnect({ diff --git a/src/gateway/auth.ts b/src/gateway/auth.ts index 14c05a817..2c6492164 100644 --- a/src/gateway/auth.ts +++ b/src/gateway/auth.ts @@ -15,8 +15,7 @@ import { isLoopbackAddress, isTrustedProxyAddress, resolveHostName, - parseForwardedForClientIp, - resolveGatewayClientIp, + resolveClientIp, } from "./net.js"; export type ResolvedGatewayAuthMode = "none" | "token" | "password" | "trusted-proxy"; @@ -71,6 +70,8 @@ export type AuthorizeGatewayConnectParams = { clientIp?: string; /** Optional limiter scope; defaults to shared-secret auth scope. */ rateLimitScope?: string; + /** Trust X-Real-IP only when explicitly enabled. */ + allowRealIpFallback?: boolean; }; type TailscaleUser = { @@ -89,34 +90,45 @@ function headerValue(value: string | string[] | undefined): string | undefined { return Array.isArray(value) ? value[0] : value; } +const TAILSCALE_TRUSTED_PROXIES = ["127.0.0.1", "::1"] as const; + function resolveTailscaleClientIp(req?: IncomingMessage): string | undefined { if (!req) { return undefined; } - const forwardedFor = headerValue(req.headers?.["x-forwarded-for"]); - return forwardedFor ? parseForwardedForClientIp(forwardedFor) : undefined; + return resolveClientIp({ + remoteAddr: req.socket?.remoteAddress ?? "", + forwardedFor: headerValue(req.headers?.["x-forwarded-for"]), + trustedProxies: [...TAILSCALE_TRUSTED_PROXIES], + }); } function resolveRequestClientIp( req?: IncomingMessage, trustedProxies?: string[], + allowRealIpFallback = false, ): string | undefined { if (!req) { return undefined; } - return resolveGatewayClientIp({ + return resolveClientIp({ remoteAddr: req.socket?.remoteAddress ?? "", forwardedFor: headerValue(req.headers?.["x-forwarded-for"]), realIp: headerValue(req.headers?.["x-real-ip"]), trustedProxies, + allowRealIpFallback, }); } -export function isLocalDirectRequest(req?: IncomingMessage, trustedProxies?: string[]): boolean { +export function isLocalDirectRequest( + req?: IncomingMessage, + trustedProxies?: string[], + allowRealIpFallback = false, +): boolean { if (!req) { return false; } - const clientIp = resolveRequestClientIp(req, trustedProxies) ?? ""; + const clientIp = resolveRequestClientIp(req, trustedProxies, allowRealIpFallback) ?? ""; if (!isLoopbackAddress(clientIp)) { return false; } @@ -351,7 +363,11 @@ export async function authorizeGatewayConnect( const tailscaleWhois = params.tailscaleWhois ?? readTailscaleWhoisIdentity; const authSurface = params.authSurface ?? "http"; const allowTailscaleHeaderAuth = shouldAllowTailscaleHeaderAuth(authSurface); - const localDirect = isLocalDirectRequest(req, trustedProxies); + const localDirect = isLocalDirectRequest( + req, + trustedProxies, + params.allowRealIpFallback === true, + ); if (auth.mode === "trusted-proxy") { if (!auth.trustedProxy) { @@ -379,7 +395,9 @@ export async function authorizeGatewayConnect( const limiter = params.rateLimiter; const ip = - params.clientIp ?? resolveRequestClientIp(req, trustedProxies) ?? req?.socket?.remoteAddress; + params.clientIp ?? + resolveRequestClientIp(req, trustedProxies, params.allowRealIpFallback === true) ?? + req?.socket?.remoteAddress; const rateLimitScope = params.rateLimitScope ?? AUTH_RATE_LIMIT_SCOPE_SHARED_SECRET; if (limiter) { const rlCheck: RateLimitCheckResult = limiter.check(ip, rateLimitScope); diff --git a/src/gateway/http-auth-helpers.ts b/src/gateway/http-auth-helpers.ts index 36edb7c8d..fac708c7f 100644 --- a/src/gateway/http-auth-helpers.ts +++ b/src/gateway/http-auth-helpers.ts @@ -9,6 +9,7 @@ export async function authorizeGatewayBearerRequestOrReply(params: { res: ServerResponse; auth: ResolvedGatewayAuth; trustedProxies?: string[]; + allowRealIpFallback?: boolean; rateLimiter?: AuthRateLimiter; }): Promise { const token = getBearerToken(params.req); @@ -17,6 +18,7 @@ export async function authorizeGatewayBearerRequestOrReply(params: { connectAuth: token ? { token, password: token } : null, req: params.req, trustedProxies: params.trustedProxies, + allowRealIpFallback: params.allowRealIpFallback, rateLimiter: params.rateLimiter, }); if (!authResult.ok) { diff --git a/src/gateway/http-endpoint-helpers.ts b/src/gateway/http-endpoint-helpers.ts index b04864114..2ea005956 100644 --- a/src/gateway/http-endpoint-helpers.ts +++ b/src/gateway/http-endpoint-helpers.ts @@ -12,6 +12,7 @@ export async function handleGatewayPostJsonEndpoint( auth: ResolvedGatewayAuth; maxBodyBytes: number; trustedProxies?: string[]; + allowRealIpFallback?: boolean; rateLimiter?: AuthRateLimiter; }, ): Promise { @@ -30,6 +31,7 @@ export async function handleGatewayPostJsonEndpoint( res, auth: opts.auth, trustedProxies: opts.trustedProxies, + allowRealIpFallback: opts.allowRealIpFallback, rateLimiter: opts.rateLimiter, }); if (!authorized) { diff --git a/src/gateway/net.test.ts b/src/gateway/net.test.ts index 3ac898fa5..8e1c1c70b 100644 --- a/src/gateway/net.test.ts +++ b/src/gateway/net.test.ts @@ -5,7 +5,7 @@ import { isSecureWebSocketUrl, isTrustedProxyAddress, pickPrimaryLanIPv4, - resolveGatewayClientIp, + resolveClientIp, resolveGatewayListenHosts, resolveHostName, } from "./net.js"; @@ -132,49 +132,74 @@ describe("isTrustedProxyAddress", () => { }); }); -describe("resolveGatewayClientIp", () => { - it("returns remote IP when the remote is not a trusted proxy", () => { - const ip = resolveGatewayClientIp({ +describe("resolveClientIp", () => { + it.each([ + { + name: "returns remote IP when remote is not trusted proxy", remoteAddr: "203.0.113.10", forwardedFor: "10.0.0.2", trustedProxies: ["127.0.0.1"], - }); - expect(ip).toBe("203.0.113.10"); - }); - - it("returns forwarded client IP when the remote is a trusted proxy", () => { - const ip = resolveGatewayClientIp({ - remoteAddr: "127.0.0.1", - forwardedFor: "127.0.0.1, 10.0.0.2", - trustedProxies: ["127.0.0.1"], - }); - expect(ip).toBe("10.0.0.2"); - }); - - it("does not trust the left-most X-Forwarded-For value when behind a trusted proxy", () => { - const ip = resolveGatewayClientIp({ + expected: "203.0.113.10", + }, + { + name: "uses right-most untrusted X-Forwarded-For hop", remoteAddr: "127.0.0.1", forwardedFor: "198.51.100.99, 10.0.0.9, 127.0.0.1", trustedProxies: ["127.0.0.1"], - }); - expect(ip).toBe("10.0.0.9"); - }); - - it("fails closed when trusted proxy headers are missing", () => { - const ip = resolveGatewayClientIp({ + expected: "10.0.0.9", + }, + { + name: "fails closed when all X-Forwarded-For hops are trusted proxies", + remoteAddr: "127.0.0.1", + forwardedFor: "127.0.0.1, ::1", + trustedProxies: ["127.0.0.1", "::1"], + expected: undefined, + }, + { + name: "fails closed when trusted proxy omits forwarding headers", remoteAddr: "127.0.0.1", trustedProxies: ["127.0.0.1"], - }); - expect(ip).toBeUndefined(); - }); - - it("supports IPv6 client IP forwarded by a trusted proxy", () => { - const ip = resolveGatewayClientIp({ + expected: undefined, + }, + { + name: "ignores invalid X-Forwarded-For entries", + remoteAddr: "127.0.0.1", + forwardedFor: "garbage, 10.0.0.999", + trustedProxies: ["127.0.0.1"], + expected: undefined, + }, + { + name: "does not trust X-Real-IP by default", remoteAddr: "127.0.0.1", realIp: "[2001:db8::5]", trustedProxies: ["127.0.0.1"], + expected: undefined, + }, + { + name: "uses X-Real-IP only when explicitly enabled", + remoteAddr: "127.0.0.1", + realIp: "[2001:db8::5]", + trustedProxies: ["127.0.0.1"], + allowRealIpFallback: true, + expected: "2001:db8::5", + }, + { + name: "ignores invalid X-Real-IP even when fallback enabled", + remoteAddr: "127.0.0.1", + realIp: "not-an-ip", + trustedProxies: ["127.0.0.1"], + allowRealIpFallback: true, + expected: undefined, + }, + ])("$name", (testCase) => { + const ip = resolveClientIp({ + remoteAddr: testCase.remoteAddr, + forwardedFor: testCase.forwardedFor, + realIp: testCase.realIp, + trustedProxies: testCase.trustedProxies, + allowRealIpFallback: testCase.allowRealIpFallback, }); - expect(ip).toBe("2001:db8::5"); + expect(ip).toBe(testCase.expected); }); }); diff --git a/src/gateway/net.ts b/src/gateway/net.ts index ab4347796..8094c67cc 100644 --- a/src/gateway/net.ts +++ b/src/gateway/net.ts @@ -146,45 +146,51 @@ function stripOptionalPort(ip: string): string { return ip; } -export function parseForwardedForClientIp( - forwardedFor?: string, - trustedProxies?: string[], -): string | undefined { - const entries = forwardedFor - ?.split(",") - .map((entry) => entry.trim()) - .filter((entry) => entry.length > 0); - if (!entries?.length) { +function parseIpLiteral(raw: string | undefined): string | undefined { + const trimmed = raw?.trim(); + if (!trimmed) { return undefined; } - - if (!trustedProxies?.length) { - const raw = entries.at(-1); - if (!raw) { - return undefined; - } - return normalizeIp(stripOptionalPort(raw)); + const stripped = stripOptionalPort(trimmed); + const normalized = normalizeIp(stripped); + if (!normalized || net.isIP(normalized) === 0) { + return undefined; } - - for (let index = entries.length - 1; index >= 0; index -= 1) { - const normalized = normalizeIp(stripOptionalPort(entries[index])); - if (!normalized) { - continue; - } - if (!isTrustedProxyAddress(normalized, trustedProxies)) { - return normalized; - } - } - - return undefined; + return normalized; } function parseRealIp(realIp?: string): string | undefined { - const raw = realIp?.trim(); - if (!raw) { + return parseIpLiteral(realIp); +} + +function resolveForwardedClientIp(params: { + forwardedFor?: string; + trustedProxies?: string[]; +}): string | undefined { + const { forwardedFor, trustedProxies } = params; + if (!trustedProxies?.length) { return undefined; } - return normalizeIp(stripOptionalPort(raw)); + + const forwardedChain: string[] = []; + for (const entry of forwardedFor?.split(",") ?? []) { + const normalized = parseIpLiteral(entry); + if (normalized) { + forwardedChain.push(normalized); + } + } + if (forwardedChain.length === 0) { + return undefined; + } + + // Walk right-to-left and return the first untrusted hop. + for (let index = forwardedChain.length - 1; index >= 0; index -= 1) { + const hop = forwardedChain[index]; + if (!isTrustedProxyAddress(hop, trustedProxies)) { + return hop; + } + } + return undefined; } /** @@ -252,11 +258,13 @@ export function isTrustedProxyAddress(ip: string | undefined, trustedProxies?: s }); } -export function resolveGatewayClientIp(params: { +export function resolveClientIp(params: { remoteAddr?: string; forwardedFor?: string; realIp?: string; trustedProxies?: string[]; + /** Default false: only trust X-Real-IP when explicitly enabled. */ + allowRealIpFallback?: boolean; }): string | undefined { const remote = normalizeIp(params.remoteAddr); if (!remote) { @@ -268,10 +276,17 @@ export function resolveGatewayClientIp(params: { // Fail closed when traffic comes from a trusted proxy but client-origin headers // are missing or invalid. Falling back to the proxy's own IP can accidentally // treat unrelated requests as local/trusted. - return ( - parseForwardedForClientIp(params.forwardedFor, params.trustedProxies) ?? - parseRealIp(params.realIp) - ); + const forwardedIp = resolveForwardedClientIp({ + forwardedFor: params.forwardedFor, + trustedProxies: params.trustedProxies, + }); + if (forwardedIp) { + return forwardedIp; + } + if (params.allowRealIpFallback) { + return parseRealIp(params.realIp); + } + return undefined; } export function isLocalGatewayAddress(ip: string | undefined): boolean { diff --git a/src/gateway/openai-http.ts b/src/gateway/openai-http.ts index d9e98a052..354d389f7 100644 --- a/src/gateway/openai-http.ts +++ b/src/gateway/openai-http.ts @@ -20,6 +20,7 @@ type OpenAiHttpOptions = { auth: ResolvedGatewayAuth; maxBodyBytes?: number; trustedProxies?: string[]; + allowRealIpFallback?: boolean; rateLimiter?: AuthRateLimiter; }; @@ -162,6 +163,7 @@ export async function handleOpenAiHttpRequest( pathname: "/v1/chat/completions", auth: opts.auth, trustedProxies: opts.trustedProxies, + allowRealIpFallback: opts.allowRealIpFallback, rateLimiter: opts.rateLimiter, maxBodyBytes: opts.maxBodyBytes ?? 1024 * 1024, }); diff --git a/src/gateway/openresponses-http.ts b/src/gateway/openresponses-http.ts index 3fe440d4c..791fdb5e6 100644 --- a/src/gateway/openresponses-http.ts +++ b/src/gateway/openresponses-http.ts @@ -55,6 +55,7 @@ type OpenResponsesHttpOptions = { maxBodyBytes?: number; config?: GatewayHttpResponsesConfig; trustedProxies?: string[]; + allowRealIpFallback?: boolean; rateLimiter?: AuthRateLimiter; }; @@ -343,6 +344,7 @@ export async function handleOpenResponsesHttpRequest( pathname: "/v1/responses", auth: opts.auth, trustedProxies: opts.trustedProxies, + allowRealIpFallback: opts.allowRealIpFallback, rateLimiter: opts.rateLimiter, maxBodyBytes, }); diff --git a/src/gateway/server-http.ts b/src/gateway/server-http.ts index c1c29b355..1bf12bbf6 100644 --- a/src/gateway/server-http.ts +++ b/src/gateway/server-http.ts @@ -133,17 +133,26 @@ async function authorizeCanvasRequest(params: { req: IncomingMessage; auth: ResolvedGatewayAuth; trustedProxies: string[]; + allowRealIpFallback: boolean; clients: Set; canvasCapability?: string; malformedScopedPath?: boolean; rateLimiter?: AuthRateLimiter; }): Promise { - const { req, auth, trustedProxies, clients, canvasCapability, malformedScopedPath, rateLimiter } = - params; + const { + req, + auth, + trustedProxies, + allowRealIpFallback, + clients, + canvasCapability, + malformedScopedPath, + rateLimiter, + } = params; if (malformedScopedPath) { return { ok: false, reason: "unauthorized" }; } - if (isLocalDirectRequest(req, trustedProxies)) { + if (isLocalDirectRequest(req, trustedProxies, allowRealIpFallback)) { return { ok: true }; } @@ -155,6 +164,7 @@ async function authorizeCanvasRequest(params: { connectAuth: { token, password: token }, req, trustedProxies, + allowRealIpFallback, rateLimiter, }); if (authResult.ok) { @@ -497,6 +507,7 @@ export function createGatewayHttpServer(opts: { try { const configSnapshot = loadConfig(); const trustedProxies = configSnapshot.gateway?.trustedProxies ?? []; + const allowRealIpFallback = configSnapshot.gateway?.allowRealIpFallback === true; const scopedCanvas = normalizeCanvasScopedUrl(req.url ?? "/"); if (scopedCanvas.malformedScopedPath) { sendGatewayAuthFailure(res, { ok: false, reason: "unauthorized" }); @@ -513,6 +524,7 @@ export function createGatewayHttpServer(opts: { await handleToolsInvokeHttpRequest(req, res, { auth: resolvedAuth, trustedProxies, + allowRealIpFallback, rateLimiter, }) ) { @@ -532,6 +544,7 @@ export function createGatewayHttpServer(opts: { connectAuth: token ? { token, password: token } : null, req, trustedProxies, + allowRealIpFallback, rateLimiter, }); if (!authResult.ok) { @@ -549,6 +562,7 @@ export function createGatewayHttpServer(opts: { auth: resolvedAuth, config: openResponsesConfig, trustedProxies, + allowRealIpFallback, rateLimiter, }) ) { @@ -560,6 +574,7 @@ export function createGatewayHttpServer(opts: { await handleOpenAiHttpRequest(req, res, { auth: resolvedAuth, trustedProxies, + allowRealIpFallback, rateLimiter, }) ) { @@ -572,6 +587,7 @@ export function createGatewayHttpServer(opts: { req, auth: resolvedAuth, trustedProxies, + allowRealIpFallback, clients, canvasCapability: scopedCanvas.capability, malformedScopedPath: scopedCanvas.malformedScopedPath, @@ -648,10 +664,12 @@ export function attachGatewayUpgradeHandler(opts: { if (url.pathname === CANVAS_WS_PATH) { const configSnapshot = loadConfig(); const trustedProxies = configSnapshot.gateway?.trustedProxies ?? []; + const allowRealIpFallback = configSnapshot.gateway?.allowRealIpFallback === true; const ok = await authorizeCanvasRequest({ req, auth: resolvedAuth, trustedProxies, + allowRealIpFallback, clients, canvasCapability: scopedCanvas.capability, malformedScopedPath: scopedCanvas.malformedScopedPath, diff --git a/src/gateway/server/ws-connection/message-handler.ts b/src/gateway/server/ws-connection/message-handler.ts index 1be8b5778..0c94d5b05 100644 --- a/src/gateway/server/ws-connection/message-handler.ts +++ b/src/gateway/server/ws-connection/message-handler.ts @@ -41,7 +41,7 @@ import { mintCanvasCapabilityToken, } from "../../canvas-capability.js"; import { buildDeviceAuthPayload } from "../../device-auth.js"; -import { isLoopbackAddress, isTrustedProxyAddress, resolveGatewayClientIp } from "../../net.js"; +import { isLoopbackAddress, isTrustedProxyAddress, resolveClientIp } from "../../net.js"; import { resolveHostName } from "../../net.js"; import { resolveNodeCommandAllowlist } from "../../node-command-policy.js"; import { checkBrowserOrigin } from "../../origin-check.js"; @@ -176,7 +176,14 @@ export function attachGatewayWsMessageHandler(params: { const configSnapshot = loadConfig(); const trustedProxies = configSnapshot.gateway?.trustedProxies ?? []; - const clientIp = resolveGatewayClientIp({ remoteAddr, forwardedFor, realIp, trustedProxies }); + const allowRealIpFallback = configSnapshot.gateway?.allowRealIpFallback === true; + const clientIp = resolveClientIp({ + remoteAddr, + forwardedFor, + realIp, + trustedProxies, + allowRealIpFallback, + }); // If proxy headers are present but the remote address isn't trusted, don't treat // the connection as local. This prevents auth bypass when running behind a reverse @@ -189,7 +196,7 @@ export function attachGatewayWsMessageHandler(params: { const hostIsLocal = hostName === "localhost" || hostName === "127.0.0.1" || hostName === "::1"; const hostIsTailscaleServe = hostName.endsWith(".ts.net"); const hostIsLocalish = hostIsLocal || hostIsTailscaleServe; - const isLocalClient = isLocalDirectRequest(upgradeReq, trustedProxies); + const isLocalClient = isLocalDirectRequest(upgradeReq, trustedProxies, allowRealIpFallback); const reportedClientIp = isLocalClient || hasUntrustedProxyHeaders ? undefined @@ -389,6 +396,7 @@ export function attachGatewayWsMessageHandler(params: { connectAuth: connectParams.auth, req: upgradeReq, trustedProxies, + allowRealIpFallback, rateLimiter: hasDeviceTokenCandidate ? undefined : rateLimiter, clientIp, rateLimitScope: AUTH_RATE_LIMIT_SCOPE_SHARED_SECRET, @@ -424,6 +432,7 @@ export function attachGatewayWsMessageHandler(params: { connectAuth: connectParams.auth, req: upgradeReq, trustedProxies, + allowRealIpFallback, // Shared-auth probe only; rate-limit side effects are handled in // the primary auth flow (or deferred for device-token candidates). rateLimitScope: AUTH_RATE_LIMIT_SCOPE_SHARED_SECRET, diff --git a/src/gateway/tools-invoke-http.ts b/src/gateway/tools-invoke-http.ts index 84f14457f..5e5c6db2c 100644 --- a/src/gateway/tools-invoke-http.ts +++ b/src/gateway/tools-invoke-http.ts @@ -131,6 +131,7 @@ export async function handleToolsInvokeHttpRequest( auth: ResolvedGatewayAuth; maxBodyBytes?: number; trustedProxies?: string[]; + allowRealIpFallback?: boolean; rateLimiter?: AuthRateLimiter; }, ): Promise { @@ -151,6 +152,7 @@ export async function handleToolsInvokeHttpRequest( connectAuth: token ? { token, password: token } : null, req, trustedProxies: opts.trustedProxies ?? cfg.gateway?.trustedProxies, + allowRealIpFallback: opts.allowRealIpFallback ?? cfg.gateway?.allowRealIpFallback, rateLimiter: opts.rateLimiter, }); if (!authResult.ok) { From 24d18d0d72bc22ec84bc3a44886a224ea6f173f6 Mon Sep 17 00:00:00 2001 From: Henry Loenwind Date: Sat, 21 Feb 2026 13:39:25 +0100 Subject: [PATCH 0179/1007] fix: Correct data path in SKILL.md (coding-agent) (#11009) Merged via /review-pr -> /prepare-pr -> /merge-pr. Prepared head SHA: f7e56b80c64b6d8e001e768ca718b9fb433123b8 Co-authored-by: HenryLoenwind <1485873+HenryLoenwind@users.noreply.github.com> Co-authored-by: obviyus <22031114+obviyus@users.noreply.github.com> Reviewed-by: @obviyus --- skills/coding-agent/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skills/coding-agent/SKILL.md b/skills/coding-agent/SKILL.md index 7a672a1cd..ef4e05949 100644 --- a/skills/coding-agent/SKILL.md +++ b/skills/coding-agent/SKILL.md @@ -231,7 +231,7 @@ git worktree remove /tmp/issue-99 5. **--full-auto for building** - auto-approves changes 6. **vanilla for reviewing** - no special flags needed 7. **Parallel is OK** - run many Codex processes at once for batch work -8. **NEVER start Codex in ~/clawd/** - it'll read your soul docs and get weird ideas about the org chart! +8. **NEVER start Codex in ~/.openclaw/** - it'll read your soul docs and get weird ideas about the org chart! 9. **NEVER checkout branches in ~/Projects/openclaw/** - that's the LIVE OpenClaw instance! --- From 6cb7e16d400366602e0bd0e0ac04898b86232782 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:44:04 +0100 Subject: [PATCH 0180/1007] fix(oauth): harden refresh token refresh-response validation --- CHANGELOG.md | 1 + src/agents/chutes-oauth.e2e.test.ts | 35 +++++++++++++++++++++ src/agents/chutes-oauth.ts | 1 + src/providers/qwen-portal-oauth.test.ts | 42 +++++++++++++++++++++++++ src/providers/qwen-portal-oauth.ts | 20 ++++++++---- 5 files changed, 93 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 02bb3e8ac..612394ce9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ Docs: https://docs.openclaw.ai - ACP/Security: escape control and delimiter characters in ACP `resource_link` title/URI metadata before prompt interpolation to prevent metadata-driven prompt injection through resource links. This ships in the next npm release. Thanks @aether-ai-agent for reporting. - TTS/Security: make model-driven provider switching opt-in by default (`messages.tts.modelOverrides.allowProvider=false` unless explicitly enabled), while keeping voice/style overrides available, to reduce prompt-injection-driven provider hops and unexpected TTS cost escalation. This ships in the next npm release. Thanks @aether-ai-agent for reporting. - Security/Agents: keep overflow compaction retry budgeting global across tool-result truncation recovery so successful truncation cannot reset the overflow retry counter and amplify retry/cost cycles. This ships in the next npm release. Thanks @aether-ai-agent for reporting. +- Providers/OAuth: harden Qwen and Chutes refresh handling by validating refresh response expiry values and preserving prior refresh tokens when providers return empty refresh token fields, with regression coverage for empty-token responses. - BlueBubbles/Security (optional beta iMessage plugin): require webhook token authentication for all BlueBubbles webhook requests (including loopback/proxied setups), removing passwordless webhook fallback behavior. Thanks @zpbrent. - iOS/Security: force `https://` for non-loopback manual gateway hosts during iOS onboarding to block insecure remote transport URLs. (#21969) Thanks @mbelinky. - Gateway/Security: remove shared-IP fallback for canvas endpoints and require token or session capability for canvas access. Thanks @thewilloftheshadow. diff --git a/src/agents/chutes-oauth.e2e.test.ts b/src/agents/chutes-oauth.e2e.test.ts index a4292b3eb..079dbe361 100644 --- a/src/agents/chutes-oauth.e2e.test.ts +++ b/src/agents/chutes-oauth.e2e.test.ts @@ -102,4 +102,39 @@ describe("chutes-oauth", () => { expect(refreshed.refresh).toBe("rt_old"); expect(refreshed.expires).toBe(now + 1800 * 1000 - 5 * 60 * 1000); }); + + it("refreshes tokens and ignores empty refresh_token values", async () => { + const fetchFn = withFetchPreconnect(async (input: RequestInfo | URL, init?: RequestInit) => { + const url = urlToString(input); + if (url !== CHUTES_TOKEN_ENDPOINT) { + return new Response("not found", { status: 404 }); + } + expect(init?.method).toBe("POST"); + return new Response( + JSON.stringify({ + access_token: "at_new", + refresh_token: "", + expires_in: 1800, + }), + { status: 200, headers: { "Content-Type": "application/json" } }, + ); + }); + + const now = 3_000_000; + const refreshed = await refreshChutesTokens({ + credential: { + access: "at_old", + refresh: "rt_old", + expires: now - 10_000, + email: "fred", + clientId: "cid_test", + } as unknown as Parameters[0]["credential"], + fetchFn, + now, + }); + + expect(refreshed.access).toBe("at_new"); + expect(refreshed.refresh).toBe("rt_old"); + expect(refreshed.expires).toBe(now + 1800 * 1000 - 5 * 60 * 1000); + }); }); diff --git a/src/agents/chutes-oauth.ts b/src/agents/chutes-oauth.ts index 2b3abed84..02adf10ce 100644 --- a/src/agents/chutes-oauth.ts +++ b/src/agents/chutes-oauth.ts @@ -218,6 +218,7 @@ export async function refreshChutesTokens(params: { return { ...params.credential, access, + // RFC 6749 section 6: new refresh token is optional; if present, replace old. refresh: newRefresh || refreshToken, expires: coerceExpiresAt(expiresIn, now), clientId, diff --git a/src/providers/qwen-portal-oauth.test.ts b/src/providers/qwen-portal-oauth.test.ts index 0abe4eddb..78b25b583 100644 --- a/src/providers/qwen-portal-oauth.test.ts +++ b/src/providers/qwen-portal-oauth.test.ts @@ -58,6 +58,48 @@ describe("refreshQwenPortalCredentials", () => { expect(result.refresh).toBe("old-refresh"); }); + it("keeps refresh token when response sends an empty refresh token", async () => { + const fetchSpy = vi.fn().mockResolvedValue({ + ok: true, + status: 200, + json: async () => ({ + access_token: "new-access", + refresh_token: "", + expires_in: 1800, + }), + }); + vi.stubGlobal("fetch", fetchSpy); + + const result = await refreshQwenPortalCredentials({ + access: "old-access", + refresh: "old-refresh", + expires: Date.now() - 1000, + }); + + expect(result.refresh).toBe("old-refresh"); + }); + + it("errors when refresh response has invalid expires_in", async () => { + const fetchSpy = vi.fn().mockResolvedValue({ + ok: true, + status: 200, + json: async () => ({ + access_token: "new-access", + refresh_token: "new-refresh", + expires_in: 0, + }), + }); + vi.stubGlobal("fetch", fetchSpy); + + await expect( + refreshQwenPortalCredentials({ + access: "old-access", + refresh: "old-refresh", + expires: Date.now() - 1000, + }), + ).rejects.toThrow("Qwen OAuth refresh response missing or invalid expires_in"); + }); + it("errors when refresh token is invalid", async () => { const fetchSpy = vi.fn().mockResolvedValue({ ok: false, diff --git a/src/providers/qwen-portal-oauth.ts b/src/providers/qwen-portal-oauth.ts index bbed888c9..159942ef2 100644 --- a/src/providers/qwen-portal-oauth.ts +++ b/src/providers/qwen-portal-oauth.ts @@ -8,7 +8,8 @@ const QWEN_OAUTH_CLIENT_ID = "f0304373b74a44d2b584a3fb70ca9e56"; export async function refreshQwenPortalCredentials( credentials: OAuthCredentials, ): Promise { - if (!credentials.refresh?.trim()) { + const refreshToken = credentials.refresh?.trim(); + if (!refreshToken) { throw new Error("Qwen OAuth refresh token missing; re-authenticate."); } @@ -20,7 +21,7 @@ export async function refreshQwenPortalCredentials( }, body: new URLSearchParams({ grant_type: "refresh_token", - refresh_token: credentials.refresh, + refresh_token: refreshToken, client_id: QWEN_OAUTH_CLIENT_ID, }), }); @@ -40,15 +41,22 @@ export async function refreshQwenPortalCredentials( refresh_token?: string; expires_in?: number; }; + const accessToken = payload.access_token?.trim(); + const newRefreshToken = payload.refresh_token?.trim(); + const expiresIn = payload.expires_in; - if (!payload.access_token || !payload.expires_in) { + if (!accessToken) { throw new Error("Qwen OAuth refresh response missing access token."); } + if (typeof expiresIn !== "number" || !Number.isFinite(expiresIn) || expiresIn <= 0) { + throw new Error("Qwen OAuth refresh response missing or invalid expires_in."); + } return { ...credentials, - access: payload.access_token, - refresh: payload.refresh_token || credentials.refresh, - expires: Date.now() + payload.expires_in * 1000, + access: accessToken, + // RFC 6749 section 6: new refresh token is optional; if present, replace old. + refresh: newRefreshToken || refreshToken, + expires: Date.now() + expiresIn * 1000, }; } From 621d8e1312482f122f18c43c72c67211b141da01 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:44:17 +0100 Subject: [PATCH 0181/1007] fix(sandbox): require noVNC observer password auth --- CHANGELOG.md | 1 + docs/gateway/configuration-reference.md | 1 + docs/gateway/sandboxing.md | 1 + docs/install/docker.md | 1 + scripts/sandbox-browser-entrypoint.sh | 13 +++++- src/agents/sandbox/browser.novnc-url.test.ts | 16 +++++++ src/agents/sandbox/browser.ts | 47 ++++++++++++++++---- src/agents/sandbox/constants.ts | 2 +- src/agents/sandbox/docker.ts | 19 ++++++++ 9 files changed, 91 insertions(+), 10 deletions(-) create mode 100644 src/agents/sandbox/browser.novnc-url.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 612394ce9..d975feb0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -58,6 +58,7 @@ Docs: https://docs.openclaw.ai - Security/Dependencies: bump transitive `hono` usage to `4.11.10` to incorporate timing-safe authentication comparison hardening for `basicAuth`/`bearerAuth` (`GHSA-gq3j-xvxp-8hrf`). Thanks @vincentkoc. - Security/Gateway: parse `X-Forwarded-For` with trust-preserving semantics when requests come from configured trusted proxies, preventing proxy-chain spoofing from influencing client IP classification and rate-limit identity. Thanks @AnthonyDiSanti and @vincentkoc. - Security/Sandbox: remove default `--no-sandbox` for the browser container entrypoint, add explicit opt-in via `OPENCLAW_BROWSER_NO_SANDBOX` / `CLAWDBOT_BROWSER_NO_SANDBOX`, and add security-audit checks for stale/missing sandbox browser Docker hash labels. This ships in the next npm release. Thanks @TerminalsandCoffee and @vincentkoc. +- Security/Sandbox Browser: require VNC password auth for noVNC observer sessions in the sandbox browser entrypoint, plumb per-container noVNC passwords from runtime, and emit password-bearing auto-connect observer URLs while keeping loopback-only host port publishing. This ships in the next npm release. Thanks @TerminalsandCoffee for reporting. - Auto-reply/Tools: forward `senderIsOwner` through embedded queued/followup runner params so owner-only tools remain available for authorized senders. (#22296) thanks @hcoj. - Discord: restore model picker back navigation when a provider is missing and document the Discord picker flow. (#21458) Thanks @pejmanjohn and @thewilloftheshadow. - Memory/QMD: respect per-agent `memorySearch.enabled=false` during gateway QMD startup initialization, split multi-collection QMD searches into per-collection queries (`search`/`vsearch`/`query`) to avoid sparse-term drops, prefer collection-hinted doc resolution to avoid stale-hash collisions, retry boot updates on transient lock/timeout failures, skip `qmd embed` in BM25-only `search` mode (including `memory index --force`), and serialize embed runs globally with failure backoff to prevent CPU storms on multi-agent hosts. (#20581, #21590, #20513, #20001, #21266, #21583, #20346, #19493) Thanks @danielrevivo, @zanderkrause, @sunyan034-cmd, @tilleulenspiegel, @dae-oss, @adamlongcreativellc, @jonathanadams96, and @kiliansitel. diff --git a/docs/gateway/configuration-reference.md b/docs/gateway/configuration-reference.md index b3bc9b77b..860d7a2e3 100644 --- a/docs/gateway/configuration-reference.md +++ b/docs/gateway/configuration-reference.md @@ -992,6 +992,7 @@ Optional **Docker sandboxing** for the embedded agent. See [Sandboxing](/gateway **`docker.binds`** mounts additional host directories; global and per-agent binds are merged. **Sandboxed browser** (`sandbox.browser.enabled`): Chromium + CDP in a container. noVNC URL injected into system prompt. Does not require `browser.enabled` in main config. +noVNC observer access uses VNC auth by default and the generated URL includes the password query parameter automatically. - `allowHostControl: false` (default) blocks sandboxed sessions from targeting the host browser. - `sandbox.browser.binds` mounts additional host directories into the sandbox browser container only. When set (including `[]`), it replaces `docker.binds` for the browser container. diff --git a/docs/gateway/sandboxing.md b/docs/gateway/sandboxing.md index fe27d2c51..d07b85617 100644 --- a/docs/gateway/sandboxing.md +++ b/docs/gateway/sandboxing.md @@ -22,6 +22,7 @@ and process access when the model does something dumb. - Optional sandboxed browser (`agents.defaults.sandbox.browser`). - By default, the sandbox browser auto-starts (ensures CDP is reachable) when the browser tool needs it. Configure via `agents.defaults.sandbox.browser.autoStart` and `agents.defaults.sandbox.browser.autoStartTimeoutMs`. + - noVNC observer access is password-protected by default; OpenClaw emits an auto-connect URL with password query parameter. - `agents.defaults.sandbox.browser.allowHostControl` lets sandboxed sessions target the host browser explicitly. - Optional allowlists gate `target: "custom"`: `allowedControlUrls`, `allowedControlHosts`, `allowedControlPorts`. diff --git a/docs/install/docker.md b/docs/install/docker.md index 9cba10bf7..37e44fd1e 100644 --- a/docs/install/docker.md +++ b/docs/install/docker.md @@ -495,6 +495,7 @@ Notes: - Headful (Xvfb) reduces bot blocking vs headless. - Headless can still be used by setting `agents.defaults.sandbox.browser.headless=true`. - No full desktop environment (GNOME) is needed; Xvfb provides the display. +- noVNC observer access is password-protected by default; OpenClaw provides an auto-connect URL with the password query parameter. Use config: diff --git a/scripts/sandbox-browser-entrypoint.sh b/scripts/sandbox-browser-entrypoint.sh index 382090cca..ce74d44f5 100755 --- a/scripts/sandbox-browser-entrypoint.sh +++ b/scripts/sandbox-browser-entrypoint.sh @@ -12,6 +12,7 @@ NOVNC_PORT="${OPENCLAW_BROWSER_NOVNC_PORT:-${CLAWDBOT_BROWSER_NOVNC_PORT:-6080}} ENABLE_NOVNC="${OPENCLAW_BROWSER_ENABLE_NOVNC:-${CLAWDBOT_BROWSER_ENABLE_NOVNC:-1}}" HEADLESS="${OPENCLAW_BROWSER_HEADLESS:-${CLAWDBOT_BROWSER_HEADLESS:-0}}" ALLOW_NO_SANDBOX="${OPENCLAW_BROWSER_NO_SANDBOX:-${CLAWDBOT_BROWSER_NO_SANDBOX:-0}}" +NOVNC_PASSWORD="${OPENCLAW_BROWSER_NOVNC_PASSWORD:-${CLAWDBOT_BROWSER_NOVNC_PASSWORD:-}}" mkdir -p "${HOME}" "${HOME}/.chrome" "${XDG_CONFIG_HOME}" "${XDG_CACHE_HOME}" @@ -67,7 +68,17 @@ socat \ TCP:127.0.0.1:"${CHROME_CDP_PORT}" & if [[ "${ENABLE_NOVNC}" == "1" && "${HEADLESS}" != "1" ]]; then - x11vnc -display :1 -rfbport "${VNC_PORT}" -shared -forever -nopw -localhost & + # VNC auth passwords are max 8 chars; use a random default when not provided. + if [[ -z "${NOVNC_PASSWORD}" ]]; then + NOVNC_PASSWORD="$(< /proc/sys/kernel/random/uuid)" + NOVNC_PASSWORD="${NOVNC_PASSWORD//-/}" + NOVNC_PASSWORD="${NOVNC_PASSWORD:0:8}" + fi + NOVNC_PASSWD_FILE="${HOME}/.vnc/passwd" + mkdir -p "${HOME}/.vnc" + x11vnc -storepasswd "${NOVNC_PASSWORD}" "${NOVNC_PASSWD_FILE}" >/dev/null + chmod 600 "${NOVNC_PASSWD_FILE}" + x11vnc -display :1 -rfbport "${VNC_PORT}" -shared -forever -rfbauth "${NOVNC_PASSWD_FILE}" -localhost & websockify --web /usr/share/novnc/ "${NOVNC_PORT}" "localhost:${VNC_PORT}" & fi diff --git a/src/agents/sandbox/browser.novnc-url.test.ts b/src/agents/sandbox/browser.novnc-url.test.ts new file mode 100644 index 000000000..b542f6b94 --- /dev/null +++ b/src/agents/sandbox/browser.novnc-url.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, it } from "vitest"; +import { buildNoVncObserverUrl } from "./browser.js"; + +describe("buildNoVncObserverUrl", () => { + it("builds the default observer URL without password", () => { + expect(buildNoVncObserverUrl(45678)).toBe( + "http://127.0.0.1:45678/vnc.html?autoconnect=1&resize=remote", + ); + }); + + it("adds an encoded password query parameter when provided", () => { + expect(buildNoVncObserverUrl(45678, "a+b c&d")).toBe( + "http://127.0.0.1:45678/vnc.html?autoconnect=1&resize=remote&password=a%2Bb+c%26d", + ); + }); +}); diff --git a/src/agents/sandbox/browser.ts b/src/agents/sandbox/browser.ts index 069eea617..125e9bbdf 100644 --- a/src/agents/sandbox/browser.ts +++ b/src/agents/sandbox/browser.ts @@ -19,6 +19,7 @@ import { buildSandboxCreateArgs, dockerContainerState, execDocker, + readDockerContainerEnvVar, readDockerContainerLabel, readDockerPort, } from "./docker.js"; @@ -28,6 +29,23 @@ import { isToolAllowed } from "./tool-policy.js"; import type { SandboxBrowserContext, SandboxConfig } from "./types.js"; const HOT_BROWSER_WINDOW_MS = 5 * 60 * 1000; +const NOVNC_PASSWORD_ENV_KEY = "OPENCLAW_BROWSER_NOVNC_PASSWORD"; + +function generateNoVncPassword() { + // VNC auth uses an 8-char password max. + return crypto.randomBytes(4).toString("hex"); +} + +export function buildNoVncObserverUrl(port: number, password?: string) { + const query = new URLSearchParams({ + autoconnect: "1", + resize: "remote", + }); + if (password?.trim()) { + query.set("password", password); + } + return `http://127.0.0.1:${port}/vnc.html?${query.toString()}`; +} async function waitForSandboxCdp(params: { cdpPort: number; timeoutMs: number }): Promise { const deadline = Date.now() + Math.max(0, params.timeoutMs); @@ -140,8 +158,14 @@ export async function ensureSandboxBrowser(params: { let running = state.running; let currentHash: string | null = null; let hashMismatch = false; + const noVncEnabled = params.cfg.browser.enableNoVnc && !params.cfg.browser.headless; + let noVncPassword: string | undefined; if (hasContainer) { + if (noVncEnabled) { + noVncPassword = + (await readDockerContainerEnvVar(containerName, NOVNC_PASSWORD_ENV_KEY)) ?? undefined; + } const registry = await readBrowserRegistry(); const registryEntry = registry.entries.find((entry) => entry.containerName === containerName); currentHash = await readDockerContainerLabel(containerName, "openclaw.configHash"); @@ -177,6 +201,9 @@ export async function ensureSandboxBrowser(params: { } if (!hasContainer) { + if (noVncEnabled) { + noVncPassword = generateNoVncPassword(); + } await ensureSandboxBrowserImage(browserImage); const args = buildSandboxCreateArgs({ name: containerName, @@ -201,7 +228,7 @@ export async function ensureSandboxBrowser(params: { ); } args.push("-p", `127.0.0.1::${params.cfg.browser.cdpPort}`); - if (params.cfg.browser.enableNoVnc && !params.cfg.browser.headless) { + if (noVncEnabled) { args.push("-p", `127.0.0.1::${params.cfg.browser.noVncPort}`); } args.push("-e", `OPENCLAW_BROWSER_HEADLESS=${params.cfg.browser.headless ? "1" : "0"}`); @@ -209,6 +236,9 @@ export async function ensureSandboxBrowser(params: { args.push("-e", `OPENCLAW_BROWSER_CDP_PORT=${params.cfg.browser.cdpPort}`); args.push("-e", `OPENCLAW_BROWSER_VNC_PORT=${params.cfg.browser.vncPort}`); args.push("-e", `OPENCLAW_BROWSER_NOVNC_PORT=${params.cfg.browser.noVncPort}`); + if (noVncEnabled && noVncPassword) { + args.push("-e", `${NOVNC_PASSWORD_ENV_KEY}=${noVncPassword}`); + } args.push(browserImage); await execDocker(args); await execDocker(["start", containerName]); @@ -221,10 +251,13 @@ export async function ensureSandboxBrowser(params: { throw new Error(`Failed to resolve CDP port mapping for ${containerName}.`); } - const mappedNoVnc = - params.cfg.browser.enableNoVnc && !params.cfg.browser.headless - ? await readDockerPort(containerName, params.cfg.browser.noVncPort) - : null; + const mappedNoVnc = noVncEnabled + ? await readDockerPort(containerName, params.cfg.browser.noVncPort) + : null; + if (noVncEnabled && !noVncPassword) { + noVncPassword = + (await readDockerContainerEnvVar(containerName, NOVNC_PASSWORD_ENV_KEY)) ?? undefined; + } const existing = BROWSER_BRIDGES.get(params.scopeKey); const existingProfile = existing @@ -323,9 +356,7 @@ export async function ensureSandboxBrowser(params: { }); const noVncUrl = - mappedNoVnc && params.cfg.browser.enableNoVnc && !params.cfg.browser.headless - ? `http://127.0.0.1:${mappedNoVnc}/vnc.html?autoconnect=1&resize=remote` - : undefined; + mappedNoVnc && noVncEnabled ? buildNoVncObserverUrl(mappedNoVnc, noVncPassword) : undefined; return { bridgeUrl: resolvedBridge.baseUrl, diff --git a/src/agents/sandbox/constants.ts b/src/agents/sandbox/constants.ts index 6e3c4f776..f4172b2e0 100644 --- a/src/agents/sandbox/constants.ts +++ b/src/agents/sandbox/constants.ts @@ -38,7 +38,7 @@ export const DEFAULT_TOOL_DENY = [ export const DEFAULT_SANDBOX_BROWSER_IMAGE = "openclaw-sandbox-browser:bookworm-slim"; export const DEFAULT_SANDBOX_COMMON_IMAGE = "openclaw-sandbox-common:bookworm-slim"; -export const SANDBOX_BROWSER_SECURITY_HASH_EPOCH = "2026-02-21-no-sandbox-default"; +export const SANDBOX_BROWSER_SECURITY_HASH_EPOCH = "2026-02-21-novnc-auth-default"; export const DEFAULT_SANDBOX_BROWSER_PREFIX = "openclaw-sbx-browser-"; export const DEFAULT_SANDBOX_BROWSER_CDP_PORT = 9222; diff --git a/src/agents/sandbox/docker.ts b/src/agents/sandbox/docker.ts index 522066632..a03a5c26d 100644 --- a/src/agents/sandbox/docker.ts +++ b/src/agents/sandbox/docker.ts @@ -145,6 +145,25 @@ export async function readDockerContainerLabel( return raw; } +export async function readDockerContainerEnvVar( + containerName: string, + envVar: string, +): Promise { + const result = await execDocker( + ["inspect", "-f", "{{range .Config.Env}}{{println .}}{{end}}", containerName], + { allowFailure: true }, + ); + if (result.code !== 0) { + return null; + } + for (const line of result.stdout.split(/\r?\n/)) { + if (line.startsWith(`${envVar}=`)) { + return line.slice(envVar.length + 1); + } + } + return null; +} + export async function readDockerPort(containerName: string, port: number) { const result = await execDocker(["port", containerName, `${port}/tcp`], { allowFailure: true, From 577e5cc74bea27714ac8f0b1ad874b05a7c47a8f Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 12:52:21 +0000 Subject: [PATCH 0182/1007] refactor(test): dedupe gateway env setup and add env util coverage --- src/gateway/test-helpers.server.ts | 103 ++++++----------------------- src/test-utils/env.test.ts | 56 ++++++++++++++++ 2 files changed, 75 insertions(+), 84 deletions(-) create mode 100644 src/test-utils/env.test.ts diff --git a/src/gateway/test-helpers.server.ts b/src/gateway/test-helpers.server.ts index feb527c57..9c28b5648 100644 --- a/src/gateway/test-helpers.server.ts +++ b/src/gateway/test-helpers.server.ts @@ -43,18 +43,22 @@ async function getServerModule() { return await serverModulePromise; } -let previousHome: string | undefined; -let previousUserProfile: string | undefined; -let previousStateDir: string | undefined; -let previousConfigPath: string | undefined; -let previousSkipBrowserControl: string | undefined; -let previousSkipGmailWatcher: string | undefined; -let previousSkipCanvasHost: string | undefined; -let previousBundledPluginsDir: string | undefined; -let previousSkipChannels: string | undefined; -let previousSkipProviders: string | undefined; -let previousSkipCron: string | undefined; -let previousMinimalGateway: string | undefined; +const GATEWAY_TEST_ENV_KEYS = [ + "HOME", + "USERPROFILE", + "OPENCLAW_STATE_DIR", + "OPENCLAW_CONFIG_PATH", + "OPENCLAW_SKIP_BROWSER_CONTROL_SERVER", + "OPENCLAW_SKIP_GMAIL_WATCHER", + "OPENCLAW_SKIP_CANVAS_HOST", + "OPENCLAW_BUNDLED_PLUGINS_DIR", + "OPENCLAW_SKIP_CHANNELS", + "OPENCLAW_SKIP_PROVIDERS", + "OPENCLAW_SKIP_CRON", + "OPENCLAW_TEST_MINIMAL_GATEWAY", +] as const; + +let gatewayEnvSnapshot: ReturnType | undefined; let tempHome: string | undefined; let tempConfigRoot: string | undefined; @@ -87,18 +91,7 @@ export async function writeSessionStore(params: { } async function setupGatewayTestHome() { - previousHome = process.env.HOME; - previousUserProfile = process.env.USERPROFILE; - previousStateDir = process.env.OPENCLAW_STATE_DIR; - previousConfigPath = process.env.OPENCLAW_CONFIG_PATH; - previousSkipBrowserControl = process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER; - previousSkipGmailWatcher = process.env.OPENCLAW_SKIP_GMAIL_WATCHER; - previousSkipCanvasHost = process.env.OPENCLAW_SKIP_CANVAS_HOST; - previousBundledPluginsDir = process.env.OPENCLAW_BUNDLED_PLUGINS_DIR; - previousSkipChannels = process.env.OPENCLAW_SKIP_CHANNELS; - previousSkipProviders = process.env.OPENCLAW_SKIP_PROVIDERS; - previousSkipCron = process.env.OPENCLAW_SKIP_CRON; - previousMinimalGateway = process.env.OPENCLAW_TEST_MINIMAL_GATEWAY; + gatewayEnvSnapshot = captureEnv([...GATEWAY_TEST_ENV_KEYS]); tempHome = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-gateway-home-")); process.env.HOME = tempHome; process.env.USERPROFILE = tempHome; @@ -176,66 +169,8 @@ async function cleanupGatewayTestHome(options: { restoreEnv: boolean }) { vi.useRealTimers(); resetLogger(); if (options.restoreEnv) { - if (previousHome === undefined) { - delete process.env.HOME; - } else { - process.env.HOME = previousHome; - } - if (previousUserProfile === undefined) { - delete process.env.USERPROFILE; - } else { - process.env.USERPROFILE = previousUserProfile; - } - if (previousStateDir === undefined) { - delete process.env.OPENCLAW_STATE_DIR; - } else { - process.env.OPENCLAW_STATE_DIR = previousStateDir; - } - if (previousConfigPath === undefined) { - delete process.env.OPENCLAW_CONFIG_PATH; - } else { - process.env.OPENCLAW_CONFIG_PATH = previousConfigPath; - } - if (previousSkipBrowserControl === undefined) { - delete process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER; - } else { - process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER = previousSkipBrowserControl; - } - if (previousSkipGmailWatcher === undefined) { - delete process.env.OPENCLAW_SKIP_GMAIL_WATCHER; - } else { - process.env.OPENCLAW_SKIP_GMAIL_WATCHER = previousSkipGmailWatcher; - } - if (previousSkipCanvasHost === undefined) { - delete process.env.OPENCLAW_SKIP_CANVAS_HOST; - } else { - process.env.OPENCLAW_SKIP_CANVAS_HOST = previousSkipCanvasHost; - } - if (previousBundledPluginsDir === undefined) { - delete process.env.OPENCLAW_BUNDLED_PLUGINS_DIR; - } else { - process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = previousBundledPluginsDir; - } - if (previousSkipChannels === undefined) { - delete process.env.OPENCLAW_SKIP_CHANNELS; - } else { - process.env.OPENCLAW_SKIP_CHANNELS = previousSkipChannels; - } - if (previousSkipProviders === undefined) { - delete process.env.OPENCLAW_SKIP_PROVIDERS; - } else { - process.env.OPENCLAW_SKIP_PROVIDERS = previousSkipProviders; - } - if (previousSkipCron === undefined) { - delete process.env.OPENCLAW_SKIP_CRON; - } else { - process.env.OPENCLAW_SKIP_CRON = previousSkipCron; - } - if (previousMinimalGateway === undefined) { - delete process.env.OPENCLAW_TEST_MINIMAL_GATEWAY; - } else { - process.env.OPENCLAW_TEST_MINIMAL_GATEWAY = previousMinimalGateway; - } + gatewayEnvSnapshot?.restore(); + gatewayEnvSnapshot = undefined; } if (options.restoreEnv && tempHome) { await fs.rm(tempHome, { diff --git a/src/test-utils/env.test.ts b/src/test-utils/env.test.ts new file mode 100644 index 000000000..dce4e8946 --- /dev/null +++ b/src/test-utils/env.test.ts @@ -0,0 +1,56 @@ +import { describe, expect, it } from "vitest"; +import { captureEnv, captureFullEnv, withEnv, withEnvAsync } from "./env.js"; + +describe("env test utils", () => { + it("captureEnv restores mutated keys", () => { + const keyA = "OPENCLAW_ENV_TEST_A"; + const keyB = "OPENCLAW_ENV_TEST_B"; + const snapshot = captureEnv([keyA, keyB]); + const prevA = process.env[keyA]; + const prevB = process.env[keyB]; + process.env[keyA] = "mutated"; + delete process.env[keyB]; + + snapshot.restore(); + + expect(process.env[keyA]).toBe(prevA); + expect(process.env[keyB]).toBe(prevB); + }); + + it("captureFullEnv restores added keys and baseline values", () => { + const key = "OPENCLAW_ENV_TEST_ADDED"; + const prevHome = process.env.HOME; + const snapshot = captureFullEnv(); + process.env[key] = "1"; + delete process.env.HOME; + + snapshot.restore(); + + expect(process.env[key]).toBeUndefined(); + expect(process.env.HOME).toBe(prevHome); + }); + + it("withEnv applies values only inside callback", () => { + const key = "OPENCLAW_ENV_TEST_SYNC"; + const prev = process.env[key]; + + const seen = withEnv({ [key]: "inside" }, () => process.env[key]); + + expect(seen).toBe("inside"); + expect(process.env[key]).toBe(prev); + }); + + it("withEnvAsync restores values when callback throws", async () => { + const key = "OPENCLAW_ENV_TEST_ASYNC"; + const prev = process.env[key]; + + await expect( + withEnvAsync({ [key]: "inside" }, async () => { + expect(process.env[key]).toBe("inside"); + throw new Error("boom"); + }), + ).rejects.toThrow("boom"); + + expect(process.env[key]).toBe(prev); + }); +}); From c529bafdc3cf5641608d353630baec1e3cf9dc55 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 12:54:54 +0000 Subject: [PATCH 0183/1007] refactor(test): reuse temp-home helper in voicewake e2e --- .../server.models-voicewake-misc.e2e.test.ts | 195 +++++++----------- 1 file changed, 77 insertions(+), 118 deletions(-) diff --git a/src/gateway/server.models-voicewake-misc.e2e.test.ts b/src/gateway/server.models-voicewake-misc.e2e.test.ts index 33d1b1423..63fe4441f 100644 --- a/src/gateway/server.models-voicewake-misc.e2e.test.ts +++ b/src/gateway/server.models-voicewake-misc.e2e.test.ts @@ -1,6 +1,5 @@ import fs from "node:fs/promises"; import { createServer } from "node:net"; -import os from "node:os"; import path from "node:path"; import { afterAll, beforeAll, describe, expect, test } from "vitest"; import { WebSocket } from "ws"; @@ -11,6 +10,7 @@ import { GatewayLockError } from "../infra/gateway-lock.js"; import { getActivePluginRegistry, setActivePluginRegistry } from "../plugins/runtime.js"; import { createOutboundTestPlugin } from "../test-utils/channel-plugins.js"; import { captureEnv } from "../test-utils/env.js"; +import { createTempHomeEnv } from "../test-utils/temp-home.js"; import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../utils/message-channel.js"; import { createRegistry } from "./server.e2e-registry-helpers.js"; import { @@ -81,140 +81,99 @@ const whatsappRegistry = createRegistry([ const emptyRegistry = createRegistry([]); describe("gateway server models + voicewake", () => { - const setTempHome = (homeDir: string) => { - const prevHome = process.env.HOME; - const prevStateDir = process.env.OPENCLAW_STATE_DIR; - const prevUserProfile = process.env.USERPROFILE; - const prevHomeDrive = process.env.HOMEDRIVE; - const prevHomePath = process.env.HOMEPATH; - process.env.HOME = homeDir; - process.env.OPENCLAW_STATE_DIR = path.join(homeDir, ".openclaw"); - process.env.USERPROFILE = homeDir; - if (process.platform === "win32") { - const parsed = path.parse(homeDir); - process.env.HOMEDRIVE = parsed.root.replace(/\\$/, ""); - process.env.HOMEPATH = homeDir.slice(Math.max(parsed.root.length - 1, 0)); - } - return () => { - if (prevHome === undefined) { - delete process.env.HOME; - } else { - process.env.HOME = prevHome; - } - if (prevStateDir === undefined) { - delete process.env.OPENCLAW_STATE_DIR; - } else { - process.env.OPENCLAW_STATE_DIR = prevStateDir; - } - if (prevUserProfile === undefined) { - delete process.env.USERPROFILE; - } else { - process.env.USERPROFILE = prevUserProfile; - } - if (process.platform === "win32") { - if (prevHomeDrive === undefined) { - delete process.env.HOMEDRIVE; - } else { - process.env.HOMEDRIVE = prevHomeDrive; - } - if (prevHomePath === undefined) { - delete process.env.HOMEPATH; - } else { - process.env.HOMEPATH = prevHomePath; - } - } - }; - }; - test( "voicewake.get returns defaults and voicewake.set broadcasts", { timeout: 60_000 }, async () => { - const homeDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-home-")); - const restoreHome = setTempHome(homeDir); + const tempHome = await createTempHomeEnv("openclaw-home-"); + try { + const initial = await rpcReq<{ triggers: string[] }>(ws, "voicewake.get"); + expect(initial.ok).toBe(true); + expect(initial.payload?.triggers).toEqual(["openclaw", "claude", "computer"]); - const initial = await rpcReq<{ triggers: string[] }>(ws, "voicewake.get"); - expect(initial.ok).toBe(true); - expect(initial.payload?.triggers).toEqual(["openclaw", "claude", "computer"]); + const changedP = onceMessage( + ws, + (o) => o.type === "event" && o.event === "voicewake.changed", + ); - const changedP = onceMessage( - ws, - (o) => o.type === "event" && o.event === "voicewake.changed", - ); + const setRes = await rpcReq<{ triggers: string[] }>(ws, "voicewake.set", { + triggers: [" hi ", "", "there"], + }); + expect(setRes.ok).toBe(true); + expect(setRes.payload?.triggers).toEqual(["hi", "there"]); - const setRes = await rpcReq<{ triggers: string[] }>(ws, "voicewake.set", { - triggers: [" hi ", "", "there"], - }); - expect(setRes.ok).toBe(true); - expect(setRes.payload?.triggers).toEqual(["hi", "there"]); + const changed = (await changedP) as { event?: string; payload?: unknown }; + expect(changed.event).toBe("voicewake.changed"); + expect((changed.payload as { triggers?: unknown } | undefined)?.triggers).toEqual([ + "hi", + "there", + ]); - const changed = (await changedP) as { event?: string; payload?: unknown }; - expect(changed.event).toBe("voicewake.changed"); - expect((changed.payload as { triggers?: unknown } | undefined)?.triggers).toEqual([ - "hi", - "there", - ]); + const after = await rpcReq<{ triggers: string[] }>(ws, "voicewake.get"); + expect(after.ok).toBe(true); + expect(after.payload?.triggers).toEqual(["hi", "there"]); - const after = await rpcReq<{ triggers: string[] }>(ws, "voicewake.get"); - expect(after.ok).toBe(true); - expect(after.payload?.triggers).toEqual(["hi", "there"]); - - const onDisk = JSON.parse( - await fs.readFile(path.join(homeDir, ".openclaw", "settings", "voicewake.json"), "utf8"), - ) as { triggers?: unknown; updatedAtMs?: unknown }; - expect(onDisk.triggers).toEqual(["hi", "there"]); - expect(typeof onDisk.updatedAtMs).toBe("number"); - - restoreHome(); + const onDisk = JSON.parse( + await fs.readFile( + path.join(tempHome.home, ".openclaw", "settings", "voicewake.json"), + "utf8", + ), + ) as { triggers?: unknown; updatedAtMs?: unknown }; + expect(onDisk.triggers).toEqual(["hi", "there"]); + expect(typeof onDisk.updatedAtMs).toBe("number"); + } finally { + await tempHome.restore(); + } }, ); test("pushes voicewake.changed to nodes on connect and on updates", async () => { - const homeDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-home-")); - const restoreHome = setTempHome(homeDir); + const tempHome = await createTempHomeEnv("openclaw-home-"); + try { + const nodeWs = new WebSocket(`ws://127.0.0.1:${port}`); + await new Promise((resolve) => nodeWs.once("open", resolve)); + const firstEventP = onceMessage( + nodeWs, + (o) => o.type === "event" && o.event === "voicewake.changed", + ); + await connectOk(nodeWs, { + role: "node", + client: { + id: GATEWAY_CLIENT_NAMES.NODE_HOST, + version: "1.0.0", + platform: "ios", + mode: GATEWAY_CLIENT_MODES.NODE, + }, + }); - const nodeWs = new WebSocket(`ws://127.0.0.1:${port}`); - await new Promise((resolve) => nodeWs.once("open", resolve)); - const firstEventP = onceMessage( - nodeWs, - (o) => o.type === "event" && o.event === "voicewake.changed", - ); - await connectOk(nodeWs, { - role: "node", - client: { - id: GATEWAY_CLIENT_NAMES.NODE_HOST, - version: "1.0.0", - platform: "ios", - mode: GATEWAY_CLIENT_MODES.NODE, - }, - }); + const first = (await firstEventP) as { event?: string; payload?: unknown }; + expect(first.event).toBe("voicewake.changed"); + expect((first.payload as { triggers?: unknown } | undefined)?.triggers).toEqual([ + "openclaw", + "claude", + "computer", + ]); - const first = (await firstEventP) as { event?: string; payload?: unknown }; - expect(first.event).toBe("voicewake.changed"); - expect((first.payload as { triggers?: unknown } | undefined)?.triggers).toEqual([ - "openclaw", - "claude", - "computer", - ]); + const broadcastP = onceMessage( + nodeWs, + (o) => o.type === "event" && o.event === "voicewake.changed", + ); + const setRes = await rpcReq<{ triggers: string[] }>(ws, "voicewake.set", { + triggers: ["openclaw", "computer"], + }); + expect(setRes.ok).toBe(true); - const broadcastP = onceMessage( - nodeWs, - (o) => o.type === "event" && o.event === "voicewake.changed", - ); - const setRes = await rpcReq<{ triggers: string[] }>(ws, "voicewake.set", { - triggers: ["openclaw", "computer"], - }); - expect(setRes.ok).toBe(true); + const broadcast = (await broadcastP) as { event?: string; payload?: unknown }; + expect(broadcast.event).toBe("voicewake.changed"); + expect((broadcast.payload as { triggers?: unknown } | undefined)?.triggers).toEqual([ + "openclaw", + "computer", + ]); - const broadcast = (await broadcastP) as { event?: string; payload?: unknown }; - expect(broadcast.event).toBe("voicewake.changed"); - expect((broadcast.payload as { triggers?: unknown } | undefined)?.triggers).toEqual([ - "openclaw", - "computer", - ]); - - nodeWs.close(); - restoreHome(); + nodeWs.close(); + } finally { + await tempHome.restore(); + } }); test("models.list returns model catalog", async () => { From b43aadc34cba3b3575aaa9dd15304842ca3f492f Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 12:56:34 +0000 Subject: [PATCH 0184/1007] refactor(test): dedupe temp-home setup in voicewake suite --- .../server.models-voicewake-misc.e2e.test.ts | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/gateway/server.models-voicewake-misc.e2e.test.ts b/src/gateway/server.models-voicewake-misc.e2e.test.ts index 63fe4441f..2000a4b4e 100644 --- a/src/gateway/server.models-voicewake-misc.e2e.test.ts +++ b/src/gateway/server.models-voicewake-misc.e2e.test.ts @@ -81,12 +81,20 @@ const whatsappRegistry = createRegistry([ const emptyRegistry = createRegistry([]); describe("gateway server models + voicewake", () => { + const withTempHome = async (fn: (homeDir: string) => Promise): Promise => { + const tempHome = await createTempHomeEnv("openclaw-home-"); + try { + return await fn(tempHome.home); + } finally { + await tempHome.restore(); + } + }; + test( "voicewake.get returns defaults and voicewake.set broadcasts", { timeout: 60_000 }, async () => { - const tempHome = await createTempHomeEnv("openclaw-home-"); - try { + await withTempHome(async (homeDir) => { const initial = await rpcReq<{ triggers: string[] }>(ws, "voicewake.get"); expect(initial.ok).toBe(true); expect(initial.payload?.triggers).toEqual(["openclaw", "claude", "computer"]); @@ -114,22 +122,16 @@ describe("gateway server models + voicewake", () => { expect(after.payload?.triggers).toEqual(["hi", "there"]); const onDisk = JSON.parse( - await fs.readFile( - path.join(tempHome.home, ".openclaw", "settings", "voicewake.json"), - "utf8", - ), + await fs.readFile(path.join(homeDir, ".openclaw", "settings", "voicewake.json"), "utf8"), ) as { triggers?: unknown; updatedAtMs?: unknown }; expect(onDisk.triggers).toEqual(["hi", "there"]); expect(typeof onDisk.updatedAtMs).toBe("number"); - } finally { - await tempHome.restore(); - } + }); }, ); test("pushes voicewake.changed to nodes on connect and on updates", async () => { - const tempHome = await createTempHomeEnv("openclaw-home-"); - try { + await withTempHome(async () => { const nodeWs = new WebSocket(`ws://127.0.0.1:${port}`); await new Promise((resolve) => nodeWs.once("open", resolve)); const firstEventP = onceMessage( @@ -171,9 +173,7 @@ describe("gateway server models + voicewake", () => { ]); nodeWs.close(); - } finally { - await tempHome.restore(); - } + }); }); test("models.list returns model catalog", async () => { From 8c1518f0f3e0533593cd2dec3a46c9b746753661 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:56:49 +0100 Subject: [PATCH 0185/1007] fix(sandbox): use one-time noVNC observer tokens --- CHANGELOG.md | 2 +- docs/gateway/configuration-reference.md | 2 +- docs/gateway/sandboxing.md | 2 +- docs/install/docker.md | 2 +- src/agents/sandbox/browser.create.test.ts | 185 +++++++++++++++++++ src/agents/sandbox/browser.novnc-url.test.ts | 38 +++- src/agents/sandbox/browser.ts | 37 ++-- src/agents/sandbox/novnc-auth.ts | 81 ++++++++ src/browser/bridge-server.ts | 18 ++ src/security/audit-extra.async.ts | 72 ++++++++ src/security/audit.test.ts | 51 +++++ 11 files changed, 463 insertions(+), 27 deletions(-) create mode 100644 src/agents/sandbox/browser.create.test.ts create mode 100644 src/agents/sandbox/novnc-auth.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index d975feb0a..f20ab8d6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -58,7 +58,7 @@ Docs: https://docs.openclaw.ai - Security/Dependencies: bump transitive `hono` usage to `4.11.10` to incorporate timing-safe authentication comparison hardening for `basicAuth`/`bearerAuth` (`GHSA-gq3j-xvxp-8hrf`). Thanks @vincentkoc. - Security/Gateway: parse `X-Forwarded-For` with trust-preserving semantics when requests come from configured trusted proxies, preventing proxy-chain spoofing from influencing client IP classification and rate-limit identity. Thanks @AnthonyDiSanti and @vincentkoc. - Security/Sandbox: remove default `--no-sandbox` for the browser container entrypoint, add explicit opt-in via `OPENCLAW_BROWSER_NO_SANDBOX` / `CLAWDBOT_BROWSER_NO_SANDBOX`, and add security-audit checks for stale/missing sandbox browser Docker hash labels. This ships in the next npm release. Thanks @TerminalsandCoffee and @vincentkoc. -- Security/Sandbox Browser: require VNC password auth for noVNC observer sessions in the sandbox browser entrypoint, plumb per-container noVNC passwords from runtime, and emit password-bearing auto-connect observer URLs while keeping loopback-only host port publishing. This ships in the next npm release. Thanks @TerminalsandCoffee for reporting. +- Security/Sandbox Browser: require VNC password auth for noVNC observer sessions in the sandbox browser entrypoint, plumb per-container noVNC passwords from runtime, and emit short-lived noVNC observer token URLs while keeping loopback-only host port publishing. This ships in the next npm release. Thanks @TerminalsandCoffee for reporting. - Auto-reply/Tools: forward `senderIsOwner` through embedded queued/followup runner params so owner-only tools remain available for authorized senders. (#22296) thanks @hcoj. - Discord: restore model picker back navigation when a provider is missing and document the Discord picker flow. (#21458) Thanks @pejmanjohn and @thewilloftheshadow. - Memory/QMD: respect per-agent `memorySearch.enabled=false` during gateway QMD startup initialization, split multi-collection QMD searches into per-collection queries (`search`/`vsearch`/`query`) to avoid sparse-term drops, prefer collection-hinted doc resolution to avoid stale-hash collisions, retry boot updates on transient lock/timeout failures, skip `qmd embed` in BM25-only `search` mode (including `memory index --force`), and serialize embed runs globally with failure backoff to prevent CPU storms on multi-agent hosts. (#20581, #21590, #20513, #20001, #21266, #21583, #20346, #19493) Thanks @danielrevivo, @zanderkrause, @sunyan034-cmd, @tilleulenspiegel, @dae-oss, @adamlongcreativellc, @jonathanadams96, and @kiliansitel. diff --git a/docs/gateway/configuration-reference.md b/docs/gateway/configuration-reference.md index 860d7a2e3..e470fbc62 100644 --- a/docs/gateway/configuration-reference.md +++ b/docs/gateway/configuration-reference.md @@ -992,7 +992,7 @@ Optional **Docker sandboxing** for the embedded agent. See [Sandboxing](/gateway **`docker.binds`** mounts additional host directories; global and per-agent binds are merged. **Sandboxed browser** (`sandbox.browser.enabled`): Chromium + CDP in a container. noVNC URL injected into system prompt. Does not require `browser.enabled` in main config. -noVNC observer access uses VNC auth by default and the generated URL includes the password query parameter automatically. +noVNC observer access uses VNC auth by default and OpenClaw emits a short-lived token URL (instead of exposing the password in the shared URL). - `allowHostControl: false` (default) blocks sandboxed sessions from targeting the host browser. - `sandbox.browser.binds` mounts additional host directories into the sandbox browser container only. When set (including `[]`), it replaces `docker.binds` for the browser container. diff --git a/docs/gateway/sandboxing.md b/docs/gateway/sandboxing.md index d07b85617..25c5efa67 100644 --- a/docs/gateway/sandboxing.md +++ b/docs/gateway/sandboxing.md @@ -22,7 +22,7 @@ and process access when the model does something dumb. - Optional sandboxed browser (`agents.defaults.sandbox.browser`). - By default, the sandbox browser auto-starts (ensures CDP is reachable) when the browser tool needs it. Configure via `agents.defaults.sandbox.browser.autoStart` and `agents.defaults.sandbox.browser.autoStartTimeoutMs`. - - noVNC observer access is password-protected by default; OpenClaw emits an auto-connect URL with password query parameter. + - noVNC observer access is password-protected by default; OpenClaw emits a short-lived token URL that resolves to the observer session. - `agents.defaults.sandbox.browser.allowHostControl` lets sandboxed sessions target the host browser explicitly. - Optional allowlists gate `target: "custom"`: `allowedControlUrls`, `allowedControlHosts`, `allowedControlPorts`. diff --git a/docs/install/docker.md b/docs/install/docker.md index 37e44fd1e..92fe1fc47 100644 --- a/docs/install/docker.md +++ b/docs/install/docker.md @@ -495,7 +495,7 @@ Notes: - Headful (Xvfb) reduces bot blocking vs headless. - Headless can still be used by setting `agents.defaults.sandbox.browser.headless=true`. - No full desktop environment (GNOME) is needed; Xvfb provides the display. -- noVNC observer access is password-protected by default; OpenClaw provides an auto-connect URL with the password query parameter. +- noVNC observer access is password-protected by default; OpenClaw provides a short-lived observer token URL instead of sharing the raw password in the URL. Use config: diff --git a/src/agents/sandbox/browser.create.test.ts b/src/agents/sandbox/browser.create.test.ts new file mode 100644 index 000000000..6dabb00e6 --- /dev/null +++ b/src/agents/sandbox/browser.create.test.ts @@ -0,0 +1,185 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { BROWSER_BRIDGES } from "./browser-bridges.js"; +import { ensureSandboxBrowser } from "./browser.js"; +import { resetNoVncObserverTokensForTests } from "./novnc-auth.js"; +import type { SandboxConfig } from "./types.js"; + +const dockerMocks = vi.hoisted(() => ({ + dockerContainerState: vi.fn(), + execDocker: vi.fn(), + readDockerContainerEnvVar: vi.fn(), + readDockerContainerLabel: vi.fn(), + readDockerPort: vi.fn(), +})); + +const registryMocks = vi.hoisted(() => ({ + readBrowserRegistry: vi.fn(), + updateBrowserRegistry: vi.fn(), +})); + +const bridgeMocks = vi.hoisted(() => ({ + startBrowserBridgeServer: vi.fn(), + stopBrowserBridgeServer: vi.fn(), +})); + +vi.mock("./docker.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + dockerContainerState: dockerMocks.dockerContainerState, + execDocker: dockerMocks.execDocker, + readDockerContainerEnvVar: dockerMocks.readDockerContainerEnvVar, + readDockerContainerLabel: dockerMocks.readDockerContainerLabel, + readDockerPort: dockerMocks.readDockerPort, + }; +}); + +vi.mock("./registry.js", () => ({ + readBrowserRegistry: registryMocks.readBrowserRegistry, + updateBrowserRegistry: registryMocks.updateBrowserRegistry, +})); + +vi.mock("../../browser/bridge-server.js", () => ({ + startBrowserBridgeServer: bridgeMocks.startBrowserBridgeServer, + stopBrowserBridgeServer: bridgeMocks.stopBrowserBridgeServer, +})); + +function buildConfig(enableNoVnc: boolean): SandboxConfig { + return { + mode: "all", + scope: "session", + workspaceAccess: "none", + workspaceRoot: "/tmp/openclaw-sandboxes", + docker: { + image: "openclaw-sandbox:bookworm-slim", + containerPrefix: "openclaw-sbx-", + workdir: "/workspace", + readOnlyRoot: true, + tmpfs: ["/tmp", "/var/tmp", "/run"], + network: "none", + capDrop: ["ALL"], + env: { LANG: "C.UTF-8" }, + }, + browser: { + enabled: true, + image: "openclaw-sandbox-browser:bookworm-slim", + containerPrefix: "openclaw-sbx-browser-", + cdpPort: 9222, + vncPort: 5900, + noVncPort: 6080, + headless: false, + enableNoVnc, + allowHostControl: false, + autoStart: true, + autoStartTimeoutMs: 12_000, + }, + tools: { + allow: ["browser"], + deny: [], + }, + prune: { + idleHours: 24, + maxAgeDays: 7, + }, + }; +} + +function envEntriesFromDockerArgs(args: string[]): string[] { + const values: string[] = []; + for (let i = 0; i < args.length; i += 1) { + if (args[i] === "-e" && typeof args[i + 1] === "string") { + values.push(args[i + 1]); + } + } + return values; +} + +describe("ensureSandboxBrowser create args", () => { + beforeEach(() => { + BROWSER_BRIDGES.clear(); + resetNoVncObserverTokensForTests(); + dockerMocks.dockerContainerState.mockReset(); + dockerMocks.execDocker.mockReset(); + dockerMocks.readDockerContainerEnvVar.mockReset(); + dockerMocks.readDockerContainerLabel.mockReset(); + dockerMocks.readDockerPort.mockReset(); + registryMocks.readBrowserRegistry.mockReset(); + registryMocks.updateBrowserRegistry.mockReset(); + bridgeMocks.startBrowserBridgeServer.mockReset(); + bridgeMocks.stopBrowserBridgeServer.mockReset(); + + dockerMocks.dockerContainerState.mockResolvedValue({ exists: false, running: false }); + dockerMocks.execDocker.mockImplementation(async (args: string[]) => { + if (args[0] === "image" && args[1] === "inspect") { + return { stdout: "[]", stderr: "", code: 0 }; + } + return { stdout: "", stderr: "", code: 0 }; + }); + dockerMocks.readDockerContainerLabel.mockResolvedValue(null); + dockerMocks.readDockerContainerEnvVar.mockResolvedValue(null); + dockerMocks.readDockerPort.mockImplementation(async (_containerName: string, port: number) => { + if (port === 9222) { + return 49100; + } + if (port === 6080) { + return 49101; + } + return null; + }); + registryMocks.readBrowserRegistry.mockResolvedValue({ entries: [] }); + registryMocks.updateBrowserRegistry.mockResolvedValue(undefined); + bridgeMocks.startBrowserBridgeServer.mockResolvedValue({ + server: {} as never, + port: 19000, + baseUrl: "http://127.0.0.1:19000", + state: { + server: null, + port: 19000, + resolved: { profiles: {} }, + profiles: new Map(), + }, + }); + bridgeMocks.stopBrowserBridgeServer.mockResolvedValue(undefined); + }); + + it("publishes noVNC on loopback and injects noVNC password env", async () => { + const result = await ensureSandboxBrowser({ + scopeKey: "session:test", + workspaceDir: "/tmp/workspace", + agentWorkspaceDir: "/tmp/workspace", + cfg: buildConfig(true), + }); + + const createArgs = dockerMocks.execDocker.mock.calls.find( + (call: unknown[]) => Array.isArray(call[0]) && call[0][0] === "create", + )?.[0] as string[] | undefined; + + expect(createArgs).toBeDefined(); + expect(createArgs).toContain("127.0.0.1::6080"); + const envEntries = envEntriesFromDockerArgs(createArgs ?? []); + const passwordEntry = envEntries.find((entry) => + entry.startsWith("OPENCLAW_BROWSER_NOVNC_PASSWORD="), + ); + expect(passwordEntry).toMatch(/^OPENCLAW_BROWSER_NOVNC_PASSWORD=[a-f0-9]{8}$/); + expect(result?.noVncUrl).toMatch(/^http:\/\/127\.0\.0\.1:19000\/sandbox\/novnc\?token=/); + expect(result?.noVncUrl).not.toContain("password="); + }); + + it("does not inject noVNC password env when noVNC is disabled", async () => { + const result = await ensureSandboxBrowser({ + scopeKey: "session:test", + workspaceDir: "/tmp/workspace", + agentWorkspaceDir: "/tmp/workspace", + cfg: buildConfig(false), + }); + + const createArgs = dockerMocks.execDocker.mock.calls.find( + (call: unknown[]) => Array.isArray(call[0]) && call[0][0] === "create", + )?.[0] as string[] | undefined; + const envEntries = envEntriesFromDockerArgs(createArgs ?? []); + expect(envEntries.some((entry) => entry.startsWith("OPENCLAW_BROWSER_NOVNC_PASSWORD="))).toBe( + false, + ); + expect(result?.noVncUrl).toBeUndefined(); + }); +}); diff --git a/src/agents/sandbox/browser.novnc-url.test.ts b/src/agents/sandbox/browser.novnc-url.test.ts index b542f6b94..2020af869 100644 --- a/src/agents/sandbox/browser.novnc-url.test.ts +++ b/src/agents/sandbox/browser.novnc-url.test.ts @@ -1,16 +1,46 @@ import { describe, expect, it } from "vitest"; -import { buildNoVncObserverUrl } from "./browser.js"; +import { + buildNoVncDirectUrl, + buildNoVncObserverTokenUrl, + consumeNoVncObserverToken, + issueNoVncObserverToken, + resetNoVncObserverTokensForTests, +} from "./novnc-auth.js"; -describe("buildNoVncObserverUrl", () => { +describe("noVNC auth helpers", () => { it("builds the default observer URL without password", () => { - expect(buildNoVncObserverUrl(45678)).toBe( + expect(buildNoVncDirectUrl(45678)).toBe( "http://127.0.0.1:45678/vnc.html?autoconnect=1&resize=remote", ); }); it("adds an encoded password query parameter when provided", () => { - expect(buildNoVncObserverUrl(45678, "a+b c&d")).toBe( + expect(buildNoVncDirectUrl(45678, "a+b c&d")).toBe( "http://127.0.0.1:45678/vnc.html?autoconnect=1&resize=remote&password=a%2Bb+c%26d", ); }); + + it("issues one-time short-lived observer tokens", () => { + resetNoVncObserverTokensForTests(); + const token = issueNoVncObserverToken({ + url: "http://127.0.0.1:50123/vnc.html?autoconnect=1&resize=remote&password=abcd1234", + nowMs: 1000, + ttlMs: 100, + }); + expect(buildNoVncObserverTokenUrl("http://127.0.0.1:19999", token)).toBe( + `http://127.0.0.1:19999/sandbox/novnc?token=${token}`, + ); + expect(consumeNoVncObserverToken(token, 1050)).toContain("/vnc.html?"); + expect(consumeNoVncObserverToken(token, 1050)).toBeNull(); + }); + + it("expires observer tokens", () => { + resetNoVncObserverTokensForTests(); + const token = issueNoVncObserverToken({ + url: "http://127.0.0.1:50123/vnc.html?autoconnect=1&resize=remote&password=abcd1234", + nowMs: 1000, + ttlMs: 100, + }); + expect(consumeNoVncObserverToken(token, 1200)).toBeNull(); + }); }); diff --git a/src/agents/sandbox/browser.ts b/src/agents/sandbox/browser.ts index 125e9bbdf..0b0e4de05 100644 --- a/src/agents/sandbox/browser.ts +++ b/src/agents/sandbox/browser.ts @@ -23,29 +23,21 @@ import { readDockerContainerLabel, readDockerPort, } from "./docker.js"; +import { + buildNoVncDirectUrl, + buildNoVncObserverTokenUrl, + consumeNoVncObserverToken, + generateNoVncPassword, + isNoVncEnabled, + NOVNC_PASSWORD_ENV_KEY, + issueNoVncObserverToken, +} from "./novnc-auth.js"; import { readBrowserRegistry, updateBrowserRegistry } from "./registry.js"; import { resolveSandboxAgentId, slugifySessionKey } from "./shared.js"; import { isToolAllowed } from "./tool-policy.js"; import type { SandboxBrowserContext, SandboxConfig } from "./types.js"; const HOT_BROWSER_WINDOW_MS = 5 * 60 * 1000; -const NOVNC_PASSWORD_ENV_KEY = "OPENCLAW_BROWSER_NOVNC_PASSWORD"; - -function generateNoVncPassword() { - // VNC auth uses an 8-char password max. - return crypto.randomBytes(4).toString("hex"); -} - -export function buildNoVncObserverUrl(port: number, password?: string) { - const query = new URLSearchParams({ - autoconnect: "1", - resize: "remote", - }); - if (password?.trim()) { - query.set("password", password); - } - return `http://127.0.0.1:${port}/vnc.html?${query.toString()}`; -} async function waitForSandboxCdp(params: { cdpPort: number; timeoutMs: number }): Promise { const deadline = Date.now() + Math.max(0, params.timeoutMs); @@ -158,7 +150,7 @@ export async function ensureSandboxBrowser(params: { let running = state.running; let currentHash: string | null = null; let hashMismatch = false; - const noVncEnabled = params.cfg.browser.enableNoVnc && !params.cfg.browser.headless; + const noVncEnabled = isNoVncEnabled(params.cfg.browser); let noVncPassword: string | undefined; if (hasContainer) { @@ -331,6 +323,7 @@ export async function ensureSandboxBrowser(params: { authToken: desiredAuthToken, authPassword: desiredAuthPassword, onEnsureAttachTarget, + resolveSandboxNoVncToken: consumeNoVncObserverToken, }); }; @@ -356,7 +349,13 @@ export async function ensureSandboxBrowser(params: { }); const noVncUrl = - mappedNoVnc && noVncEnabled ? buildNoVncObserverUrl(mappedNoVnc, noVncPassword) : undefined; + mappedNoVnc && noVncEnabled + ? (() => { + const directUrl = buildNoVncDirectUrl(mappedNoVnc, noVncPassword); + const token = issueNoVncObserverToken({ url: directUrl }); + return buildNoVncObserverTokenUrl(resolvedBridge.baseUrl, token); + })() + : undefined; return { bridgeUrl: resolvedBridge.baseUrl, diff --git a/src/agents/sandbox/novnc-auth.ts b/src/agents/sandbox/novnc-auth.ts new file mode 100644 index 000000000..b176479c1 --- /dev/null +++ b/src/agents/sandbox/novnc-auth.ts @@ -0,0 +1,81 @@ +import crypto from "node:crypto"; + +export const NOVNC_PASSWORD_ENV_KEY = "OPENCLAW_BROWSER_NOVNC_PASSWORD"; +const NOVNC_TOKEN_TTL_MS = 5 * 60 * 1000; + +type NoVncObserverTokenEntry = { + url: string; + expiresAt: number; +}; + +const NO_VNC_OBSERVER_TOKENS = new Map(); + +function pruneExpiredNoVncObserverTokens(now: number) { + for (const [token, entry] of NO_VNC_OBSERVER_TOKENS) { + if (entry.expiresAt <= now) { + NO_VNC_OBSERVER_TOKENS.delete(token); + } + } +} + +export function isNoVncEnabled(params: { enableNoVnc: boolean; headless: boolean }) { + return params.enableNoVnc && !params.headless; +} + +export function generateNoVncPassword() { + // VNC auth uses an 8-char password max. + return crypto.randomBytes(4).toString("hex"); +} + +export function buildNoVncDirectUrl(port: number, password?: string) { + const query = new URLSearchParams({ + autoconnect: "1", + resize: "remote", + }); + if (password?.trim()) { + query.set("password", password); + } + return `http://127.0.0.1:${port}/vnc.html?${query.toString()}`; +} + +export function issueNoVncObserverToken(params: { + url: string; + ttlMs?: number; + nowMs?: number; +}): string { + const now = params.nowMs ?? Date.now(); + pruneExpiredNoVncObserverTokens(now); + const token = crypto.randomBytes(24).toString("hex"); + NO_VNC_OBSERVER_TOKENS.set(token, { + url: params.url, + expiresAt: now + Math.max(1, params.ttlMs ?? NOVNC_TOKEN_TTL_MS), + }); + return token; +} + +export function consumeNoVncObserverToken(token: string, nowMs?: number): string | null { + const now = nowMs ?? Date.now(); + pruneExpiredNoVncObserverTokens(now); + const normalized = token.trim(); + if (!normalized) { + return null; + } + const entry = NO_VNC_OBSERVER_TOKENS.get(normalized); + if (!entry) { + return null; + } + NO_VNC_OBSERVER_TOKENS.delete(normalized); + if (entry.expiresAt <= now) { + return null; + } + return entry.url; +} + +export function buildNoVncObserverTokenUrl(baseUrl: string, token: string) { + const query = new URLSearchParams({ token }); + return `${baseUrl}/sandbox/novnc?${query.toString()}`; +} + +export function resetNoVncObserverTokensForTests() { + NO_VNC_OBSERVER_TOKENS.clear(); +} diff --git a/src/browser/bridge-server.ts b/src/browser/bridge-server.ts index d98f878d7..1640f9642 100644 --- a/src/browser/bridge-server.ts +++ b/src/browser/bridge-server.ts @@ -30,6 +30,7 @@ export async function startBrowserBridgeServer(params: { authToken?: string; authPassword?: string; onEnsureAttachTarget?: (profile: ProfileContext["profile"]) => Promise; + resolveSandboxNoVncToken?: (token: string) => string | null; }): Promise { const host = params.host ?? "127.0.0.1"; if (!isLoopbackHost(host)) { @@ -40,6 +41,23 @@ export async function startBrowserBridgeServer(params: { const app = express(); installBrowserCommonMiddleware(app); + if (params.resolveSandboxNoVncToken) { + app.get("/sandbox/novnc", (req, res) => { + const rawToken = typeof req.query?.token === "string" ? req.query.token.trim() : ""; + if (!rawToken) { + res.status(400).send("Missing token"); + return; + } + const redirectUrl = params.resolveSandboxNoVncToken?.(rawToken); + if (!redirectUrl) { + res.status(404).send("Invalid or expired token"); + return; + } + res.setHeader("Cache-Control", "no-store"); + res.redirect(302, redirectUrl); + }); + } + const authToken = params.authToken?.trim() || undefined; const authPassword = params.authPassword?.trim() || undefined; if (!authToken && !authPassword) { diff --git a/src/security/audit-extra.async.ts b/src/security/audit-extra.async.ts index ef83ab9f4..8fecfdd03 100644 --- a/src/security/audit-extra.async.ts +++ b/src/security/audit-extra.async.ts @@ -306,6 +306,49 @@ async function readSandboxBrowserHashLabels(params: { } } +function parsePublishedHostFromDockerPortLine(line: string): string | null { + const trimmed = line.trim(); + const rhs = trimmed.includes("->") ? (trimmed.split("->").at(-1)?.trim() ?? "") : trimmed; + if (!rhs) { + return null; + } + const bracketHost = rhs.match(/^\[([^\]]+)\]:\d+$/); + if (bracketHost?.[1]) { + return bracketHost[1]; + } + const hostPort = rhs.match(/^([^:]+):\d+$/); + if (hostPort?.[1]) { + return hostPort[1]; + } + return null; +} + +function isLoopbackPublishHost(host: string): boolean { + const normalized = host.trim().toLowerCase(); + return normalized === "127.0.0.1" || normalized === "::1" || normalized === "localhost"; +} + +async function readSandboxBrowserPortMappings(params: { + containerName: string; + execDockerRawFn: ExecDockerRawFn; +}): Promise { + try { + const result = await params.execDockerRawFn(["port", params.containerName], { + allowFailure: true, + }); + if (result.code !== 0) { + return null; + } + return result.stdout + .toString("utf8") + .split(/\r?\n/) + .map((entry) => entry.trim()) + .filter(Boolean); + } catch { + return null; + } +} + export async function collectSandboxBrowserHashLabelFindings(params?: { execDockerRawFn?: ExecDockerRawFn; }): Promise { @@ -318,6 +361,7 @@ export async function collectSandboxBrowserHashLabelFindings(params?: { const missingHash: string[] = []; const staleEpoch: string[] = []; + const nonLoopbackPublished: string[] = []; for (const containerName of containers) { const labels = await readSandboxBrowserHashLabels({ containerName, execDockerRawFn: execFn }); @@ -330,6 +374,20 @@ export async function collectSandboxBrowserHashLabelFindings(params?: { if (labels.epoch !== SANDBOX_BROWSER_SECURITY_HASH_EPOCH) { staleEpoch.push(containerName); } + const portMappings = await readSandboxBrowserPortMappings({ + containerName, + execDockerRawFn: execFn, + }); + if (!portMappings?.length) { + continue; + } + const exposedMappings = portMappings.filter((line) => { + const host = parsePublishedHostFromDockerPortLine(line); + return Boolean(host && !isLoopbackPublishHost(host)); + }); + if (exposedMappings.length > 0) { + nonLoopbackPublished.push(`${containerName} (${exposedMappings.join("; ")})`); + } } if (missingHash.length > 0) { @@ -356,6 +414,20 @@ export async function collectSandboxBrowserHashLabelFindings(params?: { }); } + if (nonLoopbackPublished.length > 0) { + findings.push({ + checkId: "sandbox.browser_container.non_loopback_publish", + severity: "critical", + title: "Sandbox browser container publishes ports on non-loopback interfaces", + detail: + `Containers: ${nonLoopbackPublished.join(", ")}. ` + + "Sandbox browser observer/control ports should stay loopback-only to avoid unintended remote access.", + remediation: + `${formatCliCommand("openclaw sandbox recreate --browser --all")} (add --force to skip prompt), ` + + "then verify published ports are bound to 127.0.0.1.", + }); + } + return findings; } diff --git a/src/security/audit.test.ts b/src/security/audit.test.ts index bcef4baf9..65f71b7ed 100644 --- a/src/security/audit.test.ts +++ b/src/security/audit.test.ts @@ -498,6 +498,57 @@ describe("security audit", () => { expect(hasFinding(res, "sandbox.browser_container.hash_epoch_stale")).toBe(false); }); + it("flags sandbox browser containers with non-loopback published ports", async () => { + const tmp = await makeTmpDir("browser-non-loopback-publish"); + const stateDir = path.join(tmp, "state"); + await fs.mkdir(stateDir, { recursive: true, mode: 0o700 }); + const configPath = path.join(stateDir, "openclaw.json"); + await fs.writeFile(configPath, "{}\n", "utf-8"); + await fs.chmod(configPath, 0o600); + + const execDockerRawFn = (async (args: string[]) => { + if (args[0] === "ps") { + return { + stdout: Buffer.from("openclaw-sbx-browser-exposed\n"), + stderr: Buffer.alloc(0), + code: 0, + }; + } + if (args[0] === "inspect" && args.at(-1) === "openclaw-sbx-browser-exposed") { + return { + stdout: Buffer.from("hash123\t2026-02-21-novnc-auth-default\n"), + stderr: Buffer.alloc(0), + code: 0, + }; + } + if (args[0] === "port" && args.at(-1) === "openclaw-sbx-browser-exposed") { + return { + stdout: Buffer.from("6080/tcp -> 0.0.0.0:49101\n9222/tcp -> 127.0.0.1:49100\n"), + stderr: Buffer.alloc(0), + code: 0, + }; + } + return { + stdout: Buffer.alloc(0), + stderr: Buffer.from("not found"), + code: 1, + }; + }) as NonNullable; + + const res = await runSecurityAudit({ + config: {}, + includeFilesystem: true, + includeChannelSecurity: false, + stateDir, + configPath, + execDockerRawFn, + }); + + expect(hasFinding(res, "sandbox.browser_container.non_loopback_publish", "critical")).toBe( + true, + ); + }); + it("uses symlink target permissions for config checks", async () => { if (isWindows) { return; From e217f8c3f772dc1bb57fb8c920711eb8feff5cd4 Mon Sep 17 00:00:00 2001 From: Aether AI Agent Date: Wed, 18 Feb 2026 15:25:16 +1100 Subject: [PATCH 0186/1007] =?UTF-8?q?fix(security):=20OC-91=20validate=20W?= =?UTF-8?q?hatsApp=20JID=20against=20allowlist=20in=20all=20send=20paths?= =?UTF-8?q?=20=E2=80=94=20Aether=20AI=20Agent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/agents/tools/whatsapp-actions.ts | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/agents/tools/whatsapp-actions.ts b/src/agents/tools/whatsapp-actions.ts index d3b7fedb9..73551cc71 100644 --- a/src/agents/tools/whatsapp-actions.ts +++ b/src/agents/tools/whatsapp-actions.ts @@ -1,5 +1,6 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; import type { OpenClawConfig } from "../../config/config.js"; +import { resolveWhatsAppOutboundTarget } from "../../whatsapp/resolve-outbound-target.js"; import { sendReactionWhatsApp } from "../../web/outbound.js"; import { createActionGate, jsonResult, readReactionParams, readStringParam } from "./common.js"; @@ -23,8 +24,25 @@ export async function handleWhatsAppAction( const accountId = readStringParam(params, "accountId"); const fromMeRaw = params.fromMe; const fromMe = typeof fromMeRaw === "boolean" ? fromMeRaw : undefined; + + // Validate chatJid against the configured allowFrom list before sending. + // Per-account allowFrom takes precedence over the channel-level allowFrom. + const whatsappCfg = cfg.channels?.whatsapp; + const accountCfg = accountId ? whatsappCfg?.accounts?.[accountId] : undefined; + const allowFrom = accountCfg?.allowFrom ?? whatsappCfg?.allowFrom; + const resolution = resolveWhatsAppOutboundTarget({ + to: chatJid, + allowFrom: allowFrom ?? [], + mode: "implicit", + }); + if (!resolution.ok) { + throw new Error( + `WhatsApp reaction blocked: chatJid "${chatJid}" is not in the configured allowFrom list.`, + ); + } + const resolvedEmoji = remove ? "" : emoji; - await sendReactionWhatsApp(chatJid, messageId, resolvedEmoji, { + await sendReactionWhatsApp(resolution.to, messageId, resolvedEmoji, { verbose: false, fromMe, participant: participant ?? undefined, From 50a8942c07e89aafec70af8c235ca01184163223 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:57:32 +0100 Subject: [PATCH 0187/1007] docs(changelog): add WhatsApp reaction allowlist security note --- CHANGELOG.md | 1 + src/agents/tools/whatsapp-actions.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f20ab8d6c..59d889d57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ Docs: https://docs.openclaw.ai ### Fixes +- WhatsApp/Security: enforce allowlist JID authorization for reaction actions so authenticated callers cannot target non-allowlisted chats by forging `chatJid` + valid `messageId` pairs. This ships in the next npm release. Thanks @aether-ai-agent for reporting. - ACP/Security: escape control and delimiter characters in ACP `resource_link` title/URI metadata before prompt interpolation to prevent metadata-driven prompt injection through resource links. This ships in the next npm release. Thanks @aether-ai-agent for reporting. - TTS/Security: make model-driven provider switching opt-in by default (`messages.tts.modelOverrides.allowProvider=false` unless explicitly enabled), while keeping voice/style overrides available, to reduce prompt-injection-driven provider hops and unexpected TTS cost escalation. This ships in the next npm release. Thanks @aether-ai-agent for reporting. - Security/Agents: keep overflow compaction retry budgeting global across tool-result truncation recovery so successful truncation cannot reset the overflow retry counter and amplify retry/cost cycles. This ships in the next npm release. Thanks @aether-ai-agent for reporting. diff --git a/src/agents/tools/whatsapp-actions.ts b/src/agents/tools/whatsapp-actions.ts index 73551cc71..780ea85b2 100644 --- a/src/agents/tools/whatsapp-actions.ts +++ b/src/agents/tools/whatsapp-actions.ts @@ -1,7 +1,7 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; import type { OpenClawConfig } from "../../config/config.js"; -import { resolveWhatsAppOutboundTarget } from "../../whatsapp/resolve-outbound-target.js"; import { sendReactionWhatsApp } from "../../web/outbound.js"; +import { resolveWhatsAppOutboundTarget } from "../../whatsapp/resolve-outbound-target.js"; import { createActionGate, jsonResult, readReactionParams, readStringParam } from "./common.js"; export async function handleWhatsAppAction( From c2874aead78430adc66ff62b25c6a86ec12961d9 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 12:59:14 +0000 Subject: [PATCH 0188/1007] refactor(test): centralize temporary state-dir env setup --- src/canvas-host/server.state-dir.test.ts | 53 +++++++-------------- src/infra/device-identity.state-dir.test.ts | 31 ++---------- src/test-helpers/state-dir-env.test.ts | 45 +++++++++++++++++ src/test-helpers/state-dir-env.ts | 20 ++++++++ 4 files changed, 88 insertions(+), 61 deletions(-) create mode 100644 src/test-helpers/state-dir-env.test.ts diff --git a/src/canvas-host/server.state-dir.test.ts b/src/canvas-host/server.state-dir.test.ts index f5cc012e9..744daef57 100644 --- a/src/canvas-host/server.state-dir.test.ts +++ b/src/canvas-host/server.state-dir.test.ts @@ -1,45 +1,28 @@ import fs from "node:fs/promises"; -import os from "node:os"; import path from "node:path"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { describe, expect, it } from "vitest"; import { defaultRuntime } from "../runtime.js"; -import { - restoreStateDirEnv, - setStateDirEnv, - snapshotStateDirEnv, -} from "../test-helpers/state-dir-env.js"; +import { withStateDirEnv } from "../test-helpers/state-dir-env.js"; import { createCanvasHostHandler } from "./server.js"; describe("canvas host state dir defaults", () => { - let envSnapshot: ReturnType; - - beforeEach(() => { - envSnapshot = snapshotStateDirEnv(); - }); - - afterEach(() => { - restoreStateDirEnv(envSnapshot); - }); - it("uses OPENCLAW_STATE_DIR for the default canvas root", async () => { - const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-canvas-state-")); - const stateDir = path.join(tempRoot, "state"); - setStateDirEnv(stateDir); - const handler = await createCanvasHostHandler({ - runtime: defaultRuntime, - allowInTests: true, - }); + await withStateDirEnv("openclaw-canvas-state-", async ({ stateDir }) => { + const handler = await createCanvasHostHandler({ + runtime: defaultRuntime, + allowInTests: true, + }); - try { - const expectedRoot = await fs.realpath(path.join(stateDir, "canvas")); - const actualRoot = await fs.realpath(handler.rootDir); - expect(actualRoot).toBe(expectedRoot); - const indexPath = path.join(expectedRoot, "index.html"); - const indexContents = await fs.readFile(indexPath, "utf8"); - expect(indexContents).toContain("OpenClaw Canvas"); - } finally { - await handler.close(); - await fs.rm(tempRoot, { recursive: true, force: true }); - } + try { + const expectedRoot = await fs.realpath(path.join(stateDir, "canvas")); + const actualRoot = await fs.realpath(handler.rootDir); + expect(actualRoot).toBe(expectedRoot); + const indexPath = path.join(expectedRoot, "index.html"); + const indexContents = await fs.readFile(indexPath, "utf8"); + expect(indexContents).toContain("OpenClaw Canvas"); + } finally { + await handler.close(); + } + }); }); }); diff --git a/src/infra/device-identity.state-dir.test.ts b/src/infra/device-identity.state-dir.test.ts index a119616e6..712813448 100644 --- a/src/infra/device-identity.state-dir.test.ts +++ b/src/infra/device-identity.state-dir.test.ts @@ -1,37 +1,16 @@ import fs from "node:fs/promises"; -import os from "node:os"; import path from "node:path"; -import { afterEach, beforeEach, describe, expect, it } from "vitest"; -import { - restoreStateDirEnv, - setStateDirEnv, - snapshotStateDirEnv, -} from "../test-helpers/state-dir-env.js"; +import { describe, expect, it } from "vitest"; +import { withStateDirEnv } from "../test-helpers/state-dir-env.js"; import { loadOrCreateDeviceIdentity } from "./device-identity.js"; describe("device identity state dir defaults", () => { - let envSnapshot: ReturnType; - - beforeEach(() => { - envSnapshot = snapshotStateDirEnv(); - }); - - afterEach(() => { - restoreStateDirEnv(envSnapshot); - }); - it("writes the default identity file under OPENCLAW_STATE_DIR", async () => { - const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-identity-state-")); - const stateDir = path.join(tempRoot, "state"); - setStateDirEnv(stateDir); - const identity = loadOrCreateDeviceIdentity(); - - try { + await withStateDirEnv("openclaw-identity-state-", async ({ stateDir }) => { + const identity = loadOrCreateDeviceIdentity(); const identityPath = path.join(stateDir, "identity", "device.json"); const raw = JSON.parse(await fs.readFile(identityPath, "utf8")) as { deviceId?: string }; expect(raw.deviceId).toBe(identity.deviceId); - } finally { - await fs.rm(tempRoot, { recursive: true, force: true }); - } + }); }); }); diff --git a/src/test-helpers/state-dir-env.test.ts b/src/test-helpers/state-dir-env.test.ts new file mode 100644 index 000000000..744e42f86 --- /dev/null +++ b/src/test-helpers/state-dir-env.test.ts @@ -0,0 +1,45 @@ +import fs from "node:fs/promises"; +import path from "node:path"; +import { describe, expect, it } from "vitest"; +import { + restoreStateDirEnv, + setStateDirEnv, + snapshotStateDirEnv, + withStateDirEnv, +} from "./state-dir-env.js"; + +describe("state-dir-env helpers", () => { + it("set/snapshot/restore round-trips OPENCLAW_STATE_DIR", () => { + const prevOpenClaw = process.env.OPENCLAW_STATE_DIR; + const prevLegacy = process.env.CLAWDBOT_STATE_DIR; + const snapshot = snapshotStateDirEnv(); + + setStateDirEnv("/tmp/openclaw-state-dir-test"); + expect(process.env.OPENCLAW_STATE_DIR).toBe("/tmp/openclaw-state-dir-test"); + expect(process.env.CLAWDBOT_STATE_DIR).toBeUndefined(); + + restoreStateDirEnv(snapshot); + expect(process.env.OPENCLAW_STATE_DIR).toBe(prevOpenClaw); + expect(process.env.CLAWDBOT_STATE_DIR).toBe(prevLegacy); + }); + + it("withStateDirEnv sets env for callback and cleans up temp root", async () => { + const prevOpenClaw = process.env.OPENCLAW_STATE_DIR; + const prevLegacy = process.env.CLAWDBOT_STATE_DIR; + + let capturedTempRoot = ""; + let capturedStateDir = ""; + await withStateDirEnv("openclaw-state-dir-env-", async ({ tempRoot, stateDir }) => { + capturedTempRoot = tempRoot; + capturedStateDir = stateDir; + expect(process.env.OPENCLAW_STATE_DIR).toBe(stateDir); + expect(process.env.CLAWDBOT_STATE_DIR).toBeUndefined(); + await fs.writeFile(path.join(stateDir, "probe.txt"), "ok", "utf8"); + }); + + expect(process.env.OPENCLAW_STATE_DIR).toBe(prevOpenClaw); + expect(process.env.CLAWDBOT_STATE_DIR).toBe(prevLegacy); + await expect(fs.stat(capturedStateDir)).rejects.toThrow(); + await expect(fs.stat(capturedTempRoot)).rejects.toThrow(); + }); +}); diff --git a/src/test-helpers/state-dir-env.ts b/src/test-helpers/state-dir-env.ts index 235cbca1c..db41718da 100644 --- a/src/test-helpers/state-dir-env.ts +++ b/src/test-helpers/state-dir-env.ts @@ -1,3 +1,6 @@ +import fs from "node:fs/promises"; +import os from "node:os"; +import path from "node:path"; import { captureEnv } from "../test-utils/env.js"; export function snapshotStateDirEnv() { @@ -12,3 +15,20 @@ export function setStateDirEnv(stateDir: string): void { process.env.OPENCLAW_STATE_DIR = stateDir; delete process.env.CLAWDBOT_STATE_DIR; } + +export async function withStateDirEnv( + prefix: string, + fn: (ctx: { tempRoot: string; stateDir: string }) => Promise, +): Promise { + const snapshot = snapshotStateDirEnv(); + const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), prefix)); + const stateDir = path.join(tempRoot, "state"); + await fs.mkdir(stateDir, { recursive: true }); + setStateDirEnv(stateDir); + try { + return await fn({ tempRoot, stateDir }); + } finally { + restoreStateDirEnv(snapshot); + await fs.rm(tempRoot, { recursive: true, force: true }); + } +} From 26eb1f781d95f9328380e931e6666503bf5e7566 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:00:16 +0000 Subject: [PATCH 0189/1007] refactor(test): reuse state-dir env helper in auth profile override e2e --- .../auth-profiles/session-override.e2e.test.ts | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/src/agents/auth-profiles/session-override.e2e.test.ts b/src/agents/auth-profiles/session-override.e2e.test.ts index cae0d86f5..b260539d2 100644 --- a/src/agents/auth-profiles/session-override.e2e.test.ts +++ b/src/agents/auth-profiles/session-override.e2e.test.ts @@ -1,9 +1,9 @@ import fs from "node:fs/promises"; -import os from "node:os"; import path from "node:path"; import { describe, expect, it } from "vitest"; import type { OpenClawConfig } from "../../config/config.js"; import type { SessionEntry } from "../../config/sessions.js"; +import { withStateDirEnv } from "../../test-helpers/state-dir-env.js"; import { resolveSessionAuthProfileOverride } from "./session-override.js"; async function writeAuthStore(agentDir: string) { @@ -22,11 +22,8 @@ async function writeAuthStore(agentDir: string) { describe("resolveSessionAuthProfileOverride", () => { it("keeps user override when provider alias differs", async () => { - const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-auth-")); - const prevStateDir = process.env.OPENCLAW_STATE_DIR; - process.env.OPENCLAW_STATE_DIR = tmpDir; - try { - const agentDir = path.join(tmpDir, "agent"); + await withStateDirEnv("openclaw-auth-", async ({ stateDir }) => { + const agentDir = path.join(stateDir, "agent"); await fs.mkdir(agentDir, { recursive: true }); await writeAuthStore(agentDir); @@ -51,13 +48,6 @@ describe("resolveSessionAuthProfileOverride", () => { expect(resolved).toBe("zai:work"); expect(sessionEntry.authProfileOverride).toBe("zai:work"); - } finally { - if (prevStateDir === undefined) { - delete process.env.OPENCLAW_STATE_DIR; - } else { - process.env.OPENCLAW_STATE_DIR = prevStateDir; - } - await fs.rm(tmpDir, { recursive: true, force: true }); - } + }); }); }); From cf8261425954692c75346c32c1f5d115cdab5df1 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:02:12 +0000 Subject: [PATCH 0190/1007] refactor(test): reuse state-dir helper in telegram tests --- src/telegram/token.test.ts | 20 ++---------------- src/telegram/update-offset-store.test.ts | 26 ++++-------------------- src/test-helpers/state-dir-env.test.ts | 20 ++++++++++++++++++ 3 files changed, 26 insertions(+), 40 deletions(-) diff --git a/src/telegram/token.test.ts b/src/telegram/token.test.ts index 34b06ca1d..69a9e8aa1 100644 --- a/src/telegram/token.test.ts +++ b/src/telegram/token.test.ts @@ -1,9 +1,9 @@ import fs from "node:fs"; -import fsPromises from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { afterEach, describe, expect, it, vi } from "vitest"; import type { OpenClawConfig } from "../config/config.js"; +import { withStateDirEnv } from "../test-helpers/state-dir-env.js"; import { resolveTelegramToken } from "./token.js"; import { readTelegramUpdateOffset, writeTelegramUpdateOffset } from "./update-offset-store.js"; @@ -11,22 +11,6 @@ function withTempDir(): string { return fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-telegram-token-")); } -async function withTempStateDir(fn: (dir: string) => Promise) { - const previous = process.env.OPENCLAW_STATE_DIR; - const dir = await fsPromises.mkdtemp(path.join(os.tmpdir(), "openclaw-telegram-")); - process.env.OPENCLAW_STATE_DIR = dir; - try { - return await fn(dir); - } finally { - if (previous === undefined) { - delete process.env.OPENCLAW_STATE_DIR; - } else { - process.env.OPENCLAW_STATE_DIR = previous; - } - await fsPromises.rm(dir, { recursive: true, force: true }); - } -} - describe("resolveTelegramToken", () => { afterEach(() => { vi.unstubAllEnvs(); @@ -108,7 +92,7 @@ describe("resolveTelegramToken", () => { describe("telegram update offset store", () => { it("persists and reloads the last update id", async () => { - await withTempStateDir(async () => { + await withStateDirEnv("openclaw-telegram-", async () => { expect(await readTelegramUpdateOffset({ accountId: "primary" })).toBeNull(); await writeTelegramUpdateOffset({ diff --git a/src/telegram/update-offset-store.test.ts b/src/telegram/update-offset-store.test.ts index 38fd9753d..523038b30 100644 --- a/src/telegram/update-offset-store.test.ts +++ b/src/telegram/update-offset-store.test.ts @@ -1,32 +1,14 @@ -import fs from "node:fs/promises"; -import os from "node:os"; -import path from "node:path"; import { describe, expect, it } from "vitest"; +import { withStateDirEnv } from "../test-helpers/state-dir-env.js"; import { deleteTelegramUpdateOffset, readTelegramUpdateOffset, writeTelegramUpdateOffset, } from "./update-offset-store.js"; -async function withTempStateDir(fn: (dir: string) => Promise) { - const previous = process.env.OPENCLAW_STATE_DIR; - const dir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-tg-offset-")); - process.env.OPENCLAW_STATE_DIR = dir; - try { - return await fn(dir); - } finally { - if (previous === undefined) { - delete process.env.OPENCLAW_STATE_DIR; - } else { - process.env.OPENCLAW_STATE_DIR = previous; - } - await fs.rm(dir, { recursive: true, force: true }); - } -} - describe("deleteTelegramUpdateOffset", () => { it("removes the offset file so a new bot starts fresh", async () => { - await withTempStateDir(async () => { + await withStateDirEnv("openclaw-tg-offset-", async () => { await writeTelegramUpdateOffset({ accountId: "default", updateId: 432_000_000 }); expect(await readTelegramUpdateOffset({ accountId: "default" })).toBe(432_000_000); @@ -36,13 +18,13 @@ describe("deleteTelegramUpdateOffset", () => { }); it("does not throw when the offset file does not exist", async () => { - await withTempStateDir(async () => { + await withStateDirEnv("openclaw-tg-offset-", async () => { await expect(deleteTelegramUpdateOffset({ accountId: "nonexistent" })).resolves.not.toThrow(); }); }); it("only removes the targeted account offset, leaving others intact", async () => { - await withTempStateDir(async () => { + await withStateDirEnv("openclaw-tg-offset-", async () => { await writeTelegramUpdateOffset({ accountId: "default", updateId: 100 }); await writeTelegramUpdateOffset({ accountId: "alerts", updateId: 200 }); diff --git a/src/test-helpers/state-dir-env.test.ts b/src/test-helpers/state-dir-env.test.ts index 744e42f86..e251609c8 100644 --- a/src/test-helpers/state-dir-env.test.ts +++ b/src/test-helpers/state-dir-env.test.ts @@ -42,4 +42,24 @@ describe("state-dir-env helpers", () => { await expect(fs.stat(capturedStateDir)).rejects.toThrow(); await expect(fs.stat(capturedTempRoot)).rejects.toThrow(); }); + + it("withStateDirEnv restores env and cleans temp root when callback throws", async () => { + const prevOpenClaw = process.env.OPENCLAW_STATE_DIR; + const prevLegacy = process.env.CLAWDBOT_STATE_DIR; + + let capturedTempRoot = ""; + let capturedStateDir = ""; + await expect( + withStateDirEnv("openclaw-state-dir-env-", async ({ tempRoot, stateDir }) => { + capturedTempRoot = tempRoot; + capturedStateDir = stateDir; + throw new Error("boom"); + }), + ).rejects.toThrow("boom"); + + expect(process.env.OPENCLAW_STATE_DIR).toBe(prevOpenClaw); + expect(process.env.CLAWDBOT_STATE_DIR).toBe(prevLegacy); + await expect(fs.stat(capturedStateDir)).rejects.toThrow(); + await expect(fs.stat(capturedTempRoot)).rejects.toThrow(); + }); }); From f48698a50b3df18eafb2438c2977c5377349121b Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 14:01:40 +0100 Subject: [PATCH 0191/1007] fix(security): harden sandbox browser network defaults --- CHANGELOG.md | 1 + docs/cli/security.md | 1 + docs/gateway/configuration-reference.md | 4 ++ docs/gateway/sandboxing.md | 3 ++ docs/install/docker.md | 2 + scripts/sandbox-browser-entrypoint.sh | 9 ++-- src/agents/sandbox/browser.ts | 24 +++++++++++ src/agents/sandbox/config-hash.test.ts | 28 +++++++++++++ src/agents/sandbox/config-hash.ts | 2 +- src/agents/sandbox/config.ts | 6 ++- src/agents/sandbox/constants.ts | 1 + .../docker.config-hash-recreate.test.ts | 1 + src/agents/sandbox/types.ts | 2 + src/config/config.sandbox-docker.test.ts | 42 +++++++++++++++++++ src/config/schema.help.ts | 7 ++++ src/config/types.sandbox.ts | 4 ++ src/config/zod-schema.agent-runtime.ts | 12 ++++++ src/security/audit-extra.sync.ts | 39 +++++++++++++++++ src/security/audit.test.ts | 41 ++++++++++++++++++ 19 files changed, 224 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59d889d57..5cbecea38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -60,6 +60,7 @@ Docs: https://docs.openclaw.ai - Security/Gateway: parse `X-Forwarded-For` with trust-preserving semantics when requests come from configured trusted proxies, preventing proxy-chain spoofing from influencing client IP classification and rate-limit identity. Thanks @AnthonyDiSanti and @vincentkoc. - Security/Sandbox: remove default `--no-sandbox` for the browser container entrypoint, add explicit opt-in via `OPENCLAW_BROWSER_NO_SANDBOX` / `CLAWDBOT_BROWSER_NO_SANDBOX`, and add security-audit checks for stale/missing sandbox browser Docker hash labels. This ships in the next npm release. Thanks @TerminalsandCoffee and @vincentkoc. - Security/Sandbox Browser: require VNC password auth for noVNC observer sessions in the sandbox browser entrypoint, plumb per-container noVNC passwords from runtime, and emit short-lived noVNC observer token URLs while keeping loopback-only host port publishing. This ships in the next npm release. Thanks @TerminalsandCoffee for reporting. +- Security/Sandbox Browser: default browser sandbox containers to a dedicated Docker network (`openclaw-sandbox-browser`), add optional CDP ingress source-range restrictions, auto-create missing dedicated networks, and warn in `openclaw security --audit` when browser sandboxing runs on bridge without source-range limits. This ships in the next npm release. Thanks @TerminalsandCoffee for reporting. - Auto-reply/Tools: forward `senderIsOwner` through embedded queued/followup runner params so owner-only tools remain available for authorized senders. (#22296) thanks @hcoj. - Discord: restore model picker back navigation when a provider is missing and document the Discord picker flow. (#21458) Thanks @pejmanjohn and @thewilloftheshadow. - Memory/QMD: respect per-agent `memorySearch.enabled=false` during gateway QMD startup initialization, split multi-collection QMD searches into per-collection queries (`search`/`vsearch`/`query`) to avoid sparse-term drops, prefer collection-hinted doc resolution to avoid stale-hash collisions, retry boot updates on transient lock/timeout failures, skip `qmd embed` in BM25-only `search` mode (including `memory index --force`), and serialize embed runs globally with failure backoff to prevent CPU storms on multi-agent hosts. (#20581, #21590, #20513, #20001, #21266, #21583, #20346, #19493) Thanks @danielrevivo, @zanderkrause, @sunyan034-cmd, @tilleulenspiegel, @dae-oss, @adamlongcreativellc, @jonathanadams96, and @kiliansitel. diff --git a/docs/cli/security.md b/docs/cli/security.md index 1e97225c8..9bfa39b13 100644 --- a/docs/cli/security.md +++ b/docs/cli/security.md @@ -28,6 +28,7 @@ This is for cooperative/shared inbox hardening. A single Gateway shared by mutua It also warns when small models (`<=300B`) are used without sandboxing and with web/browser tools enabled. For webhook ingress, it warns when `hooks.defaultSessionKey` is unset, when request `sessionKey` overrides are enabled, and when overrides are enabled without `hooks.allowedSessionKeyPrefixes`. It also warns when sandbox Docker settings are configured while sandbox mode is off, when `gateway.nodes.denyCommands` uses ineffective pattern-like/unknown entries, when global `tools.profile="minimal"` is overridden by agent tool profiles, and when installed extension plugin tools may be reachable under permissive tool policy. +It also warns when sandbox browser uses Docker `bridge` network without `sandbox.browser.cdpSourceRange`. It also warns when existing sandbox browser Docker containers have missing/stale hash labels (for example pre-migration containers missing `openclaw.browserConfigEpoch`) and recommends `openclaw sandbox recreate --browser --all`. It also warns when npm-based plugin/hook install records are unpinned, missing integrity metadata, or drift from currently installed package versions. It warns when `gateway.auth.mode="none"` leaves Gateway HTTP APIs reachable without a shared secret (`/tools/invoke` plus any enabled `/v1/*` endpoint). diff --git a/docs/gateway/configuration-reference.md b/docs/gateway/configuration-reference.md index e470fbc62..3e2417971 100644 --- a/docs/gateway/configuration-reference.md +++ b/docs/gateway/configuration-reference.md @@ -930,7 +930,9 @@ Optional **Docker sandboxing** for the embedded agent. See [Sandboxing](/gateway browser: { enabled: false, image: "openclaw-sandbox-browser:bookworm-slim", + network: "openclaw-sandbox-browser", cdpPort: 9222, + cdpSourceRange: "172.21.0.1/32", vncPort: 5900, noVncPort: 6080, headless: false, @@ -995,6 +997,8 @@ Optional **Docker sandboxing** for the embedded agent. See [Sandboxing](/gateway noVNC observer access uses VNC auth by default and OpenClaw emits a short-lived token URL (instead of exposing the password in the shared URL). - `allowHostControl: false` (default) blocks sandboxed sessions from targeting the host browser. +- `network` defaults to `openclaw-sandbox-browser` (dedicated bridge network). Set to `bridge` only when you explicitly want global bridge connectivity. +- `cdpSourceRange` optionally restricts CDP ingress at the container edge to a CIDR range (for example `172.21.0.1/32`). - `sandbox.browser.binds` mounts additional host directories into the sandbox browser container only. When set (including `[]`), it replaces `docker.binds` for the browser container. diff --git a/docs/gateway/sandboxing.md b/docs/gateway/sandboxing.md index 25c5efa67..6d51f5739 100644 --- a/docs/gateway/sandboxing.md +++ b/docs/gateway/sandboxing.md @@ -22,6 +22,9 @@ and process access when the model does something dumb. - Optional sandboxed browser (`agents.defaults.sandbox.browser`). - By default, the sandbox browser auto-starts (ensures CDP is reachable) when the browser tool needs it. Configure via `agents.defaults.sandbox.browser.autoStart` and `agents.defaults.sandbox.browser.autoStartTimeoutMs`. + - By default, sandbox browser containers use a dedicated Docker network (`openclaw-sandbox-browser`) instead of the global `bridge` network. + Configure with `agents.defaults.sandbox.browser.network`. + - Optional `agents.defaults.sandbox.browser.cdpSourceRange` restricts container-edge CDP ingress with a CIDR allowlist (for example `172.21.0.1/32`). - noVNC observer access is password-protected by default; OpenClaw emits a short-lived token URL that resolves to the observer session. - `agents.defaults.sandbox.browser.allowHostControl` lets sandboxed sessions target the host browser explicitly. - Optional allowlists gate `target: "custom"`: `allowedControlUrls`, `allowedControlHosts`, `allowedControlPorts`. diff --git a/docs/install/docker.md b/docs/install/docker.md index 92fe1fc47..8826192c1 100644 --- a/docs/install/docker.md +++ b/docs/install/docker.md @@ -495,6 +495,8 @@ Notes: - Headful (Xvfb) reduces bot blocking vs headless. - Headless can still be used by setting `agents.defaults.sandbox.browser.headless=true`. - No full desktop environment (GNOME) is needed; Xvfb provides the display. +- Browser containers default to a dedicated Docker network (`openclaw-sandbox-browser`) instead of global `bridge`. +- Optional `agents.defaults.sandbox.browser.cdpSourceRange` restricts container-edge CDP ingress by CIDR (for example `172.21.0.1/32`). - noVNC observer access is password-protected by default; OpenClaw provides a short-lived observer token URL instead of sharing the raw password in the URL. Use config: diff --git a/scripts/sandbox-browser-entrypoint.sh b/scripts/sandbox-browser-entrypoint.sh index ce74d44f5..076643fac 100755 --- a/scripts/sandbox-browser-entrypoint.sh +++ b/scripts/sandbox-browser-entrypoint.sh @@ -7,6 +7,7 @@ export XDG_CONFIG_HOME="${HOME}/.config" export XDG_CACHE_HOME="${HOME}/.cache" CDP_PORT="${OPENCLAW_BROWSER_CDP_PORT:-${CLAWDBOT_BROWSER_CDP_PORT:-9222}}" +CDP_SOURCE_RANGE="${OPENCLAW_BROWSER_CDP_SOURCE_RANGE:-${CLAWDBOT_BROWSER_CDP_SOURCE_RANGE:-}}" VNC_PORT="${OPENCLAW_BROWSER_VNC_PORT:-${CLAWDBOT_BROWSER_VNC_PORT:-5900}}" NOVNC_PORT="${OPENCLAW_BROWSER_NOVNC_PORT:-${CLAWDBOT_BROWSER_NOVNC_PORT:-6080}}" ENABLE_NOVNC="${OPENCLAW_BROWSER_ENABLE_NOVNC:-${CLAWDBOT_BROWSER_ENABLE_NOVNC:-1}}" @@ -63,9 +64,11 @@ for _ in $(seq 1 50); do sleep 0.1 done -socat \ - TCP-LISTEN:"${CDP_PORT}",fork,reuseaddr,bind=0.0.0.0 \ - TCP:127.0.0.1:"${CHROME_CDP_PORT}" & +SOCAT_LISTEN_ADDR="TCP-LISTEN:${CDP_PORT},fork,reuseaddr,bind=0.0.0.0" +if [[ -n "${CDP_SOURCE_RANGE}" ]]; then + SOCAT_LISTEN_ADDR="${SOCAT_LISTEN_ADDR},range=${CDP_SOURCE_RANGE}" +fi +socat "${SOCAT_LISTEN_ADDR}" "TCP:127.0.0.1:${CHROME_CDP_PORT}" & if [[ "${ENABLE_NOVNC}" == "1" && "${HEADLESS}" != "1" ]]; then # VNC auth passwords are max 8 chars; use a random default when not provided. diff --git a/src/agents/sandbox/browser.ts b/src/agents/sandbox/browser.ts index 0b0e4de05..e4b16880b 100644 --- a/src/agents/sandbox/browser.ts +++ b/src/agents/sandbox/browser.ts @@ -38,6 +38,7 @@ import { isToolAllowed } from "./tool-policy.js"; import type { SandboxBrowserContext, SandboxConfig } from "./types.js"; const HOT_BROWSER_WINDOW_MS = 5 * 60 * 1000; +const CDP_SOURCE_RANGE_ENV_KEY = "OPENCLAW_BROWSER_CDP_SOURCE_RANGE"; async function waitForSandboxCdp(params: { cdpPort: number; timeoutMs: number }): Promise { const deadline = Date.now() + Math.max(0, params.timeoutMs); @@ -106,6 +107,23 @@ async function ensureSandboxBrowserImage(image: string) { ); } +async function ensureDockerNetwork(network: string) { + const normalized = network.trim().toLowerCase(); + if ( + !normalized || + normalized === "bridge" || + normalized === "none" || + normalized.startsWith("container:") + ) { + return; + } + const inspect = await execDocker(["network", "inspect", network], { allowFailure: true }); + if (inspect.code === 0) { + return; + } + await execDocker(["network", "create", "--driver", "bridge", network]); +} + export async function ensureSandboxBrowser(params: { scopeKey: string; workspaceDir: string; @@ -126,6 +144,7 @@ export async function ensureSandboxBrowser(params: { const containerName = name.slice(0, 63); const state = await dockerContainerState(containerName); const browserImage = params.cfg.browser.image ?? DEFAULT_SANDBOX_BROWSER_IMAGE; + const cdpSourceRange = params.cfg.browser.cdpSourceRange?.trim() || undefined; const browserDockerCfg = resolveSandboxBrowserDockerCreateConfig({ docker: params.cfg.docker, browser: { ...params.cfg.browser, image: browserImage }, @@ -138,6 +157,7 @@ export async function ensureSandboxBrowser(params: { noVncPort: params.cfg.browser.noVncPort, headless: params.cfg.browser.headless, enableNoVnc: params.cfg.browser.enableNoVnc, + cdpSourceRange, }, securityEpoch: SANDBOX_BROWSER_SECURITY_HASH_EPOCH, workspaceAccess: params.cfg.workspaceAccess, @@ -196,6 +216,7 @@ export async function ensureSandboxBrowser(params: { if (noVncEnabled) { noVncPassword = generateNoVncPassword(); } + await ensureDockerNetwork(browserDockerCfg.network); await ensureSandboxBrowserImage(browserImage); const args = buildSandboxCreateArgs({ name: containerName, @@ -226,6 +247,9 @@ export async function ensureSandboxBrowser(params: { args.push("-e", `OPENCLAW_BROWSER_HEADLESS=${params.cfg.browser.headless ? "1" : "0"}`); args.push("-e", `OPENCLAW_BROWSER_ENABLE_NOVNC=${params.cfg.browser.enableNoVnc ? "1" : "0"}`); args.push("-e", `OPENCLAW_BROWSER_CDP_PORT=${params.cfg.browser.cdpPort}`); + if (cdpSourceRange) { + args.push("-e", `${CDP_SOURCE_RANGE_ENV_KEY}=${cdpSourceRange}`); + } args.push("-e", `OPENCLAW_BROWSER_VNC_PORT=${params.cfg.browser.vncPort}`); args.push("-e", `OPENCLAW_BROWSER_NOVNC_PORT=${params.cfg.browser.noVncPort}`); if (noVncEnabled && noVncPassword) { diff --git a/src/agents/sandbox/config-hash.test.ts b/src/agents/sandbox/config-hash.test.ts index 852bfea1d..a4ea2bbb1 100644 --- a/src/agents/sandbox/config-hash.test.ts +++ b/src/agents/sandbox/config-hash.test.ts @@ -110,6 +110,7 @@ describe("computeSandboxBrowserConfigHash", () => { const shared = { browser: { cdpPort: 9222, + cdpSourceRange: undefined, vncPort: 5900, noVncPort: 6080, headless: false, @@ -140,6 +141,7 @@ describe("computeSandboxBrowserConfigHash", () => { docker: createDockerConfig(), browser: { cdpPort: 9222, + cdpSourceRange: undefined, vncPort: 5900, noVncPort: 6080, headless: false, @@ -159,4 +161,30 @@ describe("computeSandboxBrowserConfigHash", () => { }); expect(left).not.toBe(right); }); + + it("changes when cdp source range changes", () => { + const shared = { + docker: createDockerConfig(), + browser: { + cdpPort: 9222, + vncPort: 5900, + noVncPort: 6080, + headless: false, + enableNoVnc: true, + }, + securityEpoch: "epoch-v1", + workspaceAccess: "rw" as const, + workspaceDir: "/tmp/workspace", + agentWorkspaceDir: "/tmp/workspace", + }; + const left = computeSandboxBrowserConfigHash({ + ...shared, + browser: { ...shared.browser, cdpSourceRange: "172.21.0.1/32" }, + }); + const right = computeSandboxBrowserConfigHash({ + ...shared, + browser: { ...shared.browser, cdpSourceRange: "172.22.0.1/32" }, + }); + expect(left).not.toBe(right); + }); }); diff --git a/src/agents/sandbox/config-hash.ts b/src/agents/sandbox/config-hash.ts index e77652aab..c5354c240 100644 --- a/src/agents/sandbox/config-hash.ts +++ b/src/agents/sandbox/config-hash.ts @@ -12,7 +12,7 @@ type SandboxBrowserHashInput = { docker: SandboxDockerConfig; browser: Pick< SandboxBrowserConfig, - "cdpPort" | "vncPort" | "noVncPort" | "headless" | "enableNoVnc" + "cdpPort" | "cdpSourceRange" | "vncPort" | "noVncPort" | "headless" | "enableNoVnc" >; securityEpoch: string; workspaceAccess: SandboxWorkspaceAccess; diff --git a/src/agents/sandbox/config.ts b/src/agents/sandbox/config.ts index f2735f29f..0fcb50999 100644 --- a/src/agents/sandbox/config.ts +++ b/src/agents/sandbox/config.ts @@ -4,6 +4,7 @@ import { DEFAULT_SANDBOX_BROWSER_AUTOSTART_TIMEOUT_MS, DEFAULT_SANDBOX_BROWSER_CDP_PORT, DEFAULT_SANDBOX_BROWSER_IMAGE, + DEFAULT_SANDBOX_BROWSER_NETWORK, DEFAULT_SANDBOX_BROWSER_NOVNC_PORT, DEFAULT_SANDBOX_BROWSER_PREFIX, DEFAULT_SANDBOX_BROWSER_VNC_PORT, @@ -27,10 +28,11 @@ export function resolveSandboxBrowserDockerCreateConfig(params: { docker: SandboxDockerConfig; browser: SandboxBrowserConfig; }): SandboxDockerConfig { + const browserNetwork = params.browser.network.trim(); const base: SandboxDockerConfig = { ...params.docker, // Browser container needs network access for Chrome, downloads, etc. - network: "bridge", + network: browserNetwork || DEFAULT_SANDBOX_BROWSER_NETWORK, // For hashing and consistency, treat browser image as the docker image even though we // pass it separately as the final `docker create` argument. image: params.browser.image, @@ -113,7 +115,9 @@ export function resolveSandboxBrowserConfig(params: { agentBrowser?.containerPrefix ?? globalBrowser?.containerPrefix ?? DEFAULT_SANDBOX_BROWSER_PREFIX, + network: agentBrowser?.network ?? globalBrowser?.network ?? DEFAULT_SANDBOX_BROWSER_NETWORK, cdpPort: agentBrowser?.cdpPort ?? globalBrowser?.cdpPort ?? DEFAULT_SANDBOX_BROWSER_CDP_PORT, + cdpSourceRange: agentBrowser?.cdpSourceRange ?? globalBrowser?.cdpSourceRange, vncPort: agentBrowser?.vncPort ?? globalBrowser?.vncPort ?? DEFAULT_SANDBOX_BROWSER_VNC_PORT, noVncPort: agentBrowser?.noVncPort ?? globalBrowser?.noVncPort ?? DEFAULT_SANDBOX_BROWSER_NOVNC_PORT, diff --git a/src/agents/sandbox/constants.ts b/src/agents/sandbox/constants.ts index f4172b2e0..6389ed419 100644 --- a/src/agents/sandbox/constants.ts +++ b/src/agents/sandbox/constants.ts @@ -41,6 +41,7 @@ export const DEFAULT_SANDBOX_COMMON_IMAGE = "openclaw-sandbox-common:bookworm-sl export const SANDBOX_BROWSER_SECURITY_HASH_EPOCH = "2026-02-21-novnc-auth-default"; export const DEFAULT_SANDBOX_BROWSER_PREFIX = "openclaw-sbx-browser-"; +export const DEFAULT_SANDBOX_BROWSER_NETWORK = "openclaw-sandbox-browser"; export const DEFAULT_SANDBOX_BROWSER_CDP_PORT = 9222; export const DEFAULT_SANDBOX_BROWSER_VNC_PORT = 5900; export const DEFAULT_SANDBOX_BROWSER_NOVNC_PORT = 6080; diff --git a/src/agents/sandbox/docker.config-hash-recreate.test.ts b/src/agents/sandbox/docker.config-hash-recreate.test.ts index 5bde8562f..f64ee31bd 100644 --- a/src/agents/sandbox/docker.config-hash-recreate.test.ts +++ b/src/agents/sandbox/docker.config-hash-recreate.test.ts @@ -106,6 +106,7 @@ function createSandboxConfig(dns: string[]): SandboxConfig { enabled: false, image: "openclaw-browser:test", containerPrefix: "oc-browser-", + network: "openclaw-sandbox-browser", cdpPort: 9222, vncPort: 5900, noVncPort: 6080, diff --git a/src/agents/sandbox/types.ts b/src/agents/sandbox/types.ts index f667941e3..4ccfd691c 100644 --- a/src/agents/sandbox/types.ts +++ b/src/agents/sandbox/types.ts @@ -32,7 +32,9 @@ export type SandboxBrowserConfig = { enabled: boolean; image: string; containerPrefix: string; + network: string; cdpPort: number; + cdpSourceRange?: string; vncPort: number; noVncPort: number; headless: boolean; diff --git a/src/config/config.sandbox-docker.test.ts b/src/config/config.sandbox-docker.test.ts index 7add1d3c2..d7c3cd286 100644 --- a/src/config/config.sandbox-docker.test.ts +++ b/src/config/config.sandbox-docker.test.ts @@ -177,4 +177,46 @@ describe("sandbox browser binds config", () => { }); expect(resolved.binds).toBeUndefined(); }); + + it("defaults browser network to dedicated sandbox network", () => { + const resolved = resolveSandboxBrowserConfig({ + scope: "agent", + globalBrowser: {}, + agentBrowser: {}, + }); + expect(resolved.network).toBe("openclaw-sandbox-browser"); + }); + + it("prefers agent browser network over global browser network", () => { + const resolved = resolveSandboxBrowserConfig({ + scope: "agent", + globalBrowser: { network: "openclaw-sandbox-browser-global" }, + agentBrowser: { network: "openclaw-sandbox-browser-agent" }, + }); + expect(resolved.network).toBe("openclaw-sandbox-browser-agent"); + }); + + it("merges cdpSourceRange with agent override", () => { + const resolved = resolveSandboxBrowserConfig({ + scope: "agent", + globalBrowser: { cdpSourceRange: "172.21.0.1/32" }, + agentBrowser: { cdpSourceRange: "172.22.0.1/32" }, + }); + expect(resolved.cdpSourceRange).toBe("172.22.0.1/32"); + }); + + it("rejects host network mode in sandbox.browser config", () => { + const res = validateConfigObject({ + agents: { + defaults: { + sandbox: { + browser: { + network: "host", + }, + }, + }, + }, + }); + expect(res.ok).toBe(false); + }); }); diff --git a/src/config/schema.help.ts b/src/config/schema.help.ts index e96e6f149..6e3b658b9 100644 --- a/src/config/schema.help.ts +++ b/src/config/schema.help.ts @@ -26,6 +26,13 @@ export const FIELD_HELP: Record = { "gateway.auth.token": "Required by default for gateway access (unless using Tailscale Serve identity); required for non-loopback binds.", "gateway.auth.password": "Required for Tailscale funnel.", + "agents.defaults.sandbox.browser.network": + "Docker network for sandbox browser containers (default: openclaw-sandbox-browser). Avoid bridge if you need stricter isolation.", + "agents.list[].sandbox.browser.network": "Per-agent override for sandbox browser Docker network.", + "agents.defaults.sandbox.browser.cdpSourceRange": + "Optional CIDR allowlist for container-edge CDP ingress (for example 172.21.0.1/32).", + "agents.list[].sandbox.browser.cdpSourceRange": + "Per-agent override for CDP source CIDR allowlist.", "gateway.controlUi.basePath": "Optional URL prefix where the Control UI is served (e.g. /openclaw).", "gateway.controlUi.root": diff --git a/src/config/types.sandbox.ts b/src/config/types.sandbox.ts index 4f05df8d1..dc8d3a791 100644 --- a/src/config/types.sandbox.ts +++ b/src/config/types.sandbox.ts @@ -48,7 +48,11 @@ export type SandboxBrowserSettings = { enabled?: boolean; image?: string; containerPrefix?: string; + /** Docker network for sandbox browser containers (default: openclaw-sandbox-browser). */ + network?: string; cdpPort?: number; + /** Optional CIDR allowlist for CDP ingress at the container edge (for example: 172.21.0.1/32). */ + cdpSourceRange?: string; vncPort?: number; noVncPort?: number; headless?: boolean; diff --git a/src/config/zod-schema.agent-runtime.ts b/src/config/zod-schema.agent-runtime.ts index 78b61b9a0..6e0a92cfd 100644 --- a/src/config/zod-schema.agent-runtime.ts +++ b/src/config/zod-schema.agent-runtime.ts @@ -185,7 +185,9 @@ export const SandboxBrowserSchema = z enabled: z.boolean().optional(), image: z.string().optional(), containerPrefix: z.string().optional(), + network: z.string().optional(), cdpPort: z.number().int().positive().optional(), + cdpSourceRange: z.string().optional(), vncPort: z.number().int().positive().optional(), noVncPort: z.number().int().positive().optional(), headless: z.boolean().optional(), @@ -195,6 +197,16 @@ export const SandboxBrowserSchema = z autoStartTimeoutMs: z.number().int().positive().optional(), binds: z.array(z.string()).optional(), }) + .superRefine((data, ctx) => { + if (data.network?.trim().toLowerCase() === "host") { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + path: ["network"], + message: + 'Sandbox security: browser network mode "host" is blocked. Use "bridge" or a custom bridge network instead.', + }); + } + }) .strict() .optional(); diff --git a/src/security/audit-extra.sync.ts b/src/security/audit-extra.sync.ts index 0bf76a4ad..3ecfe21b5 100644 --- a/src/security/audit-extra.sync.ts +++ b/src/security/audit-extra.sync.ts @@ -714,6 +714,45 @@ export function collectSandboxDangerousConfigFindings(cfg: OpenClawConfig): Secu } } + const browserExposurePaths: string[] = []; + const defaultBrowser = resolveSandboxConfigForAgent(cfg).browser; + if ( + defaultBrowser.enabled && + defaultBrowser.network.trim().toLowerCase() === "bridge" && + !defaultBrowser.cdpSourceRange?.trim() + ) { + browserExposurePaths.push("agents.defaults.sandbox.browser"); + } + for (const entry of agents) { + if (!entry || typeof entry !== "object" || typeof entry.id !== "string") { + continue; + } + const browser = resolveSandboxConfigForAgent(cfg, entry.id).browser; + if (!browser.enabled) { + continue; + } + if (browser.network.trim().toLowerCase() !== "bridge") { + continue; + } + if (browser.cdpSourceRange?.trim()) { + continue; + } + browserExposurePaths.push(`agents.list.${entry.id}.sandbox.browser`); + } + if (browserExposurePaths.length > 0) { + findings.push({ + checkId: "sandbox.browser_cdp_bridge_unrestricted", + severity: "warn", + title: "Sandbox browser CDP may be reachable by peer containers", + detail: + "These sandbox browser configs use Docker bridge networking with no CDP source restriction:\n" + + browserExposurePaths.map((entry) => `- ${entry}`).join("\n"), + remediation: + "Set sandbox.browser.network to a dedicated bridge network (recommended default: openclaw-sandbox-browser), " + + "or set sandbox.browser.cdpSourceRange (for example 172.21.0.1/32) to restrict container-edge CDP ingress.", + }); + } + return findings; } diff --git a/src/security/audit.test.ts b/src/security/audit.test.ts index 65f71b7ed..b4b905df4 100644 --- a/src/security/audit.test.ts +++ b/src/security/audit.test.ts @@ -703,6 +703,47 @@ describe("security audit", () => { ); }); + it("warns when sandbox browser uses bridge network without cdpSourceRange", async () => { + const cfg: OpenClawConfig = { + agents: { + defaults: { + sandbox: { + mode: "all", + browser: { + enabled: true, + network: "bridge", + }, + }, + }, + }, + }; + + const res = await audit(cfg); + const finding = res.findings.find( + (f) => f.checkId === "sandbox.browser_cdp_bridge_unrestricted", + ); + expect(finding?.severity).toBe("warn"); + expect(finding?.detail).toContain("agents.defaults.sandbox.browser"); + }); + + it("does not warn when sandbox browser uses dedicated default network", async () => { + const cfg: OpenClawConfig = { + agents: { + defaults: { + sandbox: { + mode: "all", + browser: { + enabled: true, + }, + }, + }, + }, + }; + + const res = await audit(cfg); + expect(hasFinding(res, "sandbox.browser_cdp_bridge_unrestricted")).toBe(false); + }); + it("flags ineffective gateway.nodes.denyCommands entries", async () => { const cfg: OpenClawConfig = { gateway: { From 7a27e2648a75a66b6580a11f704b86668b521cb4 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:03:29 +0000 Subject: [PATCH 0192/1007] refactor(test): dedupe plugin env overrides via env helpers --- src/plugins/discovery.test.ts | 27 +++++++++------------------ src/plugins/loader.test.ts | 13 +++---------- 2 files changed, 12 insertions(+), 28 deletions(-) diff --git a/src/plugins/discovery.test.ts b/src/plugins/discovery.test.ts index 06cd7f36d..47dd47916 100644 --- a/src/plugins/discovery.test.ts +++ b/src/plugins/discovery.test.ts @@ -3,6 +3,7 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import { afterEach, describe, expect, it } from "vitest"; +import { withEnvAsync } from "../test-utils/env.js"; import { discoverOpenClawPlugins } from "./discovery.js"; const tempDirs: string[] = []; @@ -15,24 +16,14 @@ function makeTempDir() { } async function withStateDir(stateDir: string, fn: () => Promise) { - const prev = process.env.OPENCLAW_STATE_DIR; - const prevBundled = process.env.OPENCLAW_BUNDLED_PLUGINS_DIR; - process.env.OPENCLAW_STATE_DIR = stateDir; - process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; - try { - return await fn(); - } finally { - if (prev === undefined) { - delete process.env.OPENCLAW_STATE_DIR; - } else { - process.env.OPENCLAW_STATE_DIR = prev; - } - if (prevBundled === undefined) { - delete process.env.OPENCLAW_BUNDLED_PLUGINS_DIR; - } else { - process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = prevBundled; - } - } + return await withEnvAsync( + { + OPENCLAW_STATE_DIR: stateDir, + CLAWDBOT_STATE_DIR: undefined, + OPENCLAW_BUNDLED_PLUGINS_DIR: "/nonexistent/bundled/plugins", + }, + fn, + ); } afterEach(() => { diff --git a/src/plugins/loader.test.ts b/src/plugins/loader.test.ts index 0d2567a93..65cab1c0e 100644 --- a/src/plugins/loader.test.ts +++ b/src/plugins/loader.test.ts @@ -3,6 +3,7 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import { afterAll, afterEach, describe, expect, it } from "vitest"; +import { withEnv } from "../test-utils/env.js"; import { loadOpenClawPlugins } from "./loader.js"; type TempPlugin = { dir: string; file: string; id: string }; @@ -516,10 +517,8 @@ describe("loadOpenClawPlugins", () => { it("warns when loaded non-bundled plugin has no install/load-path provenance", () => { process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = "/nonexistent/bundled/plugins"; - const prevStateDir = process.env.OPENCLAW_STATE_DIR; const stateDir = makeTempDir(); - process.env.OPENCLAW_STATE_DIR = stateDir; - try { + withEnv({ OPENCLAW_STATE_DIR: stateDir, CLAWDBOT_STATE_DIR: undefined }, () => { const globalDir = path.join(stateDir, "extensions", "rogue"); fs.mkdirSync(globalDir, { recursive: true }); writePlugin({ @@ -552,13 +551,7 @@ describe("loadOpenClawPlugins", () => { msg.includes("rogue") && msg.includes("loaded without install/load-path provenance"), ), ).toBe(true); - } finally { - if (prevStateDir === undefined) { - delete process.env.OPENCLAW_STATE_DIR; - } else { - process.env.OPENCLAW_STATE_DIR = prevStateDir; - } - } + }); }); it("rejects plugin entry files that escape plugin root via symlink", () => { From 21bb46d3044907869ca5dfc619ecfa51a827b7ed Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:05:51 +0000 Subject: [PATCH 0193/1007] fix(ci): include browser network in sandbox test fixture --- src/agents/sandbox/browser.create.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/agents/sandbox/browser.create.test.ts b/src/agents/sandbox/browser.create.test.ts index 6dabb00e6..eabfaabbb 100644 --- a/src/agents/sandbox/browser.create.test.ts +++ b/src/agents/sandbox/browser.create.test.ts @@ -64,6 +64,7 @@ function buildConfig(enableNoVnc: boolean): SandboxConfig { enabled: true, image: "openclaw-sandbox-browser:bookworm-slim", containerPrefix: "openclaw-sbx-browser-", + network: "openclaw-sandbox-browser", cdpPort: 9222, vncPort: 5900, noVncPort: 6080, From 25db01fe08bfcf1154c07c65e0976ffa6b303b2f Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:06:12 +0000 Subject: [PATCH 0194/1007] refactor(test): use withEnvAsync in pairing store fixture --- src/pairing/pairing-store.test.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/pairing/pairing-store.test.ts b/src/pairing/pairing-store.test.ts index d233f1120..1d060fbd8 100644 --- a/src/pairing/pairing-store.test.ts +++ b/src/pairing/pairing-store.test.ts @@ -4,7 +4,7 @@ import os from "node:os"; import path from "node:path"; import { afterAll, beforeAll, describe, expect, it, vi } from "vitest"; import { resolveOAuthDir } from "../config/paths.js"; -import { captureEnv } from "../test-utils/env.js"; +import { withEnvAsync } from "../test-utils/env.js"; import { addChannelAllowFromStoreEntry, approveChannelPairingCode, @@ -27,15 +27,9 @@ afterAll(async () => { }); async function withTempStateDir(fn: (stateDir: string) => Promise) { - const envSnapshot = captureEnv(["OPENCLAW_STATE_DIR"]); const dir = path.join(fixtureRoot, `case-${caseId++}`); await fs.mkdir(dir, { recursive: true }); - process.env.OPENCLAW_STATE_DIR = dir; - try { - return await fn(dir); - } finally { - envSnapshot.restore(); - } + return await withEnvAsync({ OPENCLAW_STATE_DIR: dir }, async () => await fn(dir)); } describe("pairing store", () => { From 3cfb402bdad60f6e7caa94531555ecb498974164 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:08:05 +0000 Subject: [PATCH 0195/1007] refactor(test): reuse state-dir helper in agent runner suite --- .../reply/agent-runner.runreplyagent.test.ts | 43 +++---------------- 1 file changed, 5 insertions(+), 38 deletions(-) diff --git a/src/auto-reply/reply/agent-runner.runreplyagent.test.ts b/src/auto-reply/reply/agent-runner.runreplyagent.test.ts index f7fd979c1..cc43bdc07 100644 --- a/src/auto-reply/reply/agent-runner.runreplyagent.test.ts +++ b/src/auto-reply/reply/agent-runner.runreplyagent.test.ts @@ -5,6 +5,7 @@ import { afterAll, beforeAll, beforeEach, describe, expect, it, vi } from "vites import type { SessionEntry } from "../../config/sessions.js"; import * as sessions from "../../config/sessions.js"; import type { TypingMode } from "../../config/types.js"; +import { withStateDirEnv } from "../../test-helpers/state-dir-env.js"; import type { TemplateContext } from "../templating.js"; import type { GetReplyOptions } from "../types.js"; import type { FollowupRun, QueueSettings } from "./queue.js"; @@ -269,35 +270,11 @@ async function runReplyAgentWithBase(params: { } describe("runReplyAgent typing (heartbeat)", () => { - let fixtureRoot = ""; - let caseId = 0; - - type StateEnvSnapshot = { - OPENCLAW_STATE_DIR: string | undefined; - }; - - function snapshotStateEnv(): StateEnvSnapshot { - return { OPENCLAW_STATE_DIR: process.env.OPENCLAW_STATE_DIR }; - } - - function restoreStateEnv(snapshot: StateEnvSnapshot) { - if (snapshot.OPENCLAW_STATE_DIR === undefined) { - delete process.env.OPENCLAW_STATE_DIR; - } else { - process.env.OPENCLAW_STATE_DIR = snapshot.OPENCLAW_STATE_DIR; - } - } - async function withTempStateDir(fn: (stateDir: string) => Promise): Promise { - const stateDir = path.join(fixtureRoot, `case-${++caseId}`); - await fs.mkdir(stateDir, { recursive: true }); - const envSnapshot = snapshotStateEnv(); - process.env.OPENCLAW_STATE_DIR = stateDir; - try { - return await fn(stateDir); - } finally { - restoreStateEnv(envSnapshot); - } + return await withStateDirEnv( + "openclaw-typing-heartbeat-", + async ({ stateDir }) => await fn(stateDir), + ); } async function writeCorruptGeminiSessionFixture(params: { @@ -321,16 +298,6 @@ describe("runReplyAgent typing (heartbeat)", () => { return { storePath, sessionEntry, sessionStore, transcriptPath }; } - beforeAll(async () => { - fixtureRoot = await fs.mkdtemp(path.join(tmpdir(), "openclaw-typing-heartbeat-")); - }); - - afterAll(async () => { - if (fixtureRoot) { - await fs.rm(fixtureRoot, { recursive: true, force: true }); - } - }); - it("signals typing for normal runs", async () => { const onPartialReply = vi.fn(); state.runEmbeddedPiAgentMock.mockImplementationOnce(async (params: AgentRunParams) => { From 2706cbd6d7323a55f5bead846579469f84a929b1 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 13:16:23 +0000 Subject: [PATCH 0196/1007] fix(agents): include filenames in image resize logs --- CHANGELOG.md | 1 + src/agents/tool-images.log.test.ts | 66 +++++++++++++++++++++ src/agents/tool-images.ts | 95 +++++++++++++++++++++++++++++- 3 files changed, 160 insertions(+), 2 deletions(-) create mode 100644 src/agents/tool-images.log.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 5cbecea38..c24316ade 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ Docs: https://docs.openclaw.ai ### Fixes - WhatsApp/Security: enforce allowlist JID authorization for reaction actions so authenticated callers cannot target non-allowlisted chats by forging `chatJid` + valid `messageId` pairs. This ships in the next npm release. Thanks @aether-ai-agent for reporting. +- Agents/Tool images: include source filenames in `agents/tool-images` resize logs so compression events can be traced back to specific files. - ACP/Security: escape control and delimiter characters in ACP `resource_link` title/URI metadata before prompt interpolation to prevent metadata-driven prompt injection through resource links. This ships in the next npm release. Thanks @aether-ai-agent for reporting. - TTS/Security: make model-driven provider switching opt-in by default (`messages.tts.modelOverrides.allowProvider=false` unless explicitly enabled), while keeping voice/style overrides available, to reduce prompt-injection-driven provider hops and unexpected TTS cost escalation. This ships in the next npm release. Thanks @aether-ai-agent for reporting. - Security/Agents: keep overflow compaction retry budgeting global across tool-result truncation recovery so successful truncation cannot reset the overflow retry counter and amplify retry/cost cycles. This ships in the next npm release. Thanks @aether-ai-agent for reporting. diff --git a/src/agents/tool-images.log.test.ts b/src/agents/tool-images.log.test.ts new file mode 100644 index 000000000..e89192b7f --- /dev/null +++ b/src/agents/tool-images.log.test.ts @@ -0,0 +1,66 @@ +import sharp from "sharp"; +import { beforeEach, describe, expect, it, vi } from "vitest"; + +const { infoMock, warnMock } = vi.hoisted(() => ({ + infoMock: vi.fn(), + warnMock: vi.fn(), +})); + +vi.mock("../logging/subsystem.js", () => { + const makeLogger = () => ({ + subsystem: "agents/tool-images", + isEnabled: () => true, + trace: vi.fn(), + debug: vi.fn(), + info: infoMock, + warn: warnMock, + error: vi.fn(), + fatal: vi.fn(), + raw: vi.fn(), + child: () => makeLogger(), + }); + return { createSubsystemLogger: () => makeLogger() }; +}); + +import { sanitizeContentBlocksImages } from "./tool-images.js"; + +async function createLargePng(): Promise { + const width = 2400; + const height = 680; + const raw = Buffer.alloc(width * height * 3, 0x7f); + return await sharp(raw, { + raw: { width, height, channels: 3 }, + }) + .png({ compressionLevel: 0 }) + .toBuffer(); +} + +describe("tool-images log context", () => { + beforeEach(() => { + infoMock.mockClear(); + warnMock.mockClear(); + }); + + it("includes filename from MEDIA text", async () => { + const png = await createLargePng(); + const blocks = [ + { type: "text" as const, text: "MEDIA:/tmp/snapshots/camera-front.png" }, + { type: "image" as const, data: png.toString("base64"), mimeType: "image/png" }, + ]; + await sanitizeContentBlocksImages(blocks, "nodes:camera_snap"); + const message = infoMock.mock.calls[0]?.[0]; + expect(typeof message).toBe("string"); + expect(String(message)).toContain("camera-front.png"); + }); + + it("includes filename from read label", async () => { + const png = await createLargePng(); + const blocks = [ + { type: "image" as const, data: png.toString("base64"), mimeType: "image/png" }, + ]; + await sanitizeContentBlocksImages(blocks, "read:/tmp/images/sample-diagram.png"); + const message = infoMock.mock.calls[0]?.[0]; + expect(typeof message).toBe("string"); + expect(String(message)).toContain("sample-diagram.png"); + }); +}); diff --git a/src/agents/tool-images.ts b/src/agents/tool-images.ts index e209a9e6f..a72fed30c 100644 --- a/src/agents/tool-images.ts +++ b/src/agents/tool-images.ts @@ -70,12 +70,87 @@ function formatBytesShort(bytes: number): string { return `${(bytes / (1024 * 1024)).toFixed(2)}MB`; } +function parseMediaPathFromText(text: string): string | undefined { + for (const line of text.split(/\r?\n/u)) { + const trimmed = line.trim(); + if (!trimmed.startsWith("MEDIA:")) { + continue; + } + const raw = trimmed.slice("MEDIA:".length).trim(); + if (!raw) { + continue; + } + const backtickWrapped = raw.match(/^`([^`]+)`$/u); + return (backtickWrapped?.[1] ?? raw).trim(); + } + return undefined; +} + +function fileNameFromPathLike(pathLike: string): string | undefined { + const value = pathLike.trim(); + if (!value) { + return undefined; + } + + try { + const url = new URL(value); + const candidate = url.pathname.split("/").filter(Boolean).at(-1); + return candidate && candidate.length > 0 ? candidate : undefined; + } catch { + // Not a URL; continue with path-like parsing. + } + + const normalized = value.replaceAll("\\", "/"); + const candidate = normalized.split("/").filter(Boolean).at(-1); + return candidate && candidate.length > 0 ? candidate : undefined; +} + +function inferImageFileName(params: { + block: ImageContentBlock; + label?: string; + mediaPathHint?: string; +}): string | undefined { + const rec = params.block as unknown as Record; + const explicitKeys = ["fileName", "filename", "path", "url"] as const; + for (const key of explicitKeys) { + const raw = rec[key]; + if (typeof raw !== "string" || raw.trim().length === 0) { + continue; + } + const candidate = fileNameFromPathLike(raw); + if (candidate) { + return candidate; + } + } + + if (typeof rec.name === "string" && rec.name.trim().length > 0) { + return rec.name.trim(); + } + + if (params.mediaPathHint) { + const candidate = fileNameFromPathLike(params.mediaPathHint); + if (candidate) { + return candidate; + } + } + + if (typeof params.label === "string" && params.label.startsWith("read:")) { + const candidate = fileNameFromPathLike(params.label.slice("read:".length)); + if (candidate) { + return candidate; + } + } + + return undefined; +} + async function resizeImageBase64IfNeeded(params: { base64: string; mimeType: string; maxDimensionPx: number; maxBytes: number; label?: string; + fileName?: string; }): Promise<{ base64: string; mimeType: string; @@ -127,14 +202,18 @@ async function resizeImageBase64IfNeeded(params: { typeof width === "number" && typeof height === "number" ? `${width}x${height}px` : "unknown"; + const sourceWithFile = params.fileName + ? `${params.fileName} ${sourcePixels}` + : sourcePixels; const byteReductionPct = buf.byteLength > 0 ? Number((((buf.byteLength - out.byteLength) / buf.byteLength) * 100).toFixed(1)) : 0; log.info( - `Image resized to fit limits: ${sourcePixels} ${formatBytesShort(buf.byteLength)} -> ${formatBytesShort(out.byteLength)} (-${byteReductionPct}%)`, + `Image resized to fit limits: ${sourceWithFile} ${formatBytesShort(buf.byteLength)} -> ${formatBytesShort(out.byteLength)} (-${byteReductionPct}%)`, { label: params.label, + fileName: params.fileName, sourceMimeType: params.mimeType, sourceWidth: width, sourceHeight: height, @@ -166,10 +245,12 @@ async function resizeImageBase64IfNeeded(params: { const gotMb = (best.byteLength / (1024 * 1024)).toFixed(2); const sourcePixels = typeof width === "number" && typeof height === "number" ? `${width}x${height}px` : "unknown"; + const sourceWithFile = params.fileName ? `${params.fileName} ${sourcePixels}` : sourcePixels; log.warn( - `Image resize failed to fit limits: ${sourcePixels} best=${formatBytesShort(best.byteLength)} limit=${formatBytesShort(params.maxBytes)}`, + `Image resize failed to fit limits: ${sourceWithFile} best=${formatBytesShort(best.byteLength)} limit=${formatBytesShort(params.maxBytes)}`, { label: params.label, + fileName: params.fileName, sourceMimeType: params.mimeType, sourceWidth: width, sourceHeight: height, @@ -192,8 +273,16 @@ export async function sanitizeContentBlocksImages( const maxDimensionPx = Math.max(opts.maxDimensionPx ?? MAX_IMAGE_DIMENSION_PX, 1); const maxBytes = Math.max(opts.maxBytes ?? MAX_IMAGE_BYTES, 1); const out: ToolContentBlock[] = []; + let mediaPathHint: string | undefined; for (const block of blocks) { + if (isTextBlock(block)) { + const mediaPath = parseMediaPathFromText(block.text); + if (mediaPath) { + mediaPathHint = mediaPath; + } + } + if (!isImageBlock(block)) { out.push(block); continue; @@ -211,12 +300,14 @@ export async function sanitizeContentBlocksImages( try { const inferredMimeType = inferMimeTypeFromBase64(data); const mimeType = inferredMimeType ?? block.mimeType; + const fileName = inferImageFileName({ block, label, mediaPathHint }); const resized = await resizeImageBase64IfNeeded({ base64: data, mimeType, maxDimensionPx, maxBytes, label, + fileName, }); out.push({ ...block, From 92cada2acad80b05e3d2f89913d4a7ed5fd43499 Mon Sep 17 00:00:00 2001 From: orlyjamie <125909656+theonejvo@users.noreply.github.com> Date: Thu, 19 Feb 2026 03:22:03 +1100 Subject: [PATCH 0197/1007] fix(security): block command substitution in unquoted heredoc bodies The shell command analyzer (splitShellPipeline) skipped all token validation while parsing heredoc bodies. When the heredoc delimiter was unquoted, bash performs command substitution on the body content, allowing $(cmd) and backtick expressions to execute arbitrary commands that bypass the exec allowlist. Track whether heredoc delimiters are quoted or unquoted. When unquoted, scan the body for $( , ${ , and backtick tokens and reject the command. Quoted heredocs (<<'EOF' / <<"EOF") are safe - the shell treats their body as literal text. Ref: https://github.com/openclaw/openclaw/security/advisories/GHSA-65rx-fvh6-r4h2 --- src/infra/exec-approvals-analysis.ts | 22 +++++++++-- src/infra/exec-approvals.test.ts | 56 ++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 4 deletions(-) diff --git a/src/infra/exec-approvals-analysis.ts b/src/infra/exec-approvals-analysis.ts index 7971e9b8f..f7c49b532 100644 --- a/src/infra/exec-approvals-analysis.ts +++ b/src/infra/exec-approvals-analysis.ts @@ -338,12 +338,13 @@ function splitShellPipeline(command: string): { ok: boolean; reason?: string; se type HeredocSpec = { delimiter: string; stripTabs: boolean; + quoted: boolean; }; const parseHeredocDelimiter = ( source: string, start: number, - ): { delimiter: string; end: number } | null => { + ): { delimiter: string; end: number; quoted: boolean } | null => { let i = start; while (i < source.length && (source[i] === " " || source[i] === "\t")) { i += 1; @@ -368,7 +369,7 @@ function splitShellPipeline(command: string): { ok: boolean; reason?: string; se continue; } if (ch === quote) { - return { delimiter, end: i + 1 }; + return { delimiter, end: i + 1, quoted: true }; } delimiter += ch; i += 1; @@ -388,7 +389,7 @@ function splitShellPipeline(command: string): { ok: boolean; reason?: string; se if (!delimiter) { return null; } - return { delimiter, end: i }; + return { delimiter, end: i, quoted: false }; }; const segments: string[] = []; @@ -430,6 +431,19 @@ function splitShellPipeline(command: string): { ok: boolean; reason?: string; se i += 1; } } else { + // When the heredoc delimiter is unquoted, the shell performs expansion + // on the body (variable substitution, command substitution, etc.). + // Reject commands that use unquoted heredocs containing expansion tokens + // to prevent allowlist bypass via embedded command substitution. + const currentHeredoc = pendingHeredocs[0]; + if (currentHeredoc && !currentHeredoc.quoted) { + if (ch === "`") { + return { ok: false, reason: "command substitution in unquoted heredoc", segments: [] }; + } + if (ch === "$" && (next === "(" || next === "{")) { + return { ok: false, reason: "command substitution in unquoted heredoc", segments: [] }; + } + } heredocLine += ch; } continue; @@ -530,7 +544,7 @@ function splitShellPipeline(command: string): { ok: boolean; reason?: string; se const parsed = parseHeredocDelimiter(command, scanIndex); if (parsed) { - pendingHeredocs.push({ delimiter: parsed.delimiter, stripTabs }); + pendingHeredocs.push({ delimiter: parsed.delimiter, stripTabs, quoted: parsed.quoted }); buf += command.slice(scanIndex, parsed.end); i = parsed.end - 1; } diff --git a/src/infra/exec-approvals.test.ts b/src/infra/exec-approvals.test.ts index b1a3d2022..c2158335a 100644 --- a/src/infra/exec-approvals.test.ts +++ b/src/infra/exec-approvals.test.ts @@ -305,6 +305,62 @@ describe("exec approvals shell parsing", () => { expect(res.segments[0]?.argv[0]).toBe("/usr/bin/cat"); }); + it("rejects command substitution in unquoted heredoc body", () => { + const res = analyzeShellCommand({ + command: "/usr/bin/cat < { + const res = analyzeShellCommand({ + command: "/usr/bin/cat < { + const res = analyzeShellCommand({ + command: "/usr/bin/cat < { + const res = analyzeShellCommand({ + command: "/usr/bin/cat <<'EOF'\n$(id)\nEOF", + }); + expect(res.ok).toBe(true); + expect(res.segments[0]?.argv[0]).toBe("/usr/bin/cat"); + }); + + it("allows command substitution in double-quoted heredoc body (shell ignores it)", () => { + const res = analyzeShellCommand({ + command: '/usr/bin/cat <<"EOF"\n$(id)\nEOF', + }); + expect(res.ok).toBe(true); + expect(res.segments[0]?.argv[0]).toBe("/usr/bin/cat"); + }); + + it("rejects nested command substitution in unquoted heredoc", () => { + const res = analyzeShellCommand({ + command: "/usr/bin/cat < { + const res = analyzeShellCommand({ + command: "/usr/bin/cat < { const res = analyzeShellCommand({ command: "/usr/bin/echo first line\n/usr/bin/echo second line", From f23da067f67e81af0e6817984ec650f1712a61f8 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 14:27:13 +0100 Subject: [PATCH 0198/1007] fix(security): harden heredoc allowlist parsing --- CHANGELOG.md | 1 + src/agents/bash-tools.exec-host-gateway.ts | 23 ++++++++--- src/infra/exec-approvals-analysis.ts | 46 ++++++++++++++++------ src/infra/exec-approvals.test.ts | 29 +++++++++++--- 4 files changed, 75 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c24316ade..54b138350 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ Docs: https://docs.openclaw.ai ### Fixes +- Security/Exec: block unquoted heredoc body expansion tokens in shell allowlist analysis, reject unterminated heredocs, and require explicit approval for allowlisted heredoc execution on gateway hosts to prevent heredoc substitution allowlist bypass. This ships in the next npm release. Thanks @torturado for reporting. - WhatsApp/Security: enforce allowlist JID authorization for reaction actions so authenticated callers cannot target non-allowlisted chats by forging `chatJid` + valid `messageId` pairs. This ships in the next npm release. Thanks @aether-ai-agent for reporting. - Agents/Tool images: include source filenames in `agents/tool-images` resize logs so compression events can be traced back to specific files. - ACP/Security: escape control and delimiter characters in ACP `resource_link` title/URI metadata before prompt interpolation to prevent metadata-driven prompt injection through resource links. This ships in the next npm release. Thanks @aether-ai-agent for reporting. diff --git a/src/agents/bash-tools.exec-host-gateway.ts b/src/agents/bash-tools.exec-host-gateway.ts index 3a804abc9..d3cc26c46 100644 --- a/src/agents/bash-tools.exec-host-gateway.ts +++ b/src/agents/bash-tools.exec-host-gateway.ts @@ -77,12 +77,23 @@ export async function processGatewayAllowlist( const analysisOk = allowlistEval.analysisOk; const allowlistSatisfied = hostSecurity === "allowlist" && analysisOk ? allowlistEval.allowlistSatisfied : false; - const requiresAsk = requiresExecApproval({ - ask: hostAsk, - security: hostSecurity, - analysisOk, - allowlistSatisfied, - }); + const hasHeredocSegment = allowlistEval.segments.some((segment) => + segment.argv.some((token) => token.startsWith("<<")), + ); + const requiresHeredocApproval = + hostSecurity === "allowlist" && analysisOk && allowlistSatisfied && hasHeredocSegment; + const requiresAsk = + requiresExecApproval({ + ask: hostAsk, + security: hostSecurity, + analysisOk, + allowlistSatisfied, + }) || requiresHeredocApproval; + if (requiresHeredocApproval) { + params.warnings.push( + "Warning: heredoc execution requires explicit approval in allowlist mode.", + ); + } if (requiresAsk) { const approvalId = crypto.randomUUID(); diff --git a/src/infra/exec-approvals-analysis.ts b/src/infra/exec-approvals-analysis.ts index f7c49b532..8eecd13a0 100644 --- a/src/infra/exec-approvals-analysis.ts +++ b/src/infra/exec-approvals-analysis.ts @@ -410,6 +410,30 @@ function splitShellPipeline(command: string): { ok: boolean; reason?: string; se buf = ""; }; + const isEscapedInHeredocLine = (line: string, index: number): boolean => { + let slashes = 0; + for (let i = index - 1; i >= 0 && line[i] === "\\"; i -= 1) { + slashes += 1; + } + return slashes % 2 === 1; + }; + + const hasUnquotedHeredocExpansionToken = (line: string): boolean => { + for (let i = 0; i < line.length; i += 1) { + const ch = line[i]; + if (ch === "`" && !isEscapedInHeredocLine(line, i)) { + return true; + } + if (ch === "$" && !isEscapedInHeredocLine(line, i)) { + const next = line[i + 1]; + if (next === "(" || next === "{") { + return true; + } + } + } + return false; + }; + for (let i = 0; i < command.length; i += 1) { const ch = command[i]; const next = command[i + 1]; @@ -421,6 +445,8 @@ function splitShellPipeline(command: string): { ok: boolean; reason?: string; se const line = current.stripTabs ? heredocLine.replace(/^\t+/, "") : heredocLine; if (line === current.delimiter) { pendingHeredocs.shift(); + } else if (!current.quoted && hasUnquotedHeredocExpansionToken(heredocLine)) { + return { ok: false, reason: "command substitution in unquoted heredoc", segments: [] }; } } heredocLine = ""; @@ -431,19 +457,6 @@ function splitShellPipeline(command: string): { ok: boolean; reason?: string; se i += 1; } } else { - // When the heredoc delimiter is unquoted, the shell performs expansion - // on the body (variable substitution, command substitution, etc.). - // Reject commands that use unquoted heredocs containing expansion tokens - // to prevent allowlist bypass via embedded command substitution. - const currentHeredoc = pendingHeredocs[0]; - if (currentHeredoc && !currentHeredoc.quoted) { - if (ch === "`") { - return { ok: false, reason: "command substitution in unquoted heredoc", segments: [] }; - } - if (ch === "$" && (next === "(" || next === "{")) { - return { ok: false, reason: "command substitution in unquoted heredoc", segments: [] }; - } - } heredocLine += ch; } continue; @@ -565,9 +578,16 @@ function splitShellPipeline(command: string): { ok: boolean; reason?: string; se const line = current.stripTabs ? heredocLine.replace(/^\t+/, "") : heredocLine; if (line === current.delimiter) { pendingHeredocs.shift(); + if (pendingHeredocs.length === 0) { + inHeredocBody = false; + } } } + if (pendingHeredocs.length > 0 || inHeredocBody) { + return { ok: false, reason: "unterminated heredoc", segments: [] }; + } + if (escaped || inSingle || inDouble) { return { ok: false, reason: "unterminated shell quote/escape", segments: [] }; } diff --git a/src/infra/exec-approvals.test.ts b/src/infra/exec-approvals.test.ts index c2158335a..eb5072d7f 100644 --- a/src/infra/exec-approvals.test.ts +++ b/src/infra/exec-approvals.test.ts @@ -264,25 +264,27 @@ describe("exec approvals shell parsing", () => { }); it("allows heredoc operator (<<)", () => { - const res = analyzeShellCommand({ command: "/usr/bin/tee /tmp/file << 'EOF'" }); + const res = analyzeShellCommand({ command: "/usr/bin/tee /tmp/file << 'EOF'\nEOF" }); expect(res.ok).toBe(true); expect(res.segments[0]?.argv[0]).toBe("/usr/bin/tee"); }); it("allows heredoc without space before delimiter", () => { - const res = analyzeShellCommand({ command: "/usr/bin/tee /tmp/file < { - const res = analyzeShellCommand({ command: "/usr/bin/cat <<-DELIM" }); + const res = analyzeShellCommand({ command: "/usr/bin/cat <<-DELIM\n\tDELIM" }); expect(res.ok).toBe(true); expect(res.segments[0]?.argv[0]).toBe("/usr/bin/cat"); }); it("allows heredoc in pipeline", () => { - const res = analyzeShellCommand({ command: "/usr/bin/cat << 'EOF' | /usr/bin/grep pattern" }); + const res = analyzeShellCommand({ + command: "/usr/bin/cat << 'EOF' | /usr/bin/grep pattern\npattern\nEOF", + }); expect(res.ok).toBe(true); expect(res.segments).toHaveLength(2); expect(res.segments[0]?.argv[0]).toBe("/usr/bin/cat"); @@ -329,6 +331,14 @@ describe("exec approvals shell parsing", () => { expect(res.reason).toBe("command substitution in unquoted heredoc"); }); + it("allows escaped command substitution in unquoted heredoc body", () => { + const res = analyzeShellCommand({ + command: "/usr/bin/cat < { const res = analyzeShellCommand({ command: "/usr/bin/cat <<'EOF'\n$(id)\nEOF", @@ -347,7 +357,8 @@ describe("exec approvals shell parsing", () => { it("rejects nested command substitution in unquoted heredoc", () => { const res = analyzeShellCommand({ - command: "/usr/bin/cat < { expect(res.segments[0]?.argv[0]).toBe("/usr/bin/cat"); }); + it("rejects unterminated heredoc", () => { + const res = analyzeShellCommand({ + command: "/usr/bin/cat < { const res = analyzeShellCommand({ command: "/usr/bin/echo first line\n/usr/bin/echo second line", From f64d5ddf60db0e87b1ee21d61b87f84502874d9e Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 14:29:30 +0100 Subject: [PATCH 0199/1007] fix: replace README sponsors HTML table with markdown --- README.md | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 9bab8d035..72f362418 100644 --- a/README.md +++ b/README.md @@ -32,21 +32,9 @@ New install? Start here: [Getting started](https://docs.openclaw.ai/start/gettin ## Sponsors - - - - - - -
- - OpenAI - - - - Blacksmith - -
+| OpenAI | Blacksmith | +| ----------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| [![OpenAI](docs/assets/sponsors/openai.svg)](https://openai.com/) | [![Blacksmith](docs/assets/sponsors/blacksmith.svg)](https://blacksmith.sh/) | **Subscriptions (OAuth):** From 10b8839a8240a23d8828efcf72d8cbf070bf180d Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 14:30:53 +0100 Subject: [PATCH 0200/1007] fix(security): centralize WhatsApp outbound auth and return 403 tool auth errors --- src/agents/tools/common.ts | 11 ++- src/agents/tools/whatsapp-actions.e2e.test.ts | 90 ++++++++++++++++--- src/agents/tools/whatsapp-actions.ts | 26 ++---- src/agents/tools/whatsapp-target-auth.ts | 27 ++++++ src/gateway/tools-invoke-http.test.ts | 22 ++++- src/gateway/tools-invoke-http.ts | 28 +++--- 6 files changed, 165 insertions(+), 39 deletions(-) create mode 100644 src/agents/tools/whatsapp-target-auth.ts diff --git a/src/agents/tools/common.ts b/src/agents/tools/common.ts index b5f88c2fe..1aea6dd3c 100644 --- a/src/agents/tools/common.ts +++ b/src/agents/tools/common.ts @@ -24,7 +24,7 @@ export type ActionGate> = ( export const OWNER_ONLY_TOOL_ERROR = "Tool restricted to owner senders."; export class ToolInputError extends Error { - readonly status = 400; + readonly status: number = 400; constructor(message: string) { super(message); @@ -32,6 +32,15 @@ export class ToolInputError extends Error { } } +export class ToolAuthorizationError extends ToolInputError { + override readonly status = 403; + + constructor(message: string) { + super(message); + this.name = "ToolAuthorizationError"; + } +} + export function createActionGate>( actions: T | undefined, ): ActionGate { diff --git a/src/agents/tools/whatsapp-actions.e2e.test.ts b/src/agents/tools/whatsapp-actions.e2e.test.ts index 0cc2a544a..bb0941dbb 100644 --- a/src/agents/tools/whatsapp-actions.e2e.test.ts +++ b/src/agents/tools/whatsapp-actions.e2e.test.ts @@ -1,9 +1,12 @@ -import { describe, expect, it, vi } from "vitest"; +import { beforeEach, describe, expect, it, vi } from "vitest"; import type { OpenClawConfig } from "../../config/config.js"; +import { DEFAULT_ACCOUNT_ID } from "../../routing/session-key.js"; import { handleWhatsAppAction } from "./whatsapp-actions.js"; -const sendReactionWhatsApp = vi.fn(async () => undefined); -const sendPollWhatsApp = vi.fn(async () => ({ messageId: "poll-1", toJid: "jid-1" })); +const { sendReactionWhatsApp, sendPollWhatsApp } = vi.hoisted(() => ({ + sendReactionWhatsApp: vi.fn(async () => undefined), + sendPollWhatsApp: vi.fn(async () => ({ messageId: "poll-1", toJid: "jid-1" })), +})); vi.mock("../../web/outbound.js", () => ({ sendReactionWhatsApp, @@ -15,6 +18,10 @@ const enabledConfig = { } as OpenClawConfig; describe("handleWhatsAppAction", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + it("adds reactions", async () => { await handleWhatsAppAction( { @@ -25,11 +32,11 @@ describe("handleWhatsAppAction", () => { }, enabledConfig, ); - expect(sendReactionWhatsApp).toHaveBeenCalledWith("123@s.whatsapp.net", "msg1", "✅", { + expect(sendReactionWhatsApp).toHaveBeenLastCalledWith("+123", "msg1", "✅", { verbose: false, fromMe: undefined, participant: undefined, - accountId: undefined, + accountId: DEFAULT_ACCOUNT_ID, }); }); @@ -43,11 +50,11 @@ describe("handleWhatsAppAction", () => { }, enabledConfig, ); - expect(sendReactionWhatsApp).toHaveBeenCalledWith("123@s.whatsapp.net", "msg1", "", { + expect(sendReactionWhatsApp).toHaveBeenLastCalledWith("+123", "msg1", "", { verbose: false, fromMe: undefined, participant: undefined, - accountId: undefined, + accountId: DEFAULT_ACCOUNT_ID, }); }); @@ -62,11 +69,11 @@ describe("handleWhatsAppAction", () => { }, enabledConfig, ); - expect(sendReactionWhatsApp).toHaveBeenCalledWith("123@s.whatsapp.net", "msg1", "", { + expect(sendReactionWhatsApp).toHaveBeenLastCalledWith("+123", "msg1", "", { verbose: false, fromMe: undefined, participant: undefined, - accountId: undefined, + accountId: DEFAULT_ACCOUNT_ID, }); }); @@ -83,7 +90,7 @@ describe("handleWhatsAppAction", () => { }, enabledConfig, ); - expect(sendReactionWhatsApp).toHaveBeenCalledWith("123@s.whatsapp.net", "msg1", "🎉", { + expect(sendReactionWhatsApp).toHaveBeenLastCalledWith("+123", "msg1", "🎉", { verbose: false, fromMe: true, participant: "999@s.whatsapp.net", @@ -107,4 +114,67 @@ describe("handleWhatsAppAction", () => { ), ).rejects.toThrow(/WhatsApp reactions are disabled/); }); + + it("applies default account allowFrom when accountId is omitted", async () => { + const cfg = { + channels: { + whatsapp: { + actions: { reactions: true }, + allowFrom: ["111@s.whatsapp.net"], + accounts: { + [DEFAULT_ACCOUNT_ID]: { + allowFrom: ["222@s.whatsapp.net"], + }, + }, + }, + }, + } as OpenClawConfig; + + await expect( + handleWhatsAppAction( + { + action: "react", + chatJid: "111@s.whatsapp.net", + messageId: "msg1", + emoji: "✅", + }, + cfg, + ), + ).rejects.toMatchObject({ + name: "ToolAuthorizationError", + status: 403, + }); + }); + + it("routes to resolved default account when no accountId is provided", async () => { + const cfg = { + channels: { + whatsapp: { + actions: { reactions: true }, + accounts: { + work: { + allowFrom: ["123@s.whatsapp.net"], + }, + }, + }, + }, + } as OpenClawConfig; + + await handleWhatsAppAction( + { + action: "react", + chatJid: "123@s.whatsapp.net", + messageId: "msg1", + emoji: "✅", + }, + cfg, + ); + + expect(sendReactionWhatsApp).toHaveBeenLastCalledWith("+123", "msg1", "✅", { + verbose: false, + fromMe: undefined, + participant: undefined, + accountId: "work", + }); + }); }); diff --git a/src/agents/tools/whatsapp-actions.ts b/src/agents/tools/whatsapp-actions.ts index 780ea85b2..b2da38207 100644 --- a/src/agents/tools/whatsapp-actions.ts +++ b/src/agents/tools/whatsapp-actions.ts @@ -1,8 +1,8 @@ import type { AgentToolResult } from "@mariozechner/pi-agent-core"; import type { OpenClawConfig } from "../../config/config.js"; import { sendReactionWhatsApp } from "../../web/outbound.js"; -import { resolveWhatsAppOutboundTarget } from "../../whatsapp/resolve-outbound-target.js"; import { createActionGate, jsonResult, readReactionParams, readStringParam } from "./common.js"; +import { resolveAuthorizedWhatsAppOutboundTarget } from "./whatsapp-target-auth.js"; export async function handleWhatsAppAction( params: Record, @@ -25,28 +25,20 @@ export async function handleWhatsAppAction( const fromMeRaw = params.fromMe; const fromMe = typeof fromMeRaw === "boolean" ? fromMeRaw : undefined; - // Validate chatJid against the configured allowFrom list before sending. - // Per-account allowFrom takes precedence over the channel-level allowFrom. - const whatsappCfg = cfg.channels?.whatsapp; - const accountCfg = accountId ? whatsappCfg?.accounts?.[accountId] : undefined; - const allowFrom = accountCfg?.allowFrom ?? whatsappCfg?.allowFrom; - const resolution = resolveWhatsAppOutboundTarget({ - to: chatJid, - allowFrom: allowFrom ?? [], - mode: "implicit", + // Resolve account + allowFrom via shared account logic so auth and routing stay aligned. + const resolved = resolveAuthorizedWhatsAppOutboundTarget({ + cfg, + chatJid, + accountId, + actionLabel: "reaction", }); - if (!resolution.ok) { - throw new Error( - `WhatsApp reaction blocked: chatJid "${chatJid}" is not in the configured allowFrom list.`, - ); - } const resolvedEmoji = remove ? "" : emoji; - await sendReactionWhatsApp(resolution.to, messageId, resolvedEmoji, { + await sendReactionWhatsApp(resolved.to, messageId, resolvedEmoji, { verbose: false, fromMe, participant: participant ?? undefined, - accountId: accountId ?? undefined, + accountId: resolved.accountId, }); if (!remove && !isEmpty) { return jsonResult({ ok: true, added: emoji }); diff --git a/src/agents/tools/whatsapp-target-auth.ts b/src/agents/tools/whatsapp-target-auth.ts new file mode 100644 index 000000000..b6f4da57c --- /dev/null +++ b/src/agents/tools/whatsapp-target-auth.ts @@ -0,0 +1,27 @@ +import type { OpenClawConfig } from "../../config/config.js"; +import { resolveWhatsAppAccount } from "../../web/accounts.js"; +import { resolveWhatsAppOutboundTarget } from "../../whatsapp/resolve-outbound-target.js"; +import { ToolAuthorizationError } from "./common.js"; + +export function resolveAuthorizedWhatsAppOutboundTarget(params: { + cfg: OpenClawConfig; + chatJid: string; + accountId?: string; + actionLabel: string; +}): { to: string; accountId: string } { + const account = resolveWhatsAppAccount({ + cfg: params.cfg, + accountId: params.accountId, + }); + const resolution = resolveWhatsAppOutboundTarget({ + to: params.chatJid, + allowFrom: account.allowFrom ?? [], + mode: "implicit", + }); + if (!resolution.ok) { + throw new ToolAuthorizationError( + `WhatsApp ${params.actionLabel} blocked: chatJid "${params.chatJid}" is not in the configured allowFrom list for account "${account.accountId}".`, + ); + } + return { to: resolution.to, accountId: account.accountId }; +} diff --git a/src/gateway/tools-invoke-http.test.ts b/src/gateway/tools-invoke-http.test.ts index 2a631f9c3..648b80a1a 100644 --- a/src/gateway/tools-invoke-http.test.ts +++ b/src/gateway/tools-invoke-http.test.ts @@ -57,6 +57,12 @@ vi.mock("../agents/openclaw-tools.js", () => { err.name = "ToolInputError"; return err; }; + const toolAuthorizationError = (message: string) => { + const err = new Error(message) as Error & { status?: number }; + err.name = "ToolAuthorizationError"; + err.status = 403; + return err; + }; const tools = [ { @@ -101,6 +107,9 @@ vi.mock("../agents/openclaw-tools.js", () => { if (mode === "input") { throw toolInputError("mode invalid"); } + if (mode === "auth") { + throw toolAuthorizationError("mode forbidden"); + } if (mode === "crash") { throw new Error("boom"); } @@ -453,7 +462,7 @@ describe("POST /tools/invoke", () => { expect(resMain.status).toBe(200); }); - it("maps tool input errors to 400 and unexpected execution errors to 500", async () => { + it("maps tool input/auth errors to 400/403 and unexpected execution errors to 500", async () => { cfg = { ...cfg, agents: { @@ -472,6 +481,17 @@ describe("POST /tools/invoke", () => { expect(inputBody.error?.type).toBe("tool_error"); expect(inputBody.error?.message).toBe("mode invalid"); + const authRes = await invokeToolAuthed({ + tool: "tools_invoke_test", + args: { mode: "auth" }, + sessionKey: "main", + }); + expect(authRes.status).toBe(403); + const authBody = await authRes.json(); + expect(authBody.ok).toBe(false); + expect(authBody.error?.type).toBe("tool_error"); + expect(authBody.error?.message).toBe("mode forbidden"); + const crashRes = await invokeToolAuthed({ tool: "tools_invoke_test", args: { mode: "crash" }, diff --git a/src/gateway/tools-invoke-http.ts b/src/gateway/tools-invoke-http.ts index 5e5c6db2c..0be53d5fc 100644 --- a/src/gateway/tools-invoke-http.ts +++ b/src/gateway/tools-invoke-http.ts @@ -112,16 +112,23 @@ function getErrorMessage(err: unknown): string { return String(err); } -function isToolInputError(err: unknown): boolean { +function resolveToolInputErrorStatus(err: unknown): number | null { if (err instanceof ToolInputError) { - return true; + const status = (err as { status?: unknown }).status; + return typeof status === "number" ? status : 400; } - return ( - typeof err === "object" && - err !== null && - "name" in err && - (err as { name?: unknown }).name === "ToolInputError" - ); + if (typeof err !== "object" || err === null || !("name" in err)) { + return null; + } + const name = (err as { name?: unknown }).name; + if (name !== "ToolInputError" && name !== "ToolAuthorizationError") { + return null; + } + const status = (err as { status?: unknown }).status; + if (typeof status === "number") { + return status; + } + return name === "ToolAuthorizationError" ? 403 : 400; } export async function handleToolsInvokeHttpRequest( @@ -308,8 +315,9 @@ export async function handleToolsInvokeHttpRequest( const result = await (tool as any).execute?.(`http-${Date.now()}`, toolArgs); sendJson(res, 200, { ok: true, result }); } catch (err) { - if (isToolInputError(err)) { - sendJson(res, 400, { + const inputStatus = resolveToolInputErrorStatus(err); + if (inputStatus !== null) { + sendJson(res, inputStatus, { ok: false, error: { type: "tool_error", message: getErrorMessage(err) || "invalid tool arguments" }, }); From 14b37432285e9fa22c0e1ebc147be9a0a3215105 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 14:32:10 +0100 Subject: [PATCH 0201/1007] fix(ci): stabilize Windows path handling in sandbox tests --- extensions/msteams/src/media-helpers.test.ts | 4 ++++ extensions/msteams/src/media-helpers.ts | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/extensions/msteams/src/media-helpers.test.ts b/extensions/msteams/src/media-helpers.test.ts index 51a3ae0f8..7b9a36ffd 100644 --- a/extensions/msteams/src/media-helpers.test.ts +++ b/extensions/msteams/src/media-helpers.test.ts @@ -154,6 +154,10 @@ describe("msteams media-helpers", () => { expect(isLocalPath("\\\\server\\share\\image.png")).toBe(true); }); + it("returns true for Windows rooted paths", () => { + expect(isLocalPath("\\tmp\\openclaw\\file.txt")).toBe(true); + }); + it("returns false for http URLs", () => { expect(isLocalPath("http://example.com/image.png")).toBe(false); expect(isLocalPath("https://example.com/image.png")).toBe(false); diff --git a/extensions/msteams/src/media-helpers.ts b/extensions/msteams/src/media-helpers.ts index ca5cc70dc..bfe113d40 100644 --- a/extensions/msteams/src/media-helpers.ts +++ b/extensions/msteams/src/media-helpers.ts @@ -69,6 +69,11 @@ export function isLocalPath(url: string): boolean { return true; } + // Windows rooted path on current drive (e.g. \tmp\file.txt) + if (url.startsWith("\\") && !url.startsWith("\\\\")) { + return true; + } + // Windows drive-letter absolute path (e.g. C:\foo\bar.txt or C:/foo/bar.txt) if (/^[a-zA-Z]:[\\/]/.test(url)) { return true; From c62a6e70404a499d8d59f26e065802ba9c175bca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=8C=AB=E5=AD=90?= <1811866786@qq.com> Date: Sat, 21 Feb 2026 21:35:09 +0800 Subject: [PATCH 0202/1007] fix(models): add kimi-coding implicit provider template (openclaw#22526) thanks @lailoo Verified: - pnpm build - pnpm check - pnpm test:macmini Co-authored-by: lailoo <20536249+lailoo@users.noreply.github.com> Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com> --- CHANGELOG.md | 1 + ...odels-config.providers.kimi-coding.test.ts | 45 +++++++++++++++++++ src/agents/models-config.providers.ts | 36 +++++++++++++++ src/commands/onboard-auth.config-core.ts | 24 +++++----- 4 files changed, 95 insertions(+), 11 deletions(-) create mode 100644 src/agents/models-config.providers.kimi-coding.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 54b138350..ab69a37cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,7 @@ Docs: https://docs.openclaw.ai - Security/Browser: block non-network browser navigation protocols (including `file:`, `data:`, and `javascript:`) while preserving `about:blank`, preventing local file reads via browser tool navigation. This ships in the next npm release. Thanks @q1uf3ng for reporting. - Security/Exec: block shell startup-file env injection (`BASH_ENV`, `ENV`, `BASH_FUNC_*`, `LD_*`, `DYLD_*`) across config env ingestion, node-host inherited environment sanitization, and macOS exec host runtime to prevent pre-command execution from attacker-controlled environment variables. This ships in the next npm release. Thanks @tdjackey. - Security/Exec (Windows): canonicalize `cmd.exe /c` command text across validation, approval binding, and audit/event rendering to prevent trailing-argument approval mismatches in `system.run`. This ships in the next npm release. Thanks @tdjackey for reporting. +- Models/Kimi-Coding: add missing implicit provider template for `kimi-coding` with correct `anthropic-messages` API type and base URL, fixing 403 errors when using Kimi for Coding. (#22409) - Security/Gateway/Hooks: block `__proto__`, `constructor`, and `prototype` traversal in webhook template path resolution to prevent prototype-chain payload data leakage in `messageTemplate` rendering. (#22213) Thanks @SleuthCo. - Security/OpenClawKit/UI: prevent injected inbound user context metadata blocks from leaking into chat history in TUI, webchat, and macOS surfaces by stripping all untrusted metadata prefixes at display boundaries. (#22142) Thanks @Mellowambience, @vincentkoc. - Security/OpenClawKit/UI: strip inbound metadata blocks from user messages in TUI rendering while preserving user-authored content. (#22345) Thanks @kansodata, @vincentkoc. diff --git a/src/agents/models-config.providers.kimi-coding.test.ts b/src/agents/models-config.providers.kimi-coding.test.ts new file mode 100644 index 000000000..ff0c01048 --- /dev/null +++ b/src/agents/models-config.providers.kimi-coding.test.ts @@ -0,0 +1,45 @@ +import { mkdtempSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import { describe, expect, it } from "vitest"; +import { captureEnv } from "../test-utils/env.js"; +import { buildKimiCodingProvider, resolveImplicitProviders } from "./models-config.providers.js"; + +describe("kimi-coding implicit provider (#22409)", () => { + it("should include kimi-coding when KIMI_API_KEY is configured", async () => { + const agentDir = mkdtempSync(join(tmpdir(), "openclaw-test-")); + const envSnapshot = captureEnv(["KIMI_API_KEY"]); + process.env.KIMI_API_KEY = "test-key"; + + try { + const providers = await resolveImplicitProviders({ agentDir }); + expect(providers?.["kimi-coding"]).toBeDefined(); + expect(providers?.["kimi-coding"]?.api).toBe("anthropic-messages"); + expect(providers?.["kimi-coding"]?.baseUrl).toBe("https://api.kimi.com/coding/"); + } finally { + envSnapshot.restore(); + } + }); + + it("should build kimi-coding provider with anthropic-messages API", () => { + const provider = buildKimiCodingProvider(); + expect(provider.api).toBe("anthropic-messages"); + expect(provider.baseUrl).toBe("https://api.kimi.com/coding/"); + expect(provider.models).toBeDefined(); + expect(provider.models.length).toBeGreaterThan(0); + expect(provider.models[0].id).toBe("k2p5"); + }); + + it("should not include kimi-coding when no API key is configured", async () => { + const agentDir = mkdtempSync(join(tmpdir(), "openclaw-test-")); + const envSnapshot = captureEnv(["KIMI_API_KEY"]); + delete process.env.KIMI_API_KEY; + + try { + const providers = await resolveImplicitProviders({ agentDir }); + expect(providers?.["kimi-coding"]).toBeUndefined(); + } finally { + envSnapshot.restore(); + } + }); +}); diff --git a/src/agents/models-config.providers.ts b/src/agents/models-config.providers.ts index 84b0c4303..e622e70ec 100644 --- a/src/agents/models-config.providers.ts +++ b/src/agents/models-config.providers.ts @@ -96,6 +96,17 @@ const MOONSHOT_DEFAULT_COST = { cacheWrite: 0, }; +const KIMI_CODING_BASE_URL = "https://api.kimi.com/coding/"; +const KIMI_CODING_DEFAULT_MODEL_ID = "k2p5"; +const KIMI_CODING_DEFAULT_CONTEXT_WINDOW = 262144; +const KIMI_CODING_DEFAULT_MAX_TOKENS = 32768; +const KIMI_CODING_DEFAULT_COST = { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, +}; + const QWEN_PORTAL_BASE_URL = "https://portal.qwen.ai/v1"; const QWEN_PORTAL_OAUTH_PLACEHOLDER = "qwen-oauth"; const QWEN_PORTAL_DEFAULT_CONTEXT_WINDOW = 128000; @@ -483,6 +494,24 @@ function buildMoonshotProvider(): ProviderConfig { }; } +export function buildKimiCodingProvider(): ProviderConfig { + return { + baseUrl: KIMI_CODING_BASE_URL, + api: "anthropic-messages", + models: [ + { + id: KIMI_CODING_DEFAULT_MODEL_ID, + name: "Kimi for Coding", + reasoning: true, + input: ["text", "image"], + cost: KIMI_CODING_DEFAULT_COST, + contextWindow: KIMI_CODING_DEFAULT_CONTEXT_WINDOW, + maxTokens: KIMI_CODING_DEFAULT_MAX_TOKENS, + }, + ], + }; +} + function buildQwenPortalProvider(): ProviderConfig { return { baseUrl: QWEN_PORTAL_BASE_URL, @@ -687,6 +716,13 @@ export async function resolveImplicitProviders(params: { providers.moonshot = { ...buildMoonshotProvider(), apiKey: moonshotKey }; } + const kimiCodingKey = + resolveEnvApiKeyVarName("kimi-coding") ?? + resolveApiKeyFromProfiles({ provider: "kimi-coding", store: authStore }); + if (kimiCodingKey) { + providers["kimi-coding"] = { ...buildKimiCodingProvider(), apiKey: kimiCodingKey }; + } + const syntheticKey = resolveEnvApiKeyVarName("synthetic") ?? resolveApiKeyFromProfiles({ provider: "synthetic", store: authStore }); diff --git a/src/commands/onboard-auth.config-core.ts b/src/commands/onboard-auth.config-core.ts index 6bc500cab..eead07996 100644 --- a/src/commands/onboard-auth.config-core.ts +++ b/src/commands/onboard-auth.config-core.ts @@ -4,6 +4,7 @@ import { HUGGINGFACE_MODEL_CATALOG, } from "../agents/huggingface-models.js"; import { + buildKimiCodingProvider, buildQianfanProvider, buildXiaomiProvider, QIANFAN_DEFAULT_MODEL_ID, @@ -61,6 +62,7 @@ import { buildXaiModelDefinition, QIANFAN_BASE_URL, QIANFAN_DEFAULT_MODEL_REF, + KIMI_CODING_MODEL_ID, KIMI_CODING_MODEL_REF, MOONSHOT_BASE_URL, MOONSHOT_CN_BASE_URL, @@ -206,19 +208,19 @@ export function applyKimiCodeProviderConfig(cfg: OpenClawConfig): OpenClawConfig const models = { ...cfg.agents?.defaults?.models }; models[KIMI_CODING_MODEL_REF] = { ...models[KIMI_CODING_MODEL_REF], - alias: models[KIMI_CODING_MODEL_REF]?.alias ?? "Kimi K2.5", + alias: models[KIMI_CODING_MODEL_REF]?.alias ?? "Kimi for Coding", }; - return { - ...cfg, - agents: { - ...cfg.agents, - defaults: { - ...cfg.agents?.defaults, - models, - }, - }, - }; + const defaultModel = buildKimiCodingProvider().models[0]; + + return applyProviderConfigWithDefaultModel(cfg, { + agentModels: models, + providerId: "kimi-coding", + api: "anthropic-messages", + baseUrl: "https://api.kimi.com/coding/", + defaultModel, + defaultModelId: KIMI_CODING_MODEL_ID, + }); } export function applyKimiCodeConfig(cfg: OpenClawConfig): OpenClawConfig { From 892620ddabcbd6ff6fed20247af8b246ef0b6c01 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 14:35:10 +0100 Subject: [PATCH 0203/1007] chore: update workspace dependencies --- extensions/msteams/package.json | 2 +- package.json | 16 +- pnpm-lock.yaml | 1506 ++++++++++++------------------- ui/package.json | 4 +- 4 files changed, 590 insertions(+), 938 deletions(-) diff --git a/extensions/msteams/package.json b/extensions/msteams/package.json index 85b36d6ff..462a6b0f4 100644 --- a/extensions/msteams/package.json +++ b/extensions/msteams/package.json @@ -4,7 +4,7 @@ "description": "OpenClaw Microsoft Teams channel plugin", "type": "module", "dependencies": { - "@microsoft/agents-hosting": "^1.2.3", + "@microsoft/agents-hosting": "^1.3.1", "express": "^5.2.1" }, "devDependencies": { diff --git a/package.json b/package.json index 7fdf1d013..43bd5bf11 100644 --- a/package.json +++ b/package.json @@ -139,10 +139,10 @@ }, "dependencies": { "@agentclientprotocol/sdk": "0.14.1", - "@aws-sdk/client-bedrock": "^3.993.0", + "@aws-sdk/client-bedrock": "^3.995.0", "@buape/carbon": "0.0.0-beta-20260216184201", "@clack/prompts": "^1.0.1", - "@discordjs/opus": "^0.9.0", + "@discordjs/opus": "^0.10.0", "@discordjs/voice": "^0.19.0", "@grammyjs/runner": "^2.0.3", "@grammyjs/transformer-throttler": "^1.2.1", @@ -164,7 +164,7 @@ "cli-highlight": "^2.1.11", "commander": "^14.0.3", "croner": "^10.0.1", - "discord-api-types": "^0.38.39", + "discord-api-types": "^0.38.40", "dotenv": "^17.3.1", "express": "^5.2.1", "file-type": "^21.3.0", @@ -193,19 +193,19 @@ }, "devDependencies": { "@grammyjs/types": "^3.24.0", - "@lit-labs/signals": "^0.1.3", + "@lit-labs/signals": "^0.2.0", "@lit/context": "^1.1.6", "@types/express": "^5.0.6", "@types/markdown-it": "^14.1.2", "@types/node": "^25.3.0", "@types/qrcode-terminal": "^0.12.2", "@types/ws": "^8.18.1", - "@typescript/native-preview": "7.0.0-dev.20260219.1", + "@typescript/native-preview": "7.0.0-dev.20260221.1", "@vitest/coverage-v8": "^4.0.18", "lit": "^3.3.2", - "oxfmt": "0.33.0", - "oxlint": "^1.48.0", - "oxlint-tsgolint": "^0.14.1", + "oxfmt": "0.34.0", + "oxlint": "^1.49.0", + "oxlint-tsgolint": "^0.14.2", "signal-utils": "0.21.1", "tsdown": "^0.20.3", "tsx": "^4.21.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c89c7f677..9abd02c4d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,20 +24,20 @@ importers: specifier: 0.14.1 version: 0.14.1(zod@4.3.6) '@aws-sdk/client-bedrock': - specifier: ^3.993.0 - version: 3.993.0 + specifier: ^3.995.0 + version: 3.995.0 '@buape/carbon': specifier: 0.0.0-beta-20260216184201 - version: 0.0.0-beta-20260216184201(@discordjs/opus@0.9.0)(hono@4.11.10)(opusscript@0.0.8) + version: 0.0.0-beta-20260216184201(@discordjs/opus@0.10.0)(hono@4.11.10)(opusscript@0.0.8) '@clack/prompts': specifier: ^1.0.1 version: 1.0.1 '@discordjs/opus': - specifier: ^0.9.0 - version: 0.9.0 + specifier: ^0.10.0 + version: 0.10.0 '@discordjs/voice': specifier: ^0.19.0 - version: 0.19.0(@discordjs/opus@0.9.0)(opusscript@0.0.8) + version: 0.19.0(@discordjs/opus@0.10.0)(opusscript@0.0.8) '@grammyjs/runner': specifier: ^2.0.3 version: 2.0.3(grammy@1.40.0) @@ -102,8 +102,8 @@ importers: specifier: ^10.0.1 version: 10.0.1 discord-api-types: - specifier: ^0.38.39 - version: 0.38.39 + specifier: ^0.38.40 + version: 0.38.40 dotenv: specifier: ^17.3.1 version: 17.3.1 @@ -187,8 +187,8 @@ importers: specifier: ^3.24.0 version: 3.24.0 '@lit-labs/signals': - specifier: ^0.1.3 - version: 0.1.3 + specifier: ^0.2.0 + version: 0.2.0 '@lit/context': specifier: ^1.1.6 version: 1.1.6 @@ -208,8 +208,8 @@ importers: specifier: ^8.18.1 version: 8.18.1 '@typescript/native-preview': - specifier: 7.0.0-dev.20260219.1 - version: 7.0.0-dev.20260219.1 + specifier: 7.0.0-dev.20260221.1 + version: 7.0.0-dev.20260221.1 '@vitest/coverage-v8': specifier: ^4.0.18 version: 4.0.18(@vitest/browser@4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.2))(vitest@4.0.18))(vitest@4.0.18) @@ -217,20 +217,20 @@ importers: specifier: ^3.3.2 version: 3.3.2 oxfmt: - specifier: 0.33.0 - version: 0.33.0 + specifier: 0.34.0 + version: 0.34.0 oxlint: - specifier: ^1.48.0 - version: 1.48.0(oxlint-tsgolint@0.14.1) + specifier: ^1.49.0 + version: 1.49.0(oxlint-tsgolint@0.14.2) oxlint-tsgolint: - specifier: ^0.14.1 - version: 0.14.1 + specifier: ^0.14.2 + version: 0.14.2 signal-utils: specifier: 0.21.1 version: 0.21.1(signal-polyfill@0.2.2) tsdown: specifier: ^0.20.3 - version: 0.20.3(@typescript/native-preview@7.0.0-dev.20260219.1)(typescript@5.9.3) + version: 0.20.3(@typescript/native-preview@7.0.0-dev.20260221.1)(typescript@5.9.3) tsx: specifier: ^4.21.0 version: 4.21.0 @@ -418,8 +418,8 @@ importers: extensions/msteams: dependencies: '@microsoft/agents-hosting': - specifier: ^1.2.3 - version: 1.2.3 + specifier: ^1.3.1 + version: 1.3.1 express: specifier: ^5.2.1 version: 5.2.1 @@ -553,10 +553,10 @@ importers: ui: dependencies: '@lit-labs/signals': - specifier: ^0.1.3 - version: 0.1.3 + specifier: ^0.2.0 + version: 0.2.0 '@lit/context': - specifier: ^1.1.4 + specifier: ^1.1.6 version: 1.1.6 '@noble/ed25519': specifier: 3.0.0 @@ -623,58 +623,34 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-bedrock-runtime@3.992.0': - resolution: {integrity: sha512-8P8vjoaxiYYec8e1DNzvN9dV5J4BkRIXU8OuTLux/UIPES3OmaS6FZ+X/0uvAEGIH2Y2kww+yBiXedJymn2v4w==} + '@aws-sdk/client-bedrock-runtime@3.995.0': + resolution: {integrity: sha512-nI7tT11L9s34AKr95GHmxs6k2+3ie+rEOew2cXOwsMC9k/5aifrZwh0JjAkBop4FqbmS8n0ZjCKDjBZFY/0YxQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/client-bedrock@3.993.0': - resolution: {integrity: sha512-TJ15rjNtGD3Afr/xE/fhyUtIZ4fPNF2al46nafV6ERZ2fCY4zpzfn3PNNwpuJbLw4goocl+2Slr5tO4wO3Dn0A==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/client-sso@3.990.0': - resolution: {integrity: sha512-xTEaPjZwOqVjGbLOP7qzwbdOWJOo1ne2mUhTZwEBBkPvNk4aXB/vcYwWwrjoSWUqtit4+GDbO75ePc/S6TUJYQ==} + '@aws-sdk/client-bedrock@3.995.0': + resolution: {integrity: sha512-ONw5c7pOeHe78kC+jK2j73hP727Kqp7cc9lZqkfshlBD8MWxXmZM9GihIQLrNBCSUKRhc19NH7DUM6B7uN0mMQ==} engines: {node: '>=20.0.0'} '@aws-sdk/client-sso@3.993.0': resolution: {integrity: sha512-VLUN+wIeNX24fg12SCbzTUBnBENlL014yMKZvRhPkcn4wHR6LKgNrjsG3fZ03Xs0XoKaGtNFi1VVrq666sGBoQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/core@3.973.10': - resolution: {integrity: sha512-4u/FbyyT3JqzfsESI70iFg6e2yp87MB5kS2qcxIA66m52VSTN1fvuvbCY1h/LKq1LvuxIrlJ1ItcyjvcKoaPLg==} - engines: {node: '>=20.0.0'} - '@aws-sdk/core@3.973.11': resolution: {integrity: sha512-wdQ8vrvHkKIV7yNUKXyjPWKCdYEUrZTHJ8Ojd5uJxXp9vqPCkUR1dpi1NtOLcrDgueJH7MUH5lQZxshjFPSbDA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-env@3.972.8': - resolution: {integrity: sha512-r91OOPAcHnLCSxaeu/lzZAVRCZ/CtTNuwmJkUwpwSDshUrP7bkX1OmFn2nUMWd9kN53Q4cEo8b7226G4olt2Mg==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-env@3.972.9': resolution: {integrity: sha512-ZptrOwQynfupubvcngLkbdIq/aXvl/czdpEG8XJ8mN8Nb19BR0jaK0bR+tfuMU36Ez9q4xv7GGkHFqEEP2hUUQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-http@3.972.10': - resolution: {integrity: sha512-DTtuyXSWB+KetzLcWaSahLJCtTUe/3SXtlGp4ik9PCe9xD6swHEkG8n8/BNsQ9dsihb9nhFvuUB4DpdBGDcvVg==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-http@3.972.11': resolution: {integrity: sha512-hECWoOoH386bGr89NQc9vA/abkGf5TJrMREt+lhNcnSNmoBS04fK7vc3LrJBSQAUGGVj0Tz3f4dHB3w5veovig==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-ini@3.972.8': - resolution: {integrity: sha512-n2dMn21gvbBIEh00E8Nb+j01U/9rSqFIamWRdGm/mE5e+vHQ9g0cBNdrYFlM6AAiryKVHZmShWT9D1JAWJ3ISw==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-ini@3.972.9': resolution: {integrity: sha512-zr1csEu9n4eDiHMTYJabX1mDGuGLgjgUnNckIivvk43DocJC9/f6DefFrnUPZXE+GHtbW50YuXb+JIxKykU74A==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-login@3.972.8': - resolution: {integrity: sha512-rMFuVids8ICge/X9DF5pRdGMIvkVhDV9IQFQ8aTYk6iF0rl9jOUa1C3kjepxiXUlpgJQT++sLZkT9n0TMLHhQw==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-login@3.972.9': resolution: {integrity: sha512-m4RIpVgZChv0vWS/HKChg1xLgZPpx8Z+ly9Fv7FwA8SOfuC6I3htcSaBz2Ch4bneRIiBUhwP4ziUo0UZgtJStQ==} engines: {node: '>=20.0.0'} @@ -683,30 +659,14 @@ packages: resolution: {integrity: sha512-70nCESlvnzjo4LjJ8By8MYIiBogkYPSXl3WmMZfH9RZcB/Nt9qVWbFpYj6Fk1vLa4Vk8qagFVeXgxdieMxG1QA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-node@3.972.9': - resolution: {integrity: sha512-LfJfO0ClRAq2WsSnA9JuUsNyIicD2eyputxSlSL0EiMrtxOxELLRG6ZVYDf/a1HCepaYPXeakH4y8D5OLCauag==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/credential-provider-process@3.972.8': - resolution: {integrity: sha512-6cg26ffFltxM51OOS8NH7oE41EccaYiNlbd5VgUYwhiGCySLfHoGuGrLm2rMB4zhy+IO5nWIIG0HiodX8zdvHA==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-process@3.972.9': resolution: {integrity: sha512-gOWl0Fe2gETj5Bk151+LYKpeGi2lBDLNu+NMNpHRlIrKHdBmVun8/AalwMK8ci4uRfG5a3/+zvZBMpuen1SZ0A==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-sso@3.972.8': - resolution: {integrity: sha512-35kqmFOVU1n26SNv+U37sM8b2TzG8LyqAcd6iM9gprqxyHEh/8IM3gzN4Jzufs3qM6IrH8e43ryZWYdvfVzzKQ==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-sso@3.972.9': resolution: {integrity: sha512-ey7S686foGTArvFhi3ifQXmgptKYvLSGE2250BAQceMSXZddz7sUSNERGJT2S7u5KIe/kgugxrt01hntXVln6w==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.8': - resolution: {integrity: sha512-CZhN1bOc1J3ubQPqbmr5b4KaMJBgdDvYsmEIZuX++wFlzmZsKj1bwkaiTEb5U2V7kXuzLlpF5HJSOM9eY/6nGA==} - engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.9': resolution: {integrity: sha512-8LnfS76nHXoEc9aRRiMMpxZxJeDG0yusdyo3NvPhCgESmBUgpMa4luhGbClW5NoX/qRcGxxM6Z/esqANSNMTow==} engines: {node: '>=20.0.0'} @@ -731,10 +691,6 @@ packages: resolution: {integrity: sha512-PY57QhzNuXHnwbJgbWYTrqIDHYSeOlhfYERTAuc16LKZpTZRJUjzBFokp9hF7u1fuGeE3D70ERXzdbMBOqQz7Q==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-user-agent@3.972.10': - resolution: {integrity: sha512-bBEL8CAqPQkI91ZM5a9xnFAzedpzH6NYCOtNyLarRAzTUTFN2DKqaC60ugBa7pnU1jSi4mA7WAXBsrod7nJltg==} - engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-user-agent@3.972.11': resolution: {integrity: sha512-R8CvPsPHXwzIHCAza+bllY6PrctEk4lYq/SkHJz9NLoBHCcKQrbOcsfXxO6xmipSbUNIbNIUhH0lBsJGgsRdiw==} engines: {node: '>=20.0.0'} @@ -743,50 +699,38 @@ packages: resolution: {integrity: sha512-1DedO6N3m8zQ/vG6twNiHtsdwBgk773VdavLEbB3NXeKZDlzSK1BTviqWwvJdKx5UnIy4kGGP6WWpCEFEt/bhQ==} engines: {node: '>= 14.0.0'} - '@aws-sdk/nested-clients@3.990.0': - resolution: {integrity: sha512-3NA0s66vsy8g7hPh36ZsUgO4SiMyrhwcYvuuNK1PezO52vX3hXDW4pQrC6OQLGKGJV0o6tbEyQtXb/mPs8zg8w==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/nested-clients@3.992.0': - resolution: {integrity: sha512-oL+404BQO80zIhIyIOHPjSKRAL1ONNR5POVQa3asuaflMDE84VrU9MPZl8ZGTf1kmhFYjNvVluPYgtj8yftPOg==} - engines: {node: '>=20.0.0'} - '@aws-sdk/nested-clients@3.993.0': resolution: {integrity: sha512-iOq86f2H67924kQUIPOAvlmMaOAvOLoDOIb66I2YqSUpMYB6ufiuJW3RlREgskxv86S5qKzMnfy/X6CqMjK6XQ==} engines: {node: '>=20.0.0'} + '@aws-sdk/nested-clients@3.995.0': + resolution: {integrity: sha512-7gq9gismVhESiRsSt0eYe1y1b6jS20LqLk+e/YSyPmGi9yHdndHQLIq73RbEJnK/QPpkQGFqq70M1mI46M1HGw==} + engines: {node: '>=20.0.0'} + '@aws-sdk/region-config-resolver@3.972.3': resolution: {integrity: sha512-v4J8qYAWfOMcZ4MJUyatntOicTzEMaU7j3OpkRCGGFSL2NgXQ5VbxauIyORA+pxdKZ0qQG2tCQjQjZDlXEC3Ow==} engines: {node: '>=20.0.0'} - '@aws-sdk/token-providers@3.990.0': - resolution: {integrity: sha512-L3BtUb2v9XmYgQdfGBzbBtKMXaP5fV973y3Qdxeevs6oUTVXFmi/mV1+LnScA/1wVPJC9/hlK+1o5vbt7cG7EQ==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/token-providers@3.992.0': - resolution: {integrity: sha512-dqKGEw7Ng4+ilq5m6/GYPA70YJJ+J/GxVS/UF6dBv3oMHvAwx/bM/Cg9dAC19Fl8i+/q1t3ivzPv12pmURyBUA==} - engines: {node: '>=20.0.0'} - '@aws-sdk/token-providers@3.993.0': resolution: {integrity: sha512-+35g4c+8r7sB9Sjp1KPdM8qxGn6B/shBjJtEUN4e+Edw9UEQlZKIzioOGu3UAbyE0a/s450LdLZr4wbJChtmww==} engines: {node: '>=20.0.0'} + '@aws-sdk/token-providers@3.995.0': + resolution: {integrity: sha512-lYSadNdZZ513qCKoj/KlJ+PgCycL3n8ZNS37qLVFC0t7TbHzoxvGquu9aD2n9OCERAn43OMhQ7dXjYDYdjAXzA==} + engines: {node: '>=20.0.0'} + '@aws-sdk/types@3.973.1': resolution: {integrity: sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==} engines: {node: '>=20.0.0'} - '@aws-sdk/util-endpoints@3.990.0': - resolution: {integrity: sha512-kVwtDc9LNI3tQZHEMNbkLIOpeDK8sRSTuT8eMnzGY+O+JImPisfSTjdh+jw9OTznu+MYZjQsv0258sazVKunYg==} - engines: {node: '>=20.0.0'} - - '@aws-sdk/util-endpoints@3.992.0': - resolution: {integrity: sha512-FHgdMVbTZ2Lu7hEIoGYfkd5UazNSsAgPcupEnh15vsWKFKhuw6w/6tM1k/yNaa7l1wx0Wt1UuK0m+gQ0BJpuvg==} - engines: {node: '>=20.0.0'} - '@aws-sdk/util-endpoints@3.993.0': resolution: {integrity: sha512-j6vioBeRZ4eHX4SWGvGPpwGg/xSOcK7f1GL0VM+rdf3ZFTIsUEhCFmD78B+5r2PgztcECSzEfvHQX01k8dPQPw==} engines: {node: '>=20.0.0'} + '@aws-sdk/util-endpoints@3.995.0': + resolution: {integrity: sha512-aym/pjB8SLbo9w2nmkrDdAAVKVlf7CM71B9mKhjDbJTzwpSFBPHqJIMdDyj0mLumKC0aIVDr1H6U+59m9GvMFw==} + engines: {node: '>=20.0.0'} + '@aws-sdk/util-format-url@3.972.3': resolution: {integrity: sha512-n7F2ycckcKFXa01vAsT/SJdjFHfKH9s96QHcs5gn8AaaigASICeME8WdUL9uBp8XV/OVwEt8+6gzn6KFUgQa8g==} engines: {node: '>=20.0.0'} @@ -798,8 +742,8 @@ packages: '@aws-sdk/util-user-agent-browser@3.972.3': resolution: {integrity: sha512-JurOwkRUcXD/5MTDBcqdyQ9eVedtAsZgw5rBwktsPTN7QtPiS2Ld1jkJepNgYoCufz1Wcut9iup7GJDoIHp8Fw==} - '@aws-sdk/util-user-agent-node@3.972.8': - resolution: {integrity: sha512-XJZuT0LWsFCW1C8dEpPAXSa7h6Pb3krr2y//1X0Zidpcl0vmgY5nL/X0JuBZlntpBzaN3+U4hvKjuijyiiR8zw==} + '@aws-sdk/util-user-agent-node@3.972.10': + resolution: {integrity: sha512-LVXzICPlsheET+sE6tkcS47Q5HkSTrANIlqL1iFxGAY/wRQ236DX/PCAK56qMh9QJoXAfXfoRW0B0Og4R+X7Nw==} engines: {node: '>=20.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -807,19 +751,6 @@ packages: aws-crt: optional: true - '@aws-sdk/util-user-agent-node@3.972.9': - resolution: {integrity: sha512-JNswdsLdQemxqaSIBL2HRhsHPUBBziAgoi5RQv6/9avmE5g5RSdt1hWr3mHJ7OxqRYf+KeB11ExWbiqfrnoeaA==} - engines: {node: '>=20.0.0'} - peerDependencies: - aws-crt: '>=1.0.0' - peerDependenciesMeta: - aws-crt: - optional: true - - '@aws-sdk/xml-builder@3.972.4': - resolution: {integrity: sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==} - engines: {node: '>=20.0.0'} - '@aws-sdk/xml-builder@3.972.5': resolution: {integrity: sha512-mCae5Ys6Qm1LDu0qdGwx2UQ63ONUe+FHw908fJzLDqFKTDBK4LDZUqKWm4OkTCNFq19bftjsBSESIGLD/s3/rA==} engines: {node: '>=20.0.0'} @@ -840,13 +771,13 @@ packages: resolution: {integrity: sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==} engines: {node: '>=20.0.0'} - '@azure/msal-common@15.14.2': - resolution: {integrity: sha512-n8RBJEUmd5QotoqbZfd+eGBkzuFI1KX6jw2b3WcpSyGjwmzoeI/Jb99opIBPHpb8y312NB+B6+FGi2ZVSR8yfA==} + '@azure/msal-common@16.0.4': + resolution: {integrity: sha512-0KZ9/wbUyZN65JLAx5bGNfWjkD0kRMUgM99oSpZFg7wEOb3XcKIiHrFnIpgyc8zZ70fHodyh8JKEOel1oN24Gw==} engines: {node: '>=0.8.0'} - '@azure/msal-node@3.8.7': - resolution: {integrity: sha512-a+Xnrae+uwLnlw68bplS1X4kuJ9F/7K6afuMFyRkNIskhjgDezl5Fhrx+1pmAlDmC0VaaAxjRQMp1OmcqVwkIg==} - engines: {node: '>=16'} + '@azure/msal-node@5.0.4': + resolution: {integrity: sha512-WbA77m68noCw4qV+1tMm5nodll34JCDF0KmrSrp9LskS0bGbgHt98ZRxq69BQK5mjMqDD5ThHJOrrGSfzPybxw==} + engines: {node: '>=20'} '@babel/generator@8.0.0-rc.1': resolution: {integrity: sha512-3ypWOOiC4AYHKr8vYRVtWtWmyvcoItHtVqF8paFax+ydpmUdPsJpLBkBBs5ItmhdrwC3a0ZSqqFAdzls4ODP3w==} @@ -966,8 +897,8 @@ packages: resolution: {integrity: sha512-YJOVVZ545x24mHzANfYoy0BJX5PDyeZlpiJjDkUBM/V/Ao7TFX9lcUvCN4nr0tbr5ubeaXxtEBILUrHtTphVeQ==} hasBin: true - '@discordjs/opus@0.9.0': - resolution: {integrity: sha512-NEE76A96FtQ5YuoAVlOlB3ryMPrkXbUCTQICHGKb8ShtjXyubGicjRMouHtP1RpuDdm16cDa+oI3aAMo1zQRUQ==} + '@discordjs/opus@0.10.0': + resolution: {integrity: sha512-HHEnSNrSPmFEyndRdQBJN2YE6egyXS9JUnJWyP6jficK0Y+qKMEZXyYTgmzpjrxXP1exM/hKaNP7BRBUEWkU5w==} engines: {node: '>=12.0.0'} '@discordjs/voice@0.19.0': @@ -1142,8 +1073,8 @@ packages: '@eshaz/web-worker@1.2.2': resolution: {integrity: sha512-WxXiHFmD9u/owrzempiDlBB1ZYqiLnm9s6aPc8AlFQalq2tKmqdmMr9GXOupDgzXtqnBipj8Un0gkIm7Sjf8mw==} - '@google/genai@1.41.0': - resolution: {integrity: sha512-S4WGil+PG0NBQRAx+0yrQuM/TWOLn2gGEy5wn4IsoOI6ouHad0P61p3OWdhJ3aqr9kfj8o904i/jevfaGoGuIQ==} + '@google/genai@1.42.0': + resolution: {integrity: sha512-+3nlMTcrQufbQ8IumGkOphxD5Pd5kKyJOzLcnY0/1IuE8upJk5aLmoexZ2BJhBp1zAjRJMEB4a2CJwKI9e2EYw==} engines: {node: '>=20.0.0'} peerDependencies: '@modelcontextprotocol/sdk': ^1.25.2 @@ -1336,10 +1267,6 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@isaacs/cliui@9.0.0': - resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==} - engines: {node: '>=18'} - '@isaacs/fs-minipass@4.0.1': resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} @@ -1432,8 +1359,8 @@ packages: resolution: {integrity: sha512-4hSpglL/G/cW2JCcohaYz/BS0uOSJNV9IEYdMm0EiPEvDLayoI2hGq2D86uYPQFD2gvgkyhmzdShpWLG3P5r3w==} engines: {node: '>=20'} - '@lit-labs/signals@0.1.3': - resolution: {integrity: sha512-P0yWgH5blwVyEwBg+WFspLzeu1i0ypJP1QB0l1Omr9qZLIPsUu0p4Fy2jshOg7oQyha5n163K3GJGeUhQQ682Q==} + '@lit-labs/signals@0.2.0': + resolution: {integrity: sha512-68plyIbciumbwKaiilhLNyhz4Vg6/+nJwDufG2xxWA9r/fUw58jxLHCAlKs+q1CE5Lmh3cZ3ShyYKnOCebEpVA==} '@lit-labs/ssr-dom-shim@1.5.1': resolution: {integrity: sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==} @@ -1566,12 +1493,12 @@ packages: resolution: {integrity: sha512-+qqgpn39XFSbsD0dFjssGO9vHEP7sTyfs8yTpt8vuqWpUpF20QMwpCZi0jpYw7GxjErNTsMshopuo8677DfGEA==} engines: {node: '>= 22'} - '@microsoft/agents-activity@1.2.3': - resolution: {integrity: sha512-XRQF+AVn6f9sGDUsfDQFiwLtmqqWNhM9JIwZRzK9XQLPTQmoWwjoWz8KMKc5fuvj5Ybly3974VrqYUbDOeMyTg==} + '@microsoft/agents-activity@1.3.1': + resolution: {integrity: sha512-4k44NrfEqXiSg49ofj8geV8ylPocqDLtZKKt0PFL9BvFV0n57X3y1s/fEbsf7Fkl3+P/R2XLyMB5atEGf/eRGg==} engines: {node: '>=20.0.0'} - '@microsoft/agents-hosting@1.2.3': - resolution: {integrity: sha512-8paXuxdbRc9X6tccYoR3lk0DSglt1SxpJG+6qDa8TVTuGiTvIuhnN4st9JZhIiazxPiFPTJAkhK5JSsOk+wLVQ==} + '@microsoft/agents-hosting@1.3.1': + resolution: {integrity: sha512-570oJr93l1RcCNNaMVpOm+PgQkRgno/F65nH1aCWLIKLnw0o7iPoj+8Z5b7mnLMidg9lldVSCcf0dBxqTGE1/w==} engines: {node: '>=20.0.0'} '@mistralai/mistralai@1.10.0': @@ -1587,8 +1514,8 @@ packages: cpu: [arm64] os: [android] - '@napi-rs/canvas-android-arm64@0.1.93': - resolution: {integrity: sha512-xRIoOPFvneR29Dtq5d9p2AJbijDCFeV4jQ+5Ms/xVAXJVb8R0Jlu+pPr/SkhrG+Mouaml4roPSXugTIeRl6CMA==} + '@napi-rs/canvas-android-arm64@0.1.94': + resolution: {integrity: sha512-YQ6K83RWNMQOtgpk1aIML97QTE3zxPmVCHTi5eA8Nss4+B9JZi5J7LHQr7B5oD7VwSfWd++xsPdUiJ1+frqsMg==} engines: {node: '>= 10'} cpu: [arm64] os: [android] @@ -1599,8 +1526,8 @@ packages: cpu: [arm64] os: [darwin] - '@napi-rs/canvas-darwin-arm64@0.1.93': - resolution: {integrity: sha512-daNDi76HN5grC6GXDmpxdfP+N2mQPd3sCfg62VyHwUuvbZh32P7R/IUjkzAxtYMtTza+Zvx9hfLJ3J7ENL6WMA==} + '@napi-rs/canvas-darwin-arm64@0.1.94': + resolution: {integrity: sha512-h1yl9XjqSrYZAbBUHCVLAhwd2knM8D8xt081Pv40KqNJXfeMmBrhG1SfroRymG2ak+pl42iQlWjFZ2Z8AWFdSw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -1611,8 +1538,8 @@ packages: cpu: [x64] os: [darwin] - '@napi-rs/canvas-darwin-x64@0.1.93': - resolution: {integrity: sha512-1YfuNPIQLawsg/gSNdJRk4kQWUy9M/Gy8FGsOI79nhQEJ2PZdqpSPl5UNzf4elfuNXuVbEbmmjP68EQdUunDuQ==} + '@napi-rs/canvas-darwin-x64@0.1.94': + resolution: {integrity: sha512-rkr/lrafbU0IIHebst+sQJf1HjdHvTMN0GGqWvw5OfaVS0K/sVxhNHtxi8oCfaRSvRE62aJZjWTcdc2ue/o6yw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -1623,8 +1550,8 @@ packages: cpu: [arm] os: [linux] - '@napi-rs/canvas-linux-arm-gnueabihf@0.1.93': - resolution: {integrity: sha512-8kEkOQPZjuyHjupvXExuJZiuiVNecdABGq3DLI7aO1EvQFOOlWMm2d/8Q5qXdV73Tn+nu3m16+kPajsN1oJefQ==} + '@napi-rs/canvas-linux-arm-gnueabihf@0.1.94': + resolution: {integrity: sha512-q95TDo32YkTKdi+Sp2yQ2Npm7pmfKEruNoJ3RUIw1KvQQ9EHKL3fii/iuU60tnzP0W+c8BKN7BFstNFcm2KXCQ==} engines: {node: '>= 10'} cpu: [arm] os: [linux] @@ -1635,8 +1562,8 @@ packages: cpu: [arm64] os: [linux] - '@napi-rs/canvas-linux-arm64-gnu@0.1.93': - resolution: {integrity: sha512-qIKLKkBkYSyWSYAoDThoxf5y1gr4X0g7W8rDU7d2HDeAAcotdVHUwuKkMeNe6+5VNk7/95EIhbslQjSxiCu32g==} + '@napi-rs/canvas-linux-arm64-gnu@0.1.94': + resolution: {integrity: sha512-Je5/gKVybWAoIGyDOcJF1zYgBTKWkPIkfOgvCzrQcl8h7DiDvRvEY70EapA+NicGe4X3DW9VsCT34KZJnerShA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1647,8 +1574,8 @@ packages: cpu: [arm64] os: [linux] - '@napi-rs/canvas-linux-arm64-musl@0.1.93': - resolution: {integrity: sha512-mAwQBGM3qArS9XEO21AK4E1uGvCuUCXjhIZk0dlVvs49MQ6wAAuCkYKNFpSKeSicKrLWwBMfgWX4qZoPh+M00A==} + '@napi-rs/canvas-linux-arm64-musl@0.1.94': + resolution: {integrity: sha512-9YleDDauDEZNsFnfz3HyZvp1LK1ECu8N2gDUg1wtL7uWLQv8dUbfVeFtp5HOdxht1o7LsWRmQeqeIbnD4EqE2A==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1659,8 +1586,8 @@ packages: cpu: [riscv64] os: [linux] - '@napi-rs/canvas-linux-riscv64-gnu@0.1.93': - resolution: {integrity: sha512-kaIH5MpPzOZfkM+QMsBxGdM9jlJT+N+fwz2IEaju/S+DL65E5TgPOx4QcD5dQ8vsMxlak6uDrudBc4ns5xzZCw==} + '@napi-rs/canvas-linux-riscv64-gnu@0.1.94': + resolution: {integrity: sha512-lQUy9Xvz7ch8+0AXq8RkioLD41iQ6EqdKFu5uV40BxkBDijB2SCm1jna/BRhqitQRSjwAk2KlLUxTjHChyfNGg==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] @@ -1671,8 +1598,8 @@ packages: cpu: [x64] os: [linux] - '@napi-rs/canvas-linux-x64-gnu@0.1.93': - resolution: {integrity: sha512-KtMZJqYWvOSeW5w3VSV2f5iGnwNdKJm4gwgVid4xNy1NFi+NJSyuglA1lX1u4wIPxizyxh8OW5c5Usf6oSOMNQ==} + '@napi-rs/canvas-linux-x64-gnu@0.1.94': + resolution: {integrity: sha512-0IYgyuUaugHdWxXRhDQUCMxTou8kAHHmpIBFtbmdRlciPlfK7AYQW5agvUU1PghPc5Ja3Zzp5qZfiiLu36vIWQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1683,8 +1610,8 @@ packages: cpu: [x64] os: [linux] - '@napi-rs/canvas-linux-x64-musl@0.1.93': - resolution: {integrity: sha512-qRZhOvlDBooRLX6V3/t9X9B+plZK+OrPLgfFixu0A1RO/3VHbubOknfnMnocSDAqk/L6cRyKI83VP2ciR9UO7w==} + '@napi-rs/canvas-linux-x64-musl@0.1.94': + resolution: {integrity: sha512-xuetfzzcflCIiBw2HJlOU4/+zTqhdxoe1BEcwdBsHAd/5wAQ4Pp+FGPi5g74gDvtcXQmTdEU3fLQvHc/j3wbxQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1695,8 +1622,8 @@ packages: cpu: [arm64] os: [win32] - '@napi-rs/canvas-win32-arm64-msvc@0.1.93': - resolution: {integrity: sha512-um5XE44vF8bjkQEsH2iRSUP9fDeQGYbn/qjM/v4whXG83qsqapAXlOPOQqSARZB1SiNvPUAuXoRsJLlKFmAEFw==} + '@napi-rs/canvas-win32-arm64-msvc@0.1.94': + resolution: {integrity: sha512-2F3p8wci4Q4vjbENlQtSibqFWxBdpzYk1c8Jh1mqqLE92rBKElG018dBJ6C8Dp49vE350Hmy5LrfdLgFKMG8sg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -1707,8 +1634,8 @@ packages: cpu: [x64] os: [win32] - '@napi-rs/canvas-win32-x64-msvc@0.1.93': - resolution: {integrity: sha512-maHlizZgmKsAPJwjwBZMnsWfq3Ca9QutoteQwKe7YqsmbECoylrLCCOGCDOredstW4BRWqRTfCl6NJaVVeAQvQ==} + '@napi-rs/canvas-win32-x64-msvc@0.1.94': + resolution: {integrity: sha512-hjwaIKMrQLoNiu3724octSGhDVKkBwJtMeQ3qUXOi+y60h2q6Sxq3+MM2za3V88+XQzzwn0DgG0Xo6v6gzV8kQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1717,8 +1644,8 @@ packages: resolution: {integrity: sha512-q7ZaUCJkEU5BeOdE7fBx1XWRd2T5Ady65nxq4brMf5L4cE1VV/ACq5w9Z5b/IVJs8CwSSIwc30nlthH0gFo4Ig==} engines: {node: '>= 10'} - '@napi-rs/canvas@0.1.93': - resolution: {integrity: sha512-unVFo8CUlUeJCCxt50+j4yy91NF4x6n9zdGcvEsOFAWzowtZm3mgx8X2D7xjwV0cFSfxmpGPoe+JS77uzeFsxg==} + '@napi-rs/canvas@0.1.94': + resolution: {integrity: sha512-8jBkvqynXNdQPNZjLJxB/Rp9PdnnMSHFBLzPmMc615nlt/O6w0ergBbkEDEOr8EbjL8nRQDpEklPx4pzD7zrbg==} engines: {node: '>= 10'} '@napi-rs/wasm-runtime@1.1.1': @@ -2095,260 +2022,260 @@ packages: '@oxc-project/types@0.112.0': resolution: {integrity: sha512-m6RebKHIRsax2iCwVpYW2ErQwa4ywHJrE4sCK3/8JK8ZZAWOKXaRJFl/uP51gaVyyXlaS4+chU1nSCdzYf6QqQ==} - '@oxfmt/binding-android-arm-eabi@0.33.0': - resolution: {integrity: sha512-ML6qRW8/HiBANteqfyFAR1Zu0VrJu+6o4gkPLsssq74hQ7wDMkufBYJXI16PGSERxEYNwKxO5fesCuMssgTv9w==} + '@oxfmt/binding-android-arm-eabi@0.34.0': + resolution: {integrity: sha512-sqkqjh/Z38l+duOb1HtVqJTAj1grt2ttkobCopC/72+a4Xxz4xUgZPFyQ4HxrYMvyqO/YA0tvM1QbfOu70Gk1Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.33.0': - resolution: {integrity: sha512-WimmcyrGpTOntj7F7CO9RMssncOKYall93nBnzJbI2ZZDhVRuCkvFwTpwz80cZqwYm5udXRXfF40ZXcCxjp9jg==} + '@oxfmt/binding-android-arm64@0.34.0': + resolution: {integrity: sha512-1KRCtasHcVcGOMwfOP9d5Bus2NFsN8yAYM5cBwi8LBg5UtXC3C49WHKrlEa8iF1BjOS6CR2qIqiFbGoA0DJQNQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.33.0': - resolution: {integrity: sha512-PorspsX9O5ISstVaq34OK4esN0LVcuU4DVg+XuSqJsfJ//gn6z6WH2Tt7s0rTQaqEcp76g7+QdWQOmnJDZsEVg==} + '@oxfmt/binding-darwin-arm64@0.34.0': + resolution: {integrity: sha512-b+Rmw9Bva6e/7PBES2wLO8sEU7Mi0+/Kv+pXSe/Y8i4fWNftZZlGwp8P01eECaUqpXATfSgNxdEKy7+ssVNz7g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.33.0': - resolution: {integrity: sha512-8278bqQtOcHRPhhzcqwN9KIideut+cftBjF8d2TOsSQrlsJSFx41wCCJ38mFmH9NOmU1M+x9jpeobHnbRP1okw==} + '@oxfmt/binding-darwin-x64@0.34.0': + resolution: {integrity: sha512-QGjpevWzf1T9COEokZEWt80kPOtthW1zhRbo7x4Qoz646eTTfi6XsHG2uHeDWJmTbgBoJZPMgj2TAEV/ppEZaA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.33.0': - resolution: {integrity: sha512-BiqYVwWFHLf5dkfg0aCKsXa9rpi//vH1+xePCpd7Ulz9yp9pJKP4DWgS5g+OW8MaqOtt7iyAszhxtk/j1nDKHQ==} + '@oxfmt/binding-freebsd-x64@0.34.0': + resolution: {integrity: sha512-VMSaC02cG75qL59M9M/szEaqq/RsLfgpzQ4nqUu8BUnX1zkiZIW2gTpUv3ZJ6qpWnHxIlAXiRZjQwmcwpvtbcg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.33.0': - resolution: {integrity: sha512-oAVmmurXx0OKbNOVv71oK92LsF1LwYWpnhDnX0VaAy/NLsCKf4B7Zo7lxkJh80nfhU20TibcdwYfoHVaqlStPQ==} + '@oxfmt/binding-linux-arm-gnueabihf@0.34.0': + resolution: {integrity: sha512-Klm367PFJhH6vYK3vdIOxFepSJZHPaBfIuqwxdkOcfSQ4qqc/M8sgK0UTFnJWWTA/IkhMIh1kW6uEqiZ/xtQqg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.33.0': - resolution: {integrity: sha512-YB6S8CiRol59oRxnuclJiWoV6l+l8ru/NsuQNYjXZnnPXfSTXKtMLWHCnL/figpCFYA1E7JyjrBbar1qxe2aZg==} + '@oxfmt/binding-linux-arm-musleabihf@0.34.0': + resolution: {integrity: sha512-nqn0QueVXRfbN9m58/E9Zij0Ap8lzayx591eWBYn0sZrGzY1IRv9RYS7J/1YUXbb0Ugedo0a8qIWzUHU9bWQuA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.33.0': - resolution: {integrity: sha512-hrYy+FpWoB6N24E9oGRimhVkqlls9yeqcRmQakEPUHoAbij6rYxsHHYIp3+FHRiQZFAOUxWKn/CCQoy/Mv3Dgw==} + '@oxfmt/binding-linux-arm64-gnu@0.34.0': + resolution: {integrity: sha512-DDn+dcqW+sMTCEjvLoQvC/VWJjG7h8wcdN/J+g7ZTdf/3/Dx730pQElxPPGsCXPhprb11OsPyMp5FwXjMY3qvA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxfmt/binding-linux-arm64-musl@0.33.0': - resolution: {integrity: sha512-O1YIzymGRdWj9cG5iVTjkP7zk9/hSaVN8ZEbqMnWZjLC1phXlv54cUvANGGXndgJp2JS4W9XENn7eo5I4jZueg==} + '@oxfmt/binding-linux-arm64-musl@0.34.0': + resolution: {integrity: sha512-H+F8+71gHQoGTFPPJ6z4dD0Fzfzi0UP8Zx94h5kUmIFThLvMq5K1Y/bUUubiXwwHfwb5C3MPjUpYijiy0rj51Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxfmt/binding-linux-ppc64-gnu@0.33.0': - resolution: {integrity: sha512-2lrkNe+B0w1tCgQTaozfUNQCYMbqKKCGcnTDATmWCZzO77W2sh+3n04r1lk9Q1CK3bI+C3fPwhFPUR2X2BvlyQ==} + '@oxfmt/binding-linux-ppc64-gnu@0.34.0': + resolution: {integrity: sha512-dIGnzTNhCXqQD5pzBwduLg8pClm+t8R53qaE9i5h8iua1iaFAJyLffh4847CNZSlASb7gn1Ofuv7KoG/EpoGZg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - '@oxfmt/binding-linux-riscv64-gnu@0.33.0': - resolution: {integrity: sha512-8DSG1q0M6097vowHAkEyHnKed75/BWr1IBtgCJfytnWQg+Jn1X4DryhfjqonKZOZiv74oFQl5J8TCbdDuXXdtQ==} + '@oxfmt/binding-linux-riscv64-gnu@0.34.0': + resolution: {integrity: sha512-FGQ2GTTooilDte/ogwWwkHuuL3lGtcE3uKM2EcC7kOXNWdUfMY6Jx3JCodNVVbFoybv4A+HuCj8WJji2uu1Ceg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxfmt/binding-linux-riscv64-musl@0.33.0': - resolution: {integrity: sha512-eWaxnpPz7+p0QGUnw7GGviVBDOXabr6Cd0w7S/vnWTqQo9z1VroT7XXFnJEZ3dBwxMB9lphyuuYi/GLTCxqxlg==} + '@oxfmt/binding-linux-riscv64-musl@0.34.0': + resolution: {integrity: sha512-2dGbGneJ7ptOIVKMwEIHdCkdZEomh74X3ggo4hCzEXL/rl9HwfsZDR15MkqfQqAs6nVXMvtGIOMxjDYa5lwKaA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxfmt/binding-linux-s390x-gnu@0.33.0': - resolution: {integrity: sha512-+mH8cQTqq+Tu2CdoB2/Wmk9CqotXResi+gPvXpb+AAUt/LiwpicTQqSolMheQKogkDTYHPuUiSN23QYmy7IXNQ==} + '@oxfmt/binding-linux-s390x-gnu@0.34.0': + resolution: {integrity: sha512-cCtGgmrTrxq3OeSG0UAO+w6yLZTMeOF4XM9SAkNrRUxYhRQELSDQ/iNPCLyHhYNi38uHJQbS5RQweLUDpI4ajA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - '@oxfmt/binding-linux-x64-gnu@0.33.0': - resolution: {integrity: sha512-fjyslAYAPE2+B6Ckrs5LuDQ6lB1re5MumPnzefAXsen3JGwiRilra6XdjUmszTNoExJKbewoxxd6bcLSTpkAJQ==} + '@oxfmt/binding-linux-x64-gnu@0.34.0': + resolution: {integrity: sha512-7AvMzmeX+k7GdgitXp99GQoIV/QZIpAS7rwxQvC/T541yWC45nwvk4mpnU8N+V6dE5SPEObnqfhCjO80s7qIsg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxfmt/binding-linux-x64-musl@0.33.0': - resolution: {integrity: sha512-ve/jGBlTt35Jl/I0A0SfCQX3wKnadzPDdyOFEwe2ZgHHIT9uhqhAv1PaVXTenSBpauICEWYH8mWy+ittzlVE/A==} + '@oxfmt/binding-linux-x64-musl@0.34.0': + resolution: {integrity: sha512-uNiglhcmivJo1oDMh3hoN/Z0WsbEXOpRXZdQ3W/IkOpyV8WF308jFjSC1ZxajdcNRXWej0zgge9QXba58Owt+g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxfmt/binding-openharmony-arm64@0.33.0': - resolution: {integrity: sha512-lsWRgY9e+uPvwXnuDiJkmJ2Zs3XwwaQkaALJ3/SXU9kjZP0Qh8/tGW8Tk/Z6WL32sDxx+aOK5HuU7qFY9dHJhg==} + '@oxfmt/binding-openharmony-arm64@0.34.0': + resolution: {integrity: sha512-5eFsTjCyji25j6zznzlMc+wQAZJoL9oWy576xhqd2efv+N4g1swIzuSDcb1dz4gpcVC6veWe9pAwD7HnrGjLwg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.33.0': - resolution: {integrity: sha512-w8AQHyGDRZutxtQ7IURdBEddwFrtHQiG6+yIFpNJ4HiMyYEqeAWzwBQBfwSAxtSNh6Y9qqbbc1OM2mHN6AB3Uw==} + '@oxfmt/binding-win32-arm64-msvc@0.34.0': + resolution: {integrity: sha512-6id8kK0t5hKfbV6LHDzRO21wRTA6ctTlKGTZIsG/mcoir0rssvaYsedUymF4HDj7tbCUlnxCX/qOajKlEuqbIw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.33.0': - resolution: {integrity: sha512-j2X4iumKVwDzQtUx3JBDkaydx6eLuncgUZPl2ybZ8llxJMFbZIniws70FzUQePMfMtzLozIm7vo4bjkvQFsOzw==} + '@oxfmt/binding-win32-ia32-msvc@0.34.0': + resolution: {integrity: sha512-QHaz+w673mlYqn9v/+fuiKZpjkmagleXQ+NygShDv8tdHpRYX2oYhTJwwt9j1ZfVhRgza1EIUW3JmzCXmtPdhQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.33.0': - resolution: {integrity: sha512-lsBQxbepASwOBUh3chcKAjU+jVAQhLElbPYiagIq26cU8vA9Bttj6t20bMvCQCw31m440IRlNhrK7NpnUI8mzA==} + '@oxfmt/binding-win32-x64-msvc@0.34.0': + resolution: {integrity: sha512-CXKQM/VaF+yuvGru8ktleHLJoBdjBtTFmAsLGePiESiTN0NjCI/PiaiOCfHMJ1HdP1LykvARUwMvgaN3tDhcrg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxlint-tsgolint/darwin-arm64@0.14.1': - resolution: {integrity: sha512-PRV1nI1N7OQd4YBzdZGTv9JaBnu8aLWE30zoF4IHDiiQewqMK1U5gT5an20A7g32301Ddr2jIOGgbgTEHi7e8A==} + '@oxlint-tsgolint/darwin-arm64@0.14.2': + resolution: {integrity: sha512-03WxIXguCXf1pTmoG2C6vqRcbrU9GaJCW6uTIiQdIQq4BrJnVWZv99KEUQQRkuHK78lOLa9g7B4K58NcVcB54g==} cpu: [arm64] os: [darwin] - '@oxlint-tsgolint/darwin-x64@0.14.1': - resolution: {integrity: sha512-5wiV9kqrEqYhgdHWwF7k9BbprLfcqOVfLOY1wCgtMRWco91WAq+JgGsr362237iTRDfMyDbSBqsCO2ff2kFm0A==} + '@oxlint-tsgolint/darwin-x64@0.14.2': + resolution: {integrity: sha512-ksMLl1cIWz3Jw+U79BhyCPdvohZcJ/xAKri5bpT6oeEM2GVnQCHBk/KZKlYrd7hZUTxz0sLnnKHE11XFnLASNQ==} cpu: [x64] os: [darwin] - '@oxlint-tsgolint/linux-arm64@0.14.1': - resolution: {integrity: sha512-xBDRBNjkvekf/iXc00/DXZv5WOElBRBQeZnvQ106P+P1d5bqaN/QHX6kDhZU8g9cLmsp3b+TZm3oJzOf9q9lbQ==} + '@oxlint-tsgolint/linux-arm64@0.14.2': + resolution: {integrity: sha512-2BgR535w7GLxBCyQD5DR3dBzbAgiBbG5QX1kAEVzOmWxJhhGxt5lsHdHebRo7ilukYLpBDkerz0mbMErblghCQ==} cpu: [arm64] os: [linux] - '@oxlint-tsgolint/linux-x64@0.14.1': - resolution: {integrity: sha512-pUPo7UMShtIUJvOwRxrcIqvTg1tzzJMYZDIIAGIC8pN71UIqWu+yvMJEkY1X9ua1RxxBxDneomBRr+OEt/1I9w==} + '@oxlint-tsgolint/linux-x64@0.14.2': + resolution: {integrity: sha512-TUHFyVHfbbGtnTQZbUFgwvv3NzXBgzNLKdMUJw06thpiC7u5OW5qdk4yVXIC/xeVvdl3NAqTfcT4sA32aiMubg==} cpu: [x64] os: [linux] - '@oxlint-tsgolint/win32-arm64@0.14.1': - resolution: {integrity: sha512-N999HgAKg+YKwlywyBMHkYpvHAl6DgFax04KOJQR/wL8UHeA/MKtuFRXafLiUzyuALanxlFky3fMtC1RAr0ZEw==} + '@oxlint-tsgolint/win32-arm64@0.14.2': + resolution: {integrity: sha512-OfYHa/irfVggIFEC4TbawsI7Hwrttppv//sO/e00tu4b2QRga7+VHAwtCkSFWSr0+BsO4InRYVA0+pun5BinpQ==} cpu: [arm64] os: [win32] - '@oxlint-tsgolint/win32-x64@0.14.1': - resolution: {integrity: sha512-C4JD7oGC/wG+eygEeiqJRl1d3TRPmyA3aNqGf8KqJG6/MPjx7w1lZppMUcoyfED9HIlZTMLj7KHmtcbZJWR5rg==} + '@oxlint-tsgolint/win32-x64@0.14.2': + resolution: {integrity: sha512-5gxwbWYE2pP+pzrO4SEeYvLk4N609eAe18rVXUx+en3qtHBkU8VM2jBmMcZdIHn+G05leu4pYvwAvw6tvT9VbA==} cpu: [x64] os: [win32] - '@oxlint/binding-android-arm-eabi@1.48.0': - resolution: {integrity: sha512-1Pz/stJvveO9ZO7ll4ZoEY3f6j2FiUgBLBcCRCiW6ylId9L9UKs+gn3X28m3eTnoiFCkhKwmJJ+VO6vwsu7Qtg==} + '@oxlint/binding-android-arm-eabi@1.49.0': + resolution: {integrity: sha512-2WPoh/2oK9r/i2R4o4J18AOrm3HVlWiHZ8TnuCaS4dX8m5ZzRmHW0I3eLxEurQLHWVruhQN7fHgZnah+ag5iQg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxlint/binding-android-arm64@1.48.0': - resolution: {integrity: sha512-Zc42RWGE8huo6Ht0lXKjd0NH2lWNmimQHUmD0JFcvShLOuwN+RSEE/kRakc2/0LIgOUuU/R7PaDMCOdQlPgNUQ==} + '@oxlint/binding-android-arm64@1.49.0': + resolution: {integrity: sha512-YqJAGvNB11EzoKm1euVhZntb79alhMvWW/j12bYqdvVxn6xzEQWrEDCJg9BPo3A3tBCSUBKH7bVkAiCBqK/L1w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxlint/binding-darwin-arm64@1.48.0': - resolution: {integrity: sha512-jgZs563/4vaG5jH2RSt2TSh8A2jwsFdmhLXrElMdm3Mmto0HPf85FgInLSNi9HcwzQFvkYV8JofcoUg2GH1HTA==} + '@oxlint/binding-darwin-arm64@1.49.0': + resolution: {integrity: sha512-WFocCRlvVkMhChCJ2qpJfp1Gj/IjvyjuifH9Pex8m8yHonxxQa3d8DZYreuDQU3T4jvSY8rqhoRqnpc61Nlbxw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxlint/binding-darwin-x64@1.48.0': - resolution: {integrity: sha512-kvo87BujEUjCJREuWDC4aPh1WoXCRFFWE4C7uF6wuoMw2f6N2hypA/cHHcYn9DdL8R2RrgUZPefC8JExyeIMKA==} + '@oxlint/binding-darwin-x64@1.49.0': + resolution: {integrity: sha512-BN0KniwvehbUfYztOMwEDkYoojGm/narf5oJf+/ap+6PnzMeWLezMaVARNIS0j3OdMkjHTEP8s3+GdPJ7WDywQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxlint/binding-freebsd-x64@1.48.0': - resolution: {integrity: sha512-eyzzPaHQKn0RIM+ueDfgfJF2RU//Wp4oaKs2JVoVYcM5HjbCL36+O0S3wO5Xe1NWpcZIG3cEHc/SuOCDRqZDSg==} + '@oxlint/binding-freebsd-x64@1.49.0': + resolution: {integrity: sha512-SnkAc/DPIY6joMCiP/+53Q+N2UOGMU6ULvbztpmvPJNF/jYPGhNbKtN982uj2Gs6fpbxYkmyj08QnpkD4fbHJA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxlint/binding-linux-arm-gnueabihf@1.48.0': - resolution: {integrity: sha512-p3kSloztK7GRO7FyO3u38UCjZxQTl92VaLDsMQAq0eGoiNmeeEF1KPeE4+Fr+LSkQhF8WvJKSuls6TwOlurdPA==} + '@oxlint/binding-linux-arm-gnueabihf@1.49.0': + resolution: {integrity: sha512-6Z3EzRvpQVIpO7uFhdiGhdE8Mh3S2VWKLL9xuxVqD6fzPhyI3ugthpYXlCChXzO8FzcYIZ3t1+Kau+h2NY1hqA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm-musleabihf@1.48.0': - resolution: {integrity: sha512-uWM+wiTqLW/V0ZmY/eyTWs8ykhIkzU+K2tz/8m35YepYEzohiUGRbnkpAFXj2ioXpQL+GUe5vmM3SLH6ozlfFw==} + '@oxlint/binding-linux-arm-musleabihf@1.49.0': + resolution: {integrity: sha512-wdjXaQYAL/L25732mLlngfst4Jdmi/HLPVHb3yfCoP5mE3lO/pFFrmOJpqWodgv29suWY74Ij+RmJ/YIG5VuzQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm64-gnu@1.48.0': - resolution: {integrity: sha512-OhQNPjs/OICaYqxYJjKKMaIY7p3nJ9IirXcFoHKD+CQE1BZFCeUUAknMzUeLclDCfudH9Vb/UgjFm8+ZM5puAg==} + '@oxlint/binding-linux-arm64-gnu@1.49.0': + resolution: {integrity: sha512-oSHpm8zmSvAG1BWUumbDRSg7moJbnwoEXKAkwDf/xTQJOzvbUknq95NVQdw/AduZr5dePftalB8rzJNGBogUMg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxlint/binding-linux-arm64-musl@1.48.0': - resolution: {integrity: sha512-adu5txuwGvQ4C4fjYHJD+vnY+OCwCixBzn7J3KF3iWlVHBBImcosSv+Ye+fbMMJui4HGjifNXzonjKm9pXmOiw==} + '@oxlint/binding-linux-arm64-musl@1.49.0': + resolution: {integrity: sha512-xeqkMOARgGBlEg9BQuPDf6ZW711X6BT5qjDyeM5XNowCJeTSdmMhpePJjTEiVbbr3t21sIlK8RE6X5bc04nWyQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@oxlint/binding-linux-ppc64-gnu@1.48.0': - resolution: {integrity: sha512-inlQQRUnHCny/7b7wA6NjEoJSSZPNea4qnDhWyeqBYWx8ukf2kzNDSiamfhOw6bfAYPm/PVlkVRYaNXQbkLeTQ==} + '@oxlint/binding-linux-ppc64-gnu@1.49.0': + resolution: {integrity: sha512-uvcqRO6PnlJGbL7TeePhTK5+7/JXbxGbN+C6FVmfICDeeRomgQqrfVjf0lUrVpUU8ii8TSkIbNdft3M+oNlOsQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - '@oxlint/binding-linux-riscv64-gnu@1.48.0': - resolution: {integrity: sha512-YiJx6sW6bYebQDZRVWLKm/Drswx/hcjIgbLIhULSn0rRcBKc7d9V6mkqPjKDbhcxJgQD5Zi0yVccJiOdF40AWA==} + '@oxlint/binding-linux-riscv64-gnu@1.49.0': + resolution: {integrity: sha512-Dw1HkdXAwHNH+ZDserHP2RzXQmhHtpsYYI0hf8fuGAVCIVwvS6w1+InLxpPMY25P8ASRNiFN3hADtoh6lI+4lg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxlint/binding-linux-riscv64-musl@1.48.0': - resolution: {integrity: sha512-zwSqxMgmb2ITamNfDv9Q9EKBc/4ZhCBP9gkg2hhcgR6sEVGPUDl1AKPC89CBKMxkmPUi3685C38EvqtZn5OtHw==} + '@oxlint/binding-linux-riscv64-musl@1.49.0': + resolution: {integrity: sha512-EPlMYaA05tJ9km/0dI9K57iuMq3Tw+nHst7TNIegAJZrBPtsOtYaMFZEaWj02HA8FI5QvSnRHMt+CI+RIhXJBQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - '@oxlint/binding-linux-s390x-gnu@1.48.0': - resolution: {integrity: sha512-c/+2oUWAOsQB5JTem0rW8ODlZllF6pAtGSGXoLSvPTonKI1vAwaKhD9Qw1X36jRbcI3Etkpu/9z/RRjMba8vFQ==} + '@oxlint/binding-linux-s390x-gnu@1.49.0': + resolution: {integrity: sha512-yZiQL9qEwse34aMbnMb5VqiAWfDY+fLFuoJbHOuzB1OaJZbN1MRF9Nk+W89PIpGr5DNPDipwjZb8+Q7wOywoUQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - '@oxlint/binding-linux-x64-gnu@1.48.0': - resolution: {integrity: sha512-PhauDqeFW5DGed6QxCY5lXZYKSlcBdCXJnH03ZNU6QmDZ0BFM/zSy1oPT2MNb1Afx1G6yOOVk8ErjWsQ7c59ng==} + '@oxlint/binding-linux-x64-gnu@1.49.0': + resolution: {integrity: sha512-CcCDwMMXSchNkhdgvhVn3DLZ4EnBXAD8o8+gRzahg+IdSt/72y19xBgShJgadIRF0TsRcV/MhDUMwL5N/W54aQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxlint/binding-linux-x64-musl@1.48.0': - resolution: {integrity: sha512-6d7LIFFZGiavbHndhf1cK9kG9qmy2Dmr37sV9Ep7j3H+ciFdKSuOzdLh85mEUYMih+b+esMDlF5DU0WQRZPQjw==} + '@oxlint/binding-linux-x64-musl@1.49.0': + resolution: {integrity: sha512-u3HfKV8BV6t6UCCbN0RRiyqcymhrnpunVmLFI8sEa5S/EBu+p/0bJ3D7LZ2KT6PsBbrB71SWq4DeFrskOVgIZg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@oxlint/binding-openharmony-arm64@1.48.0': - resolution: {integrity: sha512-r+0KK9lK6vFp3tXAgDMOW32o12dxvKS3B9La1uYMGdWAMoSeu2RzG34KmzSpXu6MyLDl4aSVyZLFM8KGdEjwaw==} + '@oxlint/binding-openharmony-arm64@1.49.0': + resolution: {integrity: sha512-dRDpH9fw+oeUMpM4br0taYCFpW6jQtOuEIec89rOgDA1YhqwmeRcx0XYeCv7U48p57qJ1XZHeMGM9LdItIjfzA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxlint/binding-win32-arm64-msvc@1.48.0': - resolution: {integrity: sha512-Nkw/MocyT3HSp0OJsKPXrcbxZqSPMTYnLLfsqsoiFKoL1ppVNL65MFa7vuTxJehPlBkjy+95gUgacZtuNMECrg==} + '@oxlint/binding-win32-arm64-msvc@1.49.0': + resolution: {integrity: sha512-6rrKe/wL9tn0qnOy76i1/0f4Dc3dtQnibGlU4HqR/brVHlVjzLSoaH0gAFnLnznh9yQ6gcFTBFOPrcN/eKPDGA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxlint/binding-win32-ia32-msvc@1.48.0': - resolution: {integrity: sha512-reO1SpefvRmeZSP+WeyWkQd1ArxxDD1MyKgMUKuB8lNuUoxk9QEohYtKnsfsxJuFwMT0JTr7p9wZjouA85GzGQ==} + '@oxlint/binding-win32-ia32-msvc@1.49.0': + resolution: {integrity: sha512-CXHLWAtLs2xG/aVy1OZiYJzrULlq0QkYpI6cd7VKMrab+qur4fXVE/B1Bp1m0h1qKTj5/FTGg6oU4qaXMjS/ug==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxlint/binding-win32-x64-msvc@1.48.0': - resolution: {integrity: sha512-T6zwhfcsrorqAybkOglZdPkTLlEwipbtdO1qjE+flbawvwOMsISoyiuaa7vM7zEyfq1hmDvMq1ndvkYFioranA==} + '@oxlint/binding-win32-x64-msvc@1.49.0': + resolution: {integrity: sha512-VteIelt78kwzSglOozaQcs6BCS4Lk0j+QA+hGV0W8UeyaqQ3XpbZRhDU55NW1PPvCy1tg4VXsTlEaPovqto7nQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -2528,128 +2455,128 @@ packages: '@rolldown/pluginutils@1.0.0-rc.3': resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} - '@rollup/rollup-android-arm-eabi@4.57.1': - resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} + '@rollup/rollup-android-arm-eabi@4.58.0': + resolution: {integrity: sha512-mr0tmS/4FoVk1cnaeN244A/wjvGDNItZKR8hRhnmCzygyRXYtKF5jVDSIILR1U97CTzAYmbgIj/Dukg62ggG5w==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.57.1': - resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} + '@rollup/rollup-android-arm64@4.58.0': + resolution: {integrity: sha512-+s++dbp+/RTte62mQD9wLSbiMTV+xr/PeRJEc/sFZFSBRlHPNPVaf5FXlzAL77Mr8FtSfQqCN+I598M8U41ccQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.57.1': - resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} + '@rollup/rollup-darwin-arm64@4.58.0': + resolution: {integrity: sha512-MFWBwTcYs0jZbINQBXHfSrpSQJq3IUOakcKPzfeSznONop14Pxuqa0Kg19GD0rNBMPQI2tFtu3UzapZpH0Uc1Q==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.57.1': - resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} + '@rollup/rollup-darwin-x64@4.58.0': + resolution: {integrity: sha512-yiKJY7pj9c9JwzuKYLFaDZw5gma3fI9bkPEIyofvVfsPqjCWPglSHdpdwXpKGvDeYDms3Qal8qGMEHZ1M/4Udg==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.57.1': - resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} + '@rollup/rollup-freebsd-arm64@4.58.0': + resolution: {integrity: sha512-x97kCoBh5MOevpn/CNK9W1x8BEzO238541BGWBc315uOlN0AD/ifZ1msg+ZQB05Ux+VF6EcYqpiagfLJ8U3LvQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.57.1': - resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} + '@rollup/rollup-freebsd-x64@4.58.0': + resolution: {integrity: sha512-Aa8jPoZ6IQAG2eIrcXPpjRcMjROMFxCt1UYPZZtCxRV68WkuSigYtQ/7Zwrcr2IvtNJo7T2JfDXyMLxq5L4Jlg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': - resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} + '@rollup/rollup-linux-arm-gnueabihf@4.58.0': + resolution: {integrity: sha512-Ob8YgT5kD/lSIYW2Rcngs5kNB/44Q2RzBSPz9brf2WEtcGR7/f/E9HeHn1wYaAwKBni+bdXEwgHvUd0x12lQSA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.57.1': - resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} + '@rollup/rollup-linux-arm-musleabihf@4.58.0': + resolution: {integrity: sha512-K+RI5oP1ceqoadvNt1FecL17Qtw/n9BgRSzxif3rTL2QlIu88ccvY+Y9nnHe/cmT5zbH9+bpiJuG1mGHRVwF4Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.57.1': - resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} + '@rollup/rollup-linux-arm64-gnu@4.58.0': + resolution: {integrity: sha512-T+17JAsCKUjmbopcKepJjHWHXSjeW7O5PL7lEFaeQmiVyw4kkc5/lyYKzrv6ElWRX/MrEWfPiJWqbTvfIvjM1Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.57.1': - resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} + '@rollup/rollup-linux-arm64-musl@4.58.0': + resolution: {integrity: sha512-cCePktb9+6R9itIJdeCFF9txPU7pQeEHB5AbHu/MKsfH/k70ZtOeq1k4YAtBv9Z7mmKI5/wOLYjQ+B9QdxR6LA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.57.1': - resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} + '@rollup/rollup-linux-loong64-gnu@4.58.0': + resolution: {integrity: sha512-iekUaLkfliAsDl4/xSdoCJ1gnnIXvoNz85C8U8+ZxknM5pBStfZjeXgB8lXobDQvvPRCN8FPmmuTtH+z95HTmg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loong64-musl@4.57.1': - resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} + '@rollup/rollup-linux-loong64-musl@4.58.0': + resolution: {integrity: sha512-68ofRgJNl/jYJbxFjCKE7IwhbfxOl1muPN4KbIqAIe32lm22KmU7E8OPvyy68HTNkI2iV/c8y2kSPSm2mW/Q9Q==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.57.1': - resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} + '@rollup/rollup-linux-ppc64-gnu@4.58.0': + resolution: {integrity: sha512-dpz8vT0i+JqUKuSNPCP5SYyIV2Lh0sNL1+FhM7eLC457d5B9/BC3kDPp5BBftMmTNsBarcPcoz5UGSsnCiw4XQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-ppc64-musl@4.57.1': - resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} + '@rollup/rollup-linux-ppc64-musl@4.58.0': + resolution: {integrity: sha512-4gdkkf9UJ7tafnweBCR/mk4jf3Jfl0cKX9Np80t5i78kjIH0ZdezUv/JDI2VtruE5lunfACqftJ8dIMGN4oHew==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.57.1': - resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} + '@rollup/rollup-linux-riscv64-gnu@4.58.0': + resolution: {integrity: sha512-YFS4vPnOkDTD/JriUeeZurFYoJhPf9GQQEF/v4lltp3mVcBmnsAdjEWhr2cjUCZzZNzxCG0HZOvJU44UGHSdzw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.57.1': - resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} + '@rollup/rollup-linux-riscv64-musl@4.58.0': + resolution: {integrity: sha512-x2xgZlFne+QVNKV8b4wwaCS8pwq3y14zedZ5DqLzjdRITvreBk//4Knbcvm7+lWmms9V9qFp60MtUd0/t/PXPw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.57.1': - resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} + '@rollup/rollup-linux-s390x-gnu@4.58.0': + resolution: {integrity: sha512-jIhrujyn4UnWF8S+DHSkAkDEO3hLX0cjzxJZPLF80xFyzyUIYgSMRcYQ3+uqEoyDD2beGq7Dj7edi8OnJcS/hg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.57.1': - resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} + '@rollup/rollup-linux-x64-gnu@4.58.0': + resolution: {integrity: sha512-+410Srdoh78MKSJxTQ+hZ/Mx+ajd6RjjPwBPNd0R3J9FtL6ZA0GqiiyNjCO9In0IzZkCNrpGymSfn+kgyPQocg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.57.1': - resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} + '@rollup/rollup-linux-x64-musl@4.58.0': + resolution: {integrity: sha512-ZjMyby5SICi227y1MTR3VYBpFTdZs823Rs/hpakufleBoufoOIB6jtm9FEoxn/cgO7l6PM2rCEl5Kre5vX0QrQ==} cpu: [x64] os: [linux] - '@rollup/rollup-openbsd-x64@4.57.1': - resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} + '@rollup/rollup-openbsd-x64@4.58.0': + resolution: {integrity: sha512-ds4iwfYkSQ0k1nb8LTcyXw//ToHOnNTJtceySpL3fa7tc/AsE+UpUFphW126A6fKBGJD5dhRvg8zw1rvoGFxmw==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.57.1': - resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} + '@rollup/rollup-openharmony-arm64@4.58.0': + resolution: {integrity: sha512-fd/zpJniln4ICdPkjWFhZYeY/bpnaN9pGa6ko+5WD38I0tTqk9lXMgXZg09MNdhpARngmxiCg0B0XUamNw/5BQ==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.57.1': - resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} + '@rollup/rollup-win32-arm64-msvc@4.58.0': + resolution: {integrity: sha512-YpG8dUOip7DCz3nr/JUfPbIUo+2d/dy++5bFzgi4ugOGBIox+qMbbqt/JoORwvI/C9Kn2tz6+Bieoqd5+B1CjA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.57.1': - resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} + '@rollup/rollup-win32-ia32-msvc@4.58.0': + resolution: {integrity: sha512-b9DI8jpFQVh4hIXFr0/+N/TzLdpBIoPzjt0Rt4xJbW3mzguV3mduR9cNgiuFcuL/TeORejJhCWiAXe3E/6PxWA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.57.1': - resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} + '@rollup/rollup-win32-x64-gnu@4.58.0': + resolution: {integrity: sha512-CSrVpmoRJFN06LL9xhkitkwUcTZtIotYAF5p6XOR2zW0Zz5mzb3IPpcoPhB02frzMHFNo1reQ9xSF5fFm3hUsQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.57.1': - resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} + '@rollup/rollup-win32-x64-msvc@4.58.0': + resolution: {integrity: sha512-QFsBgQNTnh5K0t/sBsjJLq24YVqEIVkGpfN2VHsnN90soZyhaiA9UUHufcctVNL4ypJY0wrwad0wslx2KJQ1/w==} cpu: [x64] os: [win32] @@ -3059,43 +2986,43 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260219.1': - resolution: {integrity: sha512-h8gG6gE0YcxJZwxFc+JHjqCoFf/EBZ0k6znspV6+NwkyyJHMIqYiawZ7Lzu2Ka8lJDO3QxXcIdw2jKaktwW2wQ==} + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260221.1': + resolution: {integrity: sha512-m3ttEpK+eXV7P06RVZZuSuUvNDj8psXODrMJRRQWpTNsk3qITbIdBSgOx2Q/M3tbQ9Mo2IBHt6jUjqOdRW9oZQ==} cpu: [arm64] os: [darwin] - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260219.1': - resolution: {integrity: sha512-/tSFdSD76V4X3bX+iXecaa41KRuPMl1LQD3nsE45zZFdmDUIhvCwFRXDP+whkcdaJy8RJTALC0wWhIJ6FUmnwA==} + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260221.1': + resolution: {integrity: sha512-BNaNe3rox2rpkh5sWcnZZob6sDA/at9KK55/WSRAH4W+9dFReOLFAR9YXhKxrLGZ1QpleuIBahKbV8o037S+pA==} cpu: [x64] os: [darwin] - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260219.1': - resolution: {integrity: sha512-9MXFr+T5LQlXuDsKTtwFdN1lbaKSMmZzabT8Gr1C74ueun91IiJVhNNISwCWY48c28Ka6O6fwxeHjU44ee/G9Q==} + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260221.1': + resolution: {integrity: sha512-Y4jsvwDq86LXq63UYRLqCAd+nD1r6C2NVaGNR39H+c6D8SgOBkPLJa8quTH0Ir8E5bsR8vTN4E6xHY9jD4J2PA==} cpu: [arm64] os: [linux] - '@typescript/native-preview-linux-arm@7.0.0-dev.20260219.1': - resolution: {integrity: sha512-pmTGfe3VGoCmjyy9r68wurGBsoaqwYRZ8/i7cIxAJNnq1huKuXRnLnVoZm6uOzZ2GtjWFjwmXXCvcdfmy9+PvQ==} + '@typescript/native-preview-linux-arm@7.0.0-dev.20260221.1': + resolution: {integrity: sha512-+/uyIw7vg4FyAnNpsCJHmSOhMiR2m56lqaEo1J5pMAstJmfLTTKQdJ1muIWCDCqc24k2U30IStHOaCqUerp/nQ==} cpu: [arm] os: [linux] - '@typescript/native-preview-linux-x64@7.0.0-dev.20260219.1': - resolution: {integrity: sha512-EMLKx9koxTbdWFg+jaqy5MwZQ19usFug6Cw+evkCaFlDEfF5sgJ/npSRhNJLbZ451FR0eqNIKmIEA9cXlHSDuA==} + '@typescript/native-preview-linux-x64@7.0.0-dev.20260221.1': + resolution: {integrity: sha512-7agd5FtVLPp+gRMvsecSDmdQ/XM80q/uaQ6+Kahan9uNrCuPJIyMiAtJvCoYYgT1nXX2AjwZk39DH63fRaw/Mg==} cpu: [x64] os: [linux] - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260219.1': - resolution: {integrity: sha512-vILjYS1EnTZoiD1SfWBtk92qpDrFP9Ln38olonMjtO7mJO6SmN78GHhGR+dyGgNTHQ7PZAxGFiQwZJgrIMWNhw==} + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260221.1': + resolution: {integrity: sha512-lXbsy5vDzS//oE0evX+QwZBwpKselXTd8H18lT42CBQo2hL2r0+w9YBguaYXrnGkAoHjDXEfKA2xii8yVZKVUg==} cpu: [arm64] os: [win32] - '@typescript/native-preview-win32-x64@7.0.0-dev.20260219.1': - resolution: {integrity: sha512-wwjOQCSViLi+mqJycnRek7GeLZXmJClcZaVYFkLRVbmIMWvWSJkafasFjnQHDinXcLiXxZYdJ+oRR/86FOt2Xw==} + '@typescript/native-preview-win32-x64@7.0.0-dev.20260221.1': + resolution: {integrity: sha512-O02pfQlVlRTsBmp0hODs/bOHm2ic2kXZpIchBP5Qm0wKCp1Ytz/7i3SNT1gN47I+KC4axn/AHhFmkWQyIu9kRQ==} cpu: [x64] os: [win32] - '@typescript/native-preview@7.0.0-dev.20260219.1': - resolution: {integrity: sha512-Y/mfpmpZwfwyNzBgki/wUm/pWLQM2gaL5cum6lbOv8QNZUtzcIy0wTPaS08sb4yhUSGC1jGaJEPR2FNctfeC2Q==} + '@typescript/native-preview@7.0.0-dev.20260221.1': + resolution: {integrity: sha512-tEUzcnj6pD+z1vANchRzhpPl+3RMD+xQRvIN//0+qjtP5zyYB5T+MIaAWycpKDwlHP9C13JnQgcgYnC+LlNkrg==} hasBin: true '@typespec/ts-http-runtime@0.3.3': @@ -3211,8 +3138,8 @@ packages: peerDependencies: acorn: ^8 - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} hasBin: true @@ -3353,8 +3280,8 @@ packages: axios@1.13.5: resolution: {integrity: sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==} - balanced-match@4.0.2: - resolution: {integrity: sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg==} + balanced-match@4.0.3: + resolution: {integrity: sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==} engines: {node: 20 || >=22} base64-js@1.5.1: @@ -3651,8 +3578,8 @@ packages: discord-api-types@0.38.37: resolution: {integrity: sha512-Cv47jzY1jkGkh5sv0bfHYqGgKOWO1peOrGMkDFM4UmaGMOTgOW8QSexhvixa9sVOiz8MnVOBryWYyw/CEVhj7w==} - discord-api-types@0.38.39: - resolution: {integrity: sha512-XRdDQvZvID1XvcFftjSmd4dcmMi/RL/jSy5sduBDAvCGFcNFHThdIQXCEBDZFe52lCNEzuIL0QJoKYAmRmxLUA==} + discord-api-types@0.38.40: + resolution: {integrity: sha512-P/His8cotqZgQqrt+hzrocp9L8RhQQz1GkrCnC9TMJ8Uw2q0tg8YyqJyGULxhXn/8kxHETN4IppmOv+P2m82lQ==} dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -3953,6 +3880,10 @@ packages: resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} engines: {node: '>=18'} + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -3979,9 +3910,9 @@ packages: deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true - glob@13.0.5: - resolution: {integrity: sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw==} - engines: {node: 20 || >=22} + glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -4032,8 +3963,8 @@ packages: hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} - hashery@1.4.0: - resolution: {integrity: sha512-Wn2i1In6XFxl8Az55kkgnFRiAlIAushzh26PTjL2AKtQcEfXrcLa7Hn5QOWGZEf3LU057P9TwwZjFyxfS1VuvQ==} + hashery@1.5.0: + resolution: {integrity: sha512-nhQ6ExaOIqti2FDWoEMWARUqIKyjr2VcZzXShrI+A3zpeiuPWzx6iPftt44LhP74E5sW36B75N6VHbvRtpvO6Q==} engines: {node: '>=20'} hasown@2.0.2: @@ -4162,10 +4093,6 @@ packages: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} - is-network-error@1.3.0: - resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==} - engines: {node: '>=16'} - is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} @@ -4219,10 +4146,6 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jackspeak@4.2.3: - resolution: {integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==} - engines: {node: 20 || >=22} - jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -4580,8 +4503,8 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} minizlib@3.1.0: @@ -4642,9 +4565,6 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} - node-addon-api@5.1.0: - resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} - node-addon-api@8.5.0: resolution: {integrity: sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==} engines: {node: ^18 || ^20 || >= 21} @@ -4807,21 +4727,21 @@ packages: resolution: {integrity: sha512-4/8JfsetakdeEa4vAYV45FW20aY+B/+K8NEXp5Eiar3wR8726whgHrbSg5Ar/ZY1FLJ/AGtUqV7W2IVF+Gvp9A==} engines: {node: '>=20'} - oxfmt@0.33.0: - resolution: {integrity: sha512-ogxBXA9R4BFeo8F1HeMIIxHr5kGnQwKTYZ5k131AEGOq1zLxInNhvYSpyRQ+xIXVMYfCN7yZHKff/lb5lp4auQ==} + oxfmt@0.34.0: + resolution: {integrity: sha512-t+zTE4XGpzPTK+Zk9gSwcJcFi4pqjl6PwO/ZxPBJiJQ2XCKMucwjPlHxvPHyVKJtkMSyrDGfQ7Ntg/hUr4OgHQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - oxlint-tsgolint@0.14.1: - resolution: {integrity: sha512-+zbTyYt+86+8TcF//1NUoHs7v8kvu5vQvjnFZMerrhp5REzYFvgLdfT7LLBQd1qmTWeFQ4/ko1YLXKtoxTFxVw==} + oxlint-tsgolint@0.14.2: + resolution: {integrity: sha512-XJsFIQwnYJgXFlNDz2MncQMWYxwnfy4BCy73mdiFN/P13gEZrAfBU4Jmz2XXFf9UG0wPILdi7hYa6t0KmKQLhw==} hasBin: true - oxlint@1.48.0: - resolution: {integrity: sha512-m5vyVBgPtPhVCJc3xI//8je9lRc8bYuYB4R/1PH3VPGOjA4vjVhkHtyJukdEjYEjwrw4Qf1eIf+pP9xvfhfMow==} + oxlint@1.49.0: + resolution: {integrity: sha512-YZffp0gM+63CJoRhHjtjRnwKtAgUnXM6j63YQ++aigji2NVvLGsUlrXo9gJUXZOdcbfShLYtA6RuTu8GZ4lzOQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - oxlint-tsgolint: '>=0.12.2' + oxlint-tsgolint: '>=0.14.1' peerDependenciesMeta: oxlint-tsgolint: optional: true @@ -4842,10 +4762,6 @@ packages: resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} engines: {node: '>=8'} - p-retry@7.1.1: - resolution: {integrity: sha512-J5ApzjyRkkf601HpEeykoiCvzHQjWxPAHhyjFcEUP2SWq0+35NKh8TLhpLw+Dkq5TZBFvUM6UigdE9hIVYTl5w==} - engines: {node: '>=20'} - p-timeout@3.2.0: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} engines: {node: '>=8'} @@ -4910,9 +4826,9 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-scurry@2.0.1: - resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} - engines: {node: 20 || >=22} + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} @@ -5179,8 +5095,8 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rollup@4.57.1: - resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} + rollup@4.58.0: + resolution: {integrity: sha512-wbT0mBmWbIvvq8NeEYWWvevvxnOyhKChir47S66WCxw1SXqhw7ssIYejnQEVt7XYQpsj2y8F9PM+Cr3SNEa0gw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -5201,8 +5117,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sanitize-html@2.17.0: - resolution: {integrity: sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA==} + sanitize-html@2.17.1: + resolution: {integrity: sha512-ehFCW+q1a4CSOWRAdX97BX/6/PDEkCqw7/0JXZAGQV57FQB3YOkTa/rrzHPeJ+Aghy4vZAFfWMYyfxIiB7F/gw==} selderee@0.11.0: resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} @@ -5889,25 +5805,25 @@ snapshots: '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-bedrock-runtime@3.992.0': + '@aws-sdk/client-bedrock-runtime@3.995.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.10 - '@aws-sdk/credential-provider-node': 3.972.9 + '@aws-sdk/core': 3.973.11 + '@aws-sdk/credential-provider-node': 3.972.10 '@aws-sdk/eventstream-handler-node': 3.972.5 '@aws-sdk/middleware-eventstream': 3.972.3 '@aws-sdk/middleware-host-header': 3.972.3 '@aws-sdk/middleware-logger': 3.972.3 '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.10 + '@aws-sdk/middleware-user-agent': 3.972.11 '@aws-sdk/middleware-websocket': 3.972.6 '@aws-sdk/region-config-resolver': 3.972.3 - '@aws-sdk/token-providers': 3.992.0 + '@aws-sdk/token-providers': 3.995.0 '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.992.0 + '@aws-sdk/util-endpoints': 3.995.0 '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.8 + '@aws-sdk/util-user-agent-node': 3.972.10 '@smithy/config-resolver': 4.4.6 '@smithy/core': 3.23.2 '@smithy/eventstream-serde-browser': 4.2.8 @@ -5941,7 +5857,7 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-bedrock@3.993.0': + '@aws-sdk/client-bedrock@3.995.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 @@ -5952,54 +5868,11 @@ snapshots: '@aws-sdk/middleware-recursion-detection': 3.972.3 '@aws-sdk/middleware-user-agent': 3.972.11 '@aws-sdk/region-config-resolver': 3.972.3 - '@aws-sdk/token-providers': 3.993.0 + '@aws-sdk/token-providers': 3.995.0 '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.993.0 + '@aws-sdk/util-endpoints': 3.995.0 '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.9 - '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.23.2 - '@smithy/fetch-http-handler': 5.3.9 - '@smithy/hash-node': 4.2.8 - '@smithy/invalid-dependency': 4.2.8 - '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.16 - '@smithy/middleware-retry': 4.4.33 - '@smithy/middleware-serde': 4.2.9 - '@smithy/middleware-stack': 4.2.8 - '@smithy/node-config-provider': 4.3.8 - '@smithy/node-http-handler': 4.4.10 - '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.5 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.32 - '@smithy/util-defaults-mode-node': 4.2.35 - '@smithy/util-endpoints': 3.2.8 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-retry': 4.2.8 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-sso@3.990.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.10 - '@aws-sdk/middleware-host-header': 3.972.3 - '@aws-sdk/middleware-logger': 3.972.3 - '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.10 - '@aws-sdk/region-config-resolver': 3.972.3 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.990.0 - '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.8 + '@aws-sdk/util-user-agent-node': 3.972.10 '@smithy/config-resolver': 4.4.6 '@smithy/core': 3.23.2 '@smithy/fetch-http-handler': 5.3.9 @@ -6042,7 +5915,7 @@ snapshots: '@aws-sdk/types': 3.973.1 '@aws-sdk/util-endpoints': 3.993.0 '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.9 + '@aws-sdk/util-user-agent-node': 3.972.10 '@smithy/config-resolver': 4.4.6 '@smithy/core': 3.23.2 '@smithy/fetch-http-handler': 5.3.9 @@ -6072,22 +5945,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.973.10': - dependencies: - '@aws-sdk/types': 3.973.1 - '@aws-sdk/xml-builder': 3.972.4 - '@smithy/core': 3.23.2 - '@smithy/node-config-provider': 4.3.8 - '@smithy/property-provider': 4.2.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/signature-v4': 5.3.8 - '@smithy/smithy-client': 4.11.5 - '@smithy/types': 4.12.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - '@aws-sdk/core@3.973.11': dependencies: '@aws-sdk/types': 3.973.1 @@ -6104,14 +5961,6 @@ snapshots: '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.972.8': - dependencies: - '@aws-sdk/core': 3.973.10 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/types': 4.12.0 - tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.972.9': dependencies: '@aws-sdk/core': 3.973.11 @@ -6120,19 +5969,6 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.972.10': - dependencies: - '@aws-sdk/core': 3.973.10 - '@aws-sdk/types': 3.973.1 - '@smithy/fetch-http-handler': 5.3.9 - '@smithy/node-http-handler': 4.4.10 - '@smithy/property-provider': 4.2.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.5 - '@smithy/types': 4.12.0 - '@smithy/util-stream': 4.5.12 - tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.972.11': dependencies: '@aws-sdk/core': 3.973.11 @@ -6146,25 +5982,6 @@ snapshots: '@smithy/util-stream': 4.5.12 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.972.8': - dependencies: - '@aws-sdk/core': 3.973.10 - '@aws-sdk/credential-provider-env': 3.972.8 - '@aws-sdk/credential-provider-http': 3.972.10 - '@aws-sdk/credential-provider-login': 3.972.8 - '@aws-sdk/credential-provider-process': 3.972.8 - '@aws-sdk/credential-provider-sso': 3.972.8 - '@aws-sdk/credential-provider-web-identity': 3.972.8 - '@aws-sdk/nested-clients': 3.990.0 - '@aws-sdk/types': 3.973.1 - '@smithy/credential-provider-imds': 4.2.8 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/credential-provider-ini@3.972.9': dependencies: '@aws-sdk/core': 3.973.11 @@ -6184,19 +6001,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-login@3.972.8': - dependencies: - '@aws-sdk/core': 3.973.10 - '@aws-sdk/nested-clients': 3.990.0 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/credential-provider-login@3.972.9': dependencies: '@aws-sdk/core': 3.973.11 @@ -6227,32 +6031,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.972.9': - dependencies: - '@aws-sdk/credential-provider-env': 3.972.8 - '@aws-sdk/credential-provider-http': 3.972.10 - '@aws-sdk/credential-provider-ini': 3.972.8 - '@aws-sdk/credential-provider-process': 3.972.8 - '@aws-sdk/credential-provider-sso': 3.972.8 - '@aws-sdk/credential-provider-web-identity': 3.972.8 - '@aws-sdk/types': 3.973.1 - '@smithy/credential-provider-imds': 4.2.8 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-process@3.972.8': - dependencies: - '@aws-sdk/core': 3.973.10 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 - tslib: 2.8.1 - '@aws-sdk/credential-provider-process@3.972.9': dependencies: '@aws-sdk/core': 3.973.11 @@ -6262,19 +6040,6 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.972.8': - dependencies: - '@aws-sdk/client-sso': 3.990.0 - '@aws-sdk/core': 3.973.10 - '@aws-sdk/token-providers': 3.990.0 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/credential-provider-sso@3.972.9': dependencies: '@aws-sdk/client-sso': 3.993.0 @@ -6288,18 +6053,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-web-identity@3.972.8': - dependencies: - '@aws-sdk/core': 3.973.10 - '@aws-sdk/nested-clients': 3.990.0 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/credential-provider-web-identity@3.972.9': dependencies: '@aws-sdk/core': 3.973.11 @@ -6347,16 +6100,6 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.972.10': - dependencies: - '@aws-sdk/core': 3.973.10 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.990.0 - '@smithy/core': 3.23.2 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 - tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.972.11': dependencies: '@aws-sdk/core': 3.973.11 @@ -6382,92 +6125,6 @@ snapshots: '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.990.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.10 - '@aws-sdk/middleware-host-header': 3.972.3 - '@aws-sdk/middleware-logger': 3.972.3 - '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.10 - '@aws-sdk/region-config-resolver': 3.972.3 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.990.0 - '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.8 - '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.23.2 - '@smithy/fetch-http-handler': 5.3.9 - '@smithy/hash-node': 4.2.8 - '@smithy/invalid-dependency': 4.2.8 - '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.16 - '@smithy/middleware-retry': 4.4.33 - '@smithy/middleware-serde': 4.2.9 - '@smithy/middleware-stack': 4.2.8 - '@smithy/node-config-provider': 4.3.8 - '@smithy/node-http-handler': 4.4.10 - '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.5 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.32 - '@smithy/util-defaults-mode-node': 4.2.35 - '@smithy/util-endpoints': 3.2.8 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-retry': 4.2.8 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/nested-clients@3.992.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.973.10 - '@aws-sdk/middleware-host-header': 3.972.3 - '@aws-sdk/middleware-logger': 3.972.3 - '@aws-sdk/middleware-recursion-detection': 3.972.3 - '@aws-sdk/middleware-user-agent': 3.972.10 - '@aws-sdk/region-config-resolver': 3.972.3 - '@aws-sdk/types': 3.973.1 - '@aws-sdk/util-endpoints': 3.992.0 - '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.8 - '@smithy/config-resolver': 4.4.6 - '@smithy/core': 3.23.2 - '@smithy/fetch-http-handler': 5.3.9 - '@smithy/hash-node': 4.2.8 - '@smithy/invalid-dependency': 4.2.8 - '@smithy/middleware-content-length': 4.2.8 - '@smithy/middleware-endpoint': 4.4.16 - '@smithy/middleware-retry': 4.4.33 - '@smithy/middleware-serde': 4.2.9 - '@smithy/middleware-stack': 4.2.8 - '@smithy/node-config-provider': 4.3.8 - '@smithy/node-http-handler': 4.4.10 - '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.11.5 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.32 - '@smithy/util-defaults-mode-node': 4.2.35 - '@smithy/util-endpoints': 3.2.8 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-retry': 4.2.8 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/nested-clients@3.993.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -6481,7 +6138,50 @@ snapshots: '@aws-sdk/types': 3.973.1 '@aws-sdk/util-endpoints': 3.993.0 '@aws-sdk/util-user-agent-browser': 3.972.3 - '@aws-sdk/util-user-agent-node': 3.972.9 + '@aws-sdk/util-user-agent-node': 3.972.10 + '@smithy/config-resolver': 4.4.6 + '@smithy/core': 3.23.2 + '@smithy/fetch-http-handler': 5.3.9 + '@smithy/hash-node': 4.2.8 + '@smithy/invalid-dependency': 4.2.8 + '@smithy/middleware-content-length': 4.2.8 + '@smithy/middleware-endpoint': 4.4.16 + '@smithy/middleware-retry': 4.4.33 + '@smithy/middleware-serde': 4.2.9 + '@smithy/middleware-stack': 4.2.8 + '@smithy/node-config-provider': 4.3.8 + '@smithy/node-http-handler': 4.4.10 + '@smithy/protocol-http': 5.3.8 + '@smithy/smithy-client': 4.11.5 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-body-length-node': 4.2.1 + '@smithy/util-defaults-mode-browser': 4.3.32 + '@smithy/util-defaults-mode-node': 4.2.35 + '@smithy/util-endpoints': 3.2.8 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-retry': 4.2.8 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/nested-clients@3.995.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.973.11 + '@aws-sdk/middleware-host-header': 3.972.3 + '@aws-sdk/middleware-logger': 3.972.3 + '@aws-sdk/middleware-recursion-detection': 3.972.3 + '@aws-sdk/middleware-user-agent': 3.972.11 + '@aws-sdk/region-config-resolver': 3.972.3 + '@aws-sdk/types': 3.973.1 + '@aws-sdk/util-endpoints': 3.995.0 + '@aws-sdk/util-user-agent-browser': 3.972.3 + '@aws-sdk/util-user-agent-node': 3.972.10 '@smithy/config-resolver': 4.4.6 '@smithy/core': 3.23.2 '@smithy/fetch-http-handler': 5.3.9 @@ -6519,30 +6219,6 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/token-providers@3.990.0': - dependencies: - '@aws-sdk/core': 3.973.10 - '@aws-sdk/nested-clients': 3.990.0 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/token-providers@3.992.0': - dependencies: - '@aws-sdk/core': 3.973.10 - '@aws-sdk/nested-clients': 3.992.0 - '@aws-sdk/types': 3.973.1 - '@smithy/property-provider': 4.2.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - '@aws-sdk/token-providers@3.993.0': dependencies: '@aws-sdk/core': 3.973.11 @@ -6555,27 +6231,23 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/token-providers@3.995.0': + dependencies: + '@aws-sdk/core': 3.973.11 + '@aws-sdk/nested-clients': 3.995.0 + '@aws-sdk/types': 3.973.1 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/types@3.973.1': dependencies: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.990.0': - dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-endpoints': 3.2.8 - tslib: 2.8.1 - - '@aws-sdk/util-endpoints@3.992.0': - dependencies: - '@aws-sdk/types': 3.973.1 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-endpoints': 3.2.8 - tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.993.0': dependencies: '@aws-sdk/types': 3.973.1 @@ -6584,6 +6256,14 @@ snapshots: '@smithy/util-endpoints': 3.2.8 tslib: 2.8.1 + '@aws-sdk/util-endpoints@3.995.0': + dependencies: + '@aws-sdk/types': 3.973.1 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 + '@smithy/util-endpoints': 3.2.8 + tslib: 2.8.1 + '@aws-sdk/util-format-url@3.972.3': dependencies: '@aws-sdk/types': 3.973.1 @@ -6602,15 +6282,7 @@ snapshots: bowser: 2.14.1 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.972.8': - dependencies: - '@aws-sdk/middleware-user-agent': 3.972.10 - '@aws-sdk/types': 3.973.1 - '@smithy/node-config-provider': 4.3.8 - '@smithy/types': 4.12.0 - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-node@3.972.9': + '@aws-sdk/util-user-agent-node@3.972.10': dependencies: '@aws-sdk/middleware-user-agent': 3.972.11 '@aws-sdk/types': 3.973.1 @@ -6618,12 +6290,6 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.972.4': - dependencies: - '@smithy/types': 4.12.0 - fast-xml-parser: 5.3.6 - tslib: 2.8.1 - '@aws-sdk/xml-builder@3.972.5': dependencies: '@smithy/types': 4.12.0 @@ -6652,11 +6318,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@azure/msal-common@15.14.2': {} + '@azure/msal-common@16.0.4': {} - '@azure/msal-node@3.8.7': + '@azure/msal-node@5.0.4': dependencies: - '@azure/msal-common': 15.14.2 + '@azure/msal-common': 16.0.4 jsonwebtoken: 9.0.3 uuid: 8.3.2 @@ -6701,13 +6367,13 @@ snapshots: '@borewit/text-codec@0.2.1': {} - '@buape/carbon@0.0.0-beta-20260216184201(@discordjs/opus@0.9.0)(hono@4.11.10)(opusscript@0.0.8)': + '@buape/carbon@0.0.0-beta-20260216184201(@discordjs/opus@0.10.0)(hono@4.11.10)(opusscript@0.0.8)': dependencies: '@types/node': 25.3.0 discord-api-types: 0.38.37 optionalDependencies: '@cloudflare/workers-types': 4.20260120.0 - '@discordjs/voice': 0.19.0(@discordjs/opus@0.9.0)(opusscript@0.0.8) + '@discordjs/voice': 0.19.0(@discordjs/opus@0.10.0)(opusscript@0.0.8) '@hono/node-server': 1.19.9(hono@4.11.10) '@types/bun': 1.3.9 '@types/ws': 8.18.1 @@ -6736,7 +6402,7 @@ snapshots: '@cacheable/utils@2.3.4': dependencies: - hashery: 1.4.0 + hashery: 1.5.0 keyv: 5.6.0 '@clack/core@1.0.1': @@ -6847,19 +6513,19 @@ snapshots: - encoding - supports-color - '@discordjs/opus@0.9.0': + '@discordjs/opus@0.10.0': dependencies: '@discordjs/node-pre-gyp': 0.4.5 - node-addon-api: 5.1.0 + node-addon-api: 8.5.0 transitivePeerDependencies: - encoding - supports-color - '@discordjs/voice@0.19.0(@discordjs/opus@0.9.0)(opusscript@0.0.8)': + '@discordjs/voice@0.19.0(@discordjs/opus@0.10.0)(opusscript@0.0.8)': dependencies: '@types/ws': 8.18.1 - discord-api-types: 0.38.39 - prism-media: 1.3.5(@discordjs/opus@0.9.0)(opusscript@0.0.8) + discord-api-types: 0.38.40 + prism-media: 1.3.5(@discordjs/opus@0.10.0)(opusscript@0.0.8) tslib: 2.8.1 ws: 8.19.0 transitivePeerDependencies: @@ -6967,10 +6633,10 @@ snapshots: '@eshaz/web-worker@1.2.2': optional: true - '@google/genai@1.41.0': + '@google/genai@1.42.0': dependencies: google-auth-library: 10.5.0 - p-retry: 7.1.1 + p-retry: 4.6.2 protobufjs: 7.5.4 ws: 8.19.0 transitivePeerDependencies: @@ -7129,11 +6795,9 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@isaacs/cliui@9.0.0': {} - '@isaacs/fs-minipass@4.0.1': dependencies: - minipass: 7.1.2 + minipass: 7.1.3 '@jridgewell/gen-mapping@0.3.13': dependencies: @@ -7153,7 +6817,7 @@ snapshots: '@keyv/bigmap@1.3.1(keyv@5.6.0)': dependencies: - hashery: 1.4.0 + hashery: 1.5.0 hookified: 1.15.1 keyv: 5.6.0 @@ -7223,7 +6887,7 @@ snapshots: transitivePeerDependencies: - debug - '@lit-labs/signals@0.1.3': + '@lit-labs/signals@0.2.0': dependencies: lit: 3.3.2 signal-polyfill: 0.2.2 @@ -7329,8 +6993,8 @@ snapshots: '@mariozechner/pi-ai@0.54.0(ws@8.19.0)(zod@4.3.6)': dependencies: '@anthropic-ai/sdk': 0.73.0(zod@4.3.6) - '@aws-sdk/client-bedrock-runtime': 3.992.0 - '@google/genai': 1.41.0 + '@aws-sdk/client-bedrock-runtime': 3.995.0 + '@google/genai': 1.42.0 '@mistralai/mistralai': 1.10.0 '@sinclair/typebox': 0.34.48 ajv: 8.18.0 @@ -7361,7 +7025,7 @@ snapshots: cli-highlight: 2.1.11 diff: 8.0.3 file-type: 21.3.0 - glob: 13.0.5 + glob: 13.0.6 hosted-git-info: 9.0.2 ignore: 7.0.5 marked: 15.0.12 @@ -7383,7 +7047,7 @@ snapshots: dependencies: '@types/mime-types': 2.1.4 chalk: 5.6.2 - get-east-asian-width: 1.4.0 + get-east-asian-width: 1.5.0 koffi: 2.15.1 marked: 15.0.12 mime-types: 3.0.2 @@ -7395,7 +7059,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@microsoft/agents-activity@1.2.3': + '@microsoft/agents-activity@1.3.1': dependencies: debug: 4.4.3 uuid: 11.1.0 @@ -7403,11 +7067,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@microsoft/agents-hosting@1.2.3': + '@microsoft/agents-hosting@1.3.1': dependencies: '@azure/core-auth': 1.10.1 - '@azure/msal-node': 3.8.7 - '@microsoft/agents-activity': 1.2.3 + '@azure/msal-node': 5.0.4 + '@microsoft/agents-activity': 1.3.1 axios: 1.13.5(debug@4.4.3) jsonwebtoken: 9.0.3 jwks-rsa: 3.2.2 @@ -7427,67 +7091,67 @@ snapshots: '@napi-rs/canvas-android-arm64@0.1.92': optional: true - '@napi-rs/canvas-android-arm64@0.1.93': + '@napi-rs/canvas-android-arm64@0.1.94': optional: true '@napi-rs/canvas-darwin-arm64@0.1.92': optional: true - '@napi-rs/canvas-darwin-arm64@0.1.93': + '@napi-rs/canvas-darwin-arm64@0.1.94': optional: true '@napi-rs/canvas-darwin-x64@0.1.92': optional: true - '@napi-rs/canvas-darwin-x64@0.1.93': + '@napi-rs/canvas-darwin-x64@0.1.94': optional: true '@napi-rs/canvas-linux-arm-gnueabihf@0.1.92': optional: true - '@napi-rs/canvas-linux-arm-gnueabihf@0.1.93': + '@napi-rs/canvas-linux-arm-gnueabihf@0.1.94': optional: true '@napi-rs/canvas-linux-arm64-gnu@0.1.92': optional: true - '@napi-rs/canvas-linux-arm64-gnu@0.1.93': + '@napi-rs/canvas-linux-arm64-gnu@0.1.94': optional: true '@napi-rs/canvas-linux-arm64-musl@0.1.92': optional: true - '@napi-rs/canvas-linux-arm64-musl@0.1.93': + '@napi-rs/canvas-linux-arm64-musl@0.1.94': optional: true '@napi-rs/canvas-linux-riscv64-gnu@0.1.92': optional: true - '@napi-rs/canvas-linux-riscv64-gnu@0.1.93': + '@napi-rs/canvas-linux-riscv64-gnu@0.1.94': optional: true '@napi-rs/canvas-linux-x64-gnu@0.1.92': optional: true - '@napi-rs/canvas-linux-x64-gnu@0.1.93': + '@napi-rs/canvas-linux-x64-gnu@0.1.94': optional: true '@napi-rs/canvas-linux-x64-musl@0.1.92': optional: true - '@napi-rs/canvas-linux-x64-musl@0.1.93': + '@napi-rs/canvas-linux-x64-musl@0.1.94': optional: true '@napi-rs/canvas-win32-arm64-msvc@0.1.92': optional: true - '@napi-rs/canvas-win32-arm64-msvc@0.1.93': + '@napi-rs/canvas-win32-arm64-msvc@0.1.94': optional: true '@napi-rs/canvas-win32-x64-msvc@0.1.92': optional: true - '@napi-rs/canvas-win32-x64-msvc@0.1.93': + '@napi-rs/canvas-win32-x64-msvc@0.1.94': optional: true '@napi-rs/canvas@0.1.92': @@ -7504,19 +7168,19 @@ snapshots: '@napi-rs/canvas-win32-arm64-msvc': 0.1.92 '@napi-rs/canvas-win32-x64-msvc': 0.1.92 - '@napi-rs/canvas@0.1.93': + '@napi-rs/canvas@0.1.94': optionalDependencies: - '@napi-rs/canvas-android-arm64': 0.1.93 - '@napi-rs/canvas-darwin-arm64': 0.1.93 - '@napi-rs/canvas-darwin-x64': 0.1.93 - '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.93 - '@napi-rs/canvas-linux-arm64-gnu': 0.1.93 - '@napi-rs/canvas-linux-arm64-musl': 0.1.93 - '@napi-rs/canvas-linux-riscv64-gnu': 0.1.93 - '@napi-rs/canvas-linux-x64-gnu': 0.1.93 - '@napi-rs/canvas-linux-x64-musl': 0.1.93 - '@napi-rs/canvas-win32-arm64-msvc': 0.1.93 - '@napi-rs/canvas-win32-x64-msvc': 0.1.93 + '@napi-rs/canvas-android-arm64': 0.1.94 + '@napi-rs/canvas-darwin-arm64': 0.1.94 + '@napi-rs/canvas-darwin-x64': 0.1.94 + '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.94 + '@napi-rs/canvas-linux-arm64-gnu': 0.1.94 + '@napi-rs/canvas-linux-arm64-musl': 0.1.94 + '@napi-rs/canvas-linux-riscv64-gnu': 0.1.94 + '@napi-rs/canvas-linux-x64-gnu': 0.1.94 + '@napi-rs/canvas-linux-x64-musl': 0.1.94 + '@napi-rs/canvas-win32-arm64-msvc': 0.1.94 + '@napi-rs/canvas-win32-x64-msvc': 0.1.94 optional: true '@napi-rs/wasm-runtime@1.1.1': @@ -7960,136 +7624,136 @@ snapshots: '@oxc-project/types@0.112.0': {} - '@oxfmt/binding-android-arm-eabi@0.33.0': + '@oxfmt/binding-android-arm-eabi@0.34.0': optional: true - '@oxfmt/binding-android-arm64@0.33.0': + '@oxfmt/binding-android-arm64@0.34.0': optional: true - '@oxfmt/binding-darwin-arm64@0.33.0': + '@oxfmt/binding-darwin-arm64@0.34.0': optional: true - '@oxfmt/binding-darwin-x64@0.33.0': + '@oxfmt/binding-darwin-x64@0.34.0': optional: true - '@oxfmt/binding-freebsd-x64@0.33.0': + '@oxfmt/binding-freebsd-x64@0.34.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.33.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.34.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.33.0': + '@oxfmt/binding-linux-arm-musleabihf@0.34.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.33.0': + '@oxfmt/binding-linux-arm64-gnu@0.34.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.33.0': + '@oxfmt/binding-linux-arm64-musl@0.34.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.33.0': + '@oxfmt/binding-linux-ppc64-gnu@0.34.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.33.0': + '@oxfmt/binding-linux-riscv64-gnu@0.34.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.33.0': + '@oxfmt/binding-linux-riscv64-musl@0.34.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.33.0': + '@oxfmt/binding-linux-s390x-gnu@0.34.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.33.0': + '@oxfmt/binding-linux-x64-gnu@0.34.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.33.0': + '@oxfmt/binding-linux-x64-musl@0.34.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.33.0': + '@oxfmt/binding-openharmony-arm64@0.34.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.33.0': + '@oxfmt/binding-win32-arm64-msvc@0.34.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.33.0': + '@oxfmt/binding-win32-ia32-msvc@0.34.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.33.0': + '@oxfmt/binding-win32-x64-msvc@0.34.0': optional: true - '@oxlint-tsgolint/darwin-arm64@0.14.1': + '@oxlint-tsgolint/darwin-arm64@0.14.2': optional: true - '@oxlint-tsgolint/darwin-x64@0.14.1': + '@oxlint-tsgolint/darwin-x64@0.14.2': optional: true - '@oxlint-tsgolint/linux-arm64@0.14.1': + '@oxlint-tsgolint/linux-arm64@0.14.2': optional: true - '@oxlint-tsgolint/linux-x64@0.14.1': + '@oxlint-tsgolint/linux-x64@0.14.2': optional: true - '@oxlint-tsgolint/win32-arm64@0.14.1': + '@oxlint-tsgolint/win32-arm64@0.14.2': optional: true - '@oxlint-tsgolint/win32-x64@0.14.1': + '@oxlint-tsgolint/win32-x64@0.14.2': optional: true - '@oxlint/binding-android-arm-eabi@1.48.0': + '@oxlint/binding-android-arm-eabi@1.49.0': optional: true - '@oxlint/binding-android-arm64@1.48.0': + '@oxlint/binding-android-arm64@1.49.0': optional: true - '@oxlint/binding-darwin-arm64@1.48.0': + '@oxlint/binding-darwin-arm64@1.49.0': optional: true - '@oxlint/binding-darwin-x64@1.48.0': + '@oxlint/binding-darwin-x64@1.49.0': optional: true - '@oxlint/binding-freebsd-x64@1.48.0': + '@oxlint/binding-freebsd-x64@1.49.0': optional: true - '@oxlint/binding-linux-arm-gnueabihf@1.48.0': + '@oxlint/binding-linux-arm-gnueabihf@1.49.0': optional: true - '@oxlint/binding-linux-arm-musleabihf@1.48.0': + '@oxlint/binding-linux-arm-musleabihf@1.49.0': optional: true - '@oxlint/binding-linux-arm64-gnu@1.48.0': + '@oxlint/binding-linux-arm64-gnu@1.49.0': optional: true - '@oxlint/binding-linux-arm64-musl@1.48.0': + '@oxlint/binding-linux-arm64-musl@1.49.0': optional: true - '@oxlint/binding-linux-ppc64-gnu@1.48.0': + '@oxlint/binding-linux-ppc64-gnu@1.49.0': optional: true - '@oxlint/binding-linux-riscv64-gnu@1.48.0': + '@oxlint/binding-linux-riscv64-gnu@1.49.0': optional: true - '@oxlint/binding-linux-riscv64-musl@1.48.0': + '@oxlint/binding-linux-riscv64-musl@1.49.0': optional: true - '@oxlint/binding-linux-s390x-gnu@1.48.0': + '@oxlint/binding-linux-s390x-gnu@1.49.0': optional: true - '@oxlint/binding-linux-x64-gnu@1.48.0': + '@oxlint/binding-linux-x64-gnu@1.49.0': optional: true - '@oxlint/binding-linux-x64-musl@1.48.0': + '@oxlint/binding-linux-x64-musl@1.49.0': optional: true - '@oxlint/binding-openharmony-arm64@1.48.0': + '@oxlint/binding-openharmony-arm64@1.49.0': optional: true - '@oxlint/binding-win32-arm64-msvc@1.48.0': + '@oxlint/binding-win32-arm64-msvc@1.49.0': optional: true - '@oxlint/binding-win32-ia32-msvc@1.48.0': + '@oxlint/binding-win32-ia32-msvc@1.49.0': optional: true - '@oxlint/binding-win32-x64-msvc@1.48.0': + '@oxlint/binding-win32-x64-msvc@1.49.0': optional: true '@pinojs/redact@0.4.0': {} @@ -8205,79 +7869,79 @@ snapshots: '@rolldown/pluginutils@1.0.0-rc.3': {} - '@rollup/rollup-android-arm-eabi@4.57.1': + '@rollup/rollup-android-arm-eabi@4.58.0': optional: true - '@rollup/rollup-android-arm64@4.57.1': + '@rollup/rollup-android-arm64@4.58.0': optional: true - '@rollup/rollup-darwin-arm64@4.57.1': + '@rollup/rollup-darwin-arm64@4.58.0': optional: true - '@rollup/rollup-darwin-x64@4.57.1': + '@rollup/rollup-darwin-x64@4.58.0': optional: true - '@rollup/rollup-freebsd-arm64@4.57.1': + '@rollup/rollup-freebsd-arm64@4.58.0': optional: true - '@rollup/rollup-freebsd-x64@4.57.1': + '@rollup/rollup-freebsd-x64@4.58.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': + '@rollup/rollup-linux-arm-gnueabihf@4.58.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.57.1': + '@rollup/rollup-linux-arm-musleabihf@4.58.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.57.1': + '@rollup/rollup-linux-arm64-gnu@4.58.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.57.1': + '@rollup/rollup-linux-arm64-musl@4.58.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.57.1': + '@rollup/rollup-linux-loong64-gnu@4.58.0': optional: true - '@rollup/rollup-linux-loong64-musl@4.57.1': + '@rollup/rollup-linux-loong64-musl@4.58.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.57.1': + '@rollup/rollup-linux-ppc64-gnu@4.58.0': optional: true - '@rollup/rollup-linux-ppc64-musl@4.57.1': + '@rollup/rollup-linux-ppc64-musl@4.58.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.57.1': + '@rollup/rollup-linux-riscv64-gnu@4.58.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.57.1': + '@rollup/rollup-linux-riscv64-musl@4.58.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.57.1': + '@rollup/rollup-linux-s390x-gnu@4.58.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.57.1': + '@rollup/rollup-linux-x64-gnu@4.58.0': optional: true - '@rollup/rollup-linux-x64-musl@4.57.1': + '@rollup/rollup-linux-x64-musl@4.58.0': optional: true - '@rollup/rollup-openbsd-x64@4.57.1': + '@rollup/rollup-openbsd-x64@4.58.0': optional: true - '@rollup/rollup-openharmony-arm64@4.57.1': + '@rollup/rollup-openharmony-arm64@4.58.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.57.1': + '@rollup/rollup-win32-arm64-msvc@4.58.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.57.1': + '@rollup/rollup-win32-ia32-msvc@4.58.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.57.1': + '@rollup/rollup-win32-x64-gnu@4.58.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.57.1': + '@rollup/rollup-win32-x64-msvc@4.58.0': optional: true '@scure/base@2.0.0': {} @@ -8895,36 +8559,36 @@ snapshots: dependencies: '@types/node': 25.3.0 - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260219.1': + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260221.1': optional: true - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260219.1': + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260221.1': optional: true - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260219.1': + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260221.1': optional: true - '@typescript/native-preview-linux-arm@7.0.0-dev.20260219.1': + '@typescript/native-preview-linux-arm@7.0.0-dev.20260221.1': optional: true - '@typescript/native-preview-linux-x64@7.0.0-dev.20260219.1': + '@typescript/native-preview-linux-x64@7.0.0-dev.20260221.1': optional: true - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260219.1': + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260221.1': optional: true - '@typescript/native-preview-win32-x64@7.0.0-dev.20260219.1': + '@typescript/native-preview-win32-x64@7.0.0-dev.20260221.1': optional: true - '@typescript/native-preview@7.0.0-dev.20260219.1': + '@typescript/native-preview@7.0.0-dev.20260221.1': optionalDependencies: - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260219.1 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260219.1 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20260219.1 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260219.1 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20260219.1 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260219.1 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20260219.1 + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260221.1 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260221.1 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20260221.1 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260221.1 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20260221.1 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260221.1 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20260221.1 '@typespec/ts-http-runtime@0.3.3': dependencies: @@ -8956,7 +8620,7 @@ snapshots: postgres: 3.4.8 request: '@cypress/request@3.0.10' request-promise: '@cypress/request-promise@5.0.0(@cypress/request@3.0.10)(@cypress/request@3.0.10)' - sanitize-html: 2.17.0 + sanitize-html: 2.17.1 transitivePeerDependencies: - '@cypress/request' - supports-color @@ -9110,11 +8774,11 @@ snapshots: mime-types: 3.0.2 negotiator: 1.0.0 - acorn-import-attributes@1.9.5(acorn@8.15.0): + acorn-import-attributes@1.9.5(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 - acorn@8.15.0: {} + acorn@8.16.0: {} agent-base@6.0.2: dependencies: @@ -9253,9 +8917,7 @@ snapshots: transitivePeerDependencies: - debug - balanced-match@4.0.2: - dependencies: - jackspeak: 4.2.3 + balanced-match@4.0.3: {} base64-js@1.5.1: {} @@ -9316,7 +8978,7 @@ snapshots: brace-expansion@5.0.2: dependencies: - balanced-match: 4.0.2 + balanced-match: 4.0.3 buffer-equal-constant-time@1.0.1: {} @@ -9537,7 +9199,7 @@ snapshots: discord-api-types@0.38.37: {} - discord-api-types@0.38.39: {} + discord-api-types@0.38.40: {} dom-serializer@2.0.0: dependencies: @@ -9906,6 +9568,8 @@ snapshots: get-east-asian-width@1.4.0: {} + get-east-asian-width@1.5.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -9947,15 +9611,15 @@ snapshots: foreground-child: 3.3.1 jackspeak: 3.4.3 minimatch: 10.2.1 - minipass: 7.1.2 + minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - glob@13.0.5: + glob@13.0.6: dependencies: minimatch: 10.2.1 - minipass: 7.1.2 - path-scurry: 2.0.1 + minipass: 7.1.3 + path-scurry: 2.0.2 glob@7.2.3: dependencies: @@ -10018,7 +9682,7 @@ snapshots: inherits: 2.0.4 minimalistic-assert: 1.0.1 - hashery@1.4.0: + hashery@1.5.0: dependencies: hookified: 1.15.1 @@ -10118,8 +9782,8 @@ snapshots: import-in-the-middle@2.0.6: dependencies: - acorn: 8.15.0 - acorn-import-attributes: 1.9.5(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) cjs-module-lexer: 2.2.0 module-details-from-path: 1.0.4 @@ -10185,8 +9849,6 @@ snapshots: is-interactive@2.0.0: {} - is-network-error@1.3.0: {} - is-plain-object@5.0.0: {} is-promise@2.2.2: {} @@ -10228,10 +9890,6 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jackspeak@4.2.3: - dependencies: - '@isaacs/cliui': 9.0.0 - jiti@2.6.1: {} jose@4.15.9: {} @@ -10555,11 +10213,11 @@ snapshots: minimist@1.2.8: {} - minipass@7.1.2: {} + minipass@7.1.3: {} minizlib@3.1.0: dependencies: - minipass: 7.1.2 + minipass: 7.1.3 mkdirp@3.0.1: {} @@ -10617,8 +10275,6 @@ snapshots: netmask@2.0.2: {} - node-addon-api@5.1.0: {} - node-addon-api@8.5.0: {} node-api-headers@1.8.0: {} @@ -10819,61 +10475,61 @@ snapshots: osc-progress@0.3.0: {} - oxfmt@0.33.0: + oxfmt@0.34.0: dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.33.0 - '@oxfmt/binding-android-arm64': 0.33.0 - '@oxfmt/binding-darwin-arm64': 0.33.0 - '@oxfmt/binding-darwin-x64': 0.33.0 - '@oxfmt/binding-freebsd-x64': 0.33.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.33.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.33.0 - '@oxfmt/binding-linux-arm64-gnu': 0.33.0 - '@oxfmt/binding-linux-arm64-musl': 0.33.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.33.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.33.0 - '@oxfmt/binding-linux-riscv64-musl': 0.33.0 - '@oxfmt/binding-linux-s390x-gnu': 0.33.0 - '@oxfmt/binding-linux-x64-gnu': 0.33.0 - '@oxfmt/binding-linux-x64-musl': 0.33.0 - '@oxfmt/binding-openharmony-arm64': 0.33.0 - '@oxfmt/binding-win32-arm64-msvc': 0.33.0 - '@oxfmt/binding-win32-ia32-msvc': 0.33.0 - '@oxfmt/binding-win32-x64-msvc': 0.33.0 + '@oxfmt/binding-android-arm-eabi': 0.34.0 + '@oxfmt/binding-android-arm64': 0.34.0 + '@oxfmt/binding-darwin-arm64': 0.34.0 + '@oxfmt/binding-darwin-x64': 0.34.0 + '@oxfmt/binding-freebsd-x64': 0.34.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.34.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.34.0 + '@oxfmt/binding-linux-arm64-gnu': 0.34.0 + '@oxfmt/binding-linux-arm64-musl': 0.34.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.34.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.34.0 + '@oxfmt/binding-linux-riscv64-musl': 0.34.0 + '@oxfmt/binding-linux-s390x-gnu': 0.34.0 + '@oxfmt/binding-linux-x64-gnu': 0.34.0 + '@oxfmt/binding-linux-x64-musl': 0.34.0 + '@oxfmt/binding-openharmony-arm64': 0.34.0 + '@oxfmt/binding-win32-arm64-msvc': 0.34.0 + '@oxfmt/binding-win32-ia32-msvc': 0.34.0 + '@oxfmt/binding-win32-x64-msvc': 0.34.0 - oxlint-tsgolint@0.14.1: + oxlint-tsgolint@0.14.2: optionalDependencies: - '@oxlint-tsgolint/darwin-arm64': 0.14.1 - '@oxlint-tsgolint/darwin-x64': 0.14.1 - '@oxlint-tsgolint/linux-arm64': 0.14.1 - '@oxlint-tsgolint/linux-x64': 0.14.1 - '@oxlint-tsgolint/win32-arm64': 0.14.1 - '@oxlint-tsgolint/win32-x64': 0.14.1 + '@oxlint-tsgolint/darwin-arm64': 0.14.2 + '@oxlint-tsgolint/darwin-x64': 0.14.2 + '@oxlint-tsgolint/linux-arm64': 0.14.2 + '@oxlint-tsgolint/linux-x64': 0.14.2 + '@oxlint-tsgolint/win32-arm64': 0.14.2 + '@oxlint-tsgolint/win32-x64': 0.14.2 - oxlint@1.48.0(oxlint-tsgolint@0.14.1): + oxlint@1.49.0(oxlint-tsgolint@0.14.2): optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.48.0 - '@oxlint/binding-android-arm64': 1.48.0 - '@oxlint/binding-darwin-arm64': 1.48.0 - '@oxlint/binding-darwin-x64': 1.48.0 - '@oxlint/binding-freebsd-x64': 1.48.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.48.0 - '@oxlint/binding-linux-arm-musleabihf': 1.48.0 - '@oxlint/binding-linux-arm64-gnu': 1.48.0 - '@oxlint/binding-linux-arm64-musl': 1.48.0 - '@oxlint/binding-linux-ppc64-gnu': 1.48.0 - '@oxlint/binding-linux-riscv64-gnu': 1.48.0 - '@oxlint/binding-linux-riscv64-musl': 1.48.0 - '@oxlint/binding-linux-s390x-gnu': 1.48.0 - '@oxlint/binding-linux-x64-gnu': 1.48.0 - '@oxlint/binding-linux-x64-musl': 1.48.0 - '@oxlint/binding-openharmony-arm64': 1.48.0 - '@oxlint/binding-win32-arm64-msvc': 1.48.0 - '@oxlint/binding-win32-ia32-msvc': 1.48.0 - '@oxlint/binding-win32-x64-msvc': 1.48.0 - oxlint-tsgolint: 0.14.1 + '@oxlint/binding-android-arm-eabi': 1.49.0 + '@oxlint/binding-android-arm64': 1.49.0 + '@oxlint/binding-darwin-arm64': 1.49.0 + '@oxlint/binding-darwin-x64': 1.49.0 + '@oxlint/binding-freebsd-x64': 1.49.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.49.0 + '@oxlint/binding-linux-arm-musleabihf': 1.49.0 + '@oxlint/binding-linux-arm64-gnu': 1.49.0 + '@oxlint/binding-linux-arm64-musl': 1.49.0 + '@oxlint/binding-linux-ppc64-gnu': 1.49.0 + '@oxlint/binding-linux-riscv64-gnu': 1.49.0 + '@oxlint/binding-linux-riscv64-musl': 1.49.0 + '@oxlint/binding-linux-s390x-gnu': 1.49.0 + '@oxlint/binding-linux-x64-gnu': 1.49.0 + '@oxlint/binding-linux-x64-musl': 1.49.0 + '@oxlint/binding-openharmony-arm64': 1.49.0 + '@oxlint/binding-win32-arm64-msvc': 1.49.0 + '@oxlint/binding-win32-ia32-msvc': 1.49.0 + '@oxlint/binding-win32-x64-msvc': 1.49.0 + oxlint-tsgolint: 0.14.2 p-finally@1.0.0: {} @@ -10892,10 +10548,6 @@ snapshots: '@types/retry': 0.12.0 retry: 0.13.1 - p-retry@7.1.1: - dependencies: - is-network-error: 1.3.0 - p-timeout@3.2.0: dependencies: p-finally: 1.0.0 @@ -10954,12 +10606,12 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 7.1.3 - path-scurry@2.0.1: + path-scurry@2.0.2: dependencies: lru-cache: 11.2.6 - minipass: 7.1.2 + minipass: 7.1.3 path-to-regexp@0.1.12: {} @@ -10969,7 +10621,7 @@ snapshots: pdfjs-dist@5.4.624: optionalDependencies: - '@napi-rs/canvas': 0.1.93 + '@napi-rs/canvas': 0.1.94 node-readable-to-web-readable-stream: 0.4.2 peberminta@0.9.0: {} @@ -11034,9 +10686,9 @@ snapshots: dependencies: parse-ms: 4.0.0 - prism-media@1.3.5(@discordjs/opus@0.9.0)(opusscript@0.0.8): + prism-media@1.3.5(@discordjs/opus@0.10.0)(opusscript@0.0.8): optionalDependencies: - '@discordjs/opus': 0.9.0 + '@discordjs/opus': 0.10.0 opusscript: 0.0.8 process-nextick-args@2.0.1: {} @@ -11226,7 +10878,7 @@ snapshots: dependencies: glob: 10.5.0 - rolldown-plugin-dts@0.22.1(@typescript/native-preview@7.0.0-dev.20260219.1)(rolldown@1.0.0-rc.3)(typescript@5.9.3): + rolldown-plugin-dts@0.22.1(@typescript/native-preview@7.0.0-dev.20260221.1)(rolldown@1.0.0-rc.3)(typescript@5.9.3): dependencies: '@babel/generator': 8.0.0-rc.1 '@babel/helper-validator-identifier': 8.0.0-rc.1 @@ -11239,7 +10891,7 @@ snapshots: obug: 2.1.1 rolldown: 1.0.0-rc.3 optionalDependencies: - '@typescript/native-preview': 7.0.0-dev.20260219.1 + '@typescript/native-preview': 7.0.0-dev.20260221.1 typescript: 5.9.3 transitivePeerDependencies: - oxc-resolver @@ -11263,35 +10915,35 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.3 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.3 - rollup@4.57.1: + rollup@4.58.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.57.1 - '@rollup/rollup-android-arm64': 4.57.1 - '@rollup/rollup-darwin-arm64': 4.57.1 - '@rollup/rollup-darwin-x64': 4.57.1 - '@rollup/rollup-freebsd-arm64': 4.57.1 - '@rollup/rollup-freebsd-x64': 4.57.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 - '@rollup/rollup-linux-arm-musleabihf': 4.57.1 - '@rollup/rollup-linux-arm64-gnu': 4.57.1 - '@rollup/rollup-linux-arm64-musl': 4.57.1 - '@rollup/rollup-linux-loong64-gnu': 4.57.1 - '@rollup/rollup-linux-loong64-musl': 4.57.1 - '@rollup/rollup-linux-ppc64-gnu': 4.57.1 - '@rollup/rollup-linux-ppc64-musl': 4.57.1 - '@rollup/rollup-linux-riscv64-gnu': 4.57.1 - '@rollup/rollup-linux-riscv64-musl': 4.57.1 - '@rollup/rollup-linux-s390x-gnu': 4.57.1 - '@rollup/rollup-linux-x64-gnu': 4.57.1 - '@rollup/rollup-linux-x64-musl': 4.57.1 - '@rollup/rollup-openbsd-x64': 4.57.1 - '@rollup/rollup-openharmony-arm64': 4.57.1 - '@rollup/rollup-win32-arm64-msvc': 4.57.1 - '@rollup/rollup-win32-ia32-msvc': 4.57.1 - '@rollup/rollup-win32-x64-gnu': 4.57.1 - '@rollup/rollup-win32-x64-msvc': 4.57.1 + '@rollup/rollup-android-arm-eabi': 4.58.0 + '@rollup/rollup-android-arm64': 4.58.0 + '@rollup/rollup-darwin-arm64': 4.58.0 + '@rollup/rollup-darwin-x64': 4.58.0 + '@rollup/rollup-freebsd-arm64': 4.58.0 + '@rollup/rollup-freebsd-x64': 4.58.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.58.0 + '@rollup/rollup-linux-arm-musleabihf': 4.58.0 + '@rollup/rollup-linux-arm64-gnu': 4.58.0 + '@rollup/rollup-linux-arm64-musl': 4.58.0 + '@rollup/rollup-linux-loong64-gnu': 4.58.0 + '@rollup/rollup-linux-loong64-musl': 4.58.0 + '@rollup/rollup-linux-ppc64-gnu': 4.58.0 + '@rollup/rollup-linux-ppc64-musl': 4.58.0 + '@rollup/rollup-linux-riscv64-gnu': 4.58.0 + '@rollup/rollup-linux-riscv64-musl': 4.58.0 + '@rollup/rollup-linux-s390x-gnu': 4.58.0 + '@rollup/rollup-linux-x64-gnu': 4.58.0 + '@rollup/rollup-linux-x64-musl': 4.58.0 + '@rollup/rollup-openbsd-x64': 4.58.0 + '@rollup/rollup-openharmony-arm64': 4.58.0 + '@rollup/rollup-win32-arm64-msvc': 4.58.0 + '@rollup/rollup-win32-ia32-msvc': 4.58.0 + '@rollup/rollup-win32-x64-gnu': 4.58.0 + '@rollup/rollup-win32-x64-msvc': 4.58.0 fsevents: 2.3.3 router@2.2.0: @@ -11312,7 +10964,7 @@ snapshots: safer-buffer@2.1.2: {} - sanitize-html@2.17.0: + sanitize-html@2.17.1: dependencies: deepmerge: 4.3.1 escape-string-regexp: 4.0.0 @@ -11633,7 +11285,7 @@ snapshots: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 - minipass: 7.1.2 + minipass: 7.1.3 minizlib: 3.1.0 yallist: 5.0.0 @@ -11687,7 +11339,7 @@ snapshots: ts-algebra@2.0.0: {} - tsdown@0.20.3(@typescript/native-preview@7.0.0-dev.20260219.1)(typescript@5.9.3): + tsdown@0.20.3(@typescript/native-preview@7.0.0-dev.20260221.1)(typescript@5.9.3): dependencies: ansis: 4.2.0 cac: 6.7.14 @@ -11698,7 +11350,7 @@ snapshots: obug: 2.1.1 picomatch: 4.0.3 rolldown: 1.0.0-rc.3 - rolldown-plugin-dts: 0.22.1(@typescript/native-preview@7.0.0-dev.20260219.1)(rolldown@1.0.0-rc.3)(typescript@5.9.3) + rolldown-plugin-dts: 0.22.1(@typescript/native-preview@7.0.0-dev.20260221.1)(rolldown@1.0.0-rc.3)(typescript@5.9.3) semver: 7.7.4 tinyexec: 1.0.2 tinyglobby: 0.2.15 @@ -11814,7 +11466,7 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.57.1 + rollup: 4.58.0 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 25.3.0 diff --git a/ui/package.json b/ui/package.json index bac33ae24..51cca5bfd 100644 --- a/ui/package.json +++ b/ui/package.json @@ -9,8 +9,8 @@ "test": "vitest run --config vitest.config.ts" }, "dependencies": { - "@lit-labs/signals": "^0.1.3", - "@lit/context": "^1.1.4", + "@lit-labs/signals": "^0.2.0", + "@lit/context": "^1.1.6", "@noble/ed25519": "3.0.0", "dompurify": "^3.3.1", "lit": "^3.3.2", From 7bd5c5d5a42f0d36f0f17ee2e3c2186374a7256e Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 14:37:06 +0100 Subject: [PATCH 0204/1007] docs(changelog): reorder unreleased fixes by user impact --- CHANGELOG.md | 64 ++++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab69a37cd..04b56db82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,41 +29,9 @@ Docs: https://docs.openclaw.ai ### Fixes -- Security/Exec: block unquoted heredoc body expansion tokens in shell allowlist analysis, reject unterminated heredocs, and require explicit approval for allowlisted heredoc execution on gateway hosts to prevent heredoc substitution allowlist bypass. This ships in the next npm release. Thanks @torturado for reporting. -- WhatsApp/Security: enforce allowlist JID authorization for reaction actions so authenticated callers cannot target non-allowlisted chats by forging `chatJid` + valid `messageId` pairs. This ships in the next npm release. Thanks @aether-ai-agent for reporting. - Agents/Tool images: include source filenames in `agents/tool-images` resize logs so compression events can be traced back to specific files. -- ACP/Security: escape control and delimiter characters in ACP `resource_link` title/URI metadata before prompt interpolation to prevent metadata-driven prompt injection through resource links. This ships in the next npm release. Thanks @aether-ai-agent for reporting. -- TTS/Security: make model-driven provider switching opt-in by default (`messages.tts.modelOverrides.allowProvider=false` unless explicitly enabled), while keeping voice/style overrides available, to reduce prompt-injection-driven provider hops and unexpected TTS cost escalation. This ships in the next npm release. Thanks @aether-ai-agent for reporting. -- Security/Agents: keep overflow compaction retry budgeting global across tool-result truncation recovery so successful truncation cannot reset the overflow retry counter and amplify retry/cost cycles. This ships in the next npm release. Thanks @aether-ai-agent for reporting. - Providers/OAuth: harden Qwen and Chutes refresh handling by validating refresh response expiry values and preserving prior refresh tokens when providers return empty refresh token fields, with regression coverage for empty-token responses. -- BlueBubbles/Security (optional beta iMessage plugin): require webhook token authentication for all BlueBubbles webhook requests (including loopback/proxied setups), removing passwordless webhook fallback behavior. Thanks @zpbrent. -- iOS/Security: force `https://` for non-loopback manual gateway hosts during iOS onboarding to block insecure remote transport URLs. (#21969) Thanks @mbelinky. -- Gateway/Security: remove shared-IP fallback for canvas endpoints and require token or session capability for canvas access. Thanks @thewilloftheshadow. -- Gateway/Security: require secure context and paired-device checks for Control UI auth even when `gateway.controlUi.allowInsecureAuth` is set, and align audit messaging with the hardened behavior. This ships in the next npm release. (#20684) Thanks @coygeek and @Vasco0x4 for reporting. -- Gateway/Security: scope tokenless Tailscale forwarded-header auth to Control UI websocket auth only, so HTTP gateway routes still require token/password even on trusted hosts. This ships in the next npm release. Thanks @zpbrent for reporting. -- Docker/Security: run E2E and install-sh test images as non-root by adding appuser directives. Thanks @thewilloftheshadow. -- Skills/Security: sanitize skill env overrides to block unsafe runtime injection variables and only allow sensitive keys when declared in skill metadata, with warnings for suspicious values. Thanks @thewilloftheshadow. -- Security/Commands: block prototype-key injection in runtime `/debug` overrides and require own-property checks for gated command flags (`bash`, `config`, `debug`) so inherited prototype values cannot enable privileged commands. Thanks @tdjackey for reporting. -- Security/Browser: block non-network browser navigation protocols (including `file:`, `data:`, and `javascript:`) while preserving `about:blank`, preventing local file reads via browser tool navigation. This ships in the next npm release. Thanks @q1uf3ng for reporting. -- Security/Exec: block shell startup-file env injection (`BASH_ENV`, `ENV`, `BASH_FUNC_*`, `LD_*`, `DYLD_*`) across config env ingestion, node-host inherited environment sanitization, and macOS exec host runtime to prevent pre-command execution from attacker-controlled environment variables. This ships in the next npm release. Thanks @tdjackey. -- Security/Exec (Windows): canonicalize `cmd.exe /c` command text across validation, approval binding, and audit/event rendering to prevent trailing-argument approval mismatches in `system.run`. This ships in the next npm release. Thanks @tdjackey for reporting. - Models/Kimi-Coding: add missing implicit provider template for `kimi-coding` with correct `anthropic-messages` API type and base URL, fixing 403 errors when using Kimi for Coding. (#22409) -- Security/Gateway/Hooks: block `__proto__`, `constructor`, and `prototype` traversal in webhook template path resolution to prevent prototype-chain payload data leakage in `messageTemplate` rendering. (#22213) Thanks @SleuthCo. -- Security/OpenClawKit/UI: prevent injected inbound user context metadata blocks from leaking into chat history in TUI, webchat, and macOS surfaces by stripping all untrusted metadata prefixes at display boundaries. (#22142) Thanks @Mellowambience, @vincentkoc. -- Security/OpenClawKit/UI: strip inbound metadata blocks from user messages in TUI rendering while preserving user-authored content. (#22345) Thanks @kansodata, @vincentkoc. -- Security/OpenClawKit/UI: prevent inbound metadata leaks and reply-tag streaming artifacts in TUI rendering by stripping untrusted metadata prefixes at display boundaries. (#22346) Thanks @akramcodez, @vincentkoc. -- Security/Agents: restrict local MEDIA tool attachments to core tools and the OpenClaw temp root to prevent untrusted MCP tool file exfiltration. Thanks @NucleiAv and @thewilloftheshadow. -- Security/Net: strip sensitive headers (`Authorization`, `Proxy-Authorization`, `Cookie`, `Cookie2`) on cross-origin redirects in `fetchWithSsrFGuard` to prevent credential forwarding across origin boundaries. (#20313) Thanks @afurm. -- Security/Systemd: reject CR/LF in systemd unit environment values and fix argument escaping so generated units cannot be injected with extra directives. Thanks @thewilloftheshadow. -- Security/Tools: add per-wrapper random IDs to untrusted-content markers from `wrapExternalContent`/`wrapWebContent`, preventing marker spoofing from escaping content boundaries. (#19009) Thanks @Whoaa512. -- Shared/Security: reject insecure deep links that use `ws://` non-loopback gateway URLs to prevent plaintext remote websocket configuration. (#21970) Thanks @mbelinky. -- macOS/Security: reject non-loopback `ws://` remote gateway URLs in macOS remote config to block insecure plaintext websocket endpoints. (#21971) Thanks @mbelinky. -- Browser/Security: block upload path symlink escapes so browser upload sources cannot traverse outside the allowed workspace via symlinked paths. (#21972) Thanks @mbelinky. -- Security/Dependencies: bump transitive `hono` usage to `4.11.10` to incorporate timing-safe authentication comparison hardening for `basicAuth`/`bearerAuth` (`GHSA-gq3j-xvxp-8hrf`). Thanks @vincentkoc. -- Security/Gateway: parse `X-Forwarded-For` with trust-preserving semantics when requests come from configured trusted proxies, preventing proxy-chain spoofing from influencing client IP classification and rate-limit identity. Thanks @AnthonyDiSanti and @vincentkoc. -- Security/Sandbox: remove default `--no-sandbox` for the browser container entrypoint, add explicit opt-in via `OPENCLAW_BROWSER_NO_SANDBOX` / `CLAWDBOT_BROWSER_NO_SANDBOX`, and add security-audit checks for stale/missing sandbox browser Docker hash labels. This ships in the next npm release. Thanks @TerminalsandCoffee and @vincentkoc. -- Security/Sandbox Browser: require VNC password auth for noVNC observer sessions in the sandbox browser entrypoint, plumb per-container noVNC passwords from runtime, and emit short-lived noVNC observer token URLs while keeping loopback-only host port publishing. This ships in the next npm release. Thanks @TerminalsandCoffee for reporting. -- Security/Sandbox Browser: default browser sandbox containers to a dedicated Docker network (`openclaw-sandbox-browser`), add optional CDP ingress source-range restrictions, auto-create missing dedicated networks, and warn in `openclaw security --audit` when browser sandboxing runs on bridge without source-range limits. This ships in the next npm release. Thanks @TerminalsandCoffee for reporting. - Auto-reply/Tools: forward `senderIsOwner` through embedded queued/followup runner params so owner-only tools remain available for authorized senders. (#22296) thanks @hcoj. - Discord: restore model picker back navigation when a provider is missing and document the Discord picker flow. (#21458) Thanks @pejmanjohn and @thewilloftheshadow. - Memory/QMD: respect per-agent `memorySearch.enabled=false` during gateway QMD startup initialization, split multi-collection QMD searches into per-collection queries (`search`/`vsearch`/`query`) to avoid sparse-term drops, prefer collection-hinted doc resolution to avoid stale-hash collisions, retry boot updates on transient lock/timeout failures, skip `qmd embed` in BM25-only `search` mode (including `memory index --force`), and serialize embed runs globally with failure backoff to prevent CPU storms on multi-agent hosts. (#20581, #21590, #20513, #20001, #21266, #21583, #20346, #19493) Thanks @danielrevivo, @zanderkrause, @sunyan034-cmd, @tilleulenspiegel, @dae-oss, @adamlongcreativellc, @jonathanadams96, and @kiliansitel. @@ -136,6 +104,38 @@ Docs: https://docs.openclaw.ai - macOS/Build: default release packaging to `BUNDLE_ID=ai.openclaw.mac` in `scripts/package-mac-dist.sh`, so Sparkle feed URL is retained and auto-update no longer fails with an empty appcast feed. (#19750) thanks @loganprit. - Signal/Outbound: preserve case for Base64 group IDs during outbound target normalization so cross-context routing and policy checks no longer break when group IDs include uppercase characters. (#5578) Thanks @heyhudson. - Anthropic/Agents: preserve required pi-ai default OAuth beta headers when `context1m` injects `anthropic-beta`, preventing 401 auth failures for `sk-ant-oat-*` tokens. (#19789, fixes #19769) Thanks @minupla. +- Security/Exec: block unquoted heredoc body expansion tokens in shell allowlist analysis, reject unterminated heredocs, and require explicit approval for allowlisted heredoc execution on gateway hosts to prevent heredoc substitution allowlist bypass. This ships in the next npm release. Thanks @torturado for reporting. +- WhatsApp/Security: enforce allowlist JID authorization for reaction actions so authenticated callers cannot target non-allowlisted chats by forging `chatJid` + valid `messageId` pairs. This ships in the next npm release. Thanks @aether-ai-agent for reporting. +- ACP/Security: escape control and delimiter characters in ACP `resource_link` title/URI metadata before prompt interpolation to prevent metadata-driven prompt injection through resource links. This ships in the next npm release. Thanks @aether-ai-agent for reporting. +- TTS/Security: make model-driven provider switching opt-in by default (`messages.tts.modelOverrides.allowProvider=false` unless explicitly enabled), while keeping voice/style overrides available, to reduce prompt-injection-driven provider hops and unexpected TTS cost escalation. This ships in the next npm release. Thanks @aether-ai-agent for reporting. +- Security/Agents: keep overflow compaction retry budgeting global across tool-result truncation recovery so successful truncation cannot reset the overflow retry counter and amplify retry/cost cycles. This ships in the next npm release. Thanks @aether-ai-agent for reporting. +- BlueBubbles/Security (optional beta iMessage plugin): require webhook token authentication for all BlueBubbles webhook requests (including loopback/proxied setups), removing passwordless webhook fallback behavior. Thanks @zpbrent. +- iOS/Security: force `https://` for non-loopback manual gateway hosts during iOS onboarding to block insecure remote transport URLs. (#21969) Thanks @mbelinky. +- Gateway/Security: remove shared-IP fallback for canvas endpoints and require token or session capability for canvas access. Thanks @thewilloftheshadow. +- Gateway/Security: require secure context and paired-device checks for Control UI auth even when `gateway.controlUi.allowInsecureAuth` is set, and align audit messaging with the hardened behavior. This ships in the next npm release. (#20684) Thanks @coygeek and @Vasco0x4 for reporting. +- Gateway/Security: scope tokenless Tailscale forwarded-header auth to Control UI websocket auth only, so HTTP gateway routes still require token/password even on trusted hosts. This ships in the next npm release. Thanks @zpbrent for reporting. +- Docker/Security: run E2E and install-sh test images as non-root by adding appuser directives. Thanks @thewilloftheshadow. +- Skills/Security: sanitize skill env overrides to block unsafe runtime injection variables and only allow sensitive keys when declared in skill metadata, with warnings for suspicious values. Thanks @thewilloftheshadow. +- Security/Commands: block prototype-key injection in runtime `/debug` overrides and require own-property checks for gated command flags (`bash`, `config`, `debug`) so inherited prototype values cannot enable privileged commands. Thanks @tdjackey for reporting. +- Security/Browser: block non-network browser navigation protocols (including `file:`, `data:`, and `javascript:`) while preserving `about:blank`, preventing local file reads via browser tool navigation. This ships in the next npm release. Thanks @q1uf3ng for reporting. +- Security/Exec: block shell startup-file env injection (`BASH_ENV`, `ENV`, `BASH_FUNC_*`, `LD_*`, `DYLD_*`) across config env ingestion, node-host inherited environment sanitization, and macOS exec host runtime to prevent pre-command execution from attacker-controlled environment variables. This ships in the next npm release. Thanks @tdjackey. +- Security/Exec (Windows): canonicalize `cmd.exe /c` command text across validation, approval binding, and audit/event rendering to prevent trailing-argument approval mismatches in `system.run`. This ships in the next npm release. Thanks @tdjackey for reporting. +- Security/Gateway/Hooks: block `__proto__`, `constructor`, and `prototype` traversal in webhook template path resolution to prevent prototype-chain payload data leakage in `messageTemplate` rendering. (#22213) Thanks @SleuthCo. +- Security/OpenClawKit/UI: prevent injected inbound user context metadata blocks from leaking into chat history in TUI, webchat, and macOS surfaces by stripping all untrusted metadata prefixes at display boundaries. (#22142) Thanks @Mellowambience, @vincentkoc. +- Security/OpenClawKit/UI: strip inbound metadata blocks from user messages in TUI rendering while preserving user-authored content. (#22345) Thanks @kansodata, @vincentkoc. +- Security/OpenClawKit/UI: prevent inbound metadata leaks and reply-tag streaming artifacts in TUI rendering by stripping untrusted metadata prefixes at display boundaries. (#22346) Thanks @akramcodez, @vincentkoc. +- Security/Agents: restrict local MEDIA tool attachments to core tools and the OpenClaw temp root to prevent untrusted MCP tool file exfiltration. Thanks @NucleiAv and @thewilloftheshadow. +- Security/Net: strip sensitive headers (`Authorization`, `Proxy-Authorization`, `Cookie`, `Cookie2`) on cross-origin redirects in `fetchWithSsrFGuard` to prevent credential forwarding across origin boundaries. (#20313) Thanks @afurm. +- Security/Systemd: reject CR/LF in systemd unit environment values and fix argument escaping so generated units cannot be injected with extra directives. Thanks @thewilloftheshadow. +- Security/Tools: add per-wrapper random IDs to untrusted-content markers from `wrapExternalContent`/`wrapWebContent`, preventing marker spoofing from escaping content boundaries. (#19009) Thanks @Whoaa512. +- Shared/Security: reject insecure deep links that use `ws://` non-loopback gateway URLs to prevent plaintext remote websocket configuration. (#21970) Thanks @mbelinky. +- macOS/Security: reject non-loopback `ws://` remote gateway URLs in macOS remote config to block insecure plaintext websocket endpoints. (#21971) Thanks @mbelinky. +- Browser/Security: block upload path symlink escapes so browser upload sources cannot traverse outside the allowed workspace via symlinked paths. (#21972) Thanks @mbelinky. +- Security/Dependencies: bump transitive `hono` usage to `4.11.10` to incorporate timing-safe authentication comparison hardening for `basicAuth`/`bearerAuth` (`GHSA-gq3j-xvxp-8hrf`). Thanks @vincentkoc. +- Security/Gateway: parse `X-Forwarded-For` with trust-preserving semantics when requests come from configured trusted proxies, preventing proxy-chain spoofing from influencing client IP classification and rate-limit identity. Thanks @AnthonyDiSanti and @vincentkoc. +- Security/Sandbox: remove default `--no-sandbox` for the browser container entrypoint, add explicit opt-in via `OPENCLAW_BROWSER_NO_SANDBOX` / `CLAWDBOT_BROWSER_NO_SANDBOX`, and add security-audit checks for stale/missing sandbox browser Docker hash labels. This ships in the next npm release. Thanks @TerminalsandCoffee and @vincentkoc. +- Security/Sandbox Browser: require VNC password auth for noVNC observer sessions in the sandbox browser entrypoint, plumb per-container noVNC passwords from runtime, and emit short-lived noVNC observer token URLs while keeping loopback-only host port publishing. This ships in the next npm release. Thanks @TerminalsandCoffee for reporting. +- Security/Sandbox Browser: default browser sandbox containers to a dedicated Docker network (`openclaw-sandbox-browser`), add optional CDP ingress source-range restrictions, auto-create missing dedicated networks, and warn in `openclaw security --audit` when browser sandboxing runs on bridge without source-range limits. This ships in the next npm release. Thanks @TerminalsandCoffee for reporting. ## 2026.2.19 From 95c14d9b5f549be8fb2ecfeb1c1102ebb12111cb Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 15:02:10 +0100 Subject: [PATCH 0205/1007] docs: prune low-signal changelog entries --- CHANGELOG.md | 2 +- extensions/matrix/CHANGELOG.md | 127 --------------------------- extensions/msteams/CHANGELOG.md | 120 -------------------------- extensions/nostr/CHANGELOG.md | 102 ---------------------- extensions/twitch/CHANGELOG.md | 78 ----------------- extensions/voice-call/CHANGELOG.md | 132 ----------------------------- extensions/zalo/CHANGELOG.md | 132 ----------------------------- extensions/zalouser/CHANGELOG.md | 102 ---------------------- 8 files changed, 1 insertion(+), 794 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 04b56db82..ba82d5d27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -109,7 +109,7 @@ Docs: https://docs.openclaw.ai - ACP/Security: escape control and delimiter characters in ACP `resource_link` title/URI metadata before prompt interpolation to prevent metadata-driven prompt injection through resource links. This ships in the next npm release. Thanks @aether-ai-agent for reporting. - TTS/Security: make model-driven provider switching opt-in by default (`messages.tts.modelOverrides.allowProvider=false` unless explicitly enabled), while keeping voice/style overrides available, to reduce prompt-injection-driven provider hops and unexpected TTS cost escalation. This ships in the next npm release. Thanks @aether-ai-agent for reporting. - Security/Agents: keep overflow compaction retry budgeting global across tool-result truncation recovery so successful truncation cannot reset the overflow retry counter and amplify retry/cost cycles. This ships in the next npm release. Thanks @aether-ai-agent for reporting. -- BlueBubbles/Security (optional beta iMessage plugin): require webhook token authentication for all BlueBubbles webhook requests (including loopback/proxied setups), removing passwordless webhook fallback behavior. Thanks @zpbrent. +- BlueBubbles/Security: require webhook token authentication for all BlueBubbles webhook requests (including loopback/proxied setups), removing passwordless webhook fallback behavior. Thanks @zpbrent. - iOS/Security: force `https://` for non-loopback manual gateway hosts during iOS onboarding to block insecure remote transport URLs. (#21969) Thanks @mbelinky. - Gateway/Security: remove shared-IP fallback for canvas endpoints and require token or session capability for canvas access. Thanks @thewilloftheshadow. - Gateway/Security: require secure context and paired-device checks for Control UI auth even when `gateway.controlUi.allowInsecureAuth` is set, and align audit messaging with the hardened behavior. This ships in the next npm release. (#20684) Thanks @coygeek and @Vasco0x4 for reporting. diff --git a/extensions/matrix/CHANGELOG.md b/extensions/matrix/CHANGELOG.md index e184fd6b9..82cb6d246 100644 --- a/extensions/matrix/CHANGELOG.md +++ b/extensions/matrix/CHANGELOG.md @@ -1,136 +1,9 @@ # Changelog -## 2026.2.19 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.16 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.15 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.14 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.13 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6-3 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6-2 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.4 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.2 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.31 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.30 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.29 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.23 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.22 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.21 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.20 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.17-1 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.17 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.16 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.15 - -### Changes - -- Version alignment with core OpenClaw release numbers. - ## 2026.1.14 ### Features -- Version alignment with core OpenClaw release numbers. - Matrix channel plugin with homeserver + user ID auth (access token or password login with device name). - Direct messages with pairing/allowlist/open/disabled policies and allowFrom support. - Group/room controls: allowlist policy, per-room config, mention gating, auto-reply, per-room skills/system prompts. diff --git a/extensions/msteams/CHANGELOG.md b/extensions/msteams/CHANGELOG.md index c6c314070..8d382ebee 100644 --- a/extensions/msteams/CHANGELOG.md +++ b/extensions/msteams/CHANGELOG.md @@ -1,125 +1,5 @@ # Changelog -## 2026.2.19 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.16 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.15 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.14 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.13 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6-3 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6-2 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.4 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.2 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.31 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.30 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.29 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.23 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.22 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.21 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.20 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.17-1 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.17 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.16 - -### Changes - -- Version alignment with core OpenClaw release numbers. - ## 2026.1.15 ### Features diff --git a/extensions/nostr/CHANGELOG.md b/extensions/nostr/CHANGELOG.md index 3ae198abc..0290022d0 100644 --- a/extensions/nostr/CHANGELOG.md +++ b/extensions/nostr/CHANGELOG.md @@ -1,107 +1,5 @@ # Changelog -## 2026.2.19 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.16 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.15 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.14 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.13 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6-3 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6-2 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.4 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.2 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.31 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.30 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.29 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.23 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.22 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.21 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.20 - -### Changes - -- Version alignment with core OpenClaw release numbers. - ## 2026.1.19-1 Initial release. diff --git a/extensions/twitch/CHANGELOG.md b/extensions/twitch/CHANGELOG.md index 8918ae180..d76e8c955 100644 --- a/extensions/twitch/CHANGELOG.md +++ b/extensions/twitch/CHANGELOG.md @@ -1,83 +1,5 @@ # Changelog -## 2026.2.19 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.16 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.15 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.14 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.13 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6-3 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6-2 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.4 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.2 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.31 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.30 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.29 - -### Changes - -- Version alignment with core OpenClaw release numbers. - ## 2026.1.23 ### Features diff --git a/extensions/voice-call/CHANGELOG.md b/extensions/voice-call/CHANGELOG.md index d33c4e438..7ec2e9d0b 100644 --- a/extensions/voice-call/CHANGELOG.md +++ b/extensions/voice-call/CHANGELOG.md @@ -1,83 +1,5 @@ # Changelog -## 2026.2.19 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.16 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.15 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.14 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.13 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6-3 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6-2 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.4 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.2 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.31 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.30 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.29 - -### Changes - -- Version alignment with core OpenClaw release numbers. - ## 2026.1.26 ### Changes @@ -87,60 +9,6 @@ - Removed legacy `tts.model`/`tts.voice`/`tts.instructions` plugin fields. - Ngrok free-tier bypass renamed to `tunnel.allowNgrokFreeTierLoopbackBypass` and gated to loopback + `tunnel.provider="ngrok"`. -## 2026.1.23 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.22 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.21 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.20 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.17-1 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.17 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.16 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.15 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.14 - -### Changes - -- Version alignment with core OpenClaw release numbers. - ## 0.1.0 ### Highlights diff --git a/extensions/zalo/CHANGELOG.md b/extensions/zalo/CHANGELOG.md index 6f31f8a8a..5c2de0895 100644 --- a/extensions/zalo/CHANGELOG.md +++ b/extensions/zalo/CHANGELOG.md @@ -1,137 +1,5 @@ # Changelog -## 2026.2.19 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.16 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.15 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.14 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.13 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6-3 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6-2 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.4 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.2 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.31 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.30 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.29 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.23 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.22 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.21 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.20 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.17-1 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.17 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.16 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.15 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.14 - -### Changes - -- Version alignment with core OpenClaw release numbers. - ## 0.1.0 ### Features diff --git a/extensions/zalouser/CHANGELOG.md b/extensions/zalouser/CHANGELOG.md index 0e63ff211..bd70b5054 100644 --- a/extensions/zalouser/CHANGELOG.md +++ b/extensions/zalouser/CHANGELOG.md @@ -1,107 +1,5 @@ # Changelog -## 2026.2.19 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.16 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.15 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.14 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.13 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6-3 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6-2 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.6 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.4 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.2.2 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.31 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.30 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.29 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.23 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.22 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.21 - -### Changes - -- Version alignment with core OpenClaw release numbers. - -## 2026.1.20 - -### Changes - -- Version alignment with core OpenClaw release numbers. - ## 2026.1.17-1 - Initial version with full channel plugin support From 559736a5a0d36f7b8a8f90c18a04709558cb0e08 Mon Sep 17 00:00:00 2001 From: fanziqing Date: Tue, 3 Feb 2026 19:57:37 +0800 Subject: [PATCH 0206/1007] feat(volcengine): integrate Volcengine & Byteplus Provider --- docs/concepts/model-providers.md | 64 +++++++++ src/agents/byteplus-models.ts | 108 ++++++++++++++ src/agents/doubao-models.ts | 132 ++++++++++++++++++ src/agents/model-auth.ts | 7 + src/agents/model-selection.ts | 4 + src/agents/models-config.providers.ts | 68 +++++++++ ....providers.volcengine-byteplus.e2e.test.ts | 40 ++++++ src/agents/pi-embedded-runner/model.ts | 5 +- src/cli/program/register.onboard.ts | 2 + src/commands/auth-choice-options.e2e.test.ts | 2 + src/commands/auth-choice-options.ts | 14 ++ src/commands/auth-choice.apply.byteplus.ts | 73 ++++++++++ src/commands/auth-choice.apply.ts | 15 +- src/commands/auth-choice.apply.volcengine.ts | 73 ++++++++++ .../auth-choice.preferred-provider.ts | 2 + src/commands/model-picker.ts | 10 +- ...-non-interactive.provider-auth.e2e.test.ts | 21 +++ .../local/auth-choice-inference.ts | 2 + .../local/auth-choice.ts | 47 +++++++ src/commands/onboard-provider-auth-flags.ts | 16 +++ src/commands/onboard-types.ts | 6 + 21 files changed, 700 insertions(+), 11 deletions(-) create mode 100644 src/agents/byteplus-models.ts create mode 100644 src/agents/doubao-models.ts create mode 100644 src/agents/models-config.providers.volcengine-byteplus.e2e.test.ts create mode 100644 src/commands/auth-choice.apply.byteplus.ts create mode 100644 src/commands/auth-choice.apply.volcengine.ts diff --git a/docs/concepts/model-providers.md b/docs/concepts/model-providers.md index f59c34b49..01d1029e0 100644 --- a/docs/concepts/model-providers.md +++ b/docs/concepts/model-providers.md @@ -216,6 +216,70 @@ Model refs: See [/providers/qwen](/providers/qwen) for setup details and notes. +### Volcano Engine (Doubao) + +Volcano Engine (火山引擎) provides access to Doubao and other models in China. + +- Provider: `volcengine` (coding: `volcengine-plan`) +- Auth: `VOLCANO_ENGINE_API_KEY` +- Example model: `volcengine/doubao-seed-1-8-251228` +- CLI: `openclaw onboard --auth-choice volcengine-api-key` + +```json5 +{ + agents: { + defaults: { model: { primary: "volcengine/doubao-seed-1-8-251228" } } + } +} +``` + +Available models: + +- `volcengine/doubao-seed-1-8-251228` (Doubao Seed 1.8) +- `volcengine/doubao-seed-code-preview-251028` +- `volcengine/kimi-k2-5-260127` (Kimi K2.5) +- `volcengine/glm-4-7-251222` (GLM 4.7) +- `volcengine/deepseek-v3-2-251201` (DeepSeek V3.2 128K) + +Coding models (`volcengine-plan`): + +- `volcengine-plan/ark-code-latest` +- `volcengine-plan/doubao-seed-code` +- `volcengine-plan/kimi-k2.5` +- `volcengine-plan/kimi-k2-thinking` +- `volcengine-plan/glm-4.7` + +### BytePlus (International) + +BytePlus ARK provides access to the same models as Volcano Engine for international users. + +- Provider: `byteplus` (coding: `byteplus-plan`) +- Auth: `BYTEPLUS_API_KEY` +- Example model: `byteplus/seed-1-8-251228` +- CLI: `openclaw onboard --auth-choice byteplus-api-key` + +```json5 +{ + agents: { + defaults: { model: { primary: "byteplus/seed-1-8-251228" } } + } +} +``` + +Available models: + +- `byteplus/seed-1-8-251228` (Seed 1.8) +- `byteplus/kimi-k2-5-260127` (Kimi K2.5) +- `byteplus/glm-4-7-251222` (GLM 4.7) + +Coding models (`byteplus-plan`): + +- `byteplus-plan/ark-code-latest` +- `byteplus-plan/doubao-seed-code` +- `byteplus-plan/kimi-k2.5` +- `byteplus-plan/kimi-k2-thinking` +- `byteplus-plan/glm-4.7` + ### Synthetic Synthetic provides Anthropic-compatible models behind the `synthetic` provider: diff --git a/src/agents/byteplus-models.ts b/src/agents/byteplus-models.ts new file mode 100644 index 000000000..f60be606e --- /dev/null +++ b/src/agents/byteplus-models.ts @@ -0,0 +1,108 @@ +import type { ModelDefinitionConfig } from "../config/types.js"; + +export const BYTEPLUS_BASE_URL = "https://ark.ap-southeast.bytepluses.com/api/v3"; +export const BYTEPLUS_CODING_BASE_URL = "https://ark.ap-southeast.bytepluses.com/api/coding/v3"; +export const BYTEPLUS_DEFAULT_MODEL_ID = "seed-1-8-251228"; +export const BYTEPLUS_CODING_DEFAULT_MODEL_ID = "ark-code-latest"; +export const BYTEPLUS_DEFAULT_MODEL_REF = `byteplus/${BYTEPLUS_DEFAULT_MODEL_ID}`; + +// BytePlus pricing (approximate, adjust based on actual pricing) +export const BYTEPLUS_DEFAULT_COST = { + input: 0.0001, // $0.0001 per 1K tokens + output: 0.0002, // $0.0002 per 1K tokens + cacheRead: 0, + cacheWrite: 0, +}; + +/** + * Complete catalog of BytePlus ARK models. + * + * BytePlus ARK provides access to various models + * through the ARK API. Authentication requires a BYTEPLUS_API_KEY. + */ +export const BYTEPLUS_MODEL_CATALOG = [ + { + id: "seed-1-8-251228", + name: "Seed 1.8", + reasoning: false, + input: ["text", "image"] as const, + contextWindow: 256000, + maxTokens: 4096, + }, + { + id: "kimi-k2-5-260127", + name: "Kimi K2.5", + reasoning: false, + input: ["text", "image"] as const, + contextWindow: 256000, + maxTokens: 4096, + }, + { + id: "glm-4-7-251222", + name: "GLM 4.7", + reasoning: false, + input: ["text", "image"] as const, + contextWindow: 200000, + maxTokens: 4096, + }, +] as const; + +export type BytePlusCatalogEntry = (typeof BYTEPLUS_MODEL_CATALOG)[number]; +export type BytePlusCodingCatalogEntry = (typeof BYTEPLUS_CODING_MODEL_CATALOG)[number]; + +export function buildBytePlusModelDefinition( + entry: BytePlusCatalogEntry | BytePlusCodingCatalogEntry, +): ModelDefinitionConfig { + return { + id: entry.id, + name: entry.name, + reasoning: entry.reasoning, + input: [...entry.input], + cost: BYTEPLUS_DEFAULT_COST, + contextWindow: entry.contextWindow, + maxTokens: entry.maxTokens, + }; +} + +export const BYTEPLUS_CODING_MODEL_CATALOG = [ + { + id: "ark-code-latest", + name: "Ark Coding Plan", + reasoning: false, + input: ["text"] as const, + contextWindow: 256000, + maxTokens: 4096, + }, + { + id: "doubao-seed-code", + name: "Doubao Seed Code", + reasoning: false, + input: ["text"] as const, + contextWindow: 256000, + maxTokens: 4096, + }, + { + id: "glm-4.7", + name: "GLM 4.7 Coding", + reasoning: false, + input: ["text"] as const, + contextWindow: 200000, + maxTokens: 4096, + }, + { + id: "kimi-k2-thinking", + name: "Kimi K2 Thinking", + reasoning: false, + input: ["text"] as const, + contextWindow: 256000, + maxTokens: 4096, + }, + { + id: "kimi-k2.5", + name: "Kimi K2.5 Coding", + reasoning: false, + input: ["text"] as const, + contextWindow: 256000, + maxTokens: 4096, + }, +] as const; diff --git a/src/agents/doubao-models.ts b/src/agents/doubao-models.ts new file mode 100644 index 000000000..a1f3f4e5b --- /dev/null +++ b/src/agents/doubao-models.ts @@ -0,0 +1,132 @@ +import type { ModelDefinitionConfig } from "../config/types.js"; + +export const DOUBAO_BASE_URL = "https://ark.cn-beijing.volces.com/api/v3"; +export const DOUBAO_CODING_BASE_URL = "https://ark.cn-beijing.volces.com/api/coding/v3"; +export const DOUBAO_DEFAULT_MODEL_ID = "doubao-seed-1-8-251228"; +export const DOUBAO_CODING_DEFAULT_MODEL_ID = "ark-code-latest"; +export const DOUBAO_DEFAULT_MODEL_REF = `volcengine/${DOUBAO_DEFAULT_MODEL_ID}`; + +// Volcano Engine Doubao pricing (approximate, adjust based on actual pricing) +export const DOUBAO_DEFAULT_COST = { + input: 0.0001, // ¥0.0001 per 1K tokens + output: 0.0002, // ¥0.0002 per 1K tokens + cacheRead: 0, + cacheWrite: 0, +}; + +/** + * Complete catalog of Volcano Engine models. + * + * Volcano Engine provides access to models + * through the API. Authentication requires a Volcano Engine API Key. + */ +export const DOUBAO_MODEL_CATALOG = [ + { + id: "doubao-seed-code-preview-251028", + name: "doubao-seed-code-preview-251028", + reasoning: false, + input: ["text", "image"] as const, + contextWindow: 256000, + maxTokens: 4096, + }, + { + id: "doubao-seed-1-8-251228", + name: "Doubao Seed 1.8", + reasoning: false, + input: ["text", "image"] as const, + contextWindow: 256000, + maxTokens: 4096, + }, + { + id: "kimi-k2-5-260127", + name: "Kimi K2.5", + reasoning: false, + input: ["text", "image"] as const, + contextWindow: 256000, + maxTokens: 4096, + }, + { + id: "glm-4-7-251222", + name: "GLM 4.7", + reasoning: false, + input: ["text", "image"] as const, + contextWindow: 200000, + maxTokens: 4096, + }, + { + id: "deepseek-v3-2-251201", + name: "DeepSeek V3.2", + reasoning: false, + input: ["text", "image"] as const, + contextWindow: 128000, + maxTokens: 4096, + }, +] as const; + +export type DoubaoCatalogEntry = (typeof DOUBAO_MODEL_CATALOG)[number]; +export type DoubaoCodingCatalogEntry = (typeof DOUBAO_CODING_MODEL_CATALOG)[number]; + +export function buildDoubaoModelDefinition( + entry: DoubaoCatalogEntry | DoubaoCodingCatalogEntry, +): ModelDefinitionConfig { + return { + id: entry.id, + name: entry.name, + reasoning: entry.reasoning, + input: [...entry.input], + cost: DOUBAO_DEFAULT_COST, + contextWindow: entry.contextWindow, + maxTokens: entry.maxTokens, + }; +} + +export const DOUBAO_CODING_MODEL_CATALOG = [ + { + id: "ark-code-latest", + name: "Ark Coding Plan", + reasoning: false, + input: ["text"] as const, + contextWindow: 256000, + maxTokens: 4096, + }, + { + id: "doubao-seed-code", + name: "Doubao Seed Code", + reasoning: false, + input: ["text"] as const, + contextWindow: 256000, + maxTokens: 4096, + }, + { + id: "glm-4.7", + name: "GLM 4.7 Coding", + reasoning: false, + input: ["text"] as const, + contextWindow: 200000, + maxTokens: 4096, + }, + { + id: "kimi-k2-thinking", + name: "Kimi K2 Thinking", + reasoning: false, + input: ["text"] as const, + contextWindow: 256000, + maxTokens: 4096, + }, + { + id: "kimi-k2.5", + name: "Kimi K2.5 Coding", + reasoning: false, + input: ["text"] as const, + contextWindow: 256000, + maxTokens: 4096, + }, + { + id: "doubao-seed-code-preview-251028", + name: "Doubao Seed Code Preview", + reasoning: false, + input: ["text"] as const, + contextWindow: 256000, + maxTokens: 4096, + }, +] as const; diff --git a/src/agents/model-auth.ts b/src/agents/model-auth.ts index b8ef41530..e3a2b8142 100644 --- a/src/agents/model-auth.ts +++ b/src/agents/model-auth.ts @@ -279,6 +279,13 @@ export function resolveEnvApiKey(provider: string): EnvApiKeyResult | null { return pick("QWEN_OAUTH_TOKEN") ?? pick("QWEN_PORTAL_API_KEY"); } + if (normalized === "volcengine" || normalized === "volcengine-plan") { + return pick("VOLCANO_ENGINE_API_KEY"); + } + + if (normalized === "byteplus" || normalized === "byteplus-plan") { + return pick("BYTEPLUS_API_KEY"); + } if (normalized === "minimax-portal") { return pick("MINIMAX_OAUTH_TOKEN") ?? pick("MINIMAX_API_KEY"); } diff --git a/src/agents/model-selection.ts b/src/agents/model-selection.ts index 73286ad4f..eedb4d78d 100644 --- a/src/agents/model-selection.ts +++ b/src/agents/model-selection.ts @@ -46,6 +46,10 @@ export function normalizeProviderId(provider: string): string { if (normalized === "kimi-code") { return "kimi-coding"; } + // Backward compatibility for older provider naming. + if (normalized === "bytedance" || normalized === "doubao") { + return "volcengine"; + } return normalized; } diff --git a/src/agents/models-config.providers.ts b/src/agents/models-config.providers.ts index e622e70ec..f999d153c 100644 --- a/src/agents/models-config.providers.ts +++ b/src/agents/models-config.providers.ts @@ -10,6 +10,20 @@ import { buildCloudflareAiGatewayModelDefinition, resolveCloudflareAiGatewayBaseUrl, } from "./cloudflare-ai-gateway.js"; +import { + buildBytePlusModelDefinition, + BYTEPLUS_BASE_URL, + BYTEPLUS_MODEL_CATALOG, + BYTEPLUS_CODING_BASE_URL, + BYTEPLUS_CODING_MODEL_CATALOG, +} from "./byteplus-models.js"; +import { + buildDoubaoModelDefinition, + DOUBAO_BASE_URL, + DOUBAO_MODEL_CATALOG, + DOUBAO_CODING_BASE_URL, + DOUBAO_CODING_MODEL_CATALOG, +} from "./doubao-models.js"; import { discoverHuggingfaceModels, HUGGINGFACE_BASE_URL, @@ -547,6 +561,38 @@ function buildSyntheticProvider(): ProviderConfig { }; } +function buildDoubaoProvider(): ProviderConfig { + return { + baseUrl: DOUBAO_BASE_URL, + api: "openai-completions", + models: DOUBAO_MODEL_CATALOG.map(buildDoubaoModelDefinition), + }; +} + +function buildDoubaoCodingProvider(): ProviderConfig { + return { + baseUrl: DOUBAO_CODING_BASE_URL, + api: "openai-completions", + models: DOUBAO_CODING_MODEL_CATALOG.map(buildDoubaoModelDefinition), + }; +} + +function buildBytePlusProvider(): ProviderConfig { + return { + baseUrl: BYTEPLUS_BASE_URL, + api: "openai-completions", + models: BYTEPLUS_MODEL_CATALOG.map(buildBytePlusModelDefinition), + }; +} + +function buildBytePlusCodingProvider(): ProviderConfig { + return { + baseUrl: BYTEPLUS_CODING_BASE_URL, + api: "openai-completions", + models: BYTEPLUS_CODING_MODEL_CATALOG.map(buildBytePlusModelDefinition), + }; +} + export function buildXiaomiProvider(): ProviderConfig { return { baseUrl: XIAOMI_BASE_URL, @@ -745,6 +791,28 @@ export async function resolveImplicitProviders(params: { }; } + const volcengineKey = + resolveEnvApiKeyVarName("volcengine") ?? + resolveApiKeyFromProfiles({ provider: "volcengine", store: authStore }); + if (volcengineKey) { + providers.volcengine = { ...buildDoubaoProvider(), apiKey: volcengineKey }; + providers["volcengine-plan"] = { + ...buildDoubaoCodingProvider(), + apiKey: volcengineKey, + }; + } + + const byteplusKey = + resolveEnvApiKeyVarName("byteplus") ?? + resolveApiKeyFromProfiles({ provider: "byteplus", store: authStore }); + if (byteplusKey) { + providers.byteplus = { ...buildBytePlusProvider(), apiKey: byteplusKey }; + providers["byteplus-plan"] = { + ...buildBytePlusCodingProvider(), + apiKey: byteplusKey, + }; + } + const xiaomiKey = resolveEnvApiKeyVarName("xiaomi") ?? resolveApiKeyFromProfiles({ provider: "xiaomi", store: authStore }); diff --git a/src/agents/models-config.providers.volcengine-byteplus.e2e.test.ts b/src/agents/models-config.providers.volcengine-byteplus.e2e.test.ts new file mode 100644 index 000000000..9ce3ad892 --- /dev/null +++ b/src/agents/models-config.providers.volcengine-byteplus.e2e.test.ts @@ -0,0 +1,40 @@ +import { mkdtempSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import { describe, expect, it } from "vitest"; +import { captureEnv } from "../test-utils/env.js"; +import { resolveImplicitProviders } from "./models-config.providers.js"; + +describe("Volcengine and BytePlus providers", () => { + it("includes volcengine and volcengine-plan when VOLCANO_ENGINE_API_KEY is configured", async () => { + const agentDir = mkdtempSync(join(tmpdir(), "openclaw-test-")); + const envSnapshot = captureEnv(["VOLCANO_ENGINE_API_KEY"]); + process.env.VOLCANO_ENGINE_API_KEY = "test-key"; + + try { + const providers = await resolveImplicitProviders({ agentDir }); + expect(providers?.volcengine).toBeDefined(); + expect(providers?.["volcengine-plan"]).toBeDefined(); + expect(providers?.volcengine?.apiKey).toBe("VOLCANO_ENGINE_API_KEY"); + expect(providers?.["volcengine-plan"]?.apiKey).toBe("VOLCANO_ENGINE_API_KEY"); + } finally { + envSnapshot.restore(); + } + }); + + it("includes byteplus and byteplus-plan when BYTEPLUS_API_KEY is configured", async () => { + const agentDir = mkdtempSync(join(tmpdir(), "openclaw-test-")); + const envSnapshot = captureEnv(["BYTEPLUS_API_KEY"]); + process.env.BYTEPLUS_API_KEY = "test-key"; + + try { + const providers = await resolveImplicitProviders({ agentDir }); + expect(providers?.byteplus).toBeDefined(); + expect(providers?.["byteplus-plan"]).toBeDefined(); + expect(providers?.byteplus?.apiKey).toBe("BYTEPLUS_API_KEY"); + expect(providers?.["byteplus-plan"]?.apiKey).toBe("BYTEPLUS_API_KEY"); + } finally { + envSnapshot.restore(); + } + }); +}); diff --git a/src/agents/pi-embedded-runner/model.ts b/src/agents/pi-embedded-runner/model.ts index 3eb819174..276938503 100644 --- a/src/agents/pi-embedded-runner/model.ts +++ b/src/agents/pi-embedded-runner/model.ts @@ -14,7 +14,10 @@ import { type ModelRegistry, } from "../pi-model-discovery.js"; -type InlineModelEntry = ModelDefinitionConfig & { provider: string; baseUrl?: string }; +type InlineModelEntry = ModelDefinitionConfig & { + provider: string; + baseUrl?: string; +}; type InlineProviderConfig = { baseUrl?: string; api?: ModelDefinitionConfig["api"]; diff --git a/src/cli/program/register.onboard.ts b/src/cli/program/register.onboard.ts index 2d6ec567a..cd344a8d2 100644 --- a/src/cli/program/register.onboard.ts +++ b/src/cli/program/register.onboard.ts @@ -150,6 +150,8 @@ export function registerOnboardCommand(program: Command) { opencodeZenApiKey: opts.opencodeZenApiKey as string | undefined, xaiApiKey: opts.xaiApiKey as string | undefined, litellmApiKey: opts.litellmApiKey as string | undefined, + volcengineApiKey: opts.volcengineApiKey as string | undefined, + byteplusApiKey: opts.byteplusApiKey as string | undefined, customBaseUrl: opts.customBaseUrl as string | undefined, customApiKey: opts.customApiKey as string | undefined, customModelId: opts.customModelId as string | undefined, diff --git a/src/commands/auth-choice-options.e2e.test.ts b/src/commands/auth-choice-options.e2e.test.ts index 53c9c3c05..aed522a36 100644 --- a/src/commands/auth-choice-options.e2e.test.ts +++ b/src/commands/auth-choice-options.e2e.test.ts @@ -43,6 +43,8 @@ describe("buildAuthChoiceOptions", () => { ["Chutes OAuth auth choice", ["chutes"]], ["Qwen auth choice", ["qwen-portal"]], ["xAI auth choice", ["xai-api-key"]], + ["Volcano Engine auth choice", ["volcengine-api-key"]], + ["BytePlus auth choice", ["byteplus-api-key"]], ["vLLM auth choice", ["vllm"]], ])("includes %s", (_label, expectedValues) => { const options = getOptions(); diff --git a/src/commands/auth-choice-options.ts b/src/commands/auth-choice-options.ts index e5269ab36..4a1fbc3f1 100644 --- a/src/commands/auth-choice-options.ts +++ b/src/commands/auth-choice-options.ts @@ -70,6 +70,18 @@ const AUTH_CHOICE_GROUP_DEFS: { hint: "API key", choices: ["xai-api-key"], }, + { + value: "volcengine", + label: "Volcano Engine", + hint: "API key", + choices: ["volcengine-api-key"], + }, + { + value: "byteplus", + label: "BytePlus", + hint: "API key", + choices: ["byteplus-api-key"], + }, { value: "openrouter", label: "OpenRouter", @@ -180,6 +192,8 @@ const BASE_AUTH_CHOICE_OPTIONS: ReadonlyArray = [ }, { value: "openai-api-key", label: "OpenAI API key" }, { value: "xai-api-key", label: "xAI (Grok) API key" }, + { value: "volcengine-api-key", label: "Volcano Engine API key" }, + { value: "byteplus-api-key", label: "BytePlus API key" }, { value: "qianfan-api-key", label: "Qianfan API key", diff --git a/src/commands/auth-choice.apply.byteplus.ts b/src/commands/auth-choice.apply.byteplus.ts new file mode 100644 index 000000000..edbbd728e --- /dev/null +++ b/src/commands/auth-choice.apply.byteplus.ts @@ -0,0 +1,73 @@ +import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; +import { resolveEnvApiKey } from "../agents/model-auth.js"; +import { upsertSharedEnvVar } from "../infra/env-file.js"; +import { + formatApiKeyPreview, + normalizeApiKeyInput, + validateApiKeyInput, +} from "./auth-choice.api-key.js"; +import { applyPrimaryModel } from "./model-picker.js"; + +/** Default model for BytePlus auth onboarding. */ +export const BYTEPLUS_DEFAULT_MODEL = "byteplus-plan/ark-code-latest"; + +export async function applyAuthChoiceBytePlus( + params: ApplyAuthChoiceParams, +): Promise { + if (params.authChoice !== "byteplus-api-key") { + return null; + } + + const envKey = resolveEnvApiKey("byteplus"); + if (envKey) { + const useExisting = await params.prompter.confirm({ + message: `Use existing BYTEPLUS_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`, + initialValue: true, + }); + if (useExisting) { + const result = upsertSharedEnvVar({ + key: "BYTEPLUS_API_KEY", + value: envKey.apiKey, + }); + if (!process.env.BYTEPLUS_API_KEY) { + process.env.BYTEPLUS_API_KEY = envKey.apiKey; + } + await params.prompter.note( + `Copied BYTEPLUS_API_KEY to ${result.path} for launchd compatibility.`, + "BytePlus API key", + ); + const configWithModel = applyPrimaryModel(params.config, BYTEPLUS_DEFAULT_MODEL); + return { + config: configWithModel, + agentModelOverride: BYTEPLUS_DEFAULT_MODEL, + }; + } + } + + let key: string | undefined; + if (params.opts?.byteplusApiKey) { + key = params.opts.byteplusApiKey; + } else { + key = await params.prompter.text({ + message: "Enter BytePlus API key", + validate: validateApiKeyInput, + }); + } + + const trimmed = normalizeApiKeyInput(String(key)); + const result = upsertSharedEnvVar({ + key: "BYTEPLUS_API_KEY", + value: trimmed, + }); + process.env.BYTEPLUS_API_KEY = trimmed; + await params.prompter.note( + `Saved BYTEPLUS_API_KEY to ${result.path} for launchd compatibility.`, + "BytePlus API key", + ); + + const configWithModel = applyPrimaryModel(params.config, BYTEPLUS_DEFAULT_MODEL); + return { + config: configWithModel, + agentModelOverride: BYTEPLUS_DEFAULT_MODEL, + }; +} diff --git a/src/commands/auth-choice.apply.ts b/src/commands/auth-choice.apply.ts index be07d07c5..54e516f94 100644 --- a/src/commands/auth-choice.apply.ts +++ b/src/commands/auth-choice.apply.ts @@ -1,8 +1,10 @@ import type { OpenClawConfig } from "../config/config.js"; import type { RuntimeEnv } from "../runtime.js"; import type { WizardPrompter } from "../wizard/prompts.js"; +import type { AuthChoice, OnboardOptions } from "./onboard-types.js"; import { applyAuthChoiceAnthropic } from "./auth-choice.apply.anthropic.js"; import { applyAuthChoiceApiProviders } from "./auth-choice.apply.api-providers.js"; +import { applyAuthChoiceBytePlus } from "./auth-choice.apply.byteplus.js"; import { applyAuthChoiceCopilotProxy } from "./auth-choice.apply.copilot-proxy.js"; import { applyAuthChoiceGitHubCopilot } from "./auth-choice.apply.github-copilot.js"; import { applyAuthChoiceGoogleAntigravity } from "./auth-choice.apply.google-antigravity.js"; @@ -12,8 +14,8 @@ import { applyAuthChoiceOAuth } from "./auth-choice.apply.oauth.js"; import { applyAuthChoiceOpenAI } from "./auth-choice.apply.openai.js"; import { applyAuthChoiceQwenPortal } from "./auth-choice.apply.qwen-portal.js"; import { applyAuthChoiceVllm } from "./auth-choice.apply.vllm.js"; +import { applyAuthChoiceVolcengine } from "./auth-choice.apply.volcengine.js"; import { applyAuthChoiceXAI } from "./auth-choice.apply.xai.js"; -import type { AuthChoice } from "./onboard-types.js"; export type ApplyAuthChoiceParams = { authChoice: AuthChoice; @@ -23,14 +25,7 @@ export type ApplyAuthChoiceParams = { agentDir?: string; setDefaultModel: boolean; agentId?: string; - opts?: { - tokenProvider?: string; - token?: string; - cloudflareAiGatewayAccountId?: string; - cloudflareAiGatewayGatewayId?: string; - cloudflareAiGatewayApiKey?: string; - xaiApiKey?: string; - }; + opts?: Partial; }; export type ApplyAuthChoiceResult = { @@ -54,6 +49,8 @@ export async function applyAuthChoice( applyAuthChoiceCopilotProxy, applyAuthChoiceQwenPortal, applyAuthChoiceXAI, + applyAuthChoiceVolcengine, + applyAuthChoiceBytePlus, ]; for (const handler of handlers) { diff --git a/src/commands/auth-choice.apply.volcengine.ts b/src/commands/auth-choice.apply.volcengine.ts new file mode 100644 index 000000000..7b22b9649 --- /dev/null +++ b/src/commands/auth-choice.apply.volcengine.ts @@ -0,0 +1,73 @@ +import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; +import { resolveEnvApiKey } from "../agents/model-auth.js"; +import { upsertSharedEnvVar } from "../infra/env-file.js"; +import { + formatApiKeyPreview, + normalizeApiKeyInput, + validateApiKeyInput, +} from "./auth-choice.api-key.js"; +import { applyPrimaryModel } from "./model-picker.js"; + +/** Default model for Volcano Engine auth onboarding. */ +export const VOLCENGINE_DEFAULT_MODEL = "volcengine-plan/ark-code-latest"; + +export async function applyAuthChoiceVolcengine( + params: ApplyAuthChoiceParams, +): Promise { + if (params.authChoice !== "volcengine-api-key") { + return null; + } + + const envKey = resolveEnvApiKey("volcengine"); + if (envKey) { + const useExisting = await params.prompter.confirm({ + message: `Use existing VOLCANO_ENGINE_API_KEY (${envKey.source}, ${formatApiKeyPreview(envKey.apiKey)})?`, + initialValue: true, + }); + if (useExisting) { + const result = upsertSharedEnvVar({ + key: "VOLCANO_ENGINE_API_KEY", + value: envKey.apiKey, + }); + if (!process.env.VOLCANO_ENGINE_API_KEY) { + process.env.VOLCANO_ENGINE_API_KEY = envKey.apiKey; + } + await params.prompter.note( + `Copied VOLCANO_ENGINE_API_KEY to ${result.path} for launchd compatibility.`, + "Volcano Engine API Key", + ); + const configWithModel = applyPrimaryModel(params.config, VOLCENGINE_DEFAULT_MODEL); + return { + config: configWithModel, + agentModelOverride: VOLCENGINE_DEFAULT_MODEL, + }; + } + } + + let key: string | undefined; + if (params.opts?.volcengineApiKey) { + key = params.opts.volcengineApiKey; + } else { + key = await params.prompter.text({ + message: "Enter Volcano Engine API Key", + validate: validateApiKeyInput, + }); + } + + const trimmed = normalizeApiKeyInput(String(key)); + const result = upsertSharedEnvVar({ + key: "VOLCANO_ENGINE_API_KEY", + value: trimmed, + }); + process.env.VOLCANO_ENGINE_API_KEY = trimmed; + await params.prompter.note( + `Saved VOLCANO_ENGINE_API_KEY to ${result.path} for launchd compatibility.`, + "Volcano Engine API Key", + ); + + const configWithModel = applyPrimaryModel(params.config, VOLCENGINE_DEFAULT_MODEL); + return { + config: configWithModel, + agentModelOverride: VOLCENGINE_DEFAULT_MODEL, + }; +} diff --git a/src/commands/auth-choice.preferred-provider.ts b/src/commands/auth-choice.preferred-provider.ts index 05eaa83ea..c8479b982 100644 --- a/src/commands/auth-choice.preferred-provider.ts +++ b/src/commands/auth-choice.preferred-provider.ts @@ -41,6 +41,8 @@ const PREFERRED_PROVIDER_BY_AUTH_CHOICE: Partial> = { "xai-api-key": "xai", "litellm-api-key": "litellm", "qwen-portal": "qwen-portal", + "volcengine-api-key": "volcengine", + "byteplus-api-key": "byteplus", "minimax-portal": "minimax-portal", "qianfan-api-key": "qianfan", "custom-api-key": "custom", diff --git a/src/commands/model-picker.ts b/src/commands/model-picker.ts index ebf662369..6b1c8691e 100644 --- a/src/commands/model-picker.ts +++ b/src/commands/model-picker.ts @@ -258,7 +258,15 @@ export async function promptDefaultModel( } if (hasPreferredProvider && preferredProvider) { - models = models.filter((entry) => entry.provider === preferredProvider); + models = models.filter((entry) => { + if (preferredProvider === "volcengine") { + return entry.provider === "volcengine" || entry.provider === "volcengine-plan"; + } + if (preferredProvider === "byteplus") { + return entry.provider === "byteplus" || entry.provider === "byteplus-plan"; + } + return entry.provider === preferredProvider; + }); if (preferredProvider === "anthropic") { models = models.filter((entry) => !isAnthropicLegacyModel(entry)); } diff --git a/src/commands/onboard-non-interactive.provider-auth.e2e.test.ts b/src/commands/onboard-non-interactive.provider-auth.e2e.test.ts index e59c5b193..bb0a3d14c 100644 --- a/src/commands/onboard-non-interactive.provider-auth.e2e.test.ts +++ b/src/commands/onboard-non-interactive.provider-auth.e2e.test.ts @@ -227,6 +227,27 @@ describe("onboard (non-interactive): provider auth", () => { }); }, 60_000); + it("stores Volcano Engine API key and sets default model", async () => { + await withOnboardEnv("openclaw-onboard-volcengine-", async (env) => { + const cfg = await runOnboardingAndReadConfig(env, { + authChoice: "volcengine-api-key", + volcengineApiKey: "volcengine-test-key", + }); + + expect(cfg.agents?.defaults?.model?.primary).toBe("volcengine-plan/ark-code-latest"); + }); + }, 60_000); + + it("infers BytePlus auth choice from --byteplus-api-key and sets default model", async () => { + await withOnboardEnv("openclaw-onboard-byteplus-infer-", async (env) => { + const cfg = await runOnboardingAndReadConfig(env, { + byteplusApiKey: "byteplus-test-key", + }); + + expect(cfg.agents?.defaults?.model?.primary).toBe("byteplus-plan/ark-code-latest"); + }); + }, 60_000); + it("stores Vercel AI Gateway API key and sets default model", async () => { await withOnboardEnv("openclaw-onboard-ai-gateway-", async (env) => { const cfg = await runOnboardingAndReadConfig(env, { diff --git a/src/commands/onboard-non-interactive/local/auth-choice-inference.ts b/src/commands/onboard-non-interactive/local/auth-choice-inference.ts index 1064961bd..b5c5c44b5 100644 --- a/src/commands/onboard-non-interactive/local/auth-choice-inference.ts +++ b/src/commands/onboard-non-interactive/local/auth-choice-inference.ts @@ -28,6 +28,8 @@ type AuthChoiceFlagOptions = Pick< | "xaiApiKey" | "litellmApiKey" | "qianfanApiKey" + | "volcengineApiKey" + | "byteplusApiKey" | "customBaseUrl" | "customModelId" | "customApiKey" diff --git a/src/commands/onboard-non-interactive/local/auth-choice.ts b/src/commands/onboard-non-interactive/local/auth-choice.ts index 61f437adf..ea97d12e5 100644 --- a/src/commands/onboard-non-interactive/local/auth-choice.ts +++ b/src/commands/onboard-non-interactive/local/auth-choice.ts @@ -55,6 +55,7 @@ import { resolveCustomProviderId, } from "../../onboard-custom.js"; import type { AuthChoice, OnboardOptions } from "../../onboard-types.js"; +import { applyPrimaryModel } from "../../model-picker.js"; import { applyOpenAIConfig } from "../../openai-model-default.js"; import { detectZaiEndpoint } from "../../zai-endpoint-detect.js"; import { resolveNonInteractiveApiKey } from "../api-keys.js"; @@ -303,6 +304,52 @@ export async function applyNonInteractiveAuthChoice(params: { return applyXaiConfig(nextConfig); } + if (authChoice === "volcengine-api-key") { + const resolved = await resolveNonInteractiveApiKey({ + provider: "volcengine", + cfg: baseConfig, + flagValue: opts.volcengineApiKey, + flagName: "--volcengine-api-key", + envVar: "VOLCANO_ENGINE_API_KEY", + runtime, + }); + if (!resolved) { + return null; + } + if (resolved.source !== "profile") { + const result = upsertSharedEnvVar({ + key: "VOLCANO_ENGINE_API_KEY", + value: resolved.key, + }); + process.env.VOLCANO_ENGINE_API_KEY = resolved.key; + runtime.log(`Saved VOLCANO_ENGINE_API_KEY to ${shortenHomePath(result.path)}`); + } + return applyPrimaryModel(nextConfig, "volcengine-plan/ark-code-latest"); + } + + if (authChoice === "byteplus-api-key") { + const resolved = await resolveNonInteractiveApiKey({ + provider: "byteplus", + cfg: baseConfig, + flagValue: opts.byteplusApiKey, + flagName: "--byteplus-api-key", + envVar: "BYTEPLUS_API_KEY", + runtime, + }); + if (!resolved) { + return null; + } + if (resolved.source !== "profile") { + const result = upsertSharedEnvVar({ + key: "BYTEPLUS_API_KEY", + value: resolved.key, + }); + process.env.BYTEPLUS_API_KEY = resolved.key; + runtime.log(`Saved BYTEPLUS_API_KEY to ${shortenHomePath(result.path)}`); + } + return applyPrimaryModel(nextConfig, "byteplus-plan/ark-code-latest"); + } + if (authChoice === "qianfan-api-key") { const resolved = await resolveNonInteractiveApiKey({ provider: "qianfan", diff --git a/src/commands/onboard-provider-auth-flags.ts b/src/commands/onboard-provider-auth-flags.ts index 2ca75c2ae..f55ea438e 100644 --- a/src/commands/onboard-provider-auth-flags.ts +++ b/src/commands/onboard-provider-auth-flags.ts @@ -21,6 +21,8 @@ type OnboardProviderAuthOptionKey = keyof Pick< | "xaiApiKey" | "litellmApiKey" | "qianfanApiKey" + | "volcengineApiKey" + | "byteplusApiKey" >; export type OnboardProviderAuthFlag = { @@ -166,4 +168,18 @@ export const ONBOARD_PROVIDER_AUTH_FLAGS: ReadonlyArray cliOption: "--qianfan-api-key ", description: "QIANFAN API key", }, + { + optionKey: "volcengineApiKey", + authChoice: "volcengine-api-key", + cliFlag: "--volcengine-api-key", + cliOption: "--volcengine-api-key ", + description: "Volcano Engine API key", + }, + { + optionKey: "byteplusApiKey", + authChoice: "byteplus-api-key", + cliFlag: "--byteplus-api-key", + cliOption: "--byteplus-api-key ", + description: "BytePlus API key", + }, ]; diff --git a/src/commands/onboard-types.ts b/src/commands/onboard-types.ts index 43a9cde76..c3ec88b7b 100644 --- a/src/commands/onboard-types.ts +++ b/src/commands/onboard-types.ts @@ -45,6 +45,8 @@ export type AuthChoice = | "copilot-proxy" | "qwen-portal" | "xai-api-key" + | "volcengine-api-key" + | "byteplus-api-key" | "qianfan-api-key" | "custom-api-key" | "skip"; @@ -71,6 +73,8 @@ export type AuthChoiceGroupId = | "huggingface" | "qianfan" | "xai" + | "volcengine" + | "byteplus" | "custom"; export type GatewayAuthChoice = "token" | "password"; export type ResetScope = "config" | "config+creds+sessions" | "full"; @@ -119,6 +123,8 @@ export type OnboardOptions = { huggingfaceApiKey?: string; opencodeZenApiKey?: string; xaiApiKey?: string; + volcengineApiKey?: string; + byteplusApiKey?: string; qianfanApiKey?: string; customBaseUrl?: string; customApiKey?: string; From 581868365d718c8cd165707de90de936b38fc759 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 15:04:28 +0100 Subject: [PATCH 0207/1007] fix: finish volcengine/byteplus landing polish (#7967) (thanks @funmore123) --- CHANGELOG.md | 1 + docs/concepts/model-providers.md | 8 ++++---- src/agents/models-config.providers.ts | 8 ++++---- src/commands/auth-choice.apply.byteplus.ts | 2 +- src/commands/auth-choice.apply.ts | 2 +- src/commands/auth-choice.apply.volcengine.ts | 2 +- src/commands/onboard-non-interactive/local/auth-choice.ts | 2 +- 7 files changed, 13 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba82d5d27..0b43df367 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ Docs: https://docs.openclaw.ai ### Changes +- Providers/Onboarding: add Volcano Engine (Doubao) and BytePlus providers/models (including coding variants), wire onboarding auth choices for interactive + non-interactive flows, and align docs to `volcengine-api-key`. (#7967) Thanks @funmore123. - Channels/CLI: add per-account/channel `defaultTo` outbound routing fallback so `openclaw agent --deliver` can send without explicit `--reply-to` when a default target is configured. (#16985) Thanks @KirillShchetinin. - Channels: allow per-channel model overrides via `channels.modelByChannel` and note them in /status. Thanks @thewilloftheshadow. - Telegram/Streaming: simplify preview streaming config to `channels.telegram.streaming` (boolean), auto-map legacy `streamMode` values, and remove block-vs-partial preview branching. (#22012) thanks @obviyus. diff --git a/docs/concepts/model-providers.md b/docs/concepts/model-providers.md index 01d1029e0..c8037d639 100644 --- a/docs/concepts/model-providers.md +++ b/docs/concepts/model-providers.md @@ -228,8 +228,8 @@ Volcano Engine (火山引擎) provides access to Doubao and other models in Chin ```json5 { agents: { - defaults: { model: { primary: "volcengine/doubao-seed-1-8-251228" } } - } + defaults: { model: { primary: "volcengine/doubao-seed-1-8-251228" } }, + }, } ``` @@ -261,8 +261,8 @@ BytePlus ARK provides access to the same models as Volcano Engine for internatio ```json5 { agents: { - defaults: { model: { primary: "byteplus/seed-1-8-251228" } } - } + defaults: { model: { primary: "byteplus/seed-1-8-251228" } }, + }, } ``` diff --git a/src/agents/models-config.providers.ts b/src/agents/models-config.providers.ts index f999d153c..b272921c9 100644 --- a/src/agents/models-config.providers.ts +++ b/src/agents/models-config.providers.ts @@ -6,10 +6,6 @@ import { } from "../providers/github-copilot-token.js"; import { ensureAuthProfileStore, listProfilesForProvider } from "./auth-profiles.js"; import { discoverBedrockModels } from "./bedrock-discovery.js"; -import { - buildCloudflareAiGatewayModelDefinition, - resolveCloudflareAiGatewayBaseUrl, -} from "./cloudflare-ai-gateway.js"; import { buildBytePlusModelDefinition, BYTEPLUS_BASE_URL, @@ -17,6 +13,10 @@ import { BYTEPLUS_CODING_BASE_URL, BYTEPLUS_CODING_MODEL_CATALOG, } from "./byteplus-models.js"; +import { + buildCloudflareAiGatewayModelDefinition, + resolveCloudflareAiGatewayBaseUrl, +} from "./cloudflare-ai-gateway.js"; import { buildDoubaoModelDefinition, DOUBAO_BASE_URL, diff --git a/src/commands/auth-choice.apply.byteplus.ts b/src/commands/auth-choice.apply.byteplus.ts index edbbd728e..de62f6bd0 100644 --- a/src/commands/auth-choice.apply.byteplus.ts +++ b/src/commands/auth-choice.apply.byteplus.ts @@ -1,4 +1,3 @@ -import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { resolveEnvApiKey } from "../agents/model-auth.js"; import { upsertSharedEnvVar } from "../infra/env-file.js"; import { @@ -6,6 +5,7 @@ import { normalizeApiKeyInput, validateApiKeyInput, } from "./auth-choice.api-key.js"; +import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { applyPrimaryModel } from "./model-picker.js"; /** Default model for BytePlus auth onboarding. */ diff --git a/src/commands/auth-choice.apply.ts b/src/commands/auth-choice.apply.ts index 54e516f94..7d9791f34 100644 --- a/src/commands/auth-choice.apply.ts +++ b/src/commands/auth-choice.apply.ts @@ -1,7 +1,6 @@ import type { OpenClawConfig } from "../config/config.js"; import type { RuntimeEnv } from "../runtime.js"; import type { WizardPrompter } from "../wizard/prompts.js"; -import type { AuthChoice, OnboardOptions } from "./onboard-types.js"; import { applyAuthChoiceAnthropic } from "./auth-choice.apply.anthropic.js"; import { applyAuthChoiceApiProviders } from "./auth-choice.apply.api-providers.js"; import { applyAuthChoiceBytePlus } from "./auth-choice.apply.byteplus.js"; @@ -16,6 +15,7 @@ import { applyAuthChoiceQwenPortal } from "./auth-choice.apply.qwen-portal.js"; import { applyAuthChoiceVllm } from "./auth-choice.apply.vllm.js"; import { applyAuthChoiceVolcengine } from "./auth-choice.apply.volcengine.js"; import { applyAuthChoiceXAI } from "./auth-choice.apply.xai.js"; +import type { AuthChoice, OnboardOptions } from "./onboard-types.js"; export type ApplyAuthChoiceParams = { authChoice: AuthChoice; diff --git a/src/commands/auth-choice.apply.volcengine.ts b/src/commands/auth-choice.apply.volcengine.ts index 7b22b9649..0616dc177 100644 --- a/src/commands/auth-choice.apply.volcengine.ts +++ b/src/commands/auth-choice.apply.volcengine.ts @@ -1,4 +1,3 @@ -import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { resolveEnvApiKey } from "../agents/model-auth.js"; import { upsertSharedEnvVar } from "../infra/env-file.js"; import { @@ -6,6 +5,7 @@ import { normalizeApiKeyInput, validateApiKeyInput, } from "./auth-choice.api-key.js"; +import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js"; import { applyPrimaryModel } from "./model-picker.js"; /** Default model for Volcano Engine auth onboarding. */ diff --git a/src/commands/onboard-non-interactive/local/auth-choice.ts b/src/commands/onboard-non-interactive/local/auth-choice.ts index ea97d12e5..17aac1593 100644 --- a/src/commands/onboard-non-interactive/local/auth-choice.ts +++ b/src/commands/onboard-non-interactive/local/auth-choice.ts @@ -8,6 +8,7 @@ import { shortenHomePath } from "../../../utils.js"; import { normalizeSecretInput } from "../../../utils/normalize-secret-input.js"; import { buildTokenProfileId, validateAnthropicSetupToken } from "../../auth-token.js"; import { applyGoogleGeminiModelDefault } from "../../google-gemini-model-default.js"; +import { applyPrimaryModel } from "../../model-picker.js"; import { applyAuthProfileConfig, applyCloudflareAiGatewayConfig, @@ -55,7 +56,6 @@ import { resolveCustomProviderId, } from "../../onboard-custom.js"; import type { AuthChoice, OnboardOptions } from "../../onboard-types.js"; -import { applyPrimaryModel } from "../../model-picker.js"; import { applyOpenAIConfig } from "../../openai-model-default.js"; import { detectZaiEndpoint } from "../../zai-endpoint-detect.js"; import { resolveNonInteractiveApiKey } from "../api-keys.js"; From 3101047234b042338dd6f9f52238d3cae84d1d61 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 15:07:38 +0100 Subject: [PATCH 0208/1007] feat(models): add Gemini 3.1 support --- CHANGELOG.md | 1 + src/agents/google-gemini-switch.live.test.ts | 116 ++++++++++--------- 2 files changed, 61 insertions(+), 56 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b43df367..ef1155c3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ Docs: https://docs.openclaw.ai ### Changes +- Models/Google: add Gemini 3.1 support (`google/gemini-3.1-pro-preview`). - Providers/Onboarding: add Volcano Engine (Doubao) and BytePlus providers/models (including coding variants), wire onboarding auth choices for interactive + non-interactive flows, and align docs to `volcengine-api-key`. (#7967) Thanks @funmore123. - Channels/CLI: add per-account/channel `defaultTo` outbound routing fallback so `openclaw agent --deliver` can send without explicit `--reply-to` when a default target is configured. (#16985) Thanks @KirillShchetinin. - Channels: allow per-channel model overrides via `channels.modelByChannel` and note them in /status. Thanks @thewilloftheshadow. diff --git a/src/agents/google-gemini-switch.live.test.ts b/src/agents/google-gemini-switch.live.test.ts index 164bfd867..7c253b035 100644 --- a/src/agents/google-gemini-switch.live.test.ts +++ b/src/agents/google-gemini-switch.live.test.ts @@ -9,68 +9,72 @@ const LIVE = isTruthyEnvValue(process.env.GEMINI_LIVE_TEST) || isTruthyEnvValue( const describeLive = LIVE && GEMINI_KEY ? describe : describe.skip; describeLive("gemini live switch", () => { - it("handles unsigned tool calls from Antigravity when switching to Gemini 3", async () => { - const now = Date.now(); - const model = getModel("google", "gemini-3-pro-preview"); + const googleModels = ["gemini-3-pro-preview", "gemini-3.1-pro-preview"] as const; - const res = await completeSimple( - model, - { - messages: [ - { - role: "user", - content: "Reply with ok.", - timestamp: now, - }, - { - role: "assistant", - content: [ - { - type: "toolCall", - id: "call_1", - name: "bash", - arguments: { command: "ls -la" }, - // No thoughtSignature: simulates Claude via Antigravity. - }, - ], - api: "google-gemini-cli", - provider: "google-antigravity", - model: "claude-sonnet-4-20250514", - usage: { - input: 0, - output: 0, - cacheRead: 0, - cacheWrite: 0, - totalTokens: 0, - cost: { + for (const modelId of googleModels) { + it(`handles unsigned tool calls from Antigravity when switching to ${modelId}`, async () => { + const now = Date.now(); + const model = getModel("google", modelId); + + const res = await completeSimple( + model, + { + messages: [ + { + role: "user", + content: "Reply with ok.", + timestamp: now, + }, + { + role: "assistant", + content: [ + { + type: "toolCall", + id: "call_1", + name: "bash", + arguments: { command: "ls -la" }, + // No thoughtSignature: simulates Claude via Antigravity. + }, + ], + api: "google-gemini-cli", + provider: "google-antigravity", + model: "claude-sonnet-4-20250514", + usage: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, - total: 0, + totalTokens: 0, + cost: { + input: 0, + output: 0, + cacheRead: 0, + cacheWrite: 0, + total: 0, + }, }, + stopReason: "stop", + timestamp: now, }, - stopReason: "stop", - timestamp: now, - }, - ], - tools: [ - { - name: "bash", - description: "Run shell command", - parameters: Type.Object({ - command: Type.String(), - }), - }, - ], - }, - { - apiKey: GEMINI_KEY, - reasoning: "low", - maxTokens: 128, - }, - ); + ], + tools: [ + { + name: "bash", + description: "Run shell command", + parameters: Type.Object({ + command: Type.String(), + }), + }, + ], + }, + { + apiKey: GEMINI_KEY, + reasoning: "low", + maxTokens: 128, + }, + ); - expect(res.stopReason).not.toBe("error"); - }, 20000); + expect(res.stopReason).not.toBe("error"); + }, 20000); + } }); From 352b5262da32d23bbac200defe167891d57f4c21 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 15:08:24 +0100 Subject: [PATCH 0209/1007] fix(ci): make docs spellcheck fallback deterministic --- package.json | 4 ++-- scripts/codespell-ignore.txt | 7 ++++++ scripts/docs-spellcheck.sh | 44 ++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 scripts/docs-spellcheck.sh diff --git a/package.json b/package.json index 43bd5bf11..ab26f4ea2 100644 --- a/package.json +++ b/package.json @@ -70,8 +70,8 @@ "docs:check-links": "node scripts/docs-link-audit.mjs", "docs:dev": "cd docs && mint dev", "docs:list": "node scripts/docs-list.js", - "docs:spellcheck": "if command -v codespell >/dev/null 2>&1; then codespell README.md docs --skip='*.png,*.jpg,*.jpeg,*.gif,*.svg' -D - -D scripts/codespell-dictionary.txt -I scripts/codespell-ignore.txt; else pnpm dlx codespell README.md docs --skip='*.png,*.jpg,*.jpeg,*.gif,*.svg' -D - -D scripts/codespell-dictionary.txt -I scripts/codespell-ignore.txt; fi", - "docs:spellcheck:fix": "if command -v codespell >/dev/null 2>&1; then codespell README.md docs --skip='*.png,*.jpg,*.jpeg,*.gif,*.svg' -D - -D scripts/codespell-dictionary.txt -I scripts/codespell-ignore.txt -w; else pnpm dlx codespell README.md docs --skip='*.png,*.jpg,*.jpeg,*.gif,*.svg' -D - -D scripts/codespell-dictionary.txt -I scripts/codespell-ignore.txt -w; fi", + "docs:spellcheck": "bash scripts/docs-spellcheck.sh", + "docs:spellcheck:fix": "bash scripts/docs-spellcheck.sh --write", "format": "oxfmt --write", "format:all": "pnpm format && pnpm format:swift", "format:check": "oxfmt --check", diff --git a/scripts/codespell-ignore.txt b/scripts/codespell-ignore.txt index b7008d3ea..3c242f6a2 100644 --- a/scripts/codespell-ignore.txt +++ b/scripts/codespell-ignore.txt @@ -1,2 +1,9 @@ iTerm FO +Nam +Lins +Vai +OptionA +CAF +overlayed +re-use diff --git a/scripts/docs-spellcheck.sh b/scripts/docs-spellcheck.sh new file mode 100644 index 000000000..17505993d --- /dev/null +++ b/scripts/docs-spellcheck.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +set -euo pipefail + +mode="${1:-}" +write_flag=() +if [[ "$mode" == "--write" ]]; then + write_flag=(-w) +fi + +args=( + README.md + docs + --skip=*.png,*.jpg,*.jpeg,*.gif,*.svg + -D + - + -D + scripts/codespell-dictionary.txt + -I + scripts/codespell-ignore.txt + "${write_flag[@]}" +) + +if command -v codespell >/dev/null 2>&1; then + codespell "${args[@]}" + exit 0 +fi + +if command -v python3 >/dev/null 2>&1; then + python3 -m pip install --user --disable-pip-version-check --break-system-packages codespell >/dev/null 2>&1 || \ + python3 -m pip install --user --disable-pip-version-check codespell >/dev/null 2>&1 + + user_bin="$(python3 - <<'PY' +import site +print(f"{site.USER_BASE}/bin") +PY +)" + if [[ -x "${user_bin}/codespell" ]]; then + "${user_bin}/codespell" "${args[@]}" + exit 0 + fi +fi + +echo "codespell unavailable: install codespell or python3" >&2 +exit 1 From b25d3652e78d92f12f8b70286d154606f9a83253 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 15:35:45 +0100 Subject: [PATCH 0210/1007] fix(agents): cap embedded runner retry loop --- CHANGELOG.md | 1 + .../run.overflow-compaction.test.ts | 27 ++++++++++++++++ src/agents/pi-embedded-runner/run.ts | 32 +++++++++++++++++++ src/agents/pi-embedded-runner/types.ts | 7 +++- 4 files changed, 66 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef1155c3c..01542c3bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ Docs: https://docs.openclaw.ai ### Fixes +- Security/Agents: cap embedded Pi runner outer retry loop to 24 attempts and return an explicit `retry_limit` error payload when retries never converge, preventing unbounded internal retry cycles (`GHSA-76m6-pj3w-v7mf`). - Agents/Tool images: include source filenames in `agents/tool-images` resize logs so compression events can be traced back to specific files. - Providers/OAuth: harden Qwen and Chutes refresh handling by validating refresh response expiry values and preserving prior refresh tokens when providers return empty refresh token fields, with regression coverage for empty-token responses. - Models/Kimi-Coding: add missing implicit provider template for `kimi-coding` with correct `anthropic-messages` API type and base URL, fixing 403 errors when using Kimi for Coding. (#22409) diff --git a/src/agents/pi-embedded-runner/run.overflow-compaction.test.ts b/src/agents/pi-embedded-runner/run.overflow-compaction.test.ts index 1dc794baa..29531fb07 100644 --- a/src/agents/pi-embedded-runner/run.overflow-compaction.test.ts +++ b/src/agents/pi-embedded-runner/run.overflow-compaction.test.ts @@ -1,5 +1,6 @@ import "./run.overflow-compaction.mocks.shared.js"; import { beforeEach, describe, expect, it, vi } from "vitest"; +import { pickFallbackThinkingLevel } from "../pi-embedded-helpers.js"; import { compactEmbeddedPiSessionDirect } from "./compact.js"; import { runEmbeddedPiAgent } from "./run.js"; import { makeAttemptResult, mockOverflowRetrySuccess } from "./run.overflow-compaction.fixture.js"; @@ -16,6 +17,7 @@ const mockedSessionLikelyHasOversizedToolResults = vi.mocked(sessionLikelyHasOve const mockedTruncateOversizedToolResultsInSession = vi.mocked( truncateOversizedToolResultsInSession, ); +const mockedPickFallbackThinkingLevel = vi.mocked(pickFallbackThinkingLevel); describe("runEmbeddedPiAgent overflow compaction trigger routing", () => { beforeEach(() => { @@ -106,4 +108,29 @@ describe("runEmbeddedPiAgent overflow compaction trigger routing", () => { expect(mockedRunEmbeddedAttempt).toHaveBeenCalledTimes(4); expect(result.meta.error?.kind).toBe("context_overflow"); }); + + it("returns retry_limit when repeated retries never converge", async () => { + mockedRunEmbeddedAttempt.mockReset(); + mockedCompactDirect.mockReset(); + mockedPickFallbackThinkingLevel.mockReset(); + mockedRunEmbeddedAttempt.mockResolvedValue( + makeAttemptResult({ promptError: new Error("unsupported reasoning mode") }), + ); + mockedPickFallbackThinkingLevel.mockReturnValue("low"); + + const result = await runEmbeddedPiAgent({ + sessionId: "test-session", + sessionKey: "test-key", + sessionFile: "/tmp/session.json", + workspaceDir: "/tmp/workspace", + prompt: "hello", + timeoutMs: 30000, + runId: "run-1", + }); + + expect(mockedRunEmbeddedAttempt).toHaveBeenCalledTimes(24); + expect(mockedCompactDirect).not.toHaveBeenCalled(); + expect(result.meta.error?.kind).toBe("retry_limit"); + expect(result.payloads?.[0]?.isError).toBe(true); + }); }); diff --git a/src/agents/pi-embedded-runner/run.ts b/src/agents/pi-embedded-runner/run.ts index 81f26a479..be61bb601 100644 --- a/src/agents/pi-embedded-runner/run.ts +++ b/src/agents/pi-embedded-runner/run.ts @@ -102,6 +102,9 @@ function createCompactionDiagId(): string { return `ovf-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`; } +// Defensive guard for the outer run loop across all retry branches. +const MAX_RUN_RETRY_ITERATIONS = 24; + const hasUsageValues = ( usage: ReturnType, ): usage is NonNullable> => @@ -475,13 +478,42 @@ export async function runEmbeddedPiAgent( } const MAX_OVERFLOW_COMPACTION_ATTEMPTS = 3; + const MAX_RUN_LOOP_ITERATIONS = MAX_RUN_RETRY_ITERATIONS; let overflowCompactionAttempts = 0; let toolResultTruncationAttempted = false; const usageAccumulator = createUsageAccumulator(); let lastRunPromptUsage: ReturnType | undefined; let autoCompactionCount = 0; + let runLoopIterations = 0; try { while (true) { + if (runLoopIterations >= MAX_RUN_LOOP_ITERATIONS) { + const message = `Exceeded retry limit after ${runLoopIterations} attempts.`; + log.error( + `[run-retry-limit] sessionKey=${params.sessionKey ?? params.sessionId} ` + + `provider=${provider}/${modelId} attempts=${runLoopIterations}`, + ); + return { + payloads: [ + { + text: + "Request failed after repeated internal retries. " + + "Please try again, or use /new to start a fresh session.", + isError: true, + }, + ], + meta: { + durationMs: Date.now() - started, + agentMeta: { + sessionId: params.sessionId, + provider, + model: model.id, + }, + error: { kind: "retry_limit", message }, + }, + }; + } + runLoopIterations += 1; attemptedThinking.add(thinkLevel); await fs.mkdir(resolvedWorkspace, { recursive: true }); diff --git a/src/agents/pi-embedded-runner/types.ts b/src/agents/pi-embedded-runner/types.ts index ac7c723d2..722abbf2a 100644 --- a/src/agents/pi-embedded-runner/types.ts +++ b/src/agents/pi-embedded-runner/types.ts @@ -36,7 +36,12 @@ export type EmbeddedPiRunMeta = { aborted?: boolean; systemPromptReport?: SessionSystemPromptReport; error?: { - kind: "context_overflow" | "compaction_failure" | "role_ordering" | "image_size"; + kind: + | "context_overflow" + | "compaction_failure" + | "role_ordering" + | "image_size" + | "retry_limit"; message: string; }; /** Stop reason for the agent run (e.g., "completed", "tool_calls"). */ From b520e7ac389c33ae756cac240a117bd249c205af Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 15:36:14 +0100 Subject: [PATCH 0211/1007] fix: stabilize docker live model and doctor-switch tests --- scripts/e2e/doctor-install-switch-docker.sh | 6 +++--- src/agents/live-model-filter.test.ts | 14 ++++++++++++++ src/agents/live-model-filter.ts | 5 +++++ 3 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 src/agents/live-model-filter.test.ts diff --git a/scripts/e2e/doctor-install-switch-docker.sh b/scripts/e2e/doctor-install-switch-docker.sh index d5a48c909..bb63ab684 100755 --- a/scripts/e2e/doctor-install-switch-docker.sh +++ b/scripts/e2e/doctor-install-switch-docker.sh @@ -8,7 +8,7 @@ echo "Building Docker image..." docker build -t "$IMAGE_NAME" -f "$ROOT_DIR/scripts/e2e/Dockerfile" "$ROOT_DIR" echo "Running doctor install switch E2E..." -docker run --rm -t "$IMAGE_NAME" bash -lc ' +docker run --rm -e COREPACK_ENABLE_DOWNLOAD_PROMPT=0 "$IMAGE_NAME" bash -lc ' set -euo pipefail # Keep logs focused; the npm global install step can emit noisy deprecation warnings. @@ -146,13 +146,13 @@ LOGINCTL "npm-to-git" \ "$npm_bin daemon install --force" \ "$npm_entry" \ - "node $git_cli doctor --repair --force" \ + "node $git_cli doctor --repair --force --yes" \ "$git_entry" run_flow \ "git-to-npm" \ "node $git_cli daemon install --force" \ "$git_entry" \ - "$npm_bin doctor --repair --force" \ + "$npm_bin doctor --repair --force --yes" \ "$npm_entry" ' diff --git a/src/agents/live-model-filter.test.ts b/src/agents/live-model-filter.test.ts new file mode 100644 index 000000000..d0b2bca8e --- /dev/null +++ b/src/agents/live-model-filter.test.ts @@ -0,0 +1,14 @@ +import { describe, expect, it } from "vitest"; +import { isModernModelRef } from "./live-model-filter.js"; + +describe("isModernModelRef", () => { + it("excludes opencode minimax variants from modern selection", () => { + expect(isModernModelRef({ provider: "opencode", id: "minimax-m2.1" })).toBe(false); + expect(isModernModelRef({ provider: "opencode", id: "minimax-m2.5" })).toBe(false); + }); + + it("keeps non-minimax opencode modern models", () => { + expect(isModernModelRef({ provider: "opencode", id: "claude-opus-4-6" })).toBe(true); + expect(isModernModelRef({ provider: "opencode", id: "gemini-3-pro" })).toBe(true); + }); +}); diff --git a/src/agents/live-model-filter.ts b/src/agents/live-model-filter.ts index dbaba0c7d..48bbc3424 100644 --- a/src/agents/live-model-filter.ts +++ b/src/agents/live-model-filter.ts @@ -82,6 +82,11 @@ export function isModernModelRef(ref: ModelRef): boolean { if (provider === "opencode" && id === "alpha-glm-4.7") { return false; } + // Opencode MiniMax variants have been intermittently unstable in live runs; + // prefer the rest of the modern catalog for deterministic smoke coverage. + if (provider === "opencode" && matchesPrefix(id, MINIMAX_PREFIXES)) { + return false; + } if (provider === "openrouter" || provider === "opencode") { return matchesAny(id, [ From 1bd3f01c17fefb19c2e6ef35038be5092a663b63 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 15:40:38 +0100 Subject: [PATCH 0212/1007] fix(telegram): guard duplicate bot token accounts --- CHANGELOG.md | 1 + extensions/telegram/src/channel.test.ts | 125 ++++++++++++++++++++++++ extensions/telegram/src/channel.ts | 86 +++++++++++++++- 3 files changed, 207 insertions(+), 5 deletions(-) create mode 100644 extensions/telegram/src/channel.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 01542c3bc..1e3884782 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ Docs: https://docs.openclaw.ai ### Fixes - Security/Agents: cap embedded Pi runner outer retry loop to 24 attempts and return an explicit `retry_limit` error payload when retries never converge, preventing unbounded internal retry cycles (`GHSA-76m6-pj3w-v7mf`). +- Telegram: detect duplicate bot-token ownership across Telegram accounts at startup/status time, mark secondary accounts as not configured with an explicit fix message, and block duplicate account startup before polling to avoid endless `getUpdates` conflict loops. - Agents/Tool images: include source filenames in `agents/tool-images` resize logs so compression events can be traced back to specific files. - Providers/OAuth: harden Qwen and Chutes refresh handling by validating refresh response expiry values and preserving prior refresh tokens when providers return empty refresh token fields, with regression coverage for empty-token responses. - Models/Kimi-Coding: add missing implicit provider template for `kimi-coding` with correct `anthropic-messages` API type and base URL, fixing 403 errors when using Kimi for Coding. (#22409) diff --git a/extensions/telegram/src/channel.test.ts b/extensions/telegram/src/channel.test.ts new file mode 100644 index 000000000..60ceec6d9 --- /dev/null +++ b/extensions/telegram/src/channel.test.ts @@ -0,0 +1,125 @@ +import type { + ChannelAccountSnapshot, + ChannelGatewayContext, + OpenClawConfig, + PluginRuntime, + ResolvedTelegramAccount, + RuntimeEnv, +} from "openclaw/plugin-sdk"; +import { describe, expect, it, vi } from "vitest"; +import { telegramPlugin } from "./channel.js"; +import { setTelegramRuntime } from "./runtime.js"; + +function createCfg(): OpenClawConfig { + return { + channels: { + telegram: { + enabled: true, + accounts: { + alerts: { botToken: "token-shared" }, + work: { botToken: "token-shared" }, + ops: { botToken: "token-ops" }, + }, + }, + }, + } as OpenClawConfig; +} + +function createRuntimeEnv(): RuntimeEnv { + return { + log: vi.fn(), + error: vi.fn(), + exit: vi.fn((code: number): never => { + throw new Error(`exit ${code}`); + }), + }; +} + +function createStartAccountCtx(params: { + cfg: OpenClawConfig; + accountId: string; + runtime: RuntimeEnv; +}): ChannelGatewayContext { + const account = telegramPlugin.config.resolveAccount( + params.cfg, + params.accountId, + ) as ResolvedTelegramAccount; + const snapshot: ChannelAccountSnapshot = { + accountId: params.accountId, + configured: true, + enabled: true, + running: false, + }; + return { + accountId: params.accountId, + account, + cfg: params.cfg, + runtime: params.runtime, + abortSignal: new AbortController().signal, + log: { info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn() }, + getStatus: () => snapshot, + setStatus: vi.fn(), + }; +} + +describe("telegramPlugin duplicate token guard", () => { + it("marks secondary account as not configured when token is shared", async () => { + const cfg = createCfg(); + const alertsAccount = telegramPlugin.config.resolveAccount(cfg, "alerts"); + const workAccount = telegramPlugin.config.resolveAccount(cfg, "work"); + const opsAccount = telegramPlugin.config.resolveAccount(cfg, "ops"); + + expect(await telegramPlugin.config.isConfigured!(alertsAccount, cfg)).toBe(true); + expect(await telegramPlugin.config.isConfigured!(workAccount, cfg)).toBe(false); + expect(await telegramPlugin.config.isConfigured!(opsAccount, cfg)).toBe(true); + + expect(telegramPlugin.config.unconfiguredReason?.(workAccount, cfg)).toContain( + 'account "alerts"', + ); + }); + + it("surfaces duplicate-token reason in status snapshot", async () => { + const cfg = createCfg(); + const workAccount = telegramPlugin.config.resolveAccount(cfg, "work"); + const snapshot = await telegramPlugin.status!.buildAccountSnapshot!({ + account: workAccount, + cfg, + runtime: undefined, + probe: undefined, + audit: undefined, + }); + + expect(snapshot.configured).toBe(false); + expect(snapshot.lastError).toContain('account "alerts"'); + }); + + it("blocks startup for duplicate token accounts before polling starts", async () => { + const monitorTelegramProvider = vi.fn(async () => undefined); + const probeTelegram = vi.fn(async () => ({ ok: true, bot: { username: "bot" } })); + const runtime = { + channel: { + telegram: { + monitorTelegramProvider, + probeTelegram, + }, + }, + logging: { + shouldLogVerbose: () => false, + }, + } as unknown as PluginRuntime; + setTelegramRuntime(runtime); + + await expect( + telegramPlugin.gateway!.startAccount!( + createStartAccountCtx({ + cfg: createCfg(), + accountId: "work", + runtime: createRuntimeEnv(), + }), + ), + ).rejects.toThrow("Duplicate Telegram bot token"); + + expect(probeTelegram).not.toHaveBeenCalled(); + expect(monitorTelegramProvider).not.toHaveBeenCalled(); + }); +}); diff --git a/extensions/telegram/src/channel.ts b/extensions/telegram/src/channel.ts index 9cc203fd5..a26dd956a 100644 --- a/extensions/telegram/src/channel.ts +++ b/extensions/telegram/src/channel.ts @@ -33,6 +33,40 @@ import { getTelegramRuntime } from "./runtime.js"; const meta = getChatChannelMeta("telegram"); +function findTelegramTokenOwnerAccountId(params: { + cfg: OpenClawConfig; + accountId: string; +}): string | null { + const normalizedAccountId = normalizeAccountId(params.accountId); + const tokenOwners = new Map(); + for (const id of listTelegramAccountIds(params.cfg)) { + const account = resolveTelegramAccount({ cfg: params.cfg, accountId: id }); + const token = account.token.trim(); + if (!token) { + continue; + } + const ownerAccountId = tokenOwners.get(token); + if (!ownerAccountId) { + tokenOwners.set(token, account.accountId); + continue; + } + if (account.accountId === normalizedAccountId) { + return ownerAccountId; + } + } + return null; +} + +function formatDuplicateTelegramTokenReason(params: { + accountId: string; + ownerAccountId: string; +}): string { + return ( + `Duplicate Telegram bot token: account "${params.accountId}" shares a token with ` + + `account "${params.ownerAccountId}". Keep one owner account per bot token.` + ); +} + const telegramMessageActions: ChannelMessageActionAdapter = { listActions: (ctx) => getTelegramRuntime().channel.telegram.messageActions?.listActions?.(ctx) ?? [], @@ -101,12 +135,32 @@ export const telegramPlugin: ChannelPlugin Boolean(account.token?.trim()), - describeAccount: (account) => ({ + isConfigured: (account, cfg) => { + if (!account.token?.trim()) { + return false; + } + return !findTelegramTokenOwnerAccountId({ cfg, accountId: account.accountId }); + }, + unconfiguredReason: (account, cfg) => { + if (!account.token?.trim()) { + return "not configured"; + } + const ownerAccountId = findTelegramTokenOwnerAccountId({ cfg, accountId: account.accountId }); + if (!ownerAccountId) { + return "not configured"; + } + return formatDuplicateTelegramTokenReason({ + accountId: account.accountId, + ownerAccountId, + }); + }, + describeAccount: (account, cfg) => ({ accountId: account.accountId, name: account.name, enabled: account.enabled, - configured: Boolean(account.token?.trim()), + configured: + Boolean(account.token?.trim()) && + !findTelegramTokenOwnerAccountId({ cfg, accountId: account.accountId }), tokenSource: account.tokenSource, }), resolveAllowFrom: ({ cfg, accountId }) => @@ -350,7 +404,17 @@ export const telegramPlugin: ChannelPlugin { - const configured = Boolean(account.token?.trim()); + const ownerAccountId = findTelegramTokenOwnerAccountId({ + cfg, + accountId: account.accountId, + }); + const duplicateTokenReason = ownerAccountId + ? formatDuplicateTelegramTokenReason({ + accountId: account.accountId, + ownerAccountId, + }) + : null; + const configured = Boolean(account.token?.trim()) && !ownerAccountId; const groups = cfg.channels?.telegram?.accounts?.[account.accountId]?.groups ?? cfg.channels?.telegram?.groups; @@ -368,7 +432,7 @@ export const telegramPlugin: ChannelPlugin { const account = ctx.account; + const ownerAccountId = findTelegramTokenOwnerAccountId({ + cfg: ctx.cfg, + accountId: account.accountId, + }); + if (ownerAccountId) { + const reason = formatDuplicateTelegramTokenReason({ + accountId: account.accountId, + ownerAccountId, + }); + ctx.log?.error?.(`[${account.accountId}] ${reason}`); + throw new Error(reason); + } const token = account.token.trim(); let telegramBotLabel = ""; try { From c8466e516f32d3e4cc452005755473fd64625e76 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 15:41:03 +0100 Subject: [PATCH 0213/1007] fix(agents): raise dynamic retry cap budget --- CHANGELOG.md | 2 +- .../run.overflow-compaction.test.ts | 2 +- src/agents/pi-embedded-runner/run.ts | 21 +++++++++++++++---- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e3884782..523bb65d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,7 +31,7 @@ Docs: https://docs.openclaw.ai ### Fixes -- Security/Agents: cap embedded Pi runner outer retry loop to 24 attempts and return an explicit `retry_limit` error payload when retries never converge, preventing unbounded internal retry cycles (`GHSA-76m6-pj3w-v7mf`). +- Security/Agents: cap embedded Pi runner outer retry loop with a higher profile-aware dynamic limit (32-160 attempts) and return an explicit `retry_limit` error payload when retries never converge, preventing unbounded internal retry cycles (`GHSA-76m6-pj3w-v7mf`). - Telegram: detect duplicate bot-token ownership across Telegram accounts at startup/status time, mark secondary accounts as not configured with an explicit fix message, and block duplicate account startup before polling to avoid endless `getUpdates` conflict loops. - Agents/Tool images: include source filenames in `agents/tool-images` resize logs so compression events can be traced back to specific files. - Providers/OAuth: harden Qwen and Chutes refresh handling by validating refresh response expiry values and preserving prior refresh tokens when providers return empty refresh token fields, with regression coverage for empty-token responses. diff --git a/src/agents/pi-embedded-runner/run.overflow-compaction.test.ts b/src/agents/pi-embedded-runner/run.overflow-compaction.test.ts index 29531fb07..c80ef3430 100644 --- a/src/agents/pi-embedded-runner/run.overflow-compaction.test.ts +++ b/src/agents/pi-embedded-runner/run.overflow-compaction.test.ts @@ -128,7 +128,7 @@ describe("runEmbeddedPiAgent overflow compaction trigger routing", () => { runId: "run-1", }); - expect(mockedRunEmbeddedAttempt).toHaveBeenCalledTimes(24); + expect(mockedRunEmbeddedAttempt).toHaveBeenCalledTimes(32); expect(mockedCompactDirect).not.toHaveBeenCalled(); expect(result.meta.error?.kind).toBe("retry_limit"); expect(result.payloads?.[0]?.isError).toBe(true); diff --git a/src/agents/pi-embedded-runner/run.ts b/src/agents/pi-embedded-runner/run.ts index be61bb601..83ae3e214 100644 --- a/src/agents/pi-embedded-runner/run.ts +++ b/src/agents/pi-embedded-runner/run.ts @@ -103,7 +103,17 @@ function createCompactionDiagId(): string { } // Defensive guard for the outer run loop across all retry branches. -const MAX_RUN_RETRY_ITERATIONS = 24; +const BASE_RUN_RETRY_ITERATIONS = 24; +const RUN_RETRY_ITERATIONS_PER_PROFILE = 8; +const MIN_RUN_RETRY_ITERATIONS = 32; +const MAX_RUN_RETRY_ITERATIONS = 160; + +function resolveMaxRunRetryIterations(profileCandidateCount: number): number { + const scaled = + BASE_RUN_RETRY_ITERATIONS + + Math.max(1, profileCandidateCount) * RUN_RETRY_ITERATIONS_PER_PROFILE; + return Math.min(MAX_RUN_RETRY_ITERATIONS, Math.max(MIN_RUN_RETRY_ITERATIONS, scaled)); +} const hasUsageValues = ( usage: ReturnType, @@ -478,7 +488,7 @@ export async function runEmbeddedPiAgent( } const MAX_OVERFLOW_COMPACTION_ATTEMPTS = 3; - const MAX_RUN_LOOP_ITERATIONS = MAX_RUN_RETRY_ITERATIONS; + const MAX_RUN_LOOP_ITERATIONS = resolveMaxRunRetryIterations(profileCandidates.length); let overflowCompactionAttempts = 0; let toolResultTruncationAttempted = false; const usageAccumulator = createUsageAccumulator(); @@ -488,10 +498,13 @@ export async function runEmbeddedPiAgent( try { while (true) { if (runLoopIterations >= MAX_RUN_LOOP_ITERATIONS) { - const message = `Exceeded retry limit after ${runLoopIterations} attempts.`; + const message = + `Exceeded retry limit after ${runLoopIterations} attempts ` + + `(max=${MAX_RUN_LOOP_ITERATIONS}).`; log.error( `[run-retry-limit] sessionKey=${params.sessionKey ?? params.sessionId} ` + - `provider=${provider}/${modelId} attempts=${runLoopIterations}`, + `provider=${provider}/${modelId} attempts=${runLoopIterations} ` + + `maxAttempts=${MAX_RUN_LOOP_ITERATIONS}`, ); return { payloads: [ From 166068dfbe3b9be2fd74ee312a5109386313e026 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 15:42:36 +0100 Subject: [PATCH 0214/1007] test: add byteplus coding-plan live test --- docs/help/testing.md | 6 ++++ src/agents/byteplus.live.test.ts | 47 ++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/agents/byteplus.live.test.ts diff --git a/docs/help/testing.md b/docs/help/testing.md index 3c4fdeb7d..62cfda47a 100644 --- a/docs/help/testing.md +++ b/docs/help/testing.md @@ -320,6 +320,12 @@ If you want to rely on env keys (e.g. exported in your `~/.profile`), run local - Test: `src/media-understanding/providers/deepgram/audio.live.test.ts` - Enable: `DEEPGRAM_API_KEY=... DEEPGRAM_LIVE_TEST=1 pnpm test:live src/media-understanding/providers/deepgram/audio.live.test.ts` +## BytePlus coding plan live + +- Test: `src/agents/byteplus.live.test.ts` +- Enable: `BYTEPLUS_API_KEY=... BYTEPLUS_LIVE_TEST=1 pnpm test:live src/agents/byteplus.live.test.ts` +- Optional model override: `BYTEPLUS_CODING_MODEL=ark-code-latest` + ## Docker runners (optional “works in Linux” checks) These run `pnpm test:live` inside the repo Docker image, mounting your local config dir and workspace (and sourcing `~/.profile` if mounted): diff --git a/src/agents/byteplus.live.test.ts b/src/agents/byteplus.live.test.ts new file mode 100644 index 000000000..1c1b730a3 --- /dev/null +++ b/src/agents/byteplus.live.test.ts @@ -0,0 +1,47 @@ +import { completeSimple, type Model } from "@mariozechner/pi-ai"; +import { describe, expect, it } from "vitest"; +import { isTruthyEnvValue } from "../infra/env.js"; +import { BYTEPLUS_CODING_BASE_URL, BYTEPLUS_DEFAULT_COST } from "./byteplus-models.js"; + +const BYTEPLUS_KEY = process.env.BYTEPLUS_API_KEY ?? ""; +const BYTEPLUS_CODING_MODEL = process.env.BYTEPLUS_CODING_MODEL?.trim() || "ark-code-latest"; +const LIVE = isTruthyEnvValue(process.env.BYTEPLUS_LIVE_TEST) || isTruthyEnvValue(process.env.LIVE); + +const describeLive = LIVE && BYTEPLUS_KEY ? describe : describe.skip; + +describeLive("byteplus coding plan live", () => { + it("returns assistant text", async () => { + const model: Model<"openai-completions"> = { + id: BYTEPLUS_CODING_MODEL, + name: `BytePlus Coding ${BYTEPLUS_CODING_MODEL}`, + api: "openai-completions", + provider: "byteplus-plan", + baseUrl: BYTEPLUS_CODING_BASE_URL, + reasoning: false, + input: ["text"], + cost: BYTEPLUS_DEFAULT_COST, + contextWindow: 256000, + maxTokens: 4096, + }; + + const res = await completeSimple( + model, + { + messages: [ + { + role: "user", + content: "Reply with the word ok.", + timestamp: Date.now(), + }, + ], + }, + { apiKey: BYTEPLUS_KEY, maxTokens: 64 }, + ); + + const text = res.content + .filter((block) => block.type === "text") + .map((block) => block.text.trim()) + .join(" "); + expect(text.length).toBeGreaterThan(0); + }, 30000); +}); From 8178ea472db157da4b761df784bd18d06b740f51 Mon Sep 17 00:00:00 2001 From: Onur Date: Sat, 21 Feb 2026 16:14:55 +0100 Subject: [PATCH 0215/1007] feat: thread-bound subagents on Discord (#21805) * docs: thread-bound subagents plan * docs: add exact thread-bound subagent implementation touchpoints * Docs: prioritize auto thread-bound subagent flow * Docs: add ACP harness thread-binding extensions * Discord: add thread-bound session routing and auto-bind spawn flow * Subagents: add focus commands and ACP/session binding lifecycle hooks * Tests: cover thread bindings, focus commands, and ACP unbind hooks * Docs: add plugin-hook appendix for thread-bound subagents * Plugins: add subagent lifecycle hook events * Core: emit subagent lifecycle hooks and decouple Discord bindings * Discord: handle subagent bind lifecycle via plugin hooks * Subagents: unify completion finalizer and split registry modules * Add subagent lifecycle events module * Hooks: fix subagent ended context key * Discord: share thread bindings across ESM and Jiti * Subagents: add persistent sessions_spawn mode for thread-bound sessions * Subagents: clarify thread intro and persistent completion copy * test(subagents): stabilize sessions_spawn lifecycle cleanup assertions * Discord: add thread-bound session TTL with auto-unfocus * Subagents: fail session spawns when thread bind fails * Subagents: cover thread session failure cleanup paths * Session: add thread binding TTL config and /session ttl controls * Tests: align discord reaction expectations * Agent: persist sessionFile for keyed subagent sessions * Discord: normalize imports after conflict resolution * Sessions: centralize sessionFile resolve/persist helper * Discord: harden thread-bound subagent session routing * Rebase: resolve upstream/main conflicts * Subagents: move thread binding into hooks and split bindings modules * Docs: add channel-agnostic subagent routing hook plan * Agents: decouple subagent routing from Discord * Discord: refactor thread-bound subagent flows * Subagents: prevent duplicate end hooks and orphaned failed sessions * Refactor: split subagent command and provider phases * Subagents: honor hook delivery target overrides * Discord: add thread binding kill switches and refresh plan doc * Discord: fix thread bind channel resolution * Routing: centralize account id normalization * Discord: clean up thread bindings on startup failures * Discord: add startup cleanup regression tests * Docs: add long-term thread-bound subagent architecture * Docs: split session binding plan and dedupe thread-bound doc * Subagents: add channel-agnostic session binding routing * Subagents: stabilize announce completion routing tests * Subagents: cover multi-bound completion routing * Subagents: suppress lifecycle hooks on failed thread bind * tests: fix discord provider mock typing regressions * docs/protocol: sync slash command aliases and delete param models * fix: add changelog entry for Discord thread-bound subagents (#21805) (thanks @onutc) --------- Co-authored-by: Shadow --- CHANGELOG.md | 1 + .../OpenClawProtocol/GatewayModels.swift | 6 +- .../OpenClawProtocol/GatewayModels.swift | 6 +- .../plans/session-binding-channel-agnostic.md | 223 +++++ .../plans/thread-bound-subagents.md | 338 ++++++++ docs/tools/slash-commands.md | 4 + extensions/discord/index.ts | 2 + extensions/discord/src/subagent-hooks.test.ts | 430 ++++++++++ extensions/discord/src/subagent-hooks.ts | 152 ++++ .../openclaw-tools.sessions.e2e.test.ts | 2 + ...gents.sessions-spawn.lifecycle.e2e.test.ts | 121 ++- src/agents/pi-tools.policy.ts | 4 +- src/agents/sessions-spawn-hooks.test.ts | 373 +++++++++ .../subagent-announce.format.e2e.test.ts | 660 ++++++++++++++- src/agents/subagent-announce.ts | 319 +++++++- src/agents/subagent-lifecycle-events.ts | 47 ++ src/agents/subagent-registry-cleanup.ts | 67 ++ .../subagent-registry-completion.test.ts | 79 ++ src/agents/subagent-registry-completion.ts | 96 +++ src/agents/subagent-registry-queries.ts | 146 ++++ src/agents/subagent-registry-state.ts | 56 ++ src/agents/subagent-registry.archive.test.ts | 90 ++ .../subagent-registry.steer-restart.test.ts | 275 ++++++- src/agents/subagent-registry.store.ts | 3 +- src/agents/subagent-registry.ts | 594 ++++++++------ src/agents/subagent-registry.types.ts | 35 + src/agents/subagent-spawn.ts | 236 +++++- src/agents/tools/sessions-spawn-tool.ts | 10 +- src/agents/tools/subagents-tool.ts | 4 +- src/auto-reply/commands-registry.data.ts | 51 ++ src/auto-reply/reply/commands-core.ts | 2 + .../reply/commands-session-ttl.test.ts | 147 ++++ src/auto-reply/reply/commands-session.ts | 180 ++++ .../reply/commands-subagents-focus.test.ts | 331 ++++++++ .../reply/commands-subagents-spawn.test.ts | 2 + src/auto-reply/reply/commands-subagents.ts | 721 ++-------------- .../reply/commands-subagents/action-agents.ts | 55 ++ .../reply/commands-subagents/action-focus.ts | 90 ++ .../reply/commands-subagents/action-help.ts | 6 + .../reply/commands-subagents/action-info.ts | 59 ++ .../reply/commands-subagents/action-kill.ts | 86 ++ .../reply/commands-subagents/action-list.ts | 66 ++ .../reply/commands-subagents/action-log.ts | 43 + .../reply/commands-subagents/action-send.ts | 159 ++++ .../reply/commands-subagents/action-spawn.ts | 65 ++ .../commands-subagents/action-unfocus.ts | 42 + .../reply/commands-subagents/shared.ts | 432 ++++++++++ src/auto-reply/reply/reply-payloads.ts | 10 +- src/auto-reply/reply/session.ts | 23 +- src/channels/plugins/outbound/discord.test.ts | 237 +++++- src/channels/plugins/outbound/discord.ts | 103 ++- src/commands/agent.e2e.test.ts | 66 ++ src/commands/agent.ts | 29 +- src/config/agent-limits.ts | 2 + src/config/schema.help.ts | 10 + src/config/schema.labels.ts | 5 + src/config/sessions.ts | 1 + src/config/sessions/session-file.ts | 50 ++ src/config/sessions/sessions.test.ts | 46 ++ src/config/sessions/transcript.ts | 26 +- src/config/types.base.ts | 15 + src/config/types.discord.ts | 21 + src/config/zod-schema.providers-core.ts | 8 + src/config/zod-schema.session.ts | 11 +- ...messages-mentionpatterns-match.e2e.test.ts | 3 + ...ends-status-replies-responseprefix.test.ts | 3 + .../monitor/message-handler.preflight.test.ts | 209 +++++ .../monitor/message-handler.preflight.ts | 88 +- .../message-handler.preflight.types.ts | 6 + .../monitor/message-handler.process.test.ts | 115 ++- .../monitor/message-handler.process.ts | 7 +- .../monitor/message-handler.test-harness.ts | 2 + .../monitor/model-picker-preferences.ts | 8 +- .../native-command.model-picker.test.ts | 109 +++ src/discord/monitor/native-command.ts | 71 +- src/discord/monitor/provider.allowlist.ts | 207 +++++ .../monitor/provider.lifecycle.test.ts | 106 +++ src/discord/monitor/provider.lifecycle.ts | 132 +++ .../monitor/provider.skill-dedupe.test.ts | 35 + src/discord/monitor/provider.test.ts | 293 +++++++ src/discord/monitor/provider.ts | 772 +++++++----------- src/discord/monitor/reply-delivery.test.ts | 148 ++++ src/discord/monitor/reply-delivery.ts | 139 +++- .../thread-bindings.discord-api.test.ts | 85 ++ .../monitor/thread-bindings.discord-api.ts | 289 +++++++ .../monitor/thread-bindings.lifecycle.ts | 225 +++++ .../monitor/thread-bindings.manager.ts | 515 ++++++++++++ .../monitor/thread-bindings.messages.ts | 72 ++ .../thread-bindings.shared-state.test.ts | 31 + src/discord/monitor/thread-bindings.state.ts | 444 ++++++++++ src/discord/monitor/thread-bindings.ts | 28 + .../monitor/thread-bindings.ttl.test.ts | 541 ++++++++++++ src/discord/monitor/thread-bindings.types.ts | 69 ++ src/discord/send.components.test.ts | 2 +- src/discord/send.outbound.ts | 94 +++ src/discord/send.ts | 1 + src/discord/send.webhook-activity.test.ts | 50 ++ src/gateway/protocol/schema/sessions.ts | 2 + src/gateway/server-methods/sessions.ts | 86 +- ...ions.gateway-server-sessions-a.e2e.test.ts | 297 +++++++ .../outbound/bound-delivery-router.test.ts | 117 +++ src/infra/outbound/bound-delivery-router.ts | 131 +++ src/infra/outbound/session-binding-service.ts | 192 +++++ src/line/accounts.ts | 12 +- src/plugin-sdk/index.ts | 10 + src/plugins/hooks.ts | 98 +++ src/plugins/types.ts | 110 +++ src/plugins/wired-hooks-subagent.test.ts | 221 +++++ src/routing/account-id.test.ts | 29 + src/routing/account-id.ts | 34 + src/routing/resolve-route.test.ts | 15 + src/routing/resolve-route.ts | 8 +- src/routing/session-key.ts | 25 +- src/utils/account-id.ts | 8 +- 114 files changed, 12214 insertions(+), 1659 deletions(-) create mode 100644 docs/experiments/plans/session-binding-channel-agnostic.md create mode 100644 docs/experiments/plans/thread-bound-subagents.md create mode 100644 extensions/discord/src/subagent-hooks.test.ts create mode 100644 extensions/discord/src/subagent-hooks.ts create mode 100644 src/agents/sessions-spawn-hooks.test.ts create mode 100644 src/agents/subagent-lifecycle-events.ts create mode 100644 src/agents/subagent-registry-cleanup.ts create mode 100644 src/agents/subagent-registry-completion.test.ts create mode 100644 src/agents/subagent-registry-completion.ts create mode 100644 src/agents/subagent-registry-queries.ts create mode 100644 src/agents/subagent-registry-state.ts create mode 100644 src/agents/subagent-registry.archive.test.ts create mode 100644 src/agents/subagent-registry.types.ts create mode 100644 src/auto-reply/reply/commands-session-ttl.test.ts create mode 100644 src/auto-reply/reply/commands-subagents-focus.test.ts create mode 100644 src/auto-reply/reply/commands-subagents/action-agents.ts create mode 100644 src/auto-reply/reply/commands-subagents/action-focus.ts create mode 100644 src/auto-reply/reply/commands-subagents/action-help.ts create mode 100644 src/auto-reply/reply/commands-subagents/action-info.ts create mode 100644 src/auto-reply/reply/commands-subagents/action-kill.ts create mode 100644 src/auto-reply/reply/commands-subagents/action-list.ts create mode 100644 src/auto-reply/reply/commands-subagents/action-log.ts create mode 100644 src/auto-reply/reply/commands-subagents/action-send.ts create mode 100644 src/auto-reply/reply/commands-subagents/action-spawn.ts create mode 100644 src/auto-reply/reply/commands-subagents/action-unfocus.ts create mode 100644 src/auto-reply/reply/commands-subagents/shared.ts create mode 100644 src/config/sessions/session-file.ts create mode 100644 src/discord/monitor/message-handler.preflight.test.ts create mode 100644 src/discord/monitor/provider.allowlist.ts create mode 100644 src/discord/monitor/provider.lifecycle.test.ts create mode 100644 src/discord/monitor/provider.lifecycle.ts create mode 100644 src/discord/monitor/provider.test.ts create mode 100644 src/discord/monitor/thread-bindings.discord-api.test.ts create mode 100644 src/discord/monitor/thread-bindings.discord-api.ts create mode 100644 src/discord/monitor/thread-bindings.lifecycle.ts create mode 100644 src/discord/monitor/thread-bindings.manager.ts create mode 100644 src/discord/monitor/thread-bindings.messages.ts create mode 100644 src/discord/monitor/thread-bindings.shared-state.test.ts create mode 100644 src/discord/monitor/thread-bindings.state.ts create mode 100644 src/discord/monitor/thread-bindings.ts create mode 100644 src/discord/monitor/thread-bindings.ttl.test.ts create mode 100644 src/discord/monitor/thread-bindings.types.ts create mode 100644 src/discord/send.webhook-activity.test.ts create mode 100644 src/infra/outbound/bound-delivery-router.test.ts create mode 100644 src/infra/outbound/bound-delivery-router.ts create mode 100644 src/infra/outbound/session-binding-service.ts create mode 100644 src/plugins/wired-hooks-subagent.test.ts create mode 100644 src/routing/account-id.test.ts create mode 100644 src/routing/account-id.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 523bb65d9..3cdfbae73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ Docs: https://docs.openclaw.ai - Discord: add configurable ephemeral defaults for slash-command responses. (#16563) Thanks @wei. - Discord: support updating forum `available_tags` via channel edit actions for forum tag management. (#12070) Thanks @xiaoyaner0201. - Discord: include channel topics in trusted inbound metadata on new sessions. Thanks @thewilloftheshadow. +- Discord/Subagents: add thread-bound subagent sessions on Discord with per-thread focus/list controls and thread-bound continuation routing for spawned helper agents. (#21805) Thanks @onutc. - iOS/Chat: clean chat UI noise by stripping inbound untrusted metadata/timestamp prefixes, formatting tool outputs into concise summaries/errors, compacting the composer while typing, and supporting tap-to-dismiss keyboard in chat view. (#22122) thanks @mbelinky. - iOS/Watch: bridge mirrored watch prompt notification actions into iOS quick-reply handling, including queued action handoff until app model initialization. (#22123) thanks @mbelinky. - iOS/Gateway: stabilize background wake and reconnect behavior with background reconnect suppression/lease windows, BGAppRefresh wake fallback, location wake hook throttling, and APNs wake retry+nudge instrumentation. (#21226) thanks @mbelinky. diff --git a/apps/macos/Sources/OpenClawProtocol/GatewayModels.swift b/apps/macos/Sources/OpenClawProtocol/GatewayModels.swift index 19f3f774f..6b795fd6a 100644 --- a/apps/macos/Sources/OpenClawProtocol/GatewayModels.swift +++ b/apps/macos/Sources/OpenClawProtocol/GatewayModels.swift @@ -1191,17 +1191,21 @@ public struct SessionsResetParams: Codable, Sendable { public struct SessionsDeleteParams: Codable, Sendable { public let key: String public let deletetranscript: Bool? + public let emitlifecyclehooks: Bool? public init( key: String, - deletetranscript: Bool? + deletetranscript: Bool?, + emitlifecyclehooks: Bool? ) { self.key = key self.deletetranscript = deletetranscript + self.emitlifecyclehooks = emitlifecyclehooks } private enum CodingKeys: String, CodingKey { case key case deletetranscript = "deleteTranscript" + case emitlifecyclehooks = "emitLifecycleHooks" } } diff --git a/apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift b/apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift index 19f3f774f..6b795fd6a 100644 --- a/apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift +++ b/apps/shared/OpenClawKit/Sources/OpenClawProtocol/GatewayModels.swift @@ -1191,17 +1191,21 @@ public struct SessionsResetParams: Codable, Sendable { public struct SessionsDeleteParams: Codable, Sendable { public let key: String public let deletetranscript: Bool? + public let emitlifecyclehooks: Bool? public init( key: String, - deletetranscript: Bool? + deletetranscript: Bool?, + emitlifecyclehooks: Bool? ) { self.key = key self.deletetranscript = deletetranscript + self.emitlifecyclehooks = emitlifecyclehooks } private enum CodingKeys: String, CodingKey { case key case deletetranscript = "deleteTranscript" + case emitlifecyclehooks = "emitLifecycleHooks" } } diff --git a/docs/experiments/plans/session-binding-channel-agnostic.md b/docs/experiments/plans/session-binding-channel-agnostic.md new file mode 100644 index 000000000..c66b6e819 --- /dev/null +++ b/docs/experiments/plans/session-binding-channel-agnostic.md @@ -0,0 +1,223 @@ +--- +summary: "Channel agnostic session binding architecture and iteration 1 delivery scope" +owner: "onutc" +status: "in-progress" +last_updated: "2026-02-21" +title: "Session Binding Channel Agnostic Plan" +--- + +# Session Binding Channel Agnostic Plan + +## Overview + +This document defines the long term channel agnostic session binding model and the concrete scope for the next implementation iteration. + +Goal: + +- make subagent bound session routing a core capability +- keep channel specific behavior in adapters +- avoid regressions in normal Discord behavior + +## Why this exists + +Current behavior mixes: + +- completion content policy +- destination routing policy +- Discord specific details + +This caused edge cases such as: + +- duplicate main and thread delivery under concurrent runs +- stale token usage on reused binding managers +- missing activity accounting for webhook sends + +## Iteration 1 scope + +This iteration is intentionally limited. + +### 1. Add channel agnostic core interfaces + +Add core types and service interfaces for bindings and routing. + +Proposed core types: + +```ts +export type BindingTargetKind = "subagent" | "session"; +export type BindingStatus = "active" | "ending" | "ended"; + +export type ConversationRef = { + channel: string; + accountId: string; + conversationId: string; + parentConversationId?: string; +}; + +export type SessionBindingRecord = { + bindingId: string; + targetSessionKey: string; + targetKind: BindingTargetKind; + conversation: ConversationRef; + status: BindingStatus; + boundAt: number; + expiresAt?: number; + metadata?: Record; +}; +``` + +Core service contract: + +```ts +export interface SessionBindingService { + bind(input: { + targetSessionKey: string; + targetKind: BindingTargetKind; + conversation: ConversationRef; + metadata?: Record; + ttlMs?: number; + }): Promise; + + listBySession(targetSessionKey: string): SessionBindingRecord[]; + resolveByConversation(ref: ConversationRef): SessionBindingRecord | null; + touch(bindingId: string, at?: number): void; + unbind(input: { + bindingId?: string; + targetSessionKey?: string; + reason: string; + }): Promise; +} +``` + +### 2. Add one core delivery router for subagent completions + +Add a single destination resolution path for completion events. + +Router contract: + +```ts +export interface BoundDeliveryRouter { + resolveDestination(input: { + eventKind: "task_completion"; + targetSessionKey: string; + requester?: ConversationRef; + failClosed: boolean; + }): { + binding: SessionBindingRecord | null; + mode: "bound" | "fallback"; + reason: string; + }; +} +``` + +For this iteration: + +- only `task_completion` is routed through this new path +- existing paths for other event kinds remain as-is + +### 3. Keep Discord as adapter + +Discord remains the first adapter implementation. + +Adapter responsibilities: + +- create/reuse thread conversations +- send bound messages via webhook or channel send +- validate thread state (archived/deleted) +- map adapter metadata (webhook identity, thread ids) + +### 4. Fix currently known correctness issues + +Required in this iteration: + +- refresh token usage when reusing existing thread binding manager +- record outbound activity for webhook based Discord sends +- stop implicit main channel fallback when a bound thread destination is selected for session mode completion + +### 5. Preserve current runtime safety defaults + +No behavior change for users with thread bound spawn disabled. + +Defaults stay: + +- `channels.discord.threadBindings.spawnSubagentSessions = false` + +Result: + +- normal Discord users stay on current behavior +- new core path affects only bound session completion routing where enabled + +## Not in iteration 1 + +Explicitly deferred: + +- ACP binding targets (`targetKind: "acp"`) +- new channel adapters beyond Discord +- global replacement of all delivery paths (`spawn_ack`, future `subagent_message`) +- protocol level changes +- store migration/versioning redesign for all binding persistence + +Notes on ACP: + +- interface design keeps room for ACP +- ACP implementation is not started in this iteration + +## Routing invariants + +These invariants are mandatory for iteration 1. + +- destination selection and content generation are separate steps +- if session mode completion resolves to an active bound destination, delivery must target that destination +- no hidden reroute from bound destination to main channel +- fallback behavior must be explicit and observable + +## Compatibility and rollout + +Compatibility target: + +- no regression for users with thread bound spawning off +- no change to non-Discord channels in this iteration + +Rollout: + +1. Land interfaces and router behind current feature gates. +2. Route Discord completion mode bound deliveries through router. +3. Keep legacy path for non-bound flows. +4. Verify with targeted tests and canary runtime logs. + +## Tests required in iteration 1 + +Unit and integration coverage required: + +- manager token rotation uses latest token after manager reuse +- webhook sends update channel activity timestamps +- two active bound sessions in same requester channel do not duplicate to main channel +- completion for bound session mode run resolves to thread destination only +- disabled spawn flag keeps legacy behavior unchanged + +## Proposed implementation files + +Core: + +- `src/infra/outbound/session-binding-service.ts` (new) +- `src/infra/outbound/bound-delivery-router.ts` (new) +- `src/agents/subagent-announce.ts` (completion destination resolution integration) + +Discord adapter and runtime: + +- `src/discord/monitor/thread-bindings.manager.ts` +- `src/discord/monitor/reply-delivery.ts` +- `src/discord/send.outbound.ts` + +Tests: + +- `src/discord/monitor/provider*.test.ts` +- `src/discord/monitor/reply-delivery.test.ts` +- `src/agents/subagent-announce.format.e2e.test.ts` + +## Done criteria for iteration 1 + +- core interfaces exist and are wired for completion routing +- correctness fixes above are merged with tests +- no main and thread duplicate completion delivery in session mode bound runs +- no behavior change for disabled bound spawn deployments +- ACP remains explicitly deferred diff --git a/docs/experiments/plans/thread-bound-subagents.md b/docs/experiments/plans/thread-bound-subagents.md new file mode 100644 index 000000000..8663ab55e --- /dev/null +++ b/docs/experiments/plans/thread-bound-subagents.md @@ -0,0 +1,338 @@ +--- +summary: "Discord thread bound subagent sessions with plugin lifecycle hooks, routing, and config kill switches" +owner: "onutc" +status: "implemented" +last_updated: "2026-02-21" +title: "Thread Bound Subagents" +--- + +# Thread Bound Subagents + +## Overview + +This feature lets users interact with spawned subagents directly inside Discord threads. + +Instead of only waiting for a completion summary in the parent session, users can move into a dedicated thread that routes messages to the spawned subagent session. Replies are sent in-thread with a thread bound persona. + +The implementation is split between channel agnostic core lifecycle hooks and Discord specific extension behavior. + +## Goals + +- Allow direct thread conversation with a spawned subagent session. +- Keep default subagent orchestration channel agnostic. +- Support both automatic thread creation on spawn and manual focus controls. +- Provide predictable cleanup on completion, kill, timeout, and thread lifecycle changes. +- Keep behavior configurable with global defaults plus channel and account overrides. + +## Out of scope + +- New ACP protocol features. +- Non Discord thread binding implementations in this document. +- New bot accounts or app level Discord identity changes. + +## What shipped + +- `sessions_spawn` supports `thread: true` and `mode: "run" | "session"`. +- Spawn flow supports persistent thread bound sessions. +- Discord thread binding manager supports bind, unbind, TTL sweep, and persistence. +- Plugin hook lifecycle for subagents: + - `subagent_spawning` + - `subagent_spawned` + - `subagent_delivery_target` + - `subagent_ended` +- Discord extension implements thread auto bind, delivery target override, and unbind on end. +- Text commands for manual control: + - `/focus` + - `/unfocus` + - `/agents` + - `/session ttl` +- Global and Discord scoped enablement and TTL controls, including a global kill switch. + +## Core concepts + +### Spawn modes + +- `mode: "run"` + - one task lifecycle + - completion announcement flow +- `mode: "session"` + - persistent thread bound session + - supports follow up user messages in thread + +Default mode behavior: + +- if `thread: true` and mode omitted, mode defaults to `"session"` +- otherwise mode defaults to `"run"` + +Constraint: + +- `mode: "session"` requires `thread: true` + +### Thread binding target model + +Bindings are generic targets, not only subagents. + +- `targetKind: "subagent" | "acp"` +- `targetSessionKey: string` + +This allows the same routing primitive to support ACP/session bindings as well. + +### Thread binding manager + +The manager is responsible for: + +- binding or creating threads for a session target +- unbinding by thread or by target session +- managing webhook reuse and recent unbound webhook echo suppression +- TTL based unbind and stale thread cleanup +- persistence load and save + +## Architecture + +### Core and extension boundary + +Core (`src/agents/*`) does not directly depend on Discord routing internals. + +Core emits lifecycle intent through plugin hooks. + +Discord extension (`extensions/discord/src/subagent-hooks.ts`) implements Discord specific behavior: + +- pre spawn thread bind preparation +- completion delivery target override to bound thread +- unbind on subagent end + +### Plugin hook flow + +1. `subagent_spawning` + - before run starts + - can block spawn with `status: "error"` + - used to prepare thread binding when `thread: true` +2. `subagent_spawned` + - post run registration event +3. `subagent_delivery_target` + - completion routing override hook + - can redirect completion delivery to bound Discord thread origin +4. `subagent_ended` + - cleanup and unbind signal + +### Account ID normalization contract + +Thread binding and routing state must use one canonical account id abstraction. + +Specification: + +- Introduce a shared account id module (proposed: `src/routing/account-id.ts`) and stop defining local normalizers. +- Expose two explicit helpers: + - `normalizeAccountId(value): string` + - returns canonical, defaulted id (current default is `default`) + - use for map keys, manager registration and lookup, persistence keys, routing keys + - `normalizeOptionalAccountId(value): string | undefined` + - returns canonical id when present, `undefined` when absent + - use for inbound optional context fields and merge logic +- Do not implement ad hoc account normalization in feature modules. + - This includes `trim`, `toLowerCase`, or defaulting logic in local helper functions. +- Any map keyed by account id must only accept canonical ids from shared helpers. +- Hook payloads and delivery context should carry raw optional account ids, and normalize at module boundaries only. + +Migration guardrails: + +- Replace duplicate normalizers in routing, reply payload, command context, and provider helpers with shared helpers. +- Add contract tests that assert identical normalization behavior across: + - route resolution + - thread binding manager lookup + - reply delivery target filtering + - command run context merge + +### Persistence and state + +Binding state path: + +- `${stateDir}/discord/thread-bindings.json` + +Record shape contains: + +- account, channel, thread +- target kind and target session key +- agent label metadata +- webhook id/token +- boundBy, boundAt, expiresAt + +State is stored on `globalThis` to keep one shared registry across ESM and Jiti loader paths. + +## Configuration + +### Effective precedence + +For Discord thread binding options, account override wins, then channel, then global session default, then built in fallback. + +- account: `channels.discord.accounts..threadBindings.` +- channel: `channels.discord.threadBindings.` +- global: `session.threadBindings.` + +### Keys + +| Key | Scope | Default | Notes | +| ------------------------------------------------------- | --------------- | --------------- | ----------------------------------------- | +| `session.threadBindings.enabled` | global | `true` | master default kill switch | +| `session.threadBindings.ttlHours` | global | `24` | default auto unfocus TTL | +| `channels.discord.threadBindings.enabled` | channel/account | inherits global | Discord override kill switch | +| `channels.discord.threadBindings.ttlHours` | channel/account | inherits global | Discord TTL override | +| `channels.discord.threadBindings.spawnSubagentSessions` | channel/account | `false` | opt in for `thread: true` spawn auto bind | + +### Runtime effect of enable switch + +When effective `enabled` is false for a Discord account: + +- provider creates a noop thread binding manager for runtime wiring +- no real manager is registered for lookup by account id +- inbound bound thread routing is effectively disabled +- completion routing overrides do not resolve bound thread origins +- `/focus`, `/unfocus`, and thread binding specific operations report unavailable +- `thread: true` spawn path returns actionable error from Discord hook layer + +## Flow and behavior + +### Spawn with `thread: true` + +1. Spawn validates mode and permissions. +2. `subagent_spawning` hook runs. +3. Discord extension checks effective flags: + - thread bindings enabled + - `spawnSubagentSessions` enabled +4. Extension attempts auto bind and thread creation. +5. If bind fails: + - spawn returns error + - provisional child session is deleted +6. If bind succeeds: + - child run starts + - run is registered with spawn mode + +### Manual focus and unfocus + +- `/focus ` + - Discord only + - resolves subagent or session target + - binds current or created thread to target session +- `/unfocus` + - Discord thread only + - unbinds current thread + +### Inbound routing + +- Discord preflight checks current thread id against thread binding manager. +- If bound, effective session routing uses bound target session key. +- If not bound, normal routing path is used. + +### Outbound routing + +- Reply delivery checks whether current session has thread bindings. +- Bound sessions deliver to thread via webhook aware path. +- Unbound sessions use normal bot delivery. + +### Completion routing + +- Core completion flow calls `subagent_delivery_target`. +- Discord extension returns bound thread origin when it can resolve one. +- Core merges hook origin with requester origin and delivers completion. + +### Cleanup + +Cleanup occurs on: + +- completion +- error or timeout completion path +- kill and terminate paths +- TTL expiration +- archived or deleted thread probes +- manual `/unfocus` + +Cleanup behavior includes unbind and optional farewell messaging. + +## Commands and user UX + +| Command | Purpose | +| ---------------------------------------------------------- | -------------------------------------------------------------------- | ------------------------------------- | --------------- | ------------------------------------------- | +| `/subagents spawn [--model] [--thinking]` | spawn subagent; may be thread bound when `thread: true` path is used | +| `/focus ` | manually bind thread to subagent or session | +| `/unfocus` | remove binding from current thread | +| `/agents` | list active agents and binding state | +| `/session ttl ` | update TTL for focused thread binding | + +Notes: + +- `/session ttl` is currently Discord thread focused behavior. +- Thread intro and farewell text are generated by thread binding message helpers. + +## Failure handling and safety + +- Spawn returns explicit errors when thread binding cannot be prepared. +- Spawn failure after provisional bind attempts best effort unbind and session delete. +- Completion logic prevents duplicate ended hook emission. +- Retry and expiry guards prevent infinite completion announce retry loops. +- Webhook echo suppression avoids unbound webhook messages being reprocessed as inbound turns. + +## Module map + +### Core orchestration + +- `src/agents/subagent-spawn.ts` +- `src/agents/subagent-announce.ts` +- `src/agents/subagent-registry.ts` +- `src/agents/subagent-registry-cleanup.ts` +- `src/agents/subagent-registry-completion.ts` + +### Discord runtime + +- `src/discord/monitor/provider.ts` +- `src/discord/monitor/thread-bindings.manager.ts` +- `src/discord/monitor/thread-bindings.state.ts` +- `src/discord/monitor/thread-bindings.lifecycle.ts` +- `src/discord/monitor/thread-bindings.messages.ts` +- `src/discord/monitor/message-handler.preflight.ts` +- `src/discord/monitor/message-handler.process.ts` +- `src/discord/monitor/reply-delivery.ts` + +### Plugin hooks and extension + +- `src/plugins/types.ts` +- `src/plugins/hooks.ts` +- `extensions/discord/src/subagent-hooks.ts` + +### Config and schema + +- `src/config/types.base.ts` +- `src/config/types.discord.ts` +- `src/config/zod-schema.session.ts` +- `src/config/zod-schema.providers-core.ts` +- `src/config/schema.help.ts` +- `src/config/schema.labels.ts` + +## Test coverage highlights + +- `extensions/discord/src/subagent-hooks.test.ts` +- `src/discord/monitor/thread-bindings.ttl.test.ts` +- `src/discord/monitor/thread-bindings.shared-state.test.ts` +- `src/discord/monitor/reply-delivery.test.ts` +- `src/discord/monitor/message-handler.preflight.test.ts` +- `src/discord/monitor/message-handler.process.test.ts` +- `src/auto-reply/reply/commands-subagents-focus.test.ts` +- `src/auto-reply/reply/commands-session-ttl.test.ts` +- `src/agents/subagent-registry.steer-restart.test.ts` +- `src/agents/subagent-registry-completion.test.ts` + +## Operational summary + +- Use `session.threadBindings.enabled` as the global kill switch default. +- Use `channels.discord.threadBindings.enabled` and account overrides for selective enablement. +- Keep `spawnSubagentSessions` opt in for thread auto spawn behavior. +- Use TTL settings for automatic unfocus policy control. + +This model keeps subagent lifecycle orchestration generic while giving Discord a full thread bound interaction path. + +## Related plan + +For channel agnostic SessionBinding architecture and scoped iteration planning, see: + +- `docs/experiments/plans/session-binding-channel-agnostic.md` + +ACP remains a next step in that plan and is intentionally not implemented in this shipped Discord thread-bound flow. diff --git a/docs/tools/slash-commands.md b/docs/tools/slash-commands.md index 67f7a23e1..4d58fb5a4 100644 --- a/docs/tools/slash-commands.md +++ b/docs/tools/slash-commands.md @@ -78,7 +78,11 @@ Text + native (when enabled): - `/context [list|detail|json]` (explain “context”; `detail` shows per-file + per-tool + per-skill + system prompt size) - `/export-session [path]` (alias: `/export`) (export current session to HTML with full system prompt) - `/whoami` (show your sender id; alias: `/id`) +- `/session ttl ` (manage session-level settings, such as TTL) - `/subagents list|kill|log|info|send|steer|spawn` (inspect, control, or spawn sub-agent runs for the current session) +- `/agents` (list thread-bound agents for this session) +- `/focus ` (Discord: bind this thread, or a new thread, to a session/subagent target) +- `/unfocus` (Discord: remove the current thread binding) - `/kill ` (immediately abort one or all running sub-agents for this session; no confirmation message) - `/steer ` (steer a running sub-agent immediately: in-run when possible, otherwise abort current work and restart on the steer message) - `/tell ` (alias for `/steer`) diff --git a/extensions/discord/index.ts b/extensions/discord/index.ts index ab639cbaf..dcddde67c 100644 --- a/extensions/discord/index.ts +++ b/extensions/discord/index.ts @@ -2,6 +2,7 @@ import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; import { emptyPluginConfigSchema } from "openclaw/plugin-sdk"; import { discordPlugin } from "./src/channel.js"; import { setDiscordRuntime } from "./src/runtime.js"; +import { registerDiscordSubagentHooks } from "./src/subagent-hooks.js"; const plugin = { id: "discord", @@ -11,6 +12,7 @@ const plugin = { register(api: OpenClawPluginApi) { setDiscordRuntime(api.runtime); api.registerChannel({ plugin: discordPlugin }); + registerDiscordSubagentHooks(api); }, }; diff --git a/extensions/discord/src/subagent-hooks.test.ts b/extensions/discord/src/subagent-hooks.test.ts new file mode 100644 index 000000000..8e2514b3b --- /dev/null +++ b/extensions/discord/src/subagent-hooks.test.ts @@ -0,0 +1,430 @@ +import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { registerDiscordSubagentHooks } from "./subagent-hooks.js"; + +type ThreadBindingRecord = { + accountId: string; + threadId: string; +}; + +type MockResolvedDiscordAccount = { + accountId: string; + config: { + threadBindings?: { + enabled?: boolean; + spawnSubagentSessions?: boolean; + }; + }; +}; + +const hookMocks = vi.hoisted(() => ({ + resolveDiscordAccount: vi.fn( + (params?: { accountId?: string }): MockResolvedDiscordAccount => ({ + accountId: params?.accountId?.trim() || "default", + config: { + threadBindings: { + spawnSubagentSessions: true, + }, + }, + }), + ), + autoBindSpawnedDiscordSubagent: vi.fn( + async (): Promise<{ threadId: string } | null> => ({ threadId: "thread-1" }), + ), + listThreadBindingsBySessionKey: vi.fn((_params?: unknown): ThreadBindingRecord[] => []), + unbindThreadBindingsBySessionKey: vi.fn(() => []), +})); + +vi.mock("openclaw/plugin-sdk", () => ({ + resolveDiscordAccount: hookMocks.resolveDiscordAccount, + autoBindSpawnedDiscordSubagent: hookMocks.autoBindSpawnedDiscordSubagent, + listThreadBindingsBySessionKey: hookMocks.listThreadBindingsBySessionKey, + unbindThreadBindingsBySessionKey: hookMocks.unbindThreadBindingsBySessionKey, +})); + +function registerHandlersForTest( + config: Record = { + channels: { + discord: { + threadBindings: { + spawnSubagentSessions: true, + }, + }, + }, + }, +) { + const handlers = new Map unknown>(); + const api = { + config, + on: (hookName: string, handler: (event: unknown, ctx: unknown) => unknown) => { + handlers.set(hookName, handler); + }, + } as unknown as OpenClawPluginApi; + registerDiscordSubagentHooks(api); + return handlers; +} + +describe("discord subagent hook handlers", () => { + beforeEach(() => { + hookMocks.resolveDiscordAccount.mockClear(); + hookMocks.resolveDiscordAccount.mockImplementation((params?: { accountId?: string }) => ({ + accountId: params?.accountId?.trim() || "default", + config: { + threadBindings: { + spawnSubagentSessions: true, + }, + }, + })); + hookMocks.autoBindSpawnedDiscordSubagent.mockClear(); + hookMocks.listThreadBindingsBySessionKey.mockClear(); + hookMocks.unbindThreadBindingsBySessionKey.mockClear(); + }); + + it("registers subagent hooks", () => { + const handlers = registerHandlersForTest(); + expect(handlers.has("subagent_spawning")).toBe(true); + expect(handlers.has("subagent_delivery_target")).toBe(true); + expect(handlers.has("subagent_spawned")).toBe(false); + expect(handlers.has("subagent_ended")).toBe(true); + }); + + it("binds thread routing on subagent_spawning", async () => { + const handlers = registerHandlersForTest(); + const handler = handlers.get("subagent_spawning"); + if (!handler) { + throw new Error("expected subagent_spawning hook handler"); + } + + const result = await handler( + { + childSessionKey: "agent:main:subagent:child", + agentId: "main", + label: "banana", + mode: "session", + requester: { + channel: "discord", + accountId: "work", + to: "channel:123", + threadId: "456", + }, + threadRequested: true, + }, + {}, + ); + + expect(hookMocks.autoBindSpawnedDiscordSubagent).toHaveBeenCalledTimes(1); + expect(hookMocks.autoBindSpawnedDiscordSubagent).toHaveBeenCalledWith({ + accountId: "work", + channel: "discord", + to: "channel:123", + threadId: "456", + childSessionKey: "agent:main:subagent:child", + agentId: "main", + label: "banana", + boundBy: "system", + }); + expect(result).toMatchObject({ status: "ok", threadBindingReady: true }); + }); + + it("returns error when thread-bound subagent spawn is disabled", async () => { + const handlers = registerHandlersForTest({ + channels: { + discord: { + threadBindings: { + spawnSubagentSessions: false, + }, + }, + }, + }); + const handler = handlers.get("subagent_spawning"); + if (!handler) { + throw new Error("expected subagent_spawning hook handler"); + } + + const result = await handler( + { + childSessionKey: "agent:main:subagent:child", + agentId: "main", + requester: { + channel: "discord", + accountId: "work", + to: "channel:123", + }, + threadRequested: true, + }, + {}, + ); + + expect(hookMocks.autoBindSpawnedDiscordSubagent).not.toHaveBeenCalled(); + expect(result).toMatchObject({ status: "error" }); + const errorText = (result as { error?: string }).error ?? ""; + expect(errorText).toContain("spawnSubagentSessions=true"); + }); + + it("returns error when global thread bindings are disabled", async () => { + const handlers = registerHandlersForTest({ + session: { + threadBindings: { + enabled: false, + }, + }, + channels: { + discord: { + threadBindings: { + spawnSubagentSessions: true, + }, + }, + }, + }); + const handler = handlers.get("subagent_spawning"); + if (!handler) { + throw new Error("expected subagent_spawning hook handler"); + } + + const result = await handler( + { + childSessionKey: "agent:main:subagent:child", + agentId: "main", + requester: { + channel: "discord", + accountId: "work", + to: "channel:123", + }, + threadRequested: true, + }, + {}, + ); + + expect(hookMocks.autoBindSpawnedDiscordSubagent).not.toHaveBeenCalled(); + expect(result).toMatchObject({ status: "error" }); + const errorText = (result as { error?: string }).error ?? ""; + expect(errorText).toContain("threadBindings.enabled=true"); + }); + + it("allows account-level threadBindings.enabled to override global disable", async () => { + const handlers = registerHandlersForTest({ + session: { + threadBindings: { + enabled: false, + }, + }, + channels: { + discord: { + accounts: { + work: { + threadBindings: { + enabled: true, + spawnSubagentSessions: true, + }, + }, + }, + }, + }, + }); + const handler = handlers.get("subagent_spawning"); + if (!handler) { + throw new Error("expected subagent_spawning hook handler"); + } + + const result = await handler( + { + childSessionKey: "agent:main:subagent:child", + agentId: "main", + requester: { + channel: "discord", + accountId: "work", + to: "channel:123", + }, + threadRequested: true, + }, + {}, + ); + + expect(hookMocks.autoBindSpawnedDiscordSubagent).toHaveBeenCalledTimes(1); + expect(result).toMatchObject({ status: "ok", threadBindingReady: true }); + }); + + it("defaults thread-bound subagent spawn to disabled when unset", async () => { + const handlers = registerHandlersForTest({ + channels: { + discord: { + threadBindings: {}, + }, + }, + }); + const handler = handlers.get("subagent_spawning"); + if (!handler) { + throw new Error("expected subagent_spawning hook handler"); + } + + const result = await handler( + { + childSessionKey: "agent:main:subagent:child", + agentId: "main", + requester: { + channel: "discord", + accountId: "work", + to: "channel:123", + }, + threadRequested: true, + }, + {}, + ); + + expect(hookMocks.autoBindSpawnedDiscordSubagent).not.toHaveBeenCalled(); + expect(result).toMatchObject({ status: "error" }); + }); + + it("no-ops when thread binding is requested on non-discord channel", async () => { + const handlers = registerHandlersForTest(); + const handler = handlers.get("subagent_spawning"); + if (!handler) { + throw new Error("expected subagent_spawning hook handler"); + } + + const result = await handler( + { + childSessionKey: "agent:main:subagent:child", + agentId: "main", + mode: "session", + requester: { + channel: "signal", + to: "+123", + }, + threadRequested: true, + }, + {}, + ); + + expect(hookMocks.autoBindSpawnedDiscordSubagent).not.toHaveBeenCalled(); + expect(result).toBeUndefined(); + }); + + it("returns error when thread bind fails", async () => { + hookMocks.autoBindSpawnedDiscordSubagent.mockResolvedValueOnce(null); + const handlers = registerHandlersForTest(); + const handler = handlers.get("subagent_spawning"); + if (!handler) { + throw new Error("expected subagent_spawning hook handler"); + } + + const result = await handler( + { + childSessionKey: "agent:main:subagent:child", + agentId: "main", + mode: "session", + requester: { + channel: "discord", + accountId: "work", + to: "channel:123", + }, + threadRequested: true, + }, + {}, + ); + + expect(result).toMatchObject({ status: "error" }); + const errorText = (result as { error?: string }).error ?? ""; + expect(errorText).toMatch(/unable to create or bind/i); + }); + + it("unbinds thread routing on subagent_ended", () => { + const handlers = registerHandlersForTest(); + const handler = handlers.get("subagent_ended"); + if (!handler) { + throw new Error("expected subagent_ended hook handler"); + } + + handler( + { + targetSessionKey: "agent:main:subagent:child", + targetKind: "subagent", + reason: "subagent-complete", + sendFarewell: true, + accountId: "work", + }, + {}, + ); + + expect(hookMocks.unbindThreadBindingsBySessionKey).toHaveBeenCalledTimes(1); + expect(hookMocks.unbindThreadBindingsBySessionKey).toHaveBeenCalledWith({ + targetSessionKey: "agent:main:subagent:child", + accountId: "work", + targetKind: "subagent", + reason: "subagent-complete", + sendFarewell: true, + }); + }); + + it("resolves delivery target from matching bound thread", () => { + hookMocks.listThreadBindingsBySessionKey.mockReturnValueOnce([ + { accountId: "work", threadId: "777" }, + ]); + const handlers = registerHandlersForTest(); + const handler = handlers.get("subagent_delivery_target"); + if (!handler) { + throw new Error("expected subagent_delivery_target hook handler"); + } + + const result = handler( + { + childSessionKey: "agent:main:subagent:child", + requesterSessionKey: "agent:main:main", + requesterOrigin: { + channel: "discord", + accountId: "work", + to: "channel:123", + threadId: "777", + }, + childRunId: "run-1", + spawnMode: "session", + expectsCompletionMessage: true, + }, + {}, + ); + + expect(hookMocks.listThreadBindingsBySessionKey).toHaveBeenCalledWith({ + targetSessionKey: "agent:main:subagent:child", + accountId: "work", + targetKind: "subagent", + }); + expect(result).toEqual({ + origin: { + channel: "discord", + accountId: "work", + to: "channel:777", + threadId: "777", + }, + }); + }); + + it("keeps original routing when delivery target is ambiguous", () => { + hookMocks.listThreadBindingsBySessionKey.mockReturnValueOnce([ + { accountId: "work", threadId: "777" }, + { accountId: "work", threadId: "888" }, + ]); + const handlers = registerHandlersForTest(); + const handler = handlers.get("subagent_delivery_target"); + if (!handler) { + throw new Error("expected subagent_delivery_target hook handler"); + } + + const result = handler( + { + childSessionKey: "agent:main:subagent:child", + requesterSessionKey: "agent:main:main", + requesterOrigin: { + channel: "discord", + accountId: "work", + to: "channel:123", + }, + childRunId: "run-1", + spawnMode: "session", + expectsCompletionMessage: true, + }, + {}, + ); + + expect(result).toBeUndefined(); + }); +}); diff --git a/extensions/discord/src/subagent-hooks.ts b/extensions/discord/src/subagent-hooks.ts new file mode 100644 index 000000000..8ecd7873d --- /dev/null +++ b/extensions/discord/src/subagent-hooks.ts @@ -0,0 +1,152 @@ +import type { OpenClawPluginApi } from "openclaw/plugin-sdk"; +import { + autoBindSpawnedDiscordSubagent, + listThreadBindingsBySessionKey, + resolveDiscordAccount, + unbindThreadBindingsBySessionKey, +} from "openclaw/plugin-sdk"; + +function summarizeError(err: unknown): string { + if (err instanceof Error) { + return err.message; + } + if (typeof err === "string") { + return err; + } + return "error"; +} + +export function registerDiscordSubagentHooks(api: OpenClawPluginApi) { + const resolveThreadBindingFlags = (accountId?: string) => { + const account = resolveDiscordAccount({ + cfg: api.config, + accountId, + }); + const baseThreadBindings = api.config.channels?.discord?.threadBindings; + const accountThreadBindings = + api.config.channels?.discord?.accounts?.[account.accountId]?.threadBindings; + return { + enabled: + accountThreadBindings?.enabled ?? + baseThreadBindings?.enabled ?? + api.config.session?.threadBindings?.enabled ?? + true, + spawnSubagentSessions: + accountThreadBindings?.spawnSubagentSessions ?? + baseThreadBindings?.spawnSubagentSessions ?? + false, + }; + }; + + api.on("subagent_spawning", async (event) => { + if (!event.threadRequested) { + return; + } + const channel = event.requester?.channel?.trim().toLowerCase(); + if (channel !== "discord") { + // Ignore non-Discord channels so channel-specific plugins can handle + // their own thread/session provisioning without Discord blocking them. + return; + } + const threadBindingFlags = resolveThreadBindingFlags(event.requester?.accountId); + if (!threadBindingFlags.enabled) { + return { + status: "error" as const, + error: + "Discord thread bindings are disabled (set channels.discord.threadBindings.enabled=true to override for this account, or session.threadBindings.enabled=true globally).", + }; + } + if (!threadBindingFlags.spawnSubagentSessions) { + return { + status: "error" as const, + error: + "Discord thread-bound subagent spawns are disabled for this account (set channels.discord.threadBindings.spawnSubagentSessions=true to enable).", + }; + } + try { + const binding = await autoBindSpawnedDiscordSubagent({ + accountId: event.requester?.accountId, + channel: event.requester?.channel, + to: event.requester?.to, + threadId: event.requester?.threadId, + childSessionKey: event.childSessionKey, + agentId: event.agentId, + label: event.label, + boundBy: "system", + }); + if (!binding) { + return { + status: "error" as const, + error: + "Unable to create or bind a Discord thread for this subagent session. Session mode is unavailable for this target.", + }; + } + return { status: "ok" as const, threadBindingReady: true }; + } catch (err) { + return { + status: "error" as const, + error: `Discord thread bind failed: ${summarizeError(err)}`, + }; + } + }); + + api.on("subagent_ended", (event) => { + unbindThreadBindingsBySessionKey({ + targetSessionKey: event.targetSessionKey, + accountId: event.accountId, + targetKind: event.targetKind, + reason: event.reason, + sendFarewell: event.sendFarewell, + }); + }); + + api.on("subagent_delivery_target", (event) => { + if (!event.expectsCompletionMessage) { + return; + } + const requesterChannel = event.requesterOrigin?.channel?.trim().toLowerCase(); + if (requesterChannel !== "discord") { + return; + } + const requesterAccountId = event.requesterOrigin?.accountId?.trim(); + const requesterThreadId = + event.requesterOrigin?.threadId != null && event.requesterOrigin.threadId !== "" + ? String(event.requesterOrigin.threadId).trim() + : ""; + const bindings = listThreadBindingsBySessionKey({ + targetSessionKey: event.childSessionKey, + ...(requesterAccountId ? { accountId: requesterAccountId } : {}), + targetKind: "subagent", + }); + if (bindings.length === 0) { + return; + } + + let binding: (typeof bindings)[number] | undefined; + if (requesterThreadId) { + binding = bindings.find((entry) => { + if (entry.threadId !== requesterThreadId) { + return false; + } + if (requesterAccountId && entry.accountId !== requesterAccountId) { + return false; + } + return true; + }); + } + if (!binding && bindings.length === 1) { + binding = bindings[0]; + } + if (!binding) { + return; + } + return { + origin: { + channel: "discord", + accountId: binding.accountId, + to: `channel:${binding.threadId}`, + threadId: binding.threadId, + }, + }; + }); +} diff --git a/src/agents/openclaw-tools.sessions.e2e.test.ts b/src/agents/openclaw-tools.sessions.e2e.test.ts index d02f0089b..d2e93702c 100644 --- a/src/agents/openclaw-tools.sessions.e2e.test.ts +++ b/src/agents/openclaw-tools.sessions.e2e.test.ts @@ -79,6 +79,8 @@ describe("sessions tools", () => { expect(schemaProp("sessions_send", "timeoutSeconds").type).toBe("number"); expect(schemaProp("sessions_spawn", "thinking").type).toBe("string"); expect(schemaProp("sessions_spawn", "runTimeoutSeconds").type).toBe("number"); + expect(schemaProp("sessions_spawn", "thread").type).toBe("boolean"); + expect(schemaProp("sessions_spawn", "mode").type).toBe("string"); expect(schemaProp("subagents", "recentMinutes").type).toBe("number"); }); diff --git a/src/agents/openclaw-tools.subagents.sessions-spawn.lifecycle.e2e.test.ts b/src/agents/openclaw-tools.subagents.sessions-spawn.lifecycle.e2e.test.ts index b3fbdacf1..d929ff16f 100644 --- a/src/agents/openclaw-tools.subagents.sessions-spawn.lifecycle.e2e.test.ts +++ b/src/agents/openclaw-tools.subagents.sessions-spawn.lifecycle.e2e.test.ts @@ -133,35 +133,6 @@ const waitFor = async (predicate: () => boolean, timeoutMs = 2000) => { ); }; -function expectSingleCompletionSend( - calls: GatewayRequest[], - expected: { sessionKey: string; channel: string; to: string; message: string }, -) { - const sendCalls = calls.filter((call) => call.method === "send"); - expect(sendCalls).toHaveLength(1); - const send = sendCalls[0]?.params as - | { sessionKey?: string; channel?: string; to?: string; message?: string } - | undefined; - expect(send?.sessionKey).toBe(expected.sessionKey); - expect(send?.channel).toBe(expected.channel); - expect(send?.to).toBe(expected.to); - expect(send?.message).toBe(expected.message); -} - -function createDeleteCleanupHooks(setDeletedKey: (key: string | undefined) => void) { - return { - onAgentSubagentSpawn: (params: unknown) => { - const rec = params as { channel?: string; timeout?: number } | undefined; - expect(rec?.channel).toBe("discord"); - expect(rec?.timeout).toBe(1); - }, - onSessionsDelete: (params: unknown) => { - const rec = params as { key?: string } | undefined; - setDeletedKey(rec?.key); - }, - }; -} - describe("openclaw-tools: subagents (sessions_spawn lifecycle)", () => { beforeEach(() => { resetSessionsSpawnConfigOverride(); @@ -184,7 +155,6 @@ describe("openclaw-tools: subagents (sessions_spawn lifecycle)", () => { const tool = await getSessionsSpawnTool({ agentSessionKey: "main", agentChannel: "whatsapp", - agentTo: "+123", }); const result = await tool.execute("call2", { @@ -213,7 +183,7 @@ describe("openclaw-tools: subagents (sessions_spawn lifecycle)", () => { await waitFor(() => ctx.waitCalls.some((call) => call.runId === child.runId)); await waitFor(() => patchCalls.some((call) => call.label === "my-task")); - await waitFor(() => ctx.calls.filter((c) => c.method === "send").length >= 1); + await waitFor(() => ctx.calls.filter((c) => c.method === "agent").length >= 2); const childWait = ctx.waitCalls.find((call) => call.runId === child.runId); expect(childWait?.timeoutMs).toBe(1000); @@ -222,21 +192,22 @@ describe("openclaw-tools: subagents (sessions_spawn lifecycle)", () => { expect(labelPatch?.key).toBe(child.sessionKey); expect(labelPatch?.label).toBe("my-task"); - // Subagent spawn call plus direct outbound completion send. + // Two agent calls: subagent spawn + main agent trigger const agentCalls = ctx.calls.filter((c) => c.method === "agent"); - expect(agentCalls).toHaveLength(1); + expect(agentCalls).toHaveLength(2); // First call: subagent spawn const first = agentCalls[0]?.params as { lane?: string } | undefined; expect(first?.lane).toBe("subagent"); - // Direct send should route completion to the requester channel/session. - expectSingleCompletionSend(ctx.calls, { - sessionKey: "agent:main:main", - channel: "whatsapp", - to: "+123", - message: "✅ Subagent main finished\n\ndone", - }); + // Second call: main agent trigger (not "Sub-agent announce step." anymore) + const second = agentCalls[1]?.params as { sessionKey?: string; message?: string } | undefined; + expect(second?.sessionKey).toBe("agent:main:main"); + expect(second?.message).toContain("subagent task"); + + // No direct send to external channel (main agent handles delivery) + const sendCalls = ctx.calls.filter((c) => c.method === "send"); + expect(sendCalls.length).toBe(0); expect(child.sessionKey?.startsWith("agent:main:subagent:")).toBe(true); }); @@ -245,15 +216,20 @@ describe("openclaw-tools: subagents (sessions_spawn lifecycle)", () => { callGatewayMock.mockReset(); let deletedKey: string | undefined; const ctx = setupSessionsSpawnGatewayMock({ - ...createDeleteCleanupHooks((key) => { - deletedKey = key; - }), + onAgentSubagentSpawn: (params) => { + const rec = params as { channel?: string; timeout?: number } | undefined; + expect(rec?.channel).toBe("discord"); + expect(rec?.timeout).toBe(1); + }, + onSessionsDelete: (params) => { + const rec = params as { key?: string } | undefined; + deletedKey = rec?.key; + }, }); const tool = await getSessionsSpawnTool({ agentSessionKey: "discord:group:req", agentChannel: "discord", - agentTo: "discord:dm:u123", }); const result = await tool.execute("call1", { @@ -287,11 +263,14 @@ describe("openclaw-tools: subagents (sessions_spawn lifecycle)", () => { vi.useRealTimers(); } + await waitFor(() => ctx.calls.filter((call) => call.method === "agent").length >= 2); + await waitFor(() => Boolean(deletedKey)); + const childWait = ctx.waitCalls.find((call) => call.runId === child.runId); expect(childWait?.timeoutMs).toBe(1000); const agentCalls = ctx.calls.filter((call) => call.method === "agent"); - expect(agentCalls).toHaveLength(1); + expect(agentCalls).toHaveLength(2); const first = agentCalls[0]?.params as | { @@ -307,12 +286,19 @@ describe("openclaw-tools: subagents (sessions_spawn lifecycle)", () => { expect(first?.sessionKey?.startsWith("agent:main:subagent:")).toBe(true); expect(child.sessionKey?.startsWith("agent:main:subagent:")).toBe(true); - expectSingleCompletionSend(ctx.calls, { - sessionKey: "agent:main:discord:group:req", - channel: "discord", - to: "discord:dm:u123", - message: "✅ Subagent main finished", - }); + const second = agentCalls[1]?.params as + | { + sessionKey?: string; + message?: string; + deliver?: boolean; + } + | undefined; + expect(second?.sessionKey).toBe("agent:main:discord:group:req"); + expect(second?.deliver).toBe(true); + expect(second?.message).toContain("subagent task"); + + const sendCalls = ctx.calls.filter((c) => c.method === "send"); + expect(sendCalls.length).toBe(0); expect(deletedKey?.startsWith("agent:main:subagent:")).toBe(true); }); @@ -323,16 +309,21 @@ describe("openclaw-tools: subagents (sessions_spawn lifecycle)", () => { let deletedKey: string | undefined; const ctx = setupSessionsSpawnGatewayMock({ includeChatHistory: true, - ...createDeleteCleanupHooks((key) => { - deletedKey = key; - }), + onAgentSubagentSpawn: (params) => { + const rec = params as { channel?: string; timeout?: number } | undefined; + expect(rec?.channel).toBe("discord"); + expect(rec?.timeout).toBe(1); + }, + onSessionsDelete: (params) => { + const rec = params as { key?: string } | undefined; + deletedKey = rec?.key; + }, agentWaitResult: { status: "ok", startedAt: 3000, endedAt: 4000 }, }); const tool = await getSessionsSpawnTool({ agentSessionKey: "discord:group:req", agentChannel: "discord", - agentTo: "discord:dm:u123", }); const result = await tool.execute("call1b", { @@ -350,27 +341,29 @@ describe("openclaw-tools: subagents (sessions_spawn lifecycle)", () => { throw new Error("missing child runId"); } await waitFor(() => ctx.waitCalls.some((call) => call.runId === child.runId)); - await waitFor(() => ctx.calls.filter((call) => call.method === "send").length >= 1); + await waitFor(() => ctx.calls.filter((call) => call.method === "agent").length >= 2); await waitFor(() => Boolean(deletedKey)); const childWait = ctx.waitCalls.find((call) => call.runId === child.runId); expect(childWait?.timeoutMs).toBe(1000); expect(child.sessionKey?.startsWith("agent:main:subagent:")).toBe(true); - // One agent call for spawn, then direct completion send. + // Two agent calls: subagent spawn + main agent trigger const agentCalls = ctx.calls.filter((call) => call.method === "agent"); - expect(agentCalls).toHaveLength(1); + expect(agentCalls).toHaveLength(2); // First call: subagent spawn const first = agentCalls[0]?.params as { lane?: string } | undefined; expect(first?.lane).toBe("subagent"); - expectSingleCompletionSend(ctx.calls, { - sessionKey: "agent:main:discord:group:req", - channel: "discord", - to: "discord:dm:u123", - message: "✅ Subagent main finished\n\ndone", - }); + // Second call: main agent trigger + const second = agentCalls[1]?.params as { sessionKey?: string; deliver?: boolean } | undefined; + expect(second?.sessionKey).toBe("agent:main:discord:group:req"); + expect(second?.deliver).toBe(true); + + // No direct send to external channel (main agent handles delivery) + const sendCalls = ctx.calls.filter((c) => c.method === "send"); + expect(sendCalls.length).toBe(0); // Session should be deleted expect(deletedKey?.startsWith("agent:main:subagent:")).toBe(true); diff --git a/src/agents/pi-tools.policy.ts b/src/agents/pi-tools.policy.ts index 14b0e2d29..3c363ac41 100644 --- a/src/agents/pi-tools.policy.ts +++ b/src/agents/pi-tools.policy.ts @@ -1,4 +1,5 @@ import { getChannelDock } from "../channels/dock.js"; +import { DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH } from "../config/agent-limits.js"; import type { OpenClawConfig } from "../config/config.js"; import { resolveChannelGroupToolsPolicy } from "../config/group-policy.js"; import { resolveThreadParentSessionKey } from "../sessions/session-key-utils.js"; @@ -83,7 +84,8 @@ function resolveSubagentDenyList(depth: number, maxSpawnDepth: number): string[] export function resolveSubagentToolPolicy(cfg?: OpenClawConfig, depth?: number): SandboxToolPolicy { const configured = cfg?.tools?.subagents?.tools; - const maxSpawnDepth = cfg?.agents?.defaults?.subagents?.maxSpawnDepth ?? 1; + const maxSpawnDepth = + cfg?.agents?.defaults?.subagents?.maxSpawnDepth ?? DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH; const effectiveDepth = typeof depth === "number" && depth >= 0 ? depth : 1; const baseDeny = resolveSubagentDenyList(effectiveDepth, maxSpawnDepth); const deny = [...baseDeny, ...(Array.isArray(configured?.deny) ? configured.deny : [])]; diff --git a/src/agents/sessions-spawn-hooks.test.ts b/src/agents/sessions-spawn-hooks.test.ts new file mode 100644 index 000000000..6db18f609 --- /dev/null +++ b/src/agents/sessions-spawn-hooks.test.ts @@ -0,0 +1,373 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; +import "./test-helpers/fast-core-tools.js"; +import { + getCallGatewayMock, + getSessionsSpawnTool, + setSessionsSpawnConfigOverride, +} from "./openclaw-tools.subagents.sessions-spawn.test-harness.js"; + +const hookRunnerMocks = vi.hoisted(() => ({ + hasSubagentEndedHook: true, + runSubagentSpawning: vi.fn(async (event: unknown) => { + const input = event as { + threadRequested?: boolean; + requester?: { channel?: string }; + }; + if (!input.threadRequested) { + return undefined; + } + const channel = input.requester?.channel?.trim().toLowerCase(); + if (channel !== "discord") { + const channelLabel = input.requester?.channel?.trim() || "unknown"; + return { + status: "error" as const, + error: `thread=true is not supported for channel "${channelLabel}". Only Discord thread-bound subagent sessions are supported right now.`, + }; + } + return { + status: "ok" as const, + threadBindingReady: true, + }; + }), + runSubagentSpawned: vi.fn(async () => {}), + runSubagentEnded: vi.fn(async () => {}), +})); + +vi.mock("../plugins/hook-runner-global.js", () => ({ + getGlobalHookRunner: vi.fn(() => ({ + hasHooks: (hookName: string) => + hookName === "subagent_spawning" || + hookName === "subagent_spawned" || + (hookName === "subagent_ended" && hookRunnerMocks.hasSubagentEndedHook), + runSubagentSpawning: hookRunnerMocks.runSubagentSpawning, + runSubagentSpawned: hookRunnerMocks.runSubagentSpawned, + runSubagentEnded: hookRunnerMocks.runSubagentEnded, + })), +})); + +describe("sessions_spawn subagent lifecycle hooks", () => { + beforeEach(() => { + hookRunnerMocks.hasSubagentEndedHook = true; + hookRunnerMocks.runSubagentSpawning.mockClear(); + hookRunnerMocks.runSubagentSpawned.mockClear(); + hookRunnerMocks.runSubagentEnded.mockClear(); + const callGatewayMock = getCallGatewayMock(); + callGatewayMock.mockReset(); + setSessionsSpawnConfigOverride({ + session: { + mainKey: "main", + scope: "per-sender", + }, + }); + callGatewayMock.mockImplementation(async (opts: unknown) => { + const request = opts as { method?: string }; + if (request.method === "agent") { + return { runId: "run-1", status: "accepted", acceptedAt: 1 }; + } + if (request.method === "agent.wait") { + return { runId: "run-1", status: "running" }; + } + return {}; + }); + }); + + it("runs subagent_spawning and emits subagent_spawned with requester metadata", async () => { + const tool = await getSessionsSpawnTool({ + agentSessionKey: "main", + agentChannel: "discord", + agentAccountId: "work", + agentTo: "channel:123", + agentThreadId: 456, + }); + + const result = await tool.execute("call", { + task: "do thing", + label: "research", + runTimeoutSeconds: 1, + thread: true, + }); + + expect(result.details).toMatchObject({ status: "accepted", runId: "run-1" }); + expect(hookRunnerMocks.runSubagentSpawning).toHaveBeenCalledTimes(1); + expect(hookRunnerMocks.runSubagentSpawning).toHaveBeenCalledWith( + { + childSessionKey: expect.stringMatching(/^agent:main:subagent:/), + agentId: "main", + label: "research", + mode: "session", + requester: { + channel: "discord", + accountId: "work", + to: "channel:123", + threadId: 456, + }, + threadRequested: true, + }, + { + childSessionKey: expect.stringMatching(/^agent:main:subagent:/), + requesterSessionKey: "main", + }, + ); + + expect(hookRunnerMocks.runSubagentSpawned).toHaveBeenCalledTimes(1); + const [event, ctx] = (hookRunnerMocks.runSubagentSpawned.mock.calls[0] ?? []) as unknown as [ + Record, + Record, + ]; + expect(event).toMatchObject({ + runId: "run-1", + agentId: "main", + label: "research", + mode: "session", + requester: { + channel: "discord", + accountId: "work", + to: "channel:123", + threadId: 456, + }, + threadRequested: true, + }); + expect(event.childSessionKey).toEqual(expect.stringMatching(/^agent:main:subagent:/)); + expect(ctx).toMatchObject({ + runId: "run-1", + requesterSessionKey: "main", + childSessionKey: event.childSessionKey, + }); + }); + + it("emits subagent_spawned with threadRequested=false when not requested", async () => { + const tool = await getSessionsSpawnTool({ + agentSessionKey: "main", + agentChannel: "discord", + agentTo: "channel:123", + }); + + const result = await tool.execute("call2", { + task: "do thing", + runTimeoutSeconds: 1, + }); + + expect(result.details).toMatchObject({ status: "accepted", runId: "run-1" }); + expect(hookRunnerMocks.runSubagentSpawning).not.toHaveBeenCalled(); + expect(hookRunnerMocks.runSubagentSpawned).toHaveBeenCalledTimes(1); + const [event] = (hookRunnerMocks.runSubagentSpawned.mock.calls[0] ?? []) as unknown as [ + Record, + ]; + expect(event).toMatchObject({ + mode: "run", + threadRequested: false, + requester: { + channel: "discord", + to: "channel:123", + }, + }); + }); + + it("respects explicit mode=run when thread binding is requested", async () => { + const tool = await getSessionsSpawnTool({ + agentSessionKey: "main", + agentChannel: "discord", + agentTo: "channel:123", + }); + + const result = await tool.execute("call3", { + task: "do thing", + runTimeoutSeconds: 1, + thread: true, + mode: "run", + }); + + expect(result.details).toMatchObject({ status: "accepted", runId: "run-1", mode: "run" }); + expect(hookRunnerMocks.runSubagentSpawning).toHaveBeenCalledTimes(1); + const [event] = (hookRunnerMocks.runSubagentSpawned.mock.calls[0] ?? []) as unknown as [ + Record, + ]; + expect(event).toMatchObject({ + mode: "run", + threadRequested: true, + }); + }); + + it("returns error when thread binding cannot be created", async () => { + hookRunnerMocks.runSubagentSpawning.mockResolvedValueOnce({ + status: "error", + error: "Unable to create or bind a Discord thread for this subagent session.", + }); + const tool = await getSessionsSpawnTool({ + agentSessionKey: "main", + agentChannel: "discord", + agentAccountId: "work", + agentTo: "channel:123", + }); + + const result = await tool.execute("call4", { + task: "do thing", + runTimeoutSeconds: 1, + thread: true, + mode: "session", + }); + + expect(result.details).toMatchObject({ status: "error" }); + const details = result.details as { error?: string; childSessionKey?: string }; + expect(details.error).toMatch(/thread/i); + expect(hookRunnerMocks.runSubagentSpawned).not.toHaveBeenCalled(); + const callGatewayMock = getCallGatewayMock(); + const calledMethods = callGatewayMock.mock.calls.map((call: [unknown]) => { + const request = call[0] as { method?: string }; + return request.method; + }); + expect(calledMethods).toContain("sessions.delete"); + expect(calledMethods).not.toContain("agent"); + const deleteCall = callGatewayMock.mock.calls + .map((call: [unknown]) => call[0] as { method?: string; params?: Record }) + .find( + (request: { method?: string; params?: Record }) => + request.method === "sessions.delete", + ); + expect(deleteCall?.params).toMatchObject({ + key: details.childSessionKey, + emitLifecycleHooks: false, + }); + }); + + it("rejects mode=session when thread=true is not requested", async () => { + const tool = await getSessionsSpawnTool({ + agentSessionKey: "main", + agentChannel: "discord", + agentTo: "channel:123", + }); + + const result = await tool.execute("call6", { + task: "do thing", + mode: "session", + }); + + expect(result.details).toMatchObject({ status: "error" }); + const details = result.details as { error?: string }; + expect(details.error).toMatch(/requires thread=true/i); + expect(hookRunnerMocks.runSubagentSpawning).not.toHaveBeenCalled(); + expect(hookRunnerMocks.runSubagentSpawned).not.toHaveBeenCalled(); + const callGatewayMock = getCallGatewayMock(); + expect(callGatewayMock).not.toHaveBeenCalled(); + }); + + it("rejects thread=true on channels without thread support", async () => { + const tool = await getSessionsSpawnTool({ + agentSessionKey: "main", + agentChannel: "signal", + agentTo: "+123", + }); + + const result = await tool.execute("call5", { + task: "do thing", + thread: true, + mode: "session", + }); + + expect(result.details).toMatchObject({ status: "error" }); + const details = result.details as { error?: string }; + expect(details.error).toMatch(/only discord/i); + expect(hookRunnerMocks.runSubagentSpawning).toHaveBeenCalledTimes(1); + expect(hookRunnerMocks.runSubagentSpawned).not.toHaveBeenCalled(); + const callGatewayMock = getCallGatewayMock(); + const calledMethods = callGatewayMock.mock.calls.map((call: [unknown]) => { + const request = call[0] as { method?: string }; + return request.method; + }); + expect(calledMethods).toContain("sessions.delete"); + expect(calledMethods).not.toContain("agent"); + }); + + it("runs subagent_ended cleanup hook when agent start fails after successful bind", async () => { + const callGatewayMock = getCallGatewayMock(); + callGatewayMock.mockImplementation(async (opts: unknown) => { + const request = opts as { method?: string }; + if (request.method === "agent") { + throw new Error("spawn failed"); + } + return {}; + }); + const tool = await getSessionsSpawnTool({ + agentSessionKey: "main", + agentChannel: "discord", + agentAccountId: "work", + agentTo: "channel:123", + agentThreadId: "456", + }); + + const result = await tool.execute("call7", { + task: "do thing", + thread: true, + mode: "session", + }); + + expect(result.details).toMatchObject({ status: "error" }); + expect(hookRunnerMocks.runSubagentEnded).toHaveBeenCalledTimes(1); + const [event] = (hookRunnerMocks.runSubagentEnded.mock.calls[0] ?? []) as unknown as [ + Record, + ]; + expect(event).toMatchObject({ + targetSessionKey: expect.stringMatching(/^agent:main:subagent:/), + accountId: "work", + targetKind: "subagent", + reason: "spawn-failed", + sendFarewell: true, + outcome: "error", + error: "Session failed to start", + }); + const deleteCall = callGatewayMock.mock.calls + .map((call: [unknown]) => call[0] as { method?: string; params?: Record }) + .find( + (request: { method?: string; params?: Record }) => + request.method === "sessions.delete", + ); + expect(deleteCall?.params).toMatchObject({ + key: event.targetSessionKey, + deleteTranscript: true, + emitLifecycleHooks: false, + }); + }); + + it("falls back to sessions.delete cleanup when subagent_ended hook is unavailable", async () => { + hookRunnerMocks.hasSubagentEndedHook = false; + const callGatewayMock = getCallGatewayMock(); + callGatewayMock.mockImplementation(async (opts: unknown) => { + const request = opts as { method?: string }; + if (request.method === "agent") { + throw new Error("spawn failed"); + } + return {}; + }); + const tool = await getSessionsSpawnTool({ + agentSessionKey: "main", + agentChannel: "discord", + agentAccountId: "work", + agentTo: "channel:123", + agentThreadId: "456", + }); + + const result = await tool.execute("call8", { + task: "do thing", + thread: true, + mode: "session", + }); + + expect(result.details).toMatchObject({ status: "error" }); + expect(hookRunnerMocks.runSubagentEnded).not.toHaveBeenCalled(); + const methods = callGatewayMock.mock.calls.map((call: [unknown]) => { + const request = call[0] as { method?: string }; + return request.method; + }); + expect(methods).toContain("sessions.delete"); + const deleteCall = callGatewayMock.mock.calls + .map((call: [unknown]) => call[0] as { method?: string; params?: Record }) + .find( + (request: { method?: string; params?: Record }) => + request.method === "sessions.delete", + ); + expect(deleteCall?.params).toMatchObject({ + deleteTranscript: true, + emitLifecycleHooks: true, + }); + }); +}); diff --git a/src/agents/subagent-announce.format.e2e.test.ts b/src/agents/subagent-announce.format.e2e.test.ts index b6e594a40..2b775be85 100644 --- a/src/agents/subagent-announce.format.e2e.test.ts +++ b/src/agents/subagent-announce.format.e2e.test.ts @@ -1,11 +1,23 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; import { SILENT_REPLY_TOKEN } from "../auto-reply/tokens.js"; +import { + __testing as sessionBindingServiceTesting, + registerSessionBindingAdapter, +} from "../infra/outbound/session-binding-service.js"; type AgentCallRequest = { method?: string; params?: Record }; type RequesterResolution = { requesterSessionKey: string; requesterOrigin?: Record; } | null; +type SubagentDeliveryTargetResult = { + origin?: { + channel?: string; + accountId?: string; + to?: string; + threadId?: string | number; + }; +}; const agentSpy = vi.fn(async (_req: AgentCallRequest) => ({ runId: "run-main", status: "ok" })); const sendSpy = vi.fn(async (_req: AgentCallRequest) => ({ runId: "send-main", status: "ok" })); @@ -24,6 +36,19 @@ const subagentRegistryMock = { countActiveDescendantRuns: vi.fn((_sessionKey: string) => 0), resolveRequesterForChildSession: vi.fn((_sessionKey: string): RequesterResolution => null), }; +const subagentDeliveryTargetHookMock = vi.fn( + async (_event?: unknown, _ctx?: unknown): Promise => + undefined, +); +let hasSubagentDeliveryTargetHook = false; +const hookRunnerMock = { + hasHooks: vi.fn( + (hookName: string) => hookName === "subagent_delivery_target" && hasSubagentDeliveryTargetHook, + ), + runSubagentDeliveryTarget: vi.fn((event: unknown, ctx: unknown) => + subagentDeliveryTargetHookMock(event, ctx), + ), +}; const chatHistoryMock = vi.fn(async (_sessionKey?: string) => ({ messages: [] as Array, })); @@ -103,6 +128,9 @@ vi.mock("../config/sessions.js", () => ({ vi.mock("./pi-embedded.js", () => embeddedRunMock); vi.mock("./subagent-registry.js", () => subagentRegistryMock); +vi.mock("../plugins/hook-runner-global.js", () => ({ + getGlobalHookRunner: () => hookRunnerMock, +})); vi.mock("../config/config.js", async (importOriginal) => { const actual = await importOriginal(); @@ -114,9 +142,13 @@ vi.mock("../config/config.js", async (importOriginal) => { describe("subagent announce formatting", () => { beforeEach(() => { - agentSpy.mockClear(); - sendSpy.mockClear(); - sessionsDeleteSpy.mockClear(); + agentSpy + .mockReset() + .mockImplementation(async (_req: AgentCallRequest) => ({ runId: "run-main", status: "ok" })); + sendSpy + .mockReset() + .mockImplementation(async (_req: AgentCallRequest) => ({ runId: "send-main", status: "ok" })); + sessionsDeleteSpy.mockReset().mockImplementation((_req: AgentCallRequest) => undefined); embeddedRunMock.isEmbeddedPiRunActive.mockReset().mockReturnValue(false); embeddedRunMock.isEmbeddedPiRunStreaming.mockReset().mockReturnValue(false); embeddedRunMock.queueEmbeddedPiMessage.mockReset().mockReturnValue(false); @@ -124,9 +156,14 @@ describe("subagent announce formatting", () => { subagentRegistryMock.isSubagentSessionRunActive.mockReset().mockReturnValue(true); subagentRegistryMock.countActiveDescendantRuns.mockReset().mockReturnValue(0); subagentRegistryMock.resolveRequesterForChildSession.mockReset().mockReturnValue(null); + hasSubagentDeliveryTargetHook = false; + hookRunnerMock.hasHooks.mockClear(); + hookRunnerMock.runSubagentDeliveryTarget.mockClear(); + subagentDeliveryTargetHookMock.mockReset().mockResolvedValue(undefined); readLatestAssistantReplyMock.mockReset().mockResolvedValue("raw subagent reply"); chatHistoryMock.mockReset().mockResolvedValue({ messages: [] }); sessionStore = {}; + sessionBindingServiceTesting.resetSessionBindingAdaptersForTests(); configOverride = { session: { mainKey: "main", @@ -328,6 +365,7 @@ describe("subagent announce formatting", () => { chatHistoryMock.mockResolvedValueOnce({ messages: [{ role: "assistant", content: [{ type: "text", text: "final answer: 2" }] }], }); + readLatestAssistantReplyMock.mockResolvedValue(""); const didAnnounce = await runSubagentAnnounceFlow({ childSessionKey: "agent:main:subagent:test", @@ -353,6 +391,283 @@ describe("subagent announce formatting", () => { expect(msg).not.toContain("Convert the result above into your normal assistant voice"); }); + it("keeps completion-mode delivery coordinated when sibling runs are still active", async () => { + const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); + sessionStore = { + "agent:main:subagent:test": { + sessionId: "child-session-coordinated", + }, + "agent:main:main": { + sessionId: "requester-session-coordinated", + }, + }; + chatHistoryMock.mockResolvedValueOnce({ + messages: [{ role: "assistant", content: [{ type: "text", text: "final answer: 2" }] }], + }); + subagentRegistryMock.countActiveDescendantRuns.mockImplementation((sessionKey: string) => + sessionKey === "agent:main:main" ? 1 : 0, + ); + + const didAnnounce = await runSubagentAnnounceFlow({ + childSessionKey: "agent:main:subagent:test", + childRunId: "run-direct-coordinated", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + requesterOrigin: { channel: "discord", to: "channel:12345", accountId: "acct-1" }, + ...defaultOutcomeAnnounce, + expectsCompletionMessage: true, + }); + + expect(didAnnounce).toBe(true); + expect(sendSpy).not.toHaveBeenCalled(); + expect(agentSpy).toHaveBeenCalledTimes(1); + const call = agentSpy.mock.calls[0]?.[0] as { params?: Record }; + const rawMessage = call?.params?.message; + const msg = typeof rawMessage === "string" ? rawMessage : ""; + expect(call?.params?.channel).toBe("discord"); + expect(call?.params?.to).toBe("channel:12345"); + expect(msg).toContain("There are still 1 active subagent run for this session."); + expect(msg).toContain( + "If they are part of the same workflow, wait for the remaining results before sending a user update.", + ); + }); + + it("keeps session-mode completion delivery on the bound destination when sibling runs are active", async () => { + const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); + sessionStore = { + "agent:main:subagent:test": { + sessionId: "child-session-bound", + }, + "agent:main:main": { + sessionId: "requester-session-bound", + }, + }; + chatHistoryMock.mockResolvedValueOnce({ + messages: [{ role: "assistant", content: [{ type: "text", text: "bound answer: 2" }] }], + }); + subagentRegistryMock.countActiveDescendantRuns.mockImplementation((sessionKey: string) => + sessionKey === "agent:main:main" ? 1 : 0, + ); + registerSessionBindingAdapter({ + channel: "discord", + accountId: "acct-1", + listBySession: (targetSessionKey: string) => + targetSessionKey === "agent:main:subagent:test" + ? [ + { + bindingId: "discord:acct-1:thread-bound-1", + targetSessionKey, + targetKind: "subagent", + conversation: { + channel: "discord", + accountId: "acct-1", + conversationId: "thread-bound-1", + parentConversationId: "parent-main", + }, + status: "active", + boundAt: Date.now(), + }, + ] + : [], + resolveByConversation: () => null, + }); + + const didAnnounce = await runSubagentAnnounceFlow({ + childSessionKey: "agent:main:subagent:test", + childRunId: "run-session-bound-direct", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + requesterOrigin: { channel: "discord", to: "channel:12345", accountId: "acct-1" }, + ...defaultOutcomeAnnounce, + expectsCompletionMessage: true, + spawnMode: "session", + }); + + expect(didAnnounce).toBe(true); + expect(sendSpy).toHaveBeenCalledTimes(1); + expect(agentSpy).not.toHaveBeenCalled(); + const call = sendSpy.mock.calls[0]?.[0] as { params?: Record }; + expect(call?.params?.channel).toBe("discord"); + expect(call?.params?.to).toBe("channel:thread-bound-1"); + }); + + it("does not duplicate to main channel when two active bound sessions complete from the same requester channel", async () => { + const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); + sessionStore = { + "agent:main:subagent:child-a": { + sessionId: "child-session-a", + }, + "agent:main:subagent:child-b": { + sessionId: "child-session-b", + }, + "agent:main:main": { + sessionId: "requester-session-main", + }, + }; + + // Simulate active sibling runs so non-bound paths would normally coordinate via agent(). + subagentRegistryMock.countActiveDescendantRuns.mockImplementation((sessionKey: string) => + sessionKey === "agent:main:main" ? 2 : 0, + ); + registerSessionBindingAdapter({ + channel: "discord", + accountId: "acct-1", + listBySession: (targetSessionKey: string) => { + if (targetSessionKey === "agent:main:subagent:child-a") { + return [ + { + bindingId: "discord:acct-1:thread-child-a", + targetSessionKey, + targetKind: "subagent", + conversation: { + channel: "discord", + accountId: "acct-1", + conversationId: "thread-child-a", + parentConversationId: "main-parent-channel", + }, + status: "active", + boundAt: Date.now(), + }, + ]; + } + if (targetSessionKey === "agent:main:subagent:child-b") { + return [ + { + bindingId: "discord:acct-1:thread-child-b", + targetSessionKey, + targetKind: "subagent", + conversation: { + channel: "discord", + accountId: "acct-1", + conversationId: "thread-child-b", + parentConversationId: "main-parent-channel", + }, + status: "active", + boundAt: Date.now(), + }, + ]; + } + return []; + }, + resolveByConversation: () => null, + }); + + await Promise.all([ + runSubagentAnnounceFlow({ + childSessionKey: "agent:main:subagent:child-a", + childRunId: "run-child-a", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + requesterOrigin: { + channel: "discord", + to: "channel:main-parent-channel", + accountId: "acct-1", + }, + ...defaultOutcomeAnnounce, + expectsCompletionMessage: true, + spawnMode: "session", + }), + runSubagentAnnounceFlow({ + childSessionKey: "agent:main:subagent:child-b", + childRunId: "run-child-b", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + requesterOrigin: { + channel: "discord", + to: "channel:main-parent-channel", + accountId: "acct-1", + }, + ...defaultOutcomeAnnounce, + expectsCompletionMessage: true, + spawnMode: "session", + }), + ]); + + await expect.poll(() => sendSpy.mock.calls.length).toBe(2); + expect(agentSpy).not.toHaveBeenCalled(); + + const directTargets = sendSpy.mock.calls.map( + (call) => (call?.[0] as { params?: { to?: string } })?.params?.to, + ); + expect(directTargets).toEqual( + expect.arrayContaining(["channel:thread-child-a", "channel:thread-child-b"]), + ); + expect(directTargets).not.toContain("channel:main-parent-channel"); + }); + + it("uses failure header for completion direct-send when subagent outcome is error", async () => { + const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); + sessionStore = { + "agent:main:subagent:test": { + sessionId: "child-session-direct-error", + }, + "agent:main:main": { + sessionId: "requester-session-error", + }, + }; + chatHistoryMock.mockResolvedValueOnce({ + messages: [{ role: "assistant", content: [{ type: "text", text: "boom details" }] }], + }); + readLatestAssistantReplyMock.mockResolvedValue(""); + + const didAnnounce = await runSubagentAnnounceFlow({ + childSessionKey: "agent:main:subagent:test", + childRunId: "run-direct-completion-error", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + requesterOrigin: { channel: "discord", to: "channel:12345", accountId: "acct-1" }, + ...defaultOutcomeAnnounce, + outcome: { status: "error", error: "boom" }, + expectsCompletionMessage: true, + spawnMode: "session", + }); + + expect(didAnnounce).toBe(true); + expect(sendSpy).toHaveBeenCalledTimes(1); + const call = sendSpy.mock.calls[0]?.[0] as { params?: Record }; + const rawMessage = call?.params?.message; + const msg = typeof rawMessage === "string" ? rawMessage : ""; + expect(msg).toContain("❌ Subagent main failed this task (session remains active)"); + expect(msg).toContain("boom details"); + expect(msg).not.toContain("✅ Subagent main"); + }); + + it("uses timeout header for completion direct-send when subagent outcome timed out", async () => { + const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); + sessionStore = { + "agent:main:subagent:test": { + sessionId: "child-session-direct-timeout", + }, + "agent:main:main": { + sessionId: "requester-session-timeout", + }, + }; + chatHistoryMock.mockResolvedValueOnce({ + messages: [{ role: "assistant", content: [{ type: "text", text: "partial output" }] }], + }); + readLatestAssistantReplyMock.mockResolvedValue(""); + + const didAnnounce = await runSubagentAnnounceFlow({ + childSessionKey: "agent:main:subagent:test", + childRunId: "run-direct-completion-timeout", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + requesterOrigin: { channel: "discord", to: "channel:12345", accountId: "acct-1" }, + ...defaultOutcomeAnnounce, + outcome: { status: "timeout" }, + expectsCompletionMessage: true, + }); + + expect(didAnnounce).toBe(true); + expect(sendSpy).toHaveBeenCalledTimes(1); + const call = sendSpy.mock.calls[0]?.[0] as { params?: Record }; + const rawMessage = call?.params?.message; + const msg = typeof rawMessage === "string" ? rawMessage : ""; + expect(msg).toContain("⏱️ Subagent main timed out"); + expect(msg).toContain("partial output"); + expect(msg).not.toContain("✅ Subagent main finished"); + }); + it("ignores stale session thread hints for manual completion direct-send", async () => { const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); sessionStore = { @@ -427,6 +742,197 @@ describe("subagent announce formatting", () => { expect(call?.params?.threadId).toBe("99"); }); + it("uses hook-provided thread target for completion direct-send", async () => { + const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); + hasSubagentDeliveryTargetHook = true; + subagentDeliveryTargetHookMock.mockResolvedValueOnce({ + origin: { + channel: "discord", + accountId: "acct-1", + to: "channel:777", + threadId: "777", + }, + }); + + const didAnnounce = await runSubagentAnnounceFlow({ + childSessionKey: "agent:main:subagent:test", + childRunId: "run-direct-thread-bound", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + requesterOrigin: { + channel: "discord", + to: "channel:12345", + accountId: "acct-1", + threadId: "777", + }, + ...defaultOutcomeAnnounce, + expectsCompletionMessage: true, + spawnMode: "session", + }); + + expect(didAnnounce).toBe(true); + expect(subagentDeliveryTargetHookMock).toHaveBeenCalledWith( + { + childSessionKey: "agent:main:subagent:test", + requesterSessionKey: "agent:main:main", + requesterOrigin: { + channel: "discord", + to: "channel:12345", + accountId: "acct-1", + threadId: "777", + }, + childRunId: "run-direct-thread-bound", + spawnMode: "session", + expectsCompletionMessage: true, + }, + { + runId: "run-direct-thread-bound", + childSessionKey: "agent:main:subagent:test", + requesterSessionKey: "agent:main:main", + }, + ); + expect(sendSpy).toHaveBeenCalledTimes(1); + const call = sendSpy.mock.calls[0]?.[0] as { params?: Record }; + expect(call?.params?.channel).toBe("discord"); + expect(call?.params?.to).toBe("channel:777"); + expect(call?.params?.threadId).toBe("777"); + const message = typeof call?.params?.message === "string" ? call.params.message : ""; + expect(message).toContain("completed this task (session remains active)"); + expect(message).not.toContain("finished"); + }); + + it("uses hook-provided thread target when requester origin has no threadId", async () => { + const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); + hasSubagentDeliveryTargetHook = true; + subagentDeliveryTargetHookMock.mockResolvedValueOnce({ + origin: { + channel: "discord", + accountId: "acct-1", + to: "channel:777", + threadId: "777", + }, + }); + + const didAnnounce = await runSubagentAnnounceFlow({ + childSessionKey: "agent:main:subagent:test", + childRunId: "run-direct-thread-bound-single", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + requesterOrigin: { + channel: "discord", + to: "channel:12345", + accountId: "acct-1", + }, + ...defaultOutcomeAnnounce, + expectsCompletionMessage: true, + spawnMode: "session", + }); + + expect(didAnnounce).toBe(true); + expect(sendSpy).toHaveBeenCalledTimes(1); + const call = sendSpy.mock.calls[0]?.[0] as { params?: Record }; + expect(call?.params?.channel).toBe("discord"); + expect(call?.params?.to).toBe("channel:777"); + expect(call?.params?.threadId).toBe("777"); + }); + + it("keeps requester origin when delivery-target hook returns no override", async () => { + const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); + hasSubagentDeliveryTargetHook = true; + subagentDeliveryTargetHookMock.mockResolvedValueOnce(undefined); + + const didAnnounce = await runSubagentAnnounceFlow({ + childSessionKey: "agent:main:subagent:test", + childRunId: "run-direct-thread-persisted", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + requesterOrigin: { + channel: "discord", + to: "channel:12345", + accountId: "acct-1", + }, + ...defaultOutcomeAnnounce, + expectsCompletionMessage: true, + spawnMode: "session", + }); + + expect(didAnnounce).toBe(true); + expect(sendSpy).toHaveBeenCalledTimes(1); + const call = sendSpy.mock.calls[0]?.[0] as { params?: Record }; + expect(call?.params?.channel).toBe("discord"); + expect(call?.params?.to).toBe("channel:12345"); + expect(call?.params?.threadId).toBeUndefined(); + }); + + it("keeps requester origin when delivery-target hook returns non-deliverable channel", async () => { + const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); + hasSubagentDeliveryTargetHook = true; + subagentDeliveryTargetHookMock.mockResolvedValueOnce({ + origin: { + channel: "webchat", + to: "conversation:123", + }, + }); + + const didAnnounce = await runSubagentAnnounceFlow({ + childSessionKey: "agent:main:subagent:test", + childRunId: "run-direct-thread-multi-no-origin", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + requesterOrigin: { + channel: "discord", + to: "channel:12345", + accountId: "acct-1", + }, + ...defaultOutcomeAnnounce, + expectsCompletionMessage: true, + spawnMode: "session", + }); + + expect(didAnnounce).toBe(true); + expect(sendSpy).toHaveBeenCalledTimes(1); + const call = sendSpy.mock.calls[0]?.[0] as { params?: Record }; + expect(call?.params?.channel).toBe("discord"); + expect(call?.params?.to).toBe("channel:12345"); + expect(call?.params?.threadId).toBeUndefined(); + }); + + it("uses hook-provided thread target when requester threadId does not match", async () => { + const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); + hasSubagentDeliveryTargetHook = true; + subagentDeliveryTargetHookMock.mockResolvedValueOnce({ + origin: { + channel: "discord", + accountId: "acct-1", + to: "channel:777", + threadId: "777", + }, + }); + + const didAnnounce = await runSubagentAnnounceFlow({ + childSessionKey: "agent:main:subagent:test", + childRunId: "run-direct-thread-no-match", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + requesterOrigin: { + channel: "discord", + to: "channel:12345", + accountId: "acct-1", + threadId: "999", + }, + ...defaultOutcomeAnnounce, + expectsCompletionMessage: true, + spawnMode: "session", + }); + + expect(didAnnounce).toBe(true); + expect(sendSpy).toHaveBeenCalledTimes(1); + const call = sendSpy.mock.calls[0]?.[0] as { params?: Record }; + expect(call?.params?.channel).toBe("discord"); + expect(call?.params?.to).toBe("channel:777"); + expect(call?.params?.threadId).toBe("777"); + }); + it("steers announcements into an active run when queue mode is steer", async () => { const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); embeddedRunMock.isEmbeddedPiRunActive.mockReturnValue(true); @@ -623,13 +1129,14 @@ describe("subagent announce formatting", () => { }, ], }); - readLatestAssistantReplyMock.mockResolvedValue("assistant ignored fallback"); + readLatestAssistantReplyMock.mockResolvedValue(""); const didAnnounce = await runSubagentAnnounceFlow({ childSessionKey: "agent:main:subagent:worker", childRunId: "run-completion-assistant-output", requesterSessionKey: "agent:main:main", requesterDisplayKey: "main", + requesterOrigin: { channel: "discord", to: "channel:12345", accountId: "acct-1" }, expectsCompletionMessage: true, ...defaultOutcomeAnnounce, }); @@ -663,6 +1170,7 @@ describe("subagent announce formatting", () => { childRunId: "run-completion-tool-output", requesterSessionKey: "agent:main:main", requesterDisplayKey: "main", + requesterOrigin: { channel: "discord", to: "channel:12345", accountId: "acct-1" }, expectsCompletionMessage: true, ...defaultOutcomeAnnounce, }); @@ -674,6 +1182,36 @@ describe("subagent announce formatting", () => { expect(msg).toContain("tool output only"); }); + it("ignores user text when deriving fallback completion output", async () => { + const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); + chatHistoryMock.mockResolvedValueOnce({ + messages: [ + { + role: "user", + content: [{ type: "text", text: "user prompt should not be announced" }], + }, + ], + }); + readLatestAssistantReplyMock.mockResolvedValue(""); + + const didAnnounce = await runSubagentAnnounceFlow({ + childSessionKey: "agent:main:subagent:worker", + childRunId: "run-completion-ignore-user", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + requesterOrigin: { channel: "discord", to: "channel:12345", accountId: "acct-1" }, + expectsCompletionMessage: true, + ...defaultOutcomeAnnounce, + }); + + expect(didAnnounce).toBe(true); + await expect.poll(() => sendSpy.mock.calls.length).toBe(1); + const call = sendSpy.mock.calls[0]?.[0] as { params?: { message?: string } }; + const msg = call?.params?.message as string; + expect(msg).toContain("✅ Subagent main finished"); + expect(msg).not.toContain("user prompt should not be announced"); + }); + it("queues announce delivery back into requester subagent session", async () => { const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); embeddedRunMock.isEmbeddedPiRunActive.mockReturnValue(true); @@ -856,6 +1394,34 @@ describe("subagent announce formatting", () => { expect(call?.params?.to).toBeUndefined(); }); + it("keeps completion-mode announce internal for nested requester subagent sessions", async () => { + const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); + embeddedRunMock.isEmbeddedPiRunActive.mockReturnValue(false); + embeddedRunMock.isEmbeddedPiRunStreaming.mockReturnValue(false); + + const didAnnounce = await runSubagentAnnounceFlow({ + childSessionKey: "agent:main:subagent:orchestrator:subagent:worker", + childRunId: "run-worker-nested-completion", + requesterSessionKey: "agent:main:subagent:orchestrator", + requesterOrigin: { channel: "whatsapp", accountId: "acct-123", to: "+1555" }, + requesterDisplayKey: "agent:main:subagent:orchestrator", + expectsCompletionMessage: true, + ...defaultOutcomeAnnounce, + }); + + expect(didAnnounce).toBe(true); + expect(sendSpy).not.toHaveBeenCalled(); + const call = agentSpy.mock.calls[0]?.[0] as { params?: Record }; + expect(call?.params?.sessionKey).toBe("agent:main:subagent:orchestrator"); + expect(call?.params?.deliver).toBe(false); + expect(call?.params?.channel).toBeUndefined(); + expect(call?.params?.to).toBeUndefined(); + const message = typeof call?.params?.message === "string" ? call.params.message : ""; + expect(message).toContain( + "Convert this completion into a concise internal orchestration update for your parent agent", + ); + }); + it("retries reading subagent output when early lifecycle completion had no text", async () => { const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); embeddedRunMock.isEmbeddedPiRunActive.mockReturnValueOnce(true).mockReturnValue(false); @@ -933,6 +1499,57 @@ describe("subagent announce formatting", () => { expect(agentSpy).not.toHaveBeenCalled(); }); + it("defers completion-mode announce while the finished run still has active descendants", async () => { + const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); + subagentRegistryMock.countActiveDescendantRuns.mockImplementation((sessionKey: string) => + sessionKey === "agent:main:subagent:parent" ? 1 : 0, + ); + + const didAnnounce = await runSubagentAnnounceFlow({ + childSessionKey: "agent:main:subagent:parent", + childRunId: "run-parent-completion", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + expectsCompletionMessage: true, + ...defaultOutcomeAnnounce, + }); + + expect(didAnnounce).toBe(false); + expect(sendSpy).not.toHaveBeenCalled(); + expect(agentSpy).not.toHaveBeenCalled(); + }); + + it("waits for updated synthesized output before announcing nested subagent completion", async () => { + const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); + let historyReads = 0; + chatHistoryMock.mockImplementation(async () => { + historyReads += 1; + if (historyReads < 3) { + return { + messages: [{ role: "assistant", content: "Waiting for child output..." }], + }; + } + return { + messages: [{ role: "assistant", content: "Final synthesized answer." }], + }; + }); + readLatestAssistantReplyMock.mockResolvedValue(undefined); + + const didAnnounce = await runSubagentAnnounceFlow({ + childSessionKey: "agent:main:subagent:parent", + childRunId: "run-parent-synth", + requesterSessionKey: "agent:main:subagent:orchestrator", + requesterDisplayKey: "agent:main:subagent:orchestrator", + ...defaultOutcomeAnnounce, + }); + + expect(didAnnounce).toBe(true); + const call = agentSpy.mock.calls[0]?.[0] as { params?: { message?: string } }; + const msg = call?.params?.message ?? ""; + expect(msg).toContain("Final synthesized answer."); + expect(msg).not.toContain("Waiting for child output..."); + }); + it("bubbles child announce to parent requester when requester subagent already ended", async () => { const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); subagentRegistryMock.isSubagentSessionRunActive.mockReturnValue(false); @@ -1013,6 +1630,35 @@ describe("subagent announce formatting", () => { expect(agentSpy).not.toHaveBeenCalled(); }); + it("defers completion-mode announce when child run is still active after settle timeout", async () => { + const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); + embeddedRunMock.isEmbeddedPiRunActive.mockReturnValue(true); + embeddedRunMock.waitForEmbeddedPiRunEnd.mockResolvedValue(false); + sessionStore = { + "agent:main:subagent:test": { + sessionId: "child-session-active", + }, + }; + + const didAnnounce = await runSubagentAnnounceFlow({ + childSessionKey: "agent:main:subagent:test", + childRunId: "run-child-active-completion", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + task: "completion-context-stress-test", + timeoutMs: 1000, + cleanup: "keep", + waitForCompletion: false, + startedAt: 10, + endedAt: 20, + outcome: { status: "ok" }, + expectsCompletionMessage: true, + }); + + expect(didAnnounce).toBe(false); + expect(agentSpy).not.toHaveBeenCalled(); + }); + it("prefers requesterOrigin channel over stale session lastChannel in queued announce", async () => { const { runSubagentAnnounceFlow } = await import("./subagent-announce.js"); embeddedRunMock.isEmbeddedPiRunActive.mockReturnValue(true); @@ -1031,7 +1677,7 @@ describe("subagent announce formatting", () => { childSessionKey: "agent:main:subagent:test", childRunId: "run-stale-channel", requesterSessionKey: "main", - requesterOrigin: { channel: "bluebubbles", to: "bluebubbles:chat_guid:123" }, + requesterOrigin: { channel: "telegram", to: "telegram:123" }, requesterDisplayKey: "main", ...defaultOutcomeAnnounce, }); @@ -1041,8 +1687,8 @@ describe("subagent announce formatting", () => { const call = agentSpy.mock.calls[0]?.[0] as { params?: Record }; // The channel should match requesterOrigin, NOT the stale session entry. - expect(call?.params?.channel).toBe("bluebubbles"); - expect(call?.params?.to).toBe("bluebubbles:chat_guid:123"); + expect(call?.params?.channel).toBe("telegram"); + expect(call?.params?.to).toBe("telegram:123"); }); it("routes to parent subagent when parent run ended but session still exists (#18037)", async () => { diff --git a/src/agents/subagent-announce.ts b/src/agents/subagent-announce.ts index 389ee1149..f38a79cf9 100644 --- a/src/agents/subagent-announce.ts +++ b/src/agents/subagent-announce.ts @@ -1,5 +1,6 @@ import { resolveQueueSettings } from "../auto-reply/reply/queue.js"; import { SILENT_REPLY_TOKEN } from "../auto-reply/tokens.js"; +import { DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH } from "../config/agent-limits.js"; import { loadConfig } from "../config/config.js"; import { loadSessionStore, @@ -8,7 +9,10 @@ import { resolveStorePath, } from "../config/sessions.js"; import { callGateway } from "../gateway/call.js"; -import { normalizeMainKey } from "../routing/session-key.js"; +import { createBoundDeliveryRouter } from "../infra/outbound/bound-delivery-router.js"; +import type { ConversationRef } from "../infra/outbound/session-binding-service.js"; +import { getGlobalHookRunner } from "../plugins/hook-runner-global.js"; +import { normalizeAccountId, normalizeMainKey } from "../routing/session-key.js"; import { defaultRuntime } from "../runtime.js"; import { extractTextFromChatContent } from "../shared/chat-content.js"; import { @@ -30,6 +34,8 @@ import { } from "./pi-embedded.js"; import { type AnnounceQueueItem, enqueueAnnounce } from "./subagent-announce-queue.js"; import { getSubagentDepthFromSessionStore } from "./subagent-depth.js"; +import type { SpawnSubagentMode } from "./subagent-spawn.js"; +import { readLatestAssistantReply } from "./tools/agent-step.js"; import { sanitizeTextContent, extractAssistantText } from "./tools/sessions-helpers.js"; type ToolResultMessage = { @@ -48,10 +54,26 @@ type SubagentAnnounceDeliveryResult = { function buildCompletionDeliveryMessage(params: { findings: string; subagentName: string; + spawnMode?: SpawnSubagentMode; + outcome?: SubagentRunOutcome; }): string { const findingsText = params.findings.trim(); const hasFindings = findingsText.length > 0 && findingsText !== "(no output)"; - const header = `✅ Subagent ${params.subagentName} finished`; + const header = (() => { + if (params.outcome?.status === "error") { + return params.spawnMode === "session" + ? `❌ Subagent ${params.subagentName} failed this task (session remains active)` + : `❌ Subagent ${params.subagentName} failed`; + } + if (params.outcome?.status === "timeout") { + return params.spawnMode === "session" + ? `⏱️ Subagent ${params.subagentName} timed out on this task (session remains active)` + : `⏱️ Subagent ${params.subagentName} timed out`; + } + return params.spawnMode === "session" + ? `✅ Subagent ${params.subagentName} completed this task (session remains active)` + : `✅ Subagent ${params.subagentName} finished`; + })(); if (!hasFindings) { return header; } @@ -153,16 +175,29 @@ function extractSubagentOutputText(message: unknown): string { if (role === "toolResult" || role === "tool") { return extractToolResultText((message as ToolResultMessage).content); } - if (typeof content === "string") { - return sanitizeTextContent(content); - } - if (Array.isArray(content)) { - return extractInlineTextContent(content); + if (role == null) { + if (typeof content === "string") { + return sanitizeTextContent(content); + } + if (Array.isArray(content)) { + return extractInlineTextContent(content); + } } return ""; } async function readLatestSubagentOutput(sessionKey: string): Promise { + try { + const latestAssistant = await readLatestAssistantReply({ + sessionKey, + limit: 50, + }); + if (latestAssistant?.trim()) { + return latestAssistant; + } + } catch { + // Best-effort: fall back to richer history parsing below. + } const history = await callGateway<{ messages?: Array }>({ method: "chat.history", params: { sessionKey, limit: 50 }, @@ -195,6 +230,31 @@ async function readLatestSubagentOutputWithRetry(params: { return result; } +async function waitForSubagentOutputChange(params: { + sessionKey: string; + baselineReply: string; + maxWaitMs: number; +}): Promise { + const baseline = params.baselineReply.trim(); + if (!baseline) { + return params.baselineReply; + } + const RETRY_INTERVAL_MS = 100; + const deadline = Date.now() + Math.max(0, Math.min(params.maxWaitMs, 5_000)); + let latest = params.baselineReply; + while (Date.now() < deadline) { + const next = await readLatestSubagentOutput(params.sessionKey); + if (next?.trim()) { + latest = next; + if (next.trim() !== baseline) { + return next; + } + } + await new Promise((resolve) => setTimeout(resolve, RETRY_INTERVAL_MS)); + } + return latest; +} + function formatDurationShort(valueMs?: number) { if (!valueMs || !Number.isFinite(valueMs) || valueMs <= 0) { return "n/a"; @@ -287,7 +347,117 @@ function resolveAnnounceOrigin( // requesterOrigin (captured at spawn time) reflects the channel the user is // actually on and must take priority over the session entry, which may carry // stale lastChannel / lastTo values from a previous channel interaction. - return mergeDeliveryContext(normalizedRequester, normalizedEntry); + const entryForMerge = + normalizedRequester?.to && + normalizedRequester.threadId == null && + normalizedEntry?.threadId != null + ? (() => { + const { threadId: _ignore, ...rest } = normalizedEntry; + return rest; + })() + : normalizedEntry; + return mergeDeliveryContext(normalizedRequester, entryForMerge); +} + +async function resolveSubagentCompletionOrigin(params: { + childSessionKey: string; + requesterSessionKey: string; + requesterOrigin?: DeliveryContext; + childRunId?: string; + spawnMode?: SpawnSubagentMode; + expectsCompletionMessage: boolean; +}): Promise<{ + origin?: DeliveryContext; + routeMode: "bound" | "fallback" | "hook"; +}> { + const requesterOrigin = normalizeDeliveryContext(params.requesterOrigin); + const requesterConversation = (() => { + const channel = requesterOrigin?.channel?.trim().toLowerCase(); + const to = requesterOrigin?.to?.trim(); + const accountId = normalizeAccountId(requesterOrigin?.accountId); + const threadId = + requesterOrigin?.threadId != null && requesterOrigin.threadId !== "" + ? String(requesterOrigin.threadId).trim() + : undefined; + const conversationId = + threadId || (to?.startsWith("channel:") ? to.slice("channel:".length) : ""); + if (!channel || !conversationId) { + return undefined; + } + const ref: ConversationRef = { + channel, + accountId, + conversationId, + }; + return ref; + })(); + const route = createBoundDeliveryRouter().resolveDestination({ + eventKind: "task_completion", + targetSessionKey: params.childSessionKey, + requester: requesterConversation, + failClosed: false, + }); + if (route.mode === "bound" && route.binding) { + const boundOrigin: DeliveryContext = { + channel: route.binding.conversation.channel, + accountId: route.binding.conversation.accountId, + to: `channel:${route.binding.conversation.conversationId}`, + threadId: route.binding.conversation.conversationId, + }; + return { + // Bound target is authoritative; requester hints fill only missing fields. + origin: mergeDeliveryContext(boundOrigin, requesterOrigin), + routeMode: "bound", + }; + } + + const hookRunner = getGlobalHookRunner(); + if (!hookRunner?.hasHooks("subagent_delivery_target")) { + return { + origin: requesterOrigin, + routeMode: "fallback", + }; + } + try { + const result = await hookRunner.runSubagentDeliveryTarget( + { + childSessionKey: params.childSessionKey, + requesterSessionKey: params.requesterSessionKey, + requesterOrigin, + childRunId: params.childRunId, + spawnMode: params.spawnMode, + expectsCompletionMessage: params.expectsCompletionMessage, + }, + { + runId: params.childRunId, + childSessionKey: params.childSessionKey, + requesterSessionKey: params.requesterSessionKey, + }, + ); + const hookOrigin = normalizeDeliveryContext(result?.origin); + if (!hookOrigin) { + return { + origin: requesterOrigin, + routeMode: "fallback", + }; + } + if (hookOrigin.channel && !isDeliverableMessageChannel(hookOrigin.channel)) { + return { + origin: requesterOrigin, + routeMode: "fallback", + }; + } + // Hook-provided origin should override requester defaults when present. + return { + origin: mergeDeliveryContext(hookOrigin, requesterOrigin), + routeMode: "hook", + }; + } catch { + return { + origin: requesterOrigin, + routeMode: "fallback", + }; + } } async function sendAnnounce(item: AnnounceQueueItem) { @@ -434,6 +604,8 @@ async function sendSubagentAnnounceDirectly(params: { triggerMessage: string; completionMessage?: string; expectsCompletionMessage: boolean; + completionRouteMode?: "bound" | "fallback" | "hook"; + spawnMode?: SpawnSubagentMode; directIdempotencyKey: string; completionDirectOrigin?: DeliveryContext; directOrigin?: DeliveryContext; @@ -464,28 +636,52 @@ async function sendSubagentAnnounceDirectly(params: { hasCompletionDirectTarget && params.completionMessage?.trim() ) { - const completionThreadId = - completionDirectOrigin?.threadId != null && completionDirectOrigin.threadId !== "" - ? String(completionDirectOrigin.threadId) - : undefined; - await callGateway({ - method: "send", - params: { - channel: completionChannel, - to: completionTo, - accountId: completionDirectOrigin?.accountId, - threadId: completionThreadId, - sessionKey: canonicalRequesterSessionKey, - message: params.completionMessage, - idempotencyKey: params.directIdempotencyKey, - }, - timeoutMs: 15_000, - }); + const forceBoundSessionDirectDelivery = + params.spawnMode === "session" && + (params.completionRouteMode === "bound" || params.completionRouteMode === "hook"); + let shouldSendCompletionDirectly = true; + if (!forceBoundSessionDirectDelivery) { + let activeDescendantRuns = 0; + try { + const { countActiveDescendantRuns } = await import("./subagent-registry.js"); + activeDescendantRuns = Math.max( + 0, + countActiveDescendantRuns(canonicalRequesterSessionKey), + ); + } catch { + // Best-effort only; when unavailable keep historical direct-send behavior. + } + // Keep non-bound completion announcements coordinated via requester + // session routing while sibling/descendant runs are still active. + if (activeDescendantRuns > 0) { + shouldSendCompletionDirectly = false; + } + } - return { - delivered: true, - path: "direct", - }; + if (shouldSendCompletionDirectly) { + const completionThreadId = + completionDirectOrigin?.threadId != null && completionDirectOrigin.threadId !== "" + ? String(completionDirectOrigin.threadId) + : undefined; + await callGateway({ + method: "send", + params: { + channel: completionChannel, + to: completionTo, + accountId: completionDirectOrigin?.accountId, + threadId: completionThreadId, + sessionKey: canonicalRequesterSessionKey, + message: params.completionMessage, + idempotencyKey: params.directIdempotencyKey, + }, + timeoutMs: 15_000, + }); + + return { + delivered: true, + path: "direct", + }; + } } const directOrigin = normalizeDeliveryContext(params.directOrigin); @@ -534,6 +730,8 @@ async function deliverSubagentAnnouncement(params: { targetRequesterSessionKey: string; requesterIsSubagent: boolean; expectsCompletionMessage: boolean; + completionRouteMode?: "bound" | "fallback" | "hook"; + spawnMode?: SpawnSubagentMode; directIdempotencyKey: string; }): Promise { // Non-completion mode mirrors historical behavior: try queued/steered delivery first, @@ -560,6 +758,8 @@ async function deliverSubagentAnnouncement(params: { completionMessage: params.completionMessage, directIdempotencyKey: params.directIdempotencyKey, completionDirectOrigin: params.completionDirectOrigin, + completionRouteMode: params.completionRouteMode, + spawnMode: params.spawnMode, directOrigin: params.directOrigin, requesterIsSubagent: params.requesterIsSubagent, expectsCompletionMessage: params.expectsCompletionMessage, @@ -608,7 +808,10 @@ export function buildSubagentSystemPrompt(params: { ? params.task.replace(/\s+/g, " ").trim() : "{{TASK_DESCRIPTION}}"; const childDepth = typeof params.childDepth === "number" ? params.childDepth : 1; - const maxSpawnDepth = typeof params.maxSpawnDepth === "number" ? params.maxSpawnDepth : 1; + const maxSpawnDepth = + typeof params.maxSpawnDepth === "number" + ? params.maxSpawnDepth + : DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH; const canSpawn = childDepth < maxSpawnDepth; const parentLabel = childDepth >= 2 ? "parent orchestrator" : "main agent"; @@ -694,9 +897,6 @@ function buildAnnounceReplyInstruction(params: { announceType: SubagentAnnounceType; expectsCompletionMessage?: boolean; }): string { - if (params.expectsCompletionMessage) { - return `A completed ${params.announceType} is ready for user delivery. Convert the result above into your normal assistant voice and send that user-facing update now. Keep this internal context private (don't mention system/log/stats/session details or announce type).`; - } if (params.remainingActiveSubagentRuns > 0) { const activeRunsLabel = params.remainingActiveSubagentRuns === 1 ? "run" : "runs"; return `There are still ${params.remainingActiveSubagentRuns} active subagent ${activeRunsLabel} for this session. If they are part of the same workflow, wait for the remaining results before sending a user update. If they are unrelated, respond normally using only the result above.`; @@ -704,6 +904,9 @@ function buildAnnounceReplyInstruction(params: { if (params.requesterIsSubagent) { return `Convert this completion into a concise internal orchestration update for your parent agent in your own words. Keep this internal context private (don't mention system/log/stats/session details or announce type). If this result is duplicate or no update is needed, reply ONLY: ${SILENT_REPLY_TOKEN}.`; } + if (params.expectsCompletionMessage) { + return `A completed ${params.announceType} is ready for user delivery. Convert the result above into your normal assistant voice and send that user-facing update now. Keep this internal context private (don't mention system/log/stats/session details or announce type).`; + } return `A completed ${params.announceType} is ready for user delivery. Convert the result above into your normal assistant voice and send that user-facing update now. Keep this internal context private (don't mention system/log/stats/session details or announce type), and do not copy the system message verbatim. Reply ONLY: ${SILENT_REPLY_TOKEN} if this exact result was already delivered to the user in this same turn.`; } @@ -724,6 +927,7 @@ export async function runSubagentAnnounceFlow(params: { outcome?: SubagentRunOutcome; announceType?: SubagentAnnounceType; expectsCompletionMessage?: boolean; + spawnMode?: SpawnSubagentMode; }): Promise { let didAnnounce = false; const expectsCompletionMessage = params.expectsCompletionMessage === true; @@ -742,7 +946,7 @@ export async function runSubagentAnnounceFlow(params: { let outcome: SubagentRunOutcome | undefined = params.outcome; // Lifecycle "end" can arrive before auto-compaction retries finish. If the // subagent is still active, wait for the embedded run to fully settle. - if (!expectsCompletionMessage && childSessionId && isEmbeddedPiRunActive(childSessionId)) { + if (childSessionId && isEmbeddedPiRunActive(childSessionId)) { const settled = await waitForEmbeddedPiRunEnd(childSessionId, settleTimeoutMs); if (!settled && isEmbeddedPiRunActive(childSessionId)) { // The child run is still active (e.g., compaction retry still in progress). @@ -816,6 +1020,8 @@ export async function runSubagentAnnounceFlow(params: { outcome = { status: "unknown" }; } + let requesterDepth = getSubagentDepthFromSessionStore(targetRequesterSessionKey); + let activeChildDescendantRuns = 0; try { const { countActiveDescendantRuns } = await import("./subagent-registry.js"); @@ -823,13 +1029,21 @@ export async function runSubagentAnnounceFlow(params: { } catch { // Best-effort only; fall back to direct announce behavior when unavailable. } - if (!expectsCompletionMessage && activeChildDescendantRuns > 0) { + if (activeChildDescendantRuns > 0) { // The finished run still has active descendant subagents. Defer announcing // this run until descendants settle so we avoid posting in-progress updates. shouldDeleteChildSession = false; return false; } + if (requesterDepth >= 1 && reply?.trim()) { + reply = await waitForSubagentOutputChange({ + sessionKey: params.childSessionKey, + baselineReply: reply, + maxWaitMs: Math.max(250, Math.min(params.timeoutMs, 2_000)), + }); + } + // Build status label const statusLabel = outcome.status === "ok" @@ -849,8 +1063,7 @@ export async function runSubagentAnnounceFlow(params: { let completionMessage = ""; let triggerMessage = ""; - let requesterDepth = getSubagentDepthFromSessionStore(targetRequesterSessionKey); - let requesterIsSubagent = !expectsCompletionMessage && requesterDepth >= 1; + let requesterIsSubagent = requesterDepth >= 1; // If the requester subagent has already finished, bubble the announce to its // requester (typically main) so descendant completion is not silently lost. // BUT: only fallback if the parent SESSION is deleted, not just if the current @@ -913,6 +1126,8 @@ export async function runSubagentAnnounceFlow(params: { completionMessage = buildCompletionDeliveryMessage({ findings, subagentName, + spawnMode: params.spawnMode, + outcome, }); const internalSummaryMessage = [ `[System Message] [sessionId: ${announceSessionId}] A ${announceType} "${taskLabel}" just ${statusLabel}.`, @@ -935,6 +1150,21 @@ export async function runSubagentAnnounceFlow(params: { const { entry } = loadRequesterSessionEntry(targetRequesterSessionKey); directOrigin = resolveAnnounceOrigin(entry, targetRequesterOrigin); } + const completionResolution = + expectsCompletionMessage && !requesterIsSubagent + ? await resolveSubagentCompletionOrigin({ + childSessionKey: params.childSessionKey, + requesterSessionKey: targetRequesterSessionKey, + requesterOrigin: directOrigin, + childRunId: params.childRunId, + spawnMode: params.spawnMode, + expectsCompletionMessage, + }) + : { + origin: targetRequesterOrigin, + routeMode: "fallback" as const, + }; + const completionDirectOrigin = completionResolution.origin; // Use a deterministic idempotency key so the gateway dedup cache // catches duplicates if this announce is also queued by the gateway- // level message queue while the main session is busy (#17122). @@ -945,12 +1175,17 @@ export async function runSubagentAnnounceFlow(params: { triggerMessage, completionMessage, summaryLine: taskLabel, - requesterOrigin: targetRequesterOrigin, - completionDirectOrigin: targetRequesterOrigin, + requesterOrigin: + expectsCompletionMessage && !requesterIsSubagent + ? completionDirectOrigin + : targetRequesterOrigin, + completionDirectOrigin, directOrigin, targetRequesterSessionKey, requesterIsSubagent, expectsCompletionMessage: expectsCompletionMessage, + completionRouteMode: completionResolution.routeMode, + spawnMode: params.spawnMode, directIdempotencyKey, }); didAnnounce = delivery.delivered; @@ -979,7 +1214,11 @@ export async function runSubagentAnnounceFlow(params: { try { await callGateway({ method: "sessions.delete", - params: { key: params.childSessionKey, deleteTranscript: true }, + params: { + key: params.childSessionKey, + deleteTranscript: true, + emitLifecycleHooks: false, + }, timeoutMs: 10_000, }); } catch { diff --git a/src/agents/subagent-lifecycle-events.ts b/src/agents/subagent-lifecycle-events.ts new file mode 100644 index 000000000..ae4c4c2fa --- /dev/null +++ b/src/agents/subagent-lifecycle-events.ts @@ -0,0 +1,47 @@ +export const SUBAGENT_TARGET_KIND_SUBAGENT = "subagent" as const; +export const SUBAGENT_TARGET_KIND_ACP = "acp" as const; + +export type SubagentLifecycleTargetKind = + | typeof SUBAGENT_TARGET_KIND_SUBAGENT + | typeof SUBAGENT_TARGET_KIND_ACP; + +export const SUBAGENT_ENDED_REASON_COMPLETE = "subagent-complete" as const; +export const SUBAGENT_ENDED_REASON_ERROR = "subagent-error" as const; +export const SUBAGENT_ENDED_REASON_KILLED = "subagent-killed" as const; +export const SUBAGENT_ENDED_REASON_SESSION_RESET = "session-reset" as const; +export const SUBAGENT_ENDED_REASON_SESSION_DELETE = "session-delete" as const; + +export type SubagentLifecycleEndedReason = + | typeof SUBAGENT_ENDED_REASON_COMPLETE + | typeof SUBAGENT_ENDED_REASON_ERROR + | typeof SUBAGENT_ENDED_REASON_KILLED + | typeof SUBAGENT_ENDED_REASON_SESSION_RESET + | typeof SUBAGENT_ENDED_REASON_SESSION_DELETE; + +export type SubagentSessionLifecycleEndedReason = + | typeof SUBAGENT_ENDED_REASON_SESSION_RESET + | typeof SUBAGENT_ENDED_REASON_SESSION_DELETE; + +export const SUBAGENT_ENDED_OUTCOME_OK = "ok" as const; +export const SUBAGENT_ENDED_OUTCOME_ERROR = "error" as const; +export const SUBAGENT_ENDED_OUTCOME_TIMEOUT = "timeout" as const; +export const SUBAGENT_ENDED_OUTCOME_KILLED = "killed" as const; +export const SUBAGENT_ENDED_OUTCOME_RESET = "reset" as const; +export const SUBAGENT_ENDED_OUTCOME_DELETED = "deleted" as const; + +export type SubagentLifecycleEndedOutcome = + | typeof SUBAGENT_ENDED_OUTCOME_OK + | typeof SUBAGENT_ENDED_OUTCOME_ERROR + | typeof SUBAGENT_ENDED_OUTCOME_TIMEOUT + | typeof SUBAGENT_ENDED_OUTCOME_KILLED + | typeof SUBAGENT_ENDED_OUTCOME_RESET + | typeof SUBAGENT_ENDED_OUTCOME_DELETED; + +export function resolveSubagentSessionEndedOutcome( + reason: SubagentSessionLifecycleEndedReason, +): SubagentLifecycleEndedOutcome { + if (reason === SUBAGENT_ENDED_REASON_SESSION_RESET) { + return SUBAGENT_ENDED_OUTCOME_RESET; + } + return SUBAGENT_ENDED_OUTCOME_DELETED; +} diff --git a/src/agents/subagent-registry-cleanup.ts b/src/agents/subagent-registry-cleanup.ts new file mode 100644 index 000000000..4e3f8f833 --- /dev/null +++ b/src/agents/subagent-registry-cleanup.ts @@ -0,0 +1,67 @@ +import { + SUBAGENT_ENDED_REASON_COMPLETE, + type SubagentLifecycleEndedReason, +} from "./subagent-lifecycle-events.js"; +import type { SubagentRunRecord } from "./subagent-registry.types.js"; + +export type DeferredCleanupDecision = + | { + kind: "defer-descendants"; + delayMs: number; + } + | { + kind: "give-up"; + reason: "retry-limit" | "expiry"; + retryCount?: number; + } + | { + kind: "retry"; + retryCount: number; + resumeDelayMs?: number; + }; + +export function resolveCleanupCompletionReason( + entry: SubagentRunRecord, +): SubagentLifecycleEndedReason { + return entry.endedReason ?? SUBAGENT_ENDED_REASON_COMPLETE; +} + +function resolveEndedAgoMs(entry: SubagentRunRecord, now: number): number { + return typeof entry.endedAt === "number" ? now - entry.endedAt : 0; +} + +export function resolveDeferredCleanupDecision(params: { + entry: SubagentRunRecord; + now: number; + activeDescendantRuns: number; + announceExpiryMs: number; + maxAnnounceRetryCount: number; + deferDescendantDelayMs: number; + resolveAnnounceRetryDelayMs: (retryCount: number) => number; +}): DeferredCleanupDecision { + const endedAgo = resolveEndedAgoMs(params.entry, params.now); + if (params.entry.expectsCompletionMessage === true && params.activeDescendantRuns > 0) { + if (endedAgo > params.announceExpiryMs) { + return { kind: "give-up", reason: "expiry" }; + } + return { kind: "defer-descendants", delayMs: params.deferDescendantDelayMs }; + } + + const retryCount = (params.entry.announceRetryCount ?? 0) + 1; + if (retryCount >= params.maxAnnounceRetryCount || endedAgo > params.announceExpiryMs) { + return { + kind: "give-up", + reason: retryCount >= params.maxAnnounceRetryCount ? "retry-limit" : "expiry", + retryCount, + }; + } + + return { + kind: "retry", + retryCount, + resumeDelayMs: + params.entry.expectsCompletionMessage === true + ? params.resolveAnnounceRetryDelayMs(retryCount) + : undefined, + }; +} diff --git a/src/agents/subagent-registry-completion.test.ts b/src/agents/subagent-registry-completion.test.ts new file mode 100644 index 000000000..d885d99df --- /dev/null +++ b/src/agents/subagent-registry-completion.test.ts @@ -0,0 +1,79 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { SUBAGENT_ENDED_REASON_COMPLETE } from "./subagent-lifecycle-events.js"; +import type { SubagentRunRecord } from "./subagent-registry.types.js"; + +const lifecycleMocks = vi.hoisted(() => ({ + getGlobalHookRunner: vi.fn(), + runSubagentEnded: vi.fn(async () => {}), +})); + +vi.mock("../plugins/hook-runner-global.js", () => ({ + getGlobalHookRunner: () => lifecycleMocks.getGlobalHookRunner(), +})); + +import { emitSubagentEndedHookOnce } from "./subagent-registry-completion.js"; + +function createRunEntry(): SubagentRunRecord { + return { + runId: "run-1", + childSessionKey: "agent:main:subagent:child-1", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + task: "task", + cleanup: "keep", + createdAt: Date.now(), + }; +} + +describe("emitSubagentEndedHookOnce", () => { + beforeEach(() => { + lifecycleMocks.getGlobalHookRunner.mockReset(); + lifecycleMocks.runSubagentEnded.mockClear(); + }); + + it("records ended hook marker even when no subagent_ended hooks are registered", async () => { + lifecycleMocks.getGlobalHookRunner.mockReturnValue({ + hasHooks: () => false, + runSubagentEnded: lifecycleMocks.runSubagentEnded, + }); + + const entry = createRunEntry(); + const persist = vi.fn(); + const emitted = await emitSubagentEndedHookOnce({ + entry, + reason: SUBAGENT_ENDED_REASON_COMPLETE, + sendFarewell: true, + accountId: "acct-1", + inFlightRunIds: new Set(), + persist, + }); + + expect(emitted).toBe(true); + expect(lifecycleMocks.runSubagentEnded).not.toHaveBeenCalled(); + expect(typeof entry.endedHookEmittedAt).toBe("number"); + expect(persist).toHaveBeenCalledTimes(1); + }); + + it("runs subagent_ended hooks when available", async () => { + lifecycleMocks.getGlobalHookRunner.mockReturnValue({ + hasHooks: () => true, + runSubagentEnded: lifecycleMocks.runSubagentEnded, + }); + + const entry = createRunEntry(); + const persist = vi.fn(); + const emitted = await emitSubagentEndedHookOnce({ + entry, + reason: SUBAGENT_ENDED_REASON_COMPLETE, + sendFarewell: true, + accountId: "acct-1", + inFlightRunIds: new Set(), + persist, + }); + + expect(emitted).toBe(true); + expect(lifecycleMocks.runSubagentEnded).toHaveBeenCalledTimes(1); + expect(typeof entry.endedHookEmittedAt).toBe("number"); + expect(persist).toHaveBeenCalledTimes(1); + }); +}); diff --git a/src/agents/subagent-registry-completion.ts b/src/agents/subagent-registry-completion.ts new file mode 100644 index 000000000..fae14fc73 --- /dev/null +++ b/src/agents/subagent-registry-completion.ts @@ -0,0 +1,96 @@ +import { getGlobalHookRunner } from "../plugins/hook-runner-global.js"; +import type { SubagentRunOutcome } from "./subagent-announce.js"; +import { + SUBAGENT_ENDED_OUTCOME_ERROR, + SUBAGENT_ENDED_OUTCOME_OK, + SUBAGENT_ENDED_OUTCOME_TIMEOUT, + SUBAGENT_TARGET_KIND_SUBAGENT, + type SubagentLifecycleEndedOutcome, + type SubagentLifecycleEndedReason, +} from "./subagent-lifecycle-events.js"; +import type { SubagentRunRecord } from "./subagent-registry.types.js"; + +export function runOutcomesEqual( + a: SubagentRunOutcome | undefined, + b: SubagentRunOutcome | undefined, +): boolean { + if (!a && !b) { + return true; + } + if (!a || !b) { + return false; + } + if (a.status !== b.status) { + return false; + } + if (a.status === "error" && b.status === "error") { + return (a.error ?? "") === (b.error ?? ""); + } + return true; +} + +export function resolveLifecycleOutcomeFromRunOutcome( + outcome: SubagentRunOutcome | undefined, +): SubagentLifecycleEndedOutcome { + if (outcome?.status === "error") { + return SUBAGENT_ENDED_OUTCOME_ERROR; + } + if (outcome?.status === "timeout") { + return SUBAGENT_ENDED_OUTCOME_TIMEOUT; + } + return SUBAGENT_ENDED_OUTCOME_OK; +} + +export async function emitSubagentEndedHookOnce(params: { + entry: SubagentRunRecord; + reason: SubagentLifecycleEndedReason; + sendFarewell?: boolean; + accountId?: string; + outcome?: SubagentLifecycleEndedOutcome; + error?: string; + inFlightRunIds: Set; + persist: () => void; +}) { + const runId = params.entry.runId.trim(); + if (!runId) { + return false; + } + if (params.entry.endedHookEmittedAt) { + return false; + } + if (params.inFlightRunIds.has(runId)) { + return false; + } + + params.inFlightRunIds.add(runId); + try { + const hookRunner = getGlobalHookRunner(); + if (hookRunner?.hasHooks("subagent_ended")) { + await hookRunner.runSubagentEnded( + { + targetSessionKey: params.entry.childSessionKey, + targetKind: SUBAGENT_TARGET_KIND_SUBAGENT, + reason: params.reason, + sendFarewell: params.sendFarewell, + accountId: params.accountId, + runId: params.entry.runId, + endedAt: params.entry.endedAt, + outcome: params.outcome, + error: params.error, + }, + { + runId: params.entry.runId, + childSessionKey: params.entry.childSessionKey, + requesterSessionKey: params.entry.requesterSessionKey, + }, + ); + } + params.entry.endedHookEmittedAt = Date.now(); + params.persist(); + return true; + } catch { + return false; + } finally { + params.inFlightRunIds.delete(runId); + } +} diff --git a/src/agents/subagent-registry-queries.ts b/src/agents/subagent-registry-queries.ts new file mode 100644 index 000000000..21727e8f0 --- /dev/null +++ b/src/agents/subagent-registry-queries.ts @@ -0,0 +1,146 @@ +import type { DeliveryContext } from "../utils/delivery-context.js"; +import type { SubagentRunRecord } from "./subagent-registry.types.js"; + +export function findRunIdsByChildSessionKeyFromRuns( + runs: Map, + childSessionKey: string, +): string[] { + const key = childSessionKey.trim(); + if (!key) { + return []; + } + const runIds: string[] = []; + for (const [runId, entry] of runs.entries()) { + if (entry.childSessionKey === key) { + runIds.push(runId); + } + } + return runIds; +} + +export function listRunsForRequesterFromRuns( + runs: Map, + requesterSessionKey: string, +): SubagentRunRecord[] { + const key = requesterSessionKey.trim(); + if (!key) { + return []; + } + return [...runs.values()].filter((entry) => entry.requesterSessionKey === key); +} + +export function resolveRequesterForChildSessionFromRuns( + runs: Map, + childSessionKey: string, +): { + requesterSessionKey: string; + requesterOrigin?: DeliveryContext; +} | null { + const key = childSessionKey.trim(); + if (!key) { + return null; + } + let best: SubagentRunRecord | undefined; + for (const entry of runs.values()) { + if (entry.childSessionKey !== key) { + continue; + } + if (!best || entry.createdAt > best.createdAt) { + best = entry; + } + } + if (!best) { + return null; + } + return { + requesterSessionKey: best.requesterSessionKey, + requesterOrigin: best.requesterOrigin, + }; +} + +export function countActiveRunsForSessionFromRuns( + runs: Map, + requesterSessionKey: string, +): number { + const key = requesterSessionKey.trim(); + if (!key) { + return 0; + } + let count = 0; + for (const entry of runs.values()) { + if (entry.requesterSessionKey !== key) { + continue; + } + if (typeof entry.endedAt === "number") { + continue; + } + count += 1; + } + return count; +} + +export function countActiveDescendantRunsFromRuns( + runs: Map, + rootSessionKey: string, +): number { + const root = rootSessionKey.trim(); + if (!root) { + return 0; + } + const pending = [root]; + const visited = new Set([root]); + let count = 0; + while (pending.length > 0) { + const requester = pending.shift(); + if (!requester) { + continue; + } + for (const entry of runs.values()) { + if (entry.requesterSessionKey !== requester) { + continue; + } + if (typeof entry.endedAt !== "number") { + count += 1; + } + const childKey = entry.childSessionKey.trim(); + if (!childKey || visited.has(childKey)) { + continue; + } + visited.add(childKey); + pending.push(childKey); + } + } + return count; +} + +export function listDescendantRunsForRequesterFromRuns( + runs: Map, + rootSessionKey: string, +): SubagentRunRecord[] { + const root = rootSessionKey.trim(); + if (!root) { + return []; + } + const pending = [root]; + const visited = new Set([root]); + const descendants: SubagentRunRecord[] = []; + while (pending.length > 0) { + const requester = pending.shift(); + if (!requester) { + continue; + } + for (const entry of runs.values()) { + if (entry.requesterSessionKey !== requester) { + continue; + } + descendants.push(entry); + const childKey = entry.childSessionKey.trim(); + if (!childKey || visited.has(childKey)) { + continue; + } + visited.add(childKey); + pending.push(childKey); + } + } + return descendants; +} diff --git a/src/agents/subagent-registry-state.ts b/src/agents/subagent-registry-state.ts new file mode 100644 index 000000000..6639de5dc --- /dev/null +++ b/src/agents/subagent-registry-state.ts @@ -0,0 +1,56 @@ +import { + loadSubagentRegistryFromDisk, + saveSubagentRegistryToDisk, +} from "./subagent-registry.store.js"; +import type { SubagentRunRecord } from "./subagent-registry.types.js"; + +export function persistSubagentRunsToDisk(runs: Map) { + try { + saveSubagentRegistryToDisk(runs); + } catch { + // ignore persistence failures + } +} + +export function restoreSubagentRunsFromDisk(params: { + runs: Map; + mergeOnly?: boolean; +}) { + const restored = loadSubagentRegistryFromDisk(); + if (restored.size === 0) { + return 0; + } + let added = 0; + for (const [runId, entry] of restored.entries()) { + if (!runId || !entry) { + continue; + } + if (params.mergeOnly && params.runs.has(runId)) { + continue; + } + params.runs.set(runId, entry); + added += 1; + } + return added; +} + +export function getSubagentRunsSnapshotForRead( + inMemoryRuns: Map, +): Map { + const merged = new Map(); + const shouldReadDisk = !(process.env.VITEST || process.env.NODE_ENV === "test"); + if (shouldReadDisk) { + try { + // Persisted state lets other worker processes observe active runs. + for (const [runId, entry] of loadSubagentRegistryFromDisk().entries()) { + merged.set(runId, entry); + } + } catch { + // Ignore disk read failures and fall back to local memory. + } + } + for (const [runId, entry] of inMemoryRuns.entries()) { + merged.set(runId, entry); + } + return merged; +} diff --git a/src/agents/subagent-registry.archive.test.ts b/src/agents/subagent-registry.archive.test.ts new file mode 100644 index 000000000..20148db52 --- /dev/null +++ b/src/agents/subagent-registry.archive.test.ts @@ -0,0 +1,90 @@ +import { afterEach, beforeAll, describe, expect, it, vi } from "vitest"; + +const noop = () => {}; + +vi.mock("../gateway/call.js", () => ({ + callGateway: vi.fn(async (request: unknown) => { + const method = (request as { method?: string }).method; + if (method === "agent.wait") { + // Keep lifecycle unsettled so register/replace assertions can inspect stored state. + return { status: "pending" }; + } + return {}; + }), +})); + +vi.mock("../infra/agent-events.js", () => ({ + onAgentEvent: vi.fn((_handler: unknown) => noop), +})); + +vi.mock("../config/config.js", () => ({ + loadConfig: vi.fn(() => ({ + agents: { defaults: { subagents: { archiveAfterMinutes: 60 } } }, + })), +})); + +vi.mock("./subagent-announce.js", () => ({ + runSubagentAnnounceFlow: vi.fn(async () => true), +})); + +vi.mock("../plugins/hook-runner-global.js", () => ({ + getGlobalHookRunner: vi.fn(() => null), +})); + +vi.mock("./subagent-registry.store.js", () => ({ + loadSubagentRegistryFromDisk: vi.fn(() => new Map()), + saveSubagentRegistryToDisk: vi.fn(() => {}), +})); + +describe("subagent registry archive behavior", () => { + let mod: typeof import("./subagent-registry.js"); + + beforeAll(async () => { + mod = await import("./subagent-registry.js"); + }); + + afterEach(() => { + mod.resetSubagentRegistryForTests({ persist: false }); + }); + + it("does not set archiveAtMs for persistent session-mode runs", () => { + mod.registerSubagentRun({ + runId: "run-session-1", + childSessionKey: "agent:main:subagent:session-1", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + task: "persistent-session", + cleanup: "keep", + spawnMode: "session", + }); + + const run = mod.listSubagentRunsForRequester("agent:main:main")[0]; + expect(run?.runId).toBe("run-session-1"); + expect(run?.spawnMode).toBe("session"); + expect(run?.archiveAtMs).toBeUndefined(); + }); + + it("keeps archiveAtMs unset when replacing a session-mode run after steer restart", () => { + mod.registerSubagentRun({ + runId: "run-old", + childSessionKey: "agent:main:subagent:session-1", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + task: "persistent-session", + cleanup: "keep", + spawnMode: "session", + }); + + const replaced = mod.replaceSubagentRunAfterSteer({ + previousRunId: "run-old", + nextRunId: "run-new", + }); + + expect(replaced).toBe(true); + const run = mod + .listSubagentRunsForRequester("agent:main:main") + .find((entry) => entry.runId === "run-new"); + expect(run?.spawnMode).toBe("session"); + expect(run?.archiveAtMs).toBeUndefined(); + }); +}); diff --git a/src/agents/subagent-registry.steer-restart.test.ts b/src/agents/subagent-registry.steer-restart.test.ts index be2f3ac60..67bd577ce 100644 --- a/src/agents/subagent-registry.steer-restart.test.ts +++ b/src/agents/subagent-registry.steer-restart.test.ts @@ -2,7 +2,17 @@ import { afterEach, beforeAll, describe, expect, it, vi } from "vitest"; const noop = () => {}; let lifecycleHandler: - | ((evt: { stream?: string; runId: string; data?: { phase?: string } }) => void) + | ((evt: { + stream?: string; + runId: string; + data?: { + phase?: string; + startedAt?: number; + endedAt?: number; + aborted?: boolean; + error?: string; + }; + }) => void) | undefined; vi.mock("../gateway/call.js", () => ({ @@ -29,10 +39,18 @@ vi.mock("../config/config.js", () => ({ })); const announceSpy = vi.fn(async (_params: unknown) => true); +const runSubagentEndedHookMock = vi.fn(async (_event?: unknown, _ctx?: unknown) => {}); vi.mock("./subagent-announce.js", () => ({ runSubagentAnnounceFlow: announceSpy, })); +vi.mock("../plugins/hook-runner-global.js", () => ({ + getGlobalHookRunner: vi.fn(() => ({ + hasHooks: (hookName: string) => hookName === "subagent_ended", + runSubagentEnded: runSubagentEndedHookMock, + })), +})); + vi.mock("./subagent-registry.store.js", () => ({ loadSubagentRegistryFromDisk: vi.fn(() => new Map()), saveSubagentRegistryToDisk: vi.fn(() => {}), @@ -52,6 +70,7 @@ describe("subagent registry steer restarts", () => { afterEach(async () => { announceSpy.mockReset(); announceSpy.mockResolvedValue(true); + runSubagentEndedHookMock.mockClear(); lifecycleHandler = undefined; mod.resetSubagentRegistryForTests({ persist: false }); }); @@ -80,6 +99,7 @@ describe("subagent registry steer restarts", () => { await flushAnnounce(); expect(announceSpy).not.toHaveBeenCalled(); + expect(runSubagentEndedHookMock).not.toHaveBeenCalled(); const replaced = mod.replaceSubagentRunAfterSteer({ previousRunId: "run-old", @@ -100,11 +120,152 @@ describe("subagent registry steer restarts", () => { await flushAnnounce(); expect(announceSpy).toHaveBeenCalledTimes(1); + expect(runSubagentEndedHookMock).toHaveBeenCalledTimes(1); + expect(runSubagentEndedHookMock).toHaveBeenCalledWith( + expect.objectContaining({ + runId: "run-new", + }), + expect.objectContaining({ + runId: "run-new", + }), + ); const announce = (announceSpy.mock.calls[0]?.[0] ?? {}) as { childRunId?: string }; expect(announce.childRunId).toBe("run-new"); }); + it("defers subagent_ended hook for completion-mode runs until announce delivery resolves", async () => { + const callGateway = vi.mocked((await import("../gateway/call.js")).callGateway); + const originalCallGateway = callGateway.getMockImplementation(); + callGateway.mockImplementation(async (request: unknown) => { + const typed = request as { method?: string }; + if (typed.method === "agent.wait") { + return new Promise(() => undefined); + } + if (originalCallGateway) { + return originalCallGateway(request as Parameters[0]); + } + return {}; + }); + + try { + let resolveAnnounce!: (value: boolean) => void; + announceSpy.mockImplementationOnce( + () => + new Promise((resolve) => { + resolveAnnounce = resolve; + }), + ); + + mod.registerSubagentRun({ + runId: "run-completion-delayed", + childSessionKey: "agent:main:subagent:completion-delayed", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + requesterOrigin: { + channel: "discord", + to: "channel:123", + accountId: "work", + }, + task: "completion-mode task", + cleanup: "keep", + expectsCompletionMessage: true, + }); + + lifecycleHandler?.({ + stream: "lifecycle", + runId: "run-completion-delayed", + data: { phase: "end" }, + }); + + await flushAnnounce(); + expect(runSubagentEndedHookMock).not.toHaveBeenCalled(); + + resolveAnnounce(true); + await flushAnnounce(); + + expect(runSubagentEndedHookMock).toHaveBeenCalledTimes(1); + expect(runSubagentEndedHookMock).toHaveBeenCalledWith( + expect.objectContaining({ + targetSessionKey: "agent:main:subagent:completion-delayed", + reason: "subagent-complete", + sendFarewell: true, + }), + expect.objectContaining({ + runId: "run-completion-delayed", + requesterSessionKey: "agent:main:main", + }), + ); + } finally { + if (originalCallGateway) { + callGateway.mockImplementation(originalCallGateway); + } + } + }); + + it("does not emit subagent_ended on completion for persistent session-mode runs", async () => { + const callGateway = vi.mocked((await import("../gateway/call.js")).callGateway); + const originalCallGateway = callGateway.getMockImplementation(); + callGateway.mockImplementation(async (request: unknown) => { + const typed = request as { method?: string }; + if (typed.method === "agent.wait") { + return new Promise(() => undefined); + } + if (originalCallGateway) { + return originalCallGateway(request as Parameters[0]); + } + return {}; + }); + + try { + let resolveAnnounce!: (value: boolean) => void; + announceSpy.mockImplementationOnce( + () => + new Promise((resolve) => { + resolveAnnounce = resolve; + }), + ); + + mod.registerSubagentRun({ + runId: "run-persistent-session", + childSessionKey: "agent:main:subagent:persistent-session", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + requesterOrigin: { + channel: "discord", + to: "channel:123", + accountId: "work", + }, + task: "persistent session task", + cleanup: "keep", + expectsCompletionMessage: true, + spawnMode: "session", + }); + + lifecycleHandler?.({ + stream: "lifecycle", + runId: "run-persistent-session", + data: { phase: "end" }, + }); + + await flushAnnounce(); + expect(runSubagentEndedHookMock).not.toHaveBeenCalled(); + + resolveAnnounce(true); + await flushAnnounce(); + + expect(runSubagentEndedHookMock).not.toHaveBeenCalled(); + const run = mod.listSubagentRunsForRequester("agent:main:main")[0]; + expect(run?.runId).toBe("run-persistent-session"); + expect(run?.cleanupCompletedAt).toBeTypeOf("number"); + expect(run?.endedHookEmittedAt).toBeUndefined(); + } finally { + if (originalCallGateway) { + callGateway.mockImplementation(originalCallGateway); + } + } + }); + it("clears announce retry state when replacing after steer restart", () => { mod.registerSubagentRun({ runId: "run-retry-reset-old", @@ -136,6 +297,56 @@ describe("subagent registry steer restarts", () => { expect(runs[0].lastAnnounceRetryAt).toBeUndefined(); }); + it("clears terminal lifecycle state when replacing after steer restart", async () => { + mod.registerSubagentRun({ + runId: "run-terminal-state-old", + childSessionKey: "agent:main:subagent:terminal-state", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + task: "terminal state", + cleanup: "keep", + }); + + const previous = mod.listSubagentRunsForRequester("agent:main:main")[0]; + expect(previous?.runId).toBe("run-terminal-state-old"); + if (previous) { + previous.endedHookEmittedAt = Date.now(); + previous.endedReason = "subagent-complete"; + previous.endedAt = Date.now(); + previous.outcome = { status: "ok" }; + } + + const replaced = mod.replaceSubagentRunAfterSteer({ + previousRunId: "run-terminal-state-old", + nextRunId: "run-terminal-state-new", + fallback: previous, + }); + expect(replaced).toBe(true); + + const runs = mod.listSubagentRunsForRequester("agent:main:main"); + expect(runs).toHaveLength(1); + expect(runs[0].runId).toBe("run-terminal-state-new"); + expect(runs[0].endedHookEmittedAt).toBeUndefined(); + expect(runs[0].endedReason).toBeUndefined(); + + lifecycleHandler?.({ + stream: "lifecycle", + runId: "run-terminal-state-new", + data: { phase: "end" }, + }); + + await flushAnnounce(); + expect(runSubagentEndedHookMock).toHaveBeenCalledTimes(1); + expect(runSubagentEndedHookMock).toHaveBeenCalledWith( + expect.objectContaining({ + runId: "run-terminal-state-new", + }), + expect.objectContaining({ + runId: "run-terminal-state-new", + }), + ); + }); + it("restores announce for a finished run when steer replacement dispatch fails", async () => { mod.registerSubagentRun({ runId: "run-failed-restart", @@ -189,6 +400,24 @@ describe("subagent registry steer restarts", () => { expect(run?.outcome).toEqual({ status: "error", error: "manual kill" }); expect(run?.cleanupHandled).toBe(true); expect(typeof run?.cleanupCompletedAt).toBe("number"); + expect(runSubagentEndedHookMock).toHaveBeenCalledWith( + { + targetSessionKey: childSessionKey, + targetKind: "subagent", + reason: "subagent-killed", + sendFarewell: true, + accountId: undefined, + runId: "run-killed", + endedAt: expect.any(Number), + outcome: "killed", + error: "manual kill", + }, + { + runId: "run-killed", + childSessionKey, + requesterSessionKey: "agent:main:main", + }, + ); }); it("retries deferred parent cleanup after a descendant announces", async () => { @@ -302,4 +531,48 @@ describe("subagent registry steer restarts", () => { vi.useRealTimers(); } }); + + it("emits subagent_ended when completion cleanup expires with active descendants", async () => { + announceSpy.mockResolvedValue(false); + + mod.registerSubagentRun({ + runId: "run-parent-expiry", + childSessionKey: "agent:main:subagent:parent-expiry", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + task: "parent completion expiry", + cleanup: "keep", + expectsCompletionMessage: true, + }); + mod.registerSubagentRun({ + runId: "run-child-active", + childSessionKey: "agent:main:subagent:parent-expiry:subagent:child-active", + requesterSessionKey: "agent:main:subagent:parent-expiry", + requesterDisplayKey: "parent-expiry", + task: "child still running", + cleanup: "keep", + }); + + lifecycleHandler?.({ + stream: "lifecycle", + runId: "run-parent-expiry", + data: { + phase: "end", + startedAt: Date.now() - 7 * 60_000, + endedAt: Date.now() - 6 * 60_000, + }, + }); + + await flushAnnounce(); + + const parentHookCall = runSubagentEndedHookMock.mock.calls.find((call) => { + const event = call[0] as { runId?: string; reason?: string }; + return event.runId === "run-parent-expiry" && event.reason === "subagent-complete"; + }); + expect(parentHookCall).toBeDefined(); + const parent = mod + .listSubagentRunsForRequester("agent:main:main") + .find((entry) => entry.runId === "run-parent-expiry"); + expect(parent?.cleanupCompletedAt).toBeTypeOf("number"); + }); }); diff --git a/src/agents/subagent-registry.store.ts b/src/agents/subagent-registry.store.ts index 2709a6a1f..b41811aef 100644 --- a/src/agents/subagent-registry.store.ts +++ b/src/agents/subagent-registry.store.ts @@ -3,7 +3,7 @@ import path from "node:path"; import { resolveStateDir } from "../config/paths.js"; import { loadJsonFile, saveJsonFile } from "../infra/json-file.js"; import { normalizeDeliveryContext } from "../utils/delivery-context.js"; -import type { SubagentRunRecord } from "./subagent-registry.js"; +import type { SubagentRunRecord } from "./subagent-registry.types.js"; export type PersistedSubagentRegistryVersion = 1 | 2; @@ -101,6 +101,7 @@ export function loadSubagentRegistryFromDisk(): Map { requesterOrigin, cleanupCompletedAt, cleanupHandled, + spawnMode: typed.spawnMode === "session" ? "session" : "run", }); if (isLegacy) { migrated = true; diff --git a/src/agents/subagent-registry.ts b/src/agents/subagent-registry.ts index 0e14a2aaa..8506b77d5 100644 --- a/src/agents/subagent-registry.ts +++ b/src/agents/subagent-registry.ts @@ -6,36 +6,38 @@ import { type DeliveryContext, normalizeDeliveryContext } from "../utils/deliver import { resetAnnounceQueuesForTests } from "./subagent-announce-queue.js"; import { runSubagentAnnounceFlow, type SubagentRunOutcome } from "./subagent-announce.js"; import { - loadSubagentRegistryFromDisk, - saveSubagentRegistryToDisk, -} from "./subagent-registry.store.js"; + SUBAGENT_ENDED_OUTCOME_KILLED, + SUBAGENT_ENDED_REASON_COMPLETE, + SUBAGENT_ENDED_REASON_ERROR, + SUBAGENT_ENDED_REASON_KILLED, + type SubagentLifecycleEndedReason, +} from "./subagent-lifecycle-events.js"; +import { + resolveCleanupCompletionReason, + resolveDeferredCleanupDecision, +} from "./subagent-registry-cleanup.js"; +import { + emitSubagentEndedHookOnce, + resolveLifecycleOutcomeFromRunOutcome, + runOutcomesEqual, +} from "./subagent-registry-completion.js"; +import { + countActiveDescendantRunsFromRuns, + countActiveRunsForSessionFromRuns, + findRunIdsByChildSessionKeyFromRuns, + listDescendantRunsForRequesterFromRuns, + listRunsForRequesterFromRuns, + resolveRequesterForChildSessionFromRuns, +} from "./subagent-registry-queries.js"; +import { + getSubagentRunsSnapshotForRead, + persistSubagentRunsToDisk, + restoreSubagentRunsFromDisk, +} from "./subagent-registry-state.js"; +import type { SubagentRunRecord } from "./subagent-registry.types.js"; import { resolveAgentTimeoutMs } from "./timeout.js"; -export type SubagentRunRecord = { - runId: string; - childSessionKey: string; - requesterSessionKey: string; - requesterOrigin?: DeliveryContext; - requesterDisplayKey: string; - task: string; - cleanup: "delete" | "keep"; - label?: string; - model?: string; - runTimeoutSeconds?: number; - createdAt: number; - startedAt?: number; - endedAt?: number; - outcome?: SubagentRunOutcome; - archiveAtMs?: number; - cleanupCompletedAt?: number; - cleanupHandled?: boolean; - suppressAnnounceReason?: "steer-restart" | "killed"; - expectsCompletionMessage?: boolean; - /** Number of times announce delivery has been attempted and returned false (deferred). */ - announceRetryCount?: number; - /** Timestamp of the last announce retry attempt (for backoff). */ - lastAnnounceRetryAt?: number; -}; +export type { SubagentRunRecord } from "./subagent-registry.types.js"; const subagentRuns = new Map(); let sweeper: NodeJS.Timeout | null = null; @@ -77,19 +79,117 @@ function logAnnounceGiveUp(entry: SubagentRunRecord, reason: "retry-limit" | "ex } function persistSubagentRuns() { - try { - saveSubagentRegistryToDisk(subagentRuns); - } catch { - // ignore persistence failures - } + persistSubagentRunsToDisk(subagentRuns); } const resumedRuns = new Set(); +const endedHookInFlightRunIds = new Set(); function suppressAnnounceForSteerRestart(entry?: SubagentRunRecord) { return entry?.suppressAnnounceReason === "steer-restart"; } +function shouldKeepThreadBindingAfterRun(params: { + entry: SubagentRunRecord; + reason: SubagentLifecycleEndedReason; +}) { + if (params.reason === SUBAGENT_ENDED_REASON_KILLED) { + return false; + } + return params.entry.spawnMode === "session"; +} + +function shouldEmitEndedHookForRun(params: { + entry: SubagentRunRecord; + reason: SubagentLifecycleEndedReason; +}) { + return !shouldKeepThreadBindingAfterRun(params); +} + +async function emitSubagentEndedHookForRun(params: { + entry: SubagentRunRecord; + reason?: SubagentLifecycleEndedReason; + sendFarewell?: boolean; + accountId?: string; +}) { + const reason = params.reason ?? params.entry.endedReason ?? SUBAGENT_ENDED_REASON_COMPLETE; + const outcome = resolveLifecycleOutcomeFromRunOutcome(params.entry.outcome); + const error = params.entry.outcome?.status === "error" ? params.entry.outcome.error : undefined; + await emitSubagentEndedHookOnce({ + entry: params.entry, + reason, + sendFarewell: params.sendFarewell, + accountId: params.accountId ?? params.entry.requesterOrigin?.accountId, + outcome, + error, + inFlightRunIds: endedHookInFlightRunIds, + persist: persistSubagentRuns, + }); +} + +async function completeSubagentRun(params: { + runId: string; + endedAt?: number; + outcome: SubagentRunOutcome; + reason: SubagentLifecycleEndedReason; + sendFarewell?: boolean; + accountId?: string; + triggerCleanup: boolean; +}) { + const entry = subagentRuns.get(params.runId); + if (!entry) { + return; + } + + let mutated = false; + const endedAt = typeof params.endedAt === "number" ? params.endedAt : Date.now(); + if (entry.endedAt !== endedAt) { + entry.endedAt = endedAt; + mutated = true; + } + if (!runOutcomesEqual(entry.outcome, params.outcome)) { + entry.outcome = params.outcome; + mutated = true; + } + if (entry.endedReason !== params.reason) { + entry.endedReason = params.reason; + mutated = true; + } + + if (mutated) { + persistSubagentRuns(); + } + + const suppressedForSteerRestart = suppressAnnounceForSteerRestart(entry); + const shouldEmitEndedHook = + !suppressedForSteerRestart && + shouldEmitEndedHookForRun({ + entry, + reason: params.reason, + }); + const shouldDeferEndedHook = + shouldEmitEndedHook && + params.triggerCleanup && + entry.expectsCompletionMessage === true && + !suppressedForSteerRestart; + if (!shouldDeferEndedHook && shouldEmitEndedHook) { + await emitSubagentEndedHookForRun({ + entry, + reason: params.reason, + sendFarewell: params.sendFarewell, + accountId: params.accountId, + }); + } + + if (!params.triggerCleanup) { + return; + } + if (suppressedForSteerRestart) { + return; + } + startSubagentAnnounceCleanupFlow(params.runId, entry); +} + function startSubagentAnnounceCleanupFlow(runId: string, entry: SubagentRunRecord): boolean { if (!beginSubagentCleanup(runId)) { return false; @@ -102,7 +202,6 @@ function startSubagentAnnounceCleanupFlow(runId: string, entry: SubagentRunRecor requesterOrigin, requesterDisplayKey: entry.requesterDisplayKey, task: entry.task, - expectsCompletionMessage: entry.expectsCompletionMessage, timeoutMs: SUBAGENT_ANNOUNCE_TIMEOUT_MS, cleanup: entry.cleanup, waitForCompletion: false, @@ -110,8 +209,10 @@ function startSubagentAnnounceCleanupFlow(runId: string, entry: SubagentRunRecor endedAt: entry.endedAt, label: entry.label, outcome: entry.outcome, + spawnMode: entry.spawnMode, + expectsCompletionMessage: entry.expectsCompletionMessage, }).then((didAnnounce) => { - finalizeSubagentCleanup(runId, entry.cleanup, didAnnounce); + void finalizeSubagentCleanup(runId, entry.cleanup, didAnnounce); }); return true; } @@ -182,20 +283,13 @@ function restoreSubagentRunsOnce() { } restoreAttempted = true; try { - const restored = loadSubagentRegistryFromDisk(); - if (restored.size === 0) { + const restoredCount = restoreSubagentRunsFromDisk({ + runs: subagentRuns, + mergeOnly: true, + }); + if (restoredCount === 0) { return; } - for (const [runId, entry] of restored.entries()) { - if (!runId || !entry) { - continue; - } - // Keep any newer in-memory entries. - if (!subagentRuns.has(runId)) { - subagentRuns.set(runId, entry); - } - } - // Resume pending work. ensureListener(); if ([...subagentRuns.values()].some((entry) => entry.archiveAtMs)) { @@ -255,7 +349,11 @@ async function sweepSubagentRuns() { try { await callGateway({ method: "sessions.delete", - params: { key: entry.childSessionKey, deleteTranscript: true }, + params: { + key: entry.childSessionKey, + deleteTranscript: true, + emitLifecycleHooks: false, + }, timeoutMs: 10_000, }); } catch { @@ -276,93 +374,154 @@ function ensureListener() { } listenerStarted = true; listenerStop = onAgentEvent((evt) => { - if (!evt || evt.stream !== "lifecycle") { - return; - } - const entry = subagentRuns.get(evt.runId); - if (!entry) { - return; - } - const phase = evt.data?.phase; - if (phase === "start") { - const startedAt = typeof evt.data?.startedAt === "number" ? evt.data.startedAt : undefined; - if (startedAt) { - entry.startedAt = startedAt; - persistSubagentRuns(); + void (async () => { + if (!evt || evt.stream !== "lifecycle") { + return; } - return; - } - if (phase !== "end" && phase !== "error") { - return; - } - const endedAt = typeof evt.data?.endedAt === "number" ? evt.data.endedAt : Date.now(); - entry.endedAt = endedAt; - if (phase === "error") { + const entry = subagentRuns.get(evt.runId); + if (!entry) { + return; + } + const phase = evt.data?.phase; + if (phase === "start") { + const startedAt = typeof evt.data?.startedAt === "number" ? evt.data.startedAt : undefined; + if (startedAt) { + entry.startedAt = startedAt; + persistSubagentRuns(); + } + return; + } + if (phase !== "end" && phase !== "error") { + return; + } + const endedAt = typeof evt.data?.endedAt === "number" ? evt.data.endedAt : Date.now(); const error = typeof evt.data?.error === "string" ? evt.data.error : undefined; - entry.outcome = { status: "error", error }; - } else if (evt.data?.aborted) { - entry.outcome = { status: "timeout" }; - } else { - entry.outcome = { status: "ok" }; - } - persistSubagentRuns(); - - if (suppressAnnounceForSteerRestart(entry)) { - return; - } - - if (!startSubagentAnnounceCleanupFlow(evt.runId, entry)) { - return; - } + const outcome: SubagentRunOutcome = + phase === "error" + ? { status: "error", error } + : evt.data?.aborted + ? { status: "timeout" } + : { status: "ok" }; + await completeSubagentRun({ + runId: evt.runId, + endedAt, + outcome, + reason: phase === "error" ? SUBAGENT_ENDED_REASON_ERROR : SUBAGENT_ENDED_REASON_COMPLETE, + sendFarewell: true, + accountId: entry.requesterOrigin?.accountId, + triggerCleanup: true, + }); + })(); }); } -function finalizeSubagentCleanup(runId: string, cleanup: "delete" | "keep", didAnnounce: boolean) { +async function finalizeSubagentCleanup( + runId: string, + cleanup: "delete" | "keep", + didAnnounce: boolean, +) { const entry = subagentRuns.get(runId); if (!entry) { return; } - if (!didAnnounce) { - const now = Date.now(); - const retryCount = (entry.announceRetryCount ?? 0) + 1; - entry.announceRetryCount = retryCount; + if (didAnnounce) { + const completionReason = resolveCleanupCompletionReason(entry); + await emitCompletionEndedHookIfNeeded(entry, completionReason); + completeCleanupBookkeeping({ + runId, + entry, + cleanup, + completedAt: Date.now(), + }); + return; + } + + const now = Date.now(); + const deferredDecision = resolveDeferredCleanupDecision({ + entry, + now, + activeDescendantRuns: Math.max(0, countActiveDescendantRuns(entry.childSessionKey)), + announceExpiryMs: ANNOUNCE_EXPIRY_MS, + maxAnnounceRetryCount: MAX_ANNOUNCE_RETRY_COUNT, + deferDescendantDelayMs: MIN_ANNOUNCE_RETRY_DELAY_MS, + resolveAnnounceRetryDelayMs, + }); + + if (deferredDecision.kind === "defer-descendants") { entry.lastAnnounceRetryAt = now; - - // Check if the announce has exceeded retry limits or expired (#18264). - const endedAgo = typeof entry.endedAt === "number" ? now - entry.endedAt : 0; - if (retryCount >= MAX_ANNOUNCE_RETRY_COUNT || endedAgo > ANNOUNCE_EXPIRY_MS) { - // Give up: mark as completed to break the infinite retry loop. - logAnnounceGiveUp(entry, retryCount >= MAX_ANNOUNCE_RETRY_COUNT ? "retry-limit" : "expiry"); - entry.cleanupCompletedAt = now; - persistSubagentRuns(); - retryDeferredCompletedAnnounces(runId); - return; - } - - // Allow retry on the next wake if announce was deferred or failed. entry.cleanupHandled = false; resumedRuns.delete(runId); persistSubagentRuns(); - if (entry.expectsCompletionMessage !== true) { - return; - } - setTimeout( - () => { - resumeSubagentRun(runId); - }, - resolveAnnounceRetryDelayMs(entry.announceRetryCount ?? 0), - ).unref?.(); + setTimeout(() => { + resumeSubagentRun(runId); + }, deferredDecision.delayMs).unref?.(); return; } - if (cleanup === "delete") { - subagentRuns.delete(runId); - persistSubagentRuns(); - retryDeferredCompletedAnnounces(runId); + + if (deferredDecision.retryCount != null) { + entry.announceRetryCount = deferredDecision.retryCount; + entry.lastAnnounceRetryAt = now; + } + + if (deferredDecision.kind === "give-up") { + const completionReason = resolveCleanupCompletionReason(entry); + await emitCompletionEndedHookIfNeeded(entry, completionReason); + logAnnounceGiveUp(entry, deferredDecision.reason); + completeCleanupBookkeeping({ + runId, + entry, + cleanup: "keep", + completedAt: now, + }); return; } - entry.cleanupCompletedAt = Date.now(); + + // Allow retry on the next wake if announce was deferred or failed. + entry.cleanupHandled = false; + resumedRuns.delete(runId); persistSubagentRuns(); - retryDeferredCompletedAnnounces(runId); + if (deferredDecision.resumeDelayMs == null) { + return; + } + setTimeout(() => { + resumeSubagentRun(runId); + }, deferredDecision.resumeDelayMs).unref?.(); +} + +async function emitCompletionEndedHookIfNeeded( + entry: SubagentRunRecord, + reason: SubagentLifecycleEndedReason, +) { + if ( + entry.expectsCompletionMessage === true && + shouldEmitEndedHookForRun({ + entry, + reason, + }) + ) { + await emitSubagentEndedHookForRun({ + entry, + reason, + sendFarewell: true, + }); + } +} + +function completeCleanupBookkeeping(params: { + runId: string; + entry: SubagentRunRecord; + cleanup: "delete" | "keep"; + completedAt: number; +}) { + if (params.cleanup === "delete") { + subagentRuns.delete(params.runId); + persistSubagentRuns(); + retryDeferredCompletedAnnounces(params.runId); + return; + } + params.entry.cleanupCompletedAt = params.completedAt; + persistSubagentRuns(); + retryDeferredCompletedAnnounces(params.runId); } function retryDeferredCompletedAnnounces(excludeRunId?: string) { @@ -475,7 +634,9 @@ export function replaceSubagentRunAfterSteer(params: { const now = Date.now(); const cfg = loadConfig(); const archiveAfterMs = resolveArchiveAfterMs(cfg); - const archiveAtMs = archiveAfterMs ? now + archiveAfterMs : undefined; + const spawnMode = source.spawnMode === "session" ? "session" : "run"; + const archiveAtMs = + spawnMode === "session" ? undefined : archiveAfterMs ? now + archiveAfterMs : undefined; const runTimeoutSeconds = params.runTimeoutSeconds ?? source.runTimeoutSeconds ?? 0; const waitTimeoutMs = resolveSubagentWaitTimeoutMs(cfg, runTimeoutSeconds); @@ -484,12 +645,15 @@ export function replaceSubagentRunAfterSteer(params: { runId: nextRunId, startedAt: now, endedAt: undefined, + endedReason: undefined, + endedHookEmittedAt: undefined, outcome: undefined, cleanupCompletedAt: undefined, cleanupHandled: false, suppressAnnounceReason: undefined, announceRetryCount: undefined, lastAnnounceRetryAt: undefined, + spawnMode, archiveAtMs, runTimeoutSeconds, }; @@ -516,11 +680,14 @@ export function registerSubagentRun(params: { model?: string; runTimeoutSeconds?: number; expectsCompletionMessage?: boolean; + spawnMode?: "run" | "session"; }) { const now = Date.now(); const cfg = loadConfig(); const archiveAfterMs = resolveArchiveAfterMs(cfg); - const archiveAtMs = archiveAfterMs ? now + archiveAfterMs : undefined; + const spawnMode = params.spawnMode === "session" ? "session" : "run"; + const archiveAtMs = + spawnMode === "session" ? undefined : archiveAfterMs ? now + archiveAfterMs : undefined; const runTimeoutSeconds = params.runTimeoutSeconds ?? 0; const waitTimeoutMs = resolveSubagentWaitTimeoutMs(cfg, runTimeoutSeconds); const requesterOrigin = normalizeDeliveryContext(params.requesterOrigin); @@ -533,6 +700,7 @@ export function registerSubagentRun(params: { task: params.task, cleanup: params.cleanup, expectsCompletionMessage: params.expectsCompletionMessage, + spawnMode, label: params.label, model: params.model, runTimeoutSeconds, @@ -543,7 +711,7 @@ export function registerSubagentRun(params: { }); ensureListener(); persistSubagentRuns(); - if (archiveAfterMs) { + if (archiveAtMs) { startSweeper(); } // Wait for subagent completion via gateway RPC (cross-process). @@ -588,22 +756,29 @@ async function waitForSubagentCompletion(runId: string, waitTimeoutMs: number) { mutated = true; } const waitError = typeof wait.error === "string" ? wait.error : undefined; - entry.outcome = + const outcome: SubagentRunOutcome = wait.status === "error" ? { status: "error", error: waitError } : wait.status === "timeout" ? { status: "timeout" } : { status: "ok" }; - mutated = true; + if (!runOutcomesEqual(entry.outcome, outcome)) { + entry.outcome = outcome; + mutated = true; + } if (mutated) { persistSubagentRuns(); } - if (suppressAnnounceForSteerRestart(entry)) { - return; - } - if (!startSubagentAnnounceCleanupFlow(runId, entry)) { - return; - } + await completeSubagentRun({ + runId, + endedAt: entry.endedAt, + outcome, + reason: + wait.status === "error" ? SUBAGENT_ENDED_REASON_ERROR : SUBAGENT_ENDED_REASON_COMPLETE, + sendFarewell: true, + accountId: entry.requesterOrigin?.accountId, + triggerCleanup: true, + }); } catch { // ignore } @@ -612,6 +787,7 @@ async function waitForSubagentCompletion(runId: string, waitTimeoutMs: number) { export function resetSubagentRegistryForTests(opts?: { persist?: boolean }) { subagentRuns.clear(); resumedRuns.clear(); + endedHookInFlightRunIds.clear(); resetAnnounceQueuesForTests(); stopSweeper(); restoreAttempted = false; @@ -640,62 +816,23 @@ export function releaseSubagentRun(runId: string) { } function findRunIdsByChildSessionKey(childSessionKey: string): string[] { - const key = childSessionKey.trim(); - if (!key) { - return []; - } - const runIds: string[] = []; - for (const [runId, entry] of subagentRuns.entries()) { - if (entry.childSessionKey === key) { - runIds.push(runId); - } - } - return runIds; -} - -function getRunsSnapshotForRead(): Map { - const merged = new Map(); - const shouldReadDisk = !(process.env.VITEST || process.env.NODE_ENV === "test"); - if (shouldReadDisk) { - try { - // Registry state is persisted to disk so other worker processes (for - // example cron runners) can observe active children spawned elsewhere. - for (const [runId, entry] of loadSubagentRegistryFromDisk().entries()) { - merged.set(runId, entry); - } - } catch { - // Ignore disk read failures and fall back to local memory state. - } - } - for (const [runId, entry] of subagentRuns.entries()) { - merged.set(runId, entry); - } - return merged; + return findRunIdsByChildSessionKeyFromRuns(subagentRuns, childSessionKey); } export function resolveRequesterForChildSession(childSessionKey: string): { requesterSessionKey: string; requesterOrigin?: DeliveryContext; } | null { - const key = childSessionKey.trim(); - if (!key) { - return null; - } - let best: SubagentRunRecord | undefined; - for (const entry of getRunsSnapshotForRead().values()) { - if (entry.childSessionKey !== key) { - continue; - } - if (!best || entry.createdAt > best.createdAt) { - best = entry; - } - } - if (!best) { + const resolved = resolveRequesterForChildSessionFromRuns( + getSubagentRunsSnapshotForRead(subagentRuns), + childSessionKey, + ); + if (!resolved) { return null; } return { - requesterSessionKey: best.requesterSessionKey, - requesterOrigin: normalizeDeliveryContext(best.requesterOrigin), + requesterSessionKey: resolved.requesterSessionKey, + requesterOrigin: normalizeDeliveryContext(resolved.requesterOrigin), }; } @@ -734,6 +871,7 @@ export function markSubagentRunTerminated(params: { const now = Date.now(); const reason = params.reason?.trim() || "killed"; let updated = 0; + const entriesByChildSessionKey = new Map(); for (const runId of runIds) { const entry = subagentRuns.get(runId); if (!entry) { @@ -744,103 +882,57 @@ export function markSubagentRunTerminated(params: { } entry.endedAt = now; entry.outcome = { status: "error", error: reason }; + entry.endedReason = SUBAGENT_ENDED_REASON_KILLED; entry.cleanupHandled = true; entry.cleanupCompletedAt = now; entry.suppressAnnounceReason = "killed"; + if (!entriesByChildSessionKey.has(entry.childSessionKey)) { + entriesByChildSessionKey.set(entry.childSessionKey, entry); + } updated += 1; } if (updated > 0) { persistSubagentRuns(); + for (const entry of entriesByChildSessionKey.values()) { + void emitSubagentEndedHookOnce({ + entry, + reason: SUBAGENT_ENDED_REASON_KILLED, + sendFarewell: true, + outcome: SUBAGENT_ENDED_OUTCOME_KILLED, + error: reason, + inFlightRunIds: endedHookInFlightRunIds, + persist: persistSubagentRuns, + }).catch(() => { + // Hook failures should not break termination flow. + }); + } } return updated; } export function listSubagentRunsForRequester(requesterSessionKey: string): SubagentRunRecord[] { - const key = requesterSessionKey.trim(); - if (!key) { - return []; - } - return [...subagentRuns.values()].filter((entry) => entry.requesterSessionKey === key); + return listRunsForRequesterFromRuns(subagentRuns, requesterSessionKey); } export function countActiveRunsForSession(requesterSessionKey: string): number { - const key = requesterSessionKey.trim(); - if (!key) { - return 0; - } - let count = 0; - for (const entry of getRunsSnapshotForRead().values()) { - if (entry.requesterSessionKey !== key) { - continue; - } - if (typeof entry.endedAt === "number") { - continue; - } - count += 1; - } - return count; + return countActiveRunsForSessionFromRuns( + getSubagentRunsSnapshotForRead(subagentRuns), + requesterSessionKey, + ); } export function countActiveDescendantRuns(rootSessionKey: string): number { - const root = rootSessionKey.trim(); - if (!root) { - return 0; - } - const runs = getRunsSnapshotForRead(); - const pending = [root]; - const visited = new Set([root]); - let count = 0; - while (pending.length > 0) { - const requester = pending.shift(); - if (!requester) { - continue; - } - for (const entry of runs.values()) { - if (entry.requesterSessionKey !== requester) { - continue; - } - if (typeof entry.endedAt !== "number") { - count += 1; - } - const childKey = entry.childSessionKey.trim(); - if (!childKey || visited.has(childKey)) { - continue; - } - visited.add(childKey); - pending.push(childKey); - } - } - return count; + return countActiveDescendantRunsFromRuns( + getSubagentRunsSnapshotForRead(subagentRuns), + rootSessionKey, + ); } export function listDescendantRunsForRequester(rootSessionKey: string): SubagentRunRecord[] { - const root = rootSessionKey.trim(); - if (!root) { - return []; - } - const runs = getRunsSnapshotForRead(); - const pending = [root]; - const visited = new Set([root]); - const descendants: SubagentRunRecord[] = []; - while (pending.length > 0) { - const requester = pending.shift(); - if (!requester) { - continue; - } - for (const entry of runs.values()) { - if (entry.requesterSessionKey !== requester) { - continue; - } - descendants.push(entry); - const childKey = entry.childSessionKey.trim(); - if (!childKey || visited.has(childKey)) { - continue; - } - visited.add(childKey); - pending.push(childKey); - } - } - return descendants; + return listDescendantRunsForRequesterFromRuns( + getSubagentRunsSnapshotForRead(subagentRuns), + rootSessionKey, + ); } export function initSubagentRegistry() { diff --git a/src/agents/subagent-registry.types.ts b/src/agents/subagent-registry.types.ts new file mode 100644 index 000000000..d85773f8b --- /dev/null +++ b/src/agents/subagent-registry.types.ts @@ -0,0 +1,35 @@ +import type { DeliveryContext } from "../utils/delivery-context.js"; +import type { SubagentRunOutcome } from "./subagent-announce.js"; +import type { SubagentLifecycleEndedReason } from "./subagent-lifecycle-events.js"; +import type { SpawnSubagentMode } from "./subagent-spawn.js"; + +export type SubagentRunRecord = { + runId: string; + childSessionKey: string; + requesterSessionKey: string; + requesterOrigin?: DeliveryContext; + requesterDisplayKey: string; + task: string; + cleanup: "delete" | "keep"; + label?: string; + model?: string; + runTimeoutSeconds?: number; + spawnMode?: SpawnSubagentMode; + createdAt: number; + startedAt?: number; + endedAt?: number; + outcome?: SubagentRunOutcome; + archiveAtMs?: number; + cleanupCompletedAt?: number; + cleanupHandled?: boolean; + suppressAnnounceReason?: "steer-restart" | "killed"; + expectsCompletionMessage?: boolean; + /** Number of announce delivery attempts that returned false (deferred). */ + announceRetryCount?: number; + /** Timestamp of the last announce retry attempt (for backoff). */ + lastAnnounceRetryAt?: number; + /** Terminal lifecycle reason recorded when the run finishes. */ + endedReason?: SubagentLifecycleEndedReason; + /** Set after the subagent_ended hook has been emitted successfully once. */ + endedHookEmittedAt?: number; +}; diff --git a/src/agents/subagent-spawn.ts b/src/agents/subagent-spawn.ts index f14e9e50e..d033c78bc 100644 --- a/src/agents/subagent-spawn.ts +++ b/src/agents/subagent-spawn.ts @@ -1,7 +1,9 @@ import crypto from "node:crypto"; import { formatThinkingLevels, normalizeThinkLevel } from "../auto-reply/thinking.js"; +import { DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH } from "../config/agent-limits.js"; import { loadConfig } from "../config/config.js"; import { callGateway } from "../gateway/call.js"; +import { getGlobalHookRunner } from "../plugins/hook-runner-global.js"; import { normalizeAgentId, parseAgentSessionKey } from "../routing/session-key.js"; import { normalizeDeliveryContext } from "../utils/delivery-context.js"; import { resolveAgentConfig } from "./agent-scope.js"; @@ -17,6 +19,9 @@ import { resolveMainSessionAlias, } from "./tools/sessions-helpers.js"; +export const SUBAGENT_SPAWN_MODES = ["run", "session"] as const; +export type SpawnSubagentMode = (typeof SUBAGENT_SPAWN_MODES)[number]; + export type SpawnSubagentParams = { task: string; label?: string; @@ -24,6 +29,8 @@ export type SpawnSubagentParams = { model?: string; thinking?: string; runTimeoutSeconds?: number; + thread?: boolean; + mode?: SpawnSubagentMode; cleanup?: "delete" | "keep"; expectsCompletionMessage?: boolean; }; @@ -42,11 +49,14 @@ export type SpawnSubagentContext = { export const SUBAGENT_SPAWN_ACCEPTED_NOTE = "auto-announces on completion, do not poll/sleep. The response will be sent back as an user message."; +export const SUBAGENT_SPAWN_SESSION_ACCEPTED_NOTE = + "thread-bound session stays active after this task; continue in-thread for follow-ups."; export type SpawnSubagentResult = { status: "accepted" | "forbidden" | "error"; childSessionKey?: string; runId?: string; + mode?: SpawnSubagentMode; note?: string; modelApplied?: boolean; error?: string; @@ -67,6 +77,88 @@ export function splitModelRef(ref?: string) { return { provider: undefined, model: trimmed }; } +function resolveSpawnMode(params: { + requestedMode?: SpawnSubagentMode; + threadRequested: boolean; +}): SpawnSubagentMode { + if (params.requestedMode === "run" || params.requestedMode === "session") { + return params.requestedMode; + } + // Thread-bound spawns should default to persistent sessions. + return params.threadRequested ? "session" : "run"; +} + +function summarizeError(err: unknown): string { + if (err instanceof Error) { + return err.message; + } + if (typeof err === "string") { + return err; + } + return "error"; +} + +async function ensureThreadBindingForSubagentSpawn(params: { + hookRunner: ReturnType; + childSessionKey: string; + agentId: string; + label?: string; + mode: SpawnSubagentMode; + requesterSessionKey?: string; + requester: { + channel?: string; + accountId?: string; + to?: string; + threadId?: string | number; + }; +}): Promise<{ status: "ok" } | { status: "error"; error: string }> { + const hookRunner = params.hookRunner; + if (!hookRunner?.hasHooks("subagent_spawning")) { + return { + status: "error", + error: + "thread=true is unavailable because no channel plugin registered subagent_spawning hooks.", + }; + } + + try { + const result = await hookRunner.runSubagentSpawning( + { + childSessionKey: params.childSessionKey, + agentId: params.agentId, + label: params.label, + mode: params.mode, + requester: params.requester, + threadRequested: true, + }, + { + childSessionKey: params.childSessionKey, + requesterSessionKey: params.requesterSessionKey, + }, + ); + if (result?.status === "error") { + const error = result.error.trim(); + return { + status: "error", + error: error || "Failed to prepare thread binding for this subagent session.", + }; + } + if (result?.status !== "ok" || !result.threadBindingReady) { + return { + status: "error", + error: + "Unable to create or bind a thread for this subagent session. Session mode is unavailable for this target.", + }; + } + return { status: "ok" }; + } catch (err) { + return { + status: "error", + error: `Thread bind failed: ${summarizeError(err)}`, + }; + } +} + export async function spawnSubagentDirect( params: SpawnSubagentParams, ctx: SpawnSubagentContext, @@ -76,19 +168,37 @@ export async function spawnSubagentDirect( const requestedAgentId = params.agentId; const modelOverride = params.model; const thinkingOverrideRaw = params.thinking; + const requestThreadBinding = params.thread === true; + const spawnMode = resolveSpawnMode({ + requestedMode: params.mode, + threadRequested: requestThreadBinding, + }); + if (spawnMode === "session" && !requestThreadBinding) { + return { + status: "error", + error: 'mode="session" requires thread=true so the subagent can stay bound to a thread.', + }; + } const cleanup = - params.cleanup === "keep" || params.cleanup === "delete" ? params.cleanup : "keep"; + spawnMode === "session" + ? "keep" + : params.cleanup === "keep" || params.cleanup === "delete" + ? params.cleanup + : "keep"; + const expectsCompletionMessage = params.expectsCompletionMessage !== false; const requesterOrigin = normalizeDeliveryContext({ channel: ctx.agentChannel, accountId: ctx.agentAccountId, to: ctx.agentTo, threadId: ctx.agentThreadId, }); + const hookRunner = getGlobalHookRunner(); const runTimeoutSeconds = typeof params.runTimeoutSeconds === "number" && Number.isFinite(params.runTimeoutSeconds) ? Math.max(0, Math.floor(params.runTimeoutSeconds)) : 0; let modelApplied = false; + let threadBindingReady = false; const cfg = loadConfig(); const { mainKey, alias } = resolveMainSessionAlias(cfg); @@ -107,7 +217,8 @@ export async function spawnSubagentDirect( }); const callerDepth = getSubagentDepthFromSessionStore(requesterInternalKey, { cfg }); - const maxSpawnDepth = cfg.agents?.defaults?.subagents?.maxSpawnDepth ?? 1; + const maxSpawnDepth = + cfg.agents?.defaults?.subagents?.maxSpawnDepth ?? DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH; if (callerDepth >= maxSpawnDepth) { return { status: "forbidden", @@ -227,6 +338,39 @@ export async function spawnSubagentDirect( }; } } + if (requestThreadBinding) { + const bindResult = await ensureThreadBindingForSubagentSpawn({ + hookRunner, + childSessionKey, + agentId: targetAgentId, + label: label || undefined, + mode: spawnMode, + requesterSessionKey: requesterInternalKey, + requester: { + channel: requesterOrigin?.channel, + accountId: requesterOrigin?.accountId, + to: requesterOrigin?.to, + threadId: requesterOrigin?.threadId, + }, + }); + if (bindResult.status === "error") { + try { + await callGateway({ + method: "sessions.delete", + params: { key: childSessionKey, emitLifecycleHooks: false }, + timeoutMs: 10_000, + }); + } catch { + // Best-effort cleanup only. + } + return { + status: "error", + error: bindResult.error, + childSessionKey, + }; + } + threadBindingReady = true; + } const childSystemPrompt = buildSubagentSystemPrompt({ requesterSessionKey, requesterOrigin, @@ -238,8 +382,13 @@ export async function spawnSubagentDirect( }); const childTaskMessage = [ `[Subagent Context] You are running as a subagent (depth ${childDepth}/${maxSpawnDepth}). Results auto-announce to your requester; do not busy-poll for status.`, + spawnMode === "session" + ? "[Subagent Context] This subagent session is persistent and remains available for thread follow-up messages." + : undefined, `[Subagent Task]: ${task}`, - ].join("\n\n"); + ] + .filter((line): line is string => Boolean(line)) + .join("\n\n"); const childIdem = crypto.randomUUID(); let childRunId: string = childIdem; @@ -271,8 +420,50 @@ export async function spawnSubagentDirect( childRunId = response.runId; } } catch (err) { - const messageText = - err instanceof Error ? err.message : typeof err === "string" ? err : "error"; + if (threadBindingReady) { + const hasEndedHook = hookRunner?.hasHooks("subagent_ended") === true; + let endedHookEmitted = false; + if (hasEndedHook) { + try { + await hookRunner?.runSubagentEnded( + { + targetSessionKey: childSessionKey, + targetKind: "subagent", + reason: "spawn-failed", + sendFarewell: true, + accountId: requesterOrigin?.accountId, + runId: childRunId, + outcome: "error", + error: "Session failed to start", + }, + { + runId: childRunId, + childSessionKey, + requesterSessionKey: requesterInternalKey, + }, + ); + endedHookEmitted = true; + } catch { + // Spawn should still return an actionable error even if cleanup hooks fail. + } + } + // Always delete the provisional child session after a failed spawn attempt. + // If we already emitted subagent_ended above, suppress a duplicate lifecycle hook. + try { + await callGateway({ + method: "sessions.delete", + params: { + key: childSessionKey, + deleteTranscript: true, + emitLifecycleHooks: !endedHookEmitted, + }, + timeoutMs: 10_000, + }); + } catch { + // Best-effort only. + } + } + const messageText = summarizeError(err); return { status: "error", error: messageText, @@ -292,14 +483,45 @@ export async function spawnSubagentDirect( label: label || undefined, model: resolvedModel, runTimeoutSeconds, - expectsCompletionMessage: params.expectsCompletionMessage === true, + expectsCompletionMessage, + spawnMode, }); + if (hookRunner?.hasHooks("subagent_spawned")) { + try { + await hookRunner.runSubagentSpawned( + { + runId: childRunId, + childSessionKey, + agentId: targetAgentId, + label: label || undefined, + requester: { + channel: requesterOrigin?.channel, + accountId: requesterOrigin?.accountId, + to: requesterOrigin?.to, + threadId: requesterOrigin?.threadId, + }, + threadRequested: requestThreadBinding, + mode: spawnMode, + }, + { + runId: childRunId, + childSessionKey, + requesterSessionKey: requesterInternalKey, + }, + ); + } catch { + // Spawn should still return accepted if spawn lifecycle hooks fail. + } + } + return { status: "accepted", childSessionKey, runId: childRunId, - note: SUBAGENT_SPAWN_ACCEPTED_NOTE, + mode: spawnMode, + note: + spawnMode === "session" ? SUBAGENT_SPAWN_SESSION_ACCEPTED_NOTE : SUBAGENT_SPAWN_ACCEPTED_NOTE, modelApplied: resolvedModel ? modelApplied : undefined, }; } diff --git a/src/agents/tools/sessions-spawn-tool.ts b/src/agents/tools/sessions-spawn-tool.ts index 93ac229a3..9102d2484 100644 --- a/src/agents/tools/sessions-spawn-tool.ts +++ b/src/agents/tools/sessions-spawn-tool.ts @@ -1,7 +1,7 @@ import { Type } from "@sinclair/typebox"; import type { GatewayMessageChannel } from "../../utils/message-channel.js"; import { optionalStringEnum } from "../schema/typebox.js"; -import { spawnSubagentDirect } from "../subagent-spawn.js"; +import { SUBAGENT_SPAWN_MODES, spawnSubagentDirect } from "../subagent-spawn.js"; import type { AnyAgentTool } from "./common.js"; import { jsonResult, readStringParam } from "./common.js"; @@ -14,6 +14,8 @@ const SessionsSpawnToolSchema = Type.Object({ runTimeoutSeconds: Type.Optional(Type.Number({ minimum: 0 })), // Back-compat: older callers used timeoutSeconds for this tool. timeoutSeconds: Type.Optional(Type.Number({ minimum: 0 })), + thread: Type.Optional(Type.Boolean()), + mode: optionalStringEnum(SUBAGENT_SPAWN_MODES), cleanup: optionalStringEnum(["delete", "keep"] as const), }); @@ -34,7 +36,7 @@ export function createSessionsSpawnTool(opts?: { label: "Sessions", name: "sessions_spawn", description: - "Spawn a background sub-agent run in an isolated session and announce the result back to the requester chat.", + 'Spawn a sub-agent in an isolated session (mode="run" one-shot or mode="session" persistent) and route results back to the requester chat/thread.', parameters: SessionsSpawnToolSchema, execute: async (_toolCallId, args) => { const params = args as Record; @@ -43,6 +45,7 @@ export function createSessionsSpawnTool(opts?: { const requestedAgentId = readStringParam(params, "agentId"); const modelOverride = readStringParam(params, "model"); const thinkingOverrideRaw = readStringParam(params, "thinking"); + const mode = params.mode === "run" || params.mode === "session" ? params.mode : undefined; const cleanup = params.cleanup === "keep" || params.cleanup === "delete" ? params.cleanup : "keep"; // Back-compat: older callers used timeoutSeconds for this tool. @@ -56,6 +59,7 @@ export function createSessionsSpawnTool(opts?: { typeof timeoutSecondsCandidate === "number" && Number.isFinite(timeoutSecondsCandidate) ? Math.max(0, Math.floor(timeoutSecondsCandidate)) : undefined; + const thread = params.thread === true; const result = await spawnSubagentDirect( { @@ -65,6 +69,8 @@ export function createSessionsSpawnTool(opts?: { model: modelOverride, thinking: thinkingOverrideRaw, runTimeoutSeconds, + thread, + mode, cleanup, expectsCompletionMessage: true, }, diff --git a/src/agents/tools/subagents-tool.ts b/src/agents/tools/subagents-tool.ts index bf88212d6..9b0b75ce8 100644 --- a/src/agents/tools/subagents-tool.ts +++ b/src/agents/tools/subagents-tool.ts @@ -7,6 +7,7 @@ import { sortSubagentRuns, type SubagentTargetResolution, } from "../../auto-reply/reply/subagents-utils.js"; +import { DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH } from "../../config/agent-limits.js"; import { loadConfig } from "../../config/config.js"; import type { SessionEntry } from "../../config/sessions.js"; import { loadSessionStore, resolveStorePath, updateSessionStore } from "../../config/sessions.js"; @@ -199,7 +200,8 @@ function resolveRequesterKey(params: { // Check if this sub-agent can spawn children (orchestrator). // If so, it should see its own children, not its parent's children. const callerDepth = getSubagentDepthFromSessionStore(callerSessionKey, { cfg: params.cfg }); - const maxSpawnDepth = params.cfg.agents?.defaults?.subagents?.maxSpawnDepth ?? 1; + const maxSpawnDepth = + params.cfg.agents?.defaults?.subagents?.maxSpawnDepth ?? DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH; if (callerDepth < maxSpawnDepth) { // Orchestrator sub-agent: use its own session key as requester // so it sees children it spawned. diff --git a/src/auto-reply/commands-registry.data.ts b/src/auto-reply/commands-registry.data.ts index 5a7f3277e..eb3e6f6d5 100644 --- a/src/auto-reply/commands-registry.data.ts +++ b/src/auto-reply/commands-registry.data.ts @@ -262,6 +262,28 @@ function buildChatCommands(): ChatCommandDefinition[] { textAlias: "/whoami", category: "status", }), + defineChatCommand({ + key: "session", + nativeName: "session", + description: "Manage session-level settings (for example /session ttl).", + textAlias: "/session", + category: "session", + args: [ + { + name: "action", + description: "ttl", + type: "string", + choices: ["ttl"], + }, + { + name: "value", + description: "Duration (24h, 90m) or off", + type: "string", + captureRemaining: true, + }, + ], + argsMenu: "auto", + }), defineChatCommand({ key: "subagents", nativeName: "subagents", @@ -289,6 +311,35 @@ function buildChatCommands(): ChatCommandDefinition[] { ], argsMenu: "auto", }), + defineChatCommand({ + key: "focus", + nativeName: "focus", + description: "Bind this Discord thread (or a new one) to a session target.", + textAlias: "/focus", + category: "management", + args: [ + { + name: "target", + description: "Subagent label/index or session key/id/label", + type: "string", + captureRemaining: true, + }, + ], + }), + defineChatCommand({ + key: "unfocus", + nativeName: "unfocus", + description: "Remove the current Discord thread binding.", + textAlias: "/unfocus", + category: "management", + }), + defineChatCommand({ + key: "agents", + nativeName: "agents", + description: "List thread-bound agents for this session.", + textAlias: "/agents", + category: "management", + }), defineChatCommand({ key: "kill", nativeName: "kill", diff --git a/src/auto-reply/reply/commands-core.ts b/src/auto-reply/reply/commands-core.ts index 11de311ee..40f1d49e7 100644 --- a/src/auto-reply/reply/commands-core.ts +++ b/src/auto-reply/reply/commands-core.ts @@ -23,6 +23,7 @@ import { handleAbortTrigger, handleActivationCommand, handleRestartCommand, + handleSessionCommand, handleSendPolicyCommand, handleStopCommand, handleUsageCommand, @@ -47,6 +48,7 @@ export async function handleCommands(params: HandleCommandsParams): Promise { + const getThreadBindingManagerMock = vi.fn(); + const setThreadBindingTtlBySessionKeyMock = vi.fn(); + return { + getThreadBindingManagerMock, + setThreadBindingTtlBySessionKeyMock, + }; +}); + +vi.mock("../../discord/monitor/thread-bindings.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + getThreadBindingManager: hoisted.getThreadBindingManagerMock, + setThreadBindingTtlBySessionKey: hoisted.setThreadBindingTtlBySessionKeyMock, + }; +}); + +const { handleSessionCommand } = await import("./commands-session.js"); +const { buildCommandTestParams } = await import("./commands.test-harness.js"); + +const baseCfg = { + session: { mainKey: "main", scope: "per-sender" }, +} satisfies OpenClawConfig; + +type FakeBinding = { + threadId: string; + targetSessionKey: string; + expiresAt?: number; + boundBy?: string; +}; + +function createDiscordCommandParams(commandBody: string, overrides?: Record) { + return buildCommandTestParams(commandBody, baseCfg, { + Provider: "discord", + Surface: "discord", + OriginatingChannel: "discord", + OriginatingTo: "channel:thread-1", + AccountId: "default", + MessageThreadId: "thread-1", + ...overrides, + }); +} + +function createFakeThreadBindingManager(binding: FakeBinding | null) { + return { + getByThreadId: vi.fn((_threadId: string) => binding), + }; +} + +describe("/session ttl", () => { + beforeEach(() => { + hoisted.getThreadBindingManagerMock.mockReset(); + hoisted.setThreadBindingTtlBySessionKeyMock.mockReset(); + vi.useRealTimers(); + }); + + it("sets ttl for the focused session", async () => { + const binding: FakeBinding = { + threadId: "thread-1", + targetSessionKey: "agent:main:subagent:child", + }; + hoisted.getThreadBindingManagerMock.mockReturnValue(createFakeThreadBindingManager(binding)); + hoisted.setThreadBindingTtlBySessionKeyMock.mockReturnValue([ + { + ...binding, + boundAt: Date.now(), + expiresAt: new Date("2026-02-21T02:00:00.000Z").getTime(), + }, + ]); + + const result = await handleSessionCommand(createDiscordCommandParams("/session ttl 2h"), true); + const text = result?.reply?.text ?? ""; + + expect(hoisted.setThreadBindingTtlBySessionKeyMock).toHaveBeenCalledWith({ + targetSessionKey: "agent:main:subagent:child", + accountId: "default", + ttlMs: 2 * 60 * 60 * 1000, + }); + expect(text).toContain("Session TTL set to 2h"); + expect(text).toContain("2026-02-21T02:00:00.000Z"); + }); + + it("shows active ttl when no value is provided", async () => { + vi.useFakeTimers(); + vi.setSystemTime(new Date("2026-02-20T00:00:00.000Z")); + + const binding: FakeBinding = { + threadId: "thread-1", + targetSessionKey: "agent:main:subagent:child", + expiresAt: new Date("2026-02-20T02:00:00.000Z").getTime(), + }; + hoisted.getThreadBindingManagerMock.mockReturnValue(createFakeThreadBindingManager(binding)); + + const result = await handleSessionCommand(createDiscordCommandParams("/session ttl"), true); + expect(result?.reply?.text).toContain("Session TTL active (2h"); + }); + + it("disables ttl when set to off", async () => { + const binding: FakeBinding = { + threadId: "thread-1", + targetSessionKey: "agent:main:subagent:child", + expiresAt: new Date("2026-02-20T02:00:00.000Z").getTime(), + }; + hoisted.getThreadBindingManagerMock.mockReturnValue(createFakeThreadBindingManager(binding)); + hoisted.setThreadBindingTtlBySessionKeyMock.mockReturnValue([ + { ...binding, boundAt: Date.now(), expiresAt: undefined }, + ]); + + const result = await handleSessionCommand(createDiscordCommandParams("/session ttl off"), true); + + expect(hoisted.setThreadBindingTtlBySessionKeyMock).toHaveBeenCalledWith({ + targetSessionKey: "agent:main:subagent:child", + accountId: "default", + ttlMs: 0, + }); + expect(result?.reply?.text).toContain("Session TTL disabled"); + }); + + it("is unavailable outside discord", async () => { + const params = buildCommandTestParams("/session ttl 2h", baseCfg); + const result = await handleSessionCommand(params, true); + expect(result?.reply?.text).toContain("currently available for Discord thread-bound sessions"); + }); + + it("requires binding owner for ttl updates", async () => { + const binding: FakeBinding = { + threadId: "thread-1", + targetSessionKey: "agent:main:subagent:child", + boundBy: "owner-1", + }; + hoisted.getThreadBindingManagerMock.mockReturnValue(createFakeThreadBindingManager(binding)); + + const result = await handleSessionCommand( + createDiscordCommandParams("/session ttl 2h", { + SenderId: "other-user", + }), + true, + ); + + expect(hoisted.setThreadBindingTtlBySessionKeyMock).not.toHaveBeenCalled(); + expect(result?.reply?.text).toContain("Only owner-1 can update session TTL"); + }); +}); diff --git a/src/auto-reply/reply/commands-session.ts b/src/auto-reply/reply/commands-session.ts index 168364adc..ea5bd9200 100644 --- a/src/auto-reply/reply/commands-session.ts +++ b/src/auto-reply/reply/commands-session.ts @@ -1,7 +1,13 @@ import { abortEmbeddedPiRun } from "../../agents/pi-embedded.js"; +import { parseDurationMs } from "../../cli/parse-duration.js"; import { isRestartEnabled } from "../../config/commands.js"; import type { SessionEntry } from "../../config/sessions.js"; import { updateSessionStore } from "../../config/sessions.js"; +import { + formatThreadBindingTtlLabel, + getThreadBindingManager, + setThreadBindingTtlBySessionKey, +} from "../../discord/monitor/thread-bindings.js"; import { logVerbose } from "../../globals.js"; import { createInternalHookEvent, triggerInternalHook } from "../../hooks/internal-hooks.js"; import { scheduleGatewaySigusr1Restart, triggerOpenClawRestart } from "../../infra/restart.js"; @@ -41,6 +47,53 @@ function resolveAbortTarget(params: { return { entry: undefined, key: targetSessionKey, sessionId: undefined }; } +const SESSION_COMMAND_PREFIX = "/session"; +const SESSION_TTL_OFF_VALUES = new Set(["off", "disable", "disabled", "none", "0"]); + +function isDiscordSurface(params: Parameters[0]): boolean { + const channel = + params.ctx.OriginatingChannel ?? + params.command.channel ?? + params.ctx.Surface ?? + params.ctx.Provider; + return ( + String(channel ?? "") + .trim() + .toLowerCase() === "discord" + ); +} + +function resolveDiscordAccountId(params: Parameters[0]): string { + const accountId = typeof params.ctx.AccountId === "string" ? params.ctx.AccountId.trim() : ""; + return accountId || "default"; +} + +function resolveSessionCommandUsage() { + return "Usage: /session ttl (example: /session ttl 24h)"; +} + +function parseSessionTtlMs(raw: string): number { + const normalized = raw.trim().toLowerCase(); + if (!normalized) { + throw new Error("missing ttl"); + } + if (SESSION_TTL_OFF_VALUES.has(normalized)) { + return 0; + } + if (/^\d+(?:\.\d+)?$/.test(normalized)) { + const hours = Number(normalized); + if (!Number.isFinite(hours) || hours < 0) { + throw new Error("invalid ttl"); + } + return Math.round(hours * 60 * 60 * 1000); + } + return parseDurationMs(normalized, { defaultUnit: "h" }); +} + +function formatSessionExpiry(expiresAt: number) { + return new Date(expiresAt).toISOString(); +} + async function applyAbortTarget(params: { abortTarget: ReturnType; sessionStore?: Record; @@ -244,6 +297,133 @@ export const handleUsageCommand: CommandHandler = async (params, allowTextComman }; }; +export const handleSessionCommand: CommandHandler = async (params, allowTextCommands) => { + if (!allowTextCommands) { + return null; + } + const normalized = params.command.commandBodyNormalized; + if (!/^\/session(?:\s|$)/.test(normalized)) { + return null; + } + if (!params.command.isAuthorizedSender) { + logVerbose( + `Ignoring /session from unauthorized sender: ${params.command.senderId || ""}`, + ); + return { shouldContinue: false }; + } + + const rest = normalized.slice(SESSION_COMMAND_PREFIX.length).trim(); + const tokens = rest.split(/\s+/).filter(Boolean); + const action = tokens[0]?.toLowerCase(); + if (action !== "ttl") { + return { + shouldContinue: false, + reply: { text: resolveSessionCommandUsage() }, + }; + } + + if (!isDiscordSurface(params)) { + return { + shouldContinue: false, + reply: { text: "⚠️ /session ttl is currently available for Discord thread-bound sessions." }, + }; + } + + const threadId = + params.ctx.MessageThreadId != null ? String(params.ctx.MessageThreadId).trim() : ""; + if (!threadId) { + return { + shouldContinue: false, + reply: { text: "⚠️ /session ttl must be run inside a focused Discord thread." }, + }; + } + + const accountId = resolveDiscordAccountId(params); + const threadBindings = getThreadBindingManager(accountId); + if (!threadBindings) { + return { + shouldContinue: false, + reply: { text: "⚠️ Discord thread bindings are unavailable for this account." }, + }; + } + + const binding = threadBindings.getByThreadId(threadId); + if (!binding) { + return { + shouldContinue: false, + reply: { text: "ℹ️ This thread is not currently focused." }, + }; + } + + const ttlArgRaw = tokens.slice(1).join(""); + if (!ttlArgRaw) { + const expiresAt = binding.expiresAt; + if (typeof expiresAt === "number" && Number.isFinite(expiresAt) && expiresAt > Date.now()) { + return { + shouldContinue: false, + reply: { + text: `ℹ️ Session TTL active (${formatThreadBindingTtlLabel(expiresAt - Date.now())}, auto-unfocus at ${formatSessionExpiry(expiresAt)}).`, + }, + }; + } + return { + shouldContinue: false, + reply: { text: "ℹ️ Session TTL is currently disabled for this focused session." }, + }; + } + + const senderId = params.command.senderId?.trim() || ""; + if (binding.boundBy && binding.boundBy !== "system" && senderId && senderId !== binding.boundBy) { + return { + shouldContinue: false, + reply: { text: `⚠️ Only ${binding.boundBy} can update session TTL for this thread.` }, + }; + } + + let ttlMs: number; + try { + ttlMs = parseSessionTtlMs(ttlArgRaw); + } catch { + return { + shouldContinue: false, + reply: { text: resolveSessionCommandUsage() }, + }; + } + + const updatedBindings = setThreadBindingTtlBySessionKey({ + targetSessionKey: binding.targetSessionKey, + accountId, + ttlMs, + }); + if (updatedBindings.length === 0) { + return { + shouldContinue: false, + reply: { text: "⚠️ Failed to update session TTL for the current binding." }, + }; + } + + if (ttlMs <= 0) { + return { + shouldContinue: false, + reply: { + text: `✅ Session TTL disabled for ${updatedBindings.length} binding${updatedBindings.length === 1 ? "" : "s"}.`, + }, + }; + } + + const expiresAt = updatedBindings[0]?.expiresAt; + const expiryLabel = + typeof expiresAt === "number" && Number.isFinite(expiresAt) + ? formatSessionExpiry(expiresAt) + : "n/a"; + return { + shouldContinue: false, + reply: { + text: `✅ Session TTL set to ${formatThreadBindingTtlLabel(ttlMs)} for ${updatedBindings.length} binding${updatedBindings.length === 1 ? "" : "s"} (auto-unfocus at ${expiryLabel}).`, + }, + }; +}; + export const handleRestartCommand: CommandHandler = async (params, allowTextCommands) => { if (!allowTextCommands) { return null; diff --git a/src/auto-reply/reply/commands-subagents-focus.test.ts b/src/auto-reply/reply/commands-subagents-focus.test.ts new file mode 100644 index 000000000..420431210 --- /dev/null +++ b/src/auto-reply/reply/commands-subagents-focus.test.ts @@ -0,0 +1,331 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { + addSubagentRunForTests, + resetSubagentRegistryForTests, +} from "../../agents/subagent-registry.js"; +import type { OpenClawConfig } from "../../config/config.js"; + +const hoisted = vi.hoisted(() => { + const callGatewayMock = vi.fn(); + const getThreadBindingManagerMock = vi.fn(); + const resolveThreadBindingThreadNameMock = vi.fn(() => "🤖 codex"); + return { + callGatewayMock, + getThreadBindingManagerMock, + resolveThreadBindingThreadNameMock, + }; +}); + +vi.mock("../../gateway/call.js", () => ({ + callGateway: hoisted.callGatewayMock, +})); + +vi.mock("../../discord/monitor/thread-bindings.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + getThreadBindingManager: hoisted.getThreadBindingManagerMock, + resolveThreadBindingThreadName: hoisted.resolveThreadBindingThreadNameMock, + }; +}); + +vi.mock("../../config/config.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + loadConfig: () => ({}), + }; +}); + +// Prevent transitive import chain from reaching discord/monitor which needs https-proxy-agent. +vi.mock("../../discord/monitor/gateway-plugin.js", () => ({ + createDiscordGatewayPlugin: () => ({}), +})); + +const { handleSubagentsCommand } = await import("./commands-subagents.js"); +const { buildCommandTestParams } = await import("./commands-spawn.test-harness.js"); + +type FakeBinding = { + accountId: string; + channelId: string; + threadId: string; + targetKind: "subagent" | "acp"; + targetSessionKey: string; + agentId: string; + label?: string; + webhookId?: string; + webhookToken?: string; + boundBy: string; + boundAt: number; +}; + +function createFakeThreadBindingManager(initialBindings: FakeBinding[] = []) { + const byThread = new Map( + initialBindings.map((binding) => [binding.threadId, binding]), + ); + + const manager = { + getSessionTtlMs: vi.fn(() => 24 * 60 * 60 * 1000), + getByThreadId: vi.fn((threadId: string) => byThread.get(threadId)), + listBySessionKey: vi.fn((targetSessionKey: string) => + [...byThread.values()].filter((binding) => binding.targetSessionKey === targetSessionKey), + ), + listBindings: vi.fn(() => [...byThread.values()]), + bindTarget: vi.fn(async (params: Record) => { + const threadId = + typeof params.threadId === "string" && params.threadId.trim() + ? params.threadId.trim() + : "thread-created"; + const targetSessionKey = + typeof params.targetSessionKey === "string" ? params.targetSessionKey.trim() : ""; + const agentId = + typeof params.agentId === "string" && params.agentId.trim() + ? params.agentId.trim() + : "main"; + const binding: FakeBinding = { + accountId: "default", + channelId: + typeof params.channelId === "string" && params.channelId.trim() + ? params.channelId.trim() + : "parent-1", + threadId, + targetKind: + params.targetKind === "subagent" || params.targetKind === "acp" + ? params.targetKind + : "acp", + targetSessionKey, + agentId, + label: typeof params.label === "string" ? params.label : undefined, + boundBy: typeof params.boundBy === "string" ? params.boundBy : "system", + boundAt: Date.now(), + }; + byThread.set(threadId, binding); + return binding; + }), + unbindThread: vi.fn((params: { threadId: string }) => { + const binding = byThread.get(params.threadId) ?? null; + if (binding) { + byThread.delete(params.threadId); + } + return binding; + }), + }; + + return { manager, byThread }; +} + +const baseCfg = { + session: { mainKey: "main", scope: "per-sender" }, +} satisfies OpenClawConfig; + +function createDiscordCommandParams(commandBody: string) { + const params = buildCommandTestParams(commandBody, baseCfg, { + Provider: "discord", + Surface: "discord", + OriginatingChannel: "discord", + OriginatingTo: "channel:parent-1", + AccountId: "default", + MessageThreadId: "thread-1", + }); + params.command.senderId = "user-1"; + return params; +} + +describe("/focus, /unfocus, /agents", () => { + beforeEach(() => { + resetSubagentRegistryForTests(); + hoisted.callGatewayMock.mockReset(); + hoisted.getThreadBindingManagerMock.mockReset(); + hoisted.resolveThreadBindingThreadNameMock.mockReset().mockReturnValue("🤖 codex"); + }); + + it("/focus resolves ACP sessions and binds the current Discord thread", async () => { + const fake = createFakeThreadBindingManager(); + hoisted.getThreadBindingManagerMock.mockReturnValue(fake.manager); + hoisted.callGatewayMock.mockImplementation(async (request: unknown) => { + const method = (request as { method?: string }).method; + if (method === "sessions.resolve") { + return { key: "agent:codex-acp:session-1" }; + } + return {}; + }); + + const params = createDiscordCommandParams("/focus codex-acp"); + const result = await handleSubagentsCommand(params, true); + + expect(result?.reply?.text).toContain("bound this thread"); + expect(result?.reply?.text).toContain("(acp)"); + expect(fake.manager.bindTarget).toHaveBeenCalledWith( + expect.objectContaining({ + threadId: "thread-1", + createThread: false, + targetKind: "acp", + targetSessionKey: "agent:codex-acp:session-1", + introText: + "🤖 codex-acp session active (auto-unfocus in 24h). Messages here go directly to this session.", + }), + ); + }); + + it("/unfocus removes an active thread binding for the binding owner", async () => { + const fake = createFakeThreadBindingManager([ + { + accountId: "default", + channelId: "parent-1", + threadId: "thread-1", + targetKind: "subagent", + targetSessionKey: "agent:main:subagent:child", + agentId: "main", + label: "child", + boundBy: "user-1", + boundAt: Date.now(), + }, + ]); + hoisted.getThreadBindingManagerMock.mockReturnValue(fake.manager); + + const params = createDiscordCommandParams("/unfocus"); + const result = await handleSubagentsCommand(params, true); + + expect(result?.reply?.text).toContain("Thread unfocused"); + expect(fake.manager.unbindThread).toHaveBeenCalledWith( + expect.objectContaining({ + threadId: "thread-1", + reason: "manual", + }), + ); + }); + + it("/focus rejects rebinding when the thread is focused by another user", async () => { + const fake = createFakeThreadBindingManager([ + { + accountId: "default", + channelId: "parent-1", + threadId: "thread-1", + targetKind: "subagent", + targetSessionKey: "agent:main:subagent:child", + agentId: "main", + label: "child", + boundBy: "user-2", + boundAt: Date.now(), + }, + ]); + hoisted.getThreadBindingManagerMock.mockReturnValue(fake.manager); + hoisted.callGatewayMock.mockImplementation(async (request: unknown) => { + const method = (request as { method?: string }).method; + if (method === "sessions.resolve") { + return { key: "agent:codex-acp:session-1" }; + } + return {}; + }); + + const params = createDiscordCommandParams("/focus codex-acp"); + const result = await handleSubagentsCommand(params, true); + + expect(result?.reply?.text).toContain("Only user-2 can refocus this thread."); + expect(fake.manager.bindTarget).not.toHaveBeenCalled(); + }); + + it("/agents includes bound persistent sessions and requester-scoped ACP bindings", async () => { + addSubagentRunForTests({ + runId: "run-1", + childSessionKey: "agent:main:subagent:child-1", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + task: "test task", + cleanup: "keep", + label: "child-1", + createdAt: Date.now(), + }); + + const fake = createFakeThreadBindingManager([ + { + accountId: "default", + channelId: "parent-1", + threadId: "thread-1", + targetKind: "subagent", + targetSessionKey: "agent:main:subagent:child-1", + agentId: "main", + label: "child-1", + boundBy: "user-1", + boundAt: Date.now(), + }, + { + accountId: "default", + channelId: "parent-1", + threadId: "thread-2", + targetKind: "acp", + targetSessionKey: "agent:main:main", + agentId: "codex-acp", + label: "main-session", + boundBy: "user-1", + boundAt: Date.now(), + }, + { + accountId: "default", + channelId: "parent-1", + threadId: "thread-3", + targetKind: "acp", + targetSessionKey: "agent:codex-acp:session-2", + agentId: "codex-acp", + label: "codex-acp", + boundBy: "user-1", + boundAt: Date.now(), + }, + ]); + hoisted.getThreadBindingManagerMock.mockReturnValue(fake.manager); + + const params = createDiscordCommandParams("/agents"); + const result = await handleSubagentsCommand(params, true); + const text = result?.reply?.text ?? ""; + + expect(text).toContain("agents:"); + expect(text).toContain("thread:thread-1"); + expect(text).toContain("acp/session bindings:"); + expect(text).toContain("session:agent:main:main"); + expect(text).not.toContain("session:agent:codex-acp:session-2"); + }); + + it("/agents keeps finished session-mode runs visible while their thread binding remains", async () => { + addSubagentRunForTests({ + runId: "run-session-1", + childSessionKey: "agent:main:subagent:persistent-1", + requesterSessionKey: "agent:main:main", + requesterDisplayKey: "main", + task: "persistent task", + cleanup: "keep", + label: "persistent-1", + spawnMode: "session", + createdAt: Date.now(), + endedAt: Date.now(), + }); + + const fake = createFakeThreadBindingManager([ + { + accountId: "default", + channelId: "parent-1", + threadId: "thread-persistent-1", + targetKind: "subagent", + targetSessionKey: "agent:main:subagent:persistent-1", + agentId: "main", + label: "persistent-1", + boundBy: "user-1", + boundAt: Date.now(), + }, + ]); + hoisted.getThreadBindingManagerMock.mockReturnValue(fake.manager); + + const params = createDiscordCommandParams("/agents"); + const result = await handleSubagentsCommand(params, true); + const text = result?.reply?.text ?? ""; + + expect(text).toContain("agents:"); + expect(text).toContain("persistent-1"); + expect(text).toContain("thread:thread-persistent-1"); + }); + + it("/focus is discord-only", async () => { + const params = buildCommandTestParams("/focus codex-acp", baseCfg); + const result = await handleSubagentsCommand(params, true); + expect(result?.reply?.text).toContain("only available on Discord"); + }); +}); diff --git a/src/auto-reply/reply/commands-subagents-spawn.test.ts b/src/auto-reply/reply/commands-subagents-spawn.test.ts index f7655a2b5..e09392d00 100644 --- a/src/auto-reply/reply/commands-subagents-spawn.test.ts +++ b/src/auto-reply/reply/commands-subagents-spawn.test.ts @@ -11,6 +11,7 @@ const hoisted = vi.hoisted(() => { vi.mock("../../agents/subagent-spawn.js", () => ({ spawnSubagentDirect: (...args: unknown[]) => hoisted.spawnSubagentDirectMock(...args), + SUBAGENT_SPAWN_MODES: ["run", "session"], })); vi.mock("../../gateway/call.js", () => ({ @@ -93,6 +94,7 @@ describe("/subagents spawn command", () => { const [spawnParams, spawnCtx] = spawnSubagentDirectMock.mock.calls[0]; expect(spawnParams.task).toBe("do the thing"); expect(spawnParams.agentId).toBe("beta"); + expect(spawnParams.mode).toBe("run"); expect(spawnParams.cleanup).toBe("keep"); expect(spawnParams.expectsCompletionMessage).toBe(true); expect(spawnCtx.agentSessionKey).toBeDefined(); diff --git a/src/auto-reply/reply/commands-subagents.ts b/src/auto-reply/reply/commands-subagents.ts index 1eb0ad13f..7f1963c52 100644 --- a/src/auto-reply/reply/commands-subagents.ts +++ b/src/auto-reply/reply/commands-subagents.ts @@ -1,255 +1,38 @@ -import crypto from "node:crypto"; -import { AGENT_LANE_SUBAGENT } from "../../agents/lanes.js"; -import { abortEmbeddedPiRun } from "../../agents/pi-embedded.js"; -import type { SubagentRunRecord } from "../../agents/subagent-registry.js"; -import { - clearSubagentRunSteerRestart, - listSubagentRunsForRequester, - markSubagentRunTerminated, - markSubagentRunForSteerRestart, - replaceSubagentRunAfterSteer, -} from "../../agents/subagent-registry.js"; -import { spawnSubagentDirect } from "../../agents/subagent-spawn.js"; -import { - extractAssistantText, - resolveInternalSessionKey, - resolveMainSessionAlias, - sanitizeTextContent, - stripToolMessages, -} from "../../agents/tools/sessions-helpers.js"; -import { - type SessionEntry, - loadSessionStore, - resolveStorePath, - updateSessionStore, -} from "../../config/sessions.js"; -import { callGateway } from "../../gateway/call.js"; +import { listSubagentRunsForRequester } from "../../agents/subagent-registry.js"; import { logVerbose } from "../../globals.js"; -import { formatTimeAgo } from "../../infra/format-time/format-relative.ts"; -import { parseAgentSessionKey } from "../../routing/session-key.js"; -import { extractTextFromChatContent } from "../../shared/chat-content.js"; +import { handleSubagentsAgentsAction } from "./commands-subagents/action-agents.js"; +import { handleSubagentsFocusAction } from "./commands-subagents/action-focus.js"; +import { handleSubagentsHelpAction } from "./commands-subagents/action-help.js"; +import { handleSubagentsInfoAction } from "./commands-subagents/action-info.js"; +import { handleSubagentsKillAction } from "./commands-subagents/action-kill.js"; +import { handleSubagentsListAction } from "./commands-subagents/action-list.js"; +import { handleSubagentsLogAction } from "./commands-subagents/action-log.js"; +import { handleSubagentsSendAction } from "./commands-subagents/action-send.js"; +import { handleSubagentsSpawnAction } from "./commands-subagents/action-spawn.js"; +import { handleSubagentsUnfocusAction } from "./commands-subagents/action-unfocus.js"; import { - formatDurationCompact, - formatTokenUsageDisplay, - truncateLine, -} from "../../shared/subagents-format.js"; -import { INTERNAL_MESSAGE_CHANNEL } from "../../utils/message-channel.js"; -import { stopSubagentsForRequester } from "./abort.js"; + type SubagentsCommandContext, + extractMessageText, + resolveHandledPrefix, + resolveRequesterSessionKey, + resolveSubagentsAction, + stopWithText, +} from "./commands-subagents/shared.js"; import type { CommandHandler } from "./commands-types.js"; -import { clearSessionQueues } from "./queue.js"; -import { - formatRunLabel, - formatRunStatus, - resolveSubagentTargetFromRuns, - type SubagentTargetResolution, - sortSubagentRuns, -} from "./subagents-utils.js"; -const COMMAND = "/subagents"; -const COMMAND_KILL = "/kill"; -const COMMAND_STEER = "/steer"; -const COMMAND_TELL = "/tell"; -const ACTIONS = new Set(["list", "kill", "log", "send", "steer", "info", "spawn", "help"]); -const RECENT_WINDOW_MINUTES = 30; -const SUBAGENT_TASK_PREVIEW_MAX = 110; -const STEER_ABORT_SETTLE_TIMEOUT_MS = 5_000; - -function compactLine(value: string) { - return value.replace(/\s+/g, " ").trim(); -} - -function formatTaskPreview(value: string) { - return truncateLine(compactLine(value), SUBAGENT_TASK_PREVIEW_MAX); -} - -function resolveModelDisplay( - entry?: { - model?: unknown; - modelProvider?: unknown; - modelOverride?: unknown; - providerOverride?: unknown; - }, - fallbackModel?: string, -) { - const model = typeof entry?.model === "string" ? entry.model.trim() : ""; - const provider = typeof entry?.modelProvider === "string" ? entry.modelProvider.trim() : ""; - let combined = model.includes("/") ? model : model && provider ? `${provider}/${model}` : model; - if (!combined) { - // Fall back to override fields which are populated at spawn time, - // before the first run completes and writes model/modelProvider. - const overrideModel = - typeof entry?.modelOverride === "string" ? entry.modelOverride.trim() : ""; - const overrideProvider = - typeof entry?.providerOverride === "string" ? entry.providerOverride.trim() : ""; - combined = overrideModel.includes("/") - ? overrideModel - : overrideModel && overrideProvider - ? `${overrideProvider}/${overrideModel}` - : overrideModel; - } - if (!combined) { - combined = fallbackModel?.trim() || ""; - } - if (!combined) { - return "model n/a"; - } - const slash = combined.lastIndexOf("/"); - if (slash >= 0 && slash < combined.length - 1) { - return combined.slice(slash + 1); - } - return combined; -} - -function resolveDisplayStatus(entry: SubagentRunRecord) { - const status = formatRunStatus(entry); - return status === "error" ? "failed" : status; -} - -function formatSubagentListLine(params: { - entry: SubagentRunRecord; - index: number; - runtimeMs: number; - sessionEntry?: SessionEntry; -}) { - const usageText = formatTokenUsageDisplay(params.sessionEntry); - const label = truncateLine(formatRunLabel(params.entry, { maxLength: 48 }), 48); - const task = formatTaskPreview(params.entry.task); - const runtime = formatDurationCompact(params.runtimeMs); - const status = resolveDisplayStatus(params.entry); - return `${params.index}. ${label} (${resolveModelDisplay(params.sessionEntry, params.entry.model)}, ${runtime}${usageText ? `, ${usageText}` : ""}) ${status}${task.toLowerCase() !== label.toLowerCase() ? ` - ${task}` : ""}`; -} - -function formatTimestamp(valueMs?: number) { - if (!valueMs || !Number.isFinite(valueMs) || valueMs <= 0) { - return "n/a"; - } - return new Date(valueMs).toISOString(); -} - -function formatTimestampWithAge(valueMs?: number) { - if (!valueMs || !Number.isFinite(valueMs) || valueMs <= 0) { - return "n/a"; - } - return `${formatTimestamp(valueMs)} (${formatTimeAgo(Date.now() - valueMs, { fallback: "n/a" })})`; -} - -function resolveRequesterSessionKey( - params: Parameters[0], - opts?: { preferCommandTarget?: boolean }, -): string | undefined { - const commandTarget = params.ctx.CommandTargetSessionKey?.trim(); - const commandSession = params.sessionKey?.trim(); - const raw = opts?.preferCommandTarget - ? commandTarget || commandSession - : commandSession || commandTarget; - if (!raw) { - return undefined; - } - const { mainKey, alias } = resolveMainSessionAlias(params.cfg); - return resolveInternalSessionKey({ key: raw, alias, mainKey }); -} - -function resolveSubagentTarget( - runs: SubagentRunRecord[], - token: string | undefined, -): SubagentTargetResolution { - return resolveSubagentTargetFromRuns({ - runs, - token, - recentWindowMinutes: RECENT_WINDOW_MINUTES, - label: (entry) => formatRunLabel(entry), - errors: { - missingTarget: "Missing subagent id.", - invalidIndex: (value) => `Invalid subagent index: ${value}`, - unknownSession: (value) => `Unknown subagent session: ${value}`, - ambiguousLabel: (value) => `Ambiguous subagent label: ${value}`, - ambiguousLabelPrefix: (value) => `Ambiguous subagent label prefix: ${value}`, - ambiguousRunIdPrefix: (value) => `Ambiguous run id prefix: ${value}`, - unknownTarget: (value) => `Unknown subagent id: ${value}`, - }, - }); -} - -function buildSubagentsHelp() { - return [ - "Subagents", - "Usage:", - "- /subagents list", - "- /subagents kill ", - "- /subagents log [limit] [tools]", - "- /subagents info ", - "- /subagents send ", - "- /subagents steer ", - "- /subagents spawn [--model ] [--thinking ]", - "- /kill ", - "- /steer ", - "- /tell ", - "", - "Ids: use the list index (#), runId/session prefix, label, or full session key.", - ].join("\n"); -} - -type ChatMessage = { - role?: unknown; - content?: unknown; -}; - -export function extractMessageText(message: ChatMessage): { role: string; text: string } | null { - const role = typeof message.role === "string" ? message.role : ""; - const shouldSanitize = role === "assistant"; - const text = extractTextFromChatContent(message.content, { - sanitizeText: shouldSanitize ? sanitizeTextContent : undefined, - }); - return text ? { role, text } : null; -} - -function formatLogLines(messages: ChatMessage[]) { - const lines: string[] = []; - for (const msg of messages) { - const extracted = extractMessageText(msg); - if (!extracted) { - continue; - } - const label = extracted.role === "assistant" ? "Assistant" : "User"; - lines.push(`${label}: ${extracted.text}`); - } - return lines; -} - -type SessionStoreCache = Map>; - -function loadSubagentSessionEntry( - params: Parameters[0], - childKey: string, - storeCache?: SessionStoreCache, -) { - const parsed = parseAgentSessionKey(childKey); - const storePath = resolveStorePath(params.cfg.session?.store, { agentId: parsed?.agentId }); - let store = storeCache?.get(storePath); - if (!store) { - store = loadSessionStore(storePath); - storeCache?.set(storePath, store); - } - return { storePath, store, entry: store[childKey] }; -} +export { extractMessageText }; export const handleSubagentsCommand: CommandHandler = async (params, allowTextCommands) => { if (!allowTextCommands) { return null; } + const normalized = params.command.commandBodyNormalized; - const handledPrefix = normalized.startsWith(COMMAND) - ? COMMAND - : normalized.startsWith(COMMAND_KILL) - ? COMMAND_KILL - : normalized.startsWith(COMMAND_STEER) - ? COMMAND_STEER - : normalized.startsWith(COMMAND_TELL) - ? COMMAND_TELL - : null; + const handledPrefix = resolveHandledPrefix(normalized); if (!handledPrefix) { return null; } + if (!params.command.isAuthorizedSender) { logVerbose( `Ignoring ${handledPrefix} from unauthorized sender: ${params.command.senderId || ""}`, @@ -259,438 +42,50 @@ export const handleSubagentsCommand: CommandHandler = async (params, allowTextCo const rest = normalized.slice(handledPrefix.length).trim(); const restTokens = rest.split(/\s+/).filter(Boolean); - let action = "list"; - if (handledPrefix === COMMAND) { - const [actionRaw] = restTokens; - action = actionRaw?.toLowerCase() || "list"; - if (!ACTIONS.has(action)) { - return { shouldContinue: false, reply: { text: buildSubagentsHelp() } }; - } - restTokens.splice(0, 1); - } else if (handledPrefix === COMMAND_KILL) { - action = "kill"; - } else { - action = "steer"; + const action = resolveSubagentsAction({ handledPrefix, restTokens }); + if (!action) { + return handleSubagentsHelpAction(); } const requesterKey = resolveRequesterSessionKey(params, { preferCommandTarget: action === "spawn", }); if (!requesterKey) { - return { shouldContinue: false, reply: { text: "⚠️ Missing session key." } }; - } - const runs = listSubagentRunsForRequester(requesterKey); - - if (action === "help") { - return { shouldContinue: false, reply: { text: buildSubagentsHelp() } }; + return stopWithText("⚠️ Missing session key."); } - if (action === "list") { - const sorted = sortSubagentRuns(runs); - const now = Date.now(); - const recentCutoff = now - RECENT_WINDOW_MINUTES * 60_000; - const storeCache: SessionStoreCache = new Map(); - let index = 1; - const mapRuns = ( - entries: SubagentRunRecord[], - runtimeMs: (entry: SubagentRunRecord) => number, - ) => - entries.map((entry) => { - const { entry: sessionEntry } = loadSubagentSessionEntry( - params, - entry.childSessionKey, - storeCache, - ); - const line = formatSubagentListLine({ - entry, - index, - runtimeMs: runtimeMs(entry), - sessionEntry, - }); - index += 1; - return line; - }); - const activeEntries = sorted.filter((entry) => !entry.endedAt); - const activeLines = mapRuns( - activeEntries, - (entry) => now - (entry.startedAt ?? entry.createdAt), - ); - const recentEntries = sorted.filter( - (entry) => !!entry.endedAt && (entry.endedAt ?? 0) >= recentCutoff, - ); - const recentLines = mapRuns( - recentEntries, - (entry) => (entry.endedAt ?? now) - (entry.startedAt ?? entry.createdAt), - ); + const ctx: SubagentsCommandContext = { + params, + handledPrefix, + requesterKey, + runs: listSubagentRunsForRequester(requesterKey), + restTokens, + }; - const lines = ["active subagents:", "-----"]; - if (activeLines.length === 0) { - lines.push("(none)"); - } else { - lines.push(activeLines.join("\n")); - } - lines.push("", `recent subagents (last ${RECENT_WINDOW_MINUTES}m):`, "-----"); - if (recentLines.length === 0) { - lines.push("(none)"); - } else { - lines.push(recentLines.join("\n")); - } - return { shouldContinue: false, reply: { text: lines.join("\n") } }; + switch (action) { + case "help": + return handleSubagentsHelpAction(); + case "agents": + return handleSubagentsAgentsAction(ctx); + case "focus": + return await handleSubagentsFocusAction(ctx); + case "unfocus": + return handleSubagentsUnfocusAction(ctx); + case "list": + return handleSubagentsListAction(ctx); + case "kill": + return await handleSubagentsKillAction(ctx); + case "info": + return handleSubagentsInfoAction(ctx); + case "log": + return await handleSubagentsLogAction(ctx); + case "send": + return await handleSubagentsSendAction(ctx, false); + case "steer": + return await handleSubagentsSendAction(ctx, true); + case "spawn": + return await handleSubagentsSpawnAction(ctx); + default: + return handleSubagentsHelpAction(); } - - if (action === "kill") { - const target = restTokens[0]; - if (!target) { - return { - shouldContinue: false, - reply: { - text: - handledPrefix === COMMAND - ? "Usage: /subagents kill " - : "Usage: /kill ", - }, - }; - } - if (target === "all" || target === "*") { - stopSubagentsForRequester({ - cfg: params.cfg, - requesterSessionKey: requesterKey, - }); - return { shouldContinue: false }; - } - const resolved = resolveSubagentTarget(runs, target); - if (!resolved.entry) { - return { - shouldContinue: false, - reply: { text: `⚠️ ${resolved.error ?? "Unknown subagent."}` }, - }; - } - if (resolved.entry.endedAt) { - return { - shouldContinue: false, - reply: { text: `${formatRunLabel(resolved.entry)} is already finished.` }, - }; - } - - const childKey = resolved.entry.childSessionKey; - const { storePath, store, entry } = loadSubagentSessionEntry(params, childKey); - const sessionId = entry?.sessionId; - if (sessionId) { - abortEmbeddedPiRun(sessionId); - } - const cleared = clearSessionQueues([childKey, sessionId]); - if (cleared.followupCleared > 0 || cleared.laneCleared > 0) { - logVerbose( - `subagents kill: cleared followups=${cleared.followupCleared} lane=${cleared.laneCleared} keys=${cleared.keys.join(",")}`, - ); - } - if (entry) { - entry.abortedLastRun = true; - entry.updatedAt = Date.now(); - store[childKey] = entry; - await updateSessionStore(storePath, (nextStore) => { - nextStore[childKey] = entry; - }); - } - markSubagentRunTerminated({ - runId: resolved.entry.runId, - childSessionKey: childKey, - reason: "killed", - }); - // Cascade: also stop any sub-sub-agents spawned by this child. - stopSubagentsForRequester({ - cfg: params.cfg, - requesterSessionKey: childKey, - }); - return { shouldContinue: false }; - } - - if (action === "info") { - const target = restTokens[0]; - if (!target) { - return { shouldContinue: false, reply: { text: "ℹ️ Usage: /subagents info " } }; - } - const resolved = resolveSubagentTarget(runs, target); - if (!resolved.entry) { - return { - shouldContinue: false, - reply: { text: `⚠️ ${resolved.error ?? "Unknown subagent."}` }, - }; - } - const run = resolved.entry; - const { entry: sessionEntry } = loadSubagentSessionEntry(params, run.childSessionKey); - const runtime = - run.startedAt && Number.isFinite(run.startedAt) - ? (formatDurationCompact((run.endedAt ?? Date.now()) - run.startedAt) ?? "n/a") - : "n/a"; - const outcome = run.outcome - ? `${run.outcome.status}${run.outcome.error ? ` (${run.outcome.error})` : ""}` - : "n/a"; - const lines = [ - "ℹ️ Subagent info", - `Status: ${resolveDisplayStatus(run)}`, - `Label: ${formatRunLabel(run)}`, - `Task: ${run.task}`, - `Run: ${run.runId}`, - `Session: ${run.childSessionKey}`, - `SessionId: ${sessionEntry?.sessionId ?? "n/a"}`, - `Transcript: ${sessionEntry?.sessionFile ?? "n/a"}`, - `Runtime: ${runtime}`, - `Created: ${formatTimestampWithAge(run.createdAt)}`, - `Started: ${formatTimestampWithAge(run.startedAt)}`, - `Ended: ${formatTimestampWithAge(run.endedAt)}`, - `Cleanup: ${run.cleanup}`, - run.archiveAtMs ? `Archive: ${formatTimestampWithAge(run.archiveAtMs)}` : undefined, - run.cleanupHandled ? "Cleanup handled: yes" : undefined, - `Outcome: ${outcome}`, - ].filter(Boolean); - return { shouldContinue: false, reply: { text: lines.join("\n") } }; - } - - if (action === "log") { - const target = restTokens[0]; - if (!target) { - return { shouldContinue: false, reply: { text: "📜 Usage: /subagents log [limit]" } }; - } - const includeTools = restTokens.some((token) => token.toLowerCase() === "tools"); - const limitToken = restTokens.find((token) => /^\d+$/.test(token)); - const limit = limitToken ? Math.min(200, Math.max(1, Number.parseInt(limitToken, 10))) : 20; - const resolved = resolveSubagentTarget(runs, target); - if (!resolved.entry) { - return { - shouldContinue: false, - reply: { text: `⚠️ ${resolved.error ?? "Unknown subagent."}` }, - }; - } - const history = await callGateway<{ messages: Array }>({ - method: "chat.history", - params: { sessionKey: resolved.entry.childSessionKey, limit }, - }); - const rawMessages = Array.isArray(history?.messages) ? history.messages : []; - const filtered = includeTools ? rawMessages : stripToolMessages(rawMessages); - const lines = formatLogLines(filtered as ChatMessage[]); - const header = `📜 Subagent log: ${formatRunLabel(resolved.entry)}`; - if (lines.length === 0) { - return { shouldContinue: false, reply: { text: `${header}\n(no messages)` } }; - } - return { shouldContinue: false, reply: { text: [header, ...lines].join("\n") } }; - } - - if (action === "send" || action === "steer") { - const steerRequested = action === "steer"; - const target = restTokens[0]; - const message = restTokens.slice(1).join(" ").trim(); - if (!target || !message) { - return { - shouldContinue: false, - reply: { - text: steerRequested - ? handledPrefix === COMMAND - ? "Usage: /subagents steer " - : `Usage: ${handledPrefix} ` - : "Usage: /subagents send ", - }, - }; - } - const resolved = resolveSubagentTarget(runs, target); - if (!resolved.entry) { - return { - shouldContinue: false, - reply: { text: `⚠️ ${resolved.error ?? "Unknown subagent."}` }, - }; - } - if (steerRequested && resolved.entry.endedAt) { - return { - shouldContinue: false, - reply: { text: `${formatRunLabel(resolved.entry)} is already finished.` }, - }; - } - const { entry: targetSessionEntry } = loadSubagentSessionEntry( - params, - resolved.entry.childSessionKey, - ); - const targetSessionId = - typeof targetSessionEntry?.sessionId === "string" && targetSessionEntry.sessionId.trim() - ? targetSessionEntry.sessionId.trim() - : undefined; - - if (steerRequested) { - // Suppress stale announce before interrupting the in-flight run. - markSubagentRunForSteerRestart(resolved.entry.runId); - - // Force an immediate interruption and make steer the next run. - if (targetSessionId) { - abortEmbeddedPiRun(targetSessionId); - } - const cleared = clearSessionQueues([resolved.entry.childSessionKey, targetSessionId]); - if (cleared.followupCleared > 0 || cleared.laneCleared > 0) { - logVerbose( - `subagents steer: cleared followups=${cleared.followupCleared} lane=${cleared.laneCleared} keys=${cleared.keys.join(",")}`, - ); - } - - // Best effort: wait for the interrupted run to settle so the steer - // message is appended on the existing conversation state. - try { - await callGateway({ - method: "agent.wait", - params: { - runId: resolved.entry.runId, - timeoutMs: STEER_ABORT_SETTLE_TIMEOUT_MS, - }, - timeoutMs: STEER_ABORT_SETTLE_TIMEOUT_MS + 2_000, - }); - } catch { - // Continue even if wait fails; steer should still be attempted. - } - } - - const idempotencyKey = crypto.randomUUID(); - let runId: string = idempotencyKey; - try { - const response = await callGateway<{ runId: string }>({ - method: "agent", - params: { - message, - sessionKey: resolved.entry.childSessionKey, - sessionId: targetSessionId, - idempotencyKey, - deliver: false, - channel: INTERNAL_MESSAGE_CHANNEL, - lane: AGENT_LANE_SUBAGENT, - timeout: 0, - }, - timeoutMs: 10_000, - }); - const responseRunId = typeof response?.runId === "string" ? response.runId : undefined; - if (responseRunId) { - runId = responseRunId; - } - } catch (err) { - if (steerRequested) { - // Replacement launch failed; restore announce behavior for the - // original run so completion is not silently suppressed. - clearSubagentRunSteerRestart(resolved.entry.runId); - } - const messageText = - err instanceof Error ? err.message : typeof err === "string" ? err : "error"; - return { shouldContinue: false, reply: { text: `send failed: ${messageText}` } }; - } - - if (steerRequested) { - replaceSubagentRunAfterSteer({ - previousRunId: resolved.entry.runId, - nextRunId: runId, - fallback: resolved.entry, - runTimeoutSeconds: resolved.entry.runTimeoutSeconds ?? 0, - }); - return { - shouldContinue: false, - reply: { - text: `steered ${formatRunLabel(resolved.entry)} (run ${runId.slice(0, 8)}).`, - }, - }; - } - - const waitMs = 30_000; - const wait = await callGateway<{ status?: string; error?: string }>({ - method: "agent.wait", - params: { runId, timeoutMs: waitMs }, - timeoutMs: waitMs + 2000, - }); - if (wait?.status === "timeout") { - return { - shouldContinue: false, - reply: { text: `⏳ Subagent still running (run ${runId.slice(0, 8)}).` }, - }; - } - if (wait?.status === "error") { - const waitError = typeof wait.error === "string" ? wait.error : "unknown error"; - return { - shouldContinue: false, - reply: { - text: `⚠️ Subagent error: ${waitError} (run ${runId.slice(0, 8)}).`, - }, - }; - } - - const history = await callGateway<{ messages: Array }>({ - method: "chat.history", - params: { sessionKey: resolved.entry.childSessionKey, limit: 50 }, - }); - const filtered = stripToolMessages(Array.isArray(history?.messages) ? history.messages : []); - const last = filtered.length > 0 ? filtered[filtered.length - 1] : undefined; - const replyText = last ? extractAssistantText(last) : undefined; - return { - shouldContinue: false, - reply: { - text: - replyText ?? `✅ Sent to ${formatRunLabel(resolved.entry)} (run ${runId.slice(0, 8)}).`, - }, - }; - } - - if (action === "spawn") { - const agentId = restTokens[0]; - // Parse remaining tokens: task text with optional --model and --thinking flags. - const taskParts: string[] = []; - let model: string | undefined; - let thinking: string | undefined; - for (let i = 1; i < restTokens.length; i++) { - if (restTokens[i] === "--model" && i + 1 < restTokens.length) { - i += 1; - model = restTokens[i]; - } else if (restTokens[i] === "--thinking" && i + 1 < restTokens.length) { - i += 1; - thinking = restTokens[i]; - } else { - taskParts.push(restTokens[i]); - } - } - const task = taskParts.join(" ").trim(); - if (!agentId || !task) { - return { - shouldContinue: false, - reply: { - text: "Usage: /subagents spawn [--model ] [--thinking ]", - }, - }; - } - - const commandTo = typeof params.command.to === "string" ? params.command.to.trim() : ""; - const originatingTo = - typeof params.ctx.OriginatingTo === "string" ? params.ctx.OriginatingTo.trim() : ""; - const fallbackTo = typeof params.ctx.To === "string" ? params.ctx.To.trim() : ""; - // OriginatingTo reflects the active conversation target and is safer than - // command.to for cross-surface command dispatch. - const normalizedTo = originatingTo || commandTo || fallbackTo || undefined; - - const result = await spawnSubagentDirect( - { task, agentId, model, thinking, cleanup: "keep", expectsCompletionMessage: true }, - { - agentSessionKey: requesterKey, - agentChannel: params.ctx.OriginatingChannel ?? params.command.channel, - agentAccountId: params.ctx.AccountId, - agentTo: normalizedTo, - agentThreadId: params.ctx.MessageThreadId, - agentGroupId: params.sessionEntry?.groupId ?? null, - agentGroupChannel: params.sessionEntry?.groupChannel ?? null, - agentGroupSpace: params.sessionEntry?.space ?? null, - }, - ); - if (result.status === "accepted") { - return { - shouldContinue: false, - reply: { - text: `Spawned subagent ${agentId} (session ${result.childSessionKey}, run ${result.runId?.slice(0, 8)}).`, - }, - }; - } - return { - shouldContinue: false, - reply: { text: `Spawn failed: ${result.error ?? result.status}` }, - }; - } - - return { shouldContinue: false, reply: { text: buildSubagentsHelp() } }; }; diff --git a/src/auto-reply/reply/commands-subagents/action-agents.ts b/src/auto-reply/reply/commands-subagents/action-agents.ts new file mode 100644 index 000000000..bdf14aeec --- /dev/null +++ b/src/auto-reply/reply/commands-subagents/action-agents.ts @@ -0,0 +1,55 @@ +import { getThreadBindingManager } from "../../../discord/monitor/thread-bindings.js"; +import type { CommandHandlerResult } from "../commands-types.js"; +import { formatRunLabel, sortSubagentRuns } from "../subagents-utils.js"; +import { + type SubagentsCommandContext, + isDiscordSurface, + resolveDiscordAccountId, + stopWithText, +} from "./shared.js"; + +export function handleSubagentsAgentsAction(ctx: SubagentsCommandContext): CommandHandlerResult { + const { params, requesterKey, runs } = ctx; + const isDiscord = isDiscordSurface(params); + const accountId = isDiscord ? resolveDiscordAccountId(params) : undefined; + const threadBindings = accountId ? getThreadBindingManager(accountId) : null; + const visibleRuns = sortSubagentRuns(runs).filter((entry) => { + if (!entry.endedAt) { + return true; + } + return Boolean(threadBindings?.listBySessionKey(entry.childSessionKey)[0]); + }); + + const lines = ["agents:", "-----"]; + if (visibleRuns.length === 0) { + lines.push("(none)"); + } else { + let index = 1; + for (const entry of visibleRuns) { + const threadBinding = threadBindings?.listBySessionKey(entry.childSessionKey)[0]; + const bindingText = threadBinding + ? `thread:${threadBinding.threadId}` + : isDiscord + ? "unbound" + : "bindings available on discord"; + lines.push(`${index}. ${formatRunLabel(entry)} (${bindingText})`); + index += 1; + } + } + + if (threadBindings) { + const acpBindings = threadBindings + .listBindings() + .filter((entry) => entry.targetKind === "acp" && entry.targetSessionKey === requesterKey); + if (acpBindings.length > 0) { + lines.push("", "acp/session bindings:", "-----"); + for (const binding of acpBindings) { + lines.push( + `- ${binding.label ?? binding.targetSessionKey} (thread:${binding.threadId}, session:${binding.targetSessionKey})`, + ); + } + } + } + + return stopWithText(lines.join("\n")); +} diff --git a/src/auto-reply/reply/commands-subagents/action-focus.ts b/src/auto-reply/reply/commands-subagents/action-focus.ts new file mode 100644 index 000000000..1329c7186 --- /dev/null +++ b/src/auto-reply/reply/commands-subagents/action-focus.ts @@ -0,0 +1,90 @@ +import { + getThreadBindingManager, + resolveThreadBindingIntroText, + resolveThreadBindingThreadName, +} from "../../../discord/monitor/thread-bindings.js"; +import type { CommandHandlerResult } from "../commands-types.js"; +import { + type SubagentsCommandContext, + isDiscordSurface, + resolveDiscordAccountId, + resolveDiscordChannelIdForFocus, + resolveFocusTargetSession, + stopWithText, +} from "./shared.js"; + +export async function handleSubagentsFocusAction( + ctx: SubagentsCommandContext, +): Promise { + const { params, runs, restTokens } = ctx; + if (!isDiscordSurface(params)) { + return stopWithText("⚠️ /focus is only available on Discord."); + } + + const token = restTokens.join(" ").trim(); + if (!token) { + return stopWithText("Usage: /focus "); + } + + const accountId = resolveDiscordAccountId(params); + const threadBindings = getThreadBindingManager(accountId); + if (!threadBindings) { + return stopWithText("⚠️ Discord thread bindings are unavailable for this account."); + } + + const focusTarget = await resolveFocusTargetSession({ runs, token }); + if (!focusTarget) { + return stopWithText(`⚠️ Unable to resolve focus target: ${token}`); + } + + const currentThreadId = + params.ctx.MessageThreadId != null ? String(params.ctx.MessageThreadId).trim() : ""; + const parentChannelId = currentThreadId ? undefined : resolveDiscordChannelIdForFocus(params); + if (!currentThreadId && !parentChannelId) { + return stopWithText("⚠️ Could not resolve a Discord channel for /focus."); + } + + const senderId = params.command.senderId?.trim() || ""; + if (currentThreadId) { + const existingBinding = threadBindings.getByThreadId(currentThreadId); + if ( + existingBinding && + existingBinding.boundBy && + existingBinding.boundBy !== "system" && + senderId && + senderId !== existingBinding.boundBy + ) { + return stopWithText(`⚠️ Only ${existingBinding.boundBy} can refocus this thread.`); + } + } + + const label = focusTarget.label || token; + const binding = await threadBindings.bindTarget({ + threadId: currentThreadId || undefined, + channelId: parentChannelId, + createThread: !currentThreadId, + threadName: resolveThreadBindingThreadName({ + agentId: focusTarget.agentId, + label, + }), + targetKind: focusTarget.targetKind, + targetSessionKey: focusTarget.targetSessionKey, + agentId: focusTarget.agentId, + label, + boundBy: senderId || "unknown", + introText: resolveThreadBindingIntroText({ + agentId: focusTarget.agentId, + label, + sessionTtlMs: threadBindings.getSessionTtlMs(), + }), + }); + + if (!binding) { + return stopWithText("⚠️ Failed to bind a Discord thread to the target session."); + } + + const actionText = currentThreadId + ? `bound this thread to ${binding.targetSessionKey}` + : `created thread ${binding.threadId} and bound it to ${binding.targetSessionKey}`; + return stopWithText(`✅ ${actionText} (${binding.targetKind}).`); +} diff --git a/src/auto-reply/reply/commands-subagents/action-help.ts b/src/auto-reply/reply/commands-subagents/action-help.ts new file mode 100644 index 000000000..d6df8a31e --- /dev/null +++ b/src/auto-reply/reply/commands-subagents/action-help.ts @@ -0,0 +1,6 @@ +import type { CommandHandlerResult } from "../commands-types.js"; +import { buildSubagentsHelp, stopWithText } from "./shared.js"; + +export function handleSubagentsHelpAction(): CommandHandlerResult { + return stopWithText(buildSubagentsHelp()); +} diff --git a/src/auto-reply/reply/commands-subagents/action-info.ts b/src/auto-reply/reply/commands-subagents/action-info.ts new file mode 100644 index 000000000..de54b4eea --- /dev/null +++ b/src/auto-reply/reply/commands-subagents/action-info.ts @@ -0,0 +1,59 @@ +import { loadSessionStore, resolveStorePath } from "../../../config/sessions.js"; +import { formatDurationCompact } from "../../../shared/subagents-format.js"; +import type { CommandHandlerResult } from "../commands-types.js"; +import { formatRunLabel } from "../subagents-utils.js"; +import { + type SubagentsCommandContext, + formatTimestampWithAge, + loadSubagentSessionEntry, + resolveDisplayStatus, + resolveSubagentEntryForToken, + stopWithText, +} from "./shared.js"; + +export function handleSubagentsInfoAction(ctx: SubagentsCommandContext): CommandHandlerResult { + const { params, runs, restTokens } = ctx; + const target = restTokens[0]; + if (!target) { + return stopWithText("ℹ️ Usage: /subagents info "); + } + + const targetResolution = resolveSubagentEntryForToken(runs, target); + if ("reply" in targetResolution) { + return targetResolution.reply; + } + + const run = targetResolution.entry; + const { entry: sessionEntry } = loadSubagentSessionEntry(params, run.childSessionKey, { + loadSessionStore, + resolveStorePath, + }); + const runtime = + run.startedAt && Number.isFinite(run.startedAt) + ? (formatDurationCompact((run.endedAt ?? Date.now()) - run.startedAt) ?? "n/a") + : "n/a"; + const outcome = run.outcome + ? `${run.outcome.status}${run.outcome.error ? ` (${run.outcome.error})` : ""}` + : "n/a"; + + const lines = [ + "ℹ️ Subagent info", + `Status: ${resolveDisplayStatus(run)}`, + `Label: ${formatRunLabel(run)}`, + `Task: ${run.task}`, + `Run: ${run.runId}`, + `Session: ${run.childSessionKey}`, + `SessionId: ${sessionEntry?.sessionId ?? "n/a"}`, + `Transcript: ${sessionEntry?.sessionFile ?? "n/a"}`, + `Runtime: ${runtime}`, + `Created: ${formatTimestampWithAge(run.createdAt)}`, + `Started: ${formatTimestampWithAge(run.startedAt)}`, + `Ended: ${formatTimestampWithAge(run.endedAt)}`, + `Cleanup: ${run.cleanup}`, + run.archiveAtMs ? `Archive: ${formatTimestampWithAge(run.archiveAtMs)}` : undefined, + run.cleanupHandled ? "Cleanup handled: yes" : undefined, + `Outcome: ${outcome}`, + ].filter(Boolean); + + return stopWithText(lines.join("\n")); +} diff --git a/src/auto-reply/reply/commands-subagents/action-kill.ts b/src/auto-reply/reply/commands-subagents/action-kill.ts new file mode 100644 index 000000000..cb91b4432 --- /dev/null +++ b/src/auto-reply/reply/commands-subagents/action-kill.ts @@ -0,0 +1,86 @@ +import { abortEmbeddedPiRun } from "../../../agents/pi-embedded.js"; +import { markSubagentRunTerminated } from "../../../agents/subagent-registry.js"; +import { + loadSessionStore, + resolveStorePath, + updateSessionStore, +} from "../../../config/sessions.js"; +import { logVerbose } from "../../../globals.js"; +import { stopSubagentsForRequester } from "../abort.js"; +import type { CommandHandlerResult } from "../commands-types.js"; +import { clearSessionQueues } from "../queue.js"; +import { formatRunLabel } from "../subagents-utils.js"; +import { + type SubagentsCommandContext, + COMMAND, + loadSubagentSessionEntry, + resolveSubagentEntryForToken, + stopWithText, +} from "./shared.js"; + +export async function handleSubagentsKillAction( + ctx: SubagentsCommandContext, +): Promise { + const { params, handledPrefix, requesterKey, runs, restTokens } = ctx; + const target = restTokens[0]; + if (!target) { + return stopWithText( + handledPrefix === COMMAND ? "Usage: /subagents kill " : "Usage: /kill ", + ); + } + + if (target === "all" || target === "*") { + stopSubagentsForRequester({ + cfg: params.cfg, + requesterSessionKey: requesterKey, + }); + return { shouldContinue: false }; + } + + const targetResolution = resolveSubagentEntryForToken(runs, target); + if ("reply" in targetResolution) { + return targetResolution.reply; + } + if (targetResolution.entry.endedAt) { + return stopWithText(`${formatRunLabel(targetResolution.entry)} is already finished.`); + } + + const childKey = targetResolution.entry.childSessionKey; + const { storePath, store, entry } = loadSubagentSessionEntry(params, childKey, { + loadSessionStore, + resolveStorePath, + }); + const sessionId = entry?.sessionId; + if (sessionId) { + abortEmbeddedPiRun(sessionId); + } + + const cleared = clearSessionQueues([childKey, sessionId]); + if (cleared.followupCleared > 0 || cleared.laneCleared > 0) { + logVerbose( + `subagents kill: cleared followups=${cleared.followupCleared} lane=${cleared.laneCleared} keys=${cleared.keys.join(",")}`, + ); + } + + if (entry) { + entry.abortedLastRun = true; + entry.updatedAt = Date.now(); + store[childKey] = entry; + await updateSessionStore(storePath, (nextStore) => { + nextStore[childKey] = entry; + }); + } + + markSubagentRunTerminated({ + runId: targetResolution.entry.runId, + childSessionKey: childKey, + reason: "killed", + }); + + stopSubagentsForRequester({ + cfg: params.cfg, + requesterSessionKey: childKey, + }); + + return { shouldContinue: false }; +} diff --git a/src/auto-reply/reply/commands-subagents/action-list.ts b/src/auto-reply/reply/commands-subagents/action-list.ts new file mode 100644 index 000000000..5b9bfd252 --- /dev/null +++ b/src/auto-reply/reply/commands-subagents/action-list.ts @@ -0,0 +1,66 @@ +import { loadSessionStore, resolveStorePath } from "../../../config/sessions.js"; +import type { CommandHandlerResult } from "../commands-types.js"; +import { sortSubagentRuns } from "../subagents-utils.js"; +import { + type SessionStoreCache, + type SubagentsCommandContext, + RECENT_WINDOW_MINUTES, + formatSubagentListLine, + loadSubagentSessionEntry, + stopWithText, +} from "./shared.js"; + +export function handleSubagentsListAction(ctx: SubagentsCommandContext): CommandHandlerResult { + const { params, runs } = ctx; + const sorted = sortSubagentRuns(runs); + const now = Date.now(); + const recentCutoff = now - RECENT_WINDOW_MINUTES * 60_000; + const storeCache: SessionStoreCache = new Map(); + let index = 1; + + const mapRuns = (entries: typeof runs, runtimeMs: (entry: (typeof runs)[number]) => number) => + entries.map((entry) => { + const { entry: sessionEntry } = loadSubagentSessionEntry( + params, + entry.childSessionKey, + { + loadSessionStore, + resolveStorePath, + }, + storeCache, + ); + const line = formatSubagentListLine({ + entry, + index, + runtimeMs: runtimeMs(entry), + sessionEntry, + }); + index += 1; + return line; + }); + + const activeEntries = sorted.filter((entry) => !entry.endedAt); + const activeLines = mapRuns(activeEntries, (entry) => now - (entry.startedAt ?? entry.createdAt)); + const recentEntries = sorted.filter( + (entry) => !!entry.endedAt && (entry.endedAt ?? 0) >= recentCutoff, + ); + const recentLines = mapRuns( + recentEntries, + (entry) => (entry.endedAt ?? now) - (entry.startedAt ?? entry.createdAt), + ); + + const lines = ["active subagents:", "-----"]; + if (activeLines.length === 0) { + lines.push("(none)"); + } else { + lines.push(activeLines.join("\n")); + } + lines.push("", `recent subagents (last ${RECENT_WINDOW_MINUTES}m):`, "-----"); + if (recentLines.length === 0) { + lines.push("(none)"); + } else { + lines.push(recentLines.join("\n")); + } + + return stopWithText(lines.join("\n")); +} diff --git a/src/auto-reply/reply/commands-subagents/action-log.ts b/src/auto-reply/reply/commands-subagents/action-log.ts new file mode 100644 index 000000000..e59451d0a --- /dev/null +++ b/src/auto-reply/reply/commands-subagents/action-log.ts @@ -0,0 +1,43 @@ +import { callGateway } from "../../../gateway/call.js"; +import type { CommandHandlerResult } from "../commands-types.js"; +import { formatRunLabel } from "../subagents-utils.js"; +import { + type ChatMessage, + type SubagentsCommandContext, + formatLogLines, + resolveSubagentEntryForToken, + stopWithText, + stripToolMessages, +} from "./shared.js"; + +export async function handleSubagentsLogAction( + ctx: SubagentsCommandContext, +): Promise { + const { runs, restTokens } = ctx; + const target = restTokens[0]; + if (!target) { + return stopWithText("📜 Usage: /subagents log [limit]"); + } + + const includeTools = restTokens.some((token) => token.toLowerCase() === "tools"); + const limitToken = restTokens.find((token) => /^\d+$/.test(token)); + const limit = limitToken ? Math.min(200, Math.max(1, Number.parseInt(limitToken, 10))) : 20; + + const targetResolution = resolveSubagentEntryForToken(runs, target); + if ("reply" in targetResolution) { + return targetResolution.reply; + } + + const history = await callGateway<{ messages: Array }>({ + method: "chat.history", + params: { sessionKey: targetResolution.entry.childSessionKey, limit }, + }); + const rawMessages = Array.isArray(history?.messages) ? history.messages : []; + const filtered = includeTools ? rawMessages : stripToolMessages(rawMessages); + const lines = formatLogLines(filtered as ChatMessage[]); + const header = `📜 Subagent log: ${formatRunLabel(targetResolution.entry)}`; + if (lines.length === 0) { + return stopWithText(`${header}\n(no messages)`); + } + return stopWithText([header, ...lines].join("\n")); +} diff --git a/src/auto-reply/reply/commands-subagents/action-send.ts b/src/auto-reply/reply/commands-subagents/action-send.ts new file mode 100644 index 000000000..d8b752571 --- /dev/null +++ b/src/auto-reply/reply/commands-subagents/action-send.ts @@ -0,0 +1,159 @@ +import crypto from "node:crypto"; +import { AGENT_LANE_SUBAGENT } from "../../../agents/lanes.js"; +import { abortEmbeddedPiRun } from "../../../agents/pi-embedded.js"; +import { + clearSubagentRunSteerRestart, + replaceSubagentRunAfterSteer, + markSubagentRunForSteerRestart, +} from "../../../agents/subagent-registry.js"; +import { loadSessionStore, resolveStorePath } from "../../../config/sessions.js"; +import { callGateway } from "../../../gateway/call.js"; +import { logVerbose } from "../../../globals.js"; +import { INTERNAL_MESSAGE_CHANNEL } from "../../../utils/message-channel.js"; +import type { CommandHandlerResult } from "../commands-types.js"; +import { clearSessionQueues } from "../queue.js"; +import { formatRunLabel } from "../subagents-utils.js"; +import { + type SubagentsCommandContext, + COMMAND, + STEER_ABORT_SETTLE_TIMEOUT_MS, + extractAssistantText, + loadSubagentSessionEntry, + resolveSubagentEntryForToken, + stopWithText, + stripToolMessages, +} from "./shared.js"; + +export async function handleSubagentsSendAction( + ctx: SubagentsCommandContext, + steerRequested: boolean, +): Promise { + const { params, handledPrefix, runs, restTokens } = ctx; + const target = restTokens[0]; + const message = restTokens.slice(1).join(" ").trim(); + if (!target || !message) { + return stopWithText( + steerRequested + ? handledPrefix === COMMAND + ? "Usage: /subagents steer " + : `Usage: ${handledPrefix} ` + : "Usage: /subagents send ", + ); + } + + const targetResolution = resolveSubagentEntryForToken(runs, target); + if ("reply" in targetResolution) { + return targetResolution.reply; + } + if (steerRequested && targetResolution.entry.endedAt) { + return stopWithText(`${formatRunLabel(targetResolution.entry)} is already finished.`); + } + + const { entry: targetSessionEntry } = loadSubagentSessionEntry( + params, + targetResolution.entry.childSessionKey, + { + loadSessionStore, + resolveStorePath, + }, + ); + const targetSessionId = + typeof targetSessionEntry?.sessionId === "string" && targetSessionEntry.sessionId.trim() + ? targetSessionEntry.sessionId.trim() + : undefined; + + if (steerRequested) { + markSubagentRunForSteerRestart(targetResolution.entry.runId); + + if (targetSessionId) { + abortEmbeddedPiRun(targetSessionId); + } + + const cleared = clearSessionQueues([targetResolution.entry.childSessionKey, targetSessionId]); + if (cleared.followupCleared > 0 || cleared.laneCleared > 0) { + logVerbose( + `subagents steer: cleared followups=${cleared.followupCleared} lane=${cleared.laneCleared} keys=${cleared.keys.join(",")}`, + ); + } + + try { + await callGateway({ + method: "agent.wait", + params: { + runId: targetResolution.entry.runId, + timeoutMs: STEER_ABORT_SETTLE_TIMEOUT_MS, + }, + timeoutMs: STEER_ABORT_SETTLE_TIMEOUT_MS + 2_000, + }); + } catch { + // Continue even if wait fails; steer should still be attempted. + } + } + + const idempotencyKey = crypto.randomUUID(); + let runId: string = idempotencyKey; + try { + const response = await callGateway<{ runId: string }>({ + method: "agent", + params: { + message, + sessionKey: targetResolution.entry.childSessionKey, + sessionId: targetSessionId, + idempotencyKey, + deliver: false, + channel: INTERNAL_MESSAGE_CHANNEL, + lane: AGENT_LANE_SUBAGENT, + timeout: 0, + }, + timeoutMs: 10_000, + }); + const responseRunId = typeof response?.runId === "string" ? response.runId : undefined; + if (responseRunId) { + runId = responseRunId; + } + } catch (err) { + if (steerRequested) { + clearSubagentRunSteerRestart(targetResolution.entry.runId); + } + const messageText = + err instanceof Error ? err.message : typeof err === "string" ? err : "error"; + return stopWithText(`send failed: ${messageText}`); + } + + if (steerRequested) { + replaceSubagentRunAfterSteer({ + previousRunId: targetResolution.entry.runId, + nextRunId: runId, + fallback: targetResolution.entry, + runTimeoutSeconds: targetResolution.entry.runTimeoutSeconds ?? 0, + }); + return stopWithText( + `steered ${formatRunLabel(targetResolution.entry)} (run ${runId.slice(0, 8)}).`, + ); + } + + const waitMs = 30_000; + const wait = await callGateway<{ status?: string; error?: string }>({ + method: "agent.wait", + params: { runId, timeoutMs: waitMs }, + timeoutMs: waitMs + 2000, + }); + if (wait?.status === "timeout") { + return stopWithText(`⏳ Subagent still running (run ${runId.slice(0, 8)}).`); + } + if (wait?.status === "error") { + const waitError = typeof wait.error === "string" ? wait.error : "unknown error"; + return stopWithText(`⚠️ Subagent error: ${waitError} (run ${runId.slice(0, 8)}).`); + } + + const history = await callGateway<{ messages: Array }>({ + method: "chat.history", + params: { sessionKey: targetResolution.entry.childSessionKey, limit: 50 }, + }); + const filtered = stripToolMessages(Array.isArray(history?.messages) ? history.messages : []); + const last = filtered.length > 0 ? filtered[filtered.length - 1] : undefined; + const replyText = last ? extractAssistantText(last) : undefined; + return stopWithText( + replyText ?? `✅ Sent to ${formatRunLabel(targetResolution.entry)} (run ${runId.slice(0, 8)}).`, + ); +} diff --git a/src/auto-reply/reply/commands-subagents/action-spawn.ts b/src/auto-reply/reply/commands-subagents/action-spawn.ts new file mode 100644 index 000000000..bb4b58bd8 --- /dev/null +++ b/src/auto-reply/reply/commands-subagents/action-spawn.ts @@ -0,0 +1,65 @@ +import { spawnSubagentDirect } from "../../../agents/subagent-spawn.js"; +import type { CommandHandlerResult } from "../commands-types.js"; +import { type SubagentsCommandContext, stopWithText } from "./shared.js"; + +export async function handleSubagentsSpawnAction( + ctx: SubagentsCommandContext, +): Promise { + const { params, requesterKey, restTokens } = ctx; + const agentId = restTokens[0]; + + const taskParts: string[] = []; + let model: string | undefined; + let thinking: string | undefined; + for (let i = 1; i < restTokens.length; i++) { + if (restTokens[i] === "--model" && i + 1 < restTokens.length) { + i += 1; + model = restTokens[i]; + } else if (restTokens[i] === "--thinking" && i + 1 < restTokens.length) { + i += 1; + thinking = restTokens[i]; + } else { + taskParts.push(restTokens[i]); + } + } + const task = taskParts.join(" ").trim(); + if (!agentId || !task) { + return stopWithText( + "Usage: /subagents spawn [--model ] [--thinking ]", + ); + } + + const commandTo = typeof params.command.to === "string" ? params.command.to.trim() : ""; + const originatingTo = + typeof params.ctx.OriginatingTo === "string" ? params.ctx.OriginatingTo.trim() : ""; + const fallbackTo = typeof params.ctx.To === "string" ? params.ctx.To.trim() : ""; + const normalizedTo = originatingTo || commandTo || fallbackTo || undefined; + + const result = await spawnSubagentDirect( + { + task, + agentId, + model, + thinking, + mode: "run", + cleanup: "keep", + expectsCompletionMessage: true, + }, + { + agentSessionKey: requesterKey, + agentChannel: params.ctx.OriginatingChannel ?? params.command.channel, + agentAccountId: params.ctx.AccountId, + agentTo: normalizedTo, + agentThreadId: params.ctx.MessageThreadId, + agentGroupId: params.sessionEntry?.groupId ?? null, + agentGroupChannel: params.sessionEntry?.groupChannel ?? null, + agentGroupSpace: params.sessionEntry?.space ?? null, + }, + ); + if (result.status === "accepted") { + return stopWithText( + `Spawned subagent ${agentId} (session ${result.childSessionKey}, run ${result.runId?.slice(0, 8)}).`, + ); + } + return stopWithText(`Spawn failed: ${result.error ?? result.status}`); +} diff --git a/src/auto-reply/reply/commands-subagents/action-unfocus.ts b/src/auto-reply/reply/commands-subagents/action-unfocus.ts new file mode 100644 index 000000000..baddf8dcb --- /dev/null +++ b/src/auto-reply/reply/commands-subagents/action-unfocus.ts @@ -0,0 +1,42 @@ +import { getThreadBindingManager } from "../../../discord/monitor/thread-bindings.js"; +import type { CommandHandlerResult } from "../commands-types.js"; +import { + type SubagentsCommandContext, + isDiscordSurface, + resolveDiscordAccountId, + stopWithText, +} from "./shared.js"; + +export function handleSubagentsUnfocusAction(ctx: SubagentsCommandContext): CommandHandlerResult { + const { params } = ctx; + if (!isDiscordSurface(params)) { + return stopWithText("⚠️ /unfocus is only available on Discord."); + } + + const threadId = params.ctx.MessageThreadId != null ? String(params.ctx.MessageThreadId) : ""; + if (!threadId.trim()) { + return stopWithText("⚠️ /unfocus must be run inside a Discord thread."); + } + + const threadBindings = getThreadBindingManager(resolveDiscordAccountId(params)); + if (!threadBindings) { + return stopWithText("⚠️ Discord thread bindings are unavailable for this account."); + } + + const binding = threadBindings.getByThreadId(threadId); + if (!binding) { + return stopWithText("ℹ️ This thread is not currently focused."); + } + + const senderId = params.command.senderId?.trim() || ""; + if (binding.boundBy && binding.boundBy !== "system" && senderId && senderId !== binding.boundBy) { + return stopWithText(`⚠️ Only ${binding.boundBy} can unfocus this thread.`); + } + + threadBindings.unbindThread({ + threadId, + reason: "manual", + sendFarewell: true, + }); + return stopWithText("✅ Thread unfocused."); +} diff --git a/src/auto-reply/reply/commands-subagents/shared.ts b/src/auto-reply/reply/commands-subagents/shared.ts new file mode 100644 index 000000000..237b6c5b7 --- /dev/null +++ b/src/auto-reply/reply/commands-subagents/shared.ts @@ -0,0 +1,432 @@ +import type { SubagentRunRecord } from "../../../agents/subagent-registry.js"; +import { + extractAssistantText, + resolveInternalSessionKey, + resolveMainSessionAlias, + sanitizeTextContent, + stripToolMessages, +} from "../../../agents/tools/sessions-helpers.js"; +import type { + SessionEntry, + loadSessionStore as loadSessionStoreFn, + resolveStorePath as resolveStorePathFn, +} from "../../../config/sessions.js"; +import { parseDiscordTarget } from "../../../discord/targets.js"; +import { callGateway } from "../../../gateway/call.js"; +import { formatTimeAgo } from "../../../infra/format-time/format-relative.ts"; +import { parseAgentSessionKey } from "../../../routing/session-key.js"; +import { extractTextFromChatContent } from "../../../shared/chat-content.js"; +import { + formatDurationCompact, + formatTokenUsageDisplay, + truncateLine, +} from "../../../shared/subagents-format.js"; +import type { CommandHandler, CommandHandlerResult } from "../commands-types.js"; +import { + formatRunLabel, + formatRunStatus, + resolveSubagentTargetFromRuns, + type SubagentTargetResolution, +} from "../subagents-utils.js"; + +export { extractAssistantText, stripToolMessages }; + +export const COMMAND = "/subagents"; +export const COMMAND_KILL = "/kill"; +export const COMMAND_STEER = "/steer"; +export const COMMAND_TELL = "/tell"; +export const COMMAND_FOCUS = "/focus"; +export const COMMAND_UNFOCUS = "/unfocus"; +export const COMMAND_AGENTS = "/agents"; +export const ACTIONS = new Set([ + "list", + "kill", + "log", + "send", + "steer", + "info", + "spawn", + "focus", + "unfocus", + "agents", + "help", +]); + +export const RECENT_WINDOW_MINUTES = 30; +const SUBAGENT_TASK_PREVIEW_MAX = 110; +export const STEER_ABORT_SETTLE_TIMEOUT_MS = 5_000; + +const SESSION_ID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; + +function compactLine(value: string) { + return value.replace(/\s+/g, " ").trim(); +} + +function formatTaskPreview(value: string) { + return truncateLine(compactLine(value), SUBAGENT_TASK_PREVIEW_MAX); +} + +function resolveModelDisplay( + entry?: { + model?: unknown; + modelProvider?: unknown; + modelOverride?: unknown; + providerOverride?: unknown; + }, + fallbackModel?: string, +) { + const model = typeof entry?.model === "string" ? entry.model.trim() : ""; + const provider = typeof entry?.modelProvider === "string" ? entry.modelProvider.trim() : ""; + let combined = model.includes("/") ? model : model && provider ? `${provider}/${model}` : model; + if (!combined) { + const overrideModel = + typeof entry?.modelOverride === "string" ? entry.modelOverride.trim() : ""; + const overrideProvider = + typeof entry?.providerOverride === "string" ? entry.providerOverride.trim() : ""; + combined = overrideModel.includes("/") + ? overrideModel + : overrideModel && overrideProvider + ? `${overrideProvider}/${overrideModel}` + : overrideModel; + } + if (!combined) { + combined = fallbackModel?.trim() || ""; + } + if (!combined) { + return "model n/a"; + } + const slash = combined.lastIndexOf("/"); + if (slash >= 0 && slash < combined.length - 1) { + return combined.slice(slash + 1); + } + return combined; +} + +export function resolveDisplayStatus(entry: SubagentRunRecord) { + const status = formatRunStatus(entry); + return status === "error" ? "failed" : status; +} + +export function formatSubagentListLine(params: { + entry: SubagentRunRecord; + index: number; + runtimeMs: number; + sessionEntry?: SessionEntry; +}) { + const usageText = formatTokenUsageDisplay(params.sessionEntry); + const label = truncateLine(formatRunLabel(params.entry, { maxLength: 48 }), 48); + const task = formatTaskPreview(params.entry.task); + const runtime = formatDurationCompact(params.runtimeMs); + const status = resolveDisplayStatus(params.entry); + return `${params.index}. ${label} (${resolveModelDisplay(params.sessionEntry, params.entry.model)}, ${runtime}${usageText ? `, ${usageText}` : ""}) ${status}${task.toLowerCase() !== label.toLowerCase() ? ` - ${task}` : ""}`; +} + +function formatTimestamp(valueMs?: number) { + if (!valueMs || !Number.isFinite(valueMs) || valueMs <= 0) { + return "n/a"; + } + return new Date(valueMs).toISOString(); +} + +export function formatTimestampWithAge(valueMs?: number) { + if (!valueMs || !Number.isFinite(valueMs) || valueMs <= 0) { + return "n/a"; + } + return `${formatTimestamp(valueMs)} (${formatTimeAgo(Date.now() - valueMs, { fallback: "n/a" })})`; +} + +export type SubagentsAction = + | "list" + | "kill" + | "log" + | "send" + | "steer" + | "info" + | "spawn" + | "focus" + | "unfocus" + | "agents" + | "help"; + +export type SubagentsCommandParams = Parameters[0]; + +export type SubagentsCommandContext = { + params: SubagentsCommandParams; + handledPrefix: string; + requesterKey: string; + runs: SubagentRunRecord[]; + restTokens: string[]; +}; + +export function stopWithText(text: string): CommandHandlerResult { + return { shouldContinue: false, reply: { text } }; +} + +export function stopWithUnknownTargetError(error?: string): CommandHandlerResult { + return stopWithText(`⚠️ ${error ?? "Unknown subagent."}`); +} + +export function resolveSubagentTarget( + runs: SubagentRunRecord[], + token: string | undefined, +): SubagentTargetResolution { + return resolveSubagentTargetFromRuns({ + runs, + token, + recentWindowMinutes: RECENT_WINDOW_MINUTES, + label: (entry) => formatRunLabel(entry), + errors: { + missingTarget: "Missing subagent id.", + invalidIndex: (value) => `Invalid subagent index: ${value}`, + unknownSession: (value) => `Unknown subagent session: ${value}`, + ambiguousLabel: (value) => `Ambiguous subagent label: ${value}`, + ambiguousLabelPrefix: (value) => `Ambiguous subagent label prefix: ${value}`, + ambiguousRunIdPrefix: (value) => `Ambiguous run id prefix: ${value}`, + unknownTarget: (value) => `Unknown subagent id: ${value}`, + }, + }); +} + +export function resolveSubagentEntryForToken( + runs: SubagentRunRecord[], + token: string | undefined, +): { entry: SubagentRunRecord } | { reply: CommandHandlerResult } { + const resolved = resolveSubagentTarget(runs, token); + if (!resolved.entry) { + return { reply: stopWithUnknownTargetError(resolved.error) }; + } + return { entry: resolved.entry }; +} + +export function resolveRequesterSessionKey( + params: SubagentsCommandParams, + opts?: { preferCommandTarget?: boolean }, +): string | undefined { + const commandTarget = params.ctx.CommandTargetSessionKey?.trim(); + const commandSession = params.sessionKey?.trim(); + const raw = opts?.preferCommandTarget + ? commandTarget || commandSession + : commandSession || commandTarget; + if (!raw) { + return undefined; + } + const { mainKey, alias } = resolveMainSessionAlias(params.cfg); + return resolveInternalSessionKey({ key: raw, alias, mainKey }); +} + +export function resolveHandledPrefix(normalized: string): string | null { + return normalized.startsWith(COMMAND) + ? COMMAND + : normalized.startsWith(COMMAND_KILL) + ? COMMAND_KILL + : normalized.startsWith(COMMAND_STEER) + ? COMMAND_STEER + : normalized.startsWith(COMMAND_TELL) + ? COMMAND_TELL + : normalized.startsWith(COMMAND_FOCUS) + ? COMMAND_FOCUS + : normalized.startsWith(COMMAND_UNFOCUS) + ? COMMAND_UNFOCUS + : normalized.startsWith(COMMAND_AGENTS) + ? COMMAND_AGENTS + : null; +} + +export function resolveSubagentsAction(params: { + handledPrefix: string; + restTokens: string[]; +}): SubagentsAction | null { + if (params.handledPrefix === COMMAND) { + const [actionRaw] = params.restTokens; + const action = (actionRaw?.toLowerCase() || "list") as SubagentsAction; + if (!ACTIONS.has(action)) { + return null; + } + params.restTokens.splice(0, 1); + return action; + } + if (params.handledPrefix === COMMAND_KILL) { + return "kill"; + } + if (params.handledPrefix === COMMAND_FOCUS) { + return "focus"; + } + if (params.handledPrefix === COMMAND_UNFOCUS) { + return "unfocus"; + } + if (params.handledPrefix === COMMAND_AGENTS) { + return "agents"; + } + return "steer"; +} + +export type FocusTargetResolution = { + targetKind: "subagent" | "acp"; + targetSessionKey: string; + agentId: string; + label?: string; +}; + +export function isDiscordSurface(params: SubagentsCommandParams): boolean { + const channel = + params.ctx.OriginatingChannel ?? + params.command.channel ?? + params.ctx.Surface ?? + params.ctx.Provider; + return ( + String(channel ?? "") + .trim() + .toLowerCase() === "discord" + ); +} + +export function resolveDiscordAccountId(params: SubagentsCommandParams): string { + const accountId = typeof params.ctx.AccountId === "string" ? params.ctx.AccountId.trim() : ""; + return accountId || "default"; +} + +export function resolveDiscordChannelIdForFocus( + params: SubagentsCommandParams, +): string | undefined { + const toCandidates = [ + typeof params.ctx.OriginatingTo === "string" ? params.ctx.OriginatingTo.trim() : "", + typeof params.command.to === "string" ? params.command.to.trim() : "", + typeof params.ctx.To === "string" ? params.ctx.To.trim() : "", + ].filter(Boolean); + for (const candidate of toCandidates) { + try { + const target = parseDiscordTarget(candidate, { defaultKind: "channel" }); + if (target?.kind === "channel" && target.id) { + return target.id; + } + } catch { + // Ignore parse failures and try the next candidate. + } + } + return undefined; +} + +export async function resolveFocusTargetSession(params: { + runs: SubagentRunRecord[]; + token: string; +}): Promise { + const subagentMatch = resolveSubagentTarget(params.runs, params.token); + if (subagentMatch.entry) { + const key = subagentMatch.entry.childSessionKey; + const parsed = parseAgentSessionKey(key); + return { + targetKind: "subagent", + targetSessionKey: key, + agentId: parsed?.agentId ?? "main", + label: formatRunLabel(subagentMatch.entry), + }; + } + + const token = params.token.trim(); + if (!token) { + return null; + } + + const attempts: Array> = []; + attempts.push({ key: token }); + if (SESSION_ID_RE.test(token)) { + attempts.push({ sessionId: token }); + } + attempts.push({ label: token }); + + for (const attempt of attempts) { + try { + const resolved = await callGateway<{ key?: string }>({ + method: "sessions.resolve", + params: attempt, + }); + const key = typeof resolved?.key === "string" ? resolved.key.trim() : ""; + if (!key) { + continue; + } + const parsed = parseAgentSessionKey(key); + return { + targetKind: key.includes(":subagent:") ? "subagent" : "acp", + targetSessionKey: key, + agentId: parsed?.agentId ?? "main", + label: token, + }; + } catch { + // Try the next resolution strategy. + } + } + return null; +} + +export function buildSubagentsHelp() { + return [ + "Subagents", + "Usage:", + "- /subagents list", + "- /subagents kill ", + "- /subagents log [limit] [tools]", + "- /subagents info ", + "- /subagents send ", + "- /subagents steer ", + "- /subagents spawn [--model ] [--thinking ]", + "- /focus ", + "- /unfocus", + "- /agents", + "- /session ttl ", + "- /kill ", + "- /steer ", + "- /tell ", + "", + "Ids: use the list index (#), runId/session prefix, label, or full session key.", + ].join("\n"); +} + +export type ChatMessage = { + role?: unknown; + content?: unknown; +}; + +export function extractMessageText(message: ChatMessage): { role: string; text: string } | null { + const role = typeof message.role === "string" ? message.role : ""; + const shouldSanitize = role === "assistant"; + const text = extractTextFromChatContent(message.content, { + sanitizeText: shouldSanitize ? sanitizeTextContent : undefined, + }); + return text ? { role, text } : null; +} + +export function formatLogLines(messages: ChatMessage[]) { + const lines: string[] = []; + for (const msg of messages) { + const extracted = extractMessageText(msg); + if (!extracted) { + continue; + } + const label = extracted.role === "assistant" ? "Assistant" : "User"; + lines.push(`${label}: ${extracted.text}`); + } + return lines; +} + +export type SessionStoreCache = Map>; + +export function loadSubagentSessionEntry( + params: SubagentsCommandParams, + childKey: string, + loaders: { + loadSessionStore: typeof loadSessionStoreFn; + resolveStorePath: typeof resolveStorePathFn; + }, + storeCache?: SessionStoreCache, +) { + const parsed = parseAgentSessionKey(childKey); + const storePath = loaders.resolveStorePath(params.cfg.session?.store, { + agentId: parsed?.agentId, + }); + let store = storeCache?.get(storePath); + if (!store) { + store = loaders.loadSessionStore(storePath); + storeCache?.set(storePath, store); + } + return { storePath, store, entry: store[childKey] }; +} diff --git a/src/auto-reply/reply/reply-payloads.ts b/src/auto-reply/reply/reply-payloads.ts index 31e8f42d8..5c320d502 100644 --- a/src/auto-reply/reply/reply-payloads.ts +++ b/src/auto-reply/reply/reply-payloads.ts @@ -2,6 +2,7 @@ import { isMessagingToolDuplicate } from "../../agents/pi-embedded-helpers.js"; import type { MessagingToolSend } from "../../agents/pi-embedded-runner.js"; import type { ReplyToMode } from "../../config/types.js"; import { normalizeTargetForProvider } from "../../infra/outbound/target-normalization.js"; +import { normalizeOptionalAccountId } from "../../routing/account-id.js"; import type { OriginatingChannelType } from "../templating.js"; import type { ReplyPayload } from "../types.js"; import { extractReplyToTag } from "./reply-tags.js"; @@ -120,11 +121,6 @@ export function filterMessagingToolMediaDuplicates(params: { }); } -function normalizeAccountId(value?: string): string | undefined { - const trimmed = value?.trim(); - return trimmed ? trimmed.toLowerCase() : undefined; -} - export function shouldSuppressMessagingToolReplies(params: { messageProvider?: string; messagingToolSentTargets?: MessagingToolSend[]; @@ -139,7 +135,7 @@ export function shouldSuppressMessagingToolReplies(params: { if (!originTarget) { return false; } - const originAccount = normalizeAccountId(params.accountId); + const originAccount = normalizeOptionalAccountId(params.accountId); const sentTargets = params.messagingToolSentTargets ?? []; if (sentTargets.length === 0) { return false; @@ -155,7 +151,7 @@ export function shouldSuppressMessagingToolReplies(params: { if (!targetKey) { return false; } - const targetAccount = normalizeAccountId(target.accountId); + const targetAccount = normalizeOptionalAccountId(target.accountId); if (originAccount && targetAccount && originAccount !== targetAccount) { return false; } diff --git a/src/auto-reply/reply/session.ts b/src/auto-reply/reply/session.ts index 4167e1727..cb4b8a194 100644 --- a/src/auto-reply/reply/session.ts +++ b/src/auto-reply/reply/session.ts @@ -11,6 +11,7 @@ import { evaluateSessionFreshness, type GroupKeyResolution, loadSessionStore, + resolveAndPersistSessionFile, resolveChannelResetConfig, resolveThreadFlag, resolveSessionResetPolicy, @@ -354,13 +355,21 @@ export async function initSessionState(params: { console.warn(`[session-init] forked session created: file=${forked.sessionFile}`); } } - if (!sessionEntry.sessionFile) { - sessionEntry.sessionFile = resolveSessionTranscriptPath( - sessionEntry.sessionId, - agentId, - ctx.MessageThreadId, - ); - } + const fallbackSessionFile = !sessionEntry.sessionFile + ? resolveSessionTranscriptPath(sessionEntry.sessionId, agentId, ctx.MessageThreadId) + : undefined; + const resolvedSessionFile = await resolveAndPersistSessionFile({ + sessionId: sessionEntry.sessionId, + sessionKey, + sessionStore, + storePath, + sessionEntry, + agentId, + sessionsDir: path.dirname(storePath), + fallbackSessionFile, + activeSessionKey: sessionKey, + }); + sessionEntry = resolvedSessionFile.sessionEntry; if (isNewSession) { sessionEntry.compactionCount = 0; sessionEntry.memoryFlushCompactionCount = undefined; diff --git a/src/channels/plugins/outbound/discord.test.ts b/src/channels/plugins/outbound/discord.test.ts index dc80bd18e..97bd8b2ff 100644 --- a/src/channels/plugins/outbound/discord.test.ts +++ b/src/channels/plugins/outbound/discord.test.ts @@ -1,6 +1,41 @@ -import { describe, expect, it } from "vitest"; +import { beforeEach, describe, expect, it, vi } from "vitest"; import { normalizeDiscordOutboundTarget } from "../normalize/discord.js"; +const hoisted = vi.hoisted(() => { + const sendMessageDiscordMock = vi.fn(); + const sendPollDiscordMock = vi.fn(); + const sendWebhookMessageDiscordMock = vi.fn(); + const getThreadBindingManagerMock = vi.fn(); + return { + sendMessageDiscordMock, + sendPollDiscordMock, + sendWebhookMessageDiscordMock, + getThreadBindingManagerMock, + }; +}); + +vi.mock("../../../discord/send.js", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + sendMessageDiscord: (...args: unknown[]) => hoisted.sendMessageDiscordMock(...args), + sendPollDiscord: (...args: unknown[]) => hoisted.sendPollDiscordMock(...args), + sendWebhookMessageDiscord: (...args: unknown[]) => + hoisted.sendWebhookMessageDiscordMock(...args), + }; +}); + +vi.mock("../../../discord/monitor/thread-bindings.js", async (importOriginal) => { + const actual = + await importOriginal(); + return { + ...actual, + getThreadBindingManager: (...args: unknown[]) => hoisted.getThreadBindingManagerMock(...args), + }; +}); + +const { discordOutbound } = await import("./discord.js"); + describe("normalizeDiscordOutboundTarget", () => { it("normalizes bare numeric IDs to channel: prefix", () => { expect(normalizeDiscordOutboundTarget("1470130713209602050")).toEqual({ @@ -33,3 +68,203 @@ describe("normalizeDiscordOutboundTarget", () => { expect(normalizeDiscordOutboundTarget(" 123 ")).toEqual({ ok: true, to: "channel:123" }); }); }); + +describe("discordOutbound", () => { + beforeEach(() => { + hoisted.sendMessageDiscordMock.mockReset().mockResolvedValue({ + messageId: "msg-1", + channelId: "ch-1", + }); + hoisted.sendPollDiscordMock.mockReset().mockResolvedValue({ + messageId: "poll-1", + channelId: "ch-1", + }); + hoisted.sendWebhookMessageDiscordMock.mockReset().mockResolvedValue({ + messageId: "msg-webhook-1", + channelId: "thread-1", + }); + hoisted.getThreadBindingManagerMock.mockReset().mockReturnValue(null); + }); + + it("routes text sends to thread target when threadId is provided", async () => { + const result = await discordOutbound.sendText?.({ + cfg: {}, + to: "channel:parent-1", + text: "hello", + accountId: "default", + threadId: "thread-1", + }); + + expect(hoisted.sendMessageDiscordMock).toHaveBeenCalledWith( + "channel:thread-1", + "hello", + expect.objectContaining({ + accountId: "default", + }), + ); + expect(result).toEqual({ + channel: "discord", + messageId: "msg-1", + channelId: "ch-1", + }); + }); + + it("uses webhook persona delivery for bound thread text replies", async () => { + hoisted.getThreadBindingManagerMock.mockReturnValue({ + getByThreadId: () => ({ + accountId: "default", + channelId: "parent-1", + threadId: "thread-1", + targetKind: "subagent", + targetSessionKey: "agent:main:subagent:child", + agentId: "main", + label: "codex-thread", + webhookId: "wh-1", + webhookToken: "tok-1", + boundBy: "system", + boundAt: Date.now(), + }), + }); + + const result = await discordOutbound.sendText?.({ + cfg: {}, + to: "channel:parent-1", + text: "hello from persona", + accountId: "default", + threadId: "thread-1", + replyToId: "reply-1", + identity: { + name: "Codex", + avatarUrl: "https://example.com/avatar.png", + }, + }); + + expect(hoisted.sendWebhookMessageDiscordMock).toHaveBeenCalledWith( + "hello from persona", + expect.objectContaining({ + webhookId: "wh-1", + webhookToken: "tok-1", + accountId: "default", + threadId: "thread-1", + replyTo: "reply-1", + username: "Codex", + avatarUrl: "https://example.com/avatar.png", + }), + ); + expect(hoisted.sendMessageDiscordMock).not.toHaveBeenCalled(); + expect(result).toEqual({ + channel: "discord", + messageId: "msg-webhook-1", + channelId: "thread-1", + }); + }); + + it("falls back to bot send for silent delivery on bound threads", async () => { + hoisted.getThreadBindingManagerMock.mockReturnValue({ + getByThreadId: () => ({ + accountId: "default", + channelId: "parent-1", + threadId: "thread-1", + targetKind: "subagent", + targetSessionKey: "agent:main:subagent:child", + agentId: "main", + webhookId: "wh-1", + webhookToken: "tok-1", + boundBy: "system", + boundAt: Date.now(), + }), + }); + + const result = await discordOutbound.sendText?.({ + cfg: {}, + to: "channel:parent-1", + text: "silent update", + accountId: "default", + threadId: "thread-1", + silent: true, + }); + + expect(hoisted.sendWebhookMessageDiscordMock).not.toHaveBeenCalled(); + expect(hoisted.sendMessageDiscordMock).toHaveBeenCalledWith( + "channel:thread-1", + "silent update", + expect.objectContaining({ + accountId: "default", + silent: true, + }), + ); + expect(result).toEqual({ + channel: "discord", + messageId: "msg-1", + channelId: "ch-1", + }); + }); + + it("falls back to bot send when webhook send fails", async () => { + hoisted.getThreadBindingManagerMock.mockReturnValue({ + getByThreadId: () => ({ + accountId: "default", + channelId: "parent-1", + threadId: "thread-1", + targetKind: "subagent", + targetSessionKey: "agent:main:subagent:child", + agentId: "main", + webhookId: "wh-1", + webhookToken: "tok-1", + boundBy: "system", + boundAt: Date.now(), + }), + }); + hoisted.sendWebhookMessageDiscordMock.mockRejectedValueOnce(new Error("rate limited")); + + const result = await discordOutbound.sendText?.({ + cfg: {}, + to: "channel:parent-1", + text: "fallback", + accountId: "default", + threadId: "thread-1", + }); + + expect(hoisted.sendWebhookMessageDiscordMock).toHaveBeenCalledTimes(1); + expect(hoisted.sendMessageDiscordMock).toHaveBeenCalledWith( + "channel:thread-1", + "fallback", + expect.objectContaining({ + accountId: "default", + }), + ); + expect(result).toEqual({ + channel: "discord", + messageId: "msg-1", + channelId: "ch-1", + }); + }); + + it("routes poll sends to thread target when threadId is provided", async () => { + const result = await discordOutbound.sendPoll?.({ + cfg: {}, + to: "channel:parent-1", + poll: { + question: "Best snack?", + options: ["banana", "apple"], + }, + accountId: "default", + threadId: "thread-1", + }); + + expect(hoisted.sendPollDiscordMock).toHaveBeenCalledWith( + "channel:thread-1", + { + question: "Best snack?", + options: ["banana", "apple"], + }, + expect.objectContaining({ + accountId: "default", + }), + ); + expect(result).toEqual({ + messageId: "poll-1", + channelId: "ch-1", + }); + }); +}); diff --git a/src/channels/plugins/outbound/discord.ts b/src/channels/plugins/outbound/discord.ts index dc8ebb00e..69026db27 100644 --- a/src/channels/plugins/outbound/discord.ts +++ b/src/channels/plugins/outbound/discord.ts @@ -1,16 +1,101 @@ -import { sendMessageDiscord, sendPollDiscord } from "../../../discord/send.js"; +import { + getThreadBindingManager, + type ThreadBindingRecord, +} from "../../../discord/monitor/thread-bindings.js"; +import { + sendMessageDiscord, + sendPollDiscord, + sendWebhookMessageDiscord, +} from "../../../discord/send.js"; +import type { OutboundIdentity } from "../../../infra/outbound/identity.js"; import { normalizeDiscordOutboundTarget } from "../normalize/discord.js"; import type { ChannelOutboundAdapter } from "../types.js"; +function resolveDiscordOutboundTarget(params: { + to: string; + threadId?: string | number | null; +}): string { + if (params.threadId == null) { + return params.to; + } + const threadId = String(params.threadId).trim(); + if (!threadId) { + return params.to; + } + return `channel:${threadId}`; +} + +function resolveDiscordWebhookIdentity(params: { + identity?: OutboundIdentity; + binding: ThreadBindingRecord; +}): { username?: string; avatarUrl?: string } { + const usernameRaw = params.identity?.name?.trim(); + const fallbackUsername = params.binding.label?.trim() || params.binding.agentId; + const username = (usernameRaw || fallbackUsername || "").slice(0, 80) || undefined; + const avatarUrl = params.identity?.avatarUrl?.trim() || undefined; + return { username, avatarUrl }; +} + +async function maybeSendDiscordWebhookText(params: { + text: string; + threadId?: string | number | null; + accountId?: string | null; + identity?: OutboundIdentity; + replyToId?: string | null; +}): Promise<{ messageId: string; channelId: string } | null> { + if (params.threadId == null) { + return null; + } + const threadId = String(params.threadId).trim(); + if (!threadId) { + return null; + } + const manager = getThreadBindingManager(params.accountId ?? undefined); + if (!manager) { + return null; + } + const binding = manager.getByThreadId(threadId); + if (!binding?.webhookId || !binding?.webhookToken) { + return null; + } + const persona = resolveDiscordWebhookIdentity({ + identity: params.identity, + binding, + }); + const result = await sendWebhookMessageDiscord(params.text, { + webhookId: binding.webhookId, + webhookToken: binding.webhookToken, + accountId: binding.accountId, + threadId: binding.threadId, + replyTo: params.replyToId ?? undefined, + username: persona.username, + avatarUrl: persona.avatarUrl, + }); + return result; +} + export const discordOutbound: ChannelOutboundAdapter = { deliveryMode: "direct", chunker: null, textChunkLimit: 2000, pollMaxOptions: 10, resolveTarget: ({ to }) => normalizeDiscordOutboundTarget(to), - sendText: async ({ to, text, accountId, deps, replyToId, silent }) => { + sendText: async ({ to, text, accountId, deps, replyToId, threadId, identity, silent }) => { + if (!silent) { + const webhookResult = await maybeSendDiscordWebhookText({ + text, + threadId, + accountId, + identity, + replyToId, + }).catch(() => null); + if (webhookResult) { + return { channel: "discord", ...webhookResult }; + } + } const send = deps?.sendDiscord ?? sendMessageDiscord; - const result = await send(to, text, { + const target = resolveDiscordOutboundTarget({ to, threadId }); + const result = await send(target, text, { verbose: false, replyTo: replyToId ?? undefined, accountId: accountId ?? undefined, @@ -26,10 +111,12 @@ export const discordOutbound: ChannelOutboundAdapter = { accountId, deps, replyToId, + threadId, silent, }) => { const send = deps?.sendDiscord ?? sendMessageDiscord; - const result = await send(to, text, { + const target = resolveDiscordOutboundTarget({ to, threadId }); + const result = await send(target, text, { verbose: false, mediaUrl, mediaLocalRoots, @@ -39,9 +126,11 @@ export const discordOutbound: ChannelOutboundAdapter = { }); return { channel: "discord", ...result }; }, - sendPoll: async ({ to, poll, accountId, silent }) => - await sendPollDiscord(to, poll, { + sendPoll: async ({ to, poll, accountId, threadId, silent }) => { + const target = resolveDiscordOutboundTarget({ to, threadId }); + return await sendPollDiscord(target, poll, { accountId: accountId ?? undefined, silent: silent ?? undefined, - }), + }); + }, }; diff --git a/src/commands/agent.e2e.test.ts b/src/commands/agent.e2e.test.ts index b821acf39..e8f139476 100644 --- a/src/commands/agent.e2e.test.ts +++ b/src/commands/agent.e2e.test.ts @@ -286,6 +286,72 @@ describe("agentCommand", () => { }); }); + it("persists resolved sessionFile for existing session keys", async () => { + await withTempHome(async (home) => { + const store = path.join(home, "sessions.json"); + writeSessionStoreSeed(store, { + "agent:main:subagent:abc": { + sessionId: "sess-main", + updatedAt: Date.now(), + }, + }); + mockConfig(home, store); + + await agentCommand( + { + message: "hi", + sessionKey: "agent:main:subagent:abc", + }, + runtime, + ); + + const saved = JSON.parse(fs.readFileSync(store, "utf-8")) as Record< + string, + { sessionId?: string; sessionFile?: string } + >; + const entry = saved["agent:main:subagent:abc"]; + expect(entry?.sessionId).toBe("sess-main"); + expect(entry?.sessionFile).toContain( + `${path.sep}agents${path.sep}main${path.sep}sessions${path.sep}sess-main.jsonl`, + ); + + const callArgs = vi.mocked(runEmbeddedPiAgent).mock.calls.at(-1)?.[0]; + expect(callArgs?.sessionFile).toBe(entry?.sessionFile); + }); + }); + + it("preserves topic transcript suffix when persisting missing sessionFile", async () => { + await withTempHome(async (home) => { + const store = path.join(home, "sessions.json"); + writeSessionStoreSeed(store, { + "agent:main:telegram:group:123:topic:456": { + sessionId: "sess-topic", + updatedAt: Date.now(), + }, + }); + mockConfig(home, store); + + await agentCommand( + { + message: "hi", + sessionKey: "agent:main:telegram:group:123:topic:456", + }, + runtime, + ); + + const saved = JSON.parse(fs.readFileSync(store, "utf-8")) as Record< + string, + { sessionId?: string; sessionFile?: string } + >; + const entry = saved["agent:main:telegram:group:123:topic:456"]; + expect(entry?.sessionId).toBe("sess-topic"); + expect(entry?.sessionFile).toContain("sess-topic-topic-456.jsonl"); + + const callArgs = vi.mocked(runEmbeddedPiAgent).mock.calls.at(-1)?.[0]; + expect(callArgs?.sessionFile).toBe(entry?.sessionFile); + }); + }); + it("derives session key from --agent when no routing target is provided", async () => { await withTempHome(async (home) => { const store = path.join(home, "sessions.json"); diff --git a/src/commands/agent.ts b/src/commands/agent.ts index 38ba29edc..a4ceb01c4 100644 --- a/src/commands/agent.ts +++ b/src/commands/agent.ts @@ -1,3 +1,4 @@ +import path from "node:path"; import { listAgentIds, resolveAgentDir, @@ -40,8 +41,11 @@ import { formatCliCommand } from "../cli/command-format.js"; import { type CliDeps, createDefaultDeps } from "../cli/deps.js"; import { loadConfig } from "../config/config.js"; import { + parseSessionThreadInfo, + resolveAndPersistSessionFile, resolveAgentIdFromSessionKey, resolveSessionFilePath, + resolveSessionTranscriptPath, type SessionEntry, updateSessionStore, } from "../config/sessions.js"; @@ -359,6 +363,7 @@ export async function agentCommand( storePath, entry: next, }); + sessionEntry = next; } const agentModelPrimary = resolveAgentModelPrimary(cfg, sessionAgentId); @@ -505,9 +510,31 @@ export async function agentCommand( }); } } - const sessionFile = resolveSessionFilePath(sessionId, sessionEntry, { + let sessionFile = resolveSessionFilePath(sessionId, sessionEntry, { agentId: sessionAgentId, }); + if (sessionStore && sessionKey) { + const threadIdFromSessionKey = parseSessionThreadInfo(sessionKey).threadId; + const fallbackSessionFile = !sessionEntry?.sessionFile + ? resolveSessionTranscriptPath( + sessionId, + sessionAgentId, + opts.threadId ?? threadIdFromSessionKey, + ) + : undefined; + const resolvedSessionFile = await resolveAndPersistSessionFile({ + sessionId, + sessionKey, + sessionStore, + storePath, + sessionEntry, + agentId: sessionAgentId, + sessionsDir: path.dirname(storePath), + fallbackSessionFile, + }); + sessionFile = resolvedSessionFile.sessionFile; + sessionEntry = resolvedSessionFile.sessionEntry; + } const startedAt = Date.now(); let lifecycleEnded = false; diff --git a/src/config/agent-limits.ts b/src/config/agent-limits.ts index 53df535eb..bc0f0aa2e 100644 --- a/src/config/agent-limits.ts +++ b/src/config/agent-limits.ts @@ -2,6 +2,8 @@ import type { OpenClawConfig } from "./types.js"; export const DEFAULT_AGENT_MAX_CONCURRENT = 4; export const DEFAULT_SUBAGENT_MAX_CONCURRENT = 8; +// Keep depth-1 subagents as leaves unless config explicitly opts into nesting. +export const DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH = 1; export function resolveAgentMaxConcurrent(cfg?: OpenClawConfig): number { const raw = cfg?.agents?.defaults?.maxConcurrent; diff --git a/src/config/schema.help.ts b/src/config/schema.help.ts index 6e3b658b9..f9bae5271 100644 --- a/src/config/schema.help.ts +++ b/src/config/schema.help.ts @@ -345,6 +345,10 @@ export const FIELD_HELP: Record = { 'DM session scoping: "main" keeps continuity; "per-peer", "per-channel-peer", or "per-account-channel-peer" isolates DM history (recommended for shared inboxes/multi-account).', "session.identityLinks": "Map canonical identities to provider-prefixed peer IDs for DM session linking (example: telegram:123456).", + "session.threadBindings.enabled": + "Global master switch for thread-bound session routing features. Channel/provider keys (for example channels.discord.threadBindings.enabled) override this default. Default: true.", + "session.threadBindings.ttlHours": + "Default auto-unfocus TTL in hours for thread-bound sessions across providers/channels. Set 0 to disable (default: 24). Provider keys (for example channels.discord.threadBindings.ttlHours) override this.", "channels.telegram.configWrites": "Allow Telegram to write config in response to channel events/commands (default: true).", "channels.slack.configWrites": @@ -439,6 +443,12 @@ export const FIELD_HELP: Record = { "channels.discord.retry.maxDelayMs": "Maximum retry delay cap in ms for Discord outbound calls.", "channels.discord.retry.jitter": "Jitter factor (0-1) applied to Discord retry delays.", "channels.discord.maxLinesPerMessage": "Soft max line count per Discord message (default: 17).", + "channels.discord.threadBindings.enabled": + "Enable Discord thread binding features (/focus, bound-thread routing/delivery, and thread-bound subagent sessions). Overrides session.threadBindings.enabled when set.", + "channels.discord.threadBindings.ttlHours": + "Auto-unfocus TTL in hours for Discord thread-bound sessions (/focus and spawned thread sessions). Set 0 to disable (default: 24). Overrides session.threadBindings.ttlHours when set.", + "channels.discord.threadBindings.spawnSubagentSessions": + "Allow subagent spawns with thread=true to auto-create and bind Discord threads (default: false; opt-in). Set true to enable thread-bound subagent spawns for this account/channel.", "channels.discord.ui.components.accentColor": "Accent color for Discord component containers (hex). Set per account via channels.discord.accounts..ui.components.accentColor.", "channels.discord.voice.enabled": diff --git a/src/config/schema.labels.ts b/src/config/schema.labels.ts index 2a6bf2dbc..1a6d898ae 100644 --- a/src/config/schema.labels.ts +++ b/src/config/schema.labels.ts @@ -239,6 +239,8 @@ export const FIELD_LABELS: Record = { "browser.remoteCdpTimeoutMs": "Remote CDP Timeout (ms)", "browser.remoteCdpHandshakeTimeoutMs": "Remote CDP Handshake Timeout (ms)", "session.dmScope": "DM Session Scope", + "session.threadBindings.enabled": "Thread Binding Enabled", + "session.threadBindings.ttlHours": "Thread Binding TTL (hours)", "session.agentToAgent.maxPingPongTurns": "Agent-to-Agent Ping-Pong Turns", "messages.suppressToolErrors": "Suppress Tool Error Warnings", "messages.ackReaction": "Ack Reaction Emoji", @@ -288,6 +290,9 @@ export const FIELD_LABELS: Record = { "channels.discord.retry.maxDelayMs": "Discord Retry Max Delay (ms)", "channels.discord.retry.jitter": "Discord Retry Jitter", "channels.discord.maxLinesPerMessage": "Discord Max Lines Per Message", + "channels.discord.threadBindings.enabled": "Discord Thread Binding Enabled", + "channels.discord.threadBindings.ttlHours": "Discord Thread Binding TTL (hours)", + "channels.discord.threadBindings.spawnSubagentSessions": "Discord Thread-Bound Subagent Spawn", "channels.discord.ui.components.accentColor": "Discord Component Accent Color", "channels.discord.intents.presence": "Discord Presence Intent", "channels.discord.intents.guildMembers": "Discord Guild Members Intent", diff --git a/src/config/sessions.ts b/src/config/sessions.ts index 0ea031cf0..f4a6cbc09 100644 --- a/src/config/sessions.ts +++ b/src/config/sessions.ts @@ -7,4 +7,5 @@ export * from "./sessions/session-key.js"; export * from "./sessions/store.js"; export * from "./sessions/types.js"; export * from "./sessions/transcript.js"; +export * from "./sessions/session-file.js"; export * from "./sessions/delivery-info.js"; diff --git a/src/config/sessions/session-file.ts b/src/config/sessions/session-file.ts new file mode 100644 index 000000000..17c886eb6 --- /dev/null +++ b/src/config/sessions/session-file.ts @@ -0,0 +1,50 @@ +import { resolveSessionFilePath } from "./paths.js"; +import { updateSessionStore } from "./store.js"; +import type { SessionEntry } from "./types.js"; + +export async function resolveAndPersistSessionFile(params: { + sessionId: string; + sessionKey: string; + sessionStore: Record; + storePath: string; + sessionEntry?: SessionEntry; + agentId?: string; + sessionsDir?: string; + fallbackSessionFile?: string; + activeSessionKey?: string; +}): Promise<{ sessionFile: string; sessionEntry: SessionEntry }> { + const { sessionId, sessionKey, sessionStore, storePath } = params; + const baseEntry = params.sessionEntry ?? + sessionStore[sessionKey] ?? { sessionId, updatedAt: Date.now() }; + const fallbackSessionFile = params.fallbackSessionFile?.trim(); + const entryForResolve = + !baseEntry.sessionFile && fallbackSessionFile + ? { ...baseEntry, sessionFile: fallbackSessionFile } + : baseEntry; + const sessionFile = resolveSessionFilePath(sessionId, entryForResolve, { + agentId: params.agentId, + sessionsDir: params.sessionsDir, + }); + const persistedEntry: SessionEntry = { + ...baseEntry, + sessionId, + updatedAt: Date.now(), + sessionFile, + }; + if (baseEntry.sessionId !== sessionId || baseEntry.sessionFile !== sessionFile) { + sessionStore[sessionKey] = persistedEntry; + await updateSessionStore( + storePath, + (store) => { + store[sessionKey] = { + ...store[sessionKey], + ...persistedEntry, + }; + }, + params.activeSessionKey ? { activeSessionKey: params.activeSessionKey } : undefined, + ); + return { sessionFile, sessionEntry: persistedEntry }; + } + sessionStore[sessionKey] = persistedEntry; + return { sessionFile, sessionEntry: persistedEntry }; +} diff --git a/src/config/sessions/sessions.test.ts b/src/config/sessions/sessions.test.ts index c8aff2b4d..99d415d31 100644 --- a/src/config/sessions/sessions.test.ts +++ b/src/config/sessions/sessions.test.ts @@ -6,6 +6,7 @@ import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it } from import { clearSessionStoreCacheForTest, loadSessionStore, + resolveAndPersistSessionFile, updateSessionStore, } from "../sessions.js"; import type { SessionConfig } from "../types.base.js"; @@ -203,3 +204,48 @@ describe("appendAssistantMessageToSessionTranscript", () => { } }); }); + +describe("resolveAndPersistSessionFile", () => { + let tempDir: string; + let storePath: string; + let sessionsDir: string; + + beforeEach(() => { + tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "session-file-test-")); + sessionsDir = path.join(tempDir, "agents", "main", "sessions"); + fs.mkdirSync(sessionsDir, { recursive: true }); + storePath = path.join(sessionsDir, "sessions.json"); + }); + + afterEach(() => { + fs.rmSync(tempDir, { recursive: true, force: true }); + }); + + it("persists fallback topic transcript paths for sessions without sessionFile", async () => { + const sessionId = "topic-session-id"; + const sessionKey = "agent:main:telegram:group:123:topic:456"; + const store = { + [sessionKey]: { + sessionId, + updatedAt: Date.now(), + }, + }; + fs.writeFileSync(storePath, JSON.stringify(store), "utf-8"); + const sessionStore = loadSessionStore(storePath, { skipCache: true }); + const fallbackSessionFile = resolveSessionTranscriptPathInDir(sessionId, sessionsDir, 456); + + const result = await resolveAndPersistSessionFile({ + sessionId, + sessionKey, + sessionStore, + storePath, + sessionEntry: sessionStore[sessionKey], + fallbackSessionFile, + }); + + expect(result.sessionFile).toBe(fallbackSessionFile); + + const saved = loadSessionStore(storePath, { skipCache: true }); + expect(saved[sessionKey]?.sessionFile).toBe(fallbackSessionFile); + }); +}); diff --git a/src/config/sessions/transcript.ts b/src/config/sessions/transcript.ts index eff566a00..5e3aa0a08 100644 --- a/src/config/sessions/transcript.ts +++ b/src/config/sessions/transcript.ts @@ -2,8 +2,9 @@ import fs from "node:fs"; import path from "node:path"; import { CURRENT_SESSION_VERSION, SessionManager } from "@mariozechner/pi-coding-agent"; import { emitSessionTranscriptUpdate } from "../../sessions/transcript-events.js"; -import { resolveDefaultSessionStorePath, resolveSessionFilePath } from "./paths.js"; -import { loadSessionStore, updateSessionStore } from "./store.js"; +import { resolveDefaultSessionStorePath } from "./paths.js"; +import { resolveAndPersistSessionFile } from "./session-file.js"; +import { loadSessionStore } from "./store.js"; import type { SessionEntry } from "./types.js"; function stripQuery(value: string): string { @@ -108,10 +109,16 @@ export async function appendAssistantMessageToSessionTranscript(params: { let sessionFile: string; try { - sessionFile = resolveSessionFilePath(entry.sessionId, entry, { + const resolvedSessionFile = await resolveAndPersistSessionFile({ + sessionId: entry.sessionId, + sessionKey, + sessionStore: store, + storePath, + sessionEntry: entry, agentId: params.agentId, sessionsDir: path.dirname(storePath), }); + sessionFile = resolvedSessionFile.sessionFile; } catch (err) { return { ok: false, @@ -146,19 +153,6 @@ export async function appendAssistantMessageToSessionTranscript(params: { timestamp: Date.now(), }); - if (!entry.sessionFile || entry.sessionFile !== sessionFile) { - await updateSessionStore( - storePath, - (current) => { - current[sessionKey] = { - ...entry, - sessionFile, - }; - }, - { activeSessionKey: sessionKey }, - ); - } - emitSessionTranscriptUpdate(sessionFile); return { ok: true, sessionFile }; } diff --git a/src/config/types.base.ts b/src/config/types.base.ts index 0836448b6..25cc6dcfb 100644 --- a/src/config/types.base.ts +++ b/src/config/types.base.ts @@ -84,6 +84,19 @@ export type SessionResetByTypeConfig = { thread?: SessionResetConfig; }; +export type SessionThreadBindingsConfig = { + /** + * Master switch for thread-bound session routing features. + * Channel/provider keys can override this default. + */ + enabled?: boolean; + /** + * Auto-unfocus TTL for thread-bound sessions (hours). + * Set to 0 to disable. Default: 24. + */ + ttlHours?: number; +}; + export type SessionConfig = { scope?: SessionScope; /** DM session scoping (default: "main"). */ @@ -105,6 +118,8 @@ export type SessionConfig = { /** Max ping-pong turns between requester/target (0–5). Default: 5. */ maxPingPongTurns?: number; }; + /** Shared defaults for thread-bound session routing across channels/providers. */ + threadBindings?: SessionThreadBindingsConfig; /** Automatic session store maintenance (pruning, capping, file rotation). */ maintenance?: SessionMaintenanceConfig; }; diff --git a/src/config/types.discord.ts b/src/config/types.discord.ts index 7e4701201..3b5fbf94b 100644 --- a/src/config/types.discord.ts +++ b/src/config/types.discord.ts @@ -142,6 +142,25 @@ export type DiscordUiConfig = { components?: DiscordUiComponentsConfig; }; +export type DiscordThreadBindingsConfig = { + /** + * Enable Discord thread binding features (/focus, thread-bound delivery, and + * thread-bound subagent session flows). Overrides session.threadBindings.enabled + * when set. + */ + enabled?: boolean; + /** + * Auto-unfocus TTL for thread-bound sessions in hours. + * Set to 0 to disable TTL. Default: 24. + */ + ttlHours?: number; + /** + * Allow `sessions_spawn({ thread: true })` to auto-create + bind Discord + * threads for subagent sessions. Default: false (opt-in). + */ + spawnSubagentSessions?: boolean; +}; + export type DiscordSlashCommandConfig = { /** Reply ephemerally (default: true). */ ephemeral?: boolean; @@ -233,6 +252,8 @@ export type DiscordAccountConfig = { ui?: DiscordUiConfig; /** Slash command configuration. */ slashCommand?: DiscordSlashCommandConfig; + /** Thread binding lifecycle settings (focus/subagent thread sessions). */ + threadBindings?: DiscordThreadBindingsConfig; /** Privileged Gateway Intents (must also be enabled in Discord Developer Portal). */ intents?: DiscordIntentsConfig; /** Voice channel conversation settings. */ diff --git a/src/config/zod-schema.providers-core.ts b/src/config/zod-schema.providers-core.ts index 668c413a4..cac84e04b 100644 --- a/src/config/zod-schema.providers-core.ts +++ b/src/config/zod-schema.providers-core.ts @@ -388,6 +388,14 @@ export const DiscordAccountSchema = z }) .strict() .optional(), + threadBindings: z + .object({ + enabled: z.boolean().optional(), + ttlHours: z.number().nonnegative().optional(), + spawnSubagentSessions: z.boolean().optional(), + }) + .strict() + .optional(), intents: z .object({ presence: z.boolean().optional(), diff --git a/src/config/zod-schema.session.ts b/src/config/zod-schema.session.ts index 8139d2368..edf73584a 100644 --- a/src/config/zod-schema.session.ts +++ b/src/config/zod-schema.session.ts @@ -66,6 +66,13 @@ export const SessionSchema = z }) .strict() .optional(), + threadBindings: z + .object({ + enabled: z.boolean().optional(), + ttlHours: z.number().nonnegative().optional(), + }) + .strict() + .optional(), maintenance: z .object({ mode: z.enum(["enforce", "warn"]).optional(), @@ -168,4 +175,6 @@ export const CommandsSchema = z }) .strict() .optional() - .default({ native: "auto", nativeSkills: "auto", restart: true, ownerDisplay: "raw" }); + .default( + () => ({ native: "auto", nativeSkills: "auto", restart: true, ownerDisplay: "raw" }) as const, + ); diff --git a/src/discord/monitor.tool-result.accepts-guild-messages-mentionpatterns-match.e2e.test.ts b/src/discord/monitor.tool-result.accepts-guild-messages-mentionpatterns-match.e2e.test.ts index 6e334f743..92a86189a 100644 --- a/src/discord/monitor.tool-result.accepts-guild-messages-mentionpatterns-match.e2e.test.ts +++ b/src/discord/monitor.tool-result.accepts-guild-messages-mentionpatterns-match.e2e.test.ts @@ -11,6 +11,7 @@ import { upsertPairingRequestMock, } from "./monitor.tool-result.test-harness.js"; import { __resetDiscordChannelInfoCacheForTest } from "./monitor/message-utils.js"; +import { createNoopThreadBindingManager } from "./monitor/thread-bindings.js"; const loadConfigMock = vi.fn(); vi.mock("../config/config.js", async (importOriginal) => { @@ -91,6 +92,7 @@ async function createHandler(cfg: LoadedConfig) { dmEnabled: true, groupDmEnabled: false, guildEntries: cfg.channels?.discord?.guilds, + threadBindings: createNoopThreadBindingManager("default"), }); } @@ -291,6 +293,7 @@ describe("discord tool result dispatch", () => { accountId: "default", sessionPrefix: "discord:slash", ephemeralDefault: true, + threadBindings: createNoopThreadBindingManager("default"), }); const reply = vi.fn().mockResolvedValue(undefined); diff --git a/src/discord/monitor.tool-result.sends-status-replies-responseprefix.test.ts b/src/discord/monitor.tool-result.sends-status-replies-responseprefix.test.ts index 8d5fef679..11b5d47e9 100644 --- a/src/discord/monitor.tool-result.sends-status-replies-responseprefix.test.ts +++ b/src/discord/monitor.tool-result.sends-status-replies-responseprefix.test.ts @@ -10,6 +10,7 @@ import { } from "./monitor.tool-result.test-harness.js"; import { createDiscordMessageHandler } from "./monitor/message-handler.js"; import { __resetDiscordChannelInfoCacheForTest } from "./monitor/message-utils.js"; +import { createNoopThreadBindingManager } from "./monitor/thread-bindings.js"; type Config = ReturnType; @@ -71,6 +72,7 @@ async function createDmHandler(opts: { cfg: Config; runtimeError?: (err: unknown replyToMode: "off", dmEnabled: true, groupDmEnabled: false, + threadBindings: createNoopThreadBindingManager("default"), }); } @@ -107,6 +109,7 @@ async function createCategoryGuildHandler() { guildEntries: { "*": { requireMention: false, channels: { c1: { allow: true } } }, }, + threadBindings: createNoopThreadBindingManager("default"), }); } diff --git a/src/discord/monitor/message-handler.preflight.test.ts b/src/discord/monitor/message-handler.preflight.test.ts new file mode 100644 index 000000000..f8bc88600 --- /dev/null +++ b/src/discord/monitor/message-handler.preflight.test.ts @@ -0,0 +1,209 @@ +import { ChannelType } from "@buape/carbon"; +import { beforeEach, describe, expect, it } from "vitest"; +import { + preflightDiscordMessage, + resolvePreflightMentionRequirement, + shouldIgnoreBoundThreadWebhookMessage, +} from "./message-handler.preflight.js"; +import { + __testing as threadBindingTesting, + createThreadBindingManager, +} from "./thread-bindings.js"; + +function createThreadBinding( + overrides?: Partial, +) { + return { + accountId: "default", + channelId: "parent-1", + threadId: "thread-1", + targetKind: "subagent", + targetSessionKey: "agent:main:subagent:child-1", + agentId: "main", + boundBy: "test", + boundAt: 1, + webhookId: "wh-1", + webhookToken: "tok-1", + ...overrides, + } satisfies import("./thread-bindings.js").ThreadBindingRecord; +} + +describe("resolvePreflightMentionRequirement", () => { + it("requires mention when config requires mention and thread is not bound", () => { + expect( + resolvePreflightMentionRequirement({ + shouldRequireMention: true, + isBoundThreadSession: false, + }), + ).toBe(true); + }); + + it("disables mention requirement for bound thread sessions", () => { + expect( + resolvePreflightMentionRequirement({ + shouldRequireMention: true, + isBoundThreadSession: true, + }), + ).toBe(false); + }); + + it("keeps mention requirement disabled when config already disables it", () => { + expect( + resolvePreflightMentionRequirement({ + shouldRequireMention: false, + isBoundThreadSession: false, + }), + ).toBe(false); + }); +}); + +describe("preflightDiscordMessage", () => { + it("bypasses mention gating in bound threads for allowed bot senders", async () => { + const threadBinding = createThreadBinding(); + const threadId = "thread-bot-focus"; + const parentId = "channel-parent-focus"; + const client = { + fetchChannel: async (channelId: string) => { + if (channelId === threadId) { + return { + id: threadId, + type: ChannelType.PublicThread, + name: "focus", + parentId, + ownerId: "owner-1", + }; + } + if (channelId === parentId) { + return { + id: parentId, + type: ChannelType.GuildText, + name: "general", + }; + } + return null; + }, + } as unknown as import("@buape/carbon").Client; + const message = { + id: "m-bot-1", + content: "relay message without mention", + timestamp: new Date().toISOString(), + channelId: threadId, + attachments: [], + mentionedUsers: [], + mentionedRoles: [], + mentionedEveryone: false, + author: { + id: "relay-bot-1", + bot: true, + username: "Relay", + }, + } as unknown as import("@buape/carbon").Message; + + const result = await preflightDiscordMessage({ + cfg: { + session: { + mainKey: "main", + scope: "per-sender", + }, + } as import("../../config/config.js").OpenClawConfig, + discordConfig: { + allowBots: true, + } as NonNullable["discord"], + accountId: "default", + token: "token", + runtime: {} as import("../../runtime.js").RuntimeEnv, + botUserId: "openclaw-bot", + guildHistories: new Map(), + historyLimit: 0, + mediaMaxBytes: 1_000_000, + textLimit: 2_000, + replyToMode: "all", + dmEnabled: true, + groupDmEnabled: true, + ackReactionScope: "direct", + groupPolicy: "open", + threadBindings: { + getByThreadId: (id: string) => (id === threadId ? threadBinding : undefined), + } as import("./thread-bindings.js").ThreadBindingManager, + data: { + channel_id: threadId, + guild_id: "guild-1", + guild: { + id: "guild-1", + name: "Guild One", + }, + author: message.author, + message, + } as unknown as import("./listeners.js").DiscordMessageEvent, + client, + }); + + expect(result).not.toBeNull(); + expect(result?.boundSessionKey).toBe(threadBinding.targetSessionKey); + expect(result?.shouldRequireMention).toBe(false); + }); +}); + +describe("shouldIgnoreBoundThreadWebhookMessage", () => { + beforeEach(() => { + threadBindingTesting.resetThreadBindingsForTests(); + }); + + it("returns true when inbound webhook id matches the bound thread webhook", () => { + expect( + shouldIgnoreBoundThreadWebhookMessage({ + webhookId: "wh-1", + threadBinding: createThreadBinding(), + }), + ).toBe(true); + }); + + it("returns false when webhook ids differ", () => { + expect( + shouldIgnoreBoundThreadWebhookMessage({ + webhookId: "wh-other", + threadBinding: createThreadBinding(), + }), + ).toBe(false); + }); + + it("returns false when there is no bound thread webhook", () => { + expect( + shouldIgnoreBoundThreadWebhookMessage({ + webhookId: "wh-1", + threadBinding: createThreadBinding({ webhookId: undefined }), + }), + ).toBe(false); + }); + + it("returns true for recently unbound thread webhook echoes", async () => { + const manager = createThreadBindingManager({ + accountId: "default", + persist: false, + enableSweeper: false, + }); + const binding = await manager.bindTarget({ + threadId: "thread-1", + channelId: "parent-1", + targetKind: "subagent", + targetSessionKey: "agent:main:subagent:child-1", + agentId: "main", + webhookId: "wh-1", + webhookToken: "tok-1", + }); + expect(binding).not.toBeNull(); + + manager.unbindThread({ + threadId: "thread-1", + sendFarewell: false, + }); + + expect( + shouldIgnoreBoundThreadWebhookMessage({ + accountId: "default", + threadId: "thread-1", + webhookId: "wh-1", + }), + ).toBe(true); + }); +}); diff --git a/src/discord/monitor/message-handler.preflight.ts b/src/discord/monitor/message-handler.preflight.ts index d474ce2d0..0d648aeb7 100644 --- a/src/discord/monitor/message-handler.preflight.ts +++ b/src/discord/monitor/message-handler.preflight.ts @@ -25,6 +25,7 @@ import { upsertChannelPairingRequest, } from "../../pairing/pairing-store.js"; import { resolveAgentRoute } from "../../routing/resolve-route.js"; +import { resolveAgentIdFromSessionKey } from "../../routing/session-key.js"; import { fetchPluralKitMessageInfo } from "../pluralkit.js"; import { sendMessageDiscord } from "../send.js"; import { @@ -55,6 +56,10 @@ import { } from "./message-utils.js"; import { resolveDiscordSenderIdentity, resolveDiscordWebhookId } from "./sender-identity.js"; import { resolveDiscordSystemEvent } from "./system-events.js"; +import { + isRecentlyUnboundThreadWebhookMessage, + type ThreadBindingRecord, +} from "./thread-bindings.js"; import { resolveDiscordThreadChannel, resolveDiscordThreadParentInfo } from "./threading.js"; export type { @@ -62,6 +67,41 @@ export type { DiscordMessagePreflightParams, } from "./message-handler.preflight.types.js"; +export function resolvePreflightMentionRequirement(params: { + shouldRequireMention: boolean; + isBoundThreadSession: boolean; +}): boolean { + if (!params.shouldRequireMention) { + return false; + } + return !params.isBoundThreadSession; +} + +export function shouldIgnoreBoundThreadWebhookMessage(params: { + accountId?: string; + threadId?: string; + webhookId?: string | null; + threadBinding?: ThreadBindingRecord; +}): boolean { + const webhookId = params.webhookId?.trim() || ""; + if (!webhookId) { + return false; + } + const boundWebhookId = params.threadBinding?.webhookId?.trim() || ""; + if (!boundWebhookId) { + const threadId = params.threadId?.trim() || ""; + if (!threadId) { + return false; + } + return isRecentlyUnboundThreadWebhookMessage({ + accountId: params.accountId, + threadId, + webhookId, + }); + } + return webhookId === boundWebhookId; +} + export async function preflightDiscordMessage( params: DiscordMessagePreflightParams, ): Promise { @@ -253,7 +293,30 @@ export async function preflightDiscordMessage( // Pass parent peer for thread binding inheritance parentPeer: earlyThreadParentId ? { kind: "channel", id: earlyThreadParentId } : undefined, }); - const mentionRegexes = buildMentionRegexes(params.cfg, route.agentId); + const threadBinding = earlyThreadChannel + ? params.threadBindings.getByThreadId(messageChannelId) + : undefined; + if ( + shouldIgnoreBoundThreadWebhookMessage({ + accountId: params.accountId, + threadId: messageChannelId, + webhookId, + threadBinding, + }) + ) { + logVerbose(`discord: drop bound-thread webhook echo message ${message.id}`); + return null; + } + const boundSessionKey = threadBinding?.targetSessionKey?.trim(); + const boundAgentId = boundSessionKey ? resolveAgentIdFromSessionKey(boundSessionKey) : undefined; + const effectiveRoute = boundSessionKey + ? { + ...route, + sessionKey: boundSessionKey, + agentId: boundAgentId ?? route.agentId, + } + : route; + const mentionRegexes = buildMentionRegexes(params.cfg, effectiveRoute.agentId); const explicitlyMentioned = Boolean( botId && message.mentionedUsers?.some((user: User) => user.id === botId), ); @@ -314,7 +377,7 @@ export async function preflightDiscordMessage( const threadChannelSlug = channelName ? normalizeDiscordSlug(channelName) : ""; const threadParentSlug = threadParentName ? normalizeDiscordSlug(threadParentName) : ""; - const baseSessionKey = route.sessionKey; + const baseSessionKey = effectiveRoute.sessionKey; const channelConfig = isGuildMessage ? resolveDiscordChannelConfigWithFallback({ guildInfo, @@ -408,7 +471,7 @@ export async function preflightDiscordMessage( : undefined; const threadOwnerId = threadChannel ? (threadChannel.ownerId ?? channelInfo?.ownerId) : undefined; - const shouldRequireMention = resolveDiscordShouldRequireMention({ + const shouldRequireMentionByConfig = resolveDiscordShouldRequireMention({ isGuildMessage, isThread: Boolean(threadChannel), botId, @@ -416,6 +479,11 @@ export async function preflightDiscordMessage( channelConfig, guildInfo, }); + const isBoundThreadSession = Boolean(boundSessionKey && threadChannel); + const shouldRequireMention = resolvePreflightMentionRequirement({ + shouldRequireMention: shouldRequireMentionByConfig, + isBoundThreadSession, + }); // Preflight audio transcription for mention detection in guilds // This allows voice notes to be checked for mentions before being dropped @@ -547,7 +615,7 @@ export async function preflightDiscordMessage( }); const effectiveWasMentioned = mentionGate.effectiveWasMentioned; logDebug( - `[discord-preflight] shouldRequireMention=${shouldRequireMention} mentionGate.shouldSkip=${mentionGate.shouldSkip} wasMentioned=${wasMentioned}`, + `[discord-preflight] shouldRequireMention=${shouldRequireMention} baseRequireMention=${shouldRequireMentionByConfig} boundThreadSession=${isBoundThreadSession} mentionGate.shouldSkip=${mentionGate.shouldSkip} wasMentioned=${wasMentioned}`, ); if (isGuildMessage && shouldRequireMention) { if (botId && mentionGate.shouldSkip) { @@ -586,7 +654,7 @@ export async function preflightDiscordMessage( if (systemText) { logDebug(`[discord-preflight] drop: system event`); enqueueSystemEvent(systemText, { - sessionKey: route.sessionKey, + sessionKey: effectiveRoute.sessionKey, contextKey: `discord:system:${messageChannelId}:${message.id}`, }); return null; @@ -598,7 +666,9 @@ export async function preflightDiscordMessage( return null; } - logDebug(`[discord-preflight] success: route=${route.agentId} sessionKey=${route.sessionKey}`); + logDebug( + `[discord-preflight] success: route=${effectiveRoute.agentId} sessionKey=${effectiveRoute.sessionKey}`, + ); return { cfg: params.cfg, discordConfig: params.discordConfig, @@ -628,7 +698,10 @@ export async function preflightDiscordMessage( baseText, messageText, wasMentioned, - route, + route: effectiveRoute, + threadBinding, + boundSessionKey: boundSessionKey || undefined, + boundAgentId, guildInfo, guildSlug, threadChannel, @@ -651,5 +724,6 @@ export async function preflightDiscordMessage( effectiveWasMentioned, canDetectMention, historyEntry, + threadBindings: params.threadBindings, }; } diff --git a/src/discord/monitor/message-handler.preflight.types.ts b/src/discord/monitor/message-handler.preflight.types.ts index f06b8d453..86a32dbf7 100644 --- a/src/discord/monitor/message-handler.preflight.types.ts +++ b/src/discord/monitor/message-handler.preflight.types.ts @@ -5,6 +5,7 @@ import type { resolveAgentRoute } from "../../routing/resolve-route.js"; import type { DiscordChannelConfigResolved, DiscordGuildEntryResolved } from "./allow-list.js"; import type { DiscordChannelInfo } from "./message-utils.js"; import type { DiscordSenderIdentity } from "./sender-identity.js"; +import type { ThreadBindingManager, ThreadBindingRecord } from "./thread-bindings.js"; export type { DiscordSenderIdentity } from "./sender-identity.js"; import type { DiscordThreadChannel } from "./threading.js"; @@ -51,6 +52,9 @@ export type DiscordMessagePreflightContext = { wasMentioned: boolean; route: ReturnType; + threadBinding?: ThreadBindingRecord; + boundSessionKey?: string; + boundAgentId?: string; guildInfo: DiscordGuildEntryResolved | null; guildSlug: string; @@ -79,6 +83,7 @@ export type DiscordMessagePreflightContext = { canDetectMention: boolean; historyEntry?: HistoryEntry; + threadBindings: ThreadBindingManager; }; export type DiscordMessagePreflightParams = { @@ -100,6 +105,7 @@ export type DiscordMessagePreflightParams = { guildEntries?: Record; ackReactionScope: DiscordMessagePreflightContext["ackReactionScope"]; groupPolicy: DiscordMessagePreflightContext["groupPolicy"]; + threadBindings: ThreadBindingManager; data: DiscordMessageEvent; client: Client; }; diff --git a/src/discord/monitor/message-handler.process.test.ts b/src/discord/monitor/message-handler.process.test.ts index 9bbe5baf9..b344ff198 100644 --- a/src/discord/monitor/message-handler.process.test.ts +++ b/src/discord/monitor/message-handler.process.test.ts @@ -1,20 +1,30 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; import { DEFAULT_EMOJIS } from "../../channels/status-reactions.js"; import { createBaseDiscordMessageContext } from "./message-handler.test-harness.js"; +import { + __testing as threadBindingTesting, + createThreadBindingManager, +} from "./thread-bindings.js"; -const reactMessageDiscord = vi.fn(async () => {}); -const removeReactionDiscord = vi.fn(async () => {}); -const editMessageDiscord = vi.fn(async () => ({})); -const deliverDiscordReply = vi.fn(async () => {}); -const createDiscordDraftStream = vi.fn(() => ({ - update: vi.fn<(text: string) => void>(() => {}), - flush: vi.fn(async () => {}), - messageId: vi.fn(() => "preview-1"), - clear: vi.fn(async () => {}), - stop: vi.fn(async () => {}), - forceNewMessage: vi.fn(() => {}), +const sendMocks = vi.hoisted(() => ({ + reactMessageDiscord: vi.fn(async () => {}), + removeReactionDiscord: vi.fn(async () => {}), })); - +const deliveryMocks = vi.hoisted(() => ({ + editMessageDiscord: vi.fn(async () => ({})), + deliverDiscordReply: vi.fn(async () => {}), + createDiscordDraftStream: vi.fn(() => ({ + update: vi.fn<(text: string) => void>(() => {}), + flush: vi.fn(async () => {}), + messageId: vi.fn(() => "preview-1"), + clear: vi.fn(async () => {}), + stop: vi.fn(async () => {}), + forceNewMessage: vi.fn(() => {}), + })), +})); +const editMessageDiscord = deliveryMocks.editMessageDiscord; +const deliverDiscordReply = deliveryMocks.deliverDiscordReply; +const createDiscordDraftStream = deliveryMocks.createDiscordDraftStream; type DispatchInboundParams = { dispatcher: { sendFinalReply: (payload: { text?: string }) => boolean | Promise; @@ -36,20 +46,20 @@ const readSessionUpdatedAt = vi.fn(() => undefined); const resolveStorePath = vi.fn(() => "/tmp/openclaw-discord-process-test-sessions.json"); vi.mock("../send.js", () => ({ - reactMessageDiscord, - removeReactionDiscord, + reactMessageDiscord: sendMocks.reactMessageDiscord, + removeReactionDiscord: sendMocks.removeReactionDiscord, })); vi.mock("../send.messages.js", () => ({ - editMessageDiscord, + editMessageDiscord: deliveryMocks.editMessageDiscord, })); vi.mock("../draft-stream.js", () => ({ - createDiscordDraftStream, + createDiscordDraftStream: deliveryMocks.createDiscordDraftStream, })); vi.mock("./reply-delivery.js", () => ({ - deliverDiscordReply, + deliverDiscordReply: deliveryMocks.deliverDiscordReply, })); vi.mock("../../auto-reply/dispatch.js", () => ({ @@ -91,8 +101,8 @@ const createBaseContext = createBaseDiscordMessageContext; beforeEach(() => { vi.useRealTimers(); - reactMessageDiscord.mockClear(); - removeReactionDiscord.mockClear(); + sendMocks.reactMessageDiscord.mockClear(); + sendMocks.removeReactionDiscord.mockClear(); editMessageDiscord.mockClear(); deliverDiscordReply.mockClear(); createDiscordDraftStream.mockClear(); @@ -107,6 +117,7 @@ beforeEach(() => { recordInboundSession.mockResolvedValue(undefined); readSessionUpdatedAt.mockReturnValue(undefined); resolveStorePath.mockReturnValue("/tmp/openclaw-discord-process-test-sessions.json"); + threadBindingTesting.resetThreadBindingsForTests(); }); function getLastRouteUpdate(): @@ -126,6 +137,16 @@ function getLastRouteUpdate(): return params?.updateLastRoute; } +function getLastDispatchCtx(): + | { SessionKey?: string; MessageThreadId?: string | number } + | undefined { + const callArgs = dispatchInboundMessage.mock.calls.at(-1) as unknown[] | undefined; + const params = callArgs?.[0] as + | { ctx?: { SessionKey?: string; MessageThreadId?: string | number } } + | undefined; + return params?.ctx; +} + describe("processDiscordMessage ack reactions", () => { it("skips ack reactions for group-mentions when mentions are not required", async () => { const ctx = await createBaseContext({ @@ -136,7 +157,7 @@ describe("processDiscordMessage ack reactions", () => { // oxlint-disable-next-line typescript/no-explicit-any await processDiscordMessage(ctx as any); - expect(reactMessageDiscord).not.toHaveBeenCalled(); + expect(sendMocks.reactMessageDiscord).not.toHaveBeenCalled(); }); it("sends ack reactions for mention-gated guild messages when mentioned", async () => { @@ -148,7 +169,7 @@ describe("processDiscordMessage ack reactions", () => { // oxlint-disable-next-line typescript/no-explicit-any await processDiscordMessage(ctx as any); - expect(reactMessageDiscord.mock.calls[0]).toEqual(["c1", "m1", "👀", { rest: {} }]); + expect(sendMocks.reactMessageDiscord.mock.calls[0]).toEqual(["c1", "m1", "👀", { rest: {} }]); }); it("uses preflight-resolved messageChannelId when message.channelId is missing", async () => { @@ -166,7 +187,7 @@ describe("processDiscordMessage ack reactions", () => { // oxlint-disable-next-line typescript/no-explicit-any await processDiscordMessage(ctx as any); - expect(reactMessageDiscord.mock.calls[0]).toEqual([ + expect(sendMocks.reactMessageDiscord.mock.calls[0]).toEqual([ "fallback-channel", "m1", "👀", @@ -187,7 +208,7 @@ describe("processDiscordMessage ack reactions", () => { await processDiscordMessage(ctx as any); const emojis = ( - reactMessageDiscord.mock.calls as unknown as Array<[unknown, unknown, string]> + sendMocks.reactMessageDiscord.mock.calls as unknown as Array<[unknown, unknown, string]> ).map((call) => call[2]); expect(emojis).toContain("👀"); expect(emojis).toContain(DEFAULT_EMOJIS.done); @@ -216,7 +237,7 @@ describe("processDiscordMessage ack reactions", () => { await runPromise; const emojis = ( - reactMessageDiscord.mock.calls as unknown as Array<[unknown, unknown, string]> + sendMocks.reactMessageDiscord.mock.calls as unknown as Array<[unknown, unknown, string]> ).map((call) => call[2]); expect(emojis).toContain(DEFAULT_EMOJIS.stallSoft); expect(emojis).toContain(DEFAULT_EMOJIS.stallHard); @@ -289,6 +310,52 @@ describe("processDiscordMessage session routing", () => { accountId: "default", }); }); + + it("prefers bound session keys and sets MessageThreadId for bound thread messages", async () => { + const threadBindings = createThreadBindingManager({ + accountId: "default", + persist: false, + enableSweeper: false, + }); + await threadBindings.bindTarget({ + threadId: "thread-1", + channelId: "c-parent", + targetKind: "subagent", + targetSessionKey: "agent:main:subagent:child", + agentId: "main", + webhookId: "wh_1", + webhookToken: "tok_1", + introText: "", + }); + + const ctx = await createBaseContext({ + messageChannelId: "thread-1", + threadChannel: { id: "thread-1", name: "subagent-thread" }, + boundSessionKey: "agent:main:subagent:child", + threadBindings, + route: { + agentId: "main", + channel: "discord", + accountId: "default", + sessionKey: "agent:main:discord:channel:c1", + mainSessionKey: "agent:main:main", + }, + }); + + // oxlint-disable-next-line typescript/no-explicit-any + await processDiscordMessage(ctx as any); + + expect(getLastDispatchCtx()).toMatchObject({ + SessionKey: "agent:main:subagent:child", + MessageThreadId: "thread-1", + }); + expect(getLastRouteUpdate()).toEqual({ + sessionKey: "agent:main:subagent:child", + channel: "discord", + to: "channel:thread-1", + accountId: "default", + }); + }); }); describe("processDiscordMessage draft streaming", () => { diff --git a/src/discord/monitor/message-handler.process.ts b/src/discord/monitor/message-handler.process.ts index 0badfe483..307fca48f 100644 --- a/src/discord/monitor/message-handler.process.ts +++ b/src/discord/monitor/message-handler.process.ts @@ -94,6 +94,8 @@ export async function processDiscordMessage(ctx: DiscordMessagePreflightContext) guildSlug, channelConfig, baseSessionKey, + boundSessionKey, + threadBindings, route, commandAuthorized, } = ctx; @@ -324,7 +326,7 @@ export async function processDiscordMessage(ctx: DiscordMessagePreflightContext) CommandBody: baseText, From: effectiveFrom, To: effectiveTo, - SessionKey: autoThreadContext?.SessionKey ?? threadKeys.sessionKey, + SessionKey: boundSessionKey ?? autoThreadContext?.SessionKey ?? threadKeys.sessionKey, AccountId: route.accountId, ChatType: isDirectMessage ? "direct" : "channel", ConversationLabel: fromLabel, @@ -346,6 +348,7 @@ export async function processDiscordMessage(ctx: DiscordMessagePreflightContext) ReplyToBody: replyContext?.body, ReplyToSender: replyContext?.sender, ParentSessionKey: autoThreadContext?.ParentSessionKey ?? threadKeys.parentSessionKey, + MessageThreadId: threadChannel?.id ?? autoThreadContext?.createdThreadId ?? undefined, ThreadStarterBody: threadStarterBody, ThreadLabel: threadLabel, Timestamp: resolveTimestampMs(message.timestamp), @@ -633,6 +636,8 @@ export async function processDiscordMessage(ctx: DiscordMessagePreflightContext) maxLinesPerMessage: discordConfig?.maxLinesPerMessage, tableMode, chunkMode, + sessionKey: ctxPayload.SessionKey, + threadBindings, }); replyReference.markSent(); }, diff --git a/src/discord/monitor/message-handler.test-harness.ts b/src/discord/monitor/message-handler.test-harness.ts index be8ecb10e..1913fa8cf 100644 --- a/src/discord/monitor/message-handler.test-harness.ts +++ b/src/discord/monitor/message-handler.test-harness.ts @@ -2,6 +2,7 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import type { DiscordMessagePreflightContext } from "./message-handler.preflight.js"; +import { createNoopThreadBindingManager } from "./thread-bindings.js"; export async function createBaseDiscordMessageContext( overrides: Record = {}, @@ -67,6 +68,7 @@ export async function createBaseDiscordMessageContext( sessionKey: "agent:main:discord:guild:g1", mainSessionKey: "agent:main:main", }, + threadBindings: createNoopThreadBindingManager("default"), ...overrides, } as unknown as DiscordMessagePreflightContext; } diff --git a/src/discord/monitor/model-picker-preferences.ts b/src/discord/monitor/model-picker-preferences.ts index 14850475c..6c7d7b960 100644 --- a/src/discord/monitor/model-picker-preferences.ts +++ b/src/discord/monitor/model-picker-preferences.ts @@ -6,6 +6,7 @@ import { normalizeProviderId } from "../../agents/model-selection.js"; import { resolveStateDir } from "../../config/paths.js"; import { withFileLock } from "../../infra/file-lock.js"; import { resolveRequiredHomeDir } from "../../infra/home-dir.js"; +import { normalizeAccountId as normalizeSharedAccountId } from "../../routing/account-id.js"; const MODEL_PICKER_PREFERENCES_LOCK_OPTIONS = { retries: { @@ -41,11 +42,6 @@ function resolvePreferencesStorePath(env: NodeJS.ProcessEnv = process.env): stri return path.join(stateDir, "discord", "model-picker-preferences.json"); } -function normalizeAccountId(value?: string): string { - const normalized = value?.trim().toLowerCase(); - return normalized || "default"; -} - function normalizeId(value?: string): string { return value?.trim() ?? ""; } @@ -57,7 +53,7 @@ export function buildDiscordModelPickerPreferenceKey( if (!userId) { return null; } - const accountId = normalizeAccountId(scope.accountId); + const accountId = normalizeSharedAccountId(scope.accountId); const guildId = normalizeId(scope.guildId); if (guildId) { return `discord:${accountId}:guild:${guildId}:user:${userId}`; diff --git a/src/discord/monitor/native-command.model-picker.test.ts b/src/discord/monitor/native-command.model-picker.test.ts index 95b9b4d62..f555fe793 100644 --- a/src/discord/monitor/native-command.model-picker.test.ts +++ b/src/discord/monitor/native-command.model-picker.test.ts @@ -8,6 +8,7 @@ import type { import type { ModelsProviderData } from "../../auto-reply/reply/commands-models.js"; import * as dispatcherModule from "../../auto-reply/reply/provider-dispatcher.js"; import type { OpenClawConfig } from "../../config/config.js"; +import * as globalsModule from "../../globals.js"; import * as timeoutModule from "../../utils/with-timeout.js"; import * as modelPickerPreferencesModule from "./model-picker-preferences.js"; import * as modelPickerModule from "./model-picker.js"; @@ -15,6 +16,7 @@ import { createDiscordModelPickerFallbackButton, createDiscordModelPickerFallbackSelect, } from "./native-command.js"; +import { createNoopThreadBindingManager, type ThreadBindingManager } from "./thread-bindings.js"; function createModelsProviderData(entries: Record): ModelsProviderData { const byProvider = new Map>(); @@ -70,6 +72,7 @@ function createModelPickerContext(): ModelPickerContext { discordConfig: cfg.channels?.discord ?? {}, accountId: "default", sessionPrefix: "discord:slash", + threadBindings: createNoopThreadBindingManager("default"), }; } @@ -99,6 +102,38 @@ function createInteraction(params?: { userId?: string; values?: string[] }): Moc }; } +function createBoundThreadBindingManager(params: { + accountId: string; + threadId: string; + targetSessionKey: string; + agentId: string; +}): ThreadBindingManager { + return { + accountId: params.accountId, + getSessionTtlMs: () => 24 * 60 * 60 * 1000, + getByThreadId: (threadId: string) => + threadId === params.threadId + ? { + accountId: params.accountId, + channelId: "parent-1", + threadId: params.threadId, + targetKind: "subagent", + targetSessionKey: params.targetSessionKey, + agentId: params.agentId, + boundBy: "system", + boundAt: Date.now(), + } + : undefined, + getBySessionKey: () => undefined, + listBySessionKey: () => [], + listBindings: () => [], + bindTarget: async () => null, + unbindThread: () => null, + unbindBySessionKey: () => [], + stop: () => {}, + }; +} + describe("Discord model picker interactions", () => { beforeEach(() => { vi.restoreAllMocks(); @@ -375,4 +410,78 @@ describe("Discord model picker interactions", () => { expect(dispatchCall.ctx?.CommandBody).toBe("/model openai/gpt-4o"); expect(dispatchCall.ctx?.CommandArgs?.values?.model).toBe("openai/gpt-4o"); }); + + it("verifies model state against the bound thread session", async () => { + const context = createModelPickerContext(); + context.threadBindings = createBoundThreadBindingManager({ + accountId: "default", + threadId: "thread-bound", + targetSessionKey: "agent:worker:subagent:bound", + agentId: "worker", + }); + const pickerData = createModelsProviderData({ + openai: ["gpt-4.1", "gpt-4o"], + anthropic: ["claude-sonnet-4-5"], + }); + const modelCommand: ChatCommandDefinition = { + key: "model", + nativeName: "model", + description: "Switch model", + textAliases: ["/model"], + acceptsArgs: true, + argsParsing: "none" as CommandArgsParsing, + scope: "native", + }; + + vi.spyOn(modelPickerModule, "loadDiscordModelPickerData").mockResolvedValue(pickerData); + vi.spyOn(commandRegistryModule, "findCommandByNativeName").mockImplementation((name) => + name === "model" ? modelCommand : undefined, + ); + vi.spyOn(commandRegistryModule, "listChatCommands").mockReturnValue([modelCommand]); + vi.spyOn(commandRegistryModule, "resolveCommandArgMenu").mockReturnValue(null); + vi.spyOn(dispatcherModule, "dispatchReplyWithDispatcher").mockResolvedValue({} as never); + const verboseSpy = vi.spyOn(globalsModule, "logVerbose").mockImplementation(() => {}); + + const select = createDiscordModelPickerFallbackSelect(context); + const selectInteraction = createInteraction({ + userId: "owner", + values: ["gpt-4o"], + }); + selectInteraction.channel = { + type: ChannelType.PublicThread, + id: "thread-bound", + }; + const selectData: PickerSelectData = { + cmd: "model", + act: "model", + view: "models", + u: "owner", + p: "openai", + pg: "1", + }; + await select.run(selectInteraction as unknown as PickerSelectInteraction, selectData); + + const button = createDiscordModelPickerFallbackButton(context); + const submitInteraction = createInteraction({ userId: "owner" }); + submitInteraction.channel = { + type: ChannelType.PublicThread, + id: "thread-bound", + }; + const submitData: PickerButtonData = { + cmd: "model", + act: "submit", + view: "models", + u: "owner", + p: "openai", + pg: "1", + mi: "2", + }; + + await button.run(submitInteraction as unknown as PickerButtonInteraction, submitData); + + const mismatchLog = verboseSpy.mock.calls.find((call) => + String(call[0] ?? "").includes("model picker override mismatch"), + )?.[0]; + expect(mismatchLog).toContain("session key agent:worker:subagent:bound"); + }); }); diff --git a/src/discord/monitor/native-command.ts b/src/discord/monitor/native-command.ts index a9c2cef9f..19c0bc474 100644 --- a/src/discord/monitor/native-command.ts +++ b/src/discord/monitor/native-command.ts @@ -48,6 +48,7 @@ import { upsertChannelPairingRequest, } from "../../pairing/pairing-store.js"; import { resolveAgentRoute } from "../../routing/resolve-route.js"; +import { resolveAgentIdFromSessionKey } from "../../routing/session-key.js"; import { buildUntrustedChannelMetadata } from "../../security/channel-metadata.js"; import { chunkItems } from "../../utils/chunk-items.js"; import { withTimeout } from "../../utils/with-timeout.js"; @@ -80,6 +81,7 @@ import { type DiscordModelPickerCommandContext, } from "./model-picker.js"; import { resolveDiscordSenderIdentity } from "./sender-identity.js"; +import type { ThreadBindingManager } from "./thread-bindings.js"; import { resolveDiscordThreadParentInfo } from "./threading.js"; type DiscordConfig = NonNullable["discord"]; @@ -268,6 +270,7 @@ type DiscordCommandArgContext = { discordConfig: DiscordConfig; accountId: string; sessionPrefix: string; + threadBindings: ThreadBindingManager; }; type DiscordModelPickerContext = DiscordCommandArgContext; @@ -353,6 +356,7 @@ async function resolveDiscordModelPickerRoute(params: { interaction: CommandInteraction | ButtonInteraction | StringSelectMenuInteraction; cfg: ReturnType; accountId: string; + threadBindings: ThreadBindingManager; }) { const { interaction, cfg, accountId } = params; const channel = interaction.channel; @@ -383,7 +387,7 @@ async function resolveDiscordModelPickerRoute(params: { threadParentId = parentInfo.id; } - return resolveAgentRoute({ + const route = resolveAgentRoute({ cfg, channel: "discord", accountId, @@ -395,6 +399,19 @@ async function resolveDiscordModelPickerRoute(params: { }, parentPeer: threadParentId ? { kind: "channel", id: threadParentId } : undefined, }); + + const threadBinding = isThreadChannel + ? params.threadBindings.getByThreadId(rawChannelId) + : undefined; + const boundSessionKey = threadBinding?.targetSessionKey?.trim(); + const boundAgentId = boundSessionKey ? resolveAgentIdFromSessionKey(boundSessionKey) : undefined; + return boundSessionKey + ? { + ...route, + sessionKey: boundSessionKey, + agentId: boundAgentId ?? route.agentId, + } + : route; } function resolveDiscordModelPickerCurrentModel(params: { @@ -436,6 +453,7 @@ async function replyWithDiscordModelPickerProviders(params: { command: DiscordModelPickerCommandContext; userId: string; accountId: string; + threadBindings: ThreadBindingManager; preferFollowUp: boolean; }) { const data = await loadDiscordModelPickerData(params.cfg); @@ -443,6 +461,7 @@ async function replyWithDiscordModelPickerProviders(params: { interaction: params.interaction, cfg: params.cfg, accountId: params.accountId, + threadBindings: params.threadBindings, }); const currentModel = resolveDiscordModelPickerCurrentModel({ cfg: params.cfg, @@ -603,6 +622,7 @@ async function handleDiscordModelPickerInteraction( interaction, cfg: ctx.cfg, accountId: ctx.accountId, + threadBindings: ctx.threadBindings, }); const currentModelRef = resolveDiscordModelPickerCurrentModel({ cfg: ctx.cfg, @@ -827,6 +847,7 @@ async function handleDiscordModelPickerInteraction( accountId: ctx.accountId, sessionPrefix: ctx.sessionPrefix, preferFollowUp: true, + threadBindings: ctx.threadBindings, suppressReplies: true, }), 12000, @@ -957,6 +978,7 @@ async function handleDiscordCommandArgInteraction( accountId: ctx.accountId, sessionPrefix: ctx.sessionPrefix, preferFollowUp: true, + threadBindings: ctx.threadBindings, }); } @@ -968,6 +990,7 @@ class DiscordCommandArgButton extends Button { private discordConfig: DiscordConfig; private accountId: string; private sessionPrefix: string; + private threadBindings: ThreadBindingManager; constructor(params: { label: string; @@ -976,6 +999,7 @@ class DiscordCommandArgButton extends Button { discordConfig: DiscordConfig; accountId: string; sessionPrefix: string; + threadBindings: ThreadBindingManager; }) { super(); this.label = params.label; @@ -984,6 +1008,7 @@ class DiscordCommandArgButton extends Button { this.discordConfig = params.discordConfig; this.accountId = params.accountId; this.sessionPrefix = params.sessionPrefix; + this.threadBindings = params.threadBindings; } async run(interaction: ButtonInteraction, data: ComponentData) { @@ -992,6 +1017,7 @@ class DiscordCommandArgButton extends Button { discordConfig: this.discordConfig, accountId: this.accountId, sessionPrefix: this.sessionPrefix, + threadBindings: this.threadBindings, }); } } @@ -1067,6 +1093,7 @@ function buildDiscordCommandArgMenu(params: { discordConfig: DiscordConfig; accountId: string; sessionPrefix: string; + threadBindings: ThreadBindingManager; }): { content: string; components: Row

+!LiLke4AIyDrh$q}qd*hTmM2 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�w3=$`rz}31ND39PiGg8GP-R&HO%-+cemJ&ejdH)cZk~{8UL~` zp($;?X4QWIIi>%CRz*a<-t_GOn+UabZTR3dv}f-2WWabVkBId`QT ztIDa%L4H=9*{L1f65f#}o_7(?i(^k50_Ai6u*ir&gQb<_Q7q16$u Q%LR`u{@e3iv%ib~2Q_%AH~;_u literal 0 HcmV?d00001 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/234.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/234.png new file mode 100644 index 0000000000000000000000000000000000000000..c0da9ae922cf9eace5f626b8346b8f126c7e6902 GIT binary patch literal 33325 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 LY{p#h+tU9BeU#l6 literal 0 HcmV?d00001 diff --git a/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/258.png b/apps/ios/Sources/Assets.xcassets/AppIcon.appiconset/258.png new file mode 100644 index 0000000000000000000000000000000000000000..dbfb75050bdca5455a7ca44da513224fab8e3772 GIT binary patch literal 39552 zcmbrlWmp_d@Gm;J1%id(4q-RATW|uq_#(jx?ruRt2yQ_Z7I$}DoCGH<7TgICLVy54 zf&}=gYZYZuK)gzv-^2>YkbIp02L`xA^ZnKn#5ic@3bU0RY-#0RC;EEkfkw z%`{;euOX_6|0`nzcqB|-0C0Bk@_;GHG3px_GU9yyUw8bMXKv}~_TTycLXUDU=Kqrp z05e?w7oPvGWIQWtPs>M!KaU5i$D{Jc!jeB?a@+rfIsU^I{|ih0hkd==ydHTp|HB?S zF!@Jp^@ura{|{{Oe_%^DkN^1N9(g34oxK0k^&kCL;wRQFy4sIt+{c3!@C0Ch5+L_q z{U5I%$+ZvwME?Q+M&kcYv&aB|)^GrzT>jr_toZ=&GzF61Xu%%00eLWECKFE#1HTS ze1P!36+r&+b^iaO|AhSilkj-=zb^m@E*d%-ItCgEfKGyjL4x*g0AP5mIXVV_@!zNT z{}LKHJ_arxCN>TM)+57f;>V8=69WtTF~Y{e#CUu^=opv)7B&eE6CbXumiZq%Quhx@ z1!N7q-^iIaPw=1dv&g|blBX%2vo`io3WgT43CKUnp?@sGf2#gZML4+Vc>hVp|4$Fe zqu@t9SUCSlN5{hYPY-~JMS{)5heIl>^@q&-Q4KCRbHSq`{>>A-XDo6QtOD{L7Sn>T z!p1&r%h2SRf6KrVj7K#j7$kr+@Ht&y27_-SO@1>M*>+kVHB11$iK}r|S28m)gSiMH zZOn#EU-@ASXGE?Mn7uUY6C-SyxIIHLekM?yly`obj*67J$GRFk+RU4*ON?M6lz(SM zZ`xrybiGS4w5xs;Yzud%yWX`tKuulR$TkC5-_gaNN&xXqD5IZJ#7JM%h;5xjo@9jI z0eRNb{LhiEq(9-xY0jwpcs|9I+On{`tiXJipwyN{8yP7uvC1EEhT{AxSvMEqJI&x# zl=IQ}*sYE56#4tEN9*0m(ZXIC{i{1nHHkCH#*yq(3Y5UG6t6F!;I&zEctNwmC24+% z`aJ*e;)Do&$^AK%?d9Z$YinHSbD#}dZ&GV_x2z7=y}N0~^!d%Td&|}eQ{U8WKJ7;t z!UsTPqcreRCU)bq(caXiqb-JcO)b{V?1!=5HJT$vl>ctpR$aJR19CbijzS#?f%TJ2K(qdPUjSOu|0!PD#MM zj?iQ4a{}_#ALD$d>InOA<>7jtIzqNn^IO{M`Oz=-wSj^&l69Bf=Qr0^djxF&)ygV{ z+Cw1MIf1hz*8&gIIf-a?^TeHog#XG!-;}T1W+E=u+4LpBBKCFU=yDv;a#%)m7;GkW z&%6upVPWaNeBS+6+=}ri zyq`yNi>b}&dCU2XksUEI(?3W66%H5^Pu$Y#{{R6G=eHiM1nW2p>L%Xh5tslnt$xQb$c17=;5rT$mDZzh5}8Ne=H9v> zS)h-RXr?)TjWyt$c)g<97!k-Rarh+#ks$X_KPkOEy-Z}RzzgymQSzmy6|CPu$o5^_>wTcT!OZFa(8k{y$?o;@Go(m7&Abz1<{ZT@jm+%(9|fc3RM zjealx0l$@&NxTWSQ=6WWoY4XNV;0x8PG4J759{cUw0MSgxs-kwo}@62_ySmWEj!ym zfwgT%lhX9}0<9yq?+WjNHE|u&Z&$Imb4|tHnPPMvUtV8s#BVNyN%&j8-E_K?KN#jV zm6Q(VGItrjFgGtr|2>7{3R*se;oU~wgVMLfwoG$F~LZ25Q(<4L3~5+ zrjPyD^xle~80kE_|4wsqmGSMNR8Avt^$k~X{5Emr9whxDvLm&AF*8WlEk7jIcYklG z%aiU2yxdsk)W`Wt7udX@#zQ2P7u;27RHrdOF~hgY{JbYua+88qe&cQc>3jF!FLr>x zKyziJIel>*fA8BjKlLGqfBPV(CUIvItv^1Df?y-i^mvOC{rP?4TJ3QiZrZ`HnVA|B z)<^EouK89Z{=BX9yhbaNwKY92g6=wIKGnH}P(;uLXEP1gc5UMK_Ir1~8;m?$n3*OB zJfe;WygEfG%h3u&o1-QZT5tL;H_!h3x$dv6At2a@qxc+wY~34{5{beUOQ^vJ#@-Oc zG1=UyLvBu{1w_#LUwa(yUo06#BpQ8^5^g1;mGX(C3sjPNbH4wLEA=xAk7>l~o8GiM z#!d5hC7$n)mQAu6!+WmD=_G<4X2pm%qC)IZx+(cA$J2iDSH#MSMBT1ZNCa|MM-Wa7$29kW#uR%{b_dcXE<_$7DgZZd^axU&GUHcO>f*c+(~AF zANahk1IG*dH}eiIelcTsTGm?GdI&Cjmh7zCB^(i6P<>dSx@Q{Z?#b)YXLjGedleX1 zfT=ILU=qZH%S2W;SxqbUbXBT87E{Ih{5*Q$4Ylu$?1CxvwPMVB2D2`zzsEZ_1Jk?4 z?Y4;d2hERlMDFG|dkfj}>36=ixXc5`N5`~Ro-@<9iXS6+>Lcf09A9i6lp4PqI9MpU z_&E8=)Re@cm&~;5(|ZGj`;G%OKiS;?|LgO|L|j?i&`Xh-NMFPC2RU5DP!g=G-1piS zt;KZS+j9jJxN`p!VyXRy0w8Xgz_)SDT1Q8KLk-q$x%Hf@IU?Z6EKV zyvzb$&zsTBPVV4^@E-r2I%)j|j`}bbm&iR_8Tw%VhgBwAw=l-G_(NB^V57_M(|SK9 zBI59z!@b1Y_?q0nSEq8cOt`Kc%YV1`8ARoP1GB`vDVH#&zYCNKt)}gMW>tLz36?H; zpQV_BiDQX~qt>^W_Nn$Jx$gLBTSNLtIOLw)a|QfGlwZrepzjd-JAN{=yBYNA)g}e; z4~&H=|54(|!@T2#Y$i-5{0FIz7Y7r>k+=#jBE-nF$vo8iRnM=ua3Yee_r^?k%x z!yBK{3Xappo8A zRZN^uZFb^ro11XiiOZ3ov+H5n$)E%!72lv}s(r3%n}fP_PLI$v@A+(I(+4w&PaCxy z%zaO}JAm^@GZp{-+AeH2IpQ$D`?1ysmtl-yL?+&+;fdJa2{+ynZn5NJTlTR{a@YMu zzSqy#O%y+qDndw}{}7yCwOt{wq0616Xd6xt^_3e3LhA0M1@ah=D*0c7RCOT`2#UWV zAv0X$!j`kDBYzc_omi-w?G2eGM}}_YDL=TSUqdQkHNnD!=9u^$@yEbx%8@o6t1Pu; zrXKt+SD#3Py4!47L3RHC7wFOJ?NpKJ@mDPbG$o#lWiOXc${J0V;zJ#%=T#ISC*YbO zzP!m2^54j}#vB9WtfOOPDHNv_Zgkrj%r8lv<#xIxwo%xC&}1}av@vi4`;9bvJ;_ud z4chL*HViHX$r)5@gW~&r#5t!^5|vtbtg!^4YE5y&+86v6AB(1JPoAk@kB*LLgU-Am zKX^zs&jbguQwTCL++n}UIZ}m3$qU1(%U8Szw=lgmF)_Jm6(qkX;6#L?lO%5I9Wm#9g1Qm^_5M_a(wWR!Tc#R!LPE> zkXdgnkS5{uV8Um&c7`*ypoUVa&Sh32G-+{5ic3CR%`bG!Z?xfeC@vsp3M)nX=m?z( zFOh{9%1z6*f%NP_V{5D=9j_G(S!&w)Yx&O{?dQ{wInMSVBNySq)B<~95R5!I6&(#z zf0y32)l7evma*O~jHNeIb>|e~)aNezZrKE!%IC|Up-K-{pyor=yA-w7(Q)U0AaR;& z1lM+y5rgg7J=2{qX!V+r;apa191s{>EfkjI&5@E1kZJ%dBPi}M@tG&WWu`#`{3vBC z754>l;uSmPaj4-eX`%pY2xFSGs}O=OQwTih%xklB@YW-=#`uA5nbm|LVX0TS(_4`Z z_l2wniB%kPW-)U(pB$ULA*?tXjvn5NJzz|?=Eb;jOl#uo)Pc;dH*z#`Tw{XZ%f%?; zLqN>mV?$-7i<7ebT7d=5FOmb!M=XC6WavD{>``h0t;V7!3wiXGIoC?y((WcB^pOL+ zZW`f%(Uz=h@_l>83@L5A2Fla4Gb+iiW0h}ZJ>VY{A4s1XiYn_+SfgD9{UQ1lk|6os zL6qCn{#vQhrTO5g825fElQ?lCwSjYQ57j-$P;I=XqPxh!>Q(H00T?buE6ene&88Ua zLE0k5IM3FTm;EvAlCH`9eWYyYE^Yz1@HVDm^4{cWhEkDOrWYdXzyPW&?kE~dq zVas#o=1*5LTZ7`PDT+%65jrEKnjDu2es8=!y77h_{3Wl3$kvpeS2n{>wpMsvATcCo z`$o;E4R^XNpKQNMaeiqVgB0wg{6y61mLwvr7N|YnD6{5LJmR0bCo;lpt?(y40Rz}e zx6l8 z?yiDJsmS*TB0h`Wg=!{(_r}*jUSnbfPnG3}Kgqk@$dT;n$48wDlWGakvskEUfQsxg z)s3s?^UHT#WUG6OzcPVj)Zb!MZ=%8zQeHoyX5GB|dV086@3grRrX{_TlLIezJIEBV&ae!>9)h~(PUJmS_sQgOS0=0 z5WJ0KEkN((kaO9ttu81vgsyqpIpb@VU#z}rZu=TP1L-Dga@<=dFvlZz8vyIc-*r+r zmiC#ePMVA-i&swZ`?7M-Rj0{RdNcHj<~mC$>S}mRJdW+7wUs;3+)fE!8kfGqTTSwoSK)S!04MJ@ zXzk%%a!J^4DdoNaABz*(L(2YqKyg*f>+kB|Or!=o&w@nR3{JvxKfb_CEi#VHvr8!W z@N}P2)%v+tBZ^i*VV5_4n5e6j&T!Rxuw(zLc0ya>)_mc6*nD9LNGbE{WMce7Y8oOr z)ka-TD_Tsp z*ZhfSL`=W))96tXvTkl3KNOw!sbv(kD^PvYbXLX-(}mX7UGS6fXO69~`&EvuqMDF{ zf9AyPCbsaZRL4iuN(~{YM->&i6r}s5qs}LiJyT4nG}y_hAeJCm$N|gEM`u?`O+^fA z9pCJd%~cHrT~Fc(-V$b;#xNZl*33em!okV_Y#mh%{-kd4)^z#G-_%^4HeJwxQ3f0i z>N>I$aK5vOCR`z7;HIpcPUPKAb0uu*YpO3)7=iS<{sJE@mCOHD6^UQ&kwgv`3n{AC zo@s1e5{uqjnBf6|r*ncXxnVQ*a}Id;S`93WcoSdT5^8ym=xZ!ScX$Xl_XFk(*KFJ? z@U6v-+@!^XPneKKhvX4`2n$)mX?O@U3P`^&Aiq)3Q!Wu=6B9I-Ow`zkdjS)hZJ5?5 z@wC?&uhg(^Vt-0Q`AgjDZ{pmwu@jx z*YcDs2&R(-Vs+!YdSO)tYD&?$zP9~QR%~Mi&xU6>JB>ldRoY7P5J4p&$Xx5$ik1Qy z5IzI~M16D4;A6C-eLq|iQz@dreD#i#4}lg_PA4F}bW57U(KZt=_2M0hB`ozcrBbLK z{o|FPuD?MBu1-2-{~5XcHrJaf^NR403jQ@{nvU`zNT5Wi5i)1GDNL6(mc_5%{e>j` z;D%uBRr|R3=7I#m53Cbe_Nb0btUo(mDcePIGtIW`La6?D1_(yM{6z>mo7@un5 z*s7Trq|E}%3UK8|S1ogImACjBc|PMmB!DBpdQ*hxT)V?;CaBRFVH$6IQeTZ9V7o57^yR zaV{t2?sq9u9CG{8_EyWsJs#PuZR_1m6&;B8;a0wl-96PWyi>Eh>HWOh1g*mA7CD-V zx7euX2U#cU?wP&ww3MU?utSDRFR0P&1A2pp*kP7^k`8@1*2X&;T%Q_W=V zL~uV7Q%(k@577WhbK(c8g4;(mg#6Rw2eqR4aN%XLu9oWT5GV}tf)Pz5j*pE+O#89V z(%v!4$;-_^q$I-;_8O{cYN{O();o*#Xpci}jvGQf8yDLw$@dCmdVCUrXs zp06mVil)I&NGs1^J;ZLxU>#?O`+CD6?ey)yqgM5SU}$``_$|L9b7l#j{NM{QF3nU# zPKq~=ikcu|(NAQ}y(G5aEe&{p__fSgbMXFO?7Hv+T}cVEM1O=~;lyY4O6^h+2|v)1 zb=pt1wN==+Wx;w_&0vKH6-V4w16|h&@1`EjY`Sl=GsSrKE2C{XZLv~5Qst3~;=c0q zuY1Qo4;#?fA@KZpe+5mbijLUpk;y0fYP>$_YNTF!58cjXMA|#Fi36m)oa!25wR+xR z23+G5i`?vvo-ZXsLRLnf6Jaq{Z9jii_FhA+Vr%qF^po`*Vzt72^`(+cYhE$)-HxF(84-(}M3_P*L;D?0*Tr9}$~b?L{!Q`dvl#FDUCK$z z&c?4&pDv{JA}*WV;zLxEZn9R738Qs}%1ssLg_R7zE7&g> zi$l3alx$L9$!Cpq5H%D^9il2+TFUl<(!oa0yoGR1_`Gwx4HX6R;Bd#sH2qFMd3Z4p z)V%mLQ~)GI(EPDtUdWte)@5K$zUe*hU?yGu(|(+I_LvNoh3T|n-i+DI;EGD=Q1$cD z;Kneh&NlD&`Z`6xQGJ{dCk0jF|F2`+$jl2#F~UYTew&c3a^jg zLF5e3fE?c7SbT}Jd0)?_*!9xLEl@FHMPg&|1+6pzkBVt}2`NJw0$-=kxh0Y^N#0_I zOx;45diFGPG^)zFLd||ZL3#Ux|2kIj2`dR2DT&R5VYQ;6G@=uNbGlH@J@j^|sri|5 z77v>QNSb5pJoa#GR8<(E?^lAwWT#2d(4#;T&U#b<#sVwrGmF0;p!9DIJJ98nh}!e? za#&-w|0*6Y>{mE8P~C5}_7cJdhEB`JOD?C)9CAGsY-w)hyd4W}JO5)Q;eAjnemb%C z?ktSUzjaJ}f;fW3X%qL&ffPOcM)QBO!(axcZ5P_$KVhN@>}&U{mXuk1lXd4$#{$hM zn9xKDCDm247Y;2fU>1Si-|XMNok)cuzELyp>>(w;pU6V$G}&*-I; zI@rskiTtyYa_Za!Mz<~_oo)`)n_>ijvly(7nMAt&{#S3q^yQu}#NW3Qb#3DM08;=H zE?1EG)UBMPFE>r2Q)jDV;Zl>1j!8cPKM9lA<-?Oo6nA4O*sd_fia!=y5R+*SAElKk zAt3_8H1Xkbutc2_QULn8l64WY*akB4WXwa}(c8|xnQNF9rnyXmrD8ZM2Mc3ktWbeP zL1Br|XaHTUFo~`rD1WA={={JXnY_Aj>(V6Q3vQZku!~Xf$3U5KDk?pf6Dgl?)Kzo# zn$0YW5*sPh3j4uH2bQHl_rL)2NlKs_m}47(h!;;4)4?dAx>l28tQ7>=ZpK*1R1^LR zO(w2?Kw7W5^*W;QMUz+QaD8zPc))|Oy*XQheWmG0Dx}P99Bhu~orzf(^(t<33U+A! zgYMD>YSkJ`iu6oXd^85~ygjxaJ{V5lab}@RB};wqzYD)@uHU3dN7qhVkk6S2x=YY| zel-2<9wON_V=zz%QzBf>brpq=;_mGY#4Uq_(_7M#wr3JCf7nb-#Oy3Zp<5s!S{%M1 zEF=A60X{1U>?=qfb+)<&kXlM&nu*j0`J{E7Zg6fH zg12;m_xn@z303jhc@O(9A=@87_Gwhk$eHR_t?#1x;uhJvN(lvJ;RnyatFH>Iss}BS zR>#WcU^mF%EUV5hl~K)Qdx!}JjtoUXQu5Jy_#5S?zkKSXR&xpR>>Y7Ef|ek{iE8jo zojy8m5TpZ6I->%c2+>bTk1P5u7V*=uXKGQ;uichDrEl81OJ4E@rUHw$K?tz1Z&x9= zR8r2S4+T@{cG`+Ma3L(;b3!|n+H3!STb7pJ^J)FqMz=}c%V8x-6OVmPSXEL=L=F8$ zf<`7%>QE8*H_HNVpvF2yOq)DLho%&EV-o)+yIhOi?(F4yaKfKU4+!hbPiWextO)o? z7s7}d2xnqpvKyh_xaD;vIHX8vruM32+gp)MNq_i3tt@Xp&}{lO<1*C|=!lD*7H|~q zOu^0cR`Rp?2k0EWG*QbDj#*4`sdyjMjEt(Y(Z`A-AiW=6)Qz#HTgy$9t^qNR?SrzU zW7pNh(i_AAN;#BThq)^w_50dt7zp_1FkV+AJXixyS!M2j>%h8*faS;)qxij7tuX4RYCCW6E3_pzj=A8x;u3@c%SfM5`4 zvMd%W4SAv`CT*11$D}AR6YTf}j~%O(R+r@1+KyqcJ!6ale=K)lBry|ivbA^&Z66j0 zmzfz0jW~vpwL*c7k+jeQjro#wgXyi>*H+4MxokrkIh~doSq?dvPDzadW&ud~kuR+H z$yZ^LA=5F8_Tf9b6*HIX`ivPTlR@lv(qY49Y;5UDVTUPr0XBmG@Y1jF(~nx(n71$x zzr~3>xeghwB`5m+V@IwXYs{uxq4T+A2GX!vI)h^qzs8B6)w>3M)~j3XwDru?2!-(4 z3?NCsiKr`iyqDCLm}Pu?aVJfoHg7w;xktY8X4qUt!}JYFIdMNF`uug~K8onwC$kxK zvGCCjbn$=4ulfAMlf7-Tgmf?JAHZ(bnPE7m>)7rU!HnWk)0tqV%@sZg46MiAG^ z#e)=z7qN-Fe1hYZ^%zV%g-o?pd(I9wtBP4leVI9~-iXFnG~nK&Q_nksJ9O|d>b zV~Q>f35NO`4Ayvfa$Q8>yF2&vk8>7lMlS>3&MvG?Itv?vuM@@XEa{3q_jVeTZ7p-W z1;OnOz6Uc^MgV*(l}T{`GZVGmSx`!?piXLL%5G4Ok~DcE@~aJQ*+GljXZ4Q zv$C@Kg?htrBP=EN=;GL!=h)*=m4Xiai}9mE zbo(9f{jc@}Y@<&FUCiwWpWqf4H#wR9_?gR8s-$R89UoPb;^Ur>-7iG0tlm+gxla@( z6;7%Ud%y(Bb(9W&zNR`YLo@z3T&^6(?jc$xo5B(n{$x+Q=%3~iX^!J#-9BH6fWalA z?UVPk>&&lr2%eW>m=D{1YV*y=r2nDE_A_B;J+obQ+lo%e;5lJ-apvKwh_28|ZRh}& zmI+oeZ)xRAb_MMv|KWIGI=Th%Xh(7fBVtXO%{{b>9r-tuLiqE zOPM;8bKCN4IC2Y05uSfkLm(Fd(@8~7Ws@P6#e5y$veu9C#cdd(Wx`*W@1tqFSNcJp z7{*IrjZuK?dNh3l)(doxww`Jtt*C%j+RKEKe}LWH5OGN1bF>i*O@bg#Vx*-zGGkFN zG9i$EYJ=rqm4E6_l+X(v723%8>tI~QALl)9&WTaS{T%uP`c^zU!;^eFghEobXY-{~ zTZ0GFj|&Z+2end3gjb&Qh>x{xeVoK$?v}_)2m1(Ir;$m#3cTdxn_WA^8CcPmi-KRn zI^7oJv=%7$E;O39025Rkk!O2_wTD(&8+x z3PDz|d#?pPbgH;MmUlhWi%;4Y1Tv1#BGAl9dgL!hgbrRRETA+9H71WN6AtIP(=t7nulGjR z>BWYof4erG-#V!VmGFuyN}EHA#B7CgXXjXcjQu!;iswN(S_qbm+a9O3wxx>OJ|2*F zm7zH4;t

&Pq#o$1>WavfdZ;>@n9FgGS4y5eSc`7?mEe)*u|qS zzPbK?KmFuqm-wQAyN%pG$I{r2wfC40@0?A4@y|Z`%kMnp%V+J?t8#l&fk~~4hJ;O% zN-0*uY<0kkpfjR-O!)^#QL1W>e*5P2{qH>f-qVY3zP!F}i`!hR9GCfGd%i52fB5p- zKmPDXHcfp$cd)98#P$AoQA!Y-T9q^rnMyx~l?lCxEQFZVz>(Q#ru!8c-p)3=Z2n2A zsnQ^J5-NzmR0tH)*1cc7e)pa4y!UW-b#-tB>MkepI&GJ}{lzzzKmOq9{kki5kU&SE zV}ESh$<4OyY|G*-wt+%$Y0*choAq zvlPud3IcU1F>SYx-u>)=zxmy_-{Rt0wpOQQX{x&0l%4eR`R2Rl{XhJRAIasj_U7fr zWZG2rj$j6MsX!E)TD(VqrA&rsJ(i`LNrZ2=Q|~Q+=ByH>n1`nvZ&_L%z{jPNkbqX} zjABFPWJM$B-is+Cmbpz^+iXgAS5?(sH`bj}r`8?NGSSS~JV7=oCc@rAOg3i6))Z6~ zGwZ$AT7?o3$*bu-08}$Avb0`Q)MRHufxF9QvWv(6`19Z0QmG{<%uq$ju*67?0tpcv zLNC~68wl?VsF|i!E7F=N1p%7F-T(sLn;hW=QK->7tQ>D|=G#MxRpTVkO86nE#JRtV z2o!81mL^N>CgUg{@Q`Ft0PPq=>rv@t9h5W(#OZHlW6*$vfkF%fY`6uI3_4Af?1|B% z^_;&CZb=e7M)VCx=*nUss7U1q*Pk}5ILA4E`Wo^@(Ur4ArNuZVV~7Ws7IvblDx^e2 zI7Nre93=^iAV*7p5ky% z-x*dcsd}ZPwgaQ=(FCSJCA@dER?p5L!7<4(2T`<i3BR=|^Q&x%D3oOFfyWhHKmI^_=IPs;%e9@)5np(GjESz~Nc zMAMzcMlT{@V1Ry^ca7l%dGf2dD~*y8pOraBrBB*06R>@K~04~W^zSRy$lS^)_C+9 z;@-)~LDcEaN0y9~HAx$HYL%=Y0jx=AqqMyH?18tMB@S=LyPKp!g4x@iyk#`^F;Ht} z`-!G!rV2d`cn0JgIfoc+R657Y7&MKAH5%}&W=q|b2uGUKB0odO2~AK@q3a2az-VV< zjD5!1lF`v=3^q=tQ$e6+s?Ja?fU21wr~;bmNK90%P)UB|x|Uc}!%59E2!POI450!6 z$G8!>pb?Q|IG~FN*#hPQ&>^NpR85@a?nTN6ot{PGh0GZyEoJ57dE{_N)@LbWjf$k# zKQy79?x3k^H3E!?h!w2Y2rnr=s7lXCdbX-V<&sZ1m1?RciVz(NZ5_9E+Jwhff~;?8Wn2?Og&e?_P`5VzbAKubw?=R}UunpWc7}uRi+Tm#?pX{`oh* zd46-*=j(R#GL>mpi+1Q#xBYm#P+<1_)$wPqzuDre_s;9bPab}J|NJ{o-@h(%y?oDHbF=GUdeSq7W!a)r?0CwUgU1kYSxlbrJ79Ff$2ux{^gi z5%6&D^a!%|9;%+U4~dzEOXx=6%Z<#JKX~WrqP4vi)*@{Pc4E%X<&{ z{#C6~2zFSlLH4xFud&-rp?rEaJ(%>%V@n_)ca|QUJ40(gsunP&x>^`8)TFN*Kmer( zCCtRh)(}(KK6&rAxA>bcuD;O+H(p(>_c#siBD5{x) zbHucr=A}Vk1=F-ymQImyMC)NeftfXT%>zQkM6`qzo0raxQZ+oPYM9IiKNSt8TC270 zn_8EpF;J_vMoq%8AVPYl2dnv}+Ojx-vay%1Zsr9#DIg(Cq&w?yC)uDXnI|DY85=4i z0)|w{s%q|*MHEGy3}R!Ffj`*nzP@c=T^*0ux@gW*R5d`bkQ5z6(Bb?6qHN3N%mqPD z4{VBrgwt)R5yMbrZ2t-Gu|NqSqid~$fGuMHj*>}SGX5x;T#(*(l16F+TN5COpt9mV zBPTOypq|x0o=*@PrCy$4D&vx@faC8mnnJ@VnmN-Vmgn8-b6BiM4e!j_H;d5`!wE?t z<(j`U4jCC#?_>->2T?9|r&A;Pi?NfG$>?y8xhBaZhfsi4{@P z)X!wZt*LlnWcRxEKx!12mDSork_|Y<|4?#Wv5?gDF}I1lUrF~@h=|igL_E?{1lfR< zH02Xj>1{z`|C&jgNgPqE7^`r_cE`g?Mwf^L1fm5JT&v(L%rc{iLqeG=DD%h0(Z2pD z86*#pw|>A{`g0u*WF`_eN? zLNIb{lGTqAvFdWib;}*SeDF)&!uH>;`0r}uQS08-{BJjxr;v#BwGok(Du(eIoe=0m zsYi6)u;a6Q3(>Xu(`>sv^!b3SeH9BeCvWvFZTKLQ?>< zuCY^3C~I5rww_hs;R3U1CqO?QP?YrH%0HNMBE<@m`$|!<6Ps0Xk*@liOidrYND zEMAK(i}&uTFf9=Gh_*B}w1!PVa}q%~V_Ko2t>nZ*QJ_T;6@S zdH(X+>Ldd1#I!k}JbQEd)2A1xb)K6U3{omWl0?T+CCJ6G*-q1=r*G>0zx&6}zc}c= zo>O)rx|ym%wBMY!%Rl?*-v9W+cWyub*`{BYNjKF9ndhZ<0?wdT>5Jz)Z?#YLJh0|@ z=^eGgoeZC*vMha?48guQ1l5pmV^P#v=hmhw>5R17RVrF*(GO1_oT1;A@`$DM7Al;I z!0m8wk@BEo+Q0U;uVz2E_wbMY?7QC_@Y##~r_V2+UEN;J$Lr&a2tB{Q+fJ?4y4&6E zZ@bCs!_|J@Kfii@F3;cF;^~Ec|Gg*Qee%w|`|qCDvVZgP>cz8u9c>QP+lRYN5f;T{ z!_ZbORO5Dk9iVDij@^N|p=>u(-CpjO%a=F5d$l}wxZtc{cIeIJWb*EAdiwOi4?lkY zU>uDxND`#l350VYFp_`SQI# zc<}!H^3{uFS-Na|dv-qWuco?vbGZG*vsXX<;Uivt!``;r65Zz>mp8Y&>piKxI}2Oy zTBmB-+HLRMsd>%^SrP^oVX*hkiA61(3RA0y79yltE$W>iX4cU~rI_`l`R(No-ua`S zeg5or@wqRxZWb=xIhE;6tH1o_^-mtXt7RiGZ_YOJ?Y#6RyJ`gpOr=CbpXaj&@#w7D z(M@3k)iBYzU(#wz=A~~8rC9GHwMosyL#v{NcWRNT)}=KM)O#29=>1>4n*aX!{_DQG zlwCbPKOSzw`>xv7VmIGDmh1oJFaPZQslWd0)8Y+62prJ@(z^%Eq&154dGQEL+mc}5 zX2P+#2MTyR&ML5CqT=qwELNtiB$h{%Y9Lf~o)=M=%CfZ4=h0Mqki`lS%hJ7LniSx? zcr7Aj>y+kq<5fv>KZ2n9*hiP8t722@Jhw(y)$YAi>-18Kx88b8MO*Iyn1Vz&8vwO( zK5gE8{}<10u4TfsrE1orCoLt`%~hp1g03iK+MWd^+!06?-++Wvij|Pv(i(=dWD$+X z{G|w)s)}XKE=0VumQ66ttkZ)-n1J1S%%)U&3xdg5G-TzO!c4=Ph>|D% zj3nGPx*2+2d2R(5-2zk%$S5+nyQlyX?jbRpS46O?2dN4xTB_FCPj(;>5NgGvLqyC- zl{#seMqQTt2Qc{>`3VRnVx~ZZ(?iUXOd+c)i{34Y{1r-|yPKJ)=K5ss&0W>#5JRn{ zg}3M>s|jRsPRUChqQSQdUKz9^5W|2ep;ZNv0X|p^nZ5u4L{nP1dIM&+uwwbZs%6Fc z`b55`*)+b*RJg;?6YCYxEP#?P5@Vh~)s+?wkSyU?@0)|-5eh~)b;u5e)Br##ZC5r6 zPWNS&d1@PY7?;cnPR91V%-jfyR%_)CAGI9jQai2Rx{b#j#j{Z zhHAem}}OP0hfndyA%zYAKr}6!5H70ec^pY*8(UT`Ul(X9jWVG&eSLMj{2mObsF_C}s%40z zPaJ)Gg5R^pT4yIo<~emx`j)y(z?JPgws6Ts?g^xf!IVJ+rC3G=OF%`P zKqdkNY2!nkmJk3?bJtt9E`&$QE>$U-&Y^;cAg$EsO@Pg`;oMDOqVv)~m`QU+^TE9` zE5*fRUZ|G?d1Jk4KG&c7?c@>{tbG9?vT!fgZ9S*bj z?Y-Fli;wR8`=5NE&p(@Ae?3V+rS+lrwL&#?W>fE_7!e*JW@dIgx_XFUn#4?&7N#2A zOVyg%fSeAx6w4JP&Zu>SajHO7TWiiX-&{Y~-9Izz5uKdO8qk{?V-DPQ-`(3SFQ3i( zgB8Q!C|9qamipn72Y>b9JC`kf^VQ2=KRbMT-ERBkZJ$)i)ywN?ciwvJ?mbv;uR7uo zadpJ+4)NLb%Lkvmc)YbAeDL0*jc(2!Tx{g})te`*b=qoS%=0qe2GKgF0yC3R_s7G0 zSUia`ySlKves#FKUapRy;Dg6!?|t;}t5>i0%kt#$<9oaM?&Akjbc^Hs&9gq=FsMC1 zShaM&sgqK~I&CUms;AxI$g?v5%3{tU#tTwwW=51xGc>2>1>LUM4XLN;H%KD=4*&b|Bn@?{zb z%yaWyF*U09)*Z6He7$*Rez+^qjy^@Y4S08yGIwucYNjRUsKt~7TMtd{s9M_GOzb##8l$r4-l}Rulxb?mr9dI< zX&gLh>s?jS$Ps|m&Em)7!rex14}RFg3OqaE0*Lzq!Fg+lkd2QsKmwHd#@}5HYAosVQ1Z?zXPc@1|3d z$*rF0HsW}L==6?JiUC@yRVlUi9^on)5C}>s%W)=QrHW>fR4^DTRb5C?4Q4qqYK0Zh zSt~~YJwz-QgyfMtYLb(K%phV%#IWBMtR|tUDHt_LXDFbiA(T9o22ClK;D|6A#R*eQ z5b}1}6%lu$g*9Dk2rh}$2Y^7DVk9>%2#SDKpG1htXnr6R5n zcs2uNgGkrnZF7N5rW4#L=`kq4@Qcq2je+GS!!}ijti^ioC-3-(Ftd)40p%+pio(d8 zVFW-`!=QtARjakyT2!e?L|=@umvBNQ$6{FxM1U;)<+Oyx3&t=?CJKz`Bm{(JT1di!63V=*!#F16fYNUQ z!(V5tlOfGME#p%OCBM%S5;;u-c=z46zTU!I#|t5=kcDHEk%!G%mRXkTDkX+ZO-fqt zl(&q4tkM`sk=jc1C)qQ%GW8{+nH@YUg3*Z1@qF^1rv@h2JIoNBqHyQQ$Wl#Cc>fq3 ztOlj|wycj#R^AuH?wWfMke;tZ`gM)QDWK}>y&K^X$Od{GzMyb;yiHnmTwO|YnI&Tm zAQbfM({h?NHXeoq5OiVHX~&=kNi;ZU2q#qn3qn?L21nPO{+O1X5vfq)u$PKd?;%aT zn5rxx!hrA`ZV)lV76M9`KtiI3<%Pw%9@3o`>L66aWu!+lnBXqOW6cCQt(h_2DuZ=f zRofV`jIQ^zI&z5ddmX^KEOWtOwIad*mQ-X=q#zh0NM@k7_7-chf=JFOL{k5&1&pAJ zX9}oiLc5;aXhqkS-y8PZd z?``>;tNCc#trhVg%lS>4U)&rXY|rENc8SHHBH}?Smh<6|uv*Ks-FJTS&GjBz+1;b) z;czUa+Hx%I@=re8{D+@@e|z=i{O0SO%2bPI8jQ-)y9vZZgG=*T1!LHarFqW()ugDk z-dnH~nA&`35iBLll#E)Y%*`+xfJa^X$HaExq{LRg)D?qT_>Dg2_=ewEn#iQ-n*<)d-ALIFD%(q6_FtnjmSTT<%0!*d% z9v(@x7b^jDhge}!fCTV}h;UEOTuc8e074aoa9)=7=FP_s-+i>b-uu!*duvv#No}_I z_V(&G-@f_Dy?atFMYt{1{QwcGlgJDy47zvIjad$P$ElwjjyBn>wkrJ~WL|UxINCRj=ZqCZX zcR#s~|MI)n-}3BQw?#_tvCLPy$tJ{RxxF7(|MP$MgTMIh<2RrEe7U*YC`7f-q=Bh@ zhesdHfM5_Pg#N(aP+powg^+v8!cf;vry z!@Mkus!}Cdl&UD<9t4V6?>#5F^KwjVwbU(-M+kaAO~RPnS`wv#Fq37WYAR?voIOw` z0pRYX6!*x{lLDDeV4CsR@XoF_o!$HN`PG|_Cfg8W+GTSXd?&D!=izV+w`ygRO2V;0 zOCpL1$;CX+B2u?Io9uYI=dutv8knHAM8ToK6b=Vrvb2r{PyzPtg8~EqsjkeE+DSns zd5;4nzlPWVvKG975?Tkkm2}p`|XpF+u%EtEEUozfqwP)U|B|^Y{&4DfpzQib(bV zxy)2G=_8ELBH@|nvhi?4IDy_#t+hUt)OY|v74h(NV;%gPmFO{O@GJ2scf#zpgrlAx ze>;4o0HoXJs`L_+Wyu|So(zjq!J=ZxllVOX!{{2;T6+8|)#)a~uxYHR0woN> z0vjeQ%EDaQmhV!m{P(qz&Yvi!QNqe{yZc&|F1T}!{JpQcxk;?cA~oo8`p)P)vq&cc z%yFG$HGI0~Om9#C2+i7nvVi*BJC1s51=7W5g7}PzkootGS#zGz|R*{`aMsxV}$XF3>z!~TDYpRi>h@`EMOSwbKE@@H8KS~t7Fr^v~$CO zWVF2u$UFd~x2L7am!ud-L7-qbCgpv@7@vt!$6K8@K1k1@DxrpeAhhx1(J6or7j_I^ z&>?P+q$aCCTqqEAF;jPEL?j^c_Sh~F3*@XLFCC)=9xqe2uw$5$D}SAsB`QBY101da zAe^PxU`whf!lMI>CL$ULdd~>ZlpEzrj0HwMk2R&1p3-B*J?%8t@rM#;_Rs^qbChlHj@If$<*FJy1oXX z#mq`;OR;G;*?jr>!|#6lWM`L6+!RZ)Ncy@!hI zdw+g?yZ2J-bZqRsPv~3T{NRcGyFYpF{OZg3)z?)91ja^I)M-j;?7XCN2wFo#BTpxn zOq0}Fd+Vi&cNQ^G*o0|ibae-@K;QwZtObo=2Y^~2ka=0^H1+6hfA#3ycRqT0|Ce95 zNwj5V_ZePF>9)DtA8q@nF>dGBnv(Dibhx+W@S2Kpbsc7pw`Y&HTRhzU^YaH?AKp4I zmt}6T-yfE_-5w5%c6RTcm5Zy_ua?{8Oi^a+Z*g4k^vPqteRX|vBik|+-Jb0_BZ9|c zZ++LxG$8f1(SzQ6ZU9iB(DR+Sy8)&WbcLCg zr8xy2sHI>GtRNf%=70liZ8roTfAOTdU>RBpTYx?jl;uik33BZpckEgL#ap6C>NwfGBB{;S|Ye?2a4_nW(@N zY9@f01!HlTMTHu@UA?+^_x}42w{Kn_X(a{3L5P%IHotj(^ONtqySsOPxp}1#i?Bsh z(cX?a)s4X!JC*kyJy5+CVMO#Gom9^Bh1{K;Ro|RodPbcN#|46Eva^cmxPK)3zy8zj{L7Co_FsM0Z?39{j?`)q&Exxbz0oh&Z+-1n!usm{|`85CJ-* zNHGDWcZ$HQg1yvfUi$U^=sB4#X6~cy5%`dar8x~mVI>t=D6)=pBvddrY$hqC9FJ`( zdDv&o6J@(?<=!to|NLe#-<3{y>r8Kn6+ldXA(AMeWn1bt#4vP#D{BSoh&7LF0#uZ( z?W~tM8R;wr0>vPkteT*kw8a!tijGPhgebD`9R~yxc7|z|*LP*oX~=&fg38(<5-=4Q z5kjGjzbt8+FdAEmNQfH&EhGf$3>iYQK|s*8)k%N|0O<@`v9XhPS4&jS(@X+B=3pX; z#*Lhs@q5JqA!%j^8RU4tBg_;+1N!l>+}_d`Q4lI-9Q^5&z>dh#YL%jCq{E<@MY`sT z21>0p#va3^J7A(E(XR{=j&U=yHwmp}%-;ke5>71|boT(nNjrJ^nWY;Ek@+^Fs@(;k zl?rd}nMy}MY}&ZH$Cxgsf;R6Y)*>lJ|C1CQ4yIRz9cL)dc)SBrUtwTfQO1PtWvBu{ zF#$ow+uW9%lcOw#$U5~K;|v2YUILf^HiE8H;DS||3?Gjm!UdLT zGoUCas$+euO=$#3*HS2wt0emnMuI1a+?4=C3Iq}YQZ(C((+^7qQd0Rz(EDl!Mw|wq zSp{P>;&>ZsAHc;BQU^ex`rETp0Rk>63Jj?%a{?ACw{Ng_Rvw(EsCN}`C6gXLhWn88 zJrEU*F)LV~VwU^5#zg{SLtj6|31-Lzrl&R?kdUI%5@ga7Z~}KPqLIuyj-O3ZR`<^w zAOJD8NEuyGP8!BS=CCPVt>W^QX_AIi#3Kl*8FHk+ar#v=H5aqiJzua|6``%4EN*J= zJ)Etz9D!}Oby=D_Y7sT4wjpsC0LB*j7=DBB4TYH7J+wK0W(i|J4s4 z-u%{IeNnofZED6z*J=^oTgzT3Q*_*E6I87qy>2WbdSe%=_U_&qOb`~axI17(cy~;b zg2Q7e(wS>iGpfSuc6^?N2)6qLfB4b6|NG~kM?XqEE42{aN_DHR4~M3uY&N~m5ZTq* zdS_5Y>r`4>WH}(vk2fUhW-~!dt!R02b|KqZ9zPbF+A<%HjkR=-{^ZPC-`Moxn`fL4 zo9*`YaIgl42H}q0Js=MB0IafTce_6H%QwsI0uj_nw^fVkvMj}288SnGSQd|{su$ZS zhLbnh<7BjLMURW;{bE<)x8-pAC~p4x z&%ggy-+OrT<*(xAQX)2+5+1#GQFZrPHkjv9lHI4%RH=)1EUl@aRCD)?n*u`=#Y!;J zsi96~nR|9kQ>{yP4Y~*BW>rMcdoVCf<#_Cyng|O;P&ZSswbsnE6sVToyOz2+JHI~m z{lT-!?Y-xKVweco8fPiPK8K_h6i@EGms-5{j4xzxX>GG9?tL;tkqB`s_n&<5>wW*` z)>$t?3&f~QXPYdE@~~zotNlo$|J);iJ)?@V6gHvPCGm_lJ+m@pdneviWF4|j}T<+ zy^v&wSfXua=I-fn6avW(k0ib4I1ZLRxvJWGm|6biJY@4M&2n}y9afk*NENE8gocEO zMtE9Yr+hZTJwj2YQXm{Dj}X;R(l&F)EB0PQko9DG(4|9DW(O&mG!+#HG}F~68C-8t zR4qJuN*z70J1^6&5y7yv?kZ-Zc&B0d?sz#vqo~&>>#a7FsG~8n*q#_&METD?0 z_kLnVsTxW5Kt$P05sM_waaRcdAz>-hCPwX#5wSba!4*mr$zQl4_;;m;tb~UV!6YXV z&4@A1|7)$v$CrwnsP+_z6@C-Agb-I~`5C8PCwg?0BCc{N27^)FK zP1#qYo1vM`E6rA7?Ilja`BACo_wRT^Zw)lo@2ww5uyPmHsfmnVBATW&>x~!+i?mNk zae|&O=20*!O#rbXTBudf(qb}QJ0%G!`6iyOU@bB+MBZ=ZsjWP*(*=`})g)vco$1i> zKosddBts7b$O!rDU2IAK03ZNKL_t(jE5!f{caE$Ks#Q@HD-w{R?k)lq12M4b)!9Ao zPcUnGtktw6N-@01kbb5Eg%LMWqQa~CrRRkaH-Mg+3*%~#9I6c7hF1eL?5 zH}8}axzJT5!c}a=Juv>mI)@_Htq%d!v?_bs#5fQzr03XBTNnjFX3F=V$H}-C**OSD zvvcYs!L_kCb#6g1Q7TDFWSV1=8$%$W19TrU=XI_%yqt1Xo!Z#!)5oxAOimy}~Z z7^Ms@6Cemxq~}uP)-P&_Pq`3O5=u)iBM}XagbI=^gSTCy6W1AI2}PcJ(cQzc6FZ55 z2=AQ?p|qJ=W11!rF-B{lY7yQ0XbNYiDoVD;P6j=kk-UP@n+s%`Ou`uup%sk|NLUdh z@)kZ{zxdv}kN(paUx>Sig^CA4r|Z@(LwEm;uQ%I~CCjeF)*g^mI6_@|G$4j*Hee>2DQ%9n;W$!!9=ho7wE?GsN z+MXh$gDwi6X55FRg?WVM{_y&=9%1*k2QMCA7LNqvVUPRGUoD4t*o@Mmpm<%s>_0w4WUWmi2IyZn|}MS3(meVFrD1uuEoK-fxsg1wu%ci1Yo!*^Ihp zia^%Ki@klgynl$TgBgdTRx}jSnxF~5N&#YaH;u}E?jE2T+6$)u6`1W0@BjFd*I%6E-Q6DTlt5|VjrHBGzxn3J|KiU-3y`WruaQv_R@G+K zyHVTEAK$*ZRehVWr;$U5STuD#TX@LAbT}N+?m3Z>8(fJg$<56Yhjo4V@wcY``|rQ| zs;`^g2C40xB9=yE_b>ADg`WTFU;q3se}26G>Nj@xwh^K%5s?(>;o9i_aa$UPM>sB9 z_lRPamsPC$?zwMh4dM}=tY}To+r%TBZy_)s%!MYJ5D8iLMayw@w12`a z%E2(h1IrQ?2{ZA0bN7%0VXgg#<_3CLhC`@BD%9mB|Yuk z8Pq|!E_cCSzCAz6sp}FfHX;d1`pvNB&S!r z{0x!O6<=TJ=0fd}Nfm&F2|)%wd!=4;N_7H5l~H+!UW#+fu9t!aew`Hw)98_8Tft~1F*WBkn{Fr*$y zBRv2hAUFv$p1~9u)lwg)BIf8uW?g5@YA!NqG#nH0bn%I*zgwhAbysAp+GmsLG!f|& ziB1CKaAm$OC0x6v`9y&~*X;*@V6M+pOGH8O^z;PE>Hqq>=0_*01aWs%SjfD!>IMjp zY1cC=ym8EP>g8#aeXigd4IcqNQTKW&vy|1`hA6!%jVuvSWCn>ulp_OFgd-w@1ITPD zH64I!d#Q3o#?aN1GXOLD?z6bBQaf|zjBqg>Oddg*%ew4)cgsuek&pxu?!k<%0B_$A|srAKhmAHhMy&ch4Z^3?gMQ_vk%rKOPpmIk(mh!sp9|$TvTHfA{t+ z0|-~t<&L`ju1Vp*2n`@TCf z4$Gli4|frcNETtv-p5FB-@CGS_q!jzd;RKHAKk8R_f8^KgLjc2y1UrhvweE=^8DuR zz${GG%_*8{x1AU(NhW%CW)`qEunbLtxn*GA9^J4ii)v<)Qluea6t^!=3H1H4Z~k!E zU%gmZ+xg;d$?dRryX@P$i@m+eU`WH-RD|}uBXL}tFh_=Mow;0MkpU&6NOB-t1cy^Y zx-{7@{o#zT?QK(fdx`1D@&Kkdd6>F~YcsL_naZTv32#PdqdB`@5T)Pk!?9 z_zw@4i*;^GcUQ)GxVh_>FTcNk{Kbm{H$q<)F-Zu&f82vOsF*wz(IC>M*Y0caEpip}^UjEbFyA9p|?|Za`+G>9D<&XC} zetNilb$RpV^W7K6{@?%Qum8(04iCTmTfe_k z%C)tg(Jc~K4;q`hr7*Rn#bpzf-aQ)tnJ zNjK|O_7A!!0CVq_DmWh0BS+VWyAOQ*K!fl0UWU0<*XcrwSwo5-NIF zttJwMU;%(d(j7#tHS;~fS+utF+N?{~%gk|g)f^a{BSKZv13;t+OJukkh!QXl0+~68 zR5?8QZi|j~6=8^}A~Vxz_WTP@JRzFF5l%(GY)OHp1Yn}pB%aoPiL`28Ffqx5f|;`~ky(5*hk;o4 z&67sk$_u0S>Z#2uU(;*M=|0y6(P*ilQm>P1wk?67mA{q;$%-(VgXB>JN3qCNy3iO= zD4ZF{F*ihnMCtXDxtb+)Lh7_vWixv~SBKMDbCfZM#q+5|pyBv=Rph&hToujiBV}IigR0R1px|fq*kq*kjb4+WgHYXXfrbdVo6qF23s#wigwMXShz}+c$S(km^iA7<`6sReJ zFdsw3%c7UdCCvaNq3J<4vEg4cp6%rvLSLKX|9IAuN^h8i*pj()Eoxaw{EJQ~Gr>grh8xSSWG!M=gB3B|1 zscLw#rfuifH|?h%z4)iE&P^aGmu-{A!s{0J=KcLIesUyY-z}(S60+N#f~t}LMBscj zVXUjV^>tZ2>9DNZzIi~EYb98?J-TIB2QijKh|+go8d}4;G->+Sd$QbZ{MOdW6ZQ$nCkeN3pLgsOia6jHk<3(CKUv{F$eZ!vPWU69=o1qwA z&!F<)cN18qdxj6*sje)>2F{%B>8AU`=P!@PZ@2f6>DiX0Z)anM9KODP|Bv54{Hom^ zTI~Itq$$guaMDO3<>(m^jFg%IARtneGtx4d3|wqymM2D2$pnLygh||^F1#dVX1zfs z%z_v#9NXQ`UcJ6)@7`a|a=49dW)|zZ%i)Ln^Y7o@|HVSoQ98Ead@^K#kE0p-K-R*o;e&-JgreDmA=_})Qn zIiDYsXpxrv{?zY&ezO1Zzxv}peSwFse#6_P`kn3`fz}j}VL_DEAuAyv%IVpJgENw} z9Ujk@OkCaR%&@G%knT}38zPJVrZ8#jR%S1;c?h!zB`7`5mz|lrK@qJnae}k40I}_+ z3IMw$i>l}kZ|{3;QAE0en7YL?|K;&88`LJCL@W~BDA067bD3F!ESxCU1|avnI}p13 zVD0a||M9M?A2q46YC*#grk=1|Hdw(-tY9g6uMAQWi73P50MW3Bsb@PSgt4AzJtV_+ ztBj?l^7IeEjezp(@~;;`c+Ix%!r6upFmnVRfQm2J@Vq> zEe#l29j*u*f{)?+5#Bnn6Ok(1OEZoN=y2hnsGVGfwRClxRn^_KW&@bqy(qy}1|!5p zUnztTJixI5z>NDYm3b*T2iwh*OvwNj9RmtLrh(z$)Mn>=LSCBl50r3s2uB8IsZ4b_ zo|2?aC_@T^b?+s!ck2i+^y;*DCCgEUM&%V2G3fUQ8iT(X5nA1N;v5-aNDpF`^aQz$ zvd6<~mI#>X2|0n+q`I#dfiRQ_L^4|jG;m1La37@l*q9@)g{lZNj2}mfrhq(6rgi+H zM1qB-;ltJ(T&2YKApIT=@Zo*HGB^TBFPpCkZc_1UvO2zUOUPl7(NRsQI&-kG_Q{(F3 zddLYLS7hI}b~u0;?#w(^AEk(nT8lWnhhS| z^JCb*dJE)Ak$yXzt{o2?Am9`8RD`ux>NzyE>!2ssEe66cV&_x*0OqpTn!utyNV%!xFU z%z^YJ`zN=zY~PrlgH~-Cq3?G3@|!n*_RCuXoj1Q(2hCA=rRzcWy|l|5nSFPbVI5Za zp4M$WG=rJD3@}g3tcu(* zpecz1LMn85yl4XjK6)v)H?7CMUE;F2LEhf=AQ+&$M06D;7D_V%38L>r5JF>c!@Bai zG$3vchb96yaQW7HhMDh_dn0*qYyKX_9^Y)a=dQe`4}bXKr@#8_)d~CE4qdq&E}g&& zX%lG~*7wUw?%pXCnHGLvA%eS6@lwirJ=lczZi3{>hNzIvjJ7Bf%se7%QdAktYUKUy z&Bs6c^k*Nv_~E;A5<*)!IchsTY;S(^^^d>!SD!7%Q|x!W10+O4KAYsZUyhA#4~sk) z0BY)@o`GcwGML2>NHme4a#9V3T=!{F)(8PNZF}EF*kPhI0fGq$UQfq8 z<>8@6LIu4$3k2zaQ1RX69EmC5o!g6#?bkg#GRl>>XM`^TBDAKvh03yg^7-HYc=`R^ zw&|)jADZO04a$=1l)i!2*RXS@j$Q}WM%?QwbN8wGsnQT$f5nYf`Q_4@=54X$`&&b9WDB{=z4OdN(G2; z8v7u#P)4|02DR2eBa2{clc1=;uet5gB$1;?*}*q*X1b*?S1*x-!z)j9xSo)Q9l8 z>d;~;Ykd(Ds4($UlLP=WE0QNHyOQt>3}-`RA_55xqzs0X@+!Nyo{j1+(DaG?fb@U* zF5t@Iet5{wzvKF;D02ke0>$S=Rm0OplNoRdy9N@?#8O?^6!DOyi(#gD9o?OkNtj4R@;E5dg*gkgRp?#K z(bt_P#B>#_p~N|PEop=^fQlT>L4<=aq6%uAjDoBTQhAcz^$i$Tz6wG3_&CIoOfnie z)oS~f*EFv)&*NIwZy#@&K_qit9t7esByfF2q52%!xF|Qz=LI_9YI;>gIp}(*v-YG> zagHLGC^;F^vUap7M^i>X0BVK>=}AP9o+9Z1h!4S646j^@j2LEY#F-&gJ&uV50!p8k zJmM2E&i?qAF)C6OPv?p$rI^X-04k1p6y0;AXLJ>2VHDRM;Pp&b5gUXj%@v{io2Fqb z)!iGJPQ!t@#=>gwPDIn(4B;V6Nnn8xvq(e;4T}d=_CPqgd+)g{#GFK=j7l`>J*?;H zbUy2wR4d|>B9jICJ|=b| zQ3^lzI3Dz}84LE^YF}Z2h!8x?-BYHhiiH_TLJ6Yqh+I|;^QIJ;BElYh-+khsfIOuIW!^cdqj9mi?-I>RT2|i8_dP|7(lT&7fPvc+ zZjVP*LiU@}No&3-Ez=looMy4@8#$Wls&f)u^*fh;{`UNj@3uc&=z$hK-9A2S%up8Y=ab+4;wJuw zzx>574%_2bU-NcmKm|UK7)eVHxc3Nn0vy?6UBultgI_jbG-YHgLKn{nuSAPQTQ>`b z2+5+F#cYyUw8q^$9okqZMWj;2!J>d?xOpUqvIf!vbm8`+4@NB*2F~Aa^$~|aQWl}5k(GR6cLy0hA_E@Ge{WI5+ur* zZZ=prDWhVuX@oTsWmGmMfh+lvX_OyCo~jy?%LBpPc=Xq6PD3&y(v_w1vjP&9JWx{U zrpQroxXK(|G-Dra_^cMeD7-*GROf~ZYN0$X3a`~C@{9Us>B2??OG!5f{HWcNenAv0xwr=A=^OISWNm zw-hxI4njrO7LsEs67;FwiHQh?f#FCm9)N#brW_BcnuIK?)hjHcVNWyEYbb(v^!Ki) zyPnds#2whbl9fDDO7~I$WD%jyDu@X-`08u_AyBVVd}Ve&cnuW%9LQh8RzG+>2bx1g z{^7R_sT_(df2uHwD9&V&V!8z%{NTUn1{4C!umo6ElFZUzjPN`Ppn(G(2zUj>jqX8O zB7=z|qQz$KJa(W#T|+6YHMO zdOM?>h>#{(cC<()@d&s}8EBL`P$Ob9c{#nYSjJIh`L*%Zt}5 z=l!0V+LTEz+xfRY+E{c>Qk|KZdD{(^t)VSyyCrZ~MMTb*JrmZQ0xSe! zGjENBWV2lalwiTKEa%6a8MX%jhqZOLOoSuML9m`}A$RwVNGzH`6nozu-~H_4pC8HZ zyP*Yv`o1@oWc~5{aKGC}`}ShNt509KZ6dl~w&m0^!`xqdbYpwmKRh&*k3V^FK3`tk zEX#7ZTrTUnnwe<3*bYNmS0d`YiwHAcw#Vbrmd3VS&gaM73QD2x_HcG;>VobG0SLFJ zwrG6(;)cjit1gYbZ%i!c8M$v4L@MKA5TVApCn%vzt*J-f_gxhG-ldVMu-T#UE^3hp zA)@eDM522mtg6h!f~V(JfTbj%84*GZ^SE5FKmO!)Iez`-f@QOfM9oZr-1@$*8oGY<_J?mC^3Ps=v_HJ*o|mn^Sh-t2 zEShHIc@X;i7jC$xYwB{Tm6bPP1aKMxP zc>GiiO}BPDo%)=s8=G%twNE*zXrm_@tll7#!H$Y%f07Q2bxTqRfp~Dr_1EIuBXe@e zBUU{C03ZNKL_t)vJU7jB^XcPJ3p>mBoIqJnx0EE|&n#F1M03Q=5fv6+ooX6BGgr6t zm>Tp!#uX=Cr5$G?BS;iP88sqTqqk)4N?gayV|Z*tl$M`QWLkz2gBeDHOfCphBHr3# zY8brm9m;rM2zxU_NX{?TosAq=h(<%Gu<&$T%lYKA3!E&SZ1P)y1cj{p9m9R2?x^-AJUX4A+pSD?|zS zcw-h&R7TxZsfKZB^63+g9^UN!T+eGJYLbRgjw?uH(O2c#F)ff#EP7p>u_X@En4s%I z1Sn`&haAKs`O`NqVjF#=6D4n@~*oRPt5%F`4pOe`C>?{Og0VFypzT zDS`458jpt<8QyjM9plEUQ%4Luer3ygcO1SmBoaVagdzwtb}uqObElx7G0Wfaz>PLhTRjOWzpXIVPW$; z9JTk(MG6h3j0k8#%uJc5MISG=u6%pj&gV^)>ijY1<~@;c`2F3hFFtwQQnzHH)`Ubn z#AW^QVrM!A69DU;LcRw#5+N`vkbOU8|LI4^zj?EFZstzQ64c&b@^60s_Gkb4Q=>ne zxBbw{eZgC!2#9L6su5V0hGb=n43=_#h~7hoebFw0bzS#;2hiP;kb%|&H0&A}SPoon zPO7=@NnGPMkfqt)GvfUA?(_>fG14~H6Fi)xF(vrX_-^xc(Su_Zx@_Jr?~zDu!s6-C zxBarY1tad>yj9h>T()f^fE%)3gbzzvQXZ-;g}v#rZI=TRx+U7>e2yMMSZ_}~&YOj- zEmSYt-j?O4)Y4zwwohK2Vt-tie1GtLL<8x%Snug6Kx<97#?EsUfO*?{N-CHnduAqj zPxEbEm)g{c7{uk99-bLlCpf*x)U#P$BUXEo;QwvjW zeR=iGB`&$ZYDM`<~xk@Y!b{H}CK7@4tQb_~XO@K+zMRj0_yaDFE06gfQ2|l{=7~UCm@`;Nh_%V(yq(RMu_${F zPq;<6cZb3)G7^tl9G5zI5D_r5^(_5YW;nP7M+PAR5BEC&&E35$an)mA1lqL1yxbB1 zGYN}ZgaNd^egC)_h~U{PxKfFjnNVK&DJ(uS0j{lmcW`OgGE_;JZS!iL?iPo2>Ctu3 zXvgm!@Z0-1;}CMF@pDY2L<#!GuHp$9ql^&_UoY7nfnTe}8GB`n*G`a)C;EeRN@!-y>d?rK^5jSa(M#PRpKB=)WgN$ze!jf6eLd zc?O;k;eYN8uJAD@y*(?{9QDn>oud#KXOpI4JL@&ytV&`Lsb-*xRQ4N-a(x*fCK4J0 zKuPWv5yAs!3(caBn1xw~O>fPj4ecP{RX~sZ^!ckm_^^74splTjBVc}{+B-FEBzW(%wYj=YNupZjC4}LmFNZFOW7*)pgHK)9u4lii3L74?! z=D#vBBgg1xUZ1SYH0MD-SeJ865zp>Q=D0tr?9Lz}>$dG1< zGy>;KC!(ee$ReA|!&ZbZ`)20XU=X*601F~=yX;8xK8~d9BA8ekw#)tNHGlr;3rX`Z zB4QN-UjpB}JD(jYD<^84RD?2e_jLDgf4sl%cR&8*_ITio{ju-eEJ@d{?LYkP`#T(u zAAKrHW>K2vQO8HP4XN$E@8|QSTaLRv0Rl5vxV2It(7x~PX_k@M8W$KMqQ}Rrp5FTw zRjAjJWI`Jv&|Fj)DTtR%K6`xw^kSunNM%WFj}|}PZ->)~Bf>gU-W=Aoaad2Y46oc{Q5-p*%2ve2tn zuaAc#m>wR}K+enivp;Oc?cf={_uMbpFR?#T+Pdh%qClE47qtgBj|l4l_qFNiW^D?% zCGv1=EF;~hTe^F{bRr6O4{YXKjz1aeBC818N}UoB=Ht0mcTD-Zh)C>im&exBom3a5(+q*X@g6|NVFO4=%yXD*I-=TRmjm9qI1o9+7G0!~eh> z%9p54n8# z?Ym2mE~m|+JIv8q%Oqwt+icrDd3jtiC|p%plu21N+WOn~_V2#@{(t$q-~X?F|A)W+ z>iyrmx8K|0jl8_9ul@LHhwcV#Z9&BO$J74)*B|kJ_ZNTkr!NR^ziR!W2@!brZF6@Y z5(vV2C|y~Wx~%Wr0Tl?7hzMb6+I#OF%fiG&Ni4K9As%y!d*8iBYmJDkqCyCf(H2!% z0C3~hSh-~6*sRwGr4Sfo<{8N)OwZ_^#}_a6@E_klvO-#It5;Nm%-pvgo+TX|4^pZ} zE3yo<4HglR5$*v3tRBu0nY^4{`ugH;zj^=lIlUc|weP{KS4Md<=s=9!gy!UE?N4+i zSy5y>)z|>lU|vFxw};cM=Wv*yA+sE=3GQArdDi@GnIdK8po%jyiHD^GYThRjlFTHc zA~GKRwaGF8=w@ziW@Rzlt=C}1h}WLKw0>{IF!iXv&i%6p#M-l;w(Hu+pDZhhs_vTm z_~>tp!GKBk5|;<$08;M3<3(B5#VvsdAI*gbp7jq6ii2L5c;vG&FK zS>b8hNJK=DpmtbpUZhC(ve>R8szBFL8Dt$=h6JGmi}u-p%~iqJOJ$DlU1-Nva|$_GvKWpfPC>#TKJn zOY6eX_*x-3AsSr^0#Bt%snVWZ2Cx*FKD=(O=P^ghM%igo(CkCZQ$H*>OZ&=Hw#Xow zBEi}YeV(11F(J>-*|m0j&naZk@<8|7pDna1_tOhQ@D zK3C$5BP=b?T>3?;T>Ap$DO2BD3p0k0lR%?H8K-7E{eam3q(EE00T{ivXLrWQesM@3fr2Wh_ahAfhdV-w~W{cAjkRQ zszs4H&tPh%f7c7Q0FAVm(c2Zy)>Lee>?W`T1veZ@yN_ zZSP?uicIt#LMS0eX+jRGUM}4|+;KQontAj{Qt7*MpslUWMm1f zgBeQ`AkBjar7}W-y&uRvx?Sb_izuj5Mp#A~T|yqt`?h0s!@W}m9bpmS*vz)wJaBs> z7O@dZcn6@|EW#r*^^MVY-#uoa+mbBQj(k`NWMO^pOzm)5BtrIwkGcQy z7XS4xU;gT}+naCW@qrSmeA&D;Qm~ot;YBNEvMAh*Rl0iyNEkwwi!aed`Fyr@EgdpD zd0XHCW!ifOV-f9Ugz)Y})LH`~!XkO^2{L9h)iBG*by4qu;T=rp&4h^)ZP5&L>qN9H z3e_Kecy9p!s?x)2xXuZ~Ze;>27N$Wpj$v6X_{zz|UVY1@tmvEw-3)E@cKXA8|L42Q zMPKaTfPja`oHlijbOS&vIXBiR(Ros(j%uXJfugTHGabojtFEVt6LK>VErb(kGz>bg zJMGW}4@S9ie-c3xqtlS?5Ct4DGV+ELBT#d0oMA;X4(L`By+d`79J4=7NYTtJ_Nul< zN0x;uO;A6F1}oEWd{&w)bM3gb(`FbGg`@n9kVz>eZ+3G^66Ol^tlbbXv=75s16f0$ z({i~mLV)MgS|NkBKo>+0cW4>$UpMO7!>-2p0Z+_;>=ea%SWdU0D+mQSiPTMc6Yl-FlIFbrK_NESOA6 zs&a)GQ7K3@1rY<#(X2rxEjJL}MEFl;pBTD{Cm>dfwiMA-!bL<48Rum0D@1c5J)%)U z2WJAp%oWsKx4_Ua4K>67o&~7JSYy$|v)2GhP+Z3hN?ABK&Ma25#9mJ@5C7R072X&c zrfY$6HR_xvVREbEN9soj5$SUwgFdKw2j)(Uw5D-aT;Fki4MRCLCbY*tO=wwdz-gZ} zdPDOkpE&D$R$SM6&6+#Mp^}y#^#sI2@ba8;csf=2bZ}3f_k+_mmO(+jK^fOIPM}sQ zVR#5RV*N{rw(SieZLwh&P@0nEJm9M^l!l32=K z02Kt*yL)(B8h{8i<+h-A?`9yJci;NnhT$XDbyX%|j?4M=s*DcnOc`M;8Z38PzIil~ z=8145;1RVw0#IQA_Q!j*?Tc3@>5t@F-?w#LpzRKa|LY&V?s8~1FD^D|4_Qo@rFyZ3RpmE*|*kLL&}NnwI|^c1T4vVZqdSR;s3g#PU)J?v^yY1kEV~|ehlnhT z*3SYkiv&DSLkPA1tcR9B5?H9InvZSAEG%Mat&mkay}YBt-+cAMy|=EXkR=fCOaimE zrM0H@@X9NhmNLn`AsL-xp@RVx5oIB!NI-Ns-tw~S78xWW*Cw#AT!CDE@bc#j@AXf$ zbB@g~GDgc4Mg8XlMKqLARC0Zv z7`(nRytPwXl${cRSk}Yg_C?B?VDkhJ;Spn>xE?c2R2`WWm5|f72TUS^p_dYGVUTp0 z=^52n0Z@?_L{$2X-mQEoCXYBh1er%JCQ%L4T`$Olm}47#I;GW=dIof_YvMm$GlN8b zx*7xRKksP_*AnA7jWh6q4HJOGNUN64%?IImOknaQJC$6PlFs;0vD z(mXt_A7%)F2~0A&gha&2Wh@3zrGyu_20g1_oieCMpYdOPlo$#|e6Ucii)a32VE<9r z4f~j!)6b|ynEx+b@7g0tl3j_NbFZ0uL}pf1Kc<_*d2mRA1AH+AJez1Oo zAVFVNS_&Y<-JKzq9I~fh)m4=l;coY#57#_0t4GQi6go2^JlxIA&CWgd+;gWo?0Hp; z$%Wr0HIQ+bF=V8~5gR0e@Y}Zva=Kq70VOk@MOn!JVqWm`8ArWk=0b8-Mo2&sjF}mZ zM35>X6wyv9pk@7=k#STEr!gT3N%I+UC&F(TQ=zIOYm*RZ^ZQjwqJ!tnElL;-0UM)| z1DRTR+<+>HbT3(?M?_bY(`D~J)KXUQ+}mgDV5mGJX{5+Nq){qJSjNcc;jN z!aWFf%J$*i>+||*(N)u93lGbT=$B~UZ-KtHuBhlKI4o49cB4qd2=V<_pPWDCzBcxz z`!Mv=mCHYV_xRgy-km=Csq~eU(@EU-bYw!cGPdYlw2_i`CshFj#fD@?Z?g1iGU3{& zNfA&q9O1QD2n3Y!elDG~Brrz0rHyLPQNA3>9G|{EFHMm}#trkmEo~3Je==j!brp)X zzO=q5NmMsbp^C6IM5Z|mAu7wd^hJ8Z+S=38<~GBauvE&h5N)SrZIpfY-c&`xeb~%$ znCG7S{)*pzo8MglUAG;3BG_zRex7;<&=kFj1l@B$1!J@OlV+w_?(VN&zcSy=+#@}( zjewTCg1xVn!KURv7n#DmTe?zfJyBIDRk29zU=(Uok#ar=X6_%}-mCq|=dVt=H+rP+ z`z5H-mMhy^y#Cv-uK(~ZAM-9{(XLihTqM$!Sepn$wa>0nLh~S1v|~AK<_<=thwb|g zAH7c1%D01=@CeC(qYD>(kz)` zk;A9048q@>Pj{;zec0BNV_ZivkefMsU)D2Q-*+1pt@qQZcaghA^6BmQ^4+i2r@#5d z`EUN@{7ZepyKiuPv=K#Bl+n00#=zLonh2n(DgeYC0Z@8ZQ9uzw?mKo1ib`uFmj<%H zx2P_yOUYqX$wbxtyCcF$iAYruV(ooxvaBk?>oztsD}bf4sHCHH?E7v$5=f;(zy9WJ z3A`;$n~1>Ej{-ujy){J>G@16!ZZm63h&#+O+%i&l82V*KrX{F-=;=4#Z(omP)1|t< zW==gxgxNlhMf$c{=K;thFeRNtu=s6}Sv;5NWysKaJDn`x)q@=nDS=S+7)p0TZSDz3 zly2e12^|y?A|lOvSl9@2_bTKRB$0}2Q_CJV-EDBjr3Z19sLEhg)q z#evB15fM`ICkXn|?%qJx65IkHHQmD;>4*_wwa%fKr}a)BUhDZjL<5;s_CWB!_dX$8 z!5e^}3PekQO-xG}ck}c>q)q$7%nXDxwY36zjATODA`;bDxw0kcsA6DGLMRehwX-ag z6aH)nPICG|7AE0=-V=yv75|KRZZ?~TcIBB|d?qyyT*iscaYKJN5>cF3tHK|!9)#I& zpaL+NK%cWnrkpKFmdnhu5E_}N9(Wa8Oz4}L)z5kcBhNX7AK|zk{mf_X2Kw{k*Yfa9 zM8?N2VyawlocD`=>yB5XnYi_kxWzzn1QgHZ7yL1kf5Z9DK%a%KW^|j!spDnHcB^$b z?(B>3uqN+qtGRjP3md3O$QABR@P@dIC^=8bD+HpjM zw;v$Fs~xI}L?FGI#!Gdl=}p0jXp1-zQTLgMQPE7aMS81Zxa^C{LA z?n0%=u;@+tx?HbU08Cz<1_0al{lnvDukSy3ICnv#RJ6d}uc_}Z!&F^p33DUKMv%RU zs`SPt%x(MPq`&;+j{B1ky{Tn#x&ILIfBohw>!0+y`w_93FY8hdSk7|Q>LLje+S;<{ z>D09WncEf<1PGfpCYEJE<-%qIA4CL&L=%Oo6j*GHs&r4Y05FD+-E80Y#}6lw+^_Vf9)ET>o>eEkIHH|y&+vh;D?GVFA>MtW1; zpZa-e6}uK)s;$-2K}tKFKWu~4CQWr!(NpiMNSA_4bn^)-BhD*6|Ln9b+K}#GI6Z9} zPjA2bqgSUlOXR)@LnLR<2wnd3+o$h$h_1u)@o{+Ox|{&6OW&@Ki{?owlQqaO#y&Q( zi7Gw!ZS(yKw}#REBG>nK{`kt?{k-pg^|}5}zy9*y{_O5^`@z2ZCtTmh?k7chTrSt} z>UP?U*%l#F6jf`6LoT}80N8tr5LM|5NnS3#Z@W-adj`yWTn95%s-tGAYSF7C)+T0= z9=&r6H;aAWk*SpMEKy@*KV-K#gA^7LdGfY1$N%wkvbo2uJNAx1*T zF+v39Ire>uf9Di}ik70L_wHuWmb+J-X<-^>#0P9aegh8tkxP`@WYP=!NdR z9-T?k)Y4DfK9mW_bgtFA`&R*sF{0f1%Of8d5yOpuR@3*nNAP(I_-LOlzQ1>}001BW zNklCB^;S>=Ga6IVk>K|Rs}#+0hqbF*KsB%<;=Af#z-%I=VU_VAg6zeLmbsJFVX^sUGT{frlrbvmhohhCfj7y{(%E}J*ARf0!MT+7PsYY*LfUF}5g2db+Z zSrscs&B0`MYYu2cObnesrXEtf!x0Nrr2Qhu0A_8)VNs5$k}p|UsXjF0z^u8miQ>dm>9V@0VJ{<b`@wYBF_18~gP8ItA9MBt<9++#dT zB`CP9j&&Uq!XI%x>*=i-h381F+V>P0jcTnC$53R=vA|>-GG1KQE&Q86yDARi*b{&N zgb5x^gj0?Zf4qqL=Aho}l7UQmGRlplmR2cev}tu`kp?(~O8$QtM@JEmglcQ6%9T`tHoOuVqOc6jOo!7mAqi$y>-F6d?i6lg zsK6Xc7l6YIzzC#;C<3MDHghZsTW@yVdgpam&8iU*W3Pfsk6acu6&vBPH^lwYV0%3` zo?-5t%iF76%+9^XW>6`2Rsx$xW=IovjLYTj^z_R&%m4k|`}g}6Re97Ia{Bv!egBQg zPe1+1`^WDjX`Ydx6lomhNbI{eRomTtLvf-2Sj@NVRfXsdB8HoVYWAk8+;@n;_jK$c zj4Z!J9Jk$qV#%)w>psu8|t>h-#1;&f_esTxgn z-;BWh`Q#qR9hvUAZBe4!P}3%zvMk-rns!y$ZC8x1Uq8j?%PImVJlK}T z@TYAI-5yjPP7RmxQ)hUteQDaZ?a8WuEkZHQBImfCV*km5{_OSg^H=>-wJ%Q}`1C_w zE}{YC+9e~jNqBk&h1+#VCzv)e0qH3UVJ<7(;GP!M;gj3dPbVeVB*OD)?2%PK$#oI4 z!Bk6RAn1KTYi(Stb*n*$N~i)0v4`NtlqN%m(Z#hefGMgqMR{At1|0PZd2H{k#CLafAm#M0z+fDU!1} zhgV~!WLT1|wdGASi!gH&5QsWS5sGwKT3AwB!KX+F>U%R0OhLqKtaezP7UZd7wL}V} zqO7uWsBC1tI@kI0ziugJ_)YB@RrP!TUvp=TzS zM=+iThn&E3?=DWq^$AGg#%w-URpdk=v!wLpMD}NB{bF_lC7F5wwK-Y*KLh`y>;NyN3h)->%}t<hmxE)f z9DgE@Rp++O5LFGuh{nc2R&xsjE0|=u<4as3H)0LZp_ABH{#=V z{l|=*w;A){NsuucKg{OABo%b`S&>{9fSJMpjy5_?iyb=N!b$!l3U-=V1#1F6X9hTn z9&kwM%!a#*uyhv%y%JEu-6?FXg@ZEl60>%z1REtF6_^JldKa*|&ZLbLWosG%3e0lf z_XrHnO!VHTZbx`Jt>!6$;^WsQ8gXv&lh@~kCNwfyR}pdIY7r1F&8J~IB6GOc04X&y zF$OO0|M;`JpWL@KMi-iUQn}oH^%Vc-Z-3ujeU`ddEJ*(MkgMrhRE5IGtMS4Mb~P7EzTk5}B=aC70IT+~0MTv|UT= zNw%dY+vDa>*DJNn7?P}V0(YMs=%>|5`mi~xNdQ8$F0Jvro!LT{n?UbX8f})Lm**QGy8A{T<#soCtRtl5tvacW!rQIiEE4 zr&C=1@>gFzEJ3lQm!B__`fkW?zkatoyfJVO?87hDP5W9ap)flM4>!+5Q+2l(*B0Aq zmpAeB)7Ad;F8}J&{?}jL{r7+V#lQXX?!R~~zmTW9r?2?KSN-}yhj)>sHDtJBxC3bh zAKANzig{{N5e`GO8@G|IwMdxzzK4e|s|dL7*0eDN#Obv3YHS=K!epvYtBFT~z_OHK zm3w$b_TGB$)zo!av~^k6MZkJ4$37|>nTath+1B&jb@%Vz?m~!^Th`>f+`}zJAf)Kr z0nMuWFaT6JLF)}bn+?>Fk$vgf=m6Vt|JfH`U-Ccv{_SJ7U3zHqsAfAs!E!z=>*-)) zZnD#&(h}v+U(0VKDH0MMHY}&Wn$p+1`_~@WtUN23D4U%~AUvXSwUagf|Kqlfz2!h4 zqLP`lA;(QzS#pyyB@xc1T_xv|slg~__XgA^*jJf^-7I6fVZLb^SSDqdY9gX8;jk&< zYrm=nDmwDQvR3XrNCt74i&^<$1 zwxyj;ayoN4we?<4XX&TZ?x{|(fE9fQ?BzVEMs`bGvMXzhgSs%(;JED5>&K@9jef5nq z{5hu0F-k8Y%jxbNsBRvdc9Ot!a4WN+GHe2IlTYQ0h{#(n=o^4OE~FxoBbjtejORDs zL}qzBN4F_ESGJPw=aD&`a-TxZmd6**=YW+hVhS;fCxVkjae%cuFmfJ)5k@M72twxU zlo?3Gf!5|Mo>jP&Bbix;j7Y8C@gk+9sRb%xEbHQ#=~<~*oeO7Xrf0d)B{)~+O4diU zqoCdr%B)5+RhE5IN_mk$00a`2pi0jkHgaSa@r=xDZMlvOMD@pQZPv_1ptfpN_>R^I zrU2LB+R&wCrnDBe;g+?|C?S@asnRUTon%DV7^~U6hWZn;MGJRh6WeeZKV_WgP>3X-C|r;oXWMm}9^T^VE`$3DiW!juRy1sCAE57(z6u$-AtcJ|z!h9b4; zhxeNq9v&8D*f8xa%$w$`htqYt%F^WGqKFL3kOsJiCrN}1&uzpW*;G`Ch*jIEtB#;n z$q>3G$suWk1-hU$wd!3h1Y+%CBV+sU#p%`G{Q4LF`+xlETUkErAI^6ViI)3ygoD%! z&Ao-3PjcO^($2%4UP+#tNMs|kO<)umwif~3H>>A?+xFOfUzCc-VUgLG5l|)rOG9Js z!@{bgmi8_u7mnaQu5W+;$6x;0L&MjXC!Utp`>-LRyPkgc!=v>t`@^feeh5e)v@L7` z58JM_oRjFwLNm9$#s1Lzr+3RAzgm9!>U_d}qT~8_LdN#kH!~lv)?5sWf-5qrD?F%0 z_n-+f(0cdSn@s;l1tf({ZEV+lP|ztOqWb%`-oUtQCW5AlO!Glh%P;=^ICCo%+_OYyr;DQXCQu_=-qD0KvG@W2571hFA#63t> z6EvSb=v62zk)cA*qGzTknu>^sB&BLYlUeObQALU1Y=1jjj(M53#guyhnYH3UlnIX* zq}~QCv-WZd599wtcqpYzU7^j*5{I=(!DIm4oEnq@I|K{&p(@s1V5K_T{Nk!Lj{^nGP#~m&Vgf0%bOXp4YCfM` z-~~}z%|#E=6G%mVq!@Y50{nl3IOW&)(Y4o+p`R)+t)4isX`XMteOAmKS$`G}i;K9l)WMn)yaL~ac9&0(kl^xJKGaj=g$D9#fnmYWtJV$i_aWvdFIR#Ol{qKx0i?0M?-sic#dD6DfinOKb|>R>8L!y zf;>_b2^_-s%8=X`jJX)j2%f@rj609$y$&sNRv&nJ8V}E5Wu|bNZ`~sA%##1q%0$d? z0Z>(x%sSI!dZQB5CS|3Jgo+-V1WSBb6i$&WlcwT!( zXeO9wZQl11$#?_>9y!J!u`UaN>5@;7SXLph?2$Y!QaY{maoqxV z{pwDej)>ig9n@sDr5mt$ptYm(hc|kcwC&3DCQw0oY}ZRuRvQ6#B%qYiN0CHiXNqm{ z{@Xu$)&7US{P~x1d9!~nKYX=ZzFoGr?Zdar`>*=@uRe>%Uw?7`#hW|Y@O}5obs`gpIYY^tS;qv}_ zj>n&W_ON1C$+a&4D5oLI*YB@iz2B|fe|UZRLgE@ZqFcN4D6mbtdD!&0VGK%RZYE@*_ zvvHE^l?15N=@<@2>uPQzQu=cK?8~p-+dqE4eb5v7*?^1?ikk!I=X+IgHyr(XZ!#6U zG+P8p4_p~#t%j+p5an`e=aUEAoTS-&@I_=IIZ+?=dRd-HopP3B|WIWdd9jS~-a0^O; z{1L%D$D_3VlFAzcPcS+48$~iGZ#fKsP)kY)K=UxjIUYpeQ4JlX@H|3}Y8_vSeW~_y zIh#Gt6*HfQ{1^xUkYRIS7BB8=0)&C0SC)Oc2!{3n@IB zEGK~3iiNjG^0;T!BX7>2#9YIRHF&w+W7bGiZ6x2n9A{F7sIk92#+(h3XRbCA;wcHELnyNgZ=v~wz*9j{RY!z}k{*Fb6@_Pti_k4{ zHZDjJ&CFD#g@-*;@4#%EnMgR2LZOzCyeND!CaN|z5opsGrmDA;6d2mnN2sbWMVu)q zx%3nfs*W*i$GWz=6EiUgi(FL9Baxz_h_2>WX zdjCm0eV+tU7!E1HQh+HU=25Jjid0!}Ys^dwe0bVagp#ebb>Tj&bjRm~ZrOXk?1NpH zY(f=RC-A5F$0gb_=z!=ZJiewkkSv?|s=WR~u-psILr30Q=Qi zBZ6TF*s|(ox$PIDZF45prNP~|5ApVQzy9pY&;HHN{=-+_{r=tcaeud& zi{zWT^TT=hi$D3r^7$A4%m4Pb%c(QD_VupqciO~eRa1mF5i^H!SZcNDtdQXLA&_4NB-F#ee#=cp1!utMZ-N7Q2WK?H~;$f z^FRJ1^&1-@zhq9qv^Cx0{jFo`s)mDj%rQhFKu{+QQO3as-6E zHM8LZOOs@XvUk0jr$r|ELJtpz2&s$_AXF&~XqnhX7!j<-7lJY^i73O8rnHpZy`Anp-wFiM(l%#|^73k}7cW=%S-dc}LiUb^lJ4zK38B+S`h{#l} zq_FeG-5kQ#GD}EiBm+_Gbw!2i3Vkr&0a^7o~2O zcut4OfFKcsOgLJhCPj|wnHk95E+qvl_1cY2uFBfyNXsK|3w>V1KERRInF+2bk~kjA zXReaXWuTIP+*eHzoLm9)ZCNBK-L7JRX6mwi1!*cRgEi%{fq8XqNBc0lyFR8;hl$;>yGkO4Qm=T?>Fi zy#_qH*B&fAg$!n<9P@{46ZYqkS;-{yphe~yf4e(8cnDT%ASO4CQd-W%IY`a)NG*E< z3sb2cUGoSP0@O-MO6#qhsv?=`2Qh=pDp9x=cnIc6;Q7KY2WXIY$-|MDm zQtgW(%b!0zNS1J@{LZSSWv%8FE!PT&h@>3l?*NfgIx3z?(84m1Nwc&Ok}@nrT$JVd z-&$s1-wl8T=wmoeCn;gBD#8-#`v4RBZj`1X(#o&81Zg?;Sek&iT)cNzuq_?AlWfwi z``9n$V|@PRvxk!|7j;ltbF(hZMm%0DmnI@U&;*egj+zakXbli7%FBK^+q*yg$=$#I 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℞r^3f{`7}04&S}WDKS6_pK1Kdw;xVF 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õ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�HnkuY^rYSXv59n>g2YH=`BLR+6Jd& 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%0A0EueM3^}uu{M4-JFdcMm=SbE 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