import { jsonObjectSchema } from "../domain/jsonValue.js"; import { enhancedInputSchemas } from "./enhancedInputs.js"; import { TOOL_EXAMPLE_OVERRIDES } from "./toolContractExamples.js"; import type { ToolContract } from "./toolContractTypes.js"; import { toolContractMetadata } from "./toolEffects.js"; import { enhancedOutputSchemas } from "./toolOutputSchemaGroups.js"; import { requireOutputSchema } from "./toolOutputSchemaPrimitives.js"; type FunctionWorkflowName = "analyze_function" | "inspect_native_api"; const functionWorkflow = ( name: Name, description: string, ) => { const inputSchema = enhancedInputSchemas[name]; const outputSchema = requireOutputSchema(enhancedOutputSchemas, name); return { name, ...toolContractMetadata(name), description, kind: "enhanced", requiresActiveTarget: true, inputSchema, outputSchema, examples: [ { title: `Example ${name.replaceAll("_", " ")} request`, input: jsonObjectSchema.parse( inputSchema.parse(TOOL_EXAMPLE_OVERRIDES[name] ?? {}), ), }, ], } satisfies ToolContract; }; /** Function dossier and native API reconstruction workflow contracts. */ export const FUNCTION_WORKFLOW_TOOL_CONTRACTS = [ functionWorkflow( "analyze_function", "Build a dossier for one native function identified by symbol or provider-returned address. Returns identity with complete inclusive analyzed body ranges or explicit unknown, provider-specific pseudocode and assembly, comments, calls, references, referenced strings/names, local CFG blocks, and available native API boundary observations. Ghidra terminal-call assumptions that may cut the analyzed body are reported in limitations with available callee identities.", ), functionWorkflow( "inspect_native_api", "Analyze a native API boundary in one function identified by symbol or provider-returned address. Returns confidence, evidence, jump-table dispatch/data/case mappings, separately evidenced default targets, unsupported branches, and residual unknowns. Null case values mean unresolved cases, never a known default.", ), ] as const satisfies readonly ToolContract[];