From bfa2b56d764df6a2cf418c76c869daf1c9604ee0 Mon Sep 17 00:00:00 2001 From: Gio Della-Libera Date: Thu, 16 Jul 2026 10:21:52 -0700 Subject: [PATCH 1/6] feat(claws): add experimental package schema --- bun.lock | 5 +- convex/schema.ts | 22 + packages/schema/dist/claws.d.ts | 159 +++++ packages/schema/dist/claws.js | 812 ++++++++++++++++++++++++ packages/schema/dist/claws.js.map | 1 + packages/schema/dist/index.d.ts | 1 + packages/schema/dist/index.js | 1 + packages/schema/dist/index.js.map | 1 - packages/schema/dist/packages.d.ts | 28 +- packages/schema/dist/packages.js | 6 +- packages/schema/dist/packages.js.map | 2 +- packages/schema/package.json | 3 +- packages/schema/src/claws.test.ts | 581 ++++++++++++++++++ packages/schema/src/claws.ts | 884 +++++++++++++++++++++++++++ packages/schema/src/index.ts | 1 + packages/schema/src/packages.ts | 8 +- specs/claws.md | 43 ++ src/lib/packageLabels.test.ts | 4 + src/lib/packageLabels.ts | 2 + 19 files changed, 2543 insertions(+), 21 deletions(-) create mode 100644 packages/schema/dist/claws.d.ts create mode 100644 packages/schema/dist/claws.js create mode 100644 packages/schema/dist/claws.js.map delete mode 100644 packages/schema/dist/index.js.map create mode 100644 packages/schema/src/claws.test.ts create mode 100644 packages/schema/src/claws.ts create mode 100644 specs/claws.md diff --git a/bun.lock b/bun.lock index c87607e2fc..8f47a45082 100644 --- a/bun.lock +++ b/bun.lock @@ -155,6 +155,7 @@ "version": "0.0.2", "dependencies": { "arktype": "2.2.3", + "croner": "10.0.1", }, "devDependencies": { "@typescript/native": "npm:typescript@7.0.2", @@ -443,7 +444,7 @@ "@openclaw/clawhub-admin": ["@openclaw/clawhub-admin@workspace:packages/clawhub-admin"], - "@openclaw/design-system": ["@openclaw/design-system@github:openclaw/design-system#7b097d7", {}, "openclaw-carapace-7b097d7"], + "@openclaw/design-system": ["@openclaw/design-system@github:openclaw/design-system#7b097d7", {}, "openclaw-carapace-7b097d7", "sha512-R3S+LL+jblNEvUwpWSjM87dssj4GuJppwhG2Vq4aJHYL/MvY+ohcc2fjSpzBKGm6SV2Ky7lz9AWRYE7xvP6Mlg=="], "@openclaw/plugin-inspector": ["@openclaw/plugin-inspector@0.3.17", "", { "bin": { "plugin-inspector": "src/cli.js" } }, "sha512-JPPHPhiXMsIvrV8UR8RQjhflMjRZX/uIhy9meE81dup7MMSnRJcsTGOXYACohv6e4z2P95z2QuE7nZkWT6Ysuw=="], @@ -1129,6 +1130,8 @@ "cose-base": ["cose-base@1.0.3", "", { "dependencies": { "layout-base": "^1.0.0" } }, "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg=="], + "croner": ["croner@10.0.1", "", {}, "sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g=="], + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], "crossws": ["crossws@0.4.9", "", { "peerDependencies": { "srvx": ">=0.11.5" }, "optionalPeers": ["srvx"] }, "sha512-iWx+1OMSG2aOHpjyf9AESOzkwsVdS49cXM9dVrI2PDhxU5l2RIWE/KG56gk4BbAnsMoycvniJ9OnOxO9LRzHVA=="], diff --git a/convex/schema.ts b/convex/schema.ts index 9cb402921f..502479b0a9 100644 --- a/convex/schema.ts +++ b/convex/schema.ts @@ -513,6 +513,7 @@ const packageFamilyValidator = v.union( v.literal("skill"), v.literal("code-plugin"), v.literal("bundle-plugin"), + v.literal("claw"), ); const packageChannelValidator = v.union( @@ -641,6 +642,25 @@ const pluginManifestSummaryValidator = v.object({ ), }); +const clawManifestSummaryValidator = v.object({ + schemaVersion: v.literal(1), + agent: v.object({ + id: v.string(), + name: v.optional(v.string()), + description: v.optional(v.string()), + }), + workspace: v.object({ + bootstrapFiles: v.array(v.string()), + fileCount: v.number(), + }), + packages: v.object({ + skillCount: v.number(), + pluginCount: v.number(), + }), + mcpServerCount: v.number(), + cronJobCount: v.number(), +}); + const packageVerificationValidator = v.optional( v.object({ tier: packageVerificationTierValidator, @@ -1696,6 +1716,8 @@ const packageReleases = defineTable({ normalizedBundleManifest: v.optional(v.any()), manifestSearchTerms: v.optional(v.array(v.string())), pluginManifestSummary: v.optional(pluginManifestSummaryValidator), + extractedClawManifest: v.optional(v.any()), + clawManifestSummary: v.optional(clawManifestSummaryValidator), compatibility: packageCompatibilityValidator, runtimeId: v.optional(v.string()), sourceRepo: v.optional(v.string()), diff --git a/packages/schema/dist/claws.d.ts b/packages/schema/dist/claws.d.ts new file mode 100644 index 0000000000..ee07a07b0f --- /dev/null +++ b/packages/schema/dist/claws.d.ts @@ -0,0 +1,159 @@ +import { type inferred } from "arktype"; +export declare const CLAW_SCHEMA_VERSION: 1; +export declare const CLAW_SUMMARY_AGENT_NAME_MAX_CHARS = 128; +export declare const CLAW_SUMMARY_AGENT_DESCRIPTION_MAX_CHARS = 1024; +export declare const CLAW_BOOTSTRAP_FILE_NAMES: readonly ["AGENTS.md", "SOUL.md", "IDENTITY.md", "TOOLS.md", "HEARTBEAT.md"]; +export declare const ClawManifestSchema: import("arktype/internal/variants/object.ts").ObjectType<{ + schemaVersion: 1; + agent: { + id: string; + name?: string | undefined; + description?: string | undefined; + identity?: { + name?: string | undefined; + theme?: string | undefined; + emoji?: string | undefined; + avatar?: string | undefined; + } | undefined; + groupChat?: { + mentionPatterns?: string[] | undefined; + } | undefined; + sandbox?: { + mode?: "all" | "non-main" | "off" | undefined; + scope?: "agent" | "session" | "shared" | undefined; + workspaceAccess?: "none" | "ro" | "rw" | undefined; + } | undefined; + tools?: { + profile?: string | undefined; + allow?: string[] | undefined; + alsoAllow?: string[] | undefined; + deny?: string[] | undefined; + fs?: { + workspaceOnly?: boolean | undefined; + } | undefined; + } | undefined; + memorySearch?: { + enabled?: boolean | undefined; + rememberAcrossConversations?: boolean | undefined; + sources?: ("memory" | "sessions")[] | undefined; + } | undefined; + heartbeat?: { + every?: string | undefined; + activeHours?: { + start?: string | undefined; + end?: string | undefined; + timezone?: string | undefined; + } | undefined; + lightContext?: boolean | undefined; + isolatedSession?: boolean | undefined; + skipWhenBusy?: boolean | undefined; + timeoutSeconds?: number | undefined; + } | undefined; + humanDelay?: { + mode?: "custom" | "natural" | "off" | undefined; + minMs?: number | undefined; + maxMs?: number | undefined; + } | undefined; + }; + workspace?: { + bootstrapFiles?: { + "AGENTS.md"?: { + source: string; + } | undefined; + "SOUL.md"?: { + source: string; + } | undefined; + "IDENTITY.md"?: { + source: string; + } | undefined; + "TOOLS.md"?: { + source: string; + } | undefined; + "HEARTBEAT.md"?: { + source: string; + } | undefined; + } | undefined; + files?: { + source: string; + path: string; + }[] | undefined; + } | undefined; + packages?: { + kind: "plugin" | "skill"; + source: "clawhub"; + ref: string; + version: string; + }[] | undefined; + mcpServers?: { + [x: string]: { + command: string; + transport?: "stdio" | undefined; + args?: string[] | undefined; + env?: { + [x: string]: string; + } | undefined; + toolFilter?: { + include?: string[] | undefined; + exclude?: string[] | undefined; + } | undefined; + timeout?: number | undefined; + connectTimeout?: number | undefined; + } | { + url: string; + transport: "sse" | "streamable-http"; + auth?: "oauth" | undefined; + toolFilter?: { + include?: string[] | undefined; + exclude?: string[] | undefined; + } | undefined; + timeout?: number | undefined; + connectTimeout?: number | undefined; + }; + } | undefined; + cronJobs?: { + id: string; + name?: string | undefined; + schedule: { + cron: string; + timezone: string; + }; + session: "isolated" | "main"; + message: string; + delivery?: { + mode: "announce" | "none"; + channel?: "last" | undefined; + } | undefined; + }[] | undefined; +}, {}>; +export type ClawManifest = (typeof ClawManifestSchema)[inferred]; +export declare const ClawManifestSummarySchema: import("arktype/internal/variants/object.ts").ObjectType<{ + schemaVersion: 1; + agent: { + id: string; + name?: string | undefined; + description?: string | undefined; + }; + workspace: { + bootstrapFiles: string[]; + fileCount: number; + }; + packages: { + skillCount: number; + pluginCount: number; + }; + mcpServerCount: number; + cronJobCount: number; +}, {}>; +export type ClawManifestSummary = (typeof ClawManifestSummarySchema)[inferred]; +export type ClawManifestValidationIssue = { + path: string; + message: string; +}; +export declare function validateClawManifest(value: unknown): { + ok: true; + manifest: ClawManifest; +} | { + ok: false; + issues: ClawManifestValidationIssue[]; +}; +export declare function summarizeClawManifest(manifest: ClawManifest): ClawManifestSummary; diff --git a/packages/schema/dist/claws.js b/packages/schema/dist/claws.js new file mode 100644 index 0000000000..0b890f95c7 --- /dev/null +++ b/packages/schema/dist/claws.js @@ -0,0 +1,812 @@ +import { ArkErrors, type } from "arktype"; +import { Cron } from "croner"; +export const CLAW_SCHEMA_VERSION = 1; +export const CLAW_SUMMARY_AGENT_NAME_MAX_CHARS = 128; +export const CLAW_SUMMARY_AGENT_DESCRIPTION_MAX_CHARS = 1_024; +export const CLAW_BOOTSTRAP_FILE_NAMES = [ + "AGENTS.md", + "SOUL.md", + "IDENTITY.md", + "TOOLS.md", + "HEARTBEAT.md", +]; +const StringArraySchema = type("string[]"); +const WorkspaceSourceSchema = type({ "+": "reject", source: "string" }); +const ToolFilterSchema = type({ + "+": "reject", + include: StringArraySchema.optional(), + exclude: StringArraySchema.optional(), +}); +const StdioMcpServerSchema = type({ + "+": "reject", + command: "string", + transport: '"stdio"?', + args: StringArraySchema.optional(), + env: type({ "[string]": "string" }).optional(), + toolFilter: ToolFilterSchema.optional(), + timeout: "number?", + connectTimeout: "number?", +}); +const RemoteMcpServerSchema = type({ + "+": "reject", + url: "string", + transport: '"sse"|"streamable-http"', + auth: '"oauth"?', + toolFilter: ToolFilterSchema.optional(), + timeout: "number?", + connectTimeout: "number?", +}); +export const ClawManifestSchema = type({ + "+": "reject", + schemaVersion: "1", + agent: { + "+": "reject", + id: "string", + name: "string?", + description: "string?", + identity: type({ + "+": "reject", + name: "string?", + theme: "string?", + emoji: "string?", + avatar: "string?", + }).optional(), + groupChat: type({ + "+": "reject", + mentionPatterns: StringArraySchema.optional(), + }).optional(), + sandbox: type({ + "+": "reject", + mode: '"off"|"non-main"|"all"?', + scope: '"session"|"agent"|"shared"?', + workspaceAccess: '"none"|"ro"|"rw"?', + }).optional(), + tools: type({ + "+": "reject", + profile: "string?", + allow: StringArraySchema.optional(), + alsoAllow: StringArraySchema.optional(), + deny: StringArraySchema.optional(), + fs: type({ + "+": "reject", + workspaceOnly: "boolean?", + }).optional(), + }).optional(), + memorySearch: type({ + "+": "reject", + enabled: "boolean?", + rememberAcrossConversations: "boolean?", + sources: type("('memory' | 'sessions')[]").optional(), + }).optional(), + heartbeat: type({ + "+": "reject", + every: "string?", + activeHours: type({ + "+": "reject", + start: "string?", + end: "string?", + timezone: "string?", + }).optional(), + lightContext: "boolean?", + isolatedSession: "boolean?", + skipWhenBusy: "boolean?", + timeoutSeconds: "number?", + }).optional(), + humanDelay: type({ + "+": "reject", + mode: '"off"|"natural"|"custom"?', + minMs: "number?", + maxMs: "number?", + }).optional(), + }, + workspace: type({ + "+": "reject", + bootstrapFiles: type({ + "+": "reject", + "AGENTS.md": WorkspaceSourceSchema.optional(), + "SOUL.md": WorkspaceSourceSchema.optional(), + "IDENTITY.md": WorkspaceSourceSchema.optional(), + "TOOLS.md": WorkspaceSourceSchema.optional(), + "HEARTBEAT.md": WorkspaceSourceSchema.optional(), + }).optional(), + files: type({ "+": "reject", source: "string", path: "string" }).array().optional(), + }).optional(), + packages: type({ + "+": "reject", + kind: '"skill"|"plugin"', + source: '"clawhub"', + ref: "string", + version: "string", + }) + .array() + .optional(), + mcpServers: type({ + "[string]": StdioMcpServerSchema.or(RemoteMcpServerSchema), + }).optional(), + cronJobs: type({ + "+": "reject", + id: "string", + name: "string?", + schedule: { "+": "reject", cron: "string", timezone: "string" }, + session: '"main"|"isolated"', + message: "string", + delivery: type({ + "+": "reject", + mode: '"none"|"announce"', + channel: '"last"?', + }).optional(), + }) + .array() + .optional(), +}); +const ClawSummaryAgentNameSchema = type("string").narrow((value) => Array.from(value).length <= CLAW_SUMMARY_AGENT_NAME_MAX_CHARS); +const ClawSummaryAgentDescriptionSchema = type("string").narrow((value) => Array.from(value).length <= CLAW_SUMMARY_AGENT_DESCRIPTION_MAX_CHARS); +export const ClawManifestSummarySchema = type({ + "+": "reject", + schemaVersion: "1", + agent: { + "+": "reject", + id: "string", + name: ClawSummaryAgentNameSchema.optional(), + description: ClawSummaryAgentDescriptionSchema.optional(), + }, + workspace: { + "+": "reject", + bootstrapFiles: "string[]", + fileCount: "number", + }, + packages: { + "+": "reject", + skillCount: "number", + pluginCount: "number", + }, + mcpServerCount: "number", + cronJobCount: "number", +}); +const AGENT_ID_PATTERN = /^[a-z][a-z0-9_-]{0,63}$/; +const EXACT_VERSION_PATTERN = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/; +const ENV_REFERENCE_PATTERN = /^\$\{[A-Z_][A-Z0-9_]*\}$/; +const PACKAGE_NAME_PATTERN = /^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/; +const WINDOWS_INVALID_PATH_CHARS = /[<>:"|?*]/; +const WINDOWS_RESERVED_PATH_SEGMENT = /^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\..*)?$/i; +const AVATAR_MAX_BYTES = 2 * 1024 * 1024; +const AVATAR_MAX_DATA_URL_CHARS = 2_796_230; +const AVATAR_DATA_URL_PATTERN = /^data:image\/[^,]*,/i; +const AVATAR_EXTENSION_PATTERN = /\.(?:png|jpe?g|gif|webp|svg)$/i; +const BASE64_PAYLOAD_PATTERN = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/; +const PORTABLE_ENV_KEY_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/; +// Snapshot of OpenClaw's host-wide blocked process environment policy for v1 conformance. +const BLOCKED_PROCESS_ENV_KEYS = new Set([ + "NODE_OPTIONS", + "NODE_PATH", + "NODE_REDIRECT_WARNINGS", + "NODE_REPL_EXTERNAL_MODULE", + "NODE_REPL_HISTORY", + "NODE_V8_COVERAGE", + "PYTHONHOME", + "PYTHONPATH", + "PERL5LIB", + "PERL5OPT", + "RUBYLIB", + "RUBYOPT", + "BASHOPTS", + "BASH_ENV", + "ENV", + "KSH_ENV", + "BROWSER", + "GIT_ALLOW_PROTOCOL", + "GIT_EDITOR", + "GIT_EXTERNAL_DIFF", + "GIT_DIR", + "GIT_WORK_TREE", + "GIT_COMMON_DIR", + "GIT_EXEC_PATH", + "GIT_INDEX_FILE", + "GIT_OBJECT_DIRECTORY", + "GIT_ALTERNATE_OBJECT_DIRECTORIES", + "GIT_NAMESPACE", + "GIT_PROTOCOL_FROM_USER", + "GIT_SEQUENCE_EDITOR", + "GIT_TEMPLATE_DIR", + "GIT_SSL_NO_VERIFY", + "GIT_SSL_CAINFO", + "GIT_SSL_CAPATH", + "CC", + "CXX", + "CARGO_BUILD_RUSTC", + "CARGO_BUILD_RUSTC_WRAPPER", + "CARGO_BUILD_RUSTC_WORKSPACE_WRAPPER", + "CARGO_BUILD_RUSTDOC", + "RUSTC", + "RUSTC_WRAPPER", + "RUSTC_WORKSPACE_WRAPPER", + "RUSTDOC", + "CMAKE_C_COMPILER", + "CMAKE_CXX_COMPILER", + "SHELL", + "SHELLOPTS", + "PS4", + "GCONV_PATH", + "IFS", + "SSLKEYLOGFILE", + "JAVA_OPTS", + "JAVA_TOOL_OPTIONS", + "_JAVA_OPTIONS", + "JDK_JAVA_OPTIONS", + "PYTHONBREAKPOINT", + "DOTNET_STARTUP_HOOKS", + "DOTNET_ADDITIONAL_DEPS", + "FPATH", + "GLIBC_TUNABLES", + "MAVEN_OPTS", + "MAKE", + "MAKEFLAGS", + "MFLAGS", + "SBT_OPTS", + "GRADLE_OPTS", + "ANT_OPTS", + "HGRCPATH", + "HGEDITOR", + "HGMERGE", + "EXINIT", + "VIMINIT", + "MYVIMRC", + "GVIMINIT", + "LUA_INIT", + "LUA_INIT_5_1", + "LUA_INIT_5_2", + "LUA_INIT_5_3", + "LUA_INIT_5_4", + "EMACSLOADPATH", + "RUBYSHELL", + "GIT_HOOK_PATH", + "SVN_EDITOR", + "SVN_SSH", + "BZR_EDITOR", + "BZR_SSH", + "BZR_PLUGIN_PATH", + "SUDO_ASKPASS", + "JULIA_EDITOR", + "CONFIG_SITE", + "CONFIG_SHELL", + "CMAKE_TOOLCHAIN_FILE", + "CATALINA_OPTS", + "CORECLR_PROFILER", + "HELM_PLUGINS", + "PACKER_PLUGIN_PATH", + "VAGRANT_VAGRANTFILE", + "ERL_AFLAGS", + "ERL_FLAGS", + "ERL_ZFLAGS", + "ELIXIR_ERL_OPTIONS", + "R_ENVIRON", + "R_PROFILE", + "R_ENVIRON_USER", + "R_PROFILE_USER", + "TCLLIBPATH", + "HOSTALIASES", +]); +const BLOCKED_PROCESS_ENV_PREFIXES = ["DYLD_", "LD_", "BASH_FUNC_"]; +function isStrictNonEmpty(value) { + return value.length > 0 && value === value.trim(); +} +function isBlockedProcessEnvKey(value) { + const upper = value.toUpperCase(); + return (BLOCKED_PROCESS_ENV_KEYS.has(upper) || + BLOCKED_PROCESS_ENV_PREFIXES.some((prefix) => upper.startsWith(prefix))); +} +function isSafePackagePath(value) { + const normalized = value.replaceAll("\\", "/"); + if (!isStrictNonEmpty(normalized) || + normalized.startsWith("/") || + /^[A-Za-z]:\//.test(normalized)) { + return false; + } + return normalized + .split("/") + .every((segment) => segment !== "" && + segment !== "." && + segment !== ".." && + !WINDOWS_INVALID_PATH_CHARS.test(segment) && + !Array.from(segment).some((character) => character.charCodeAt(0) <= 0x1f) && + !segment.endsWith(".") && + !segment.endsWith(" ") && + !WINDOWS_RESERVED_PATH_SEGMENT.test(segment)); +} +function portablePathKey(value) { + return value.replaceAll("\\", "/").normalize("NFC").toLowerCase(); +} +function isPortableAvatar(value) { + if (AVATAR_DATA_URL_PATTERN.test(value)) { + if (value.length > AVATAR_MAX_DATA_URL_CHARS) + return false; + const comma = value.indexOf(","); + if (comma < 0) + return false; + const metadata = value.slice(0, comma); + const payload = value.slice(comma + 1); + try { + const base64 = /;base64(?:;|$)/i.test(metadata); + if (payload.length === 0 || (base64 && !BASE64_PAYLOAD_PATTERN.test(payload))) + return false; + const byteLength = base64 + ? (payload.length / 4) * 3 - (payload.endsWith("==") ? 2 : payload.endsWith("=") ? 1 : 0) + : new TextEncoder().encode(decodeURIComponent(payload)).byteLength; + return byteLength > 0 && byteLength <= AVATAR_MAX_BYTES; + } + catch { + return false; + } + } + return isSafePackagePath(value) && AVATAR_EXTENSION_PATTERN.test(value); +} +function conflictsWithWorkspaceTarget(targets, candidate) { + for (const target of targets) { + if (target === candidate || + target.startsWith(`${candidate}/`) || + candidate.startsWith(`${target}/`)) { + return true; + } + } + return false; +} +function isValidDuration(value) { + const trimmed = value.trim().toLowerCase(); + if (!trimmed) + return false; + const multipliers = { + ms: 1, + s: 1_000, + m: 60_000, + h: 3_600_000, + d: 86_400_000, + }; + const single = /^(\d+(?:\.\d+)?)(ms|s|m|h|d)?$/.exec(trimmed); + if (single) { + const durationMs = Math.round(Number(single[1]) * multipliers[single[2] ?? "m"]); + return durationMs >= 0 && Number.isSafeInteger(durationMs); + } + let totalMs = 0; + let consumed = 0; + for (const match of trimmed.matchAll(/(\d+(?:\.\d+)?)(ms|s|m|h|d)/g)) { + if (match.index !== consumed) + return false; + totalMs += Number(match[1]) * multipliers[match[2]]; + consumed += match[0].length; + } + return (consumed === trimmed.length && + consumed > 0 && + Math.round(totalMs) >= 0 && + Number.isSafeInteger(Math.round(totalMs))); +} +function packageManagerArtifacts(command, args) { + const executable = command + .split(/[\\/]/) + .at(-1) + ?.replace(/\.(?:cmd|exe)$/i, "") + .toLowerCase(); + let start = 0; + if (executable === "npm") { + if (args[0] !== "exec" && args[0] !== "x") + return [""]; + start = 1; + } + else if (executable === "bun") { + if (args[0] !== "x") + return [""]; + start = 1; + } + else if (executable === "pnpm" || executable === "yarn") { + if (args[0] !== "dlx") + return [""]; + start = 1; + } + else if (executable !== "npx" && executable !== "pnpx" && executable !== "bunx") { + return undefined; + } + const selected = []; + let positional; + for (let index = start; index < args.length; index += 1) { + const value = args[index]; + if (!value) + continue; + if (value === "--") { + positional = args[index + 1] ?? ""; + break; + } + if (value === "-p" || value === "--package") { + selected.push(args[index + 1] ?? ""); + index += 1; + continue; + } + if (value.startsWith("--package=")) { + selected.push(value.slice("--package=".length)); + continue; + } + if (positional === undefined && !value.startsWith("-")) { + positional = value; + break; + } + } + return selected.length > 0 ? selected : [positional ?? ""]; +} +function truncateSummaryText(value, maxChars) { + if (!value) + return undefined; + return Array.from(value).slice(0, maxChars).join(""); +} +function isPackageManagerArtifactPinned(command, args) { + const artifacts = packageManagerArtifacts(command, args); + if (artifacts === undefined) + return undefined; + return artifacts.every((artifact) => { + const separator = artifact.lastIndexOf("@"); + const scopedSlash = artifact.startsWith("@") ? artifact.indexOf("/") : -1; + return (separator > 0 && + separator > scopedSlash && + EXACT_VERSION_PATTERN.test(artifact.slice(separator + 1))); + }); +} +function isValidHeartbeatTime(value, allow24) { + const match = /^([01]\d|2[0-4]):([0-5]\d)$/.exec(value); + if (!match) + return false; + const hour = Number(match[1]); + const minute = Number(match[2]); + return hour !== 24 || (allow24 && minute === 0); +} +function isValidTimezone(value) { + try { + new Intl.DateTimeFormat("en-US", { timeZone: value }).format(); + return true; + } + catch { + return false; + } +} +function arkIssues(errors) { + return Array.from(errors, (error) => ({ + path: error.path.length > 0 ? `$.${error.path.join(".")}` : "$", + message: error.description ?? "Invalid value.", + })); +} +function pushNonEmpty(issues, path, value) { + if (value !== undefined && !isStrictNonEmpty(value)) { + issues.push({ path, message: "Must be non-empty without leading or trailing whitespace." }); + } +} +function pushNonEmptyArray(issues, path, values, requireEntry) { + if (requireEntry && values !== undefined && values.length === 0) { + issues.push({ path, message: "Must contain at least one value." }); + } + for (const [index, value] of (values ?? []).entries()) { + pushNonEmpty(issues, `${path}.${index}`, value); + } +} +export function validateClawManifest(value) { + const parsed = ClawManifestSchema(value); + if (parsed instanceof ArkErrors) + return { ok: false, issues: arkIssues(parsed) }; + const issues = []; + if (!AGENT_ID_PATTERN.test(parsed.agent.id)) { + issues.push({ path: "$.agent.id", message: "Invalid portable agent id." }); + } + pushNonEmpty(issues, "$.agent.name", parsed.agent.name); + pushNonEmpty(issues, "$.agent.description", parsed.agent.description); + for (const field of ["name", "theme", "emoji", "avatar"]) { + pushNonEmpty(issues, `$.agent.identity.${field}`, parsed.agent.identity?.[field]); + } + pushNonEmptyArray(issues, "$.agent.groupChat.mentionPatterns", parsed.agent.groupChat?.mentionPatterns, true); + pushNonEmpty(issues, "$.agent.tools.profile", parsed.agent.tools?.profile); + pushNonEmptyArray(issues, "$.agent.tools.allow", parsed.agent.tools?.allow, true); + pushNonEmptyArray(issues, "$.agent.tools.alsoAllow", parsed.agent.tools?.alsoAllow, true); + pushNonEmptyArray(issues, "$.agent.tools.deny", parsed.agent.tools?.deny, true); + if (parsed.agent.tools?.allow && parsed.agent.tools.alsoAllow) { + issues.push({ + path: "$.agent.tools.alsoAllow", + message: "Must not be combined with tools.allow.", + }); + } + if (parsed.agent.memorySearch?.sources?.length === 0) { + issues.push({ + path: "$.agent.memorySearch.sources", + message: "Must contain at least one source.", + }); + } + if (parsed.agent.memorySearch?.sources?.includes("sessions") && + parsed.agent.memorySearch.rememberAcrossConversations !== true) { + issues.push({ + path: "$.agent.memorySearch.rememberAcrossConversations", + message: "Must be true when memorySearch.sources includes sessions.", + }); + } + const heartbeat = parsed.agent.heartbeat; + pushNonEmpty(issues, "$.agent.heartbeat.every", heartbeat?.every); + pushNonEmpty(issues, "$.agent.heartbeat.activeHours.start", heartbeat?.activeHours?.start); + pushNonEmpty(issues, "$.agent.heartbeat.activeHours.end", heartbeat?.activeHours?.end); + pushNonEmpty(issues, "$.agent.heartbeat.activeHours.timezone", heartbeat?.activeHours?.timezone); + if (heartbeat?.every) { + if (!isValidDuration(heartbeat.every)) { + issues.push({ + path: "$.agent.heartbeat.every", + message: "Must be a valid duration.", + }); + } + } + if (heartbeat?.activeHours?.start !== undefined && + !isValidHeartbeatTime(heartbeat.activeHours.start, false)) { + issues.push({ + path: "$.agent.heartbeat.activeHours.start", + message: "Must be a valid 24-hour start time.", + }); + } + if (heartbeat?.activeHours?.end !== undefined && + !isValidHeartbeatTime(heartbeat.activeHours.end, true)) { + issues.push({ + path: "$.agent.heartbeat.activeHours.end", + message: "Must be a valid 24-hour end time.", + }); + } + if (heartbeat?.activeHours?.timezone !== undefined && + !isValidTimezone(heartbeat.activeHours.timezone)) { + issues.push({ + path: "$.agent.heartbeat.activeHours.timezone", + message: "Must be a valid IANA timezone.", + }); + } + if (heartbeat?.timeoutSeconds !== undefined && + (!Number.isInteger(heartbeat.timeoutSeconds) || heartbeat.timeoutSeconds <= 0)) { + issues.push({ + path: "$.agent.heartbeat.timeoutSeconds", + message: "Must be a positive integer.", + }); + } + for (const field of ["minMs", "maxMs"]) { + const delayValue = parsed.agent.humanDelay?.[field]; + if (delayValue !== undefined && (!Number.isInteger(delayValue) || delayValue < 0)) { + issues.push({ + path: `$.agent.humanDelay.${field}`, + message: "Must be a nonnegative integer.", + }); + } + } + const workspaceTargets = new Set(); + for (const name of CLAW_BOOTSTRAP_FILE_NAMES) { + const source = parsed.workspace?.bootstrapFiles?.[name]?.source; + if (source === undefined) + continue; + if (!isSafePackagePath(source)) { + issues.push({ + path: `$.workspace.bootstrapFiles.${name}.source`, + message: "Must be a safe package-relative path.", + }); + } + workspaceTargets.add(portablePathKey(name)); + } + for (const [index, file] of (parsed.workspace?.files ?? []).entries()) { + if (!isSafePackagePath(file.source)) { + issues.push({ + path: `$.workspace.files.${index}.source`, + message: "Must be a safe package-relative path.", + }); + } + if (!isSafePackagePath(file.path)) { + issues.push({ + path: `$.workspace.files.${index}.path`, + message: "Must be a safe package-relative path.", + }); + } + const destinationKey = portablePathKey(file.path); + if (conflictsWithWorkspaceTarget(workspaceTargets, destinationKey)) { + issues.push({ + path: `$.workspace.files.${index}.path`, + message: "Workspace destination is declared more than once.", + }); + } + workspaceTargets.add(destinationKey); + } + const avatar = parsed.agent.identity?.avatar; + if (avatar !== undefined) { + if (!isPortableAvatar(avatar)) { + issues.push({ + path: "$.agent.identity.avatar", + message: "Must be a bounded image data URL or managed workspace-relative image path.", + }); + } + else if (!AVATAR_DATA_URL_PATTERN.test(avatar) && + !workspaceTargets.has(portablePathKey(avatar))) { + issues.push({ + path: "$.agent.identity.avatar", + message: "Workspace-relative avatar must match a workspace.files destination.", + }); + } + } + const packageKeys = new Set(); + for (const [index, pkg] of (parsed.packages ?? []).entries()) { + pushNonEmpty(issues, `$.packages.${index}.ref`, pkg.ref); + if (!PACKAGE_NAME_PATTERN.test(pkg.ref)) { + issues.push({ + path: `$.packages.${index}.ref`, + message: "Must be a lowercase ClawHub package name.", + }); + } + if (!EXACT_VERSION_PATTERN.test(pkg.version)) { + issues.push({ + path: `$.packages.${index}.version`, + message: "Must be an exact semantic version.", + }); + } + const key = `${pkg.kind}:${pkg.source}:${pkg.ref.toLowerCase()}`; + if (packageKeys.has(key)) { + issues.push({ + path: `$.packages.${index}`, + message: "Package is declared more than once.", + }); + } + packageKeys.add(key); + } + for (const [name, server] of Object.entries(parsed.mcpServers ?? {})) { + if (!AGENT_ID_PATTERN.test(name)) { + issues.push({ + path: `$.mcpServers.${name}`, + message: "Invalid MCP server name.", + }); + } + if ("url" in server) { + pushNonEmpty(issues, `$.mcpServers.${name}.url`, server.url); + try { + const url = new URL(server.url); + const loopback = ["localhost", "127.0.0.1", "[::1]"].includes(url.hostname); + if (url.protocol !== "https:" && !(url.protocol === "http:" && loopback)) { + throw new Error("protocol"); + } + if (url.username || url.password || url.hash) { + issues.push({ + path: `$.mcpServers.${name}.url`, + message: "Must not contain embedded credentials or fragments.", + }); + } + } + catch { + issues.push({ + path: `$.mcpServers.${name}.url`, + message: "Must use HTTPS, except HTTP on an exact loopback host.", + }); + } + } + if ("command" in server) { + pushNonEmpty(issues, `$.mcpServers.${name}.command`, server.command); + pushNonEmptyArray(issues, `$.mcpServers.${name}.args`, server.args, false); + if (isPackageManagerArtifactPinned(server.command, server.args ?? []) === false) { + issues.push({ + path: `$.mcpServers.${name}.args`, + message: "Package-manager MCP commands must select one exact immutable package version.", + }); + } + } + pushNonEmptyArray(issues, `$.mcpServers.${name}.toolFilter.include`, server.toolFilter?.include, true); + pushNonEmptyArray(issues, `$.mcpServers.${name}.toolFilter.exclude`, server.toolFilter?.exclude, true); + for (const field of ["include", "exclude"]) { + const seen = new Set(); + for (const [index, entry] of (server.toolFilter?.[field] ?? []).entries()) { + if (entry.includes("?") || entry.includes("[") || entry.includes("]")) { + issues.push({ + path: `$.mcpServers.${name}.toolFilter.${field}.${index}`, + message: "Tool filters support only exact names and * wildcards.", + }); + } + if (seen.has(entry)) { + issues.push({ + path: `$.mcpServers.${name}.toolFilter.${field}.${index}`, + message: "Tool filter entries must be unique.", + }); + } + seen.add(entry); + } + } + if ("env" in server) { + for (const [key, envValue] of Object.entries(server.env ?? {})) { + pushNonEmpty(issues, `$.mcpServers.${name}.env`, key); + if (!PORTABLE_ENV_KEY_PATTERN.test(key)) { + issues.push({ + path: `$.mcpServers.${name}.env.${key}`, + message: "Invalid portable environment key.", + }); + } + if (isBlockedProcessEnvKey(key)) { + issues.push({ + path: `$.mcpServers.${name}.env.${key}`, + message: "Environment key is blocked by the spawned-process safety policy.", + }); + } + if (!ENV_REFERENCE_PATTERN.test(envValue)) { + issues.push({ + path: `$.mcpServers.${name}.env.${key}`, + message: "Must be an unresolved ${ENV_VAR} reference.", + }); + } + } + } + if (server.timeout !== undefined && (!Number.isFinite(server.timeout) || server.timeout <= 0)) { + issues.push({ + path: `$.mcpServers.${name}.timeout`, + message: "Must be positive.", + }); + } + if (server.connectTimeout !== undefined && + (!Number.isFinite(server.connectTimeout) || server.connectTimeout <= 0)) { + issues.push({ + path: `$.mcpServers.${name}.connectTimeout`, + message: "Must be positive.", + }); + } + } + const cronIds = new Set(); + for (const [index, job] of (parsed.cronJobs ?? []).entries()) { + if (!AGENT_ID_PATTERN.test(job.id)) { + issues.push({ + path: `$.cronJobs.${index}.id`, + message: "Invalid cron job id.", + }); + } + pushNonEmpty(issues, `$.cronJobs.${index}.name`, job.name); + pushNonEmpty(issues, `$.cronJobs.${index}.schedule.cron`, job.schedule.cron); + pushNonEmpty(issues, `$.cronJobs.${index}.schedule.timezone`, job.schedule.timezone); + pushNonEmpty(issues, `$.cronJobs.${index}.message`, job.message); + try { + if (job.schedule.cron.trim().split(/\s+/).length !== 5) + throw new Error("fields"); + const cron = new Cron(job.schedule.cron.trim(), { + timezone: job.schedule.timezone.trim(), + catch: false, + }); + if (!cron.nextRun(new Date())) + throw new Error("No future run"); + } + catch { + issues.push({ + path: `$.cronJobs.${index}.schedule`, + message: "Must contain a valid cron expression and timezone.", + }); + } + if ((job.delivery?.mode === "none" && job.delivery.channel !== undefined) || + (job.delivery?.mode === "announce" && job.delivery.channel !== "last")) { + issues.push({ + path: `$.cronJobs.${index}.delivery`, + message: 'Must be { mode: "none" } or { mode: "announce", channel: "last" }.', + }); + } + if (cronIds.has(job.id)) { + issues.push({ + path: `$.cronJobs.${index}.id`, + message: "Cron job id is declared more than once.", + }); + } + cronIds.add(job.id); + } + return issues.length > 0 ? { ok: false, issues } : { ok: true, manifest: parsed }; +} +export function summarizeClawManifest(manifest) { + const packages = manifest.packages ?? []; + const agentName = truncateSummaryText(manifest.agent.name, CLAW_SUMMARY_AGENT_NAME_MAX_CHARS); + const agentDescription = truncateSummaryText(manifest.agent.description, CLAW_SUMMARY_AGENT_DESCRIPTION_MAX_CHARS); + return { + schemaVersion: CLAW_SCHEMA_VERSION, + agent: { + id: manifest.agent.id, + ...(agentName ? { name: agentName } : {}), + ...(agentDescription ? { description: agentDescription } : {}), + }, + workspace: { + bootstrapFiles: CLAW_BOOTSTRAP_FILE_NAMES.filter((name) => manifest.workspace?.bootstrapFiles?.[name] !== undefined), + fileCount: manifest.workspace?.files?.length ?? 0, + }, + packages: { + skillCount: packages.filter((pkg) => pkg.kind === "skill").length, + pluginCount: packages.filter((pkg) => pkg.kind === "plugin").length, + }, + mcpServerCount: Object.keys(manifest.mcpServers ?? {}).length, + cronJobCount: manifest.cronJobs?.length ?? 0, + }; +} +//# sourceMappingURL=claws.js.map \ No newline at end of file diff --git a/packages/schema/dist/claws.js.map b/packages/schema/dist/claws.js.map new file mode 100644 index 0000000000..d248dd7f92 --- /dev/null +++ b/packages/schema/dist/claws.js.map @@ -0,0 +1 @@ +{"version":3,"file":"claws.js","sourceRoot":"","sources":["../src/claws.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAiB,IAAI,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAU,CAAC;AAC9C,MAAM,CAAC,MAAM,iCAAiC,GAAG,GAAG,CAAC;AACrD,MAAM,CAAC,MAAM,wCAAwC,GAAG,KAAK,CAAC;AAC9D,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,WAAW;IACX,SAAS;IACT,aAAa;IACb,UAAU;IACV,cAAc;CACN,CAAC;AAEX,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;AAC3C,MAAM,qBAAqB,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;AACxE,MAAM,gBAAgB,GAAG,IAAI,CAAC;IAC5B,GAAG,EAAE,QAAQ;IACb,OAAO,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACrC,OAAO,EAAE,iBAAiB,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC;AACH,MAAM,oBAAoB,GAAG,IAAI,CAAC;IAChC,GAAG,EAAE,QAAQ;IACb,OAAO,EAAE,QAAQ;IACjB,SAAS,EAAE,UAAU;IACrB,IAAI,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IAClC,GAAG,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC9C,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IACvC,OAAO,EAAE,SAAS;IAClB,cAAc,EAAE,SAAS;CAC1B,CAAC,CAAC;AACH,MAAM,qBAAqB,GAAG,IAAI,CAAC;IACjC,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,SAAS,EAAE,yBAAyB;IACpC,IAAI,EAAE,UAAU;IAChB,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IACvC,OAAO,EAAE,SAAS;IAClB,cAAc,EAAE,SAAS;CAC1B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;IACrC,GAAG,EAAE,QAAQ;IACb,aAAa,EAAE,GAAG;IAClB,KAAK,EAAE;QACL,GAAG,EAAE,QAAQ;QACb,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,SAAS;QACtB,QAAQ,EAAE,IAAI,CAAC;YACb,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC,QAAQ,EAAE;QACb,SAAS,EAAE,IAAI,CAAC;YACd,GAAG,EAAE,QAAQ;YACb,eAAe,EAAE,iBAAiB,CAAC,QAAQ,EAAE;SAC9C,CAAC,CAAC,QAAQ,EAAE;QACb,OAAO,EAAE,IAAI,CAAC;YACZ,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE,yBAAyB;YAC/B,KAAK,EAAE,6BAA6B;YACpC,eAAe,EAAE,mBAAmB;SACrC,CAAC,CAAC,QAAQ,EAAE;QACb,KAAK,EAAE,IAAI,CAAC;YACV,GAAG,EAAE,QAAQ;YACb,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,iBAAiB,CAAC,QAAQ,EAAE;YACnC,SAAS,EAAE,iBAAiB,CAAC,QAAQ,EAAE;YACvC,IAAI,EAAE,iBAAiB,CAAC,QAAQ,EAAE;YAClC,EAAE,EAAE,IAAI,CAAC;gBACP,GAAG,EAAE,QAAQ;gBACb,aAAa,EAAE,UAAU;aAC1B,CAAC,CAAC,QAAQ,EAAE;SACd,CAAC,CAAC,QAAQ,EAAE;QACb,YAAY,EAAE,IAAI,CAAC;YACjB,GAAG,EAAE,QAAQ;YACb,OAAO,EAAE,UAAU;YACnB,2BAA2B,EAAE,UAAU;YACvC,OAAO,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC,QAAQ,EAAE;SACtD,CAAC,CAAC,QAAQ,EAAE;QACb,SAAS,EAAE,IAAI,CAAC;YACd,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,IAAI,CAAC;gBAChB,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,SAAS;gBACd,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC,QAAQ,EAAE;YACb,YAAY,EAAE,UAAU;YACxB,eAAe,EAAE,UAAU;YAC3B,YAAY,EAAE,UAAU;YACxB,cAAc,EAAE,SAAS;SAC1B,CAAC,CAAC,QAAQ,EAAE;QACb,UAAU,EAAE,IAAI,CAAC;YACf,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE,2BAA2B;YACjC,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC,QAAQ,EAAE;KACd;IACD,SAAS,EAAE,IAAI,CAAC;QACd,GAAG,EAAE,QAAQ;QACb,cAAc,EAAE,IAAI,CAAC;YACnB,GAAG,EAAE,QAAQ;YACb,WAAW,EAAE,qBAAqB,CAAC,QAAQ,EAAE;YAC7C,SAAS,EAAE,qBAAqB,CAAC,QAAQ,EAAE;YAC3C,aAAa,EAAE,qBAAqB,CAAC,QAAQ,EAAE;YAC/C,UAAU,EAAE,qBAAqB,CAAC,QAAQ,EAAE;YAC5C,cAAc,EAAE,qBAAqB,CAAC,QAAQ,EAAE;SACjD,CAAC,CAAC,QAAQ,EAAE;QACb,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;KACpF,CAAC,CAAC,QAAQ,EAAE;IACb,QAAQ,EAAE,IAAI,CAAC;QACb,GAAG,EAAE,QAAQ;QACb,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,WAAW;QACnB,GAAG,EAAE,QAAQ;QACb,OAAO,EAAE,QAAQ;KAClB,CAAC;SACC,KAAK,EAAE;SACP,QAAQ,EAAE;IACb,UAAU,EAAE,IAAI,CAAC;QACf,UAAU,EAAE,oBAAoB,CAAC,EAAE,CAAC,qBAAqB,CAAC;KAC3D,CAAC,CAAC,QAAQ,EAAE;IACb,QAAQ,EAAE,IAAI,CAAC;QACb,GAAG,EAAE,QAAQ;QACb,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE;QAC/D,OAAO,EAAE,mBAAmB;QAC5B,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,IAAI,CAAC;YACb,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,SAAS;SACnB,CAAC,CAAC,QAAQ,EAAE;KACd,CAAC;SACC,KAAK,EAAE;SACP,QAAQ,EAAE;CACd,CAAC,CAAC;AAGH,MAAM,0BAA0B,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CACtD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,iCAAiC,CACzE,CAAC;AACF,MAAM,iCAAiC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAC7D,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,wCAAwC,CAChF,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;IAC5C,GAAG,EAAE,QAAQ;IACb,aAAa,EAAE,GAAG;IAClB,KAAK,EAAE;QACL,GAAG,EAAE,QAAQ;QACb,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,0BAA0B,CAAC,QAAQ,EAAE;QAC3C,WAAW,EAAE,iCAAiC,CAAC,QAAQ,EAAE;KAC1D;IACD,SAAS,EAAE;QACT,GAAG,EAAE,QAAQ;QACb,cAAc,EAAE,UAAU;QAC1B,SAAS,EAAE,QAAQ;KACpB;IACD,QAAQ,EAAE;QACR,GAAG,EAAE,QAAQ;QACb,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,QAAQ;KACtB;IACD,cAAc,EAAE,QAAQ;IACxB,YAAY,EAAE,QAAQ;CACvB,CAAC,CAAC;AAKH,MAAM,gBAAgB,GAAG,yBAAyB,CAAC;AACnD,MAAM,qBAAqB,GACzB,qLAAqL,CAAC;AACxL,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AACzD,MAAM,oBAAoB,GAAG,oDAAoD,CAAC;AAClF,MAAM,0BAA0B,GAAG,WAAW,CAAC;AAC/C,MAAM,6BAA6B,GAAG,mDAAmD,CAAC;AAC1F,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACzC,MAAM,yBAAyB,GAAG,SAAS,CAAC;AAC5C,MAAM,uBAAuB,GAAG,sBAAsB,CAAC;AACvD,MAAM,wBAAwB,GAAG,gCAAgC,CAAC;AAClE,MAAM,sBAAsB,GAAG,kEAAkE,CAAC;AAClG,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;AAC5D,0FAA0F;AAC1F,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IACvC,cAAc;IACd,WAAW;IACX,wBAAwB;IACxB,2BAA2B;IAC3B,mBAAmB;IACnB,kBAAkB;IAClB,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,UAAU;IACV,SAAS;IACT,SAAS;IACT,UAAU;IACV,UAAU;IACV,KAAK;IACL,SAAS;IACT,SAAS;IACT,oBAAoB;IACpB,YAAY;IACZ,mBAAmB;IACnB,SAAS;IACT,eAAe;IACf,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,sBAAsB;IACtB,kCAAkC;IAClC,eAAe;IACf,wBAAwB;IACxB,qBAAqB;IACrB,kBAAkB;IAClB,mBAAmB;IACnB,gBAAgB;IAChB,gBAAgB;IAChB,IAAI;IACJ,KAAK;IACL,mBAAmB;IACnB,2BAA2B;IAC3B,qCAAqC;IACrC,qBAAqB;IACrB,OAAO;IACP,eAAe;IACf,yBAAyB;IACzB,SAAS;IACT,kBAAkB;IAClB,oBAAoB;IACpB,OAAO;IACP,WAAW;IACX,KAAK;IACL,YAAY;IACZ,KAAK;IACL,eAAe;IACf,WAAW;IACX,mBAAmB;IACnB,eAAe;IACf,kBAAkB;IAClB,kBAAkB;IAClB,sBAAsB;IACtB,wBAAwB;IACxB,OAAO;IACP,gBAAgB;IAChB,YAAY;IACZ,MAAM;IACN,WAAW;IACX,QAAQ;IACR,UAAU;IACV,aAAa;IACb,UAAU;IACV,UAAU;IACV,UAAU;IACV,SAAS;IACT,QAAQ;IACR,SAAS;IACT,SAAS;IACT,UAAU;IACV,UAAU;IACV,cAAc;IACd,cAAc;IACd,cAAc;IACd,cAAc;IACd,eAAe;IACf,WAAW;IACX,eAAe;IACf,YAAY;IACZ,SAAS;IACT,YAAY;IACZ,SAAS;IACT,iBAAiB;IACjB,cAAc;IACd,cAAc;IACd,aAAa;IACb,cAAc;IACd,sBAAsB;IACtB,eAAe;IACf,kBAAkB;IAClB,cAAc;IACd,oBAAoB;IACpB,qBAAqB;IACrB,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,oBAAoB;IACpB,WAAW;IACX,WAAW;IACX,gBAAgB;IAChB,gBAAgB;IAChB,YAAY;IACZ,aAAa;CACd,CAAC,CAAC;AACH,MAAM,4BAA4B,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,CAAU,CAAC;AAE7E,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,OAAO,CACL,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC;QACnC,4BAA4B,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CACxE,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC/C,IACE,CAAC,gBAAgB,CAAC,UAAU,CAAC;QAC7B,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;QAC1B,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,EAC/B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,UAAU;SACd,KAAK,CAAC,GAAG,CAAC;SACV,KAAK,CACJ,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,KAAK,EAAE;QACd,OAAO,KAAK,GAAG;QACf,OAAO,KAAK,IAAI;QAChB,CAAC,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC;QACzC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QACzE,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QACtB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QACtB,CAAC,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,CAC/C,CAAC;AACN,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM,GAAG,yBAAyB;YAAE,OAAO,KAAK,CAAC;QAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC5F,MAAM,UAAU,GAAG,MAAM;gBACvB,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzF,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;YACrE,OAAO,UAAU,GAAG,CAAC,IAAI,UAAU,IAAI,gBAAgB,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,4BAA4B,CAAC,OAAoB,EAAE,SAAiB;IAC3E,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IACE,MAAM,KAAK,SAAS;YACpB,MAAM,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,CAAC;YAClC,SAAS,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,EAClC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,MAAM,WAAW,GAA2B;QAC1C,EAAE,EAAE,CAAC;QACL,CAAC,EAAE,KAAK;QACR,CAAC,EAAE,MAAM;QACT,CAAC,EAAE,SAAS;QACZ,CAAC,EAAE,UAAU;KACd,CAAC;IACF,MAAM,MAAM,GAAG,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9D,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QACjF,OAAO,UAAU,IAAI,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC;QACrE,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC3C,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9B,CAAC;IACD,OAAO,CACL,QAAQ,KAAK,OAAO,CAAC,MAAM;QAC3B,QAAQ,GAAG,CAAC;QACZ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACxB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAC1C,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAe,EAAE,IAAc;IAC9D,MAAM,UAAU,GAAG,OAAO;SACvB,KAAK,CAAC,OAAO,CAAC;SACd,EAAE,CAAC,CAAC,CAAC,CAAC;QACP,EAAE,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;SAC/B,WAAW,EAAE,CAAC;IACjB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QACvD,KAAK,GAAG,CAAC,CAAC;IACZ,CAAC;SAAM,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QACjC,KAAK,GAAG,CAAC,CAAC;IACZ,CAAC;SAAM,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC1D,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK;YAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QACnC,KAAK,GAAG,CAAC,CAAC;IACZ,CAAC;SAAM,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAClF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,UAA8B,CAAC;IACnC,KAAK,IAAI,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,UAAU,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM;QACR,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACrC,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;YAChD,SAAS;QACX,CAAC;QACD,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,UAAU,GAAG,KAAK,CAAC;YACnB,MAAM;QACR,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAyB,EAAE,QAAgB;IACtE,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,8BAA8B,CAAC,OAAe,EAAE,IAAc;IACrE,MAAM,SAAS,GAAG,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzD,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE;QAClC,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,OAAO,CACL,SAAS,GAAG,CAAC;YACb,SAAS,GAAG,WAAW;YACvB,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAC1D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa,EAAE,OAAgB;IAC3D,MAAM,KAAK,GAAG,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,OAAO,IAAI,KAAK,EAAE,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,MAAiB;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG;QAC/D,OAAO,EAAE,KAAK,CAAC,WAAW,IAAI,gBAAgB;KAC/C,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,YAAY,CACnB,MAAqC,EACrC,IAAY,EACZ,KAAyB;IAEzB,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,2DAA2D,EAAE,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CACxB,MAAqC,EACrC,IAAY,EACZ,MAA4B,EAC5B,YAAqB;IAErB,IAAI,YAAY,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACtD,YAAY,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAc;IAEd,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,MAAM,YAAY,SAAS;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;IAEjF,MAAM,MAAM,GAAkC,EAAE,CAAC;IACjD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxD,YAAY,CAAC,MAAM,EAAE,qBAAqB,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACtE,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAU,EAAE,CAAC;QAClE,YAAY,CAAC,MAAM,EAAE,oBAAoB,KAAK,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,iBAAiB,CACf,MAAM,EACN,mCAAmC,EACnC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,eAAe,EACvC,IAAI,CACL,CAAC;IACF,YAAY,CAAC,MAAM,EAAE,uBAAuB,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3E,iBAAiB,CAAC,MAAM,EAAE,qBAAqB,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAClF,iBAAiB,CAAC,MAAM,EAAE,yBAAyB,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAC1F,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAChF,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,yBAAyB;YAC/B,OAAO,EAAE,wCAAwC;SAClD,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,8BAA8B;YACpC,OAAO,EAAE,mCAAmC;SAC7C,CAAC,CAAC;IACL,CAAC;IACD,IACE,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,2BAA2B,KAAK,IAAI,EAC9D,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,kDAAkD;YACxD,OAAO,EAAE,2DAA2D;SACrE,CAAC,CAAC;IACL,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;IACzC,YAAY,CAAC,MAAM,EAAE,yBAAyB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAClE,YAAY,CAAC,MAAM,EAAE,qCAAqC,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAC3F,YAAY,CAAC,MAAM,EAAE,mCAAmC,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IACvF,YAAY,CAAC,MAAM,EAAE,wCAAwC,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IACjG,IAAI,SAAS,EAAE,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,2BAA2B;aACrC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,IACE,SAAS,EAAE,WAAW,EAAE,KAAK,KAAK,SAAS;QAC3C,CAAC,oBAAoB,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,EACzD,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,qCAAqC;YAC3C,OAAO,EAAE,qCAAqC;SAC/C,CAAC,CAAC;IACL,CAAC;IACD,IACE,SAAS,EAAE,WAAW,EAAE,GAAG,KAAK,SAAS;QACzC,CAAC,oBAAoB,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,EACtD,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,mCAAmC;YACzC,OAAO,EAAE,mCAAmC;SAC7C,CAAC,CAAC;IACL,CAAC;IACD,IACE,SAAS,EAAE,WAAW,EAAE,QAAQ,KAAK,SAAS;QAC9C,CAAC,eAAe,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,EAChD,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,wCAAwC;YAC9C,OAAO,EAAE,gCAAgC;SAC1C,CAAC,CAAC;IACL,CAAC;IACD,IACE,SAAS,EAAE,cAAc,KAAK,SAAS;QACvC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC,cAAc,IAAI,CAAC,CAAC,EAC9E,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,kCAAkC;YACxC,OAAO,EAAE,6BAA6B;SACvC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,OAAO,CAAU,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;YAClF,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,sBAAsB,KAAK,EAAE;gBACnC,OAAO,EAAE,gCAAgC;aAC1C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,yBAAyB,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAChE,IAAI,MAAM,KAAK,SAAS;YAAE,SAAS;QACnC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,8BAA8B,IAAI,SAAS;gBACjD,OAAO,EAAE,uCAAuC;aACjD,CAAC,CAAC;QACL,CAAC;QACD,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACtE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,qBAAqB,KAAK,SAAS;gBACzC,OAAO,EAAE,uCAAuC;aACjD,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,qBAAqB,KAAK,OAAO;gBACvC,OAAO,EAAE,uCAAuC;aACjD,CAAC,CAAC;QACL,CAAC;QACD,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,4BAA4B,CAAC,gBAAgB,EAAE,cAAc,CAAC,EAAE,CAAC;YACnE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,qBAAqB,KAAK,OAAO;gBACvC,OAAO,EAAE,mDAAmD;aAC7D,CAAC,CAAC;QACL,CAAC;QACD,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC7C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,4EAA4E;aACtF,CAAC,CAAC;QACL,CAAC;aAAM,IACL,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC;YACrC,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAC9C,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,qEAAqE;aAC/E,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7D,YAAY,CAAC,MAAM,EAAE,cAAc,KAAK,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACzD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,cAAc,KAAK,MAAM;gBAC/B,OAAO,EAAE,2CAA2C;aACrD,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,cAAc,KAAK,UAAU;gBACnC,OAAO,EAAE,oCAAoC;aAC9C,CAAC,CAAC;QACL,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QACjE,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,cAAc,KAAK,EAAE;gBAC3B,OAAO,EAAE,qCAAqC;aAC/C,CAAC,CAAC;QACL,CAAC;QACD,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;QACrE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,gBAAgB,IAAI,EAAE;gBAC5B,OAAO,EAAE,0BAA0B;aACpC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;YACpB,YAAY,CAAC,MAAM,EAAE,gBAAgB,IAAI,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChC,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC5E,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,EAAE,CAAC;oBACzE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC9B,CAAC;gBACD,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;oBAC7C,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,gBAAgB,IAAI,MAAM;wBAChC,OAAO,EAAE,qDAAqD;qBAC/D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,gBAAgB,IAAI,MAAM;oBAChC,OAAO,EAAE,wDAAwD;iBAClE,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;YACxB,YAAY,CAAC,MAAM,EAAE,gBAAgB,IAAI,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACrE,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,IAAI,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC3E,IAAI,8BAA8B,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;gBAChF,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,gBAAgB,IAAI,OAAO;oBACjC,OAAO,EAAE,+EAA+E;iBACzF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,iBAAiB,CACf,MAAM,EACN,gBAAgB,IAAI,qBAAqB,EACzC,MAAM,CAAC,UAAU,EAAE,OAAO,EAC1B,IAAI,CACL,CAAC;QACF,iBAAiB,CACf,MAAM,EACN,gBAAgB,IAAI,qBAAqB,EACzC,MAAM,CAAC,UAAU,EAAE,OAAO,EAC1B,IAAI,CACL,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,SAAS,CAAU,EAAE,CAAC;YACpD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAC/B,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC1E,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtE,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,gBAAgB,IAAI,eAAe,KAAK,IAAI,KAAK,EAAE;wBACzD,OAAO,EAAE,wDAAwD;qBAClE,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpB,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,gBAAgB,IAAI,eAAe,KAAK,IAAI,KAAK,EAAE;wBACzD,OAAO,EAAE,qCAAqC;qBAC/C,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;YACpB,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC/D,YAAY,CAAC,MAAM,EAAE,gBAAgB,IAAI,MAAM,EAAE,GAAG,CAAC,CAAC;gBACtD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxC,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,gBAAgB,IAAI,QAAQ,GAAG,EAAE;wBACvC,OAAO,EAAE,mCAAmC;qBAC7C,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChC,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,gBAAgB,IAAI,QAAQ,GAAG,EAAE;wBACvC,OAAO,EAAE,kEAAkE;qBAC5E,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1C,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,gBAAgB,IAAI,QAAQ,GAAG,EAAE;wBACvC,OAAO,EAAE,6CAA6C;qBACvD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC;YAC9F,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,gBAAgB,IAAI,UAAU;gBACpC,OAAO,EAAE,mBAAmB;aAC7B,CAAC,CAAC;QACL,CAAC;QACD,IACE,MAAM,CAAC,cAAc,KAAK,SAAS;YACnC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,EACvE,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,gBAAgB,IAAI,iBAAiB;gBAC3C,OAAO,EAAE,mBAAmB;aAC7B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,cAAc,KAAK,KAAK;gBAC9B,OAAO,EAAE,sBAAsB;aAChC,CAAC,CAAC;QACL,CAAC;QACD,YAAY,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3D,YAAY,CAAC,MAAM,EAAE,cAAc,KAAK,gBAAgB,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7E,YAAY,CAAC,MAAM,EAAE,cAAc,KAAK,oBAAoB,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrF,YAAY,CAAC,MAAM,EAAE,cAAc,KAAK,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;YAClF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;gBAC9C,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;gBACtC,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QAClE,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,cAAc,KAAK,WAAW;gBACpC,OAAO,EAAE,oDAAoD;aAC9D,CAAC,CAAC;QACL,CAAC;QACD,IACE,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC;YACrE,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,MAAM,CAAC,EACtE,CAAC;YACD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,cAAc,KAAK,WAAW;gBACpC,OAAO,EAAE,oEAAoE;aAC9E,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,cAAc,KAAK,KAAK;gBAC9B,OAAO,EAAE,yCAAyC;aACnD,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAsB;IAC1D,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,iCAAiC,CAAC,CAAC;IAC9F,MAAM,gBAAgB,GAAG,mBAAmB,CAC1C,QAAQ,CAAC,KAAK,CAAC,WAAW,EAC1B,wCAAwC,CACzC,CAAC;IACF,OAAO;QACL,aAAa,EAAE,mBAAmB;QAClC,KAAK,EAAE;YACL,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE;YACrB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D;QACD,SAAS,EAAE;YACT,cAAc,EAAE,yBAAyB,CAAC,MAAM,CAC9C,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,EAAE,CAAC,IAAI,CAAC,KAAK,SAAS,CACnE;YACD,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;SAClD;QACD,QAAQ,EAAE;YACR,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,MAAM;YACjE,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,MAAM;SACpE;QACD,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM;QAC7D,YAAY,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;KAC7C,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/packages/schema/dist/index.d.ts b/packages/schema/dist/index.d.ts index 099df5383b..d03a08a7d4 100644 --- a/packages/schema/dist/index.d.ts +++ b/packages/schema/dist/index.d.ts @@ -1,5 +1,6 @@ export type { ArkValidator } from "./ark.js"; export { formatArkErrors, parseArk } from "./ark.js"; +export * from "./claws.js"; export * from "./catalogFeed.js"; export * from "./catalogMetadata.js"; export * from "./docsLinks.js"; diff --git a/packages/schema/dist/index.js b/packages/schema/dist/index.js index be1a5b59f4..2ded7f40c9 100644 --- a/packages/schema/dist/index.js +++ b/packages/schema/dist/index.js @@ -1,4 +1,5 @@ export { formatArkErrors, parseArk } from "./ark.js"; +export * from "./claws.js"; export * from "./catalogFeed.js"; export * from "./catalogMetadata.js"; export * from "./docsLinks.js"; diff --git a/packages/schema/dist/index.js.map b/packages/schema/dist/index.js.map deleted file mode 100644 index efe98db65b..0000000000 --- a/packages/schema/dist/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACrD,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzD,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"} \ No newline at end of file diff --git a/packages/schema/dist/packages.d.ts b/packages/schema/dist/packages.d.ts index f7420e228a..f8acebafe5 100644 --- a/packages/schema/dist/packages.d.ts +++ b/packages/schema/dist/packages.d.ts @@ -8,8 +8,10 @@ export declare function getPackageScopeOwnerMismatch(name: string, ownerHandle: suggestedName: string; message: string; } | null; -export declare const PackageFamilySchema: import("arktype/internal/variants/string.ts").StringType<"bundle-plugin" | "code-plugin" | "skill", {}>; +export declare const PackageFamilySchema: import("arktype/internal/variants/string.ts").StringType<"bundle-plugin" | "claw" | "code-plugin" | "skill", {}>; export type PackageFamily = (typeof PackageFamilySchema)[inferred]; +export declare const PackagePublishFamilySchema: import("arktype/internal/variants/string.ts").StringType<"bundle-plugin" | "code-plugin" | "skill", {}>; +export type PackagePublishFamily = (typeof PackagePublishFamilySchema)[inferred]; export declare const PackageChannelSchema: import("arktype/internal/variants/string.ts").StringType<"community" | "official" | "private", {}>; export type PackageChannel = (typeof PackageChannelSchema)[inferred]; export declare const PackageVerificationTierSchema: import("arktype/internal/variants/string.ts").StringType<"provenance-verified" | "rebuild-verified" | "source-linked" | "structural", {}>; @@ -337,7 +339,7 @@ export type ServerPackagePublishRequest = (typeof ServerPackagePublishRequestSch export declare const PackageListItemSchema: import("arktype/internal/variants/object.ts").ObjectType<{ name: string; displayName: string; - family: "bundle-plugin" | "code-plugin" | "skill"; + family: "bundle-plugin" | "claw" | "code-plugin" | "skill"; runtimeId?: string | null | undefined; channel: "community" | "official" | "private"; isOfficial: boolean; @@ -363,7 +365,7 @@ export declare const ApiV1PackageListResponseSchema: import("arktype/internal/va items: { name: string; displayName: string; - family: "bundle-plugin" | "code-plugin" | "skill"; + family: "bundle-plugin" | "claw" | "code-plugin" | "skill"; runtimeId?: string | null | undefined; channel: "community" | "official" | "private"; isOfficial: boolean; @@ -393,7 +395,7 @@ export declare const ApiV1PackageSearchResponseSchema: import("arktype/internal/ package: { name: string; displayName: string; - family: "bundle-plugin" | "code-plugin" | "skill"; + family: "bundle-plugin" | "claw" | "code-plugin" | "skill"; runtimeId?: string | null | undefined; channel: "community" | "official" | "private"; isOfficial: boolean; @@ -421,7 +423,7 @@ export declare const ApiV1PackageResponseSchema: import("arktype/internal/varian package: { name: string; displayName: string; - family: "bundle-plugin" | "code-plugin" | "skill"; + family: "bundle-plugin" | "claw" | "code-plugin" | "skill"; runtimeId?: string | null | undefined; channel: "community" | "official" | "private"; isOfficial: boolean; @@ -530,7 +532,7 @@ export declare const ApiV1PackageVersionResponseSchema: import("arktype/internal package: { name: string; displayName: string; - family: "bundle-plugin" | "code-plugin" | "skill"; + family: "bundle-plugin" | "claw" | "code-plugin" | "skill"; } | null; version: { version: string; @@ -678,7 +680,7 @@ export declare const ApiV1PackageArtifactResponseSchema: import("arktype/interna package: { name: string; displayName: string; - family: "bundle-plugin" | "code-plugin" | "skill"; + family: "bundle-plugin" | "claw" | "code-plugin" | "skill"; }; version: string; artifact: { @@ -706,7 +708,7 @@ export declare const ApiV1PackageSecurityResponseSchema: import("arktype/interna package: { name: string; displayName: string; - family: "bundle-plugin" | "code-plugin" | "skill"; + family: "bundle-plugin" | "claw" | "code-plugin" | "skill"; }; release: { releaseId: string; @@ -781,7 +783,7 @@ export declare const ApiV1PackageAppealListResponseSchema: import("arktype/inter releaseId: string; name: string; displayName: string; - family: "bundle-plugin" | "code-plugin" | "skill"; + family: "bundle-plugin" | "claw" | "code-plugin" | "skill"; version: string; message: string; status: "accepted" | "open" | "rejected"; @@ -816,7 +818,7 @@ export declare const ApiV1PackageReportListResponseSchema: import("arktype/inter releaseId?: string | null | undefined; name: string; displayName: string; - family: "bundle-plugin" | "code-plugin" | "skill"; + family: "bundle-plugin" | "claw" | "code-plugin" | "skill"; version?: string | null | undefined; reason?: string | null | undefined; status: "confirmed" | "dismissed" | "open"; @@ -849,7 +851,7 @@ export declare const ApiV1PackageModerationStatusResponseSchema: import("arktype packageId: string; name: string; displayName: string; - family: "bundle-plugin" | "code-plugin" | "skill"; + family: "bundle-plugin" | "claw" | "code-plugin" | "skill"; channel: "community" | "official" | "private"; isOfficial: boolean; reportCount: number; @@ -880,7 +882,7 @@ export declare const ApiV1PackageReadinessResponseSchema: import("arktype/intern package: { name: string; displayName: string; - family: "bundle-plugin" | "code-plugin" | "skill"; + family: "bundle-plugin" | "claw" | "code-plugin" | "skill"; isOfficial: boolean; latestVersion?: string | null | undefined; }; @@ -1090,7 +1092,7 @@ export declare const ApiV1PackageModerationQueueResponseSchema: import("arktype/ releaseId: string; name: string; displayName: string; - family: "bundle-plugin" | "code-plugin" | "skill"; + family: "bundle-plugin" | "claw" | "code-plugin" | "skill"; channel: "community" | "official" | "private"; isOfficial: boolean; version: string; diff --git a/packages/schema/dist/packages.js b/packages/schema/dist/packages.js index c1bd8843d2..b3f1a5caa9 100644 --- a/packages/schema/dist/packages.js +++ b/packages/schema/dist/packages.js @@ -22,7 +22,9 @@ export function getPackageScopeOwnerMismatch(name, ownerHandle) { message: `Package scope "@${scope}" must match selected owner "@${selectedOwner}". Publish as "@${scope}" or rename this package to "@${selectedOwner}/${packageSlug}". More info: ${DocsLinks.clawhub.packageScopeFaq}`, }; } -export const PackageFamilySchema = type('"skill"|"code-plugin"|"bundle-plugin"'); +export const PackageFamilySchema = type('"skill"|"code-plugin"|"bundle-plugin"|"claw"'); +// Publication stays narrower until a family has a complete validation path. +export const PackagePublishFamilySchema = type('"skill"|"code-plugin"|"bundle-plugin"'); export const PackageChannelSchema = type('"official"|"community"|"private"'); export const PackageVerificationTierSchema = type('"structural"|"source-linked"|"provenance-verified"|"rebuild-verified"'); export const PackageVerificationScopeSchema = type('"artifact-only"|"dependency-graph-aware"'); @@ -255,7 +257,7 @@ const PackagePublishMetadataFields = { name: "string", displayName: "string?", ownerHandle: "string?", - family: PackageFamilySchema, + family: PackagePublishFamilySchema, version: "string", changelog: "string", manualOverrideReason: "string?", diff --git a/packages/schema/dist/packages.js.map b/packages/schema/dist/packages.js.map index c11a29a81f..fc72befb17 100644 --- a/packages/schema/dist/packages.js.map +++ b/packages/schema/dist/packages.js.map @@ -1 +1 @@ -{"version":3,"file":"packages.js","sourceRoot":"","sources":["../src/packages.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"packages.js","sourceRoot":"","sources":["../src/packages.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/schema/package.json b/packages/schema/package.json index b768cab89d..1978d8cee8 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -30,7 +30,8 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "arktype": "2.2.3" + "arktype": "2.2.3", + "croner": "10.0.1" }, "devDependencies": { "@typescript/native": "npm:typescript@7.0.2", diff --git a/packages/schema/src/claws.test.ts b/packages/schema/src/claws.test.ts new file mode 100644 index 0000000000..7d807b74d6 --- /dev/null +++ b/packages/schema/src/claws.test.ts @@ -0,0 +1,581 @@ +/* @vitest-environment node */ + +import { ArkErrors } from "arktype"; +import { describe, expect, it } from "vitest"; +import { ClawManifestSummarySchema, summarizeClawManifest, validateClawManifest } from "./claws"; +import { PackageFamilySchema, PackagePublishMetadataSchema } from "./packages"; + +const fixture = { + schemaVersion: 1, + agent: { id: "financial-analyst", name: "Financial Analyst" }, + workspace: { + bootstrapFiles: { "SOUL.md": { source: "workspace/SOUL.md" } }, + files: [{ source: "workspace/reference/policy.md", path: "reference/policy.md" }], + }, + packages: [ + { + kind: "skill", + source: "clawhub", + ref: "@openclaw/research", + version: "1.2.3", + }, + { + kind: "plugin", + source: "clawhub", + ref: "@openclaw/markets", + version: "2.0.0", + }, + ], + mcpServers: { + filings: { + url: "https://example.test/mcp", + transport: "streamable-http", + auth: "oauth", + }, + }, + cronJobs: [ + { + id: "morning-brief", + schedule: { cron: "0 8 * * 1-5", timezone: "America/New_York" }, + session: "isolated", + message: "Prepare the morning brief.", + }, + ], +} as const; + +describe("Claw manifest contract", () => { + it("allows Claws in storage contracts without opening generic publication", () => { + expect(PackageFamilySchema("claw")).toBe("claw"); + expect( + PackagePublishMetadataSchema({ + name: "@openclaw/financial-analyst", + family: "claw", + version: "1.0.0", + changelog: "Initial release", + }), + ).toBeInstanceOf(ArkErrors); + }); + + it("accepts the grouped OpenClaw v1 fixture and derives a safe summary", () => { + const result = validateClawManifest(fixture); + expect(result.ok).toBe(true); + if (!result.ok) return; + expect(summarizeClawManifest(result.manifest)).toEqual({ + schemaVersion: 1, + agent: { id: "financial-analyst", name: "Financial Analyst" }, + workspace: { bootstrapFiles: ["SOUL.md"], fileCount: 1 }, + packages: { skillCount: 1, pluginCount: 1 }, + mcpServerCount: 1, + cronJobCount: 1, + }); + }); + + it("accepts portable agent policy while deferring profile resolution to the applying harness", () => { + expect( + validateClawManifest({ + ...fixture, + agent: { + ...fixture.agent, + tools: { + profile: "future-built-in", + alsoAllow: ["cron"], + deny: ["exec"], + fs: { workspaceOnly: true }, + }, + memorySearch: { + enabled: true, + rememberAcrossConversations: true, + sources: ["memory", "sessions"], + }, + }, + }).ok, + ).toBe(true); + }); + + it("rejects conflicting or unsafe portable agent policy", () => { + const conflictingTools = validateClawManifest({ + ...fixture, + agent: { + ...fixture.agent, + tools: { profile: "coding", allow: ["read"], alsoAllow: ["cron"] }, + }, + }); + expect(conflictingTools.ok).toBe(false); + + const implicitSessionMemory = validateClawManifest({ + ...fixture, + agent: { + ...fixture.agent, + memorySearch: { sources: ["sessions"] }, + }, + }); + expect(implicitSessionMemory.ok).toBe(false); + + const emptySources = validateClawManifest({ + ...fixture, + agent: { + ...fixture.agent, + memorySearch: { sources: [] }, + }, + }); + expect(emptySources.ok).toBe(false); + }); + + it("fails closed on unknown fields", () => { + expect(validateClawManifest({ ...fixture, model: "gpt-5" }).ok).toBe(false); + }); + + it("rejects traversal, floating versions, and inline MCP values", () => { + const result = validateClawManifest({ + ...fixture, + workspace: { files: [{ source: "../outside", path: "outside" }] }, + packages: [{ kind: "skill", source: "clawhub", ref: "demo", version: "latest" }], + mcpServers: { + unsafe: { command: "server", env: { SETTING: "inline-value" } }, + }, + }); + expect(result.ok).toBe(false); + if (result.ok) return; + expect(result.issues.map((issue) => issue.path)).toEqual( + expect.arrayContaining([ + "$.workspace.files.0.source", + "$.packages.0.version", + "$.mcpServers.unsafe.env.SETTING", + ]), + ); + }); + + it.each(["01.2.3", "1.2.3-.."])("rejects invalid semantic version %s", (version) => { + expect( + validateClawManifest({ + ...fixture, + packages: [{ kind: "skill", source: "clawhub", ref: "demo", version }], + }).ok, + ).toBe(false); + }); + + it("rejects malformed ClawHub package references", () => { + expect( + validateClawManifest({ + ...fixture, + packages: [ + { + kind: "skill", + source: "clawhub", + ref: "not a package", + version: "1.0.0", + }, + ], + }).ok, + ).toBe(false); + }); + + it("rejects non-portable and platform-equivalent workspace destinations", () => { + const invalidPath = validateClawManifest({ + ...fixture, + workspace: { + files: [{ source: "workspace/a\u0000b", path: "reference/a.md" }], + }, + }); + expect(invalidPath.ok).toBe(false); + + const collision = validateClawManifest({ + ...fixture, + workspace: { + files: [ + { source: "workspace/a.md", path: "reference/policy.md" }, + { source: "workspace/b.md", path: "REFERENCE\\policy.md" }, + ], + }, + }); + expect(collision.ok).toBe(false); + + const hierarchy = validateClawManifest({ + ...fixture, + workspace: { + files: [ + { source: "workspace/a.md", path: "reference" }, + { source: "workspace/b.md", path: "reference/policy.md" }, + ], + }, + }); + expect(hierarchy.ok).toBe(false); + }); + + it("rejects credentials embedded in remote MCP URLs", () => { + const result = validateClawManifest({ + ...fixture, + mcpServers: { + filings: { + url: ["https://alice", "embedded@example.test/mcp"].join(":"), + transport: "streamable-http", + }, + }, + }); + expect(result.ok).toBe(false); + if (result.ok) return; + expect(result.issues).toContainEqual({ + path: "$.mcpServers.filings.url", + message: "Must not contain embedded credentials or fragments.", + }); + }); + + it("rejects ambiguous MCP transport declarations structurally", () => { + const result = validateClawManifest({ + ...fixture, + mcpServers: { + unsafe: { command: "server", url: "https://example.test" }, + }, + }); + expect(result.ok).toBe(false); + if (result.ok) return; + expect(result.issues.map((issue) => issue.path)).toContain("$.mcpServers.unsafe"); + }); + + it("rejects invalid portable agent timing settings", () => { + const result = validateClawManifest({ + ...fixture, + agent: { + ...fixture.agent, + heartbeat: { + every: "tomorrow", + activeHours: { start: "24:00", end: "24:01" }, + timeoutSeconds: -1.5, + }, + humanDelay: { mode: "custom", minMs: -1, maxMs: 1.5 }, + }, + }); + expect(result.ok).toBe(false); + if (result.ok) return; + expect(result.issues.map((issue) => issue.path)).toEqual( + expect.arrayContaining([ + "$.agent.heartbeat.every", + "$.agent.heartbeat.activeHours.start", + "$.agent.heartbeat.activeHours.end", + "$.agent.heartbeat.timeoutSeconds", + "$.agent.humanDelay.minMs", + "$.agent.humanDelay.maxMs", + ]), + ); + }); + + it("validates active hours without imposing an unused custom-delay ordering", () => { + const result = validateClawManifest({ + ...fixture, + agent: { + ...fixture.agent, + heartbeat: { activeHours: { start: "24:99" } }, + humanDelay: { mode: "custom", minMs: 2000, maxMs: 1000 }, + }, + }); + expect(result.ok).toBe(false); + if (result.ok) return; + expect(result.issues).toEqual( + expect.arrayContaining([ + { + path: "$.agent.heartbeat.activeHours.start", + message: "Must be a valid 24-hour start time.", + }, + ]), + ); + }); + + it("accepts zero heartbeat intervals but rejects invalid timezones and infinite MCP timeouts", () => { + const result = validateClawManifest({ + ...fixture, + agent: { + ...fixture.agent, + heartbeat: { + every: "0m", + activeHours: { timezone: "Not/AZone" }, + }, + }, + mcpServers: { + local: { command: "server", timeout: Number.POSITIVE_INFINITY }, + remote: { + url: "https://example.test/mcp", + transport: "streamable-http", + connectTimeout: Number.POSITIVE_INFINITY, + }, + }, + }); + expect(result.ok).toBe(false); + if (result.ok) return; + expect(result.issues.map((issue) => issue.path)).toEqual( + expect.arrayContaining([ + "$.agent.heartbeat.activeHours.timezone", + "$.mcpServers.local.timeout", + "$.mcpServers.remote.connectTimeout", + ]), + ); + }); + + it("rejects empty portable names and required selector lists", () => { + const result = validateClawManifest({ + ...fixture, + agent: { + ...fixture.agent, + identity: { name: " " }, + groupChat: { mentionPatterns: [] }, + tools: { allow: ["read", " "] }, + }, + mcpServers: { + local: { + command: "server", + args: [""], + toolFilter: { include: [] }, + }, + }, + }); + expect(result.ok).toBe(false); + }); + + it("rejects invalid cron schedules and empty stdio commands", () => { + const result = validateClawManifest({ + ...fixture, + mcpServers: { empty: { command: " " } }, + cronJobs: [ + { + id: "broken", + schedule: { cron: "not-a-cron", timezone: "Not/AZone" }, + session: "isolated", + message: "Run.", + }, + ], + }); + expect(result.ok).toBe(false); + if (result.ok) return; + expect(result.issues.map((issue) => issue.path)).toEqual( + expect.arrayContaining(["$.mcpServers.empty.command", "$.cronJobs.0.schedule"]), + ); + }); + + it("allows one ClawHub coordinate under distinct package kinds", () => { + const result = validateClawManifest({ + ...fixture, + packages: [ + { kind: "skill", source: "clawhub", ref: "demo", version: "1.0.0" }, + { kind: "plugin", source: "clawhub", ref: "demo", version: "1.0.0" }, + ], + }); + expect(result.ok).toBe(true); + }); + + it("requires local avatars to be portable managed workspace files", () => { + expect( + validateClawManifest({ + ...fixture, + agent: { ...fixture.agent, identity: { avatar: "avatars/analyst.png" } }, + }).ok, + ).toBe(false); + + expect( + validateClawManifest({ + ...fixture, + agent: { ...fixture.agent, identity: { avatar: "avatars/analyst.png" } }, + workspace: { + ...fixture.workspace, + files: [ + ...fixture.workspace.files, + { source: "workspace/avatars/analyst.png", path: "avatars/analyst.png" }, + ], + }, + }).ok, + ).toBe(true); + + expect( + validateClawManifest({ + ...fixture, + agent: { ...fixture.agent, identity: { avatar: "https://example.test/avatar.png" } }, + }).ok, + ).toBe(false); + + expect( + validateClawManifest({ + ...fixture, + agent: { ...fixture.agent, identity: { avatar: "data:image/bmp;base64,AA==" } }, + }).ok, + ).toBe(true); + }); + + it("enforces portable MCP and cron declarations", () => { + const result = validateClawManifest({ + ...fixture, + mcpServers: { + floating: { + command: "npx", + args: ["mcp-server@latest"], + env: { "BAD-KEY": "${BAD_KEY}" }, + toolFilter: { include: ["search", "search"] }, + }, + remote: { + url: "http://example.test/mcp#token", + transport: "streamable-http", + }, + }, + cronJobs: [ + { + id: "brief", + schedule: { cron: "0 8 * * * *", timezone: "UTC" }, + session: "isolated", + message: "Prepare brief.", + delivery: { mode: "none", channel: "last" }, + }, + ], + }); + expect(result.ok).toBe(false); + if (result.ok) return; + expect(result.issues.map((issue) => issue.path)).toEqual( + expect.arrayContaining([ + "$.mcpServers.floating.args", + "$.mcpServers.floating.env.BAD-KEY", + "$.mcpServers.floating.toolFilter.include.1", + "$.mcpServers.remote.url", + "$.cronJobs.0.schedule", + "$.cronJobs.0.delivery", + ]), + ); + }); + + it("rejects any floating package selected by an MCP runner", () => { + expect( + validateClawManifest({ + ...fixture, + mcpServers: { + unsafe: { + command: "npx", + args: ["--package", "safe@1.0.0", "--package", "unsafe@latest", "server"], + }, + }, + }).ok, + ).toBe(false); + + for (const [command, args] of [ + ["npm", ["exec", "--yes", "unsafe@latest"]], + ["npm", ["x", "unsafe@latest"]], + ["bun", ["x", "unsafe@latest"]], + ] as const) { + expect( + validateClawManifest({ + ...fixture, + mcpServers: { unsafe: { command, args: [...args] } }, + }).ok, + ).toBe(false); + } + + expect( + validateClawManifest({ + ...fixture, + mcpServers: { safe: { command: "npm", args: ["exec", "safe@1.0.0"] } }, + }).ok, + ).toBe(true); + + expect( + validateClawManifest({ + ...fixture, + mcpServers: { unsafe: { command: "bun", args: ["run", "server"] } }, + }).ok, + ).toBe(false); + }); + + it("keeps public manifest summaries bounded", () => { + const result = validateClawManifest({ + ...fixture, + agent: { + ...fixture.agent, + name: "n".repeat(500), + description: "d".repeat(5_000), + }, + }); + expect(result.ok).toBe(true); + if (!result.ok) return; + const summary = summarizeClawManifest(result.manifest); + + expect(summary.agent.name).toHaveLength(128); + expect(summary.agent.description).toHaveLength(1_024); + expect(ClawManifestSummarySchema.allows(summary)).toBe(true); + expect( + ClawManifestSummarySchema.allows({ + ...summary, + agent: { ...summary.agent, description: "d".repeat(1_025) }, + }), + ).toBe(false); + }); + + it("does not treat child-process arguments as package-manager selectors", () => { + expect( + validateClawManifest({ + ...fixture, + mcpServers: { + safe: { + command: "npx", + args: ["--package", "safe@1.0.0", "server", "--package", "child-argument"], + }, + }, + }).ok, + ).toBe(true); + expect( + validateClawManifest({ + ...fixture, + mcpServers: { unsafe: { command: "npx", args: ["--", "unsafe@latest"] } }, + }).ok, + ).toBe(false); + }); + + it("rejects padded strict strings, unsupported tool globs, and dangerous env keys", () => { + const result = validateClawManifest({ + ...fixture, + agent: { ...fixture.agent, name: " Financial Analyst" }, + mcpServers: { + local: { + command: "node", + env: { + NODE_OPTIONS: "${NODE_OPTIONS}", + LD_PRELOAD: "${LD_PRELOAD}", + }, + toolFilter: { include: ["issue?", "issue[0-9]"] }, + }, + }, + }); + expect(result.ok).toBe(false); + if (result.ok) return; + expect(result.issues.map((issue) => issue.path)).toEqual( + expect.arrayContaining([ + "$.agent.name", + "$.mcpServers.local.env.NODE_OPTIONS", + "$.mcpServers.local.env.LD_PRELOAD", + "$.mcpServers.local.toolFilter.include.0", + "$.mcpServers.local.toolFilter.include.1", + ]), + ); + }); + + it("requires an explicit timezone and rejects host-relative cron sessions", () => { + expect( + validateClawManifest({ + ...fixture, + cronJobs: [ + { + id: "brief", + schedule: { cron: "0 8 * * *" }, + session: "isolated", + message: "Prepare brief.", + }, + ], + }).ok, + ).toBe(false); + expect( + validateClawManifest({ + ...fixture, + cronJobs: [ + { + id: "brief", + schedule: { cron: "0 8 * * *", timezone: "UTC" }, + session: "current", + message: "Prepare brief.", + }, + ], + }).ok, + ).toBe(false); + }); +}); diff --git a/packages/schema/src/claws.ts b/packages/schema/src/claws.ts new file mode 100644 index 0000000000..214bea9fa1 --- /dev/null +++ b/packages/schema/src/claws.ts @@ -0,0 +1,884 @@ +import { ArkErrors, type inferred, type } from "arktype"; +import { Cron } from "croner"; + +export const CLAW_SCHEMA_VERSION = 1 as const; +export const CLAW_SUMMARY_AGENT_NAME_MAX_CHARS = 128; +export const CLAW_SUMMARY_AGENT_DESCRIPTION_MAX_CHARS = 1_024; +export const CLAW_BOOTSTRAP_FILE_NAMES = [ + "AGENTS.md", + "SOUL.md", + "IDENTITY.md", + "TOOLS.md", + "HEARTBEAT.md", +] as const; + +const StringArraySchema = type("string[]"); +const WorkspaceSourceSchema = type({ "+": "reject", source: "string" }); +const ToolFilterSchema = type({ + "+": "reject", + include: StringArraySchema.optional(), + exclude: StringArraySchema.optional(), +}); +const StdioMcpServerSchema = type({ + "+": "reject", + command: "string", + transport: '"stdio"?', + args: StringArraySchema.optional(), + env: type({ "[string]": "string" }).optional(), + toolFilter: ToolFilterSchema.optional(), + timeout: "number?", + connectTimeout: "number?", +}); +const RemoteMcpServerSchema = type({ + "+": "reject", + url: "string", + transport: '"sse"|"streamable-http"', + auth: '"oauth"?', + toolFilter: ToolFilterSchema.optional(), + timeout: "number?", + connectTimeout: "number?", +}); + +export const ClawManifestSchema = type({ + "+": "reject", + schemaVersion: "1", + agent: { + "+": "reject", + id: "string", + name: "string?", + description: "string?", + identity: type({ + "+": "reject", + name: "string?", + theme: "string?", + emoji: "string?", + avatar: "string?", + }).optional(), + groupChat: type({ + "+": "reject", + mentionPatterns: StringArraySchema.optional(), + }).optional(), + sandbox: type({ + "+": "reject", + mode: '"off"|"non-main"|"all"?', + scope: '"session"|"agent"|"shared"?', + workspaceAccess: '"none"|"ro"|"rw"?', + }).optional(), + tools: type({ + "+": "reject", + profile: "string?", + allow: StringArraySchema.optional(), + alsoAllow: StringArraySchema.optional(), + deny: StringArraySchema.optional(), + fs: type({ + "+": "reject", + workspaceOnly: "boolean?", + }).optional(), + }).optional(), + memorySearch: type({ + "+": "reject", + enabled: "boolean?", + rememberAcrossConversations: "boolean?", + sources: type("('memory' | 'sessions')[]").optional(), + }).optional(), + heartbeat: type({ + "+": "reject", + every: "string?", + activeHours: type({ + "+": "reject", + start: "string?", + end: "string?", + timezone: "string?", + }).optional(), + lightContext: "boolean?", + isolatedSession: "boolean?", + skipWhenBusy: "boolean?", + timeoutSeconds: "number?", + }).optional(), + humanDelay: type({ + "+": "reject", + mode: '"off"|"natural"|"custom"?', + minMs: "number?", + maxMs: "number?", + }).optional(), + }, + workspace: type({ + "+": "reject", + bootstrapFiles: type({ + "+": "reject", + "AGENTS.md": WorkspaceSourceSchema.optional(), + "SOUL.md": WorkspaceSourceSchema.optional(), + "IDENTITY.md": WorkspaceSourceSchema.optional(), + "TOOLS.md": WorkspaceSourceSchema.optional(), + "HEARTBEAT.md": WorkspaceSourceSchema.optional(), + }).optional(), + files: type({ "+": "reject", source: "string", path: "string" }).array().optional(), + }).optional(), + packages: type({ + "+": "reject", + kind: '"skill"|"plugin"', + source: '"clawhub"', + ref: "string", + version: "string", + }) + .array() + .optional(), + mcpServers: type({ + "[string]": StdioMcpServerSchema.or(RemoteMcpServerSchema), + }).optional(), + cronJobs: type({ + "+": "reject", + id: "string", + name: "string?", + schedule: { "+": "reject", cron: "string", timezone: "string" }, + session: '"main"|"isolated"', + message: "string", + delivery: type({ + "+": "reject", + mode: '"none"|"announce"', + channel: '"last"?', + }).optional(), + }) + .array() + .optional(), +}); +export type ClawManifest = (typeof ClawManifestSchema)[inferred]; + +const ClawSummaryAgentNameSchema = type("string").narrow( + (value) => Array.from(value).length <= CLAW_SUMMARY_AGENT_NAME_MAX_CHARS, +); +const ClawSummaryAgentDescriptionSchema = type("string").narrow( + (value) => Array.from(value).length <= CLAW_SUMMARY_AGENT_DESCRIPTION_MAX_CHARS, +); + +export const ClawManifestSummarySchema = type({ + "+": "reject", + schemaVersion: "1", + agent: { + "+": "reject", + id: "string", + name: ClawSummaryAgentNameSchema.optional(), + description: ClawSummaryAgentDescriptionSchema.optional(), + }, + workspace: { + "+": "reject", + bootstrapFiles: "string[]", + fileCount: "number", + }, + packages: { + "+": "reject", + skillCount: "number", + pluginCount: "number", + }, + mcpServerCount: "number", + cronJobCount: "number", +}); +export type ClawManifestSummary = (typeof ClawManifestSummarySchema)[inferred]; + +export type ClawManifestValidationIssue = { path: string; message: string }; + +const AGENT_ID_PATTERN = /^[a-z][a-z0-9_-]{0,63}$/; +const EXACT_VERSION_PATTERN = + /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/; +const ENV_REFERENCE_PATTERN = /^\$\{[A-Z_][A-Z0-9_]*\}$/; +const PACKAGE_NAME_PATTERN = /^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/; +const WINDOWS_INVALID_PATH_CHARS = /[<>:"|?*]/; +const WINDOWS_RESERVED_PATH_SEGMENT = /^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\..*)?$/i; +const AVATAR_MAX_BYTES = 2 * 1024 * 1024; +const AVATAR_MAX_DATA_URL_CHARS = 2_796_230; +const AVATAR_DATA_URL_PATTERN = /^data:image\/[^,]*,/i; +const AVATAR_EXTENSION_PATTERN = /\.(?:png|jpe?g|gif|webp|svg)$/i; +const BASE64_PAYLOAD_PATTERN = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/; +const PORTABLE_ENV_KEY_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/; +// Snapshot of OpenClaw's host-wide blocked process environment policy for v1 conformance. +const BLOCKED_PROCESS_ENV_KEYS = new Set([ + "NODE_OPTIONS", + "NODE_PATH", + "NODE_REDIRECT_WARNINGS", + "NODE_REPL_EXTERNAL_MODULE", + "NODE_REPL_HISTORY", + "NODE_V8_COVERAGE", + "PYTHONHOME", + "PYTHONPATH", + "PERL5LIB", + "PERL5OPT", + "RUBYLIB", + "RUBYOPT", + "BASHOPTS", + "BASH_ENV", + "ENV", + "KSH_ENV", + "BROWSER", + "GIT_ALLOW_PROTOCOL", + "GIT_EDITOR", + "GIT_EXTERNAL_DIFF", + "GIT_DIR", + "GIT_WORK_TREE", + "GIT_COMMON_DIR", + "GIT_EXEC_PATH", + "GIT_INDEX_FILE", + "GIT_OBJECT_DIRECTORY", + "GIT_ALTERNATE_OBJECT_DIRECTORIES", + "GIT_NAMESPACE", + "GIT_PROTOCOL_FROM_USER", + "GIT_SEQUENCE_EDITOR", + "GIT_TEMPLATE_DIR", + "GIT_SSL_NO_VERIFY", + "GIT_SSL_CAINFO", + "GIT_SSL_CAPATH", + "CC", + "CXX", + "CARGO_BUILD_RUSTC", + "CARGO_BUILD_RUSTC_WRAPPER", + "CARGO_BUILD_RUSTC_WORKSPACE_WRAPPER", + "CARGO_BUILD_RUSTDOC", + "RUSTC", + "RUSTC_WRAPPER", + "RUSTC_WORKSPACE_WRAPPER", + "RUSTDOC", + "CMAKE_C_COMPILER", + "CMAKE_CXX_COMPILER", + "SHELL", + "SHELLOPTS", + "PS4", + "GCONV_PATH", + "IFS", + "SSLKEYLOGFILE", + "JAVA_OPTS", + "JAVA_TOOL_OPTIONS", + "_JAVA_OPTIONS", + "JDK_JAVA_OPTIONS", + "PYTHONBREAKPOINT", + "DOTNET_STARTUP_HOOKS", + "DOTNET_ADDITIONAL_DEPS", + "FPATH", + "GLIBC_TUNABLES", + "MAVEN_OPTS", + "MAKE", + "MAKEFLAGS", + "MFLAGS", + "SBT_OPTS", + "GRADLE_OPTS", + "ANT_OPTS", + "HGRCPATH", + "HGEDITOR", + "HGMERGE", + "EXINIT", + "VIMINIT", + "MYVIMRC", + "GVIMINIT", + "LUA_INIT", + "LUA_INIT_5_1", + "LUA_INIT_5_2", + "LUA_INIT_5_3", + "LUA_INIT_5_4", + "EMACSLOADPATH", + "RUBYSHELL", + "GIT_HOOK_PATH", + "SVN_EDITOR", + "SVN_SSH", + "BZR_EDITOR", + "BZR_SSH", + "BZR_PLUGIN_PATH", + "SUDO_ASKPASS", + "JULIA_EDITOR", + "CONFIG_SITE", + "CONFIG_SHELL", + "CMAKE_TOOLCHAIN_FILE", + "CATALINA_OPTS", + "CORECLR_PROFILER", + "HELM_PLUGINS", + "PACKER_PLUGIN_PATH", + "VAGRANT_VAGRANTFILE", + "ERL_AFLAGS", + "ERL_FLAGS", + "ERL_ZFLAGS", + "ELIXIR_ERL_OPTIONS", + "R_ENVIRON", + "R_PROFILE", + "R_ENVIRON_USER", + "R_PROFILE_USER", + "TCLLIBPATH", + "HOSTALIASES", +]); +const BLOCKED_PROCESS_ENV_PREFIXES = ["DYLD_", "LD_", "BASH_FUNC_"] as const; + +function isStrictNonEmpty(value: string): boolean { + return value.length > 0 && value === value.trim(); +} + +function isBlockedProcessEnvKey(value: string): boolean { + const upper = value.toUpperCase(); + return ( + BLOCKED_PROCESS_ENV_KEYS.has(upper) || + BLOCKED_PROCESS_ENV_PREFIXES.some((prefix) => upper.startsWith(prefix)) + ); +} + +function isSafePackagePath(value: string): boolean { + const normalized = value.replaceAll("\\", "/"); + if ( + !isStrictNonEmpty(normalized) || + normalized.startsWith("/") || + /^[A-Za-z]:\//.test(normalized) + ) { + return false; + } + return normalized + .split("/") + .every( + (segment) => + segment !== "" && + segment !== "." && + segment !== ".." && + !WINDOWS_INVALID_PATH_CHARS.test(segment) && + !Array.from(segment).some((character) => character.charCodeAt(0) <= 0x1f) && + !segment.endsWith(".") && + !segment.endsWith(" ") && + !WINDOWS_RESERVED_PATH_SEGMENT.test(segment), + ); +} + +function portablePathKey(value: string): string { + return value.replaceAll("\\", "/").normalize("NFC").toLowerCase(); +} + +function isPortableAvatar(value: string): boolean { + if (AVATAR_DATA_URL_PATTERN.test(value)) { + if (value.length > AVATAR_MAX_DATA_URL_CHARS) return false; + const comma = value.indexOf(","); + if (comma < 0) return false; + const metadata = value.slice(0, comma); + const payload = value.slice(comma + 1); + try { + const base64 = /;base64(?:;|$)/i.test(metadata); + if (payload.length === 0 || (base64 && !BASE64_PAYLOAD_PATTERN.test(payload))) return false; + const byteLength = base64 + ? (payload.length / 4) * 3 - (payload.endsWith("==") ? 2 : payload.endsWith("=") ? 1 : 0) + : new TextEncoder().encode(decodeURIComponent(payload)).byteLength; + return byteLength > 0 && byteLength <= AVATAR_MAX_BYTES; + } catch { + return false; + } + } + return isSafePackagePath(value) && AVATAR_EXTENSION_PATTERN.test(value); +} + +function conflictsWithWorkspaceTarget(targets: Set, candidate: string): boolean { + for (const target of targets) { + if ( + target === candidate || + target.startsWith(`${candidate}/`) || + candidate.startsWith(`${target}/`) + ) { + return true; + } + } + return false; +} + +function isValidDuration(value: string): boolean { + const trimmed = value.trim().toLowerCase(); + if (!trimmed) return false; + const multipliers: Record = { + ms: 1, + s: 1_000, + m: 60_000, + h: 3_600_000, + d: 86_400_000, + }; + const single = /^(\d+(?:\.\d+)?)(ms|s|m|h|d)?$/.exec(trimmed); + if (single) { + const durationMs = Math.round(Number(single[1]) * multipliers[single[2] ?? "m"]); + return durationMs >= 0 && Number.isSafeInteger(durationMs); + } + let totalMs = 0; + let consumed = 0; + for (const match of trimmed.matchAll(/(\d+(?:\.\d+)?)(ms|s|m|h|d)/g)) { + if (match.index !== consumed) return false; + totalMs += Number(match[1]) * multipliers[match[2]]; + consumed += match[0].length; + } + return ( + consumed === trimmed.length && + consumed > 0 && + Math.round(totalMs) >= 0 && + Number.isSafeInteger(Math.round(totalMs)) + ); +} + +function packageManagerArtifacts(command: string, args: string[]): string[] | undefined { + const executable = command + .split(/[\\/]/) + .at(-1) + ?.replace(/\.(?:cmd|exe)$/i, "") + .toLowerCase(); + let start = 0; + if (executable === "npm") { + if (args[0] !== "exec" && args[0] !== "x") return [""]; + start = 1; + } else if (executable === "bun") { + if (args[0] !== "x") return [""]; + start = 1; + } else if (executable === "pnpm" || executable === "yarn") { + if (args[0] !== "dlx") return [""]; + start = 1; + } else if (executable !== "npx" && executable !== "pnpx" && executable !== "bunx") { + return undefined; + } + const selected: string[] = []; + let positional: string | undefined; + for (let index = start; index < args.length; index += 1) { + const value = args[index]; + if (!value) continue; + if (value === "--") { + positional = args[index + 1] ?? ""; + break; + } + if (value === "-p" || value === "--package") { + selected.push(args[index + 1] ?? ""); + index += 1; + continue; + } + if (value.startsWith("--package=")) { + selected.push(value.slice("--package=".length)); + continue; + } + if (positional === undefined && !value.startsWith("-")) { + positional = value; + break; + } + } + return selected.length > 0 ? selected : [positional ?? ""]; +} + +function truncateSummaryText(value: string | undefined, maxChars: number): string | undefined { + if (!value) return undefined; + return Array.from(value).slice(0, maxChars).join(""); +} + +function isPackageManagerArtifactPinned(command: string, args: string[]): boolean | undefined { + const artifacts = packageManagerArtifacts(command, args); + if (artifacts === undefined) return undefined; + return artifacts.every((artifact) => { + const separator = artifact.lastIndexOf("@"); + const scopedSlash = artifact.startsWith("@") ? artifact.indexOf("/") : -1; + return ( + separator > 0 && + separator > scopedSlash && + EXACT_VERSION_PATTERN.test(artifact.slice(separator + 1)) + ); + }); +} + +function isValidHeartbeatTime(value: string, allow24: boolean): boolean { + const match = /^([01]\d|2[0-4]):([0-5]\d)$/.exec(value); + if (!match) return false; + const hour = Number(match[1]); + const minute = Number(match[2]); + return hour !== 24 || (allow24 && minute === 0); +} + +function isValidTimezone(value: string): boolean { + try { + new Intl.DateTimeFormat("en-US", { timeZone: value }).format(); + return true; + } catch { + return false; + } +} + +function arkIssues(errors: ArkErrors): ClawManifestValidationIssue[] { + return Array.from(errors, (error) => ({ + path: error.path.length > 0 ? `$.${error.path.join(".")}` : "$", + message: error.description ?? "Invalid value.", + })); +} + +function pushNonEmpty( + issues: ClawManifestValidationIssue[], + path: string, + value: string | undefined, +): void { + if (value !== undefined && !isStrictNonEmpty(value)) { + issues.push({ path, message: "Must be non-empty without leading or trailing whitespace." }); + } +} + +function pushNonEmptyArray( + issues: ClawManifestValidationIssue[], + path: string, + values: string[] | undefined, + requireEntry: boolean, +): void { + if (requireEntry && values !== undefined && values.length === 0) { + issues.push({ path, message: "Must contain at least one value." }); + } + for (const [index, value] of (values ?? []).entries()) { + pushNonEmpty(issues, `${path}.${index}`, value); + } +} + +export function validateClawManifest( + value: unknown, +): { ok: true; manifest: ClawManifest } | { ok: false; issues: ClawManifestValidationIssue[] } { + const parsed = ClawManifestSchema(value); + if (parsed instanceof ArkErrors) return { ok: false, issues: arkIssues(parsed) }; + + const issues: ClawManifestValidationIssue[] = []; + if (!AGENT_ID_PATTERN.test(parsed.agent.id)) { + issues.push({ path: "$.agent.id", message: "Invalid portable agent id." }); + } + pushNonEmpty(issues, "$.agent.name", parsed.agent.name); + pushNonEmpty(issues, "$.agent.description", parsed.agent.description); + for (const field of ["name", "theme", "emoji", "avatar"] as const) { + pushNonEmpty(issues, `$.agent.identity.${field}`, parsed.agent.identity?.[field]); + } + pushNonEmptyArray( + issues, + "$.agent.groupChat.mentionPatterns", + parsed.agent.groupChat?.mentionPatterns, + true, + ); + pushNonEmpty(issues, "$.agent.tools.profile", parsed.agent.tools?.profile); + pushNonEmptyArray(issues, "$.agent.tools.allow", parsed.agent.tools?.allow, true); + pushNonEmptyArray(issues, "$.agent.tools.alsoAllow", parsed.agent.tools?.alsoAllow, true); + pushNonEmptyArray(issues, "$.agent.tools.deny", parsed.agent.tools?.deny, true); + if (parsed.agent.tools?.allow && parsed.agent.tools.alsoAllow) { + issues.push({ + path: "$.agent.tools.alsoAllow", + message: "Must not be combined with tools.allow.", + }); + } + if (parsed.agent.memorySearch?.sources?.length === 0) { + issues.push({ + path: "$.agent.memorySearch.sources", + message: "Must contain at least one source.", + }); + } + if ( + parsed.agent.memorySearch?.sources?.includes("sessions") && + parsed.agent.memorySearch.rememberAcrossConversations !== true + ) { + issues.push({ + path: "$.agent.memorySearch.rememberAcrossConversations", + message: "Must be true when memorySearch.sources includes sessions.", + }); + } + const heartbeat = parsed.agent.heartbeat; + pushNonEmpty(issues, "$.agent.heartbeat.every", heartbeat?.every); + pushNonEmpty(issues, "$.agent.heartbeat.activeHours.start", heartbeat?.activeHours?.start); + pushNonEmpty(issues, "$.agent.heartbeat.activeHours.end", heartbeat?.activeHours?.end); + pushNonEmpty(issues, "$.agent.heartbeat.activeHours.timezone", heartbeat?.activeHours?.timezone); + if (heartbeat?.every) { + if (!isValidDuration(heartbeat.every)) { + issues.push({ + path: "$.agent.heartbeat.every", + message: "Must be a valid duration.", + }); + } + } + if ( + heartbeat?.activeHours?.start !== undefined && + !isValidHeartbeatTime(heartbeat.activeHours.start, false) + ) { + issues.push({ + path: "$.agent.heartbeat.activeHours.start", + message: "Must be a valid 24-hour start time.", + }); + } + if ( + heartbeat?.activeHours?.end !== undefined && + !isValidHeartbeatTime(heartbeat.activeHours.end, true) + ) { + issues.push({ + path: "$.agent.heartbeat.activeHours.end", + message: "Must be a valid 24-hour end time.", + }); + } + if ( + heartbeat?.activeHours?.timezone !== undefined && + !isValidTimezone(heartbeat.activeHours.timezone) + ) { + issues.push({ + path: "$.agent.heartbeat.activeHours.timezone", + message: "Must be a valid IANA timezone.", + }); + } + if ( + heartbeat?.timeoutSeconds !== undefined && + (!Number.isInteger(heartbeat.timeoutSeconds) || heartbeat.timeoutSeconds <= 0) + ) { + issues.push({ + path: "$.agent.heartbeat.timeoutSeconds", + message: "Must be a positive integer.", + }); + } + for (const field of ["minMs", "maxMs"] as const) { + const delayValue = parsed.agent.humanDelay?.[field]; + if (delayValue !== undefined && (!Number.isInteger(delayValue) || delayValue < 0)) { + issues.push({ + path: `$.agent.humanDelay.${field}`, + message: "Must be a nonnegative integer.", + }); + } + } + const workspaceTargets = new Set(); + for (const name of CLAW_BOOTSTRAP_FILE_NAMES) { + const source = parsed.workspace?.bootstrapFiles?.[name]?.source; + if (source === undefined) continue; + if (!isSafePackagePath(source)) { + issues.push({ + path: `$.workspace.bootstrapFiles.${name}.source`, + message: "Must be a safe package-relative path.", + }); + } + workspaceTargets.add(portablePathKey(name)); + } + for (const [index, file] of (parsed.workspace?.files ?? []).entries()) { + if (!isSafePackagePath(file.source)) { + issues.push({ + path: `$.workspace.files.${index}.source`, + message: "Must be a safe package-relative path.", + }); + } + if (!isSafePackagePath(file.path)) { + issues.push({ + path: `$.workspace.files.${index}.path`, + message: "Must be a safe package-relative path.", + }); + } + const destinationKey = portablePathKey(file.path); + if (conflictsWithWorkspaceTarget(workspaceTargets, destinationKey)) { + issues.push({ + path: `$.workspace.files.${index}.path`, + message: "Workspace destination is declared more than once.", + }); + } + workspaceTargets.add(destinationKey); + } + const avatar = parsed.agent.identity?.avatar; + if (avatar !== undefined) { + if (!isPortableAvatar(avatar)) { + issues.push({ + path: "$.agent.identity.avatar", + message: "Must be a bounded image data URL or managed workspace-relative image path.", + }); + } else if ( + !AVATAR_DATA_URL_PATTERN.test(avatar) && + !workspaceTargets.has(portablePathKey(avatar)) + ) { + issues.push({ + path: "$.agent.identity.avatar", + message: "Workspace-relative avatar must match a workspace.files destination.", + }); + } + } + + const packageKeys = new Set(); + for (const [index, pkg] of (parsed.packages ?? []).entries()) { + pushNonEmpty(issues, `$.packages.${index}.ref`, pkg.ref); + if (!PACKAGE_NAME_PATTERN.test(pkg.ref)) { + issues.push({ + path: `$.packages.${index}.ref`, + message: "Must be a lowercase ClawHub package name.", + }); + } + if (!EXACT_VERSION_PATTERN.test(pkg.version)) { + issues.push({ + path: `$.packages.${index}.version`, + message: "Must be an exact semantic version.", + }); + } + const key = `${pkg.kind}:${pkg.source}:${pkg.ref.toLowerCase()}`; + if (packageKeys.has(key)) { + issues.push({ + path: `$.packages.${index}`, + message: "Package is declared more than once.", + }); + } + packageKeys.add(key); + } + + for (const [name, server] of Object.entries(parsed.mcpServers ?? {})) { + if (!AGENT_ID_PATTERN.test(name)) { + issues.push({ + path: `$.mcpServers.${name}`, + message: "Invalid MCP server name.", + }); + } + if ("url" in server) { + pushNonEmpty(issues, `$.mcpServers.${name}.url`, server.url); + try { + const url = new URL(server.url); + const loopback = ["localhost", "127.0.0.1", "[::1]"].includes(url.hostname); + if (url.protocol !== "https:" && !(url.protocol === "http:" && loopback)) { + throw new Error("protocol"); + } + if (url.username || url.password || url.hash) { + issues.push({ + path: `$.mcpServers.${name}.url`, + message: "Must not contain embedded credentials or fragments.", + }); + } + } catch { + issues.push({ + path: `$.mcpServers.${name}.url`, + message: "Must use HTTPS, except HTTP on an exact loopback host.", + }); + } + } + if ("command" in server) { + pushNonEmpty(issues, `$.mcpServers.${name}.command`, server.command); + pushNonEmptyArray(issues, `$.mcpServers.${name}.args`, server.args, false); + if (isPackageManagerArtifactPinned(server.command, server.args ?? []) === false) { + issues.push({ + path: `$.mcpServers.${name}.args`, + message: "Package-manager MCP commands must select one exact immutable package version.", + }); + } + } + pushNonEmptyArray( + issues, + `$.mcpServers.${name}.toolFilter.include`, + server.toolFilter?.include, + true, + ); + pushNonEmptyArray( + issues, + `$.mcpServers.${name}.toolFilter.exclude`, + server.toolFilter?.exclude, + true, + ); + for (const field of ["include", "exclude"] as const) { + const seen = new Set(); + for (const [index, entry] of (server.toolFilter?.[field] ?? []).entries()) { + if (entry.includes("?") || entry.includes("[") || entry.includes("]")) { + issues.push({ + path: `$.mcpServers.${name}.toolFilter.${field}.${index}`, + message: "Tool filters support only exact names and * wildcards.", + }); + } + if (seen.has(entry)) { + issues.push({ + path: `$.mcpServers.${name}.toolFilter.${field}.${index}`, + message: "Tool filter entries must be unique.", + }); + } + seen.add(entry); + } + } + if ("env" in server) { + for (const [key, envValue] of Object.entries(server.env ?? {})) { + pushNonEmpty(issues, `$.mcpServers.${name}.env`, key); + if (!PORTABLE_ENV_KEY_PATTERN.test(key)) { + issues.push({ + path: `$.mcpServers.${name}.env.${key}`, + message: "Invalid portable environment key.", + }); + } + if (isBlockedProcessEnvKey(key)) { + issues.push({ + path: `$.mcpServers.${name}.env.${key}`, + message: "Environment key is blocked by the spawned-process safety policy.", + }); + } + if (!ENV_REFERENCE_PATTERN.test(envValue)) { + issues.push({ + path: `$.mcpServers.${name}.env.${key}`, + message: "Must be an unresolved ${ENV_VAR} reference.", + }); + } + } + } + if (server.timeout !== undefined && (!Number.isFinite(server.timeout) || server.timeout <= 0)) { + issues.push({ + path: `$.mcpServers.${name}.timeout`, + message: "Must be positive.", + }); + } + if ( + server.connectTimeout !== undefined && + (!Number.isFinite(server.connectTimeout) || server.connectTimeout <= 0) + ) { + issues.push({ + path: `$.mcpServers.${name}.connectTimeout`, + message: "Must be positive.", + }); + } + } + + const cronIds = new Set(); + for (const [index, job] of (parsed.cronJobs ?? []).entries()) { + if (!AGENT_ID_PATTERN.test(job.id)) { + issues.push({ + path: `$.cronJobs.${index}.id`, + message: "Invalid cron job id.", + }); + } + pushNonEmpty(issues, `$.cronJobs.${index}.name`, job.name); + pushNonEmpty(issues, `$.cronJobs.${index}.schedule.cron`, job.schedule.cron); + pushNonEmpty(issues, `$.cronJobs.${index}.schedule.timezone`, job.schedule.timezone); + pushNonEmpty(issues, `$.cronJobs.${index}.message`, job.message); + try { + if (job.schedule.cron.trim().split(/\s+/).length !== 5) throw new Error("fields"); + const cron = new Cron(job.schedule.cron.trim(), { + timezone: job.schedule.timezone.trim(), + catch: false, + }); + if (!cron.nextRun(new Date())) throw new Error("No future run"); + } catch { + issues.push({ + path: `$.cronJobs.${index}.schedule`, + message: "Must contain a valid cron expression and timezone.", + }); + } + if ( + (job.delivery?.mode === "none" && job.delivery.channel !== undefined) || + (job.delivery?.mode === "announce" && job.delivery.channel !== "last") + ) { + issues.push({ + path: `$.cronJobs.${index}.delivery`, + message: 'Must be { mode: "none" } or { mode: "announce", channel: "last" }.', + }); + } + if (cronIds.has(job.id)) { + issues.push({ + path: `$.cronJobs.${index}.id`, + message: "Cron job id is declared more than once.", + }); + } + cronIds.add(job.id); + } + + return issues.length > 0 ? { ok: false, issues } : { ok: true, manifest: parsed }; +} + +export function summarizeClawManifest(manifest: ClawManifest): ClawManifestSummary { + const packages = manifest.packages ?? []; + const agentName = truncateSummaryText(manifest.agent.name, CLAW_SUMMARY_AGENT_NAME_MAX_CHARS); + const agentDescription = truncateSummaryText( + manifest.agent.description, + CLAW_SUMMARY_AGENT_DESCRIPTION_MAX_CHARS, + ); + return { + schemaVersion: CLAW_SCHEMA_VERSION, + agent: { + id: manifest.agent.id, + ...(agentName ? { name: agentName } : {}), + ...(agentDescription ? { description: agentDescription } : {}), + }, + workspace: { + bootstrapFiles: CLAW_BOOTSTRAP_FILE_NAMES.filter( + (name) => manifest.workspace?.bootstrapFiles?.[name] !== undefined, + ), + fileCount: manifest.workspace?.files?.length ?? 0, + }, + packages: { + skillCount: packages.filter((pkg) => pkg.kind === "skill").length, + pluginCount: packages.filter((pkg) => pkg.kind === "plugin").length, + }, + mcpServerCount: Object.keys(manifest.mcpServers ?? {}).length, + cronJobCount: manifest.cronJobs?.length ?? 0, + }; +} diff --git a/packages/schema/src/index.ts b/packages/schema/src/index.ts index 099df5383b..d03a08a7d4 100644 --- a/packages/schema/src/index.ts +++ b/packages/schema/src/index.ts @@ -1,5 +1,6 @@ export type { ArkValidator } from "./ark.js"; export { formatArkErrors, parseArk } from "./ark.js"; +export * from "./claws.js"; export * from "./catalogFeed.js"; export * from "./catalogMetadata.js"; export * from "./docsLinks.js"; diff --git a/packages/schema/src/packages.ts b/packages/schema/src/packages.ts index adc8960db9..13e838df05 100644 --- a/packages/schema/src/packages.ts +++ b/packages/schema/src/packages.ts @@ -26,9 +26,13 @@ export function getPackageScopeOwnerMismatch(name: string, ownerHandle: string | }; } -export const PackageFamilySchema = type('"skill"|"code-plugin"|"bundle-plugin"'); +export const PackageFamilySchema = type('"skill"|"code-plugin"|"bundle-plugin"|"claw"'); export type PackageFamily = (typeof PackageFamilySchema)[inferred]; +// Publication stays narrower until a family has a complete validation path. +export const PackagePublishFamilySchema = type('"skill"|"code-plugin"|"bundle-plugin"'); +export type PackagePublishFamily = (typeof PackagePublishFamilySchema)[inferred]; + export const PackageChannelSchema = type('"official"|"community"|"private"'); export type PackageChannel = (typeof PackageChannelSchema)[inferred]; @@ -347,7 +351,7 @@ const PackagePublishMetadataFields = { name: "string", displayName: "string?", ownerHandle: "string?", - family: PackageFamilySchema, + family: PackagePublishFamilySchema, version: "string", changelog: "string", manualOverrideReason: "string?", diff --git a/specs/claws.md b/specs/claws.md new file mode 100644 index 0000000000..530c79aa05 --- /dev/null +++ b/specs/claws.md @@ -0,0 +1,43 @@ +# Experimental Claw packages + +ClawHub's Claw support implements the registry side of +[OpenClaw RFC #27](https://github.com/openclaw/rfcs/pull/27). A Claw package +describes one complete new agent using the grouped `CLAW.md` schema. ClawHub +owns publication, ownership, discovery, package detail APIs, and hosted feed +export. OpenClaw remains authoritative for local planning, consent, mutation, +provenance, update, and removal. + +Portable agent policy follows the RFC's agent-settings addendum. ClawHub +validates the portable shape of profile selection, tool modifiers, filesystem +restriction, and memory-search settings. The applying OpenClaw version remains +responsible for resolving a profile name through its current built-in registry; +ClawHub does not freeze that evolving registry into its package schema. + +## Experimental contract + +- Backend Claw publication and read surfaces require + `CLAWHUB_EXPERIMENTAL_CLAWS=1`. +- The gate is not user consent and must not bypass validation, moderation, + ownership, or scanner checks. +- Disabled deployments must not accept Claw publication or expose Claws through + Claw-specific discovery surfaces. +- Public Claw schemas and APIs may change while the gate is required. Removing + the gate requires a separate compatibility and migration decision. + +## Staged implementation + +1. Add the shared grouped manifest contract, safe summary, and storage model. +2. Add feature-gated authenticated publication, validation, and authoring docs. +3. Add feature-gated search, detail, and API surfaces. +4. Add hosted feed export and a published-package end-to-end proof through + OpenClaw `claws add --dry-run`. + +The publish schema intentionally remains narrower than the storage family in +the first slice. This prevents existing generic package endpoints from +accepting Claws before their dedicated validation and gate are in place. + +The shared validator follows the RFC's strict v1 contract: strings are not +trimmed into validity, MCP package selectors must resolve exact versions, +process environment keys follow OpenClaw's host-wide safety policy, and tool +filters accept only exact names plus `*` wildcards. Registry validation must +not accept a declaration that the applying OpenClaw client rejects. diff --git a/src/lib/packageLabels.test.ts b/src/lib/packageLabels.test.ts index 856c96dc55..3454f87ce9 100644 --- a/src/lib/packageLabels.test.ts +++ b/src/lib/packageLabels.test.ts @@ -10,4 +10,8 @@ describe("packageLabels", () => { expect(familyLabel("code-plugin")).toBe("Code Plugin"); expect(familyLabel("bundle-plugin")).toBe("Bundle Plugin"); }); + + it("labels experimental Claw packages", () => { + expect(familyLabel("claw")).toBe("Claw"); + }); }); diff --git a/src/lib/packageLabels.ts b/src/lib/packageLabels.ts index b85467df36..92b75e197c 100644 --- a/src/lib/packageLabels.ts +++ b/src/lib/packageLabels.ts @@ -6,6 +6,8 @@ export function familyLabel(family: PackageFamily) { return "Code Plugin"; case "bundle-plugin": return "Bundle Plugin"; + case "claw": + return "Claw"; default: return "Skill"; } From 54b42e09625f63a2676b9959bb7bda0d5d580e40 Mon Sep 17 00:00:00 2001 From: Gio Della-Libera Date: Wed, 22 Jul 2026 21:19:03 -0700 Subject: [PATCH 2/6] fix(claws): use canonical memory search config --- packages/schema/dist/claws.d.ts | 10 ++++++---- packages/schema/dist/claws.js | 23 +++++++++++++---------- packages/schema/dist/claws.js.map | 2 +- packages/schema/src/claws.test.ts | 14 ++++++++------ packages/schema/src/claws.ts | 23 +++++++++++++---------- 5 files changed, 41 insertions(+), 31 deletions(-) diff --git a/packages/schema/dist/claws.d.ts b/packages/schema/dist/claws.d.ts index ee07a07b0f..7189e1d6b8 100644 --- a/packages/schema/dist/claws.d.ts +++ b/packages/schema/dist/claws.d.ts @@ -32,10 +32,12 @@ export declare const ClawManifestSchema: import("arktype/internal/variants/objec workspaceOnly?: boolean | undefined; } | undefined; } | undefined; - memorySearch?: { - enabled?: boolean | undefined; - rememberAcrossConversations?: boolean | undefined; - sources?: ("memory" | "sessions")[] | undefined; + memory?: { + search?: { + enabled?: boolean | undefined; + rememberAcrossConversations?: boolean | undefined; + sources?: ("memory" | "sessions")[] | undefined; + } | undefined; } | undefined; heartbeat?: { every?: string | undefined; diff --git a/packages/schema/dist/claws.js b/packages/schema/dist/claws.js index 0b890f95c7..18780e41f9 100644 --- a/packages/schema/dist/claws.js +++ b/packages/schema/dist/claws.js @@ -72,11 +72,14 @@ export const ClawManifestSchema = type({ workspaceOnly: "boolean?", }).optional(), }).optional(), - memorySearch: type({ + memory: type({ "+": "reject", - enabled: "boolean?", - rememberAcrossConversations: "boolean?", - sources: type("('memory' | 'sessions')[]").optional(), + search: type({ + "+": "reject", + enabled: "boolean?", + rememberAcrossConversations: "boolean?", + sources: type("('memory' | 'sessions')[]").optional(), + }).optional(), }).optional(), heartbeat: type({ "+": "reject", @@ -507,17 +510,17 @@ export function validateClawManifest(value) { message: "Must not be combined with tools.allow.", }); } - if (parsed.agent.memorySearch?.sources?.length === 0) { + if (parsed.agent.memory?.search?.sources?.length === 0) { issues.push({ - path: "$.agent.memorySearch.sources", + path: "$.agent.memory.search.sources", message: "Must contain at least one source.", }); } - if (parsed.agent.memorySearch?.sources?.includes("sessions") && - parsed.agent.memorySearch.rememberAcrossConversations !== true) { + if (parsed.agent.memory?.search?.sources?.includes("sessions") && + parsed.agent.memory.search.rememberAcrossConversations !== true) { issues.push({ - path: "$.agent.memorySearch.rememberAcrossConversations", - message: "Must be true when memorySearch.sources includes sessions.", + path: "$.agent.memory.search.rememberAcrossConversations", + message: "Must be true when memory.search.sources includes sessions.", }); } const heartbeat = parsed.agent.heartbeat; diff --git a/packages/schema/dist/claws.js.map b/packages/schema/dist/claws.js.map index d248dd7f92..cdfb37311a 100644 --- a/packages/schema/dist/claws.js.map +++ b/packages/schema/dist/claws.js.map @@ -1 +1 @@ -{"version":3,"file":"claws.js","sourceRoot":"","sources":["../src/claws.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"claws.js","sourceRoot":"","sources":["../src/claws.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/schema/src/claws.test.ts b/packages/schema/src/claws.test.ts index 7d807b74d6..e680337de8 100644 --- a/packages/schema/src/claws.test.ts +++ b/packages/schema/src/claws.test.ts @@ -82,10 +82,12 @@ describe("Claw manifest contract", () => { deny: ["exec"], fs: { workspaceOnly: true }, }, - memorySearch: { - enabled: true, - rememberAcrossConversations: true, - sources: ["memory", "sessions"], + memory: { + search: { + enabled: true, + rememberAcrossConversations: true, + sources: ["memory", "sessions"], + }, }, }, }).ok, @@ -106,7 +108,7 @@ describe("Claw manifest contract", () => { ...fixture, agent: { ...fixture.agent, - memorySearch: { sources: ["sessions"] }, + memory: { search: { sources: ["sessions"] } }, }, }); expect(implicitSessionMemory.ok).toBe(false); @@ -115,7 +117,7 @@ describe("Claw manifest contract", () => { ...fixture, agent: { ...fixture.agent, - memorySearch: { sources: [] }, + memory: { search: { sources: [] } }, }, }); expect(emptySources.ok).toBe(false); diff --git a/packages/schema/src/claws.ts b/packages/schema/src/claws.ts index 214bea9fa1..18e5070bb6 100644 --- a/packages/schema/src/claws.ts +++ b/packages/schema/src/claws.ts @@ -75,11 +75,14 @@ export const ClawManifestSchema = type({ workspaceOnly: "boolean?", }).optional(), }).optional(), - memorySearch: type({ + memory: type({ "+": "reject", - enabled: "boolean?", - rememberAcrossConversations: "boolean?", - sources: type("('memory' | 'sessions')[]").optional(), + search: type({ + "+": "reject", + enabled: "boolean?", + rememberAcrossConversations: "boolean?", + sources: type("('memory' | 'sessions')[]").optional(), + }).optional(), }).optional(), heartbeat: type({ "+": "reject", @@ -550,19 +553,19 @@ export function validateClawManifest( message: "Must not be combined with tools.allow.", }); } - if (parsed.agent.memorySearch?.sources?.length === 0) { + if (parsed.agent.memory?.search?.sources?.length === 0) { issues.push({ - path: "$.agent.memorySearch.sources", + path: "$.agent.memory.search.sources", message: "Must contain at least one source.", }); } if ( - parsed.agent.memorySearch?.sources?.includes("sessions") && - parsed.agent.memorySearch.rememberAcrossConversations !== true + parsed.agent.memory?.search?.sources?.includes("sessions") && + parsed.agent.memory.search.rememberAcrossConversations !== true ) { issues.push({ - path: "$.agent.memorySearch.rememberAcrossConversations", - message: "Must be true when memorySearch.sources includes sessions.", + path: "$.agent.memory.search.rememberAcrossConversations", + message: "Must be true when memory.search.sources includes sessions.", }); } const heartbeat = parsed.agent.heartbeat; From 6b9a1d008380f54db5aebb0740f7ab232e52a40d Mon Sep 17 00:00:00 2001 From: Gio Della-Libera Date: Thu, 23 Jul 2026 14:18:03 -0700 Subject: [PATCH 3/6] feat(claws): separate portable and harness profiles --- packages/schema/dist/claws.d.ts | 44 +------ packages/schema/dist/claws.js | 173 +-------------------------- packages/schema/dist/claws.js.map | 2 +- packages/schema/dist/index.js.map | 1 + packages/schema/src/claws.test.ts | 156 ++++++++----------------- packages/schema/src/claws.ts | 187 +----------------------------- specs/claws.md | 15 ++- 7 files changed, 77 insertions(+), 501 deletions(-) create mode 100644 packages/schema/dist/index.js.map diff --git a/packages/schema/dist/claws.d.ts b/packages/schema/dist/claws.d.ts index 7189e1d6b8..1a121d1a4e 100644 --- a/packages/schema/dist/claws.d.ts +++ b/packages/schema/dist/claws.d.ts @@ -15,48 +15,10 @@ export declare const ClawManifestSchema: import("arktype/internal/variants/objec emoji?: string | undefined; avatar?: string | undefined; } | undefined; - groupChat?: { - mentionPatterns?: string[] | undefined; - } | undefined; - sandbox?: { - mode?: "all" | "non-main" | "off" | undefined; - scope?: "agent" | "session" | "shared" | undefined; - workspaceAccess?: "none" | "ro" | "rw" | undefined; - } | undefined; - tools?: { - profile?: string | undefined; - allow?: string[] | undefined; - alsoAllow?: string[] | undefined; - deny?: string[] | undefined; - fs?: { - workspaceOnly?: boolean | undefined; - } | undefined; - } | undefined; - memory?: { - search?: { - enabled?: boolean | undefined; - rememberAcrossConversations?: boolean | undefined; - sources?: ("memory" | "sessions")[] | undefined; - } | undefined; - } | undefined; - heartbeat?: { - every?: string | undefined; - activeHours?: { - start?: string | undefined; - end?: string | undefined; - timezone?: string | undefined; - } | undefined; - lightContext?: boolean | undefined; - isolatedSession?: boolean | undefined; - skipWhenBusy?: boolean | undefined; - timeoutSeconds?: number | undefined; - } | undefined; - humanDelay?: { - mode?: "custom" | "natural" | "off" | undefined; - minMs?: number | undefined; - maxMs?: number | undefined; - } | undefined; }; + metadata?: { + [x: string]: string; + } | undefined; workspace?: { bootstrapFiles?: { "AGENTS.md"?: { diff --git a/packages/schema/dist/claws.js b/packages/schema/dist/claws.js index 18780e41f9..c57aef163c 100644 --- a/packages/schema/dist/claws.js +++ b/packages/schema/dist/claws.js @@ -51,57 +51,8 @@ export const ClawManifestSchema = type({ emoji: "string?", avatar: "string?", }).optional(), - groupChat: type({ - "+": "reject", - mentionPatterns: StringArraySchema.optional(), - }).optional(), - sandbox: type({ - "+": "reject", - mode: '"off"|"non-main"|"all"?', - scope: '"session"|"agent"|"shared"?', - workspaceAccess: '"none"|"ro"|"rw"?', - }).optional(), - tools: type({ - "+": "reject", - profile: "string?", - allow: StringArraySchema.optional(), - alsoAllow: StringArraySchema.optional(), - deny: StringArraySchema.optional(), - fs: type({ - "+": "reject", - workspaceOnly: "boolean?", - }).optional(), - }).optional(), - memory: type({ - "+": "reject", - search: type({ - "+": "reject", - enabled: "boolean?", - rememberAcrossConversations: "boolean?", - sources: type("('memory' | 'sessions')[]").optional(), - }).optional(), - }).optional(), - heartbeat: type({ - "+": "reject", - every: "string?", - activeHours: type({ - "+": "reject", - start: "string?", - end: "string?", - timezone: "string?", - }).optional(), - lightContext: "boolean?", - isolatedSession: "boolean?", - skipWhenBusy: "boolean?", - timeoutSeconds: "number?", - }).optional(), - humanDelay: type({ - "+": "reject", - mode: '"off"|"natural"|"custom"?', - minMs: "number?", - maxMs: "number?", - }).optional(), }, + metadata: type({ "[string]": "string" }).optional(), workspace: type({ "+": "reject", bootstrapFiles: type({ @@ -353,35 +304,6 @@ function conflictsWithWorkspaceTarget(targets, candidate) { } return false; } -function isValidDuration(value) { - const trimmed = value.trim().toLowerCase(); - if (!trimmed) - return false; - const multipliers = { - ms: 1, - s: 1_000, - m: 60_000, - h: 3_600_000, - d: 86_400_000, - }; - const single = /^(\d+(?:\.\d+)?)(ms|s|m|h|d)?$/.exec(trimmed); - if (single) { - const durationMs = Math.round(Number(single[1]) * multipliers[single[2] ?? "m"]); - return durationMs >= 0 && Number.isSafeInteger(durationMs); - } - let totalMs = 0; - let consumed = 0; - for (const match of trimmed.matchAll(/(\d+(?:\.\d+)?)(ms|s|m|h|d)/g)) { - if (match.index !== consumed) - return false; - totalMs += Number(match[1]) * multipliers[match[2]]; - consumed += match[0].length; - } - return (consumed === trimmed.length && - consumed > 0 && - Math.round(totalMs) >= 0 && - Number.isSafeInteger(Math.round(totalMs))); -} function packageManagerArtifacts(command, args) { const executable = command .split(/[\\/]/) @@ -450,23 +372,6 @@ function isPackageManagerArtifactPinned(command, args) { EXACT_VERSION_PATTERN.test(artifact.slice(separator + 1))); }); } -function isValidHeartbeatTime(value, allow24) { - const match = /^([01]\d|2[0-4]):([0-5]\d)$/.exec(value); - if (!match) - return false; - const hour = Number(match[1]); - const minute = Number(match[2]); - return hour !== 24 || (allow24 && minute === 0); -} -function isValidTimezone(value) { - try { - new Intl.DateTimeFormat("en-US", { timeZone: value }).format(); - return true; - } - catch { - return false; - } -} function arkIssues(errors) { return Array.from(errors, (error) => ({ path: error.path.length > 0 ? `$.${error.path.join(".")}` : "$", @@ -499,80 +404,14 @@ export function validateClawManifest(value) { for (const field of ["name", "theme", "emoji", "avatar"]) { pushNonEmpty(issues, `$.agent.identity.${field}`, parsed.agent.identity?.[field]); } - pushNonEmptyArray(issues, "$.agent.groupChat.mentionPatterns", parsed.agent.groupChat?.mentionPatterns, true); - pushNonEmpty(issues, "$.agent.tools.profile", parsed.agent.tools?.profile); - pushNonEmptyArray(issues, "$.agent.tools.allow", parsed.agent.tools?.allow, true); - pushNonEmptyArray(issues, "$.agent.tools.alsoAllow", parsed.agent.tools?.alsoAllow, true); - pushNonEmptyArray(issues, "$.agent.tools.deny", parsed.agent.tools?.deny, true); - if (parsed.agent.tools?.allow && parsed.agent.tools.alsoAllow) { - issues.push({ - path: "$.agent.tools.alsoAllow", - message: "Must not be combined with tools.allow.", - }); - } - if (parsed.agent.memory?.search?.sources?.length === 0) { + const openClawProfilePath = parsed.metadata?.["openclaw.config"]; + if (openClawProfilePath !== undefined && + (!isSafePackagePath(openClawProfilePath) || !/\.ya?ml$/i.test(openClawProfilePath))) { issues.push({ - path: "$.agent.memory.search.sources", - message: "Must contain at least one source.", + path: "$.metadata.openclaw.config", + message: "Must reference a safe package-relative .yml or .yaml file.", }); } - if (parsed.agent.memory?.search?.sources?.includes("sessions") && - parsed.agent.memory.search.rememberAcrossConversations !== true) { - issues.push({ - path: "$.agent.memory.search.rememberAcrossConversations", - message: "Must be true when memory.search.sources includes sessions.", - }); - } - const heartbeat = parsed.agent.heartbeat; - pushNonEmpty(issues, "$.agent.heartbeat.every", heartbeat?.every); - pushNonEmpty(issues, "$.agent.heartbeat.activeHours.start", heartbeat?.activeHours?.start); - pushNonEmpty(issues, "$.agent.heartbeat.activeHours.end", heartbeat?.activeHours?.end); - pushNonEmpty(issues, "$.agent.heartbeat.activeHours.timezone", heartbeat?.activeHours?.timezone); - if (heartbeat?.every) { - if (!isValidDuration(heartbeat.every)) { - issues.push({ - path: "$.agent.heartbeat.every", - message: "Must be a valid duration.", - }); - } - } - if (heartbeat?.activeHours?.start !== undefined && - !isValidHeartbeatTime(heartbeat.activeHours.start, false)) { - issues.push({ - path: "$.agent.heartbeat.activeHours.start", - message: "Must be a valid 24-hour start time.", - }); - } - if (heartbeat?.activeHours?.end !== undefined && - !isValidHeartbeatTime(heartbeat.activeHours.end, true)) { - issues.push({ - path: "$.agent.heartbeat.activeHours.end", - message: "Must be a valid 24-hour end time.", - }); - } - if (heartbeat?.activeHours?.timezone !== undefined && - !isValidTimezone(heartbeat.activeHours.timezone)) { - issues.push({ - path: "$.agent.heartbeat.activeHours.timezone", - message: "Must be a valid IANA timezone.", - }); - } - if (heartbeat?.timeoutSeconds !== undefined && - (!Number.isInteger(heartbeat.timeoutSeconds) || heartbeat.timeoutSeconds <= 0)) { - issues.push({ - path: "$.agent.heartbeat.timeoutSeconds", - message: "Must be a positive integer.", - }); - } - for (const field of ["minMs", "maxMs"]) { - const delayValue = parsed.agent.humanDelay?.[field]; - if (delayValue !== undefined && (!Number.isInteger(delayValue) || delayValue < 0)) { - issues.push({ - path: `$.agent.humanDelay.${field}`, - message: "Must be a nonnegative integer.", - }); - } - } const workspaceTargets = new Set(); for (const name of CLAW_BOOTSTRAP_FILE_NAMES) { const source = parsed.workspace?.bootstrapFiles?.[name]?.source; diff --git a/packages/schema/dist/claws.js.map b/packages/schema/dist/claws.js.map index cdfb37311a..42d1400535 100644 --- a/packages/schema/dist/claws.js.map +++ b/packages/schema/dist/claws.js.map @@ -1 +1 @@ -{"version":3,"file":"claws.js","sourceRoot":"","sources":["../src/claws.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"claws.js","sourceRoot":"","sources":["../src/claws.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/schema/dist/index.js.map b/packages/schema/dist/index.js.map new file mode 100644 index 0000000000..b5e68b2e75 --- /dev/null +++ b/packages/schema/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACrD,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzD,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"} \ No newline at end of file diff --git a/packages/schema/src/claws.test.ts b/packages/schema/src/claws.test.ts index e680337de8..70d44faa16 100644 --- a/packages/schema/src/claws.test.ts +++ b/packages/schema/src/claws.test.ts @@ -70,58 +70,63 @@ describe("Claw manifest contract", () => { }); }); - it("accepts portable agent policy while deferring profile resolution to the applying harness", () => { + it("accepts opaque string metadata for namespaced harness profile pointers", () => { + const result = validateClawManifest({ + ...fixture, + metadata: { + "openclaw.config": "profiles/openclaw.yml", + "example.hint": "opaque-value", + }, + }); + + expect(result.ok).toBe(true); + if (!result.ok) return; + expect(result.manifest.metadata).toEqual({ + "openclaw.config": "profiles/openclaw.yml", + "example.hint": "opaque-value", + }); + }); + + it("rejects non-string metadata values and harness policy embedded in the portable agent", () => { + expect( + validateClawManifest({ + ...fixture, + metadata: { "openclaw.config": { path: "profiles/openclaw.yml" } }, + }).ok, + ).toBe(false); + expect( validateClawManifest({ ...fixture, agent: { ...fixture.agent, - tools: { - profile: "future-built-in", - alsoAllow: ["cron"], - deny: ["exec"], - fs: { workspaceOnly: true }, - }, - memory: { - search: { - enabled: true, - rememberAcrossConversations: true, - sources: ["memory", "sessions"], - }, - }, + tools: { profile: "coding" }, }, }).ok, - ).toBe(true); - }); + ).toBe(false); - it("rejects conflicting or unsafe portable agent policy", () => { - const conflictingTools = validateClawManifest({ - ...fixture, - agent: { - ...fixture.agent, - tools: { profile: "coding", allow: ["read"], alsoAllow: ["cron"] }, - }, - }); - expect(conflictingTools.ok).toBe(false); + expect( + validateClawManifest({ + ...fixture, + agent: { + ...fixture.agent, + memory: { search: { enabled: true } }, + }, + }).ok, + ).toBe(false); + }); - const implicitSessionMemory = validateClawManifest({ - ...fixture, - agent: { - ...fixture.agent, - memory: { search: { sources: ["sessions"] } }, - }, - }); - expect(implicitSessionMemory.ok).toBe(false); + it.each(["../openclaw.yml", "/profiles/openclaw.yml", "profiles/openclaw.json"])( + "rejects unsafe or non-YAML OpenClaw profile pointer %s", + (profilePath) => { + const result = validateClawManifest({ + ...fixture, + metadata: { "openclaw.config": profilePath }, + }); - const emptySources = validateClawManifest({ - ...fixture, - agent: { - ...fixture.agent, - memory: { search: { sources: [] } }, - }, - }); - expect(emptySources.ok).toBe(false); - }); + expect(result.ok).toBe(false); + }, + ); it("fails closed on unknown fields", () => { expect(validateClawManifest({ ...fixture, model: "gpt-5" }).ok).toBe(false); @@ -234,64 +239,9 @@ describe("Claw manifest contract", () => { expect(result.issues.map((issue) => issue.path)).toContain("$.mcpServers.unsafe"); }); - it("rejects invalid portable agent timing settings", () => { - const result = validateClawManifest({ - ...fixture, - agent: { - ...fixture.agent, - heartbeat: { - every: "tomorrow", - activeHours: { start: "24:00", end: "24:01" }, - timeoutSeconds: -1.5, - }, - humanDelay: { mode: "custom", minMs: -1, maxMs: 1.5 }, - }, - }); - expect(result.ok).toBe(false); - if (result.ok) return; - expect(result.issues.map((issue) => issue.path)).toEqual( - expect.arrayContaining([ - "$.agent.heartbeat.every", - "$.agent.heartbeat.activeHours.start", - "$.agent.heartbeat.activeHours.end", - "$.agent.heartbeat.timeoutSeconds", - "$.agent.humanDelay.minMs", - "$.agent.humanDelay.maxMs", - ]), - ); - }); - - it("validates active hours without imposing an unused custom-delay ordering", () => { + it("rejects infinite MCP timeouts", () => { const result = validateClawManifest({ ...fixture, - agent: { - ...fixture.agent, - heartbeat: { activeHours: { start: "24:99" } }, - humanDelay: { mode: "custom", minMs: 2000, maxMs: 1000 }, - }, - }); - expect(result.ok).toBe(false); - if (result.ok) return; - expect(result.issues).toEqual( - expect.arrayContaining([ - { - path: "$.agent.heartbeat.activeHours.start", - message: "Must be a valid 24-hour start time.", - }, - ]), - ); - }); - - it("accepts zero heartbeat intervals but rejects invalid timezones and infinite MCP timeouts", () => { - const result = validateClawManifest({ - ...fixture, - agent: { - ...fixture.agent, - heartbeat: { - every: "0m", - activeHours: { timezone: "Not/AZone" }, - }, - }, mcpServers: { local: { command: "server", timeout: Number.POSITIVE_INFINITY }, remote: { @@ -304,22 +254,16 @@ describe("Claw manifest contract", () => { expect(result.ok).toBe(false); if (result.ok) return; expect(result.issues.map((issue) => issue.path)).toEqual( - expect.arrayContaining([ - "$.agent.heartbeat.activeHours.timezone", - "$.mcpServers.local.timeout", - "$.mcpServers.remote.connectTimeout", - ]), + expect.arrayContaining(["$.mcpServers.local.timeout", "$.mcpServers.remote.connectTimeout"]), ); }); - it("rejects empty portable names and required selector lists", () => { + it("rejects empty portable names and MCP selector lists", () => { const result = validateClawManifest({ ...fixture, agent: { ...fixture.agent, identity: { name: " " }, - groupChat: { mentionPatterns: [] }, - tools: { allow: ["read", " "] }, }, mcpServers: { local: { diff --git a/packages/schema/src/claws.ts b/packages/schema/src/claws.ts index 18e5070bb6..9d66441051 100644 --- a/packages/schema/src/claws.ts +++ b/packages/schema/src/claws.ts @@ -54,57 +54,8 @@ export const ClawManifestSchema = type({ emoji: "string?", avatar: "string?", }).optional(), - groupChat: type({ - "+": "reject", - mentionPatterns: StringArraySchema.optional(), - }).optional(), - sandbox: type({ - "+": "reject", - mode: '"off"|"non-main"|"all"?', - scope: '"session"|"agent"|"shared"?', - workspaceAccess: '"none"|"ro"|"rw"?', - }).optional(), - tools: type({ - "+": "reject", - profile: "string?", - allow: StringArraySchema.optional(), - alsoAllow: StringArraySchema.optional(), - deny: StringArraySchema.optional(), - fs: type({ - "+": "reject", - workspaceOnly: "boolean?", - }).optional(), - }).optional(), - memory: type({ - "+": "reject", - search: type({ - "+": "reject", - enabled: "boolean?", - rememberAcrossConversations: "boolean?", - sources: type("('memory' | 'sessions')[]").optional(), - }).optional(), - }).optional(), - heartbeat: type({ - "+": "reject", - every: "string?", - activeHours: type({ - "+": "reject", - start: "string?", - end: "string?", - timezone: "string?", - }).optional(), - lightContext: "boolean?", - isolatedSession: "boolean?", - skipWhenBusy: "boolean?", - timeoutSeconds: "number?", - }).optional(), - humanDelay: type({ - "+": "reject", - mode: '"off"|"natural"|"custom"?', - minMs: "number?", - maxMs: "number?", - }).optional(), }, + metadata: type({ "[string]": "string" }).optional(), workspace: type({ "+": "reject", bootstrapFiles: type({ @@ -380,36 +331,6 @@ function conflictsWithWorkspaceTarget(targets: Set, candidate: string): return false; } -function isValidDuration(value: string): boolean { - const trimmed = value.trim().toLowerCase(); - if (!trimmed) return false; - const multipliers: Record = { - ms: 1, - s: 1_000, - m: 60_000, - h: 3_600_000, - d: 86_400_000, - }; - const single = /^(\d+(?:\.\d+)?)(ms|s|m|h|d)?$/.exec(trimmed); - if (single) { - const durationMs = Math.round(Number(single[1]) * multipliers[single[2] ?? "m"]); - return durationMs >= 0 && Number.isSafeInteger(durationMs); - } - let totalMs = 0; - let consumed = 0; - for (const match of trimmed.matchAll(/(\d+(?:\.\d+)?)(ms|s|m|h|d)/g)) { - if (match.index !== consumed) return false; - totalMs += Number(match[1]) * multipliers[match[2]]; - consumed += match[0].length; - } - return ( - consumed === trimmed.length && - consumed > 0 && - Math.round(totalMs) >= 0 && - Number.isSafeInteger(Math.round(totalMs)) - ); -} - function packageManagerArtifacts(command: string, args: string[]): string[] | undefined { const executable = command .split(/[\\/]/) @@ -474,23 +395,6 @@ function isPackageManagerArtifactPinned(command: string, args: string[]): boolea }); } -function isValidHeartbeatTime(value: string, allow24: boolean): boolean { - const match = /^([01]\d|2[0-4]):([0-5]\d)$/.exec(value); - if (!match) return false; - const hour = Number(match[1]); - const minute = Number(match[2]); - return hour !== 24 || (allow24 && minute === 0); -} - -function isValidTimezone(value: string): boolean { - try { - new Intl.DateTimeFormat("en-US", { timeZone: value }).format(); - return true; - } catch { - return false; - } -} - function arkIssues(errors: ArkErrors): ClawManifestValidationIssue[] { return Array.from(errors, (error) => ({ path: error.path.length > 0 ? `$.${error.path.join(".")}` : "$", @@ -537,95 +441,16 @@ export function validateClawManifest( for (const field of ["name", "theme", "emoji", "avatar"] as const) { pushNonEmpty(issues, `$.agent.identity.${field}`, parsed.agent.identity?.[field]); } - pushNonEmptyArray( - issues, - "$.agent.groupChat.mentionPatterns", - parsed.agent.groupChat?.mentionPatterns, - true, - ); - pushNonEmpty(issues, "$.agent.tools.profile", parsed.agent.tools?.profile); - pushNonEmptyArray(issues, "$.agent.tools.allow", parsed.agent.tools?.allow, true); - pushNonEmptyArray(issues, "$.agent.tools.alsoAllow", parsed.agent.tools?.alsoAllow, true); - pushNonEmptyArray(issues, "$.agent.tools.deny", parsed.agent.tools?.deny, true); - if (parsed.agent.tools?.allow && parsed.agent.tools.alsoAllow) { - issues.push({ - path: "$.agent.tools.alsoAllow", - message: "Must not be combined with tools.allow.", - }); - } - if (parsed.agent.memory?.search?.sources?.length === 0) { - issues.push({ - path: "$.agent.memory.search.sources", - message: "Must contain at least one source.", - }); - } - if ( - parsed.agent.memory?.search?.sources?.includes("sessions") && - parsed.agent.memory.search.rememberAcrossConversations !== true - ) { - issues.push({ - path: "$.agent.memory.search.rememberAcrossConversations", - message: "Must be true when memory.search.sources includes sessions.", - }); - } - const heartbeat = parsed.agent.heartbeat; - pushNonEmpty(issues, "$.agent.heartbeat.every", heartbeat?.every); - pushNonEmpty(issues, "$.agent.heartbeat.activeHours.start", heartbeat?.activeHours?.start); - pushNonEmpty(issues, "$.agent.heartbeat.activeHours.end", heartbeat?.activeHours?.end); - pushNonEmpty(issues, "$.agent.heartbeat.activeHours.timezone", heartbeat?.activeHours?.timezone); - if (heartbeat?.every) { - if (!isValidDuration(heartbeat.every)) { - issues.push({ - path: "$.agent.heartbeat.every", - message: "Must be a valid duration.", - }); - } - } - if ( - heartbeat?.activeHours?.start !== undefined && - !isValidHeartbeatTime(heartbeat.activeHours.start, false) - ) { - issues.push({ - path: "$.agent.heartbeat.activeHours.start", - message: "Must be a valid 24-hour start time.", - }); - } - if ( - heartbeat?.activeHours?.end !== undefined && - !isValidHeartbeatTime(heartbeat.activeHours.end, true) - ) { - issues.push({ - path: "$.agent.heartbeat.activeHours.end", - message: "Must be a valid 24-hour end time.", - }); - } + const openClawProfilePath = parsed.metadata?.["openclaw.config"]; if ( - heartbeat?.activeHours?.timezone !== undefined && - !isValidTimezone(heartbeat.activeHours.timezone) + openClawProfilePath !== undefined && + (!isSafePackagePath(openClawProfilePath) || !/\.ya?ml$/i.test(openClawProfilePath)) ) { issues.push({ - path: "$.agent.heartbeat.activeHours.timezone", - message: "Must be a valid IANA timezone.", + path: "$.metadata.openclaw.config", + message: "Must reference a safe package-relative .yml or .yaml file.", }); } - if ( - heartbeat?.timeoutSeconds !== undefined && - (!Number.isInteger(heartbeat.timeoutSeconds) || heartbeat.timeoutSeconds <= 0) - ) { - issues.push({ - path: "$.agent.heartbeat.timeoutSeconds", - message: "Must be a positive integer.", - }); - } - for (const field of ["minMs", "maxMs"] as const) { - const delayValue = parsed.agent.humanDelay?.[field]; - if (delayValue !== undefined && (!Number.isInteger(delayValue) || delayValue < 0)) { - issues.push({ - path: `$.agent.humanDelay.${field}`, - message: "Must be a nonnegative integer.", - }); - } - } const workspaceTargets = new Set(); for (const name of CLAW_BOOTSTRAP_FILE_NAMES) { const source = parsed.workspace?.bootstrapFiles?.[name]?.source; diff --git a/specs/claws.md b/specs/claws.md index 530c79aa05..d6d48feac9 100644 --- a/specs/claws.md +++ b/specs/claws.md @@ -7,11 +7,16 @@ owns publication, ownership, discovery, package detail APIs, and hosted feed export. OpenClaw remains authoritative for local planning, consent, mutation, provenance, update, and removal. -Portable agent policy follows the RFC's agent-settings addendum. ClawHub -validates the portable shape of profile selection, tool modifiers, filesystem -restriction, and memory-search settings. The applying OpenClaw version remains -responsible for resolving a profile name through its current built-in registry; -ClawHub does not freeze that evolving registry into its package schema. +The portable agent object carries only identity and purpose. Harness-specific +settings live in package-local profiles addressed through opaque string +metadata. OpenClaw recognizes `metadata.openclaw.config`; export conventionally +uses `profiles/openclaw.yml`, but the pointer is normative and authors may use +another safe package-relative YAML path. + +That profile exists only inside the Claw package. It is validated during +publication and application, participates in package integrity, and is never +copied into ordinary OpenClaw configuration. Other harnesses may ignore +OpenClaw's namespaced key or define their own profile-pointer contract. ## Experimental contract From 61bc0f49759ca92cbcf08473ae6b8b1d85631f43 Mon Sep 17 00:00:00 2001 From: Gio Della-Libera Date: Thu, 23 Jul 2026 16:47:47 -0700 Subject: [PATCH 4/6] fix(claws): require portable profile pointers --- packages/schema/dist/claws.js | 6 ++++-- packages/schema/dist/claws.js.map | 2 +- packages/schema/src/claws.test.ts | 22 ++++++++++++---------- packages/schema/src/claws.ts | 6 ++++-- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/packages/schema/dist/claws.js b/packages/schema/dist/claws.js index c57aef163c..5a40196879 100644 --- a/packages/schema/dist/claws.js +++ b/packages/schema/dist/claws.js @@ -406,10 +406,12 @@ export function validateClawManifest(value) { } const openClawProfilePath = parsed.metadata?.["openclaw.config"]; if (openClawProfilePath !== undefined && - (!isSafePackagePath(openClawProfilePath) || !/\.ya?ml$/i.test(openClawProfilePath))) { + (openClawProfilePath.includes("\\") || + !isSafePackagePath(openClawProfilePath) || + !/\.ya?ml$/i.test(openClawProfilePath))) { issues.push({ path: "$.metadata.openclaw.config", - message: "Must reference a safe package-relative .yml or .yaml file.", + message: "Must reference a forward-slash package-relative .yml or .yaml file.", }); } const workspaceTargets = new Set(); diff --git a/packages/schema/dist/claws.js.map b/packages/schema/dist/claws.js.map index 42d1400535..f139e043f3 100644 --- a/packages/schema/dist/claws.js.map +++ b/packages/schema/dist/claws.js.map @@ -1 +1 @@ -{"version":3,"file":"claws.js","sourceRoot":"","sources":["../src/claws.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"claws.js","sourceRoot":"","sources":["../src/claws.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/schema/src/claws.test.ts b/packages/schema/src/claws.test.ts index 70d44faa16..a0d69d9d9a 100644 --- a/packages/schema/src/claws.test.ts +++ b/packages/schema/src/claws.test.ts @@ -116,17 +116,19 @@ describe("Claw manifest contract", () => { ).toBe(false); }); - it.each(["../openclaw.yml", "/profiles/openclaw.yml", "profiles/openclaw.json"])( - "rejects unsafe or non-YAML OpenClaw profile pointer %s", - (profilePath) => { - const result = validateClawManifest({ - ...fixture, - metadata: { "openclaw.config": profilePath }, - }); + it.each([ + "../openclaw.yml", + "/profiles/openclaw.yml", + "profiles/openclaw.json", + "profiles\\openclaw.yml", + ])("rejects unsafe or non-YAML OpenClaw profile pointer %s", (profilePath) => { + const result = validateClawManifest({ + ...fixture, + metadata: { "openclaw.config": profilePath }, + }); - expect(result.ok).toBe(false); - }, - ); + expect(result.ok).toBe(false); + }); it("fails closed on unknown fields", () => { expect(validateClawManifest({ ...fixture, model: "gpt-5" }).ok).toBe(false); diff --git a/packages/schema/src/claws.ts b/packages/schema/src/claws.ts index 9d66441051..f21f8766f0 100644 --- a/packages/schema/src/claws.ts +++ b/packages/schema/src/claws.ts @@ -444,11 +444,13 @@ export function validateClawManifest( const openClawProfilePath = parsed.metadata?.["openclaw.config"]; if ( openClawProfilePath !== undefined && - (!isSafePackagePath(openClawProfilePath) || !/\.ya?ml$/i.test(openClawProfilePath)) + (openClawProfilePath.includes("\\") || + !isSafePackagePath(openClawProfilePath) || + !/\.ya?ml$/i.test(openClawProfilePath)) ) { issues.push({ path: "$.metadata.openclaw.config", - message: "Must reference a safe package-relative .yml or .yaml file.", + message: "Must reference a forward-slash package-relative .yml or .yaml file.", }); } const workspaceTargets = new Set(); From 36dca6f71d1c1d5f14bb3c1bf2a9af2c0ca5f7e4 Mon Sep 17 00:00:00 2001 From: Patrick Erichsen Date: Fri, 24 Jul 2026 16:40:41 -0500 Subject: [PATCH 5/6] fix(schema): align portable claw validation --- bun.lock | 3 + convex/schema.ts | 30 +- packages/schema/dist/claws.d.ts | 66 ++- packages/schema/dist/claws.js | 479 ++++++++++---------- packages/schema/dist/claws.js.map | 2 +- packages/schema/package.json | 3 +- packages/schema/src/claws.test.ts | 159 ++++++- packages/schema/src/claws.ts | 700 +++++++++++++++++++----------- specs/claws.md | 32 +- 9 files changed, 933 insertions(+), 541 deletions(-) diff --git a/bun.lock b/bun.lock index fae6e02e7b..d3373daeae 100644 --- a/bun.lock +++ b/bun.lock @@ -157,6 +157,7 @@ "dependencies": { "arktype": "2.2.3", "croner": "10.0.1", + "unicode-case-folding": "1.1.1", }, "devDependencies": { "@typescript/native": "npm:typescript@7.0.2", @@ -1923,6 +1924,8 @@ "unenv": ["unenv@2.0.0-rc.24", "", { "dependencies": { "pathe": "^2.0.3" } }, "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw=="], + "unicode-case-folding": ["unicode-case-folding@1.1.1", "", {}, "sha512-ZAYziAnMTBisO2dT5tyGvBFMNsIfonOS/BZTd3UZaKWtXMOZqK8s8HRUCrlKxGCTeCxCuCjS/6HW+4a6G+rbzw=="], + "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], diff --git a/convex/schema.ts b/convex/schema.ts index d90a8a5b5b..6184579cbd 100644 --- a/convex/schema.ts +++ b/convex/schema.ts @@ -1,6 +1,7 @@ import { authTables } from "@convex-dev/auth/server"; +import { createClawManifestSummarySchema } from "clawhub-schema"; import { defineSchema, defineTable } from "convex/server"; -import { v } from "convex/values"; +import { type GenericValidator, v } from "convex/values"; import { EMBEDDING_DIMENSIONS } from "./lib/embeddings"; const PLATFORM_SKILL_LICENSE = "MIT-0" as const; @@ -670,23 +671,15 @@ const pluginManifestSummaryValidator = v.object({ ), }); -const clawManifestSummaryValidator = v.object({ - schemaVersion: v.literal(1), - agent: v.object({ - id: v.string(), - name: v.optional(v.string()), - description: v.optional(v.string()), - }), - workspace: v.object({ - bootstrapFiles: v.array(v.string()), - fileCount: v.number(), - }), - packages: v.object({ - skillCount: v.number(), - pluginCount: v.number(), - }), - mcpServerCount: v.number(), - cronJobCount: v.number(), +const clawManifestSummaryValidator = createClawManifestSummarySchema({ + literalOne: v.literal(1), + string: v.string(), + number: v.number(), + stringArray: v.array(v.string()), + // Convex validators cannot express string lengths; publication must validate with the shared schema. + boundedString: () => v.string(), + optional: (validator) => v.optional(validator), + object: (fields) => v.object(fields), }); const packageVerificationValidator = v.optional( @@ -1749,7 +1742,6 @@ const packageReleases = defineTable({ normalizedBundleManifest: v.optional(v.any()), manifestSearchTerms: v.optional(v.array(v.string())), pluginManifestSummary: v.optional(pluginManifestSummaryValidator), - extractedClawManifest: v.optional(v.any()), clawManifestSummary: v.optional(clawManifestSummaryValidator), compatibility: packageCompatibilityValidator, runtimeId: v.optional(v.string()), diff --git a/packages/schema/dist/claws.d.ts b/packages/schema/dist/claws.d.ts index 1a121d1a4e..3b6bf6041e 100644 --- a/packages/schema/dist/claws.d.ts +++ b/packages/schema/dist/claws.d.ts @@ -1,4 +1,4 @@ -import { type inferred } from "arktype"; +import { type BaseType, type inferred } from "arktype"; export declare const CLAW_SCHEMA_VERSION: 1; export declare const CLAW_SUMMARY_AGENT_NAME_MAX_CHARS = 128; export declare const CLAW_SUMMARY_AGENT_DESCRIPTION_MAX_CHARS = 1024; @@ -90,12 +90,12 @@ export declare const ClawManifestSchema: import("arktype/internal/variants/objec }[] | undefined; }, {}>; export type ClawManifest = (typeof ClawManifestSchema)[inferred]; -export declare const ClawManifestSummarySchema: import("arktype/internal/variants/object.ts").ObjectType<{ +export type ClawManifestSummary = { schemaVersion: 1; agent: { id: string; - name?: string | undefined; - description?: string | undefined; + name?: string; + description?: string; }; workspace: { bootstrapFiles: string[]; @@ -107,12 +107,66 @@ export declare const ClawManifestSummarySchema: import("arktype/internal/variant }; mcpServerCount: number; cronJobCount: number; -}, {}>; -export type ClawManifestSummary = (typeof ClawManifestSummarySchema)[inferred]; +}; +export type ClawManifestSummarySchemaAdapter = { + literalOne: TValue; + string: TValue; + number: TValue; + stringArray: TValue; + boundedString: (maxCharacters: number) => TValue; + optional: (schema: TValue) => TOptional; + object: (fields: Record) => TValue; +}; +/** Builds the v1 summary structure for both the public schema and durable storage validators. */ +export declare function createClawManifestSummarySchema(adapter: ClawManifestSummarySchemaAdapter): TValue; +export declare const ClawManifestSummarySchema: BaseType; +export declare const CLAW_MANIFEST_VALIDATION_PHASE: "schema"; +export declare const CLAW_MANIFEST_VALIDATION_CODES: { + readonly invalidManifestShape: "claw_v1_invalid_manifest_shape"; + readonly invalidAgentId: "claw_v1_invalid_agent_id"; + readonly nonCanonicalString: "claw_v1_non_canonical_string"; + readonly emptyList: "claw_v1_empty_list"; + readonly invalidProfilePath: "claw_v1_invalid_profile_path"; + readonly unsafePath: "claw_v1_unsafe_path"; + readonly duplicateWorkspaceDestination: "claw_v1_duplicate_workspace_destination"; + readonly invalidAvatar: "claw_v1_invalid_avatar"; + readonly undeclaredAvatar: "claw_v1_undeclared_avatar"; + readonly invalidPackageReference: "claw_v1_invalid_package_reference"; + readonly invalidPackageVersion: "claw_v1_invalid_package_version"; + readonly duplicatePackage: "claw_v1_duplicate_package"; + readonly invalidMcpServerId: "claw_v1_invalid_mcp_server_id"; + readonly invalidMcpUrl: "claw_v1_invalid_mcp_url"; + readonly mcpUrlCredentials: "claw_v1_mcp_url_credentials"; + readonly unpinnedMcpPackage: "claw_v1_unpinned_mcp_package"; + readonly invalidToolFilter: "claw_v1_invalid_tool_filter"; + readonly duplicateToolFilter: "claw_v1_duplicate_tool_filter"; + readonly invalidEnvironmentKey: "claw_v1_invalid_environment_key"; + readonly blockedEnvironmentKey: "claw_v1_blocked_environment_key"; + readonly invalidEnvironmentReference: "claw_v1_invalid_environment_reference"; + readonly invalidTimeout: "claw_v1_invalid_timeout"; + readonly invalidCronJobId: "claw_v1_invalid_cron_job_id"; + readonly invalidCronSchedule: "claw_v1_invalid_cron_schedule"; + readonly invalidCronDelivery: "claw_v1_invalid_cron_delivery"; + readonly duplicateCronJob: "claw_v1_duplicate_cron_job"; +}; +export type ClawManifestValidationCode = (typeof CLAW_MANIFEST_VALIDATION_CODES)[keyof typeof CLAW_MANIFEST_VALIDATION_CODES]; export type ClawManifestValidationIssue = { + code: ClawManifestValidationCode; + phase: typeof CLAW_MANIFEST_VALIDATION_PHASE; path: string; message: string; }; +export declare const OPENCLAW_CLAW_HOST_ENV_POLICY_V1: { + readonly contractVersion: 1; + readonly source: { + readonly repository: "openclaw/openclaw"; + readonly commit: "f50a918af102b950721c1b380f7eb8af4e0389d1"; + readonly path: "src/infra/host-env-security-policy.json"; + readonly sha256: "4639dcfa157d4fa4c2fb84f8c5347ffe2252eb4ddb3d818afd7f87d68173b92b"; + }; + readonly blockedKeys: readonly ["NODE_OPTIONS", "NODE_PATH", "NODE_REDIRECT_WARNINGS", "NODE_REPL_EXTERNAL_MODULE", "NODE_REPL_HISTORY", "NODE_V8_COVERAGE", "PYTHONHOME", "PYTHONPATH", "PERL5LIB", "PERL5OPT", "RUBYLIB", "RUBYOPT", "BASHOPTS", "BASH_ENV", "ENV", "KSH_ENV", "BROWSER", "GIT_ALLOW_PROTOCOL", "GIT_EDITOR", "GIT_EXTERNAL_DIFF", "GIT_DIR", "GIT_WORK_TREE", "GIT_COMMON_DIR", "GIT_EXEC_PATH", "GIT_INDEX_FILE", "GIT_OBJECT_DIRECTORY", "GIT_ALTERNATE_OBJECT_DIRECTORIES", "GIT_NAMESPACE", "GIT_PROTOCOL_FROM_USER", "GIT_SEQUENCE_EDITOR", "GIT_TEMPLATE_DIR", "GIT_SSL_NO_VERIFY", "GIT_SSL_CAINFO", "GIT_SSL_CAPATH", "CC", "CPP", "CXX", "CARGO_BUILD_RUSTC", "CARGO_BUILD_RUSTC_WRAPPER", "CARGO_BUILD_RUSTC_WORKSPACE_WRAPPER", "CARGO_BUILD_RUSTDOC", "RUSTC", "RUSTC_WRAPPER", "RUSTC_WORKSPACE_WRAPPER", "RUSTDOC", "CMAKE_C_COMPILER", "CMAKE_CXX_COMPILER", "SHELL", "SHELLOPTS", "PS4", "GCONV_PATH", "IFS", "SSLKEYLOGFILE", "JAVA_OPTS", "JAVA_TOOL_OPTIONS", "_JAVA_OPTIONS", "JDK_JAVA_OPTIONS", "PYTHONBREAKPOINT", "DOTNET_STARTUP_HOOKS", "DOTNET_ADDITIONAL_DEPS", "FPATH", "GLIBC_TUNABLES", "MAVEN_OPTS", "MAKE", "MAKEFLAGS", "MFLAGS", "SBT_OPTS", "GRADLE_OPTS", "ANT_OPTS", "HGRCPATH", "HGEDITOR", "HGMERGE", "EXINIT", "VIMINIT", "MYVIMRC", "GVIMINIT", "LUA_INIT", "LUA_INIT_5_1", "LUA_INIT_5_2", "LUA_INIT_5_3", "LUA_INIT_5_4", "EMACSLOADPATH", "RUBYSHELL", "GIT_HOOK_PATH", "SVN_EDITOR", "SVN_SSH", "BZR_EDITOR", "BZR_SSH", "BZR_PLUGIN_PATH", "SUDO_ASKPASS", "JULIA_EDITOR", "CONFIG_SITE", "CONFIG_SHELL", "CMAKE_TOOLCHAIN_FILE", "CATALINA_OPTS", "CORECLR_PROFILER", "HELM_PLUGINS", "PACKER_PLUGIN_PATH", "VAGRANT_VAGRANTFILE", "ERL_AFLAGS", "ERL_FLAGS", "ERL_ZFLAGS", "ELIXIR_ERL_OPTIONS", "R_ENVIRON", "R_PROFILE", "R_ENVIRON_USER", "R_PROFILE_USER", "TCLLIBPATH", "HOSTALIASES"]; + readonly blockedPrefixes: readonly ["DYLD_", "LD_", "BASH_FUNC_"]; +}; export declare function validateClawManifest(value: unknown): { ok: true; manifest: ClawManifest; diff --git a/packages/schema/dist/claws.js b/packages/schema/dist/claws.js index 5a40196879..4d42a055da 100644 --- a/packages/schema/dist/claws.js +++ b/packages/schema/dist/claws.js @@ -1,5 +1,6 @@ import { ArkErrors, type } from "arktype"; import { Cron } from "croner"; +import { caseFold } from "unicode-case-folding"; export const CLAW_SCHEMA_VERSION = 1; export const CLAW_SUMMARY_AGENT_NAME_MAX_CHARS = 128; export const CLAW_SUMMARY_AGENT_DESCRIPTION_MAX_CHARS = 1_024; @@ -93,154 +94,202 @@ export const ClawManifestSchema = type({ .array() .optional(), }); -const ClawSummaryAgentNameSchema = type("string").narrow((value) => Array.from(value).length <= CLAW_SUMMARY_AGENT_NAME_MAX_CHARS); -const ClawSummaryAgentDescriptionSchema = type("string").narrow((value) => Array.from(value).length <= CLAW_SUMMARY_AGENT_DESCRIPTION_MAX_CHARS); -export const ClawManifestSummarySchema = type({ - "+": "reject", - schemaVersion: "1", - agent: { - "+": "reject", - id: "string", - name: ClawSummaryAgentNameSchema.optional(), - description: ClawSummaryAgentDescriptionSchema.optional(), - }, - workspace: { - "+": "reject", - bootstrapFiles: "string[]", - fileCount: "number", - }, - packages: { - "+": "reject", - skillCount: "number", - pluginCount: "number", - }, - mcpServerCount: "number", - cronJobCount: "number", +/** Builds the v1 summary structure for both the public schema and durable storage validators. */ +export function createClawManifestSummarySchema(adapter) { + return adapter.object({ + schemaVersion: adapter.literalOne, + agent: adapter.object({ + id: adapter.string, + name: adapter.optional(adapter.boundedString(CLAW_SUMMARY_AGENT_NAME_MAX_CHARS)), + description: adapter.optional(adapter.boundedString(CLAW_SUMMARY_AGENT_DESCRIPTION_MAX_CHARS)), + }), + workspace: adapter.object({ + bootstrapFiles: adapter.stringArray, + fileCount: adapter.number, + }), + packages: adapter.object({ + skillCount: adapter.number, + pluginCount: adapter.number, + }), + mcpServerCount: adapter.number, + cronJobCount: adapter.number, + }); +} +export const ClawManifestSummarySchema = createClawManifestSummarySchema({ + literalOne: type("1"), + string: type("string"), + number: type("number"), + stringArray: type("string[]"), + boundedString: (maxCharacters) => type("string").narrow((value) => Array.from(value).length <= maxCharacters), + optional: (schema) => schema.optional(), + object: (fields) => type({ "+": "reject", ...fields }), }); +export const CLAW_MANIFEST_VALIDATION_PHASE = "schema"; +export const CLAW_MANIFEST_VALIDATION_CODES = { + invalidManifestShape: "claw_v1_invalid_manifest_shape", + invalidAgentId: "claw_v1_invalid_agent_id", + nonCanonicalString: "claw_v1_non_canonical_string", + emptyList: "claw_v1_empty_list", + invalidProfilePath: "claw_v1_invalid_profile_path", + unsafePath: "claw_v1_unsafe_path", + duplicateWorkspaceDestination: "claw_v1_duplicate_workspace_destination", + invalidAvatar: "claw_v1_invalid_avatar", + undeclaredAvatar: "claw_v1_undeclared_avatar", + invalidPackageReference: "claw_v1_invalid_package_reference", + invalidPackageVersion: "claw_v1_invalid_package_version", + duplicatePackage: "claw_v1_duplicate_package", + invalidMcpServerId: "claw_v1_invalid_mcp_server_id", + invalidMcpUrl: "claw_v1_invalid_mcp_url", + mcpUrlCredentials: "claw_v1_mcp_url_credentials", + unpinnedMcpPackage: "claw_v1_unpinned_mcp_package", + invalidToolFilter: "claw_v1_invalid_tool_filter", + duplicateToolFilter: "claw_v1_duplicate_tool_filter", + invalidEnvironmentKey: "claw_v1_invalid_environment_key", + blockedEnvironmentKey: "claw_v1_blocked_environment_key", + invalidEnvironmentReference: "claw_v1_invalid_environment_reference", + invalidTimeout: "claw_v1_invalid_timeout", + invalidCronJobId: "claw_v1_invalid_cron_job_id", + invalidCronSchedule: "claw_v1_invalid_cron_schedule", + invalidCronDelivery: "claw_v1_invalid_cron_delivery", + duplicateCronJob: "claw_v1_duplicate_cron_job", +}; const AGENT_ID_PATTERN = /^[a-z][a-z0-9_-]{0,63}$/; const EXACT_VERSION_PATTERN = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/; const ENV_REFERENCE_PATTERN = /^\$\{[A-Z_][A-Z0-9_]*\}$/; const PACKAGE_NAME_PATTERN = /^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/; const WINDOWS_INVALID_PATH_CHARS = /[<>:"|?*]/; const WINDOWS_RESERVED_PATH_SEGMENT = /^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\..*)?$/i; +const UNICODE_CONTROL_CHARACTER = /\p{Cc}/u; const AVATAR_MAX_BYTES = 2 * 1024 * 1024; const AVATAR_MAX_DATA_URL_CHARS = 2_796_230; const AVATAR_DATA_URL_PATTERN = /^data:image\/[^,]*,/i; const AVATAR_EXTENSION_PATTERN = /\.(?:png|jpe?g|gif|webp|svg)$/i; const BASE64_PAYLOAD_PATTERN = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/; const PORTABLE_ENV_KEY_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/; -// Snapshot of OpenClaw's host-wide blocked process environment policy for v1 conformance. -const BLOCKED_PROCESS_ENV_KEYS = new Set([ - "NODE_OPTIONS", - "NODE_PATH", - "NODE_REDIRECT_WARNINGS", - "NODE_REPL_EXTERNAL_MODULE", - "NODE_REPL_HISTORY", - "NODE_V8_COVERAGE", - "PYTHONHOME", - "PYTHONPATH", - "PERL5LIB", - "PERL5OPT", - "RUBYLIB", - "RUBYOPT", - "BASHOPTS", - "BASH_ENV", - "ENV", - "KSH_ENV", - "BROWSER", - "GIT_ALLOW_PROTOCOL", - "GIT_EDITOR", - "GIT_EXTERNAL_DIFF", - "GIT_DIR", - "GIT_WORK_TREE", - "GIT_COMMON_DIR", - "GIT_EXEC_PATH", - "GIT_INDEX_FILE", - "GIT_OBJECT_DIRECTORY", - "GIT_ALTERNATE_OBJECT_DIRECTORIES", - "GIT_NAMESPACE", - "GIT_PROTOCOL_FROM_USER", - "GIT_SEQUENCE_EDITOR", - "GIT_TEMPLATE_DIR", - "GIT_SSL_NO_VERIFY", - "GIT_SSL_CAINFO", - "GIT_SSL_CAPATH", - "CC", - "CXX", - "CARGO_BUILD_RUSTC", - "CARGO_BUILD_RUSTC_WRAPPER", - "CARGO_BUILD_RUSTC_WORKSPACE_WRAPPER", - "CARGO_BUILD_RUSTDOC", - "RUSTC", - "RUSTC_WRAPPER", - "RUSTC_WORKSPACE_WRAPPER", - "RUSTDOC", - "CMAKE_C_COMPILER", - "CMAKE_CXX_COMPILER", - "SHELL", - "SHELLOPTS", - "PS4", - "GCONV_PATH", - "IFS", - "SSLKEYLOGFILE", - "JAVA_OPTS", - "JAVA_TOOL_OPTIONS", - "_JAVA_OPTIONS", - "JDK_JAVA_OPTIONS", - "PYTHONBREAKPOINT", - "DOTNET_STARTUP_HOOKS", - "DOTNET_ADDITIONAL_DEPS", - "FPATH", - "GLIBC_TUNABLES", - "MAVEN_OPTS", - "MAKE", - "MAKEFLAGS", - "MFLAGS", - "SBT_OPTS", - "GRADLE_OPTS", - "ANT_OPTS", - "HGRCPATH", - "HGEDITOR", - "HGMERGE", - "EXINIT", - "VIMINIT", - "MYVIMRC", - "GVIMINIT", - "LUA_INIT", - "LUA_INIT_5_1", - "LUA_INIT_5_2", - "LUA_INIT_5_3", - "LUA_INIT_5_4", - "EMACSLOADPATH", - "RUBYSHELL", - "GIT_HOOK_PATH", - "SVN_EDITOR", - "SVN_SSH", - "BZR_EDITOR", - "BZR_SSH", - "BZR_PLUGIN_PATH", - "SUDO_ASKPASS", - "JULIA_EDITOR", - "CONFIG_SITE", - "CONFIG_SHELL", - "CMAKE_TOOLCHAIN_FILE", - "CATALINA_OPTS", - "CORECLR_PROFILER", - "HELM_PLUGINS", - "PACKER_PLUGIN_PATH", - "VAGRANT_VAGRANTFILE", - "ERL_AFLAGS", - "ERL_FLAGS", - "ERL_ZFLAGS", - "ELIXIR_ERL_OPTIONS", - "R_ENVIRON", - "R_PROFILE", - "R_ENVIRON_USER", - "R_PROFILE_USER", - "TCLLIBPATH", - "HOSTALIASES", -]); -const BLOCKED_PROCESS_ENV_PREFIXES = ["DYLD_", "LD_", "BASH_FUNC_"]; +// Versioned compatibility artifact for the OpenClaw policy applied by the v1 consumer. +export const OPENCLAW_CLAW_HOST_ENV_POLICY_V1 = { + contractVersion: 1, + source: { + repository: "openclaw/openclaw", + commit: "f50a918af102b950721c1b380f7eb8af4e0389d1", + path: "src/infra/host-env-security-policy.json", + sha256: "4639dcfa157d4fa4c2fb84f8c5347ffe2252eb4ddb3d818afd7f87d68173b92b", + }, + blockedKeys: [ + "NODE_OPTIONS", + "NODE_PATH", + "NODE_REDIRECT_WARNINGS", + "NODE_REPL_EXTERNAL_MODULE", + "NODE_REPL_HISTORY", + "NODE_V8_COVERAGE", + "PYTHONHOME", + "PYTHONPATH", + "PERL5LIB", + "PERL5OPT", + "RUBYLIB", + "RUBYOPT", + "BASHOPTS", + "BASH_ENV", + "ENV", + "KSH_ENV", + "BROWSER", + "GIT_ALLOW_PROTOCOL", + "GIT_EDITOR", + "GIT_EXTERNAL_DIFF", + "GIT_DIR", + "GIT_WORK_TREE", + "GIT_COMMON_DIR", + "GIT_EXEC_PATH", + "GIT_INDEX_FILE", + "GIT_OBJECT_DIRECTORY", + "GIT_ALTERNATE_OBJECT_DIRECTORIES", + "GIT_NAMESPACE", + "GIT_PROTOCOL_FROM_USER", + "GIT_SEQUENCE_EDITOR", + "GIT_TEMPLATE_DIR", + "GIT_SSL_NO_VERIFY", + "GIT_SSL_CAINFO", + "GIT_SSL_CAPATH", + "CC", + "CPP", + "CXX", + "CARGO_BUILD_RUSTC", + "CARGO_BUILD_RUSTC_WRAPPER", + "CARGO_BUILD_RUSTC_WORKSPACE_WRAPPER", + "CARGO_BUILD_RUSTDOC", + "RUSTC", + "RUSTC_WRAPPER", + "RUSTC_WORKSPACE_WRAPPER", + "RUSTDOC", + "CMAKE_C_COMPILER", + "CMAKE_CXX_COMPILER", + "SHELL", + "SHELLOPTS", + "PS4", + "GCONV_PATH", + "IFS", + "SSLKEYLOGFILE", + "JAVA_OPTS", + "JAVA_TOOL_OPTIONS", + "_JAVA_OPTIONS", + "JDK_JAVA_OPTIONS", + "PYTHONBREAKPOINT", + "DOTNET_STARTUP_HOOKS", + "DOTNET_ADDITIONAL_DEPS", + "FPATH", + "GLIBC_TUNABLES", + "MAVEN_OPTS", + "MAKE", + "MAKEFLAGS", + "MFLAGS", + "SBT_OPTS", + "GRADLE_OPTS", + "ANT_OPTS", + "HGRCPATH", + "HGEDITOR", + "HGMERGE", + "EXINIT", + "VIMINIT", + "MYVIMRC", + "GVIMINIT", + "LUA_INIT", + "LUA_INIT_5_1", + "LUA_INIT_5_2", + "LUA_INIT_5_3", + "LUA_INIT_5_4", + "EMACSLOADPATH", + "RUBYSHELL", + "GIT_HOOK_PATH", + "SVN_EDITOR", + "SVN_SSH", + "BZR_EDITOR", + "BZR_SSH", + "BZR_PLUGIN_PATH", + "SUDO_ASKPASS", + "JULIA_EDITOR", + "CONFIG_SITE", + "CONFIG_SHELL", + "CMAKE_TOOLCHAIN_FILE", + "CATALINA_OPTS", + "CORECLR_PROFILER", + "HELM_PLUGINS", + "PACKER_PLUGIN_PATH", + "VAGRANT_VAGRANTFILE", + "ERL_AFLAGS", + "ERL_FLAGS", + "ERL_ZFLAGS", + "ELIXIR_ERL_OPTIONS", + "R_ENVIRON", + "R_PROFILE", + "R_ENVIRON_USER", + "R_PROFILE_USER", + "TCLLIBPATH", + "HOSTALIASES", + ], + blockedPrefixes: ["DYLD_", "LD_", "BASH_FUNC_"], +}; +const BLOCKED_PROCESS_ENV_KEYS = new Set(OPENCLAW_CLAW_HOST_ENV_POLICY_V1.blockedKeys); +const BLOCKED_PROCESS_ENV_PREFIXES = OPENCLAW_CLAW_HOST_ENV_POLICY_V1.blockedPrefixes; function isStrictNonEmpty(value) { return value.length > 0 && value === value.trim(); } @@ -262,13 +311,13 @@ function isSafePackagePath(value) { segment !== "." && segment !== ".." && !WINDOWS_INVALID_PATH_CHARS.test(segment) && - !Array.from(segment).some((character) => character.charCodeAt(0) <= 0x1f) && + !UNICODE_CONTROL_CHARACTER.test(segment) && !segment.endsWith(".") && !segment.endsWith(" ") && !WINDOWS_RESERVED_PATH_SEGMENT.test(segment)); } function portablePathKey(value) { - return value.replaceAll("\\", "/").normalize("NFC").toLowerCase(); + return caseFold(value.replaceAll("\\", "/").normalize("NFC")); } function isPortableAvatar(value) { if (AVATAR_DATA_URL_PATTERN.test(value)) { @@ -311,19 +360,21 @@ function packageManagerArtifacts(command, args) { ?.replace(/\.(?:cmd|exe)$/i, "") .toLowerCase(); let start = 0; + let scansOptionsAfterPositional = false; if (executable === "npm") { if (args[0] !== "exec" && args[0] !== "x") - return [""]; + return undefined; start = 1; + scansOptionsAfterPositional = true; } else if (executable === "bun") { if (args[0] !== "x") - return [""]; + return undefined; start = 1; } else if (executable === "pnpm" || executable === "yarn") { if (args[0] !== "dlx") - return [""]; + return undefined; start = 1; } else if (executable !== "npx" && executable !== "pnpx" && executable !== "bunx") { @@ -336,7 +387,7 @@ function packageManagerArtifacts(command, args) { if (!value) continue; if (value === "--") { - positional = args[index + 1] ?? ""; + positional ??= args[index + 1] ?? ""; break; } if (value === "-p" || value === "--package") { @@ -350,7 +401,8 @@ function packageManagerArtifacts(command, args) { } if (positional === undefined && !value.startsWith("-")) { positional = value; - break; + if (!scansOptionsAfterPositional) + break; } } return selected.length > 0 ? selected : [positional ?? ""]; @@ -372,20 +424,20 @@ function isPackageManagerArtifactPinned(command, args) { EXACT_VERSION_PATTERN.test(artifact.slice(separator + 1))); }); } +function validationIssue(code, path, message) { + return { code, phase: CLAW_MANIFEST_VALIDATION_PHASE, path, message }; +} function arkIssues(errors) { - return Array.from(errors, (error) => ({ - path: error.path.length > 0 ? `$.${error.path.join(".")}` : "$", - message: error.description ?? "Invalid value.", - })); + return Array.from(errors, (error) => validationIssue(CLAW_MANIFEST_VALIDATION_CODES.invalidManifestShape, error.path.length > 0 ? `$.${error.path.join(".")}` : "$", error.description ?? "Manifest must match the strict Claw v1 shape.")); } function pushNonEmpty(issues, path, value) { if (value !== undefined && !isStrictNonEmpty(value)) { - issues.push({ path, message: "Must be non-empty without leading or trailing whitespace." }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.nonCanonicalString, path, "Must be non-empty without leading or trailing whitespace.")); } } function pushNonEmptyArray(issues, path, values, requireEntry) { if (requireEntry && values !== undefined && values.length === 0) { - issues.push({ path, message: "Must contain at least one value." }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.emptyList, path, "Must contain at least one value.")); } for (const [index, value] of (values ?? []).entries()) { pushNonEmpty(issues, `${path}.${index}`, value); @@ -397,22 +449,22 @@ export function validateClawManifest(value) { return { ok: false, issues: arkIssues(parsed) }; const issues = []; if (!AGENT_ID_PATTERN.test(parsed.agent.id)) { - issues.push({ path: "$.agent.id", message: "Invalid portable agent id." }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.invalidAgentId, "$.agent.id", "Invalid portable agent id.")); } pushNonEmpty(issues, "$.agent.name", parsed.agent.name); pushNonEmpty(issues, "$.agent.description", parsed.agent.description); for (const field of ["name", "theme", "emoji", "avatar"]) { pushNonEmpty(issues, `$.agent.identity.${field}`, parsed.agent.identity?.[field]); } + for (const key of Object.keys(parsed.metadata ?? {})) { + pushNonEmpty(issues, `$.metadata.${key}`, key); + } const openClawProfilePath = parsed.metadata?.["openclaw.config"]; if (openClawProfilePath !== undefined && (openClawProfilePath.includes("\\") || !isSafePackagePath(openClawProfilePath) || !/\.ya?ml$/i.test(openClawProfilePath))) { - issues.push({ - path: "$.metadata.openclaw.config", - message: "Must reference a forward-slash package-relative .yml or .yaml file.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.invalidProfilePath, "$.metadata.openclaw.config", "Must reference a forward-slash package-relative .yml or .yaml file.")); } const workspaceTargets = new Set(); for (const name of CLAW_BOOTSTRAP_FILE_NAMES) { @@ -420,81 +472,51 @@ export function validateClawManifest(value) { if (source === undefined) continue; if (!isSafePackagePath(source)) { - issues.push({ - path: `$.workspace.bootstrapFiles.${name}.source`, - message: "Must be a safe package-relative path.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.unsafePath, `$.workspace.bootstrapFiles.${name}.source`, "Must be a safe package-relative path.")); } workspaceTargets.add(portablePathKey(name)); } for (const [index, file] of (parsed.workspace?.files ?? []).entries()) { if (!isSafePackagePath(file.source)) { - issues.push({ - path: `$.workspace.files.${index}.source`, - message: "Must be a safe package-relative path.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.unsafePath, `$.workspace.files.${index}.source`, "Must be a safe package-relative path.")); } if (!isSafePackagePath(file.path)) { - issues.push({ - path: `$.workspace.files.${index}.path`, - message: "Must be a safe package-relative path.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.unsafePath, `$.workspace.files.${index}.path`, "Must be a safe package-relative path.")); } const destinationKey = portablePathKey(file.path); if (conflictsWithWorkspaceTarget(workspaceTargets, destinationKey)) { - issues.push({ - path: `$.workspace.files.${index}.path`, - message: "Workspace destination is declared more than once.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.duplicateWorkspaceDestination, `$.workspace.files.${index}.path`, "Workspace destination is declared more than once.")); } workspaceTargets.add(destinationKey); } const avatar = parsed.agent.identity?.avatar; if (avatar !== undefined) { if (!isPortableAvatar(avatar)) { - issues.push({ - path: "$.agent.identity.avatar", - message: "Must be a bounded image data URL or managed workspace-relative image path.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.invalidAvatar, "$.agent.identity.avatar", "Must be a bounded image data URL or managed workspace-relative image path.")); } else if (!AVATAR_DATA_URL_PATTERN.test(avatar) && !workspaceTargets.has(portablePathKey(avatar))) { - issues.push({ - path: "$.agent.identity.avatar", - message: "Workspace-relative avatar must match a workspace.files destination.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.undeclaredAvatar, "$.agent.identity.avatar", "Workspace-relative avatar must match a workspace.files destination.")); } } const packageKeys = new Set(); for (const [index, pkg] of (parsed.packages ?? []).entries()) { pushNonEmpty(issues, `$.packages.${index}.ref`, pkg.ref); if (!PACKAGE_NAME_PATTERN.test(pkg.ref)) { - issues.push({ - path: `$.packages.${index}.ref`, - message: "Must be a lowercase ClawHub package name.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.invalidPackageReference, `$.packages.${index}.ref`, "Must be a lowercase ClawHub package name.")); } if (!EXACT_VERSION_PATTERN.test(pkg.version)) { - issues.push({ - path: `$.packages.${index}.version`, - message: "Must be an exact semantic version.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.invalidPackageVersion, `$.packages.${index}.version`, "Must be an exact semantic version.")); } const key = `${pkg.kind}:${pkg.source}:${pkg.ref.toLowerCase()}`; if (packageKeys.has(key)) { - issues.push({ - path: `$.packages.${index}`, - message: "Package is declared more than once.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.duplicatePackage, `$.packages.${index}`, "Package is declared more than once.")); } packageKeys.add(key); } for (const [name, server] of Object.entries(parsed.mcpServers ?? {})) { if (!AGENT_ID_PATTERN.test(name)) { - issues.push({ - path: `$.mcpServers.${name}`, - message: "Invalid MCP server name.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.invalidMcpServerId, `$.mcpServers.${name}`, "Invalid MCP server name.")); } if ("url" in server) { pushNonEmpty(issues, `$.mcpServers.${name}.url`, server.url); @@ -505,27 +527,18 @@ export function validateClawManifest(value) { throw new Error("protocol"); } if (url.username || url.password || url.hash) { - issues.push({ - path: `$.mcpServers.${name}.url`, - message: "Must not contain embedded credentials or fragments.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.mcpUrlCredentials, `$.mcpServers.${name}.url`, "Must not contain embedded credentials or fragments.")); } } catch { - issues.push({ - path: `$.mcpServers.${name}.url`, - message: "Must use HTTPS, except HTTP on an exact loopback host.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.invalidMcpUrl, `$.mcpServers.${name}.url`, "Must use HTTPS, except HTTP on an exact loopback host.")); } } if ("command" in server) { pushNonEmpty(issues, `$.mcpServers.${name}.command`, server.command); pushNonEmptyArray(issues, `$.mcpServers.${name}.args`, server.args, false); if (isPackageManagerArtifactPinned(server.command, server.args ?? []) === false) { - issues.push({ - path: `$.mcpServers.${name}.args`, - message: "Package-manager MCP commands must select one exact immutable package version.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.unpinnedMcpPackage, `$.mcpServers.${name}.args`, "Package-manager MCP commands must select one exact immutable package version.")); } } pushNonEmptyArray(issues, `$.mcpServers.${name}.toolFilter.include`, server.toolFilter?.include, true); @@ -534,16 +547,10 @@ export function validateClawManifest(value) { const seen = new Set(); for (const [index, entry] of (server.toolFilter?.[field] ?? []).entries()) { if (entry.includes("?") || entry.includes("[") || entry.includes("]")) { - issues.push({ - path: `$.mcpServers.${name}.toolFilter.${field}.${index}`, - message: "Tool filters support only exact names and * wildcards.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.invalidToolFilter, `$.mcpServers.${name}.toolFilter.${field}.${index}`, "Tool filters support only exact names and * wildcards.")); } if (seen.has(entry)) { - issues.push({ - path: `$.mcpServers.${name}.toolFilter.${field}.${index}`, - message: "Tool filter entries must be unique.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.duplicateToolFilter, `$.mcpServers.${name}.toolFilter.${field}.${index}`, "Tool filter entries must be unique.")); } seen.add(entry); } @@ -552,46 +559,28 @@ export function validateClawManifest(value) { for (const [key, envValue] of Object.entries(server.env ?? {})) { pushNonEmpty(issues, `$.mcpServers.${name}.env`, key); if (!PORTABLE_ENV_KEY_PATTERN.test(key)) { - issues.push({ - path: `$.mcpServers.${name}.env.${key}`, - message: "Invalid portable environment key.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.invalidEnvironmentKey, `$.mcpServers.${name}.env.${key}`, "Invalid portable environment key.")); } if (isBlockedProcessEnvKey(key)) { - issues.push({ - path: `$.mcpServers.${name}.env.${key}`, - message: "Environment key is blocked by the spawned-process safety policy.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.blockedEnvironmentKey, `$.mcpServers.${name}.env.${key}`, "Environment key is blocked by the spawned-process safety policy.")); } if (!ENV_REFERENCE_PATTERN.test(envValue)) { - issues.push({ - path: `$.mcpServers.${name}.env.${key}`, - message: "Must be an unresolved ${ENV_VAR} reference.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.invalidEnvironmentReference, `$.mcpServers.${name}.env.${key}`, "Must be an unresolved ${ENV_VAR} reference.")); } } } if (server.timeout !== undefined && (!Number.isFinite(server.timeout) || server.timeout <= 0)) { - issues.push({ - path: `$.mcpServers.${name}.timeout`, - message: "Must be positive.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.invalidTimeout, `$.mcpServers.${name}.timeout`, "Must be positive.")); } if (server.connectTimeout !== undefined && (!Number.isFinite(server.connectTimeout) || server.connectTimeout <= 0)) { - issues.push({ - path: `$.mcpServers.${name}.connectTimeout`, - message: "Must be positive.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.invalidTimeout, `$.mcpServers.${name}.connectTimeout`, "Must be positive.")); } } const cronIds = new Set(); for (const [index, job] of (parsed.cronJobs ?? []).entries()) { if (!AGENT_ID_PATTERN.test(job.id)) { - issues.push({ - path: `$.cronJobs.${index}.id`, - message: "Invalid cron job id.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.invalidCronJobId, `$.cronJobs.${index}.id`, "Invalid cron job id.")); } pushNonEmpty(issues, `$.cronJobs.${index}.name`, job.name); pushNonEmpty(issues, `$.cronJobs.${index}.schedule.cron`, job.schedule.cron); @@ -603,28 +592,20 @@ export function validateClawManifest(value) { const cron = new Cron(job.schedule.cron.trim(), { timezone: job.schedule.timezone.trim(), catch: false, + paused: true, }); if (!cron.nextRun(new Date())) throw new Error("No future run"); } catch { - issues.push({ - path: `$.cronJobs.${index}.schedule`, - message: "Must contain a valid cron expression and timezone.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.invalidCronSchedule, `$.cronJobs.${index}.schedule`, "Must contain a valid cron expression and timezone.")); } if ((job.delivery?.mode === "none" && job.delivery.channel !== undefined) || (job.delivery?.mode === "announce" && job.delivery.channel !== "last")) { - issues.push({ - path: `$.cronJobs.${index}.delivery`, - message: 'Must be { mode: "none" } or { mode: "announce", channel: "last" }.', - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.invalidCronDelivery, `$.cronJobs.${index}.delivery`, 'Must be { mode: "none" } or { mode: "announce", channel: "last" }.')); } if (cronIds.has(job.id)) { - issues.push({ - path: `$.cronJobs.${index}.id`, - message: "Cron job id is declared more than once.", - }); + issues.push(validationIssue(CLAW_MANIFEST_VALIDATION_CODES.duplicateCronJob, `$.cronJobs.${index}.id`, "Cron job id is declared more than once.")); } cronIds.add(job.id); } diff --git a/packages/schema/dist/claws.js.map b/packages/schema/dist/claws.js.map index f139e043f3..3e1f85f10d 100644 --- a/packages/schema/dist/claws.js.map +++ b/packages/schema/dist/claws.js.map @@ -1 +1 @@ -{"version":3,"file":"claws.js","sourceRoot":"","sources":["../src/claws.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"claws.js","sourceRoot":"","sources":["../src/claws.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/schema/package.json b/packages/schema/package.json index 1978d8cee8..c86b85ba01 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -31,7 +31,8 @@ }, "dependencies": { "arktype": "2.2.3", - "croner": "10.0.1" + "croner": "10.0.1", + "unicode-case-folding": "1.1.1" }, "devDependencies": { "@typescript/native": "npm:typescript@7.0.2", diff --git a/packages/schema/src/claws.test.ts b/packages/schema/src/claws.test.ts index a0d69d9d9a..dfb3e59514 100644 --- a/packages/schema/src/claws.test.ts +++ b/packages/schema/src/claws.test.ts @@ -1,8 +1,14 @@ /* @vitest-environment node */ import { ArkErrors } from "arktype"; -import { describe, expect, it } from "vitest"; -import { ClawManifestSummarySchema, summarizeClawManifest, validateClawManifest } from "./claws"; +import { describe, expect, it, vi } from "vitest"; +import { + CLAW_MANIFEST_VALIDATION_CODES, + ClawManifestSummarySchema, + OPENCLAW_CLAW_HOST_ENV_POLICY_V1, + summarizeClawManifest, + validateClawManifest, +} from "./claws"; import { PackageFamilySchema, PackagePublishMetadataSchema } from "./packages"; const fixture = { @@ -70,6 +76,16 @@ describe("Claw manifest contract", () => { }); }); + it("does not schedule timers while validating cron syntax", () => { + vi.useFakeTimers(); + try { + expect(validateClawManifest(fixture).ok).toBe(true); + expect(vi.getTimerCount()).toBe(0); + } finally { + vi.useRealTimers(); + } + }); + it("accepts opaque string metadata for namespaced harness profile pointers", () => { const result = validateClawManifest({ ...fixture, @@ -87,6 +103,17 @@ describe("Claw manifest contract", () => { }); }); + it.each(["", " openclaw.config "])("rejects non-canonical metadata key %j", (metadataKey) => { + const result = validateClawManifest({ + ...fixture, + metadata: { [metadataKey]: "opaque-value" }, + }); + + expect(result.ok).toBe(false); + if (result.ok) return; + expect(result.issues.map((issue) => issue.path)).toContain(`$.metadata.${metadataKey}`); + }); + it("rejects non-string metadata values and harness policy embedded in the portable agent", () => { expect( validateClawManifest({ @@ -134,6 +161,34 @@ describe("Claw manifest contract", () => { expect(validateClawManifest({ ...fixture, model: "gpt-5" }).ok).toBe(false); }); + it("returns stable v1 codes and schema phases for every rejection", () => { + const structural = validateClawManifest({ ...fixture, model: "gpt-5" }); + expect(structural.ok).toBe(false); + if (structural.ok) return; + expect(structural.issues).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + code: "claw_v1_invalid_manifest_shape", + phase: "schema", + path: "$.model", + }), + ]), + ); + + const semantic = validateClawManifest({ + ...fixture, + packages: [{ kind: "skill", source: "clawhub", ref: "demo", version: "latest" }], + }); + expect(semantic.ok).toBe(false); + if (semantic.ok) return; + expect(semantic.issues).toContainEqual({ + code: "claw_v1_invalid_package_version", + phase: "schema", + path: "$.packages.0.version", + message: "Must be an exact semantic version.", + }); + }); + it("rejects traversal, floating versions, and inline MCP values", () => { const result = validateClawManifest({ ...fixture, @@ -211,6 +266,36 @@ describe("Claw manifest contract", () => { expect(hierarchy.ok).toBe(false); }); + it.each(["\u007f", "\u0085"])( + "rejects Unicode control character U+%s in package paths", + (controlCharacter) => { + expect( + validateClawManifest({ + ...fixture, + workspace: { + files: [{ source: `workspace/a${controlCharacter}.md`, path: "reference/a.md" }], + }, + }).ok, + ).toBe(false); + }, + ); + + it("rejects workspace destinations that collide after Unicode case folding", () => { + const result = validateClawManifest({ + ...fixture, + workspace: { + files: [ + { source: "workspace/a.md", path: "Straße.md" }, + { source: "workspace/b.md", path: "STRASSE.md" }, + ], + }, + }); + + expect(result.ok).toBe(false); + if (result.ok) return; + expect(result.issues.map((issue) => issue.path)).toContain("$.workspace.files.1.path"); + }); + it("rejects credentials embedded in remote MCP URLs", () => { const result = validateClawManifest({ ...fixture, @@ -224,6 +309,8 @@ describe("Claw manifest contract", () => { expect(result.ok).toBe(false); if (result.ok) return; expect(result.issues).toContainEqual({ + code: CLAW_MANIFEST_VALIDATION_CODES.mcpUrlCredentials, + phase: "schema", path: "$.mcpServers.filings.url", message: "Must not contain embedded credentials or fragments.", }); @@ -385,6 +472,32 @@ describe("Claw manifest contract", () => { ); }); + it("enforces the versioned OpenClaw spawned-process environment policy", () => { + expect(OPENCLAW_CLAW_HOST_ENV_POLICY_V1.blockedKeys).toContain("CPP"); + const blockedKeys = [ + ...OPENCLAW_CLAW_HOST_ENV_POLICY_V1.blockedKeys, + ...OPENCLAW_CLAW_HOST_ENV_POLICY_V1.blockedPrefixes.map( + (prefix) => `${prefix}CLAW_CONFORMANCE_TEST`, + ), + ]; + const result = validateClawManifest({ + ...fixture, + mcpServers: { + local: { + command: "server", + env: Object.fromEntries(blockedKeys.map((key) => [key, `\${${key}}`] as const)), + }, + }, + }); + + expect(result.ok).toBe(false); + if (result.ok) return; + const rejectedKeys = result.issues + .filter((issue) => issue.code === CLAW_MANIFEST_VALIDATION_CODES.blockedEnvironmentKey) + .map((issue) => issue.path.replace("$.mcpServers.local.env.", "")); + expect(new Set(rejectedKeys)).toEqual(new Set(blockedKeys)); + }); + it("rejects any floating package selected by an MCP runner", () => { expect( validateClawManifest({ @@ -417,15 +530,53 @@ describe("Claw manifest contract", () => { mcpServers: { safe: { command: "npm", args: ["exec", "safe@1.0.0"] } }, }).ok, ).toBe(true); + }); + + it("checks npm exec package selectors that follow the inferred command", () => { + const result = validateClawManifest({ + ...fixture, + mcpServers: { + unsafe: { + command: "npm", + args: ["exec", "safe@1.0.0", "--package=unsafe@latest"], + }, + }, + }); + + expect(result.ok).toBe(false); + if (result.ok) return; + expect(result.issues.map((issue) => issue.path)).toContain("$.mcpServers.unsafe.args"); expect( validateClawManifest({ ...fixture, - mcpServers: { unsafe: { command: "bun", args: ["run", "server"] } }, + mcpServers: { + safe: { + command: "npm", + args: ["exec", "safe@1.0.0", "--", "--package=child-argument"], + }, + }, }).ok, - ).toBe(false); + ).toBe(true); }); + it.each([ + ["npm", ["run", "serve"]], + ["bun", ["run", "serve"]], + ["pnpm", ["run", "serve"]], + ["yarn", ["run", "serve"]], + ] as const)( + "does not classify non-download %s commands as package selectors", + (command, args) => { + expect( + validateClawManifest({ + ...fixture, + mcpServers: { local: { command, args: [...args] } }, + }).ok, + ).toBe(true); + }, + ); + it("keeps public manifest summaries bounded", () => { const result = validateClawManifest({ ...fixture, diff --git a/packages/schema/src/claws.ts b/packages/schema/src/claws.ts index f21f8766f0..64b6b78146 100644 --- a/packages/schema/src/claws.ts +++ b/packages/schema/src/claws.ts @@ -1,5 +1,6 @@ -import { ArkErrors, type inferred, type } from "arktype"; +import { ArkErrors, type BaseType, type inferred, type } from "arktype"; import { Cron } from "croner"; +import { caseFold } from "unicode-case-folding"; export const CLAW_SCHEMA_VERSION = 1 as const; export const CLAW_SUMMARY_AGENT_NAME_MAX_CHARS = 128; @@ -98,38 +99,101 @@ export const ClawManifestSchema = type({ }); export type ClawManifest = (typeof ClawManifestSchema)[inferred]; -const ClawSummaryAgentNameSchema = type("string").narrow( - (value) => Array.from(value).length <= CLAW_SUMMARY_AGENT_NAME_MAX_CHARS, -); -const ClawSummaryAgentDescriptionSchema = type("string").narrow( - (value) => Array.from(value).length <= CLAW_SUMMARY_AGENT_DESCRIPTION_MAX_CHARS, -); +export type ClawManifestSummary = { + schemaVersion: 1; + agent: { id: string; name?: string; description?: string }; + workspace: { bootstrapFiles: string[]; fileCount: number }; + packages: { skillCount: number; pluginCount: number }; + mcpServerCount: number; + cronJobCount: number; +}; -export const ClawManifestSummarySchema = type({ - "+": "reject", - schemaVersion: "1", - agent: { - "+": "reject", - id: "string", - name: ClawSummaryAgentNameSchema.optional(), - description: ClawSummaryAgentDescriptionSchema.optional(), - }, - workspace: { - "+": "reject", - bootstrapFiles: "string[]", - fileCount: "number", - }, - packages: { - "+": "reject", - skillCount: "number", - pluginCount: "number", +export type ClawManifestSummarySchemaAdapter = { + literalOne: TValue; + string: TValue; + number: TValue; + stringArray: TValue; + boundedString: (maxCharacters: number) => TValue; + optional: (schema: TValue) => TOptional; + object: (fields: Record) => TValue; +}; + +/** Builds the v1 summary structure for both the public schema and durable storage validators. */ +export function createClawManifestSummarySchema( + adapter: ClawManifestSummarySchemaAdapter, +): TValue { + return adapter.object({ + schemaVersion: adapter.literalOne, + agent: adapter.object({ + id: adapter.string, + name: adapter.optional(adapter.boundedString(CLAW_SUMMARY_AGENT_NAME_MAX_CHARS)), + description: adapter.optional( + adapter.boundedString(CLAW_SUMMARY_AGENT_DESCRIPTION_MAX_CHARS), + ), + }), + workspace: adapter.object({ + bootstrapFiles: adapter.stringArray, + fileCount: adapter.number, + }), + packages: adapter.object({ + skillCount: adapter.number, + pluginCount: adapter.number, + }), + mcpServerCount: adapter.number, + cronJobCount: adapter.number, + }); +} + +export const ClawManifestSummarySchema = createClawManifestSummarySchema( + { + literalOne: type("1"), + string: type("string"), + number: type("number"), + stringArray: type("string[]"), + boundedString: (maxCharacters) => + type("string").narrow((value) => Array.from(value).length <= maxCharacters), + optional: (schema) => schema.optional(), + object: (fields) => type({ "+": "reject", ...fields }), }, - mcpServerCount: "number", - cronJobCount: "number", -}); -export type ClawManifestSummary = (typeof ClawManifestSummarySchema)[inferred]; +) as BaseType; -export type ClawManifestValidationIssue = { path: string; message: string }; +export const CLAW_MANIFEST_VALIDATION_PHASE = "schema" as const; +export const CLAW_MANIFEST_VALIDATION_CODES = { + invalidManifestShape: "claw_v1_invalid_manifest_shape", + invalidAgentId: "claw_v1_invalid_agent_id", + nonCanonicalString: "claw_v1_non_canonical_string", + emptyList: "claw_v1_empty_list", + invalidProfilePath: "claw_v1_invalid_profile_path", + unsafePath: "claw_v1_unsafe_path", + duplicateWorkspaceDestination: "claw_v1_duplicate_workspace_destination", + invalidAvatar: "claw_v1_invalid_avatar", + undeclaredAvatar: "claw_v1_undeclared_avatar", + invalidPackageReference: "claw_v1_invalid_package_reference", + invalidPackageVersion: "claw_v1_invalid_package_version", + duplicatePackage: "claw_v1_duplicate_package", + invalidMcpServerId: "claw_v1_invalid_mcp_server_id", + invalidMcpUrl: "claw_v1_invalid_mcp_url", + mcpUrlCredentials: "claw_v1_mcp_url_credentials", + unpinnedMcpPackage: "claw_v1_unpinned_mcp_package", + invalidToolFilter: "claw_v1_invalid_tool_filter", + duplicateToolFilter: "claw_v1_duplicate_tool_filter", + invalidEnvironmentKey: "claw_v1_invalid_environment_key", + blockedEnvironmentKey: "claw_v1_blocked_environment_key", + invalidEnvironmentReference: "claw_v1_invalid_environment_reference", + invalidTimeout: "claw_v1_invalid_timeout", + invalidCronJobId: "claw_v1_invalid_cron_job_id", + invalidCronSchedule: "claw_v1_invalid_cron_schedule", + invalidCronDelivery: "claw_v1_invalid_cron_delivery", + duplicateCronJob: "claw_v1_duplicate_cron_job", +} as const; +export type ClawManifestValidationCode = + (typeof CLAW_MANIFEST_VALIDATION_CODES)[keyof typeof CLAW_MANIFEST_VALIDATION_CODES]; +export type ClawManifestValidationIssue = { + code: ClawManifestValidationCode; + phase: typeof CLAW_MANIFEST_VALIDATION_PHASE; + path: string; + message: string; +}; const AGENT_ID_PATTERN = /^[a-z][a-z0-9_-]{0,63}$/; const EXACT_VERSION_PATTERN = @@ -138,124 +202,138 @@ const ENV_REFERENCE_PATTERN = /^\$\{[A-Z_][A-Z0-9_]*\}$/; const PACKAGE_NAME_PATTERN = /^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/; const WINDOWS_INVALID_PATH_CHARS = /[<>:"|?*]/; const WINDOWS_RESERVED_PATH_SEGMENT = /^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\..*)?$/i; +const UNICODE_CONTROL_CHARACTER = /\p{Cc}/u; const AVATAR_MAX_BYTES = 2 * 1024 * 1024; const AVATAR_MAX_DATA_URL_CHARS = 2_796_230; const AVATAR_DATA_URL_PATTERN = /^data:image\/[^,]*,/i; const AVATAR_EXTENSION_PATTERN = /\.(?:png|jpe?g|gif|webp|svg)$/i; const BASE64_PAYLOAD_PATTERN = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/; const PORTABLE_ENV_KEY_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/; -// Snapshot of OpenClaw's host-wide blocked process environment policy for v1 conformance. -const BLOCKED_PROCESS_ENV_KEYS = new Set([ - "NODE_OPTIONS", - "NODE_PATH", - "NODE_REDIRECT_WARNINGS", - "NODE_REPL_EXTERNAL_MODULE", - "NODE_REPL_HISTORY", - "NODE_V8_COVERAGE", - "PYTHONHOME", - "PYTHONPATH", - "PERL5LIB", - "PERL5OPT", - "RUBYLIB", - "RUBYOPT", - "BASHOPTS", - "BASH_ENV", - "ENV", - "KSH_ENV", - "BROWSER", - "GIT_ALLOW_PROTOCOL", - "GIT_EDITOR", - "GIT_EXTERNAL_DIFF", - "GIT_DIR", - "GIT_WORK_TREE", - "GIT_COMMON_DIR", - "GIT_EXEC_PATH", - "GIT_INDEX_FILE", - "GIT_OBJECT_DIRECTORY", - "GIT_ALTERNATE_OBJECT_DIRECTORIES", - "GIT_NAMESPACE", - "GIT_PROTOCOL_FROM_USER", - "GIT_SEQUENCE_EDITOR", - "GIT_TEMPLATE_DIR", - "GIT_SSL_NO_VERIFY", - "GIT_SSL_CAINFO", - "GIT_SSL_CAPATH", - "CC", - "CXX", - "CARGO_BUILD_RUSTC", - "CARGO_BUILD_RUSTC_WRAPPER", - "CARGO_BUILD_RUSTC_WORKSPACE_WRAPPER", - "CARGO_BUILD_RUSTDOC", - "RUSTC", - "RUSTC_WRAPPER", - "RUSTC_WORKSPACE_WRAPPER", - "RUSTDOC", - "CMAKE_C_COMPILER", - "CMAKE_CXX_COMPILER", - "SHELL", - "SHELLOPTS", - "PS4", - "GCONV_PATH", - "IFS", - "SSLKEYLOGFILE", - "JAVA_OPTS", - "JAVA_TOOL_OPTIONS", - "_JAVA_OPTIONS", - "JDK_JAVA_OPTIONS", - "PYTHONBREAKPOINT", - "DOTNET_STARTUP_HOOKS", - "DOTNET_ADDITIONAL_DEPS", - "FPATH", - "GLIBC_TUNABLES", - "MAVEN_OPTS", - "MAKE", - "MAKEFLAGS", - "MFLAGS", - "SBT_OPTS", - "GRADLE_OPTS", - "ANT_OPTS", - "HGRCPATH", - "HGEDITOR", - "HGMERGE", - "EXINIT", - "VIMINIT", - "MYVIMRC", - "GVIMINIT", - "LUA_INIT", - "LUA_INIT_5_1", - "LUA_INIT_5_2", - "LUA_INIT_5_3", - "LUA_INIT_5_4", - "EMACSLOADPATH", - "RUBYSHELL", - "GIT_HOOK_PATH", - "SVN_EDITOR", - "SVN_SSH", - "BZR_EDITOR", - "BZR_SSH", - "BZR_PLUGIN_PATH", - "SUDO_ASKPASS", - "JULIA_EDITOR", - "CONFIG_SITE", - "CONFIG_SHELL", - "CMAKE_TOOLCHAIN_FILE", - "CATALINA_OPTS", - "CORECLR_PROFILER", - "HELM_PLUGINS", - "PACKER_PLUGIN_PATH", - "VAGRANT_VAGRANTFILE", - "ERL_AFLAGS", - "ERL_FLAGS", - "ERL_ZFLAGS", - "ELIXIR_ERL_OPTIONS", - "R_ENVIRON", - "R_PROFILE", - "R_ENVIRON_USER", - "R_PROFILE_USER", - "TCLLIBPATH", - "HOSTALIASES", -]); -const BLOCKED_PROCESS_ENV_PREFIXES = ["DYLD_", "LD_", "BASH_FUNC_"] as const; +// Versioned compatibility artifact for the OpenClaw policy applied by the v1 consumer. +export const OPENCLAW_CLAW_HOST_ENV_POLICY_V1 = { + contractVersion: 1, + source: { + repository: "openclaw/openclaw", + commit: "f50a918af102b950721c1b380f7eb8af4e0389d1", + path: "src/infra/host-env-security-policy.json", + sha256: "4639dcfa157d4fa4c2fb84f8c5347ffe2252eb4ddb3d818afd7f87d68173b92b", + }, + blockedKeys: [ + "NODE_OPTIONS", + "NODE_PATH", + "NODE_REDIRECT_WARNINGS", + "NODE_REPL_EXTERNAL_MODULE", + "NODE_REPL_HISTORY", + "NODE_V8_COVERAGE", + "PYTHONHOME", + "PYTHONPATH", + "PERL5LIB", + "PERL5OPT", + "RUBYLIB", + "RUBYOPT", + "BASHOPTS", + "BASH_ENV", + "ENV", + "KSH_ENV", + "BROWSER", + "GIT_ALLOW_PROTOCOL", + "GIT_EDITOR", + "GIT_EXTERNAL_DIFF", + "GIT_DIR", + "GIT_WORK_TREE", + "GIT_COMMON_DIR", + "GIT_EXEC_PATH", + "GIT_INDEX_FILE", + "GIT_OBJECT_DIRECTORY", + "GIT_ALTERNATE_OBJECT_DIRECTORIES", + "GIT_NAMESPACE", + "GIT_PROTOCOL_FROM_USER", + "GIT_SEQUENCE_EDITOR", + "GIT_TEMPLATE_DIR", + "GIT_SSL_NO_VERIFY", + "GIT_SSL_CAINFO", + "GIT_SSL_CAPATH", + "CC", + "CPP", + "CXX", + "CARGO_BUILD_RUSTC", + "CARGO_BUILD_RUSTC_WRAPPER", + "CARGO_BUILD_RUSTC_WORKSPACE_WRAPPER", + "CARGO_BUILD_RUSTDOC", + "RUSTC", + "RUSTC_WRAPPER", + "RUSTC_WORKSPACE_WRAPPER", + "RUSTDOC", + "CMAKE_C_COMPILER", + "CMAKE_CXX_COMPILER", + "SHELL", + "SHELLOPTS", + "PS4", + "GCONV_PATH", + "IFS", + "SSLKEYLOGFILE", + "JAVA_OPTS", + "JAVA_TOOL_OPTIONS", + "_JAVA_OPTIONS", + "JDK_JAVA_OPTIONS", + "PYTHONBREAKPOINT", + "DOTNET_STARTUP_HOOKS", + "DOTNET_ADDITIONAL_DEPS", + "FPATH", + "GLIBC_TUNABLES", + "MAVEN_OPTS", + "MAKE", + "MAKEFLAGS", + "MFLAGS", + "SBT_OPTS", + "GRADLE_OPTS", + "ANT_OPTS", + "HGRCPATH", + "HGEDITOR", + "HGMERGE", + "EXINIT", + "VIMINIT", + "MYVIMRC", + "GVIMINIT", + "LUA_INIT", + "LUA_INIT_5_1", + "LUA_INIT_5_2", + "LUA_INIT_5_3", + "LUA_INIT_5_4", + "EMACSLOADPATH", + "RUBYSHELL", + "GIT_HOOK_PATH", + "SVN_EDITOR", + "SVN_SSH", + "BZR_EDITOR", + "BZR_SSH", + "BZR_PLUGIN_PATH", + "SUDO_ASKPASS", + "JULIA_EDITOR", + "CONFIG_SITE", + "CONFIG_SHELL", + "CMAKE_TOOLCHAIN_FILE", + "CATALINA_OPTS", + "CORECLR_PROFILER", + "HELM_PLUGINS", + "PACKER_PLUGIN_PATH", + "VAGRANT_VAGRANTFILE", + "ERL_AFLAGS", + "ERL_FLAGS", + "ERL_ZFLAGS", + "ELIXIR_ERL_OPTIONS", + "R_ENVIRON", + "R_PROFILE", + "R_ENVIRON_USER", + "R_PROFILE_USER", + "TCLLIBPATH", + "HOSTALIASES", + ], + blockedPrefixes: ["DYLD_", "LD_", "BASH_FUNC_"], +} as const; + +const BLOCKED_PROCESS_ENV_KEYS = new Set(OPENCLAW_CLAW_HOST_ENV_POLICY_V1.blockedKeys); +const BLOCKED_PROCESS_ENV_PREFIXES = OPENCLAW_CLAW_HOST_ENV_POLICY_V1.blockedPrefixes; function isStrictNonEmpty(value: string): boolean { return value.length > 0 && value === value.trim(); @@ -286,7 +364,7 @@ function isSafePackagePath(value: string): boolean { segment !== "." && segment !== ".." && !WINDOWS_INVALID_PATH_CHARS.test(segment) && - !Array.from(segment).some((character) => character.charCodeAt(0) <= 0x1f) && + !UNICODE_CONTROL_CHARACTER.test(segment) && !segment.endsWith(".") && !segment.endsWith(" ") && !WINDOWS_RESERVED_PATH_SEGMENT.test(segment), @@ -294,7 +372,7 @@ function isSafePackagePath(value: string): boolean { } function portablePathKey(value: string): string { - return value.replaceAll("\\", "/").normalize("NFC").toLowerCase(); + return caseFold(value.replaceAll("\\", "/").normalize("NFC")); } function isPortableAvatar(value: string): boolean { @@ -338,14 +416,16 @@ function packageManagerArtifacts(command: string, args: string[]): string[] | un ?.replace(/\.(?:cmd|exe)$/i, "") .toLowerCase(); let start = 0; + let scansOptionsAfterPositional = false; if (executable === "npm") { - if (args[0] !== "exec" && args[0] !== "x") return [""]; + if (args[0] !== "exec" && args[0] !== "x") return undefined; start = 1; + scansOptionsAfterPositional = true; } else if (executable === "bun") { - if (args[0] !== "x") return [""]; + if (args[0] !== "x") return undefined; start = 1; } else if (executable === "pnpm" || executable === "yarn") { - if (args[0] !== "dlx") return [""]; + if (args[0] !== "dlx") return undefined; start = 1; } else if (executable !== "npx" && executable !== "pnpx" && executable !== "bunx") { return undefined; @@ -356,7 +436,7 @@ function packageManagerArtifacts(command: string, args: string[]): string[] | un const value = args[index]; if (!value) continue; if (value === "--") { - positional = args[index + 1] ?? ""; + positional ??= args[index + 1] ?? ""; break; } if (value === "-p" || value === "--package") { @@ -370,7 +450,7 @@ function packageManagerArtifacts(command: string, args: string[]): string[] | un } if (positional === undefined && !value.startsWith("-")) { positional = value; - break; + if (!scansOptionsAfterPositional) break; } } return selected.length > 0 ? selected : [positional ?? ""]; @@ -395,11 +475,22 @@ function isPackageManagerArtifactPinned(command: string, args: string[]): boolea }); } +function validationIssue( + code: ClawManifestValidationCode, + path: string, + message: string, +): ClawManifestValidationIssue { + return { code, phase: CLAW_MANIFEST_VALIDATION_PHASE, path, message }; +} + function arkIssues(errors: ArkErrors): ClawManifestValidationIssue[] { - return Array.from(errors, (error) => ({ - path: error.path.length > 0 ? `$.${error.path.join(".")}` : "$", - message: error.description ?? "Invalid value.", - })); + return Array.from(errors, (error) => + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.invalidManifestShape, + error.path.length > 0 ? `$.${error.path.join(".")}` : "$", + error.description ?? "Manifest must match the strict Claw v1 shape.", + ), + ); } function pushNonEmpty( @@ -408,7 +499,13 @@ function pushNonEmpty( value: string | undefined, ): void { if (value !== undefined && !isStrictNonEmpty(value)) { - issues.push({ path, message: "Must be non-empty without leading or trailing whitespace." }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.nonCanonicalString, + path, + "Must be non-empty without leading or trailing whitespace.", + ), + ); } } @@ -419,7 +516,13 @@ function pushNonEmptyArray( requireEntry: boolean, ): void { if (requireEntry && values !== undefined && values.length === 0) { - issues.push({ path, message: "Must contain at least one value." }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.emptyList, + path, + "Must contain at least one value.", + ), + ); } for (const [index, value] of (values ?? []).entries()) { pushNonEmpty(issues, `${path}.${index}`, value); @@ -434,13 +537,22 @@ export function validateClawManifest( const issues: ClawManifestValidationIssue[] = []; if (!AGENT_ID_PATTERN.test(parsed.agent.id)) { - issues.push({ path: "$.agent.id", message: "Invalid portable agent id." }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.invalidAgentId, + "$.agent.id", + "Invalid portable agent id.", + ), + ); } pushNonEmpty(issues, "$.agent.name", parsed.agent.name); pushNonEmpty(issues, "$.agent.description", parsed.agent.description); for (const field of ["name", "theme", "emoji", "avatar"] as const) { pushNonEmpty(issues, `$.agent.identity.${field}`, parsed.agent.identity?.[field]); } + for (const key of Object.keys(parsed.metadata ?? {})) { + pushNonEmpty(issues, `$.metadata.${key}`, key); + } const openClawProfilePath = parsed.metadata?.["openclaw.config"]; if ( openClawProfilePath !== undefined && @@ -448,60 +560,81 @@ export function validateClawManifest( !isSafePackagePath(openClawProfilePath) || !/\.ya?ml$/i.test(openClawProfilePath)) ) { - issues.push({ - path: "$.metadata.openclaw.config", - message: "Must reference a forward-slash package-relative .yml or .yaml file.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.invalidProfilePath, + "$.metadata.openclaw.config", + "Must reference a forward-slash package-relative .yml or .yaml file.", + ), + ); } const workspaceTargets = new Set(); for (const name of CLAW_BOOTSTRAP_FILE_NAMES) { const source = parsed.workspace?.bootstrapFiles?.[name]?.source; if (source === undefined) continue; if (!isSafePackagePath(source)) { - issues.push({ - path: `$.workspace.bootstrapFiles.${name}.source`, - message: "Must be a safe package-relative path.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.unsafePath, + `$.workspace.bootstrapFiles.${name}.source`, + "Must be a safe package-relative path.", + ), + ); } workspaceTargets.add(portablePathKey(name)); } for (const [index, file] of (parsed.workspace?.files ?? []).entries()) { if (!isSafePackagePath(file.source)) { - issues.push({ - path: `$.workspace.files.${index}.source`, - message: "Must be a safe package-relative path.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.unsafePath, + `$.workspace.files.${index}.source`, + "Must be a safe package-relative path.", + ), + ); } if (!isSafePackagePath(file.path)) { - issues.push({ - path: `$.workspace.files.${index}.path`, - message: "Must be a safe package-relative path.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.unsafePath, + `$.workspace.files.${index}.path`, + "Must be a safe package-relative path.", + ), + ); } const destinationKey = portablePathKey(file.path); if (conflictsWithWorkspaceTarget(workspaceTargets, destinationKey)) { - issues.push({ - path: `$.workspace.files.${index}.path`, - message: "Workspace destination is declared more than once.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.duplicateWorkspaceDestination, + `$.workspace.files.${index}.path`, + "Workspace destination is declared more than once.", + ), + ); } workspaceTargets.add(destinationKey); } const avatar = parsed.agent.identity?.avatar; if (avatar !== undefined) { if (!isPortableAvatar(avatar)) { - issues.push({ - path: "$.agent.identity.avatar", - message: "Must be a bounded image data URL or managed workspace-relative image path.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.invalidAvatar, + "$.agent.identity.avatar", + "Must be a bounded image data URL or managed workspace-relative image path.", + ), + ); } else if ( !AVATAR_DATA_URL_PATTERN.test(avatar) && !workspaceTargets.has(portablePathKey(avatar)) ) { - issues.push({ - path: "$.agent.identity.avatar", - message: "Workspace-relative avatar must match a workspace.files destination.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.undeclaredAvatar, + "$.agent.identity.avatar", + "Workspace-relative avatar must match a workspace.files destination.", + ), + ); } } @@ -509,33 +642,45 @@ export function validateClawManifest( for (const [index, pkg] of (parsed.packages ?? []).entries()) { pushNonEmpty(issues, `$.packages.${index}.ref`, pkg.ref); if (!PACKAGE_NAME_PATTERN.test(pkg.ref)) { - issues.push({ - path: `$.packages.${index}.ref`, - message: "Must be a lowercase ClawHub package name.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.invalidPackageReference, + `$.packages.${index}.ref`, + "Must be a lowercase ClawHub package name.", + ), + ); } if (!EXACT_VERSION_PATTERN.test(pkg.version)) { - issues.push({ - path: `$.packages.${index}.version`, - message: "Must be an exact semantic version.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.invalidPackageVersion, + `$.packages.${index}.version`, + "Must be an exact semantic version.", + ), + ); } const key = `${pkg.kind}:${pkg.source}:${pkg.ref.toLowerCase()}`; if (packageKeys.has(key)) { - issues.push({ - path: `$.packages.${index}`, - message: "Package is declared more than once.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.duplicatePackage, + `$.packages.${index}`, + "Package is declared more than once.", + ), + ); } packageKeys.add(key); } for (const [name, server] of Object.entries(parsed.mcpServers ?? {})) { if (!AGENT_ID_PATTERN.test(name)) { - issues.push({ - path: `$.mcpServers.${name}`, - message: "Invalid MCP server name.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.invalidMcpServerId, + `$.mcpServers.${name}`, + "Invalid MCP server name.", + ), + ); } if ("url" in server) { pushNonEmpty(issues, `$.mcpServers.${name}.url`, server.url); @@ -546,26 +691,35 @@ export function validateClawManifest( throw new Error("protocol"); } if (url.username || url.password || url.hash) { - issues.push({ - path: `$.mcpServers.${name}.url`, - message: "Must not contain embedded credentials or fragments.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.mcpUrlCredentials, + `$.mcpServers.${name}.url`, + "Must not contain embedded credentials or fragments.", + ), + ); } } catch { - issues.push({ - path: `$.mcpServers.${name}.url`, - message: "Must use HTTPS, except HTTP on an exact loopback host.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.invalidMcpUrl, + `$.mcpServers.${name}.url`, + "Must use HTTPS, except HTTP on an exact loopback host.", + ), + ); } } if ("command" in server) { pushNonEmpty(issues, `$.mcpServers.${name}.command`, server.command); pushNonEmptyArray(issues, `$.mcpServers.${name}.args`, server.args, false); if (isPackageManagerArtifactPinned(server.command, server.args ?? []) === false) { - issues.push({ - path: `$.mcpServers.${name}.args`, - message: "Package-manager MCP commands must select one exact immutable package version.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.unpinnedMcpPackage, + `$.mcpServers.${name}.args`, + "Package-manager MCP commands must select one exact immutable package version.", + ), + ); } } pushNonEmptyArray( @@ -584,16 +738,22 @@ export function validateClawManifest( const seen = new Set(); for (const [index, entry] of (server.toolFilter?.[field] ?? []).entries()) { if (entry.includes("?") || entry.includes("[") || entry.includes("]")) { - issues.push({ - path: `$.mcpServers.${name}.toolFilter.${field}.${index}`, - message: "Tool filters support only exact names and * wildcards.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.invalidToolFilter, + `$.mcpServers.${name}.toolFilter.${field}.${index}`, + "Tool filters support only exact names and * wildcards.", + ), + ); } if (seen.has(entry)) { - issues.push({ - path: `$.mcpServers.${name}.toolFilter.${field}.${index}`, - message: "Tool filter entries must be unique.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.duplicateToolFilter, + `$.mcpServers.${name}.toolFilter.${field}.${index}`, + "Tool filter entries must be unique.", + ), + ); } seen.add(entry); } @@ -602,49 +762,67 @@ export function validateClawManifest( for (const [key, envValue] of Object.entries(server.env ?? {})) { pushNonEmpty(issues, `$.mcpServers.${name}.env`, key); if (!PORTABLE_ENV_KEY_PATTERN.test(key)) { - issues.push({ - path: `$.mcpServers.${name}.env.${key}`, - message: "Invalid portable environment key.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.invalidEnvironmentKey, + `$.mcpServers.${name}.env.${key}`, + "Invalid portable environment key.", + ), + ); } if (isBlockedProcessEnvKey(key)) { - issues.push({ - path: `$.mcpServers.${name}.env.${key}`, - message: "Environment key is blocked by the spawned-process safety policy.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.blockedEnvironmentKey, + `$.mcpServers.${name}.env.${key}`, + "Environment key is blocked by the spawned-process safety policy.", + ), + ); } if (!ENV_REFERENCE_PATTERN.test(envValue)) { - issues.push({ - path: `$.mcpServers.${name}.env.${key}`, - message: "Must be an unresolved ${ENV_VAR} reference.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.invalidEnvironmentReference, + `$.mcpServers.${name}.env.${key}`, + "Must be an unresolved ${ENV_VAR} reference.", + ), + ); } } } if (server.timeout !== undefined && (!Number.isFinite(server.timeout) || server.timeout <= 0)) { - issues.push({ - path: `$.mcpServers.${name}.timeout`, - message: "Must be positive.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.invalidTimeout, + `$.mcpServers.${name}.timeout`, + "Must be positive.", + ), + ); } if ( server.connectTimeout !== undefined && (!Number.isFinite(server.connectTimeout) || server.connectTimeout <= 0) ) { - issues.push({ - path: `$.mcpServers.${name}.connectTimeout`, - message: "Must be positive.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.invalidTimeout, + `$.mcpServers.${name}.connectTimeout`, + "Must be positive.", + ), + ); } } const cronIds = new Set(); for (const [index, job] of (parsed.cronJobs ?? []).entries()) { if (!AGENT_ID_PATTERN.test(job.id)) { - issues.push({ - path: `$.cronJobs.${index}.id`, - message: "Invalid cron job id.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.invalidCronJobId, + `$.cronJobs.${index}.id`, + "Invalid cron job id.", + ), + ); } pushNonEmpty(issues, `$.cronJobs.${index}.name`, job.name); pushNonEmpty(issues, `$.cronJobs.${index}.schedule.cron`, job.schedule.cron); @@ -655,28 +833,38 @@ export function validateClawManifest( const cron = new Cron(job.schedule.cron.trim(), { timezone: job.schedule.timezone.trim(), catch: false, + paused: true, }); if (!cron.nextRun(new Date())) throw new Error("No future run"); } catch { - issues.push({ - path: `$.cronJobs.${index}.schedule`, - message: "Must contain a valid cron expression and timezone.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.invalidCronSchedule, + `$.cronJobs.${index}.schedule`, + "Must contain a valid cron expression and timezone.", + ), + ); } if ( (job.delivery?.mode === "none" && job.delivery.channel !== undefined) || (job.delivery?.mode === "announce" && job.delivery.channel !== "last") ) { - issues.push({ - path: `$.cronJobs.${index}.delivery`, - message: 'Must be { mode: "none" } or { mode: "announce", channel: "last" }.', - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.invalidCronDelivery, + `$.cronJobs.${index}.delivery`, + 'Must be { mode: "none" } or { mode: "announce", channel: "last" }.', + ), + ); } if (cronIds.has(job.id)) { - issues.push({ - path: `$.cronJobs.${index}.id`, - message: "Cron job id is declared more than once.", - }); + issues.push( + validationIssue( + CLAW_MANIFEST_VALIDATION_CODES.duplicateCronJob, + `$.cronJobs.${index}.id`, + "Cron job id is declared more than once.", + ), + ); } cronIds.add(job.id); } diff --git a/specs/claws.md b/specs/claws.md index d6d48feac9..ea8634f1a6 100644 --- a/specs/claws.md +++ b/specs/claws.md @@ -1,11 +1,16 @@ # Experimental Claw packages ClawHub's Claw support implements the registry side of -[OpenClaw RFC #27](https://github.com/openclaw/rfcs/pull/27). A Claw package -describes one complete new agent using the grouped `CLAW.md` schema. ClawHub -owns publication, ownership, discovery, package detail APIs, and hosted feed -export. OpenClaw remains authoritative for local planning, consent, mutation, -provenance, update, and removal. +[OpenClaw RFC #27](https://github.com/openclaw/rfcs/pull/27) plus the experimental +portable-core addendum in [RFC #48](https://github.com/openclaw/rfcs/pull/48). A +Claw package describes one complete new agent using the grouped `CLAW.md` +schema. ClawHub owns publication, ownership, discovery, package detail APIs, +and hosted feed export. OpenClaw remains authoritative for local planning, +consent, mutation, provenance, update, and removal. + +The YAML frontmatter is the portable manifest. The `CLAW.md` body remains +documentation-only in the current contract and may be empty; it does not imply +or replace any managed workspace file. The portable agent object carries only identity and purpose. Harness-specific settings live in package-local profiles addressed through opaque string @@ -46,3 +51,20 @@ trimmed into validity, MCP package selectors must resolve exact versions, process environment keys follow OpenClaw's host-wide safety policy, and tool filters accept only exact names plus `*` wildcards. Registry validation must not accept a declaration that the applying OpenClaw client rejects. + +`OPENCLAW_CLAW_HOST_ENV_POLICY_V1` is the versioned cross-repository +compatibility artifact for that environment policy. It records the exact +OpenClaw source path, consumer commit, and source-file SHA-256; ClawHub derives +its blocked-key lookups from the artifact and runs every key/prefix as a +conformance vector. A policy change requires a new reviewed artifact version or +an intentional update of the existing experimental v1 contract. + +Manifest rejections expose stable `claw_v1_*` diagnostic codes with phase +`schema`, plus the field path and human-readable message. Consumers may branch +on the code and phase; messages are explanatory text rather than identifiers. + +The durable version document stores only the bounded manifest summary. Its +field structure is built from `createClawManifestSummarySchema` in both the +public ArkType contract and the Convex storage validator. Convex cannot express +the summary text-length caps, so publication must validate or derive summaries +through the shared schema before storage. From cf749a4557bf249fbb2fa73f88bf8394a8ba0a05 Mon Sep 17 00:00:00 2001 From: Patrick Erichsen Date: Fri, 24 Jul 2026 16:44:42 -0500 Subject: [PATCH 6/6] fix(schema): reject ambiguous runner options --- packages/schema/dist/claws.js | 4 ++++ packages/schema/dist/claws.js.map | 2 +- packages/schema/src/claws.test.ts | 12 ++++++++++++ packages/schema/src/claws.ts | 2 ++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/schema/dist/claws.js b/packages/schema/dist/claws.js index 4d42a055da..077b2c6129 100644 --- a/packages/schema/dist/claws.js +++ b/packages/schema/dist/claws.js @@ -399,6 +399,10 @@ function packageManagerArtifacts(command, args) { selected.push(value.slice("--package=".length)); continue; } + if (value === "-y" || value === "--yes") + continue; + if (value.startsWith("-")) + return [""]; if (positional === undefined && !value.startsWith("-")) { positional = value; if (!scansOptionsAfterPositional) diff --git a/packages/schema/dist/claws.js.map b/packages/schema/dist/claws.js.map index 3e1f85f10d..69d09f82ca 100644 --- a/packages/schema/dist/claws.js.map +++ b/packages/schema/dist/claws.js.map @@ -1 +1 @@ -{"version":3,"file":"claws.js","sourceRoot":"","sources":["../src/claws.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"claws.js","sourceRoot":"","sources":["../src/claws.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/schema/src/claws.test.ts b/packages/schema/src/claws.test.ts index dfb3e59514..e591ae0207 100644 --- a/packages/schema/src/claws.test.ts +++ b/packages/schema/src/claws.test.ts @@ -560,6 +560,18 @@ describe("Claw manifest contract", () => { ).toBe(true); }); + it.each([ + ["npx", ["--cache", "safe@1.0.0", "unsafe@latest"]], + ["npm", ["exec", "--cache", "safe@1.0.0", "unsafe@latest"]], + ] as const)("fails closed on unrecognized %s options before the package", (command, args) => { + expect( + validateClawManifest({ + ...fixture, + mcpServers: { unsafe: { command, args: [...args] } }, + }).ok, + ).toBe(false); + }); + it.each([ ["npm", ["run", "serve"]], ["bun", ["run", "serve"]], diff --git a/packages/schema/src/claws.ts b/packages/schema/src/claws.ts index 64b6b78146..268ae296de 100644 --- a/packages/schema/src/claws.ts +++ b/packages/schema/src/claws.ts @@ -448,6 +448,8 @@ function packageManagerArtifacts(command: string, args: string[]): string[] | un selected.push(value.slice("--package=".length)); continue; } + if (value === "-y" || value === "--yes") continue; + if (value.startsWith("-")) return [""]; if (positional === undefined && !value.startsWith("-")) { positional = value; if (!scansOptionsAfterPositional) break;