/** * OpenClaw Tool Semantic Declaration — PRI-634-F Phase 1, revised in R2 * * PURPOSE: the OpenClaw host layer of the Tool Semantic Registry. The raw * tool names derive from the ONE existing tool vocabulary in this package * (constants/tools.ts) so the host never maintains a second name list; only * the raw→canonicalKind axis is declared here. * * R2 REVIEW FIX (semantic resolvability ≠ host existence): the declaration * covers ONLY tools the OpenClaw hook actually ROUTES to the RuleHost gate * (write / bash / agent families — hooks/gate.ts returns early for anything * else). `hasHostTool` on the resulting registry therefore means "a rule * matching this name can really fire in OpenClaw production". Read/search * family names stay OUT: they are real OpenClaw tools but never reach the * gate, so rules declared against them would pass replay and silently never * trigger. Their semantic classification still resolves via the core * baseline (read_file/grep/glob/...) where history facts need it. * * Ownership (SPEC §5): core owns CanonicalKind + the host-neutral baseline * (generic LLM vocabulary); THIS module owns the OpenClaw raw tool names. * buildToolSemanticRegistry layers host mappings over the baseline (host wins * on conflict). * * Consumed by: * - the internalization auto-consumer cycle (activation-gate replay parity) * - hooks/gate.ts (production action snapshots) * - core/rule-context-assembler.ts (production RuleContextV2 facts) * - host-runtime/openclaw-host-runtime.ts (shared production gate) * * Fail loud at module load if the derived declaration is invalid — a broken * static declaration is a programming error, not a runtime condition (rc-3). */ import { type ToolSemanticMappingV1, type ToolSemanticRegistry } from '@principles/core/runtime-v2'; export declare const OPENCLAW_TOOL_SEMANTIC_MAPPINGS: readonly ToolSemanticMappingV1[]; /** The OpenClaw ToolSemanticRegistry — ONE instance shared by replay and production. */ export declare const OPENCLAW_TOOL_SEMANTICS: ToolSemanticRegistry;