@codmir/contracts 0.1.0 ā 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +168 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +425 -1
- package/dist/index.d.ts +425 -1
- package/dist/index.js +150 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schema.ts","../src/grace.ts","../src/templates.ts","../src/conditions.ts","../src/validation.ts","../src/examples/ticket-triage.ts","../src/examples/code-review.ts","../src/examples/pr-analysis.ts","../src/voice/create-ticket.ts","../src/voice/search-codebase.ts","../src/voice/deploy-preview.ts","../src/voice/save-note.ts","../src/voice/registry.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @fileoverview\n * Codmir Contract Schema v1\n *\n * Contracts are versioned, JSON-serializable, and deterministic.\n * They define what autonomous agents are allowed to do, their triggers,\n * permissions, steps, and execution policies.\n */\n\n// ============================================================================\n// Primitive Types\n// ============================================================================\n\nexport type IsoDateString = string;\nexport type ContractId = string;\nexport type ContractVersion = string;\nexport type StepId = string;\nexport type RunId = string;\nexport type EventName = string;\n\nexport type JsonValue =\n | string\n | number\n | boolean\n | null\n | { [k: string]: JsonValue }\n | JsonValue[];\n\n// ============================================================================\n// Permissions\n// ============================================================================\n\n/**\n * Permission types that a contract can request.\n * Engine/Policy adapter enforces these before any action.\n */\nexport type Permission =\n | { kind: \"event:emit\"; pattern: string }\n | { kind: \"event:read\"; pattern: string }\n | { kind: \"storage:read\"; scope: string }\n | { kind: \"storage:write\"; scope: string }\n | { kind: \"repo:read\"; scope: string }\n | { kind: \"repo:write\"; scope: string }\n | { kind: \"http:request\"; domains: string[] }\n | { kind: \"secrets:read\"; keys: string[] }\n | { kind: \"llm:invoke\"; models?: string[] };\n\n// ============================================================================\n// Triggers\n// ============================================================================\n\n/**\n * Contract trigger definition.\n * Specifies which events can start a new run of this contract.\n */\nexport type ContractTrigger = {\n type: \"event\";\n /**\n * Event pattern support:\n * - exact match: \"ticket.created\"\n * - wildcard: \"ticket.*\"\n */\n event: string;\n /**\n * Optional filter conditions on event payload.\n * Engine evaluates these deterministically.\n */\n where?: Record<string, JsonValue>;\n};\n\n// ============================================================================\n// Retry & Timeout Policies\n// ============================================================================\n\nexport type RetryPolicy = {\n maxAttempts: number;\n backoffMs: number;\n backoffMultiplier?: number;\n};\n\nexport type StepTimeout = {\n /** Hard timeout in milliseconds */\n ms: number;\n};\n\n// ============================================================================\n// Condition Expressions\n// ============================================================================\n\n/**\n * Deterministic condition expression for branching and step guards.\n * Evaluated against run context (JSON-like object).\n */\nexport type ConditionExpr =\n | { op: \"eq\"; path: string; value: JsonValue }\n | { op: \"neq\"; path: string; value: JsonValue }\n | { op: \"gt\"; path: string; value: number }\n | { op: \"gte\"; path: string; value: number }\n | { op: \"lt\"; path: string; value: number }\n | { op: \"lte\"; path: string; value: number }\n | { op: \"and\"; exprs: ConditionExpr[] }\n | { op: \"or\"; exprs: ConditionExpr[] }\n | { op: \"not\"; expr: ConditionExpr }\n | { op: \"exists\"; path: string }\n | { op: \"contains\"; path: string; value: string }\n | { op: \"startsWith\"; path: string; value: string }\n | { op: \"endsWith\"; path: string; value: string };\n\n// ============================================================================\n// Step Types\n// ============================================================================\n\nexport type StepKind = \"task\" | \"llm\" | \"emit\" | \"wait\" | \"branch\" | \"transform\" | \"approval\" | \"skill\" | \"audit\";\n\nexport type StepBase = {\n id: StepId;\n name: string;\n kind: StepKind;\n timeout?: StepTimeout;\n retry?: RetryPolicy;\n /**\n * If present, the step is skipped unless condition resolves true.\n * Condition must be deterministic (based on run context).\n */\n if?: ConditionExpr;\n /**\n * Next step pointer. Some step kinds may override this (branch/wait).\n */\n next?: StepId | null;\n /**\n * Optional description for documentation/debugging.\n */\n description?: string;\n};\n\n/**\n * Task step - executes a named task in runtime (Railway).\n */\nexport type TaskStep = StepBase & {\n kind: \"task\";\n /**\n * A runtime-registered task name, e.g. \"analyze-ticket\", \"apply-patch\".\n */\n task: string;\n /**\n * Inputs are pulled from run context (event payload + accumulated outputs).\n * Engine resolves {{path}} templates deterministically.\n */\n input: Record<string, JsonValue>;\n /**\n * Where to store the step output in run context.\n * Example: \"steps.analyzeTicket\"\n */\n saveAs?: string;\n};\n\n/**\n * LLM step - calls intelligence adapter.\n */\nexport type LlmStep = StepBase & {\n kind: \"llm\";\n model?: string;\n /**\n * Messages or prompt template. Keep JSON-serializable.\n */\n prompt: Record<string, JsonValue>;\n /**\n * Where to store the LLM response in run context.\n */\n saveAs?: string;\n /**\n * Optional system prompt.\n */\n systemPrompt?: string;\n /**\n * Temperature for generation (0-1).\n */\n temperature?: number;\n /**\n * Max tokens for response.\n */\n maxTokens?: number;\n};\n\n/**\n * Emit step - emits an event to the event bus.\n */\nexport type EmitStep = StepBase & {\n kind: \"emit\";\n event: EventName;\n payload: Record<string, JsonValue>;\n};\n\n/**\n * Wait step - waits for an external event to arrive.\n */\nexport type WaitStep = StepBase & {\n kind: \"wait\";\n /**\n * Wait for a specific event name/pattern to arrive.\n * When matched, engine stores it and proceeds.\n */\n event: string;\n /**\n * Where to store the received event payload in run context.\n */\n saveEventAs?: string;\n /**\n * Alternative next step if timeout is reached.\n */\n nextOnTimeout?: StepId | null;\n};\n\n/**\n * Branch step - conditional branching based on run context.\n */\nexport type BranchStep = StepBase & {\n kind: \"branch\";\n branches: Array<{\n when: ConditionExpr;\n next: StepId;\n }>;\n defaultNext: StepId;\n};\n\n/**\n * Transform step - pure data transformation within run context.\n */\nexport type TransformStep = StepBase & {\n kind: \"transform\";\n /**\n * Transformations to apply to run context.\n * Each key is a destination path, value is a template or expression.\n */\n transforms: Record<string, JsonValue>;\n};\n\n/**\n * Approval step - human-in-the-loop gate (Overseer pattern).\n * Pauses execution until approved/denied by authorized actor.\n */\nexport type ApprovalStep = StepBase & {\n kind: \"approval\";\n /**\n * Human-readable description of what is being approved.\n */\n prompt: string;\n /**\n * Users/roles who can approve this step.\n */\n approvers?: string[];\n /**\n * Next step if approved.\n */\n nextOnApproved: StepId;\n /**\n * Next step if denied (optional - run fails if not specified).\n */\n nextOnDenied?: StepId | null;\n /**\n * Timeout behavior - defaults to deny.\n */\n timeoutAction?: \"deny\" | \"approve\" | \"fail\";\n /**\n * Context data to show the approver.\n */\n context?: Record<string, JsonValue>;\n};\n\n/**\n * Skill step - executes a fine-tuned skill (Claude Code integration).\n */\nexport type SkillStep = StepBase & {\n kind: \"skill\";\n /**\n * ID of the skill to execute.\n * @example \"tickets.plan\", \"code.review\", \"tests.generate\"\n */\n skillId: string;\n /**\n * Input to pass to the skill (templates resolved from run context).\n */\n input: Record<string, JsonValue>;\n /**\n * Where to save skill output in run context.\n */\n saveAs?: string;\n /**\n * Next step after skill completes.\n */\n next?: StepId | null;\n};\n\n/**\n * Audit step - audits code changes with AI analysis (Governor pattern).\n * Fetches changes between commits, analyzes with full context, generates findings.\n */\nexport type AuditStep = StepBase & {\n kind: \"audit\";\n /**\n * Target repository (path or URL).\n */\n repository: string;\n /**\n * From commit reference (SHA, tag, or branch).\n * Templates allowed: {{event.payload.baseCommit}}\n */\n fromCommit: string;\n /**\n * To commit reference (SHA, tag, or branch).\n * Templates allowed: {{event.payload.headCommit}}\n */\n toCommit: string;\n /**\n * Include conversation context in analysis.\n */\n includeConversation?: boolean;\n /**\n * Include AI reasoning context in analysis.\n */\n includeReasoning?: boolean;\n /**\n * Minimum severity to report.\n */\n minSeverity?: \"critical\" | \"high\" | \"medium\" | \"low\" | \"info\";\n /**\n * Auto-approve if no issues above threshold.\n */\n autoApproveThreshold?: \"critical\" | \"high\" | \"medium\" | \"low\";\n /**\n * Where to save audit result in run context.\n */\n saveAs?: string;\n /**\n * Next step after audit completes.\n */\n next?: StepId | null;\n /**\n * Next step if audit fails or rejects.\n */\n nextOnReject?: StepId | null;\n};\n\nexport type ContractStep =\n | TaskStep\n | LlmStep\n | EmitStep\n | WaitStep\n | BranchStep\n | TransformStep\n | ApprovalStep\n | SkillStep\n | AuditStep;\n\n// ============================================================================\n// Execution Hints (for Voice/Realtime callers)\n// ============================================================================\n\n/**\n * Expected duration category for smart sync/async routing.\n */\nexport type ExpectedDuration = \"instant\" | \"quick\" | \"medium\" | \"long\";\n\n/**\n * Execution mode preference.\n */\nexport type ExecutionMode = \"sync\" | \"async\" | \"auto\";\n\n/**\n * Execution hints for realtime/voice callers.\n * Helps the engine decide whether to wait for completion or return immediately.\n */\nexport type ExecutionHints = {\n /**\n * Expected duration category for smart routing:\n * - instant: < 2s (DB write, simple API call)\n * - quick: 2-30s (external API, light processing)\n * - medium: 30s-5min (code analysis, file operations)\n * - long: > 5min (deployments, heavy computation)\n */\n expectedDuration: ExpectedDuration;\n\n /**\n * Override: max milliseconds voice/realtime callers should wait.\n * Default is derived from expectedDuration.\n */\n syncThreshold?: number;\n\n /**\n * Preferred execution mode:\n * - sync: Caller waits for result (blocking)\n * - async: Fire-and-forget, notify via events\n * - auto: Engine decides based on expectedDuration (default)\n */\n mode?: ExecutionMode;\n\n /**\n * Can the caller interrupt/cancel mid-execution?\n */\n interruptible?: boolean;\n\n /**\n * Human-friendly message for async acknowledgment.\n * Example: \"I'm deploying that now, I'll let you know when it's ready.\"\n */\n asyncAckMessage?: string;\n};\n\n/**\n * Default sync thresholds per duration category (in milliseconds).\n */\nexport const DURATION_SYNC_THRESHOLDS: Record<ExpectedDuration, number> = {\n instant: 5000, // 5 seconds\n quick: 30000, // 30 seconds\n medium: 120000, // 2 minutes\n long: 300000, // 5 minutes (but usually async)\n};\n\n// ============================================================================\n// Contract Limits\n// ============================================================================\n\nexport type ContractLimits = {\n /**\n * Total run time cap enforced by engine.\n */\n maxRunMs: number;\n /**\n * Maximum number of steps executed to avoid infinite loops.\n */\n maxSteps: number;\n /**\n * Maximum LLM invocations per run.\n */\n maxLlmCalls?: number;\n /**\n * Maximum total tokens consumed per run.\n */\n maxTokens?: number;\n};\n\n// ============================================================================\n// Contract Outputs\n// ============================================================================\n\nexport type ContractOutputs = {\n /**\n * Events emitted at run completion (success).\n */\n onCompleted?: Array<{ event: EventName; payload: Record<string, JsonValue> }>;\n /**\n * Events emitted at run failure.\n */\n onFailed?: Array<{ event: EventName; payload: Record<string, JsonValue> }>;\n /**\n * Events emitted when run is cancelled.\n */\n onCancelled?: Array<{ event: EventName; payload: Record<string, JsonValue> }>;\n};\n\n// ============================================================================\n// Main Contract Type\n// ============================================================================\n\n/**\n * Codmir Contract v1\n *\n * A contract is a declarative agreement describing:\n * - What the agent is allowed to do\n * - What inputs it may consume\n * - What outputs it may emit\n * - What events advance or terminate execution\n * - What resources it can touch\n *\n * Contracts are portable, auditable, and replayable.\n */\nexport type CodmirContract = {\n /**\n * Schema version for forward compatibility.\n */\n schemaVersion: \"codmir.contract.v1\";\n\n /**\n * Unique contract identifier.\n */\n id: ContractId;\n\n /**\n * Semantic version of this contract.\n */\n version: ContractVersion;\n\n /**\n * Human-readable title.\n */\n title: string;\n\n /**\n * Optional description.\n */\n description?: string;\n\n /**\n * Events that can trigger a new run of this contract.\n */\n triggers: ContractTrigger[];\n\n /**\n * Permissions required by this contract.\n */\n permissions: Permission[];\n\n /**\n * Execution limits.\n */\n limits: ContractLimits;\n\n /**\n * Entry point step ID.\n */\n entryStepId: StepId;\n\n /**\n * Step definitions forming the execution graph.\n */\n steps: ContractStep[];\n\n /**\n * Optional output events.\n */\n outputs?: ContractOutputs;\n\n /**\n * Execution hints for voice/realtime callers.\n * Helps decide sync vs async execution based on expected duration.\n */\n execution?: ExecutionHints;\n\n /**\n * Optional tags for categorization.\n */\n tags?: string[];\n\n /**\n * Optional creation timestamp.\n */\n createdAt?: IsoDateString;\n\n /**\n * Optional author/owner.\n */\n author?: string;\n\n /**\n * Optional metadata.\n */\n metadata?: Record<string, JsonValue>;\n};\n\n// ============================================================================\n// Contract Registry Types\n// ============================================================================\n\n/**\n * Summary of a contract for registry listing.\n */\nexport type ContractSummary = {\n id: ContractId;\n version: ContractVersion;\n title: string;\n description?: string;\n triggers: string[];\n tags?: string[];\n createdAt?: IsoDateString;\n};\n\n/**\n * Contract registry query options.\n */\nexport type ContractQuery = {\n id?: ContractId;\n triggerEvent?: string;\n tags?: string[];\n limit?: number;\n offset?: number;\n};\n","/**\n * @fileoverview\n * Grace Foundation Schema Extensions\n * \n * \"Social contract between AI and humanity\"\n * \n * These types extend the core Codmir contract schema with:\n * - Ethical impact assessment\n * - Reversibility guarantees\n * - Economic constraints\n * - Societal impact scoring\n * - Human dignity protections\n * \n * Every contract that uses Grace extensions must be:\n * - Transparent: All actions logged and traceable\n * - Consensual: Explicit permission scope\n * - Reversible: Every action undoable\n * - Accountable: Task attribution and versioning\n * - Bounded: Economic and resource limits\n */\n\nimport type { JsonValue } from \"./schema\";\n\n// ============================================================================\n// Ethical Impact Assessment\n// ============================================================================\n\n/**\n * Ethical impact categories for contract assessment.\n */\nexport type EthicalImpactCategory =\n | \"user_data\" // Touches personal user data\n | \"financial\" // Affects financial systems/transactions\n | \"public_systems\" // Interacts with public infrastructure\n | \"employment\" // May affect human employment\n | \"privacy\" // Privacy implications\n | \"security\" // Security-sensitive operations\n | \"environmental\" // Compute/carbon footprint\n | \"accessibility\" // Affects accessibility for users\n | \"content_generation\"; // Generates public-facing content\n\n/**\n * Severity levels for ethical impact.\n */\nexport type ImpactSeverity = \"none\" | \"low\" | \"medium\" | \"high\" | \"critical\";\n\n/**\n * Individual ethical impact assessment.\n */\nexport type EthicalImpact = {\n category: EthicalImpactCategory;\n severity: ImpactSeverity;\n description?: string;\n mitigations?: string[];\n};\n\n/**\n * Full ethical impact assessment for a contract.\n */\nexport type EthicalAssessment = {\n /**\n * Individual impact assessments by category.\n */\n impacts: EthicalImpact[];\n\n /**\n * Overall risk score (0-100).\n * Computed from individual impacts.\n */\n overallRiskScore: number;\n\n /**\n * Human-readable summary of ethical considerations.\n */\n summary?: string;\n\n /**\n * Whether this contract requires human review before execution.\n */\n requiresHumanReview: boolean;\n\n /**\n * Specific roles that must approve high-impact contracts.\n */\n requiredApprovers?: string[];\n};\n\n// ============================================================================\n// Reversibility Guarantees\n// ============================================================================\n\n/**\n * Reversibility configuration for a contract.\n */\nexport type ReversibilityConfig = {\n /**\n * Whether all actions in this contract are reversible.\n */\n fullyReversible: boolean;\n\n /**\n * Create a snapshot before execution begins.\n */\n snapshotBeforeExecution: boolean;\n\n /**\n * Retain snapshots for this duration (ms).\n * Default: 7 days\n */\n snapshotRetentionMs?: number;\n\n /**\n * Steps that are explicitly irreversible.\n * Engine will require extra confirmation for these.\n */\n irreversibleSteps?: string[];\n\n /**\n * Rollback strategy if execution fails midway.\n */\n rollbackStrategy: \"full\" | \"partial\" | \"none\";\n\n /**\n * Custom rollback contract to execute on failure.\n */\n rollbackContractId?: string;\n};\n\n// ============================================================================\n// Economic Constraints (Grace Economics)\n// ============================================================================\n\n/**\n * Cost units for economic tracking.\n */\nexport type CostUnit = \"credits\" | \"usd\" | \"tokens\";\n\n/**\n * Budget configuration for a contract.\n */\nexport type BudgetConfig = {\n /**\n * Maximum budget for this contract execution.\n */\n maxBudget: number;\n\n /**\n * Unit of the budget.\n */\n unit: CostUnit;\n\n /**\n * Alert threshold (percentage of budget).\n * Default: 80\n */\n alertThreshold?: number;\n\n /**\n * Action when budget is exceeded.\n */\n onExceeded: \"pause\" | \"fail\" | \"notify\";\n\n /**\n * Whether to refund unused budget.\n */\n refundUnused: boolean;\n};\n\n/**\n * Resource allocation for compute fairness.\n */\nexport type ResourceAllocation = {\n /**\n * CPU allocation (vCPU cores).\n */\n cpu?: number;\n\n /**\n * Memory allocation (GB).\n */\n memory?: number;\n\n /**\n * GPU allocation (boolean or specific type).\n */\n gpu?: boolean | string;\n\n /**\n * Maximum execution time (ms).\n */\n maxExecutionTime: number;\n\n /**\n * Priority level for scheduling.\n */\n priority: \"low\" | \"normal\" | \"high\" | \"critical\";\n\n /**\n * Estimated carbon footprint (gCO2e).\n */\n estimatedCarbonFootprint?: number;\n};\n\n// ============================================================================\n// Societal Impact Scoring\n// ============================================================================\n\n/**\n * Workforce impact assessment.\n */\nexport type WorkforceImpact = {\n /**\n * Does this contract automate human tasks?\n */\n automatesHumanTasks: boolean;\n\n /**\n * Estimated human hours displaced per execution.\n */\n estimatedDisplacementHours?: number;\n\n /**\n * Does this contract augment human capabilities?\n */\n augmentsHumans: boolean;\n\n /**\n * Skills that humans should develop alongside this automation.\n */\n recommendedHumanSkills?: string[];\n};\n\n/**\n * Societal impact assessment.\n */\nexport type SocietalImpact = {\n /**\n * Workforce displacement/augmentation analysis.\n */\n workforce?: WorkforceImpact;\n\n /**\n * Does this benefit underserved communities?\n */\n benefitsUnderserved?: boolean;\n\n /**\n * Potential for misuse.\n */\n misuseRisk: ImpactSeverity;\n\n /**\n * Safeguards against misuse.\n */\n misuseSafeguards?: string[];\n};\n\n// ============================================================================\n// Grace Contract Extensions\n// ============================================================================\n\n/**\n * Grace Foundation extensions for CodmirContract.\n * \n * Add these fields to your contract to enable Grace governance.\n */\nexport type GraceExtensions = {\n /**\n * Grace schema version.\n */\n graceVersion: \"grace.v1\";\n\n /**\n * Ethical impact assessment.\n */\n ethics: EthicalAssessment;\n\n /**\n * Reversibility configuration.\n */\n reversibility: ReversibilityConfig;\n\n /**\n * Economic constraints.\n */\n budget?: BudgetConfig;\n\n /**\n * Resource allocation.\n */\n resources?: ResourceAllocation;\n\n /**\n * Societal impact assessment.\n */\n societalImpact?: SocietalImpact;\n\n /**\n * Human oversight configuration.\n */\n humanOversight: {\n /**\n * Minimum human checkpoints required.\n */\n minCheckpoints: number;\n\n /**\n * Allow autonomous execution without human oversight?\n */\n allowAutonomous: boolean;\n\n /**\n * Escalation path for issues.\n */\n escalationPath?: string[];\n };\n\n /**\n * Transparency requirements.\n */\n transparency: {\n /**\n * Log all decisions with reasoning.\n */\n logDecisions: boolean;\n\n /**\n * Make execution logs available to affected parties.\n */\n logsAccessible: boolean;\n\n /**\n * Audit trail retention (days).\n */\n auditRetentionDays: number;\n };\n};\n\n// ============================================================================\n// Grace Policy Rules\n// ============================================================================\n\n/**\n * Grace policy rule types.\n */\nexport type GracePolicyRule =\n | { type: \"require_approval\"; when: GracePolicyCondition }\n | { type: \"deny\"; when: GracePolicyCondition; reason: string }\n | { type: \"modify_scope\"; when: GracePolicyCondition; modifications: Record<string, JsonValue> }\n | { type: \"add_checkpoint\"; when: GracePolicyCondition; checkpoint: string }\n | { type: \"require_human_review\"; when: GracePolicyCondition };\n\n/**\n * Conditions for policy rules.\n */\nexport type GracePolicyCondition =\n | { op: \"risk_above\"; threshold: number }\n | { op: \"touches_category\"; category: EthicalImpactCategory }\n | { op: \"budget_above\"; amount: number; unit: CostUnit }\n | { op: \"not_reversible\" }\n | { op: \"production_deployment\" }\n | { op: \"affects_multiple_users\"; threshold: number }\n | { op: \"and\"; conditions: GracePolicyCondition[] }\n | { op: \"or\"; conditions: GracePolicyCondition[] };\n\n// ============================================================================\n// Grace Audit Events\n// ============================================================================\n\n/**\n * Audit event for Grace governance tracking.\n */\nexport type GraceAuditEvent = {\n id: string;\n timestamp: string;\n runId: string;\n contractId: string;\n \n type:\n | \"contract.submitted\"\n | \"ethics.assessed\"\n | \"approval.requested\"\n | \"approval.granted\"\n | \"approval.denied\"\n | \"checkpoint.reached\"\n | \"budget.alert\"\n | \"budget.exceeded\"\n | \"rollback.initiated\"\n | \"rollback.completed\"\n | \"human.override\"\n | \"policy.violated\"\n | \"policy.enforced\";\n\n actor: {\n type: \"human\" | \"ai\" | \"system\";\n id: string;\n name?: string;\n };\n\n details: Record<string, JsonValue>;\n\n /**\n * Hash of previous audit event for chain integrity.\n */\n previousHash?: string;\n};\n\n// ============================================================================\n// Default Values & Helpers\n// ============================================================================\n\n/**\n * Default Grace extensions for a new contract.\n */\nexport const DEFAULT_GRACE_EXTENSIONS: GraceExtensions = {\n graceVersion: \"grace.v1\",\n \n ethics: {\n impacts: [],\n overallRiskScore: 0,\n requiresHumanReview: false,\n },\n \n reversibility: {\n fullyReversible: true,\n snapshotBeforeExecution: true,\n snapshotRetentionMs: 7 * 24 * 60 * 60 * 1000, // 7 days\n rollbackStrategy: \"full\",\n },\n \n humanOversight: {\n minCheckpoints: 0,\n allowAutonomous: true,\n },\n \n transparency: {\n logDecisions: true,\n logsAccessible: true,\n auditRetentionDays: 90,\n },\n};\n\n/**\n * Calculate overall risk score from impacts.\n */\nexport function calculateRiskScore(impacts: EthicalImpact[]): number {\n const severityWeights: Record<ImpactSeverity, number> = {\n none: 0,\n low: 10,\n medium: 25,\n high: 50,\n critical: 100,\n };\n\n if (impacts.length === 0) return 0;\n\n const totalWeight = impacts.reduce(\n (sum, impact) => sum + severityWeights[impact.severity],\n 0\n );\n\n // Normalize to 0-100\n return Math.min(100, totalWeight);\n}\n\n/**\n * Determine if human review is required based on impacts.\n */\nexport function requiresHumanReview(impacts: EthicalImpact[]): boolean {\n return impacts.some(\n (i) => i.severity === \"high\" || i.severity === \"critical\"\n );\n}\n\n/**\n * Grace Foundation principles as machine-readable rules.\n */\nexport const GRACE_PRINCIPLES = {\n transparency: \"Every action logged, every decision traceable\",\n consent: \"Explicit permission scope, no implicit access\",\n reversibility: \"Every AI action must be undoable\",\n accountability: \"Task attribution, versioned modifications\",\n economicBoundaries: \"Token usage limit, execution cost cap\",\n humanDignity: \"AI augments, never replaces human judgment on critical decisions\",\n fairness: \"Distributed power must not centralize control\",\n sustainability: \"Prefer renewable-powered compute when available\",\n} as const;\n","/**\n * @fileoverview\n * Template resolution utilities for contracts.\n * Supports {{path}} syntax for extracting values from run context.\n */\n\nimport type { JsonValue } from \"./schema\";\n\n/**\n * Safely get a nested value by dot path from a JSON-like object.\n * @param obj - Source object\n * @param path - Dot-separated path (e.g., \"trigger.ticketId\")\n * @returns The value at the path, or undefined if not found\n *\n * @example\n * ```ts\n * getByPath({ trigger: { ticketId: \"123\" } }, \"trigger.ticketId\")\n * // => \"123\"\n * ```\n */\nexport function getByPath(\n obj: Record<string, JsonValue>,\n path: string\n): JsonValue | undefined {\n const parts = path.split(\".\").filter(Boolean);\n let cur: unknown = obj;\n\n for (const p of parts) {\n if (cur == null || typeof cur !== \"object\") return undefined;\n cur = (cur as Record<string, unknown>)[p];\n }\n\n return cur as JsonValue | undefined;\n}\n\n/**\n * Set a nested value by dot path, creating objects along the way.\n * @param obj - Target object (mutated in place)\n * @param path - Dot-separated path\n * @param value - Value to set\n *\n * @example\n * ```ts\n * const ctx = {};\n * setByPath(ctx, \"steps.analyze.output\", { summary: \"...\" });\n * // ctx => { steps: { analyze: { output: { summary: \"...\" } } } }\n * ```\n */\nexport function setByPath(\n obj: Record<string, JsonValue>,\n path: string,\n value: JsonValue\n): void {\n const parts = path.split(\".\").filter(Boolean);\n if (parts.length === 0) return;\n\n let cur: Record<string, unknown> = obj;\n\n for (let i = 0; i < parts.length - 1; i++) {\n const p = parts[i]!;\n if (cur[p] == null || typeof cur[p] !== \"object\") {\n cur[p] = {};\n }\n cur = cur[p] as Record<string, unknown>;\n }\n\n cur[parts[parts.length - 1]!] = value;\n}\n\n/**\n * Delete a nested value by dot path.\n * @param obj - Target object (mutated in place)\n * @param path - Dot-separated path\n */\nexport function deleteByPath(\n obj: Record<string, JsonValue>,\n path: string\n): void {\n const parts = path.split(\".\").filter(Boolean);\n if (parts.length === 0) return;\n\n let cur: Record<string, unknown> = obj;\n\n for (let i = 0; i < parts.length - 1; i++) {\n const p = parts[i]!;\n if (cur[p] == null || typeof cur[p] !== \"object\") return;\n cur = cur[p] as Record<string, unknown>;\n }\n\n delete cur[parts[parts.length - 1]!];\n}\n\n/**\n * Template pattern for {{path}} extraction.\n */\nconst TEMPLATE_PATTERN = /^\\{\\{(.+)\\}\\}$/;\n\n/**\n * Check if a string is a template reference.\n */\nexport function isTemplate(value: string): boolean {\n return TEMPLATE_PATTERN.test(value);\n}\n\n/**\n * Extract path from a template string.\n * @returns The path if it's a template, null otherwise\n */\nexport function extractTemplatePath(value: string): string | null {\n const match = value.match(TEMPLATE_PATTERN);\n return match ? match[1]!.trim() : null;\n}\n\n/**\n * Resolve templates of the form \"{{some.path}}\" inside JSON values deterministically.\n *\n * Supports:\n * - Strings equal to \"{{path}}\" ā replaced with value at path\n * - Objects/arrays ā recursively resolved\n * - Other primitives ā passed through unchanged\n *\n * @param ctx - Run context object (JSON-like)\n * @param input - Input value containing potential templates\n * @returns Resolved value with templates replaced\n *\n * @example\n * ```ts\n * const ctx = { trigger: { ticketId: \"T-123\" } };\n * resolveTemplates(ctx, { id: \"{{trigger.ticketId}}\" });\n * // => { id: \"T-123\" }\n * ```\n */\nexport function resolveTemplates(\n ctx: Record<string, JsonValue>,\n input: JsonValue\n): JsonValue {\n if (typeof input === \"string\") {\n const path = extractTemplatePath(input);\n if (path) {\n const v = getByPath(ctx, path);\n return v === undefined ? null : v;\n }\n return input;\n }\n\n if (Array.isArray(input)) {\n return input.map((v) => resolveTemplates(ctx, v));\n }\n\n if (input && typeof input === \"object\") {\n const out: Record<string, JsonValue> = {};\n for (const [k, v] of Object.entries(input)) {\n out[k] = resolveTemplates(ctx, v as JsonValue);\n }\n return out;\n }\n\n return input;\n}\n\n/**\n * Resolve a step input object using run context.\n * Convenience wrapper around resolveTemplates.\n */\nexport function resolveStepInput(\n ctx: Record<string, JsonValue>,\n input: Record<string, JsonValue>\n): Record<string, JsonValue> {\n return resolveTemplates(ctx, input) as Record<string, JsonValue>;\n}\n\n/**\n * Deep clone a JSON value.\n */\nexport function cloneJson<T extends JsonValue>(value: T): T {\n return JSON.parse(JSON.stringify(value));\n}\n\n/**\n * Merge two JSON objects shallowly.\n */\nexport function mergeJson(\n target: Record<string, JsonValue>,\n source: Record<string, JsonValue>\n): Record<string, JsonValue> {\n return { ...target, ...source };\n}\n\n/**\n * Deep merge two JSON objects.\n */\nexport function deepMergeJson(\n target: Record<string, JsonValue>,\n source: Record<string, JsonValue>\n): Record<string, JsonValue> {\n const result: Record<string, JsonValue> = { ...target };\n\n for (const [key, value] of Object.entries(source)) {\n if (\n value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n result[key] &&\n typeof result[key] === \"object\" &&\n !Array.isArray(result[key])\n ) {\n result[key] = deepMergeJson(\n result[key] as Record<string, JsonValue>,\n value as Record<string, JsonValue>\n );\n } else {\n result[key] = value;\n }\n }\n\n return result;\n}\n","/**\n * @fileoverview\n * Condition expression evaluation for contracts.\n * All evaluations are deterministic and side-effect free.\n */\n\nimport type { ConditionExpr, JsonValue } from \"./schema\";\nimport { getByPath } from \"./templates\";\n\n/**\n * Evaluate a deterministic condition expression against a JSON context.\n *\n * @param ctx - Run context object (JSON-like)\n * @param expr - Condition expression to evaluate\n * @returns true if the condition is satisfied\n *\n * @example\n * ```ts\n * const ctx = { status: \"open\", priority: 3 };\n * evalCondition(ctx, { op: \"eq\", path: \"status\", value: \"open\" });\n * // => true\n * ```\n */\nexport function evalCondition(\n ctx: Record<string, JsonValue>,\n expr: ConditionExpr\n): boolean {\n switch (expr.op) {\n case \"eq\": {\n const actual = getByPath(ctx, expr.path);\n return jsonEquals(actual, expr.value);\n }\n\n case \"neq\": {\n const actual = getByPath(ctx, expr.path);\n return !jsonEquals(actual, expr.value);\n }\n\n case \"gt\": {\n const actual = getByPath(ctx, expr.path);\n return typeof actual === \"number\" && actual > expr.value;\n }\n\n case \"gte\": {\n const actual = getByPath(ctx, expr.path);\n return typeof actual === \"number\" && actual >= expr.value;\n }\n\n case \"lt\": {\n const actual = getByPath(ctx, expr.path);\n return typeof actual === \"number\" && actual < expr.value;\n }\n\n case \"lte\": {\n const actual = getByPath(ctx, expr.path);\n return typeof actual === \"number\" && actual <= expr.value;\n }\n\n case \"exists\": {\n return getByPath(ctx, expr.path) !== undefined;\n }\n\n case \"contains\": {\n const actual = getByPath(ctx, expr.path);\n if (typeof actual === \"string\") {\n return actual.includes(expr.value);\n }\n if (Array.isArray(actual)) {\n return actual.some((item) => jsonEquals(item, expr.value));\n }\n return false;\n }\n\n case \"startsWith\": {\n const actual = getByPath(ctx, expr.path);\n return typeof actual === \"string\" && actual.startsWith(expr.value);\n }\n\n case \"endsWith\": {\n const actual = getByPath(ctx, expr.path);\n return typeof actual === \"string\" && actual.endsWith(expr.value);\n }\n\n case \"and\": {\n return expr.exprs.every((e) => evalCondition(ctx, e));\n }\n\n case \"or\": {\n return expr.exprs.some((e) => evalCondition(ctx, e));\n }\n\n case \"not\": {\n return !evalCondition(ctx, expr.expr);\n }\n\n default: {\n // Exhaustive check - TypeScript will error if we miss a case\n const _exhaustive: never = expr;\n return false;\n }\n }\n}\n\n/**\n * Compare two JSON values for equality.\n */\nfunction jsonEquals(a: JsonValue | undefined, b: JsonValue): boolean {\n if (a === b) return true;\n if (a === undefined || a === null || b === null) return a === b;\n\n if (typeof a !== typeof b) return false;\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((item, index) => jsonEquals(item, b[index]));\n }\n\n if (typeof a === \"object\" && typeof b === \"object\") {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((key) =>\n jsonEquals(\n (a as Record<string, JsonValue>)[key],\n (b as Record<string, JsonValue>)[key]\n )\n );\n }\n\n return a === b;\n}\n\n/**\n * Validate that a condition expression is structurally valid.\n * @throws Error if the expression is invalid\n */\nexport function validateCondition(expr: ConditionExpr): void {\n switch (expr.op) {\n case \"eq\":\n case \"neq\":\n if (typeof expr.path !== \"string\" || !expr.path) {\n throw new Error(`Condition ${expr.op} requires a non-empty path`);\n }\n break;\n\n case \"gt\":\n case \"gte\":\n case \"lt\":\n case \"lte\":\n if (typeof expr.path !== \"string\" || !expr.path) {\n throw new Error(`Condition ${expr.op} requires a non-empty path`);\n }\n if (typeof expr.value !== \"number\") {\n throw new Error(`Condition ${expr.op} requires a numeric value`);\n }\n break;\n\n case \"exists\":\n if (typeof expr.path !== \"string\" || !expr.path) {\n throw new Error(`Condition ${expr.op} requires a non-empty path`);\n }\n break;\n\n case \"contains\":\n case \"startsWith\":\n case \"endsWith\":\n if (typeof expr.path !== \"string\" || !expr.path) {\n throw new Error(`Condition ${expr.op} requires a non-empty path`);\n }\n if (typeof expr.value !== \"string\") {\n throw new Error(`Condition ${expr.op} requires a string value`);\n }\n break;\n\n case \"and\":\n case \"or\":\n if (!Array.isArray(expr.exprs) || expr.exprs.length === 0) {\n throw new Error(`Condition ${expr.op} requires a non-empty array of expressions`);\n }\n for (const subExpr of expr.exprs) {\n validateCondition(subExpr);\n }\n break;\n\n case \"not\":\n if (!expr.expr) {\n throw new Error(`Condition not requires an expression`);\n }\n validateCondition(expr.expr);\n break;\n\n default: {\n const _exhaustive: never = expr;\n throw new Error(`Unknown condition operator: ${(expr as ConditionExpr).op}`);\n }\n }\n}\n\n/**\n * Create a simple equality condition.\n */\nexport function eq(path: string, value: JsonValue): ConditionExpr {\n return { op: \"eq\", path, value };\n}\n\n/**\n * Create a not-equals condition.\n */\nexport function neq(path: string, value: JsonValue): ConditionExpr {\n return { op: \"neq\", path, value };\n}\n\n/**\n * Create an exists condition.\n */\nexport function exists(path: string): ConditionExpr {\n return { op: \"exists\", path };\n}\n\n/**\n * Create an AND condition.\n */\nexport function and(...exprs: ConditionExpr[]): ConditionExpr {\n return { op: \"and\", exprs };\n}\n\n/**\n * Create an OR condition.\n */\nexport function or(...exprs: ConditionExpr[]): ConditionExpr {\n return { op: \"or\", exprs };\n}\n\n/**\n * Create a NOT condition.\n */\nexport function not(expr: ConditionExpr): ConditionExpr {\n return { op: \"not\", expr };\n}\n\n/**\n * Create a greater-than condition.\n */\nexport function gt(path: string, value: number): ConditionExpr {\n return { op: \"gt\", path, value };\n}\n\n/**\n * Create a greater-than-or-equal condition.\n */\nexport function gte(path: string, value: number): ConditionExpr {\n return { op: \"gte\", path, value };\n}\n\n/**\n * Create a less-than condition.\n */\nexport function lt(path: string, value: number): ConditionExpr {\n return { op: \"lt\", path, value };\n}\n\n/**\n * Create a less-than-or-equal condition.\n */\nexport function lte(path: string, value: number): ConditionExpr {\n return { op: \"lte\", path, value };\n}\n\n/**\n * Create a contains condition (string or array).\n */\nexport function contains(path: string, value: string): ConditionExpr {\n return { op: \"contains\", path, value };\n}\n\n/**\n * Create a startsWith condition.\n */\nexport function startsWith(path: string, value: string): ConditionExpr {\n return { op: \"startsWith\", path, value };\n}\n\n/**\n * Create an endsWith condition.\n */\nexport function endsWith(path: string, value: string): ConditionExpr {\n return { op: \"endsWith\", path, value };\n}\n","/**\n * @fileoverview\n * Contract validation utilities.\n * Validates contracts are structurally correct before execution.\n */\n\nimport type {\n CodmirContract,\n ContractStep,\n BranchStep,\n WaitStep,\n TaskStep,\n LlmStep,\n EmitStep,\n TransformStep,\n} from \"./schema\";\nimport { validateCondition } from \"./conditions\";\n\n/**\n * Validation error with details.\n */\nexport class ContractValidationError extends Error {\n constructor(\n message: string,\n public readonly field?: string,\n public readonly details?: unknown\n ) {\n super(message);\n this.name = \"ContractValidationError\";\n }\n}\n\n/**\n * Validation result type.\n */\nexport type ValidationResult =\n | { valid: true }\n | { valid: false; errors: ContractValidationError[] };\n\n/**\n * Validate a contract with strict structural rules.\n * Keep this deterministic and side-effect free.\n *\n * @param contract - Contract to validate\n * @throws ContractValidationError if invalid\n */\nexport function validateContract(contract: CodmirContract): void {\n const errors = collectValidationErrors(contract);\n if (errors.length > 0) {\n throw errors[0];\n }\n}\n\n/**\n * Validate a contract and return a result object.\n * Does not throw.\n */\nexport function validateContractSafe(contract: CodmirContract): ValidationResult {\n const errors = collectValidationErrors(contract);\n if (errors.length === 0) {\n return { valid: true };\n }\n return { valid: false, errors };\n}\n\n/**\n * Collect all validation errors for a contract.\n */\nfunction collectValidationErrors(contract: CodmirContract): ContractValidationError[] {\n const errors: ContractValidationError[] = [];\n\n // Schema version check\n if (contract.schemaVersion !== \"codmir.contract.v1\") {\n errors.push(\n new ContractValidationError(\n `Unsupported schemaVersion: ${contract.schemaVersion}`,\n \"schemaVersion\"\n )\n );\n }\n\n // Required fields\n if (!contract.id || typeof contract.id !== \"string\") {\n errors.push(new ContractValidationError(\"Contract id is required\", \"id\"));\n }\n\n if (!contract.version || typeof contract.version !== \"string\") {\n errors.push(new ContractValidationError(\"Contract version is required\", \"version\"));\n }\n\n if (!contract.title || typeof contract.title !== \"string\") {\n errors.push(new ContractValidationError(\"Contract title is required\", \"title\"));\n }\n\n // Triggers validation\n if (!Array.isArray(contract.triggers) || contract.triggers.length === 0) {\n errors.push(\n new ContractValidationError(\"Contract must have at least one trigger\", \"triggers\")\n );\n } else {\n for (let i = 0; i < contract.triggers.length; i++) {\n const trigger = contract.triggers[i];\n if (trigger.type !== \"event\") {\n errors.push(\n new ContractValidationError(\n `Trigger ${i} has unsupported type: ${trigger.type}`,\n `triggers[${i}].type`\n )\n );\n }\n if (!trigger.event || typeof trigger.event !== \"string\") {\n errors.push(\n new ContractValidationError(\n `Trigger ${i} requires an event pattern`,\n `triggers[${i}].event`\n )\n );\n }\n }\n }\n\n // Steps validation\n if (!Array.isArray(contract.steps) || contract.steps.length === 0) {\n errors.push(\n new ContractValidationError(\"Contract must have at least one step\", \"steps\")\n );\n }\n\n const stepIds = new Set<string>();\n for (const step of contract.steps) {\n if (!step.id || typeof step.id !== \"string\") {\n errors.push(new ContractValidationError(\"Step id is required\", \"steps[].id\"));\n continue;\n }\n\n if (stepIds.has(step.id)) {\n errors.push(\n new ContractValidationError(`Duplicate step id: ${step.id}`, `steps.${step.id}`)\n );\n }\n stepIds.add(step.id);\n\n // Validate step-specific fields\n const stepErrors = validateStep(step, stepIds);\n errors.push(...stepErrors);\n }\n\n // Entry step validation\n if (!contract.entryStepId) {\n errors.push(\n new ContractValidationError(\"entryStepId is required\", \"entryStepId\")\n );\n } else if (!stepIds.has(contract.entryStepId)) {\n errors.push(\n new ContractValidationError(\n `entryStepId not found in steps: ${contract.entryStepId}`,\n \"entryStepId\"\n )\n );\n }\n\n // Validate next pointers (second pass after collecting all step IDs)\n for (const step of contract.steps) {\n if (step.next != null && !stepIds.has(step.next)) {\n errors.push(\n new ContractValidationError(\n `Step ${step.id} has invalid next: ${step.next}`,\n `steps.${step.id}.next`\n )\n );\n }\n\n if (step.kind === \"branch\") {\n const branchStep = step as BranchStep;\n for (let i = 0; i < branchStep.branches.length; i++) {\n const branch = branchStep.branches[i];\n if (!stepIds.has(branch.next)) {\n errors.push(\n new ContractValidationError(\n `Branch step ${step.id} has invalid branch next: ${branch.next}`,\n `steps.${step.id}.branches[${i}].next`\n )\n );\n }\n }\n if (!stepIds.has(branchStep.defaultNext)) {\n errors.push(\n new ContractValidationError(\n `Branch step ${step.id} has invalid defaultNext: ${branchStep.defaultNext}`,\n `steps.${step.id}.defaultNext`\n )\n );\n }\n }\n\n if (step.kind === \"wait\") {\n const waitStep = step as WaitStep;\n if (waitStep.nextOnTimeout != null && !stepIds.has(waitStep.nextOnTimeout)) {\n errors.push(\n new ContractValidationError(\n `Wait step ${step.id} has invalid nextOnTimeout: ${waitStep.nextOnTimeout}`,\n `steps.${step.id}.nextOnTimeout`\n )\n );\n }\n }\n }\n\n // Limits validation\n if (!contract.limits) {\n errors.push(new ContractValidationError(\"Contract limits are required\", \"limits\"));\n } else {\n if (typeof contract.limits.maxRunMs !== \"number\" || contract.limits.maxRunMs <= 0) {\n errors.push(\n new ContractValidationError(\n \"limits.maxRunMs must be a positive number\",\n \"limits.maxRunMs\"\n )\n );\n }\n if (typeof contract.limits.maxSteps !== \"number\" || contract.limits.maxSteps <= 0) {\n errors.push(\n new ContractValidationError(\n \"limits.maxSteps must be a positive number\",\n \"limits.maxSteps\"\n )\n );\n }\n }\n\n // Permissions validation (basic structure check)\n if (!Array.isArray(contract.permissions)) {\n errors.push(\n new ContractValidationError(\"Contract permissions must be an array\", \"permissions\")\n );\n }\n\n return errors;\n}\n\n/**\n * Validate a single step.\n */\nfunction validateStep(\n step: ContractStep,\n _stepIds: Set<string>\n): ContractValidationError[] {\n const errors: ContractValidationError[] = [];\n\n if (!step.name || typeof step.name !== \"string\") {\n errors.push(\n new ContractValidationError(`Step ${step.id} requires a name`, `steps.${step.id}.name`)\n );\n }\n\n // Validate if condition\n if (step.if) {\n try {\n validateCondition(step.if);\n } catch (err) {\n errors.push(\n new ContractValidationError(\n `Step ${step.id} has invalid if condition: ${(err as Error).message}`,\n `steps.${step.id}.if`\n )\n );\n }\n }\n\n // Validate step-kind-specific fields\n switch (step.kind) {\n case \"task\": {\n const taskStep = step as TaskStep;\n if (!taskStep.task || typeof taskStep.task !== \"string\") {\n errors.push(\n new ContractValidationError(\n `Task step ${step.id} requires a task name`,\n `steps.${step.id}.task`\n )\n );\n }\n if (!taskStep.input || typeof taskStep.input !== \"object\") {\n errors.push(\n new ContractValidationError(\n `Task step ${step.id} requires an input object`,\n `steps.${step.id}.input`\n )\n );\n }\n break;\n }\n\n case \"llm\": {\n const llmStep = step as LlmStep;\n if (!llmStep.prompt || typeof llmStep.prompt !== \"object\") {\n errors.push(\n new ContractValidationError(\n `LLM step ${step.id} requires a prompt object`,\n `steps.${step.id}.prompt`\n )\n );\n }\n break;\n }\n\n case \"emit\": {\n const emitStep = step as EmitStep;\n if (!emitStep.event || typeof emitStep.event !== \"string\") {\n errors.push(\n new ContractValidationError(\n `Emit step ${step.id} requires an event name`,\n `steps.${step.id}.event`\n )\n );\n }\n if (!emitStep.payload || typeof emitStep.payload !== \"object\") {\n errors.push(\n new ContractValidationError(\n `Emit step ${step.id} requires a payload object`,\n `steps.${step.id}.payload`\n )\n );\n }\n break;\n }\n\n case \"wait\": {\n const waitStep = step as WaitStep;\n if (!waitStep.event || typeof waitStep.event !== \"string\") {\n errors.push(\n new ContractValidationError(\n `Wait step ${step.id} requires an event pattern`,\n `steps.${step.id}.event`\n )\n );\n }\n break;\n }\n\n case \"branch\": {\n const branchStep = step as BranchStep;\n if (!Array.isArray(branchStep.branches) || branchStep.branches.length === 0) {\n errors.push(\n new ContractValidationError(\n `Branch step ${step.id} requires at least one branch`,\n `steps.${step.id}.branches`\n )\n );\n } else {\n for (let i = 0; i < branchStep.branches.length; i++) {\n const branch = branchStep.branches[i];\n if (!branch.when) {\n errors.push(\n new ContractValidationError(\n `Branch ${i} in step ${step.id} requires a when condition`,\n `steps.${step.id}.branches[${i}].when`\n )\n );\n } else {\n try {\n validateCondition(branch.when);\n } catch (err) {\n errors.push(\n new ContractValidationError(\n `Branch ${i} in step ${step.id} has invalid when condition: ${(err as Error).message}`,\n `steps.${step.id}.branches[${i}].when`\n )\n );\n }\n }\n }\n }\n if (!branchStep.defaultNext || typeof branchStep.defaultNext !== \"string\") {\n errors.push(\n new ContractValidationError(\n `Branch step ${step.id} requires a defaultNext`,\n `steps.${step.id}.defaultNext`\n )\n );\n }\n break;\n }\n\n case \"transform\": {\n const transformStep = step as TransformStep;\n if (!transformStep.transforms || typeof transformStep.transforms !== \"object\") {\n errors.push(\n new ContractValidationError(\n `Transform step ${step.id} requires a transforms object`,\n `steps.${step.id}.transforms`\n )\n );\n }\n break;\n }\n\n case \"approval\": {\n const approvalStep = step as { prompt?: string; nextOnApproved?: string };\n if (!approvalStep.prompt || typeof approvalStep.prompt !== \"string\") {\n errors.push(\n new ContractValidationError(\n `Approval step ${step.id} requires a prompt`,\n `steps.${step.id}.prompt`\n )\n );\n }\n if (!approvalStep.nextOnApproved || typeof approvalStep.nextOnApproved !== \"string\") {\n errors.push(\n new ContractValidationError(\n `Approval step ${step.id} requires nextOnApproved`,\n `steps.${step.id}.nextOnApproved`\n )\n );\n }\n break;\n }\n\n default: {\n // This should never happen if all step kinds are handled\n const unknownStep = step as { id: string; kind: string };\n errors.push(\n new ContractValidationError(\n `Step ${unknownStep.id} has unknown kind: ${unknownStep.kind}`,\n `steps.${unknownStep.id}.kind`\n )\n );\n }\n }\n\n return errors;\n}\n\n/**\n * Check if a contract has a specific permission.\n */\nexport function hasPermission(\n contract: CodmirContract,\n kind: string,\n scope?: string\n): boolean {\n return contract.permissions.some((p) => {\n if (p.kind !== kind) return false;\n if (!scope) return true;\n\n // Check scope matching based on permission kind\n switch (p.kind) {\n case \"event:emit\":\n case \"event:read\":\n return matchPattern((p as { pattern: string }).pattern, scope);\n case \"storage:read\":\n case \"storage:write\":\n case \"repo:read\":\n case \"repo:write\":\n return matchPattern((p as { scope: string }).scope, scope);\n case \"http:request\":\n return (p as { domains: string[] }).domains.some((d) => matchPattern(d, scope));\n case \"secrets:read\":\n return (p as { keys: string[] }).keys.includes(scope);\n case \"llm:invoke\":\n return !(p as { models?: string[] }).models || (p as { models?: string[] }).models!.includes(scope);\n default:\n return false;\n }\n });\n}\n\n/**\n * Simple wildcard pattern matching.\n * Supports \"*\" as suffix wildcard.\n */\nfunction matchPattern(pattern: string, value: string): boolean {\n if (pattern === \"*\") return true;\n if (pattern.endsWith(\".*\")) {\n const prefix = pattern.slice(0, -2);\n return value === prefix || value.startsWith(prefix + \".\");\n }\n if (pattern.endsWith(\"*\")) {\n const prefix = pattern.slice(0, -1);\n return value.startsWith(prefix);\n }\n return pattern === value;\n}\n","/**\n * @fileoverview\n * Example contract: Ticket Triage Workflow\n *\n * This contract demonstrates an autonomous agent that:\n * 1. Analyzes incoming tickets\n * 2. Classifies priority and category\n * 3. Assigns to appropriate team\n * 4. Emits status updates\n */\n\nimport type { CodmirContract } from \"../schema\";\n\n/**\n * Ticket Triage Contract\n *\n * Triggered by: ticket.created\n * Permissions: Read tickets, emit events, invoke LLM\n */\nexport const ticketTriageContract: CodmirContract = {\n schemaVersion: \"codmir.contract.v1\",\n id: \"codmir.ticket-triage\",\n version: \"1.0.0\",\n title: \"Ticket Triage Agent\",\n description:\n \"Automatically analyzes and triages incoming support tickets using AI classification\",\n\n triggers: [\n {\n type: \"event\",\n event: \"ticket.created\",\n },\n ],\n\n permissions: [\n { kind: \"event:emit\", pattern: \"ticket.*\" },\n { kind: \"event:emit\", pattern: \"agent.*\" },\n { kind: \"event:read\", pattern: \"ticket.*\" },\n { kind: \"llm:invoke\", models: [\"gpt-5-mini-2025-08-07\", \"gpt-5\"] },\n ],\n\n limits: {\n maxRunMs: 60_000, // 1 minute\n maxSteps: 10,\n maxLlmCalls: 3,\n maxTokens: 5000,\n },\n\n entryStepId: \"analyze\",\n\n steps: [\n // Step 1: Analyze ticket with LLM\n {\n id: \"analyze\",\n name: \"Analyze Ticket\",\n kind: \"llm\",\n description: \"Use AI to analyze ticket content and extract key information\",\n model: \"gpt-5-mini-2025-08-07\",\n prompt: {\n system:\n \"You are a support ticket analyst. Analyze the ticket and extract: priority (low/medium/high/urgent), category (bug/feature/question/other), sentiment (positive/neutral/negative), and a brief summary.\",\n user: \"Ticket Title: {{trigger.title}}\\n\\nTicket Body:\\n{{trigger.body}}\",\n },\n saveAs: \"steps.analysis\",\n temperature: 0.3,\n maxTokens: 500,\n next: \"classify\",\n },\n\n // Step 2: Transform analysis into structured data\n {\n id: \"classify\",\n name: \"Classify Ticket\",\n kind: \"transform\",\n description: \"Structure the analysis results\",\n transforms: {\n \"classification.priority\": \"{{steps.analysis.priority}}\",\n \"classification.category\": \"{{steps.analysis.category}}\",\n \"classification.sentiment\": \"{{steps.analysis.sentiment}}\",\n \"classification.summary\": \"{{steps.analysis.summary}}\",\n },\n next: \"check-urgent\",\n },\n\n // Step 3: Branch on urgency\n {\n id: \"check-urgent\",\n name: \"Check Urgency\",\n kind: \"branch\",\n description: \"Route urgent tickets to fast path\",\n branches: [\n {\n when: { op: \"eq\", path: \"classification.priority\", value: \"urgent\" },\n next: \"escalate\",\n },\n {\n when: { op: \"eq\", path: \"classification.priority\", value: \"high\" },\n next: \"assign-senior\",\n },\n ],\n defaultNext: \"assign-team\",\n },\n\n // Step 4a: Escalate urgent tickets\n {\n id: \"escalate\",\n name: \"Escalate Urgent\",\n kind: \"emit\",\n description: \"Emit escalation event for urgent tickets\",\n event: \"ticket.escalated\",\n payload: {\n ticketId: \"{{trigger.id}}\",\n priority: \"urgent\",\n reason: \"Auto-escalated by triage agent\",\n analysis: \"{{classification}}\",\n },\n next: \"notify-complete\",\n },\n\n // Step 4b: Assign to senior team\n {\n id: \"assign-senior\",\n name: \"Assign to Senior\",\n kind: \"task\",\n description: \"Assign high-priority ticket to senior team\",\n task: \"assign-ticket\",\n input: {\n ticketId: \"{{trigger.id}}\",\n team: \"senior-support\",\n priority: \"high\",\n notes: \"{{classification.summary}}\",\n },\n saveAs: \"steps.assignment\",\n next: \"notify-complete\",\n },\n\n // Step 4c: Assign to regular team\n {\n id: \"assign-team\",\n name: \"Assign to Team\",\n kind: \"task\",\n description: \"Assign ticket to appropriate team based on category\",\n task: \"assign-ticket\",\n input: {\n ticketId: \"{{trigger.id}}\",\n team: \"{{classification.category}}-team\",\n priority: \"{{classification.priority}}\",\n notes: \"{{classification.summary}}\",\n },\n saveAs: \"steps.assignment\",\n next: \"notify-complete\",\n },\n\n // Step 5: Emit completion event\n {\n id: \"notify-complete\",\n name: \"Notify Complete\",\n kind: \"emit\",\n description: \"Emit triage completion event\",\n event: \"ticket.triaged\",\n payload: {\n ticketId: \"{{trigger.id}}\",\n classification: \"{{classification}}\",\n assignment: \"{{steps.assignment}}\",\n },\n next: null,\n },\n ],\n\n outputs: {\n onCompleted: [\n {\n event: \"agent.task.completed\",\n payload: {\n agent: \"ticket-triage\",\n ticketId: \"{{trigger.id}}\",\n result: \"{{classification}}\",\n },\n },\n ],\n onFailed: [\n {\n event: \"agent.task.failed\",\n payload: {\n agent: \"ticket-triage\",\n ticketId: \"{{trigger.id}}\",\n },\n },\n ],\n },\n\n tags: [\"support\", \"triage\", \"ai\", \"automation\"],\n author: \"codmir-team\",\n};\n\nexport default ticketTriageContract;\n","/**\n * @fileoverview\n * Example contract: Code Review Workflow\n *\n * This contract demonstrates an autonomous agent that:\n * 1. Analyzes pull request changes\n * 2. Checks for code quality issues\n * 3. Suggests improvements\n * 4. Posts review comments\n * 5. Waits for author response (human-in-the-loop)\n */\n\nimport type { CodmirContract } from \"../schema\";\n\n/**\n * Code Review Contract\n *\n * Triggered by: github.pull_request.opened, github.pull_request.synchronize\n * Permissions: Read repo, emit events, invoke LLM, post comments\n */\nexport const codeReviewContract: CodmirContract = {\n schemaVersion: \"codmir.contract.v1\",\n id: \"codmir.code-review\",\n version: \"1.0.0\",\n title: \"Code Review Agent\",\n description:\n \"Automatically reviews pull requests, checks code quality, and suggests improvements\",\n\n triggers: [\n {\n type: \"event\",\n event: \"github.pull_request.opened\",\n },\n {\n type: \"event\",\n event: \"github.pull_request.synchronize\",\n },\n ],\n\n permissions: [\n { kind: \"event:emit\", pattern: \"github.*\" },\n { kind: \"event:emit\", pattern: \"review.*\" },\n { kind: \"event:read\", pattern: \"github.*\" },\n { kind: \"repo:read\", scope: \"*\" },\n { kind: \"llm:invoke\", models: [\"gpt-5\", \"claude-3-sonnet\"] },\n { kind: \"http:request\", domains: [\"api.github.com\"] },\n ],\n\n limits: {\n maxRunMs: 300_000, // 5 minutes\n maxSteps: 20,\n maxLlmCalls: 10,\n maxTokens: 50000,\n },\n\n entryStepId: \"fetch-diff\",\n\n steps: [\n // Step 1: Fetch PR diff\n {\n id: \"fetch-diff\",\n name: \"Fetch PR Diff\",\n kind: \"task\",\n description: \"Fetch the pull request diff from GitHub\",\n task: \"github-fetch-diff\",\n input: {\n owner: \"{{trigger.repository.owner}}\",\n repo: \"{{trigger.repository.name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n saveAs: \"steps.diff\",\n timeout: { ms: 30000 },\n retry: { maxAttempts: 2, backoffMs: 1000 },\n next: \"check-size\",\n },\n\n // Step 2: Check PR size\n {\n id: \"check-size\",\n name: \"Check PR Size\",\n kind: \"branch\",\n description: \"Route large PRs differently\",\n branches: [\n {\n when: { op: \"gt\", path: \"steps.diff.linesChanged\", value: 1000 },\n next: \"large-pr-warning\",\n },\n ],\n defaultNext: \"analyze-code\",\n },\n\n // Step 2a: Warn about large PR\n {\n id: \"large-pr-warning\",\n name: \"Large PR Warning\",\n kind: \"emit\",\n description: \"Emit warning about large PR size\",\n event: \"review.warning\",\n payload: {\n pullNumber: \"{{trigger.pull_request.number}}\",\n reason: \"PR is too large for effective review\",\n linesChanged: \"{{steps.diff.linesChanged}}\",\n recommendation: \"Consider breaking into smaller PRs\",\n },\n next: \"analyze-code\",\n },\n\n // Step 3: Analyze code with LLM\n {\n id: \"analyze-code\",\n name: \"Analyze Code\",\n kind: \"llm\",\n description: \"Use AI to analyze code changes for issues\",\n model: \"gpt-5\",\n systemPrompt: `You are an expert code reviewer. Analyze the diff and identify:\n1. Potential bugs or logic errors\n2. Security vulnerabilities\n3. Performance issues\n4. Code style violations\n5. Missing tests\n6. Documentation gaps\n\nFor each issue, provide:\n- File and line number\n- Severity (critical/warning/info)\n- Description\n- Suggested fix\n\nRespond in JSON format with an \"issues\" array.`,\n prompt: {\n diff: \"{{steps.diff.content}}\",\n prTitle: \"{{trigger.pull_request.title}}\",\n prDescription: \"{{trigger.pull_request.body}}\",\n },\n saveAs: \"steps.analysis\",\n temperature: 0.2,\n maxTokens: 4000,\n next: \"check-critical\",\n },\n\n // Step 4: Check for critical issues\n {\n id: \"check-critical\",\n name: \"Check Critical Issues\",\n kind: \"branch\",\n description: \"Route critical issues to blocking review\",\n branches: [\n {\n when: {\n op: \"exists\",\n path: \"steps.analysis.issues\",\n },\n next: \"filter-critical\",\n },\n ],\n defaultNext: \"approve\",\n },\n\n // Step 4a: Filter critical issues\n {\n id: \"filter-critical\",\n name: \"Filter Critical\",\n kind: \"transform\",\n description: \"Extract critical issues for blocking\",\n transforms: {\n \"review.hasCritical\": true,\n \"review.issues\": \"{{steps.analysis.issues}}\",\n },\n next: \"post-comments\",\n },\n\n // Step 5: Post review comments\n {\n id: \"post-comments\",\n name: \"Post Comments\",\n kind: \"task\",\n description: \"Post review comments on GitHub\",\n task: \"github-post-review\",\n input: {\n owner: \"{{trigger.repository.owner}}\",\n repo: \"{{trigger.repository.name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n body: \"## AI Code Review\\n\\nI found {{review.issues.length}} issue(s) in this PR.\",\n comments: \"{{review.issues}}\",\n event: \"REQUEST_CHANGES\",\n },\n saveAs: \"steps.reviewPost\",\n next: \"wait-author-response\",\n },\n\n // Step 6: Wait for author response\n {\n id: \"wait-author-response\",\n name: \"Wait for Response\",\n kind: \"wait\",\n description: \"Wait for author to address issues or respond\",\n event: \"github.pull_request.synchronize\",\n saveEventAs: \"events.authorResponse\",\n timeout: { ms: 86400000 }, // 24 hours\n next: \"re-analyze\",\n nextOnTimeout: \"timeout-reminder\",\n },\n\n // Step 6a: Re-analyze after author changes\n {\n id: \"re-analyze\",\n name: \"Re-analyze\",\n kind: \"task\",\n description: \"Re-fetch and re-analyze after author changes\",\n task: \"github-fetch-diff\",\n input: {\n owner: \"{{trigger.repository.owner}}\",\n repo: \"{{trigger.repository.name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n saveAs: \"steps.newDiff\",\n next: \"analyze-code\",\n },\n\n // Step 6b: Timeout reminder\n {\n id: \"timeout-reminder\",\n name: \"Timeout Reminder\",\n kind: \"emit\",\n description: \"Remind author about pending review\",\n event: \"review.reminder\",\n payload: {\n pullNumber: \"{{trigger.pull_request.number}}\",\n author: \"{{trigger.pull_request.user.login}}\",\n message: \"Code review feedback is still pending\",\n },\n next: null,\n },\n\n // Step 7: Approve PR\n {\n id: \"approve\",\n name: \"Approve PR\",\n kind: \"task\",\n description: \"Approve the PR with positive review\",\n task: \"github-post-review\",\n input: {\n owner: \"{{trigger.repository.owner}}\",\n repo: \"{{trigger.repository.name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n body: \"## AI Code Review\\n\\nā
LGTM! No issues found.\",\n event: \"APPROVE\",\n },\n saveAs: \"steps.approval\",\n next: \"complete\",\n },\n\n // Step 8: Complete\n {\n id: \"complete\",\n name: \"Complete\",\n kind: \"emit\",\n description: \"Emit review completion event\",\n event: \"review.completed\",\n payload: {\n pullNumber: \"{{trigger.pull_request.number}}\",\n repository: \"{{trigger.repository.full_name}}\",\n result: \"approved\",\n },\n next: null,\n },\n ],\n\n outputs: {\n onCompleted: [\n {\n event: \"agent.task.completed\",\n payload: {\n agent: \"code-review\",\n repository: \"{{trigger.repository.full_name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n },\n ],\n onFailed: [\n {\n event: \"agent.task.failed\",\n payload: {\n agent: \"code-review\",\n repository: \"{{trigger.repository.full_name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n },\n ],\n },\n\n tags: [\"github\", \"code-review\", \"ai\", \"automation\"],\n author: \"codmir-team\",\n};\n\nexport default codeReviewContract;\n","/**\n * @fileoverview\n * PR Analysis Contract\n *\n * This contract is triggered by GitHub App webhooks (not GitHub Actions)\n * when a pull request is opened, synchronized, or reopened.\n *\n * It replaces the ai-pr-review.yml GitHub Actions workflow with\n * event-driven execution through the Codmir engine.\n */\n\nimport type { CodmirContract } from \"../schema\";\n\n/**\n * PR Analysis Contract\n *\n * Triggered by: github.pull_request.opened, github.pull_request.synchronize, github.pull_request.reopened\n * Permissions: Read repo, emit events, invoke LLM, post comments via HTTP\n */\nexport const prAnalysisContract: CodmirContract = {\n schemaVersion: \"codmir.contract.v1\",\n id: \"codmir.pr-analysis\",\n version: \"1.0.0\",\n title: \"PR Analysis Agent\",\n description:\n \"Automatically analyzes pull requests for code quality, secrets, and best practices when triggered by GitHub App webhook\",\n\n triggers: [\n {\n type: \"event\",\n event: \"github.pull_request.opened\",\n },\n {\n type: \"event\",\n event: \"github.pull_request.synchronize\",\n },\n {\n type: \"event\",\n event: \"github.pull_request.reopened\",\n },\n {\n type: \"event\",\n event: \"github.pull_request.ready_for_review\",\n },\n ],\n\n permissions: [\n { kind: \"event:emit\", pattern: \"github.*\" },\n { kind: \"event:emit\", pattern: \"pr.*\" },\n { kind: \"event:read\", pattern: \"github.*\" },\n { kind: \"repo:read\", scope: \"*\" },\n { kind: \"http:request\", domains: [\"api.github.com\"] },\n { kind: \"secrets:read\", keys: [\"GITHUB_TOKEN\", \"GITHUB_APP_*\"] },\n ],\n\n limits: {\n maxRunMs: 120_000, // 2 minutes\n maxSteps: 10,\n maxLlmCalls: 0, // No LLM calls needed for basic analysis\n maxTokens: 0,\n },\n\n entryStepId: \"run-analysis\",\n\n steps: [\n // Step 1: Run full PR analysis (fetch + analyze + post comment)\n {\n id: \"run-analysis\",\n name: \"Run PR Analysis\",\n kind: \"task\",\n description: \"Fetch PR info, analyze diff, and post analysis comment\",\n task: \"pr-run-analysis\",\n input: {\n owner: \"{{trigger.repository.owner.login}}\",\n repo: \"{{trigger.repository.name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n installationId: \"{{trigger.installation.id}}\",\n },\n saveAs: \"steps.analysis\",\n timeout: { ms: 60000 },\n retry: { maxAttempts: 2, backoffMs: 2000 },\n next: \"check-secrets\",\n },\n\n // Step 2: Check for critical issues (secrets detected)\n {\n id: \"check-secrets\",\n name: \"Check for Secrets\",\n kind: \"branch\",\n description: \"Check if secrets were detected in the PR\",\n branches: [\n {\n when: {\n op: \"gt\",\n path: \"steps.analysis.analysis.secrets.length\",\n value: 0,\n },\n next: \"emit-secret-alert\",\n },\n ],\n defaultNext: \"emit-completed\",\n },\n\n // Step 2a: Emit secret alert\n {\n id: \"emit-secret-alert\",\n name: \"Emit Secret Alert\",\n kind: \"emit\",\n description: \"Emit alert about potential secrets detected\",\n event: \"pr.secrets.detected\",\n payload: {\n pullNumber: \"{{trigger.pull_request.number}}\",\n repository: \"{{trigger.repository.full_name}}\",\n secretCount: \"{{steps.analysis.analysis.secrets.length}}\",\n secrets: \"{{steps.analysis.analysis.secrets}}\",\n severity: \"critical\",\n },\n next: \"emit-completed\",\n },\n\n // Step 3: Emit completion event\n {\n id: \"emit-completed\",\n name: \"Emit Completed\",\n kind: \"emit\",\n description: \"Emit PR analysis completion event\",\n event: \"pr.analysis.completed\",\n payload: {\n pullNumber: \"{{trigger.pull_request.number}}\",\n repository: \"{{trigger.repository.full_name}}\",\n analysis: \"{{steps.analysis.analysis}}\",\n commentPosted: \"{{steps.analysis.commentPosted}}\",\n commentId: \"{{steps.analysis.commentId}}\",\n },\n next: null,\n },\n ],\n\n outputs: {\n onCompleted: [\n {\n event: \"agent.task.completed\",\n payload: {\n agent: \"pr-analysis\",\n repository: \"{{trigger.repository.full_name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n result: \"{{steps.analysis}}\",\n },\n },\n ],\n onFailed: [\n {\n event: \"agent.task.failed\",\n payload: {\n agent: \"pr-analysis\",\n repository: \"{{trigger.repository.full_name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n },\n ],\n },\n\n tags: [\"github\", \"pr-analysis\", \"automation\", \"webhook\"],\n author: \"codmir-team\",\n};\n\n/**\n * Enhanced PR Analysis Contract with LLM review\n *\n * This version includes AI-powered code review in addition to static analysis.\n * Use this for more comprehensive reviews.\n */\nexport const prAnalysisWithLlmContract: CodmirContract = {\n schemaVersion: \"codmir.contract.v1\",\n id: \"codmir.pr-analysis-llm\",\n version: \"1.0.0\",\n title: \"PR Analysis Agent (with AI Review)\",\n description:\n \"Analyzes pull requests with AI-powered code review for deeper insights\",\n\n triggers: [\n {\n type: \"event\",\n event: \"github.pull_request.opened\",\n },\n {\n type: \"event\",\n event: \"github.pull_request.synchronize\",\n },\n ],\n\n permissions: [\n { kind: \"event:emit\", pattern: \"github.*\" },\n { kind: \"event:emit\", pattern: \"pr.*\" },\n { kind: \"event:read\", pattern: \"github.*\" },\n { kind: \"repo:read\", scope: \"*\" },\n { kind: \"http:request\", domains: [\"api.github.com\"] },\n { kind: \"secrets:read\", keys: [\"GITHUB_TOKEN\", \"GITHUB_APP_*\"] },\n { kind: \"llm:invoke\", models: [\"claude-3-sonnet\", \"claude-3-haiku\"] },\n ],\n\n limits: {\n maxRunMs: 300_000, // 5 minutes\n maxSteps: 15,\n maxLlmCalls: 5,\n maxTokens: 50000,\n },\n\n entryStepId: \"fetch-pr\",\n\n steps: [\n // Step 1: Fetch PR info\n {\n id: \"fetch-pr\",\n name: \"Fetch PR Info\",\n kind: \"task\",\n description: \"Fetch pull request metadata from GitHub\",\n task: \"pr-fetch-info\",\n input: {\n owner: \"{{trigger.repository.owner.login}}\",\n repo: \"{{trigger.repository.name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n saveAs: \"steps.pr\",\n timeout: { ms: 15000 },\n next: \"fetch-files\",\n },\n\n // Step 2: Fetch PR files\n {\n id: \"fetch-files\",\n name: \"Fetch PR Files\",\n kind: \"task\",\n description: \"Fetch changed files with patches\",\n task: \"pr-fetch-files\",\n input: {\n owner: \"{{trigger.repository.owner.login}}\",\n repo: \"{{trigger.repository.name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n saveAs: \"steps.files\",\n timeout: { ms: 30000 },\n next: \"static-analysis\",\n },\n\n // Step 3: Run static analysis\n {\n id: \"static-analysis\",\n name: \"Static Analysis\",\n kind: \"task\",\n description: \"Run heuristic analysis on PR diff\",\n task: \"pr-analyze-diff\",\n input: {\n pr: \"{{steps.pr}}\",\n files: \"{{steps.files}}\",\n owner: \"{{trigger.repository.owner.login}}\",\n repo: \"{{trigger.repository.name}}\",\n },\n saveAs: \"steps.staticAnalysis\",\n timeout: { ms: 30000 },\n next: \"llm-review\",\n },\n\n // Step 4: AI-powered code review\n {\n id: \"llm-review\",\n name: \"AI Code Review\",\n kind: \"llm\",\n description: \"Use AI to review code changes for issues and improvements\",\n model: \"claude-3-sonnet\",\n systemPrompt: `You are an expert code reviewer. Analyze the PR diff and identify:\n1. Potential bugs or logic errors\n2. Security vulnerabilities\n3. Performance issues\n4. Code style violations\n5. Missing error handling\n6. Suggestions for improvement\n\nBe concise and actionable. Focus on the most important issues.\nRespond in JSON format with an \"issues\" array containing objects with:\n- severity: \"critical\" | \"warning\" | \"info\"\n- file: string (filename)\n- line: number (approximate line if known)\n- issue: string (description)\n- suggestion: string (how to fix)`,\n prompt: {\n prTitle: \"{{steps.pr.title}}\",\n prDescription: \"{{trigger.pull_request.body}}\",\n staticIssues: \"{{steps.staticAnalysis.analysis.issues}}\",\n changedFiles: \"{{steps.files}}\",\n },\n saveAs: \"steps.llmReview\",\n temperature: 0.2,\n maxTokens: 4000,\n next: \"post-comment\",\n },\n\n // Step 5: Post combined analysis comment\n {\n id: \"post-comment\",\n name: \"Post Comment\",\n kind: \"task\",\n description: \"Post analysis and AI review comment to PR\",\n task: \"pr-post-comment\",\n input: {\n owner: \"{{trigger.repository.owner.login}}\",\n repo: \"{{trigger.repository.name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n markdown: \"{{steps.staticAnalysis.markdown}}\\n\\n### š¤ AI Review\\n\\n{{steps.llmReview.content}}\",\n },\n saveAs: \"steps.comment\",\n timeout: { ms: 15000 },\n next: \"emit-completed\",\n },\n\n // Step 6: Emit completion\n {\n id: \"emit-completed\",\n name: \"Complete\",\n kind: \"emit\",\n description: \"Emit completion event\",\n event: \"pr.analysis.completed\",\n payload: {\n pullNumber: \"{{trigger.pull_request.number}}\",\n repository: \"{{trigger.repository.full_name}}\",\n staticAnalysis: \"{{steps.staticAnalysis.analysis}}\",\n llmReview: \"{{steps.llmReview}}\",\n commentPosted: true,\n },\n next: null,\n },\n ],\n\n outputs: {\n onCompleted: [\n {\n event: \"agent.task.completed\",\n payload: {\n agent: \"pr-analysis-llm\",\n repository: \"{{trigger.repository.full_name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n },\n ],\n onFailed: [\n {\n event: \"agent.task.failed\",\n payload: {\n agent: \"pr-analysis-llm\",\n repository: \"{{trigger.repository.full_name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n },\n ],\n },\n\n tags: [\"github\", \"pr-analysis\", \"ai-review\", \"automation\", \"webhook\"],\n author: \"codmir-team\",\n};\n\nexport default prAnalysisContract;\n","/**\n * @fileoverview\n * Voice Create Ticket Contract\n *\n * Creates a ticket/issue from a voice command.\n * This is a fast, synchronous action (instant duration).\n */\n\nimport type { CodmirContract } from \"../schema\";\n\nexport const voiceCreateTicketContract: CodmirContract = {\n schemaVersion: \"codmir.contract.v1\",\n id: \"voice.create-ticket\",\n version: \"1.0.0\",\n title: \"Create Ticket via Voice\",\n description: \"Creates a new ticket/issue from a voice command\",\n\n execution: {\n expectedDuration: \"instant\",\n mode: \"sync\",\n asyncAckMessage: \"Creating your ticket now...\",\n },\n\n triggers: [\n {\n type: \"event\",\n event: \"voice.action.requested\",\n where: { action: \"create_ticket\" },\n },\n ],\n\n permissions: [\n { kind: \"storage:write\", scope: \"tickets\" },\n { kind: \"event:emit\", pattern: \"ticket.created\" },\n ],\n\n limits: {\n maxRunMs: 10000,\n maxSteps: 5,\n },\n\n entryStepId: \"validate\",\n\n steps: [\n {\n id: \"validate\",\n name: \"Validate Input\",\n kind: \"transform\",\n transforms: {\n \"input.title\": \"{{trigger.payload.params.title}}\",\n \"input.description\": \"{{trigger.payload.params.description}}\",\n \"input.priority\": \"{{trigger.payload.params.priority}}\",\n \"input.projectId\": \"{{trigger.payload.params.projectId}}\",\n \"input.labels\": \"{{trigger.payload.params.labels}}\",\n \"input.userId\": \"{{trigger.payload.userId}}\",\n },\n next: \"create\",\n },\n {\n id: \"create\",\n name: \"Create Ticket\",\n kind: \"task\",\n task: \"voice.create-ticket\",\n input: {\n title: \"{{input.title}}\",\n description: \"{{input.description}}\",\n priority: \"{{input.priority}}\",\n projectId: \"{{input.projectId}}\",\n labels: \"{{input.labels}}\",\n userId: \"{{input.userId}}\",\n },\n saveAs: \"ticket\",\n next: \"emit\",\n },\n {\n id: \"emit\",\n name: \"Emit Ticket Created Event\",\n kind: \"emit\",\n event: \"ticket.created\",\n payload: {\n ticketId: \"{{ticket.id}}\",\n title: \"{{ticket.title}}\",\n priority: \"{{ticket.priority}}\",\n source: \"voice\",\n userId: \"{{input.userId}}\",\n },\n next: \"output\",\n },\n {\n id: \"output\",\n name: \"Prepare Output\",\n kind: \"transform\",\n transforms: {\n \"output.success\": true,\n \"output.ticketId\": \"{{ticket.id}}\",\n \"output.title\": \"{{ticket.title}}\",\n \"output.url\": \"{{ticket.url}}\",\n \"output.message\": \"Ticket created successfully\",\n },\n next: null,\n },\n ],\n\n outputs: {\n onCompleted: [\n {\n event: \"voice.action.completed\",\n payload: {\n action: \"create_ticket\",\n success: true,\n result: \"{{output}}\",\n },\n },\n ],\n onFailed: [\n {\n event: \"voice.action.failed\",\n payload: {\n action: \"create_ticket\",\n error: \"{{error}}\",\n },\n },\n ],\n },\n\n tags: [\"voice\", \"tickets\", \"instant\"],\n};\n","/**\n * @fileoverview\n * Voice Search Codebase Contract\n *\n * Searches the codebase for patterns, functions, or files from voice command.\n * This is a quick action (2-30s depending on codebase size).\n */\n\nimport type { CodmirContract } from \"../schema\";\n\nexport const voiceSearchCodebaseContract: CodmirContract = {\n schemaVersion: \"codmir.contract.v1\",\n id: \"voice.search-codebase\",\n version: \"1.0.0\",\n title: \"Search Codebase via Voice\",\n description: \"Searches the codebase for specific patterns, functions, or files\",\n\n execution: {\n expectedDuration: \"quick\",\n mode: \"sync\",\n syncThreshold: 15000, // 15 seconds max wait\n asyncAckMessage: \"Searching the codebase now...\",\n },\n\n triggers: [\n {\n type: \"event\",\n event: \"voice.action.requested\",\n where: { action: \"search_codebase\" },\n },\n ],\n\n permissions: [\n { kind: \"repo:read\", scope: \"*\" },\n { kind: \"event:emit\", pattern: \"search.completed\" },\n ],\n\n limits: {\n maxRunMs: 30000,\n maxSteps: 5,\n },\n\n entryStepId: \"validate\",\n\n steps: [\n {\n id: \"validate\",\n name: \"Validate Input\",\n kind: \"transform\",\n transforms: {\n \"input.query\": \"{{trigger.payload.params.query}}\",\n \"input.fileTypes\": \"{{trigger.payload.params.file_types}}\",\n \"input.pathFilter\": \"{{trigger.payload.params.path_filter}}\",\n \"input.maxResults\": \"{{trigger.payload.params.max_results}}\",\n \"input.userId\": \"{{trigger.payload.userId}}\",\n },\n next: \"search\",\n },\n {\n id: \"search\",\n name: \"Search Codebase\",\n kind: \"task\",\n task: \"voice.search-codebase\",\n input: {\n query: \"{{input.query}}\",\n fileTypes: \"{{input.fileTypes}}\",\n pathFilter: \"{{input.pathFilter}}\",\n maxResults: \"{{input.maxResults}}\",\n },\n saveAs: \"searchResults\",\n next: \"output\",\n },\n {\n id: \"output\",\n name: \"Prepare Output\",\n kind: \"transform\",\n transforms: {\n \"output.success\": true,\n \"output.query\": \"{{input.query}}\",\n \"output.results\": \"{{searchResults.results}}\",\n \"output.total\": \"{{searchResults.total}}\",\n \"output.message\": \"Found {{searchResults.total}} results\",\n },\n next: null,\n },\n ],\n\n outputs: {\n onCompleted: [\n {\n event: \"voice.action.completed\",\n payload: {\n action: \"search_codebase\",\n success: true,\n result: \"{{output}}\",\n },\n },\n ],\n onFailed: [\n {\n event: \"voice.action.failed\",\n payload: {\n action: \"search_codebase\",\n error: \"{{error}}\",\n },\n },\n ],\n },\n\n tags: [\"voice\", \"search\", \"code\", \"quick\"],\n};\n","/**\n * @fileoverview\n * Voice Deploy Preview Contract\n *\n * Deploys a preview environment from a voice command.\n * This is a long-running action that requires approval (async).\n */\n\nimport type { CodmirContract } from \"../schema\";\n\nexport const voiceDeployPreviewContract: CodmirContract = {\n schemaVersion: \"codmir.contract.v1\",\n id: \"voice.deploy-preview\",\n version: \"1.0.0\",\n title: \"Deploy Preview via Voice\",\n description: \"Deploys a preview environment for testing\",\n\n execution: {\n expectedDuration: \"long\",\n mode: \"async\",\n interruptible: true,\n asyncAckMessage: \"I'll start the deployment. This may take a few minutes - I'll notify you when it's ready.\",\n },\n\n triggers: [\n {\n type: \"event\",\n event: \"voice.action.requested\",\n where: { action: \"deploy_preview\" },\n },\n ],\n\n permissions: [\n { kind: \"http:request\", domains: [\"api.vercel.com\", \"api.netlify.com\", \"api.railway.app\"] },\n { kind: \"repo:read\", scope: \"*\" },\n { kind: \"event:emit\", pattern: \"deploy.*\" },\n ],\n\n limits: {\n maxRunMs: 600000, // 10 minutes\n maxSteps: 10,\n },\n\n entryStepId: \"validate\",\n\n steps: [\n {\n id: \"validate\",\n name: \"Validate Input\",\n kind: \"transform\",\n transforms: {\n \"input.branch\": \"{{trigger.payload.params.branch}}\",\n \"input.environment\": \"{{trigger.payload.params.environment}}\",\n \"input.projectId\": \"{{trigger.payload.params.projectId}}\",\n \"input.userId\": \"{{trigger.payload.userId}}\",\n },\n next: \"confirm\",\n },\n {\n id: \"confirm\",\n name: \"Confirm Deployment\",\n kind: \"approval\",\n prompt: \"Deploy branch '{{input.branch}}' to {{input.environment}} environment?\",\n approvers: [\"{{input.userId}}\"],\n nextOnApproved: \"deploy\",\n nextOnDenied: \"cancelled\",\n timeout: { ms: 60000 },\n timeoutAction: \"deny\",\n context: {\n branch: \"{{input.branch}}\",\n environment: \"{{input.environment}}\",\n },\n },\n {\n id: \"deploy\",\n name: \"Deploy to Preview\",\n kind: \"task\",\n task: \"voice.deploy-preview\",\n input: {\n branch: \"{{input.branch}}\",\n environment: \"{{input.environment}}\",\n projectId: \"{{input.projectId}}\",\n },\n saveAs: \"deployment\",\n timeout: { ms: 300000 }, // 5 min timeout for deployment\n next: \"notify\",\n },\n {\n id: \"notify\",\n name: \"Emit Deployment Event\",\n kind: \"emit\",\n event: \"deploy.completed\",\n payload: {\n deploymentId: \"{{deployment.id}}\",\n url: \"{{deployment.url}}\",\n branch: \"{{input.branch}}\",\n environment: \"{{input.environment}}\",\n source: \"voice\",\n userId: \"{{input.userId}}\",\n },\n next: \"output\",\n },\n {\n id: \"output\",\n name: \"Prepare Output\",\n kind: \"transform\",\n transforms: {\n \"output.success\": true,\n \"output.deploymentId\": \"{{deployment.id}}\",\n \"output.url\": \"{{deployment.url}}\",\n \"output.branch\": \"{{input.branch}}\",\n \"output.message\": \"Deployment complete! Preview available at {{deployment.url}}\",\n },\n next: null,\n },\n {\n id: \"cancelled\",\n name: \"Handle Cancellation\",\n kind: \"transform\",\n transforms: {\n \"output.success\": false,\n \"output.message\": \"Deployment was cancelled\",\n },\n next: null,\n },\n ],\n\n outputs: {\n onCompleted: [\n {\n event: \"voice.action.completed\",\n payload: {\n action: \"deploy_preview\",\n success: true,\n result: \"{{output}}\",\n },\n },\n ],\n onFailed: [\n {\n event: \"voice.action.failed\",\n payload: {\n action: \"deploy_preview\",\n error: \"{{error}}\",\n },\n },\n ],\n onCancelled: [\n {\n event: \"voice.action.cancelled\",\n payload: {\n action: \"deploy_preview\",\n reason: \"User cancelled or approval timeout\",\n },\n },\n ],\n },\n\n tags: [\"voice\", \"deploy\", \"preview\", \"long\", \"approval\"],\n};\n","/**\n * @fileoverview\n * Voice Save Note Contract\n *\n * Saves a note or snippet from a voice command.\n * This is a fast, synchronous action (instant duration).\n */\n\nimport type { CodmirContract } from \"../schema\";\n\nexport const voiceSaveNoteContract: CodmirContract = {\n schemaVersion: \"codmir.contract.v1\",\n id: \"voice.save-note\",\n version: \"1.0.0\",\n title: \"Save Note via Voice\",\n description: \"Saves a note or snippet for later reference\",\n\n execution: {\n expectedDuration: \"instant\",\n mode: \"sync\",\n asyncAckMessage: \"Saving your note...\",\n },\n\n triggers: [\n {\n type: \"event\",\n event: \"voice.action.requested\",\n where: { action: \"save_note\" },\n },\n ],\n\n permissions: [\n { kind: \"storage:write\", scope: \"notes\" },\n { kind: \"event:emit\", pattern: \"note.saved\" },\n ],\n\n limits: {\n maxRunMs: 10000,\n maxSteps: 4,\n },\n\n entryStepId: \"validate\",\n\n steps: [\n {\n id: \"validate\",\n name: \"Validate Input\",\n kind: \"transform\",\n transforms: {\n \"input.content\": \"{{trigger.payload.params.content}}\",\n \"input.title\": \"{{trigger.payload.params.title}}\",\n \"input.tags\": \"{{trigger.payload.params.tags}}\",\n \"input.userId\": \"{{trigger.payload.userId}}\",\n },\n next: \"save\",\n },\n {\n id: \"save\",\n name: \"Save Note\",\n kind: \"task\",\n task: \"voice.save-note\",\n input: {\n content: \"{{input.content}}\",\n title: \"{{input.title}}\",\n tags: \"{{input.tags}}\",\n userId: \"{{input.userId}}\",\n },\n saveAs: \"note\",\n next: \"output\",\n },\n {\n id: \"output\",\n name: \"Prepare Output\",\n kind: \"transform\",\n transforms: {\n \"output.success\": true,\n \"output.noteId\": \"{{note.id}}\",\n \"output.title\": \"{{note.title}}\",\n \"output.message\": \"Note saved successfully\",\n },\n next: null,\n },\n ],\n\n outputs: {\n onCompleted: [\n {\n event: \"voice.action.completed\",\n payload: {\n action: \"save_note\",\n success: true,\n result: \"{{output}}\",\n },\n },\n ],\n onFailed: [\n {\n event: \"voice.action.failed\",\n payload: {\n action: \"save_note\",\n error: \"{{error}}\",\n },\n },\n ],\n },\n\n tags: [\"voice\", \"notes\", \"instant\"],\n};\n","/**\n * @fileoverview\n * Voice Contract Registry\n *\n * Central registry for all voice action contracts.\n * Provides lookup by contract ID or action name.\n */\n\nimport type { CodmirContract } from \"../schema\";\nimport { voiceCreateTicketContract } from \"./create-ticket\";\nimport { voiceSearchCodebaseContract } from \"./search-codebase\";\nimport { voiceDeployPreviewContract } from \"./deploy-preview\";\nimport { voiceSaveNoteContract } from \"./save-note\";\n\n/**\n * Map of action names to contract IDs.\n * Action names come from the voice event catalog (e.g., \"create_ticket\").\n */\nconst ACTION_TO_CONTRACT_ID: Record<string, string> = {\n create_ticket: \"voice.create-ticket\",\n update_ticket: \"voice.update-ticket\",\n search_codebase: \"voice.search-codebase\",\n search_documentation: \"voice.search-documentation\",\n analyze_code: \"voice.analyze-code\",\n suggest_fix: \"voice.suggest-fix\",\n run_query: \"voice.run-query\",\n get_metrics: \"voice.get-metrics\",\n deploy_preview: \"voice.deploy-preview\",\n check_deploy_status: \"voice.check-deploy-status\",\n send_notification: \"voice.send-notification\",\n create_summary: \"voice.create-summary\",\n set_reminder: \"voice.set-reminder\",\n save_note: \"voice.save-note\",\n};\n\n/**\n * All registered voice contracts.\n */\nexport const VOICE_CONTRACTS: Record<string, CodmirContract> = {\n \"voice.create-ticket\": voiceCreateTicketContract,\n \"voice.search-codebase\": voiceSearchCodebaseContract,\n \"voice.deploy-preview\": voiceDeployPreviewContract,\n \"voice.save-note\": voiceSaveNoteContract,\n};\n\n/**\n * Get a voice contract by its ID.\n * @param contractId - Contract ID (e.g., \"voice.create-ticket\")\n * @returns The contract or undefined if not found\n */\nexport function getVoiceContract(contractId: string): CodmirContract | undefined {\n return VOICE_CONTRACTS[contractId];\n}\n\n/**\n * Get a voice contract by the action name from the event catalog.\n * @param actionName - Action name (e.g., \"create_ticket\")\n * @returns The contract or undefined if not found\n */\nexport function getVoiceContractForAction(actionName: string): CodmirContract | undefined {\n const contractId = ACTION_TO_CONTRACT_ID[actionName];\n if (!contractId) return undefined;\n return VOICE_CONTRACTS[contractId];\n}\n\n/**\n * Check if a contract exists for the given action.\n * @param actionName - Action name (e.g., \"create_ticket\")\n * @returns True if a contract exists for this action\n */\nexport function hasContractForAction(actionName: string): boolean {\n const contractId = ACTION_TO_CONTRACT_ID[actionName];\n return contractId !== undefined && VOICE_CONTRACTS[contractId] !== undefined;\n}\n\n/**\n * Get all registered voice contracts.\n * @returns Array of all voice contracts\n */\nexport function getAllVoiceContracts(): CodmirContract[] {\n return Object.values(VOICE_CONTRACTS);\n}\n\n/**\n * Get the contract ID for a given action name.\n * @param actionName - Action name (e.g., \"create_ticket\")\n * @returns Contract ID or undefined\n */\nexport function getContractIdForAction(actionName: string): string | undefined {\n return ACTION_TO_CONTRACT_ID[actionName];\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/schema.ts","../src/grace.ts","../src/templates.ts","../src/conditions.ts","../src/validation.ts","../src/examples/ticket-triage.ts","../src/examples/code-review.ts","../src/examples/pr-analysis.ts","../src/cluster/schemas.ts","../src/voice/create-ticket.ts","../src/voice/search-codebase.ts","../src/voice/deploy-preview.ts","../src/voice/save-note.ts","../src/voice/registry.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @fileoverview\n * Codmir Contract Schema v1\n *\n * Contracts are versioned, JSON-serializable, and deterministic.\n * They define what autonomous agents are allowed to do, their triggers,\n * permissions, steps, and execution policies.\n */\n\n// ============================================================================\n// Primitive Types\n// ============================================================================\n\nexport type IsoDateString = string;\nexport type ContractId = string;\nexport type ContractVersion = string;\nexport type StepId = string;\nexport type RunId = string;\nexport type EventName = string;\n\nexport type JsonValue =\n | string\n | number\n | boolean\n | null\n | { [k: string]: JsonValue }\n | JsonValue[];\n\n// ============================================================================\n// Permissions\n// ============================================================================\n\n/**\n * Permission types that a contract can request.\n * Engine/Policy adapter enforces these before any action.\n */\nexport type Permission =\n | { kind: \"event:emit\"; pattern: string }\n | { kind: \"event:read\"; pattern: string }\n | { kind: \"storage:read\"; scope: string }\n | { kind: \"storage:write\"; scope: string }\n | { kind: \"repo:read\"; scope: string }\n | { kind: \"repo:write\"; scope: string }\n | { kind: \"http:request\"; domains: string[] }\n | { kind: \"secrets:read\"; keys: string[] }\n | { kind: \"llm:invoke\"; models?: string[] };\n\n// ============================================================================\n// Triggers\n// ============================================================================\n\n/**\n * Contract trigger definition.\n * Specifies which events can start a new run of this contract.\n */\nexport type ContractTrigger = {\n type: \"event\";\n /**\n * Event pattern support:\n * - exact match: \"ticket.created\"\n * - wildcard: \"ticket.*\"\n */\n event: string;\n /**\n * Optional filter conditions on event payload.\n * Engine evaluates these deterministically.\n */\n where?: Record<string, JsonValue>;\n};\n\n// ============================================================================\n// Retry & Timeout Policies\n// ============================================================================\n\nexport type RetryPolicy = {\n maxAttempts: number;\n backoffMs: number;\n backoffMultiplier?: number;\n};\n\nexport type StepTimeout = {\n /** Hard timeout in milliseconds */\n ms: number;\n};\n\n// ============================================================================\n// Condition Expressions\n// ============================================================================\n\n/**\n * Deterministic condition expression for branching and step guards.\n * Evaluated against run context (JSON-like object).\n */\nexport type ConditionExpr =\n | { op: \"eq\"; path: string; value: JsonValue }\n | { op: \"neq\"; path: string; value: JsonValue }\n | { op: \"gt\"; path: string; value: number }\n | { op: \"gte\"; path: string; value: number }\n | { op: \"lt\"; path: string; value: number }\n | { op: \"lte\"; path: string; value: number }\n | { op: \"and\"; exprs: ConditionExpr[] }\n | { op: \"or\"; exprs: ConditionExpr[] }\n | { op: \"not\"; expr: ConditionExpr }\n | { op: \"exists\"; path: string }\n | { op: \"contains\"; path: string; value: string }\n | { op: \"startsWith\"; path: string; value: string }\n | { op: \"endsWith\"; path: string; value: string };\n\n// ============================================================================\n// Step Types\n// ============================================================================\n\nexport type StepKind = \"task\" | \"llm\" | \"emit\" | \"wait\" | \"branch\" | \"transform\" | \"approval\" | \"skill\" | \"audit\";\n\nexport type StepBase = {\n id: StepId;\n name: string;\n kind: StepKind;\n timeout?: StepTimeout;\n retry?: RetryPolicy;\n /**\n * If present, the step is skipped unless condition resolves true.\n * Condition must be deterministic (based on run context).\n */\n if?: ConditionExpr;\n /**\n * Next step pointer. Some step kinds may override this (branch/wait).\n */\n next?: StepId | null;\n /**\n * Optional description for documentation/debugging.\n */\n description?: string;\n};\n\n/**\n * Task step - executes a named task in runtime (Railway).\n */\nexport type TaskStep = StepBase & {\n kind: \"task\";\n /**\n * A runtime-registered task name, e.g. \"analyze-ticket\", \"apply-patch\".\n */\n task: string;\n /**\n * Inputs are pulled from run context (event payload + accumulated outputs).\n * Engine resolves {{path}} templates deterministically.\n */\n input: Record<string, JsonValue>;\n /**\n * Where to store the step output in run context.\n * Example: \"steps.analyzeTicket\"\n */\n saveAs?: string;\n};\n\n/**\n * LLM step - calls intelligence adapter.\n */\nexport type LlmStep = StepBase & {\n kind: \"llm\";\n model?: string;\n /**\n * Messages or prompt template. Keep JSON-serializable.\n */\n prompt: Record<string, JsonValue>;\n /**\n * Where to store the LLM response in run context.\n */\n saveAs?: string;\n /**\n * Optional system prompt.\n */\n systemPrompt?: string;\n /**\n * Temperature for generation (0-1).\n */\n temperature?: number;\n /**\n * Max tokens for response.\n */\n maxTokens?: number;\n};\n\n/**\n * Emit step - emits an event to the event bus.\n */\nexport type EmitStep = StepBase & {\n kind: \"emit\";\n event: EventName;\n payload: Record<string, JsonValue>;\n};\n\n/**\n * Wait step - waits for an external event to arrive.\n */\nexport type WaitStep = StepBase & {\n kind: \"wait\";\n /**\n * Wait for a specific event name/pattern to arrive.\n * When matched, engine stores it and proceeds.\n */\n event: string;\n /**\n * Where to store the received event payload in run context.\n */\n saveEventAs?: string;\n /**\n * Alternative next step if timeout is reached.\n */\n nextOnTimeout?: StepId | null;\n};\n\n/**\n * Branch step - conditional branching based on run context.\n */\nexport type BranchStep = StepBase & {\n kind: \"branch\";\n branches: Array<{\n when: ConditionExpr;\n next: StepId;\n }>;\n defaultNext: StepId;\n};\n\n/**\n * Transform step - pure data transformation within run context.\n */\nexport type TransformStep = StepBase & {\n kind: \"transform\";\n /**\n * Transformations to apply to run context.\n * Each key is a destination path, value is a template or expression.\n */\n transforms: Record<string, JsonValue>;\n};\n\n/**\n * Approval step - human-in-the-loop gate (Overseer pattern).\n * Pauses execution until approved/denied by authorized actor.\n */\nexport type ApprovalStep = StepBase & {\n kind: \"approval\";\n /**\n * Human-readable description of what is being approved.\n */\n prompt: string;\n /**\n * Users/roles who can approve this step.\n */\n approvers?: string[];\n /**\n * Next step if approved.\n */\n nextOnApproved: StepId;\n /**\n * Next step if denied (optional - run fails if not specified).\n */\n nextOnDenied?: StepId | null;\n /**\n * Timeout behavior - defaults to deny.\n */\n timeoutAction?: \"deny\" | \"approve\" | \"fail\";\n /**\n * Context data to show the approver.\n */\n context?: Record<string, JsonValue>;\n};\n\n/**\n * Skill step - executes a fine-tuned skill (Claude Code integration).\n */\nexport type SkillStep = StepBase & {\n kind: \"skill\";\n /**\n * ID of the skill to execute.\n * @example \"tickets.plan\", \"code.review\", \"tests.generate\"\n */\n skillId: string;\n /**\n * Input to pass to the skill (templates resolved from run context).\n */\n input: Record<string, JsonValue>;\n /**\n * Where to save skill output in run context.\n */\n saveAs?: string;\n /**\n * Next step after skill completes.\n */\n next?: StepId | null;\n};\n\n/**\n * Audit step - audits code changes with AI analysis (Governor pattern).\n * Fetches changes between commits, analyzes with full context, generates findings.\n */\nexport type AuditStep = StepBase & {\n kind: \"audit\";\n /**\n * Target repository (path or URL).\n */\n repository: string;\n /**\n * From commit reference (SHA, tag, or branch).\n * Templates allowed: {{event.payload.baseCommit}}\n */\n fromCommit: string;\n /**\n * To commit reference (SHA, tag, or branch).\n * Templates allowed: {{event.payload.headCommit}}\n */\n toCommit: string;\n /**\n * Include conversation context in analysis.\n */\n includeConversation?: boolean;\n /**\n * Include AI reasoning context in analysis.\n */\n includeReasoning?: boolean;\n /**\n * Minimum severity to report.\n */\n minSeverity?: \"critical\" | \"high\" | \"medium\" | \"low\" | \"info\";\n /**\n * Auto-approve if no issues above threshold.\n */\n autoApproveThreshold?: \"critical\" | \"high\" | \"medium\" | \"low\";\n /**\n * Where to save audit result in run context.\n */\n saveAs?: string;\n /**\n * Next step after audit completes.\n */\n next?: StepId | null;\n /**\n * Next step if audit fails or rejects.\n */\n nextOnReject?: StepId | null;\n};\n\nexport type ContractStep =\n | TaskStep\n | LlmStep\n | EmitStep\n | WaitStep\n | BranchStep\n | TransformStep\n | ApprovalStep\n | SkillStep\n | AuditStep;\n\n// ============================================================================\n// Execution Hints (for Voice/Realtime callers)\n// ============================================================================\n\n/**\n * Expected duration category for smart sync/async routing.\n */\nexport type ExpectedDuration = \"instant\" | \"quick\" | \"medium\" | \"long\";\n\n/**\n * Execution mode preference.\n */\nexport type ExecutionMode = \"sync\" | \"async\" | \"auto\";\n\n/**\n * Execution hints for realtime/voice callers.\n * Helps the engine decide whether to wait for completion or return immediately.\n */\nexport type ExecutionHints = {\n /**\n * Expected duration category for smart routing:\n * - instant: < 2s (DB write, simple API call)\n * - quick: 2-30s (external API, light processing)\n * - medium: 30s-5min (code analysis, file operations)\n * - long: > 5min (deployments, heavy computation)\n */\n expectedDuration: ExpectedDuration;\n\n /**\n * Override: max milliseconds voice/realtime callers should wait.\n * Default is derived from expectedDuration.\n */\n syncThreshold?: number;\n\n /**\n * Preferred execution mode:\n * - sync: Caller waits for result (blocking)\n * - async: Fire-and-forget, notify via events\n * - auto: Engine decides based on expectedDuration (default)\n */\n mode?: ExecutionMode;\n\n /**\n * Can the caller interrupt/cancel mid-execution?\n */\n interruptible?: boolean;\n\n /**\n * Human-friendly message for async acknowledgment.\n * Example: \"I'm deploying that now, I'll let you know when it's ready.\"\n */\n asyncAckMessage?: string;\n};\n\n/**\n * Default sync thresholds per duration category (in milliseconds).\n */\nexport const DURATION_SYNC_THRESHOLDS: Record<ExpectedDuration, number> = {\n instant: 5000, // 5 seconds\n quick: 30000, // 30 seconds\n medium: 120000, // 2 minutes\n long: 300000, // 5 minutes (but usually async)\n};\n\n// ============================================================================\n// Contract Limits\n// ============================================================================\n\nexport type ContractLimits = {\n /**\n * Total run time cap enforced by engine.\n */\n maxRunMs: number;\n /**\n * Maximum number of steps executed to avoid infinite loops.\n */\n maxSteps: number;\n /**\n * Maximum LLM invocations per run.\n */\n maxLlmCalls?: number;\n /**\n * Maximum total tokens consumed per run.\n */\n maxTokens?: number;\n};\n\n// ============================================================================\n// Contract Outputs\n// ============================================================================\n\nexport type ContractOutputs = {\n /**\n * Events emitted at run completion (success).\n */\n onCompleted?: Array<{ event: EventName; payload: Record<string, JsonValue> }>;\n /**\n * Events emitted at run failure.\n */\n onFailed?: Array<{ event: EventName; payload: Record<string, JsonValue> }>;\n /**\n * Events emitted when run is cancelled.\n */\n onCancelled?: Array<{ event: EventName; payload: Record<string, JsonValue> }>;\n};\n\n// ============================================================================\n// Main Contract Type\n// ============================================================================\n\n/**\n * Codmir Contract v1\n *\n * A contract is a declarative agreement describing:\n * - What the agent is allowed to do\n * - What inputs it may consume\n * - What outputs it may emit\n * - What events advance or terminate execution\n * - What resources it can touch\n *\n * Contracts are portable, auditable, and replayable.\n */\nexport type CodmirContract = {\n /**\n * Schema version for forward compatibility.\n */\n schemaVersion: \"codmir.contract.v1\";\n\n /**\n * Unique contract identifier.\n */\n id: ContractId;\n\n /**\n * Semantic version of this contract.\n */\n version: ContractVersion;\n\n /**\n * Human-readable title.\n */\n title: string;\n\n /**\n * Optional description.\n */\n description?: string;\n\n /**\n * Events that can trigger a new run of this contract.\n */\n triggers: ContractTrigger[];\n\n /**\n * Permissions required by this contract.\n */\n permissions: Permission[];\n\n /**\n * Execution limits.\n */\n limits: ContractLimits;\n\n /**\n * Entry point step ID.\n */\n entryStepId: StepId;\n\n /**\n * Step definitions forming the execution graph.\n */\n steps: ContractStep[];\n\n /**\n * Optional output events.\n */\n outputs?: ContractOutputs;\n\n /**\n * Execution hints for voice/realtime callers.\n * Helps decide sync vs async execution based on expected duration.\n */\n execution?: ExecutionHints;\n\n /**\n * Optional tags for categorization.\n */\n tags?: string[];\n\n /**\n * Optional creation timestamp.\n */\n createdAt?: IsoDateString;\n\n /**\n * Optional author/owner.\n */\n author?: string;\n\n /**\n * Optional metadata.\n */\n metadata?: Record<string, JsonValue>;\n};\n\n// ============================================================================\n// Contract Registry Types\n// ============================================================================\n\n/**\n * Summary of a contract for registry listing.\n */\nexport type ContractSummary = {\n id: ContractId;\n version: ContractVersion;\n title: string;\n description?: string;\n triggers: string[];\n tags?: string[];\n createdAt?: IsoDateString;\n};\n\n/**\n * Contract registry query options.\n */\nexport type ContractQuery = {\n id?: ContractId;\n triggerEvent?: string;\n tags?: string[];\n limit?: number;\n offset?: number;\n};\n","/**\n * @fileoverview\n * Grace Foundation Schema Extensions\n * \n * \"Social contract between AI and humanity\"\n * \n * These types extend the core Codmir contract schema with:\n * - Ethical impact assessment\n * - Reversibility guarantees\n * - Economic constraints\n * - Societal impact scoring\n * - Human dignity protections\n * \n * Every contract that uses Grace extensions must be:\n * - Transparent: All actions logged and traceable\n * - Consensual: Explicit permission scope\n * - Reversible: Every action undoable\n * - Accountable: Task attribution and versioning\n * - Bounded: Economic and resource limits\n */\n\nimport type { JsonValue } from \"./schema\";\n\n// ============================================================================\n// Ethical Impact Assessment\n// ============================================================================\n\n/**\n * Ethical impact categories for contract assessment.\n */\nexport type EthicalImpactCategory =\n | \"user_data\" // Touches personal user data\n | \"financial\" // Affects financial systems/transactions\n | \"public_systems\" // Interacts with public infrastructure\n | \"employment\" // May affect human employment\n | \"privacy\" // Privacy implications\n | \"security\" // Security-sensitive operations\n | \"environmental\" // Compute/carbon footprint\n | \"accessibility\" // Affects accessibility for users\n | \"content_generation\"; // Generates public-facing content\n\n/**\n * Severity levels for ethical impact.\n */\nexport type ImpactSeverity = \"none\" | \"low\" | \"medium\" | \"high\" | \"critical\";\n\n/**\n * Individual ethical impact assessment.\n */\nexport type EthicalImpact = {\n category: EthicalImpactCategory;\n severity: ImpactSeverity;\n description?: string;\n mitigations?: string[];\n};\n\n/**\n * Full ethical impact assessment for a contract.\n */\nexport type EthicalAssessment = {\n /**\n * Individual impact assessments by category.\n */\n impacts: EthicalImpact[];\n\n /**\n * Overall risk score (0-100).\n * Computed from individual impacts.\n */\n overallRiskScore: number;\n\n /**\n * Human-readable summary of ethical considerations.\n */\n summary?: string;\n\n /**\n * Whether this contract requires human review before execution.\n */\n requiresHumanReview: boolean;\n\n /**\n * Specific roles that must approve high-impact contracts.\n */\n requiredApprovers?: string[];\n};\n\n// ============================================================================\n// Reversibility Guarantees\n// ============================================================================\n\n/**\n * Reversibility configuration for a contract.\n */\nexport type ReversibilityConfig = {\n /**\n * Whether all actions in this contract are reversible.\n */\n fullyReversible: boolean;\n\n /**\n * Create a snapshot before execution begins.\n */\n snapshotBeforeExecution: boolean;\n\n /**\n * Retain snapshots for this duration (ms).\n * Default: 7 days\n */\n snapshotRetentionMs?: number;\n\n /**\n * Steps that are explicitly irreversible.\n * Engine will require extra confirmation for these.\n */\n irreversibleSteps?: string[];\n\n /**\n * Rollback strategy if execution fails midway.\n */\n rollbackStrategy: \"full\" | \"partial\" | \"none\";\n\n /**\n * Custom rollback contract to execute on failure.\n */\n rollbackContractId?: string;\n};\n\n// ============================================================================\n// Economic Constraints (Grace Economics)\n// ============================================================================\n\n/**\n * Cost units for economic tracking.\n */\nexport type CostUnit = \"credits\" | \"usd\" | \"tokens\";\n\n/**\n * Budget configuration for a contract.\n */\nexport type BudgetConfig = {\n /**\n * Maximum budget for this contract execution.\n */\n maxBudget: number;\n\n /**\n * Unit of the budget.\n */\n unit: CostUnit;\n\n /**\n * Alert threshold (percentage of budget).\n * Default: 80\n */\n alertThreshold?: number;\n\n /**\n * Action when budget is exceeded.\n */\n onExceeded: \"pause\" | \"fail\" | \"notify\";\n\n /**\n * Whether to refund unused budget.\n */\n refundUnused: boolean;\n};\n\n/**\n * Resource allocation for compute fairness.\n */\nexport type ResourceAllocation = {\n /**\n * CPU allocation (vCPU cores).\n */\n cpu?: number;\n\n /**\n * Memory allocation (GB).\n */\n memory?: number;\n\n /**\n * GPU allocation (boolean or specific type).\n */\n gpu?: boolean | string;\n\n /**\n * Maximum execution time (ms).\n */\n maxExecutionTime: number;\n\n /**\n * Priority level for scheduling.\n */\n priority: \"low\" | \"normal\" | \"high\" | \"critical\";\n\n /**\n * Estimated carbon footprint (gCO2e).\n */\n estimatedCarbonFootprint?: number;\n};\n\n// ============================================================================\n// Societal Impact Scoring\n// ============================================================================\n\n/**\n * Workforce impact assessment.\n */\nexport type WorkforceImpact = {\n /**\n * Does this contract automate human tasks?\n */\n automatesHumanTasks: boolean;\n\n /**\n * Estimated human hours displaced per execution.\n */\n estimatedDisplacementHours?: number;\n\n /**\n * Does this contract augment human capabilities?\n */\n augmentsHumans: boolean;\n\n /**\n * Skills that humans should develop alongside this automation.\n */\n recommendedHumanSkills?: string[];\n};\n\n/**\n * Societal impact assessment.\n */\nexport type SocietalImpact = {\n /**\n * Workforce displacement/augmentation analysis.\n */\n workforce?: WorkforceImpact;\n\n /**\n * Does this benefit underserved communities?\n */\n benefitsUnderserved?: boolean;\n\n /**\n * Potential for misuse.\n */\n misuseRisk: ImpactSeverity;\n\n /**\n * Safeguards against misuse.\n */\n misuseSafeguards?: string[];\n};\n\n// ============================================================================\n// Grace Contract Extensions\n// ============================================================================\n\n/**\n * Grace Foundation extensions for CodmirContract.\n * \n * Add these fields to your contract to enable Grace governance.\n */\nexport type GraceExtensions = {\n /**\n * Grace schema version.\n */\n graceVersion: \"grace.v1\";\n\n /**\n * Ethical impact assessment.\n */\n ethics: EthicalAssessment;\n\n /**\n * Reversibility configuration.\n */\n reversibility: ReversibilityConfig;\n\n /**\n * Economic constraints.\n */\n budget?: BudgetConfig;\n\n /**\n * Resource allocation.\n */\n resources?: ResourceAllocation;\n\n /**\n * Societal impact assessment.\n */\n societalImpact?: SocietalImpact;\n\n /**\n * Human oversight configuration.\n */\n humanOversight: {\n /**\n * Minimum human checkpoints required.\n */\n minCheckpoints: number;\n\n /**\n * Allow autonomous execution without human oversight?\n */\n allowAutonomous: boolean;\n\n /**\n * Escalation path for issues.\n */\n escalationPath?: string[];\n };\n\n /**\n * Transparency requirements.\n */\n transparency: {\n /**\n * Log all decisions with reasoning.\n */\n logDecisions: boolean;\n\n /**\n * Make execution logs available to affected parties.\n */\n logsAccessible: boolean;\n\n /**\n * Audit trail retention (days).\n */\n auditRetentionDays: number;\n };\n};\n\n// ============================================================================\n// Grace Policy Rules\n// ============================================================================\n\n/**\n * Grace policy rule types.\n */\nexport type GracePolicyRule =\n | { type: \"require_approval\"; when: GracePolicyCondition }\n | { type: \"deny\"; when: GracePolicyCondition; reason: string }\n | { type: \"modify_scope\"; when: GracePolicyCondition; modifications: Record<string, JsonValue> }\n | { type: \"add_checkpoint\"; when: GracePolicyCondition; checkpoint: string }\n | { type: \"require_human_review\"; when: GracePolicyCondition };\n\n/**\n * Conditions for policy rules.\n */\nexport type GracePolicyCondition =\n | { op: \"risk_above\"; threshold: number }\n | { op: \"touches_category\"; category: EthicalImpactCategory }\n | { op: \"budget_above\"; amount: number; unit: CostUnit }\n | { op: \"not_reversible\" }\n | { op: \"production_deployment\" }\n | { op: \"affects_multiple_users\"; threshold: number }\n | { op: \"and\"; conditions: GracePolicyCondition[] }\n | { op: \"or\"; conditions: GracePolicyCondition[] };\n\n// ============================================================================\n// Grace Audit Events\n// ============================================================================\n\n/**\n * Audit event for Grace governance tracking.\n */\nexport type GraceAuditEvent = {\n id: string;\n timestamp: string;\n runId: string;\n contractId: string;\n \n type:\n | \"contract.submitted\"\n | \"ethics.assessed\"\n | \"approval.requested\"\n | \"approval.granted\"\n | \"approval.denied\"\n | \"checkpoint.reached\"\n | \"budget.alert\"\n | \"budget.exceeded\"\n | \"rollback.initiated\"\n | \"rollback.completed\"\n | \"human.override\"\n | \"policy.violated\"\n | \"policy.enforced\";\n\n actor: {\n type: \"human\" | \"ai\" | \"system\";\n id: string;\n name?: string;\n };\n\n details: Record<string, JsonValue>;\n\n /**\n * Hash of previous audit event for chain integrity.\n */\n previousHash?: string;\n};\n\n// ============================================================================\n// Default Values & Helpers\n// ============================================================================\n\n/**\n * Default Grace extensions for a new contract.\n */\nexport const DEFAULT_GRACE_EXTENSIONS: GraceExtensions = {\n graceVersion: \"grace.v1\",\n \n ethics: {\n impacts: [],\n overallRiskScore: 0,\n requiresHumanReview: false,\n },\n \n reversibility: {\n fullyReversible: true,\n snapshotBeforeExecution: true,\n snapshotRetentionMs: 7 * 24 * 60 * 60 * 1000, // 7 days\n rollbackStrategy: \"full\",\n },\n \n humanOversight: {\n minCheckpoints: 0,\n allowAutonomous: true,\n },\n \n transparency: {\n logDecisions: true,\n logsAccessible: true,\n auditRetentionDays: 90,\n },\n};\n\n/**\n * Calculate overall risk score from impacts.\n */\nexport function calculateRiskScore(impacts: EthicalImpact[]): number {\n const severityWeights: Record<ImpactSeverity, number> = {\n none: 0,\n low: 10,\n medium: 25,\n high: 50,\n critical: 100,\n };\n\n if (impacts.length === 0) return 0;\n\n const totalWeight = impacts.reduce(\n (sum, impact) => sum + severityWeights[impact.severity],\n 0\n );\n\n // Normalize to 0-100\n return Math.min(100, totalWeight);\n}\n\n/**\n * Determine if human review is required based on impacts.\n */\nexport function requiresHumanReview(impacts: EthicalImpact[]): boolean {\n return impacts.some(\n (i) => i.severity === \"high\" || i.severity === \"critical\"\n );\n}\n\n/**\n * Grace Foundation principles as machine-readable rules.\n */\nexport const GRACE_PRINCIPLES = {\n transparency: \"Every action logged, every decision traceable\",\n consent: \"Explicit permission scope, no implicit access\",\n reversibility: \"Every AI action must be undoable\",\n accountability: \"Task attribution, versioned modifications\",\n economicBoundaries: \"Token usage limit, execution cost cap\",\n humanDignity: \"AI augments, never replaces human judgment on critical decisions\",\n fairness: \"Distributed power must not centralize control\",\n sustainability: \"Prefer renewable-powered compute when available\",\n} as const;\n","/**\n * @fileoverview\n * Template resolution utilities for contracts.\n * Supports {{path}} syntax for extracting values from run context.\n */\n\nimport type { JsonValue } from \"./schema\";\n\n/**\n * Safely get a nested value by dot path from a JSON-like object.\n * @param obj - Source object\n * @param path - Dot-separated path (e.g., \"trigger.ticketId\")\n * @returns The value at the path, or undefined if not found\n *\n * @example\n * ```ts\n * getByPath({ trigger: { ticketId: \"123\" } }, \"trigger.ticketId\")\n * // => \"123\"\n * ```\n */\nexport function getByPath(\n obj: Record<string, JsonValue>,\n path: string\n): JsonValue | undefined {\n const parts = path.split(\".\").filter(Boolean);\n let cur: unknown = obj;\n\n for (const p of parts) {\n if (cur == null || typeof cur !== \"object\") return undefined;\n cur = (cur as Record<string, unknown>)[p];\n }\n\n return cur as JsonValue | undefined;\n}\n\n/**\n * Set a nested value by dot path, creating objects along the way.\n * @param obj - Target object (mutated in place)\n * @param path - Dot-separated path\n * @param value - Value to set\n *\n * @example\n * ```ts\n * const ctx = {};\n * setByPath(ctx, \"steps.analyze.output\", { summary: \"...\" });\n * // ctx => { steps: { analyze: { output: { summary: \"...\" } } } }\n * ```\n */\nexport function setByPath(\n obj: Record<string, JsonValue>,\n path: string,\n value: JsonValue\n): void {\n const parts = path.split(\".\").filter(Boolean);\n if (parts.length === 0) return;\n\n let cur: Record<string, unknown> = obj;\n\n for (let i = 0; i < parts.length - 1; i++) {\n const p = parts[i]!;\n if (cur[p] == null || typeof cur[p] !== \"object\") {\n cur[p] = {};\n }\n cur = cur[p] as Record<string, unknown>;\n }\n\n cur[parts[parts.length - 1]!] = value;\n}\n\n/**\n * Delete a nested value by dot path.\n * @param obj - Target object (mutated in place)\n * @param path - Dot-separated path\n */\nexport function deleteByPath(\n obj: Record<string, JsonValue>,\n path: string\n): void {\n const parts = path.split(\".\").filter(Boolean);\n if (parts.length === 0) return;\n\n let cur: Record<string, unknown> = obj;\n\n for (let i = 0; i < parts.length - 1; i++) {\n const p = parts[i]!;\n if (cur[p] == null || typeof cur[p] !== \"object\") return;\n cur = cur[p] as Record<string, unknown>;\n }\n\n delete cur[parts[parts.length - 1]!];\n}\n\n/**\n * Template pattern for {{path}} extraction.\n */\nconst TEMPLATE_PATTERN = /^\\{\\{(.+)\\}\\}$/;\n\n/**\n * Check if a string is a template reference.\n */\nexport function isTemplate(value: string): boolean {\n return TEMPLATE_PATTERN.test(value);\n}\n\n/**\n * Extract path from a template string.\n * @returns The path if it's a template, null otherwise\n */\nexport function extractTemplatePath(value: string): string | null {\n const match = value.match(TEMPLATE_PATTERN);\n return match ? match[1]!.trim() : null;\n}\n\n/**\n * Resolve templates of the form \"{{some.path}}\" inside JSON values deterministically.\n *\n * Supports:\n * - Strings equal to \"{{path}}\" ā replaced with value at path\n * - Objects/arrays ā recursively resolved\n * - Other primitives ā passed through unchanged\n *\n * @param ctx - Run context object (JSON-like)\n * @param input - Input value containing potential templates\n * @returns Resolved value with templates replaced\n *\n * @example\n * ```ts\n * const ctx = { trigger: { ticketId: \"T-123\" } };\n * resolveTemplates(ctx, { id: \"{{trigger.ticketId}}\" });\n * // => { id: \"T-123\" }\n * ```\n */\nexport function resolveTemplates(\n ctx: Record<string, JsonValue>,\n input: JsonValue\n): JsonValue {\n if (typeof input === \"string\") {\n const path = extractTemplatePath(input);\n if (path) {\n const v = getByPath(ctx, path);\n return v === undefined ? null : v;\n }\n return input;\n }\n\n if (Array.isArray(input)) {\n return input.map((v) => resolveTemplates(ctx, v));\n }\n\n if (input && typeof input === \"object\") {\n const out: Record<string, JsonValue> = {};\n for (const [k, v] of Object.entries(input)) {\n out[k] = resolveTemplates(ctx, v as JsonValue);\n }\n return out;\n }\n\n return input;\n}\n\n/**\n * Resolve a step input object using run context.\n * Convenience wrapper around resolveTemplates.\n */\nexport function resolveStepInput(\n ctx: Record<string, JsonValue>,\n input: Record<string, JsonValue>\n): Record<string, JsonValue> {\n return resolveTemplates(ctx, input) as Record<string, JsonValue>;\n}\n\n/**\n * Deep clone a JSON value.\n */\nexport function cloneJson<T extends JsonValue>(value: T): T {\n return JSON.parse(JSON.stringify(value));\n}\n\n/**\n * Merge two JSON objects shallowly.\n */\nexport function mergeJson(\n target: Record<string, JsonValue>,\n source: Record<string, JsonValue>\n): Record<string, JsonValue> {\n return { ...target, ...source };\n}\n\n/**\n * Deep merge two JSON objects.\n */\nexport function deepMergeJson(\n target: Record<string, JsonValue>,\n source: Record<string, JsonValue>\n): Record<string, JsonValue> {\n const result: Record<string, JsonValue> = { ...target };\n\n for (const [key, value] of Object.entries(source)) {\n if (\n value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n result[key] &&\n typeof result[key] === \"object\" &&\n !Array.isArray(result[key])\n ) {\n result[key] = deepMergeJson(\n result[key] as Record<string, JsonValue>,\n value as Record<string, JsonValue>\n );\n } else {\n result[key] = value;\n }\n }\n\n return result;\n}\n","/**\n * @fileoverview\n * Condition expression evaluation for contracts.\n * All evaluations are deterministic and side-effect free.\n */\n\nimport type { ConditionExpr, JsonValue } from \"./schema\";\nimport { getByPath } from \"./templates\";\n\n/**\n * Evaluate a deterministic condition expression against a JSON context.\n *\n * @param ctx - Run context object (JSON-like)\n * @param expr - Condition expression to evaluate\n * @returns true if the condition is satisfied\n *\n * @example\n * ```ts\n * const ctx = { status: \"open\", priority: 3 };\n * evalCondition(ctx, { op: \"eq\", path: \"status\", value: \"open\" });\n * // => true\n * ```\n */\nexport function evalCondition(\n ctx: Record<string, JsonValue>,\n expr: ConditionExpr\n): boolean {\n switch (expr.op) {\n case \"eq\": {\n const actual = getByPath(ctx, expr.path);\n return jsonEquals(actual, expr.value);\n }\n\n case \"neq\": {\n const actual = getByPath(ctx, expr.path);\n return !jsonEquals(actual, expr.value);\n }\n\n case \"gt\": {\n const actual = getByPath(ctx, expr.path);\n return typeof actual === \"number\" && actual > expr.value;\n }\n\n case \"gte\": {\n const actual = getByPath(ctx, expr.path);\n return typeof actual === \"number\" && actual >= expr.value;\n }\n\n case \"lt\": {\n const actual = getByPath(ctx, expr.path);\n return typeof actual === \"number\" && actual < expr.value;\n }\n\n case \"lte\": {\n const actual = getByPath(ctx, expr.path);\n return typeof actual === \"number\" && actual <= expr.value;\n }\n\n case \"exists\": {\n return getByPath(ctx, expr.path) !== undefined;\n }\n\n case \"contains\": {\n const actual = getByPath(ctx, expr.path);\n if (typeof actual === \"string\") {\n return actual.includes(expr.value);\n }\n if (Array.isArray(actual)) {\n return actual.some((item) => jsonEquals(item, expr.value));\n }\n return false;\n }\n\n case \"startsWith\": {\n const actual = getByPath(ctx, expr.path);\n return typeof actual === \"string\" && actual.startsWith(expr.value);\n }\n\n case \"endsWith\": {\n const actual = getByPath(ctx, expr.path);\n return typeof actual === \"string\" && actual.endsWith(expr.value);\n }\n\n case \"and\": {\n return expr.exprs.every((e) => evalCondition(ctx, e));\n }\n\n case \"or\": {\n return expr.exprs.some((e) => evalCondition(ctx, e));\n }\n\n case \"not\": {\n return !evalCondition(ctx, expr.expr);\n }\n\n default: {\n // Exhaustive check - TypeScript will error if we miss a case\n const _exhaustive: never = expr;\n return false;\n }\n }\n}\n\n/**\n * Compare two JSON values for equality.\n */\nfunction jsonEquals(a: JsonValue | undefined, b: JsonValue): boolean {\n if (a === b) return true;\n if (a === undefined || a === null || b === null) return a === b;\n\n if (typeof a !== typeof b) return false;\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((item, index) => jsonEquals(item, b[index]));\n }\n\n if (typeof a === \"object\" && typeof b === \"object\") {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((key) =>\n jsonEquals(\n (a as Record<string, JsonValue>)[key],\n (b as Record<string, JsonValue>)[key]\n )\n );\n }\n\n return a === b;\n}\n\n/**\n * Validate that a condition expression is structurally valid.\n * @throws Error if the expression is invalid\n */\nexport function validateCondition(expr: ConditionExpr): void {\n switch (expr.op) {\n case \"eq\":\n case \"neq\":\n if (typeof expr.path !== \"string\" || !expr.path) {\n throw new Error(`Condition ${expr.op} requires a non-empty path`);\n }\n break;\n\n case \"gt\":\n case \"gte\":\n case \"lt\":\n case \"lte\":\n if (typeof expr.path !== \"string\" || !expr.path) {\n throw new Error(`Condition ${expr.op} requires a non-empty path`);\n }\n if (typeof expr.value !== \"number\") {\n throw new Error(`Condition ${expr.op} requires a numeric value`);\n }\n break;\n\n case \"exists\":\n if (typeof expr.path !== \"string\" || !expr.path) {\n throw new Error(`Condition ${expr.op} requires a non-empty path`);\n }\n break;\n\n case \"contains\":\n case \"startsWith\":\n case \"endsWith\":\n if (typeof expr.path !== \"string\" || !expr.path) {\n throw new Error(`Condition ${expr.op} requires a non-empty path`);\n }\n if (typeof expr.value !== \"string\") {\n throw new Error(`Condition ${expr.op} requires a string value`);\n }\n break;\n\n case \"and\":\n case \"or\":\n if (!Array.isArray(expr.exprs) || expr.exprs.length === 0) {\n throw new Error(`Condition ${expr.op} requires a non-empty array of expressions`);\n }\n for (const subExpr of expr.exprs) {\n validateCondition(subExpr);\n }\n break;\n\n case \"not\":\n if (!expr.expr) {\n throw new Error(`Condition not requires an expression`);\n }\n validateCondition(expr.expr);\n break;\n\n default: {\n const _exhaustive: never = expr;\n throw new Error(`Unknown condition operator: ${(expr as ConditionExpr).op}`);\n }\n }\n}\n\n/**\n * Create a simple equality condition.\n */\nexport function eq(path: string, value: JsonValue): ConditionExpr {\n return { op: \"eq\", path, value };\n}\n\n/**\n * Create a not-equals condition.\n */\nexport function neq(path: string, value: JsonValue): ConditionExpr {\n return { op: \"neq\", path, value };\n}\n\n/**\n * Create an exists condition.\n */\nexport function exists(path: string): ConditionExpr {\n return { op: \"exists\", path };\n}\n\n/**\n * Create an AND condition.\n */\nexport function and(...exprs: ConditionExpr[]): ConditionExpr {\n return { op: \"and\", exprs };\n}\n\n/**\n * Create an OR condition.\n */\nexport function or(...exprs: ConditionExpr[]): ConditionExpr {\n return { op: \"or\", exprs };\n}\n\n/**\n * Create a NOT condition.\n */\nexport function not(expr: ConditionExpr): ConditionExpr {\n return { op: \"not\", expr };\n}\n\n/**\n * Create a greater-than condition.\n */\nexport function gt(path: string, value: number): ConditionExpr {\n return { op: \"gt\", path, value };\n}\n\n/**\n * Create a greater-than-or-equal condition.\n */\nexport function gte(path: string, value: number): ConditionExpr {\n return { op: \"gte\", path, value };\n}\n\n/**\n * Create a less-than condition.\n */\nexport function lt(path: string, value: number): ConditionExpr {\n return { op: \"lt\", path, value };\n}\n\n/**\n * Create a less-than-or-equal condition.\n */\nexport function lte(path: string, value: number): ConditionExpr {\n return { op: \"lte\", path, value };\n}\n\n/**\n * Create a contains condition (string or array).\n */\nexport function contains(path: string, value: string): ConditionExpr {\n return { op: \"contains\", path, value };\n}\n\n/**\n * Create a startsWith condition.\n */\nexport function startsWith(path: string, value: string): ConditionExpr {\n return { op: \"startsWith\", path, value };\n}\n\n/**\n * Create an endsWith condition.\n */\nexport function endsWith(path: string, value: string): ConditionExpr {\n return { op: \"endsWith\", path, value };\n}\n","/**\n * @fileoverview\n * Contract validation utilities.\n * Validates contracts are structurally correct before execution.\n */\n\nimport type {\n CodmirContract,\n ContractStep,\n BranchStep,\n WaitStep,\n TaskStep,\n LlmStep,\n EmitStep,\n TransformStep,\n} from \"./schema\";\nimport { validateCondition } from \"./conditions\";\n\n/**\n * Validation error with details.\n */\nexport class ContractValidationError extends Error {\n constructor(\n message: string,\n public readonly field?: string,\n public readonly details?: unknown\n ) {\n super(message);\n this.name = \"ContractValidationError\";\n }\n}\n\n/**\n * Validation result type.\n */\nexport type ValidationResult =\n | { valid: true }\n | { valid: false; errors: ContractValidationError[] };\n\n/**\n * Validate a contract with strict structural rules.\n * Keep this deterministic and side-effect free.\n *\n * @param contract - Contract to validate\n * @throws ContractValidationError if invalid\n */\nexport function validateContract(contract: CodmirContract): void {\n const errors = collectValidationErrors(contract);\n if (errors.length > 0) {\n throw errors[0];\n }\n}\n\n/**\n * Validate a contract and return a result object.\n * Does not throw.\n */\nexport function validateContractSafe(contract: CodmirContract): ValidationResult {\n const errors = collectValidationErrors(contract);\n if (errors.length === 0) {\n return { valid: true };\n }\n return { valid: false, errors };\n}\n\n/**\n * Collect all validation errors for a contract.\n */\nfunction collectValidationErrors(contract: CodmirContract): ContractValidationError[] {\n const errors: ContractValidationError[] = [];\n\n // Schema version check\n if (contract.schemaVersion !== \"codmir.contract.v1\") {\n errors.push(\n new ContractValidationError(\n `Unsupported schemaVersion: ${contract.schemaVersion}`,\n \"schemaVersion\"\n )\n );\n }\n\n // Required fields\n if (!contract.id || typeof contract.id !== \"string\") {\n errors.push(new ContractValidationError(\"Contract id is required\", \"id\"));\n }\n\n if (!contract.version || typeof contract.version !== \"string\") {\n errors.push(new ContractValidationError(\"Contract version is required\", \"version\"));\n }\n\n if (!contract.title || typeof contract.title !== \"string\") {\n errors.push(new ContractValidationError(\"Contract title is required\", \"title\"));\n }\n\n // Triggers validation\n if (!Array.isArray(contract.triggers) || contract.triggers.length === 0) {\n errors.push(\n new ContractValidationError(\"Contract must have at least one trigger\", \"triggers\")\n );\n } else {\n for (let i = 0; i < contract.triggers.length; i++) {\n const trigger = contract.triggers[i];\n if (trigger.type !== \"event\") {\n errors.push(\n new ContractValidationError(\n `Trigger ${i} has unsupported type: ${trigger.type}`,\n `triggers[${i}].type`\n )\n );\n }\n if (!trigger.event || typeof trigger.event !== \"string\") {\n errors.push(\n new ContractValidationError(\n `Trigger ${i} requires an event pattern`,\n `triggers[${i}].event`\n )\n );\n }\n }\n }\n\n // Steps validation\n if (!Array.isArray(contract.steps) || contract.steps.length === 0) {\n errors.push(\n new ContractValidationError(\"Contract must have at least one step\", \"steps\")\n );\n }\n\n const stepIds = new Set<string>();\n for (const step of contract.steps) {\n if (!step.id || typeof step.id !== \"string\") {\n errors.push(new ContractValidationError(\"Step id is required\", \"steps[].id\"));\n continue;\n }\n\n if (stepIds.has(step.id)) {\n errors.push(\n new ContractValidationError(`Duplicate step id: ${step.id}`, `steps.${step.id}`)\n );\n }\n stepIds.add(step.id);\n\n // Validate step-specific fields\n const stepErrors = validateStep(step, stepIds);\n errors.push(...stepErrors);\n }\n\n // Entry step validation\n if (!contract.entryStepId) {\n errors.push(\n new ContractValidationError(\"entryStepId is required\", \"entryStepId\")\n );\n } else if (!stepIds.has(contract.entryStepId)) {\n errors.push(\n new ContractValidationError(\n `entryStepId not found in steps: ${contract.entryStepId}`,\n \"entryStepId\"\n )\n );\n }\n\n // Validate next pointers (second pass after collecting all step IDs)\n for (const step of contract.steps) {\n if (step.next != null && !stepIds.has(step.next)) {\n errors.push(\n new ContractValidationError(\n `Step ${step.id} has invalid next: ${step.next}`,\n `steps.${step.id}.next`\n )\n );\n }\n\n if (step.kind === \"branch\") {\n const branchStep = step as BranchStep;\n for (let i = 0; i < branchStep.branches.length; i++) {\n const branch = branchStep.branches[i];\n if (!stepIds.has(branch.next)) {\n errors.push(\n new ContractValidationError(\n `Branch step ${step.id} has invalid branch next: ${branch.next}`,\n `steps.${step.id}.branches[${i}].next`\n )\n );\n }\n }\n if (!stepIds.has(branchStep.defaultNext)) {\n errors.push(\n new ContractValidationError(\n `Branch step ${step.id} has invalid defaultNext: ${branchStep.defaultNext}`,\n `steps.${step.id}.defaultNext`\n )\n );\n }\n }\n\n if (step.kind === \"wait\") {\n const waitStep = step as WaitStep;\n if (waitStep.nextOnTimeout != null && !stepIds.has(waitStep.nextOnTimeout)) {\n errors.push(\n new ContractValidationError(\n `Wait step ${step.id} has invalid nextOnTimeout: ${waitStep.nextOnTimeout}`,\n `steps.${step.id}.nextOnTimeout`\n )\n );\n }\n }\n }\n\n // Limits validation\n if (!contract.limits) {\n errors.push(new ContractValidationError(\"Contract limits are required\", \"limits\"));\n } else {\n if (typeof contract.limits.maxRunMs !== \"number\" || contract.limits.maxRunMs <= 0) {\n errors.push(\n new ContractValidationError(\n \"limits.maxRunMs must be a positive number\",\n \"limits.maxRunMs\"\n )\n );\n }\n if (typeof contract.limits.maxSteps !== \"number\" || contract.limits.maxSteps <= 0) {\n errors.push(\n new ContractValidationError(\n \"limits.maxSteps must be a positive number\",\n \"limits.maxSteps\"\n )\n );\n }\n }\n\n // Permissions validation (basic structure check)\n if (!Array.isArray(contract.permissions)) {\n errors.push(\n new ContractValidationError(\"Contract permissions must be an array\", \"permissions\")\n );\n }\n\n return errors;\n}\n\n/**\n * Validate a single step.\n */\nfunction validateStep(\n step: ContractStep,\n _stepIds: Set<string>\n): ContractValidationError[] {\n const errors: ContractValidationError[] = [];\n\n if (!step.name || typeof step.name !== \"string\") {\n errors.push(\n new ContractValidationError(`Step ${step.id} requires a name`, `steps.${step.id}.name`)\n );\n }\n\n // Validate if condition\n if (step.if) {\n try {\n validateCondition(step.if);\n } catch (err) {\n errors.push(\n new ContractValidationError(\n `Step ${step.id} has invalid if condition: ${(err as Error).message}`,\n `steps.${step.id}.if`\n )\n );\n }\n }\n\n // Validate step-kind-specific fields\n switch (step.kind) {\n case \"task\": {\n const taskStep = step as TaskStep;\n if (!taskStep.task || typeof taskStep.task !== \"string\") {\n errors.push(\n new ContractValidationError(\n `Task step ${step.id} requires a task name`,\n `steps.${step.id}.task`\n )\n );\n }\n if (!taskStep.input || typeof taskStep.input !== \"object\") {\n errors.push(\n new ContractValidationError(\n `Task step ${step.id} requires an input object`,\n `steps.${step.id}.input`\n )\n );\n }\n break;\n }\n\n case \"llm\": {\n const llmStep = step as LlmStep;\n if (!llmStep.prompt || typeof llmStep.prompt !== \"object\") {\n errors.push(\n new ContractValidationError(\n `LLM step ${step.id} requires a prompt object`,\n `steps.${step.id}.prompt`\n )\n );\n }\n break;\n }\n\n case \"emit\": {\n const emitStep = step as EmitStep;\n if (!emitStep.event || typeof emitStep.event !== \"string\") {\n errors.push(\n new ContractValidationError(\n `Emit step ${step.id} requires an event name`,\n `steps.${step.id}.event`\n )\n );\n }\n if (!emitStep.payload || typeof emitStep.payload !== \"object\") {\n errors.push(\n new ContractValidationError(\n `Emit step ${step.id} requires a payload object`,\n `steps.${step.id}.payload`\n )\n );\n }\n break;\n }\n\n case \"wait\": {\n const waitStep = step as WaitStep;\n if (!waitStep.event || typeof waitStep.event !== \"string\") {\n errors.push(\n new ContractValidationError(\n `Wait step ${step.id} requires an event pattern`,\n `steps.${step.id}.event`\n )\n );\n }\n break;\n }\n\n case \"branch\": {\n const branchStep = step as BranchStep;\n if (!Array.isArray(branchStep.branches) || branchStep.branches.length === 0) {\n errors.push(\n new ContractValidationError(\n `Branch step ${step.id} requires at least one branch`,\n `steps.${step.id}.branches`\n )\n );\n } else {\n for (let i = 0; i < branchStep.branches.length; i++) {\n const branch = branchStep.branches[i];\n if (!branch.when) {\n errors.push(\n new ContractValidationError(\n `Branch ${i} in step ${step.id} requires a when condition`,\n `steps.${step.id}.branches[${i}].when`\n )\n );\n } else {\n try {\n validateCondition(branch.when);\n } catch (err) {\n errors.push(\n new ContractValidationError(\n `Branch ${i} in step ${step.id} has invalid when condition: ${(err as Error).message}`,\n `steps.${step.id}.branches[${i}].when`\n )\n );\n }\n }\n }\n }\n if (!branchStep.defaultNext || typeof branchStep.defaultNext !== \"string\") {\n errors.push(\n new ContractValidationError(\n `Branch step ${step.id} requires a defaultNext`,\n `steps.${step.id}.defaultNext`\n )\n );\n }\n break;\n }\n\n case \"transform\": {\n const transformStep = step as TransformStep;\n if (!transformStep.transforms || typeof transformStep.transforms !== \"object\") {\n errors.push(\n new ContractValidationError(\n `Transform step ${step.id} requires a transforms object`,\n `steps.${step.id}.transforms`\n )\n );\n }\n break;\n }\n\n case \"approval\": {\n const approvalStep = step as { prompt?: string; nextOnApproved?: string };\n if (!approvalStep.prompt || typeof approvalStep.prompt !== \"string\") {\n errors.push(\n new ContractValidationError(\n `Approval step ${step.id} requires a prompt`,\n `steps.${step.id}.prompt`\n )\n );\n }\n if (!approvalStep.nextOnApproved || typeof approvalStep.nextOnApproved !== \"string\") {\n errors.push(\n new ContractValidationError(\n `Approval step ${step.id} requires nextOnApproved`,\n `steps.${step.id}.nextOnApproved`\n )\n );\n }\n break;\n }\n\n default: {\n // This should never happen if all step kinds are handled\n const unknownStep = step as { id: string; kind: string };\n errors.push(\n new ContractValidationError(\n `Step ${unknownStep.id} has unknown kind: ${unknownStep.kind}`,\n `steps.${unknownStep.id}.kind`\n )\n );\n }\n }\n\n return errors;\n}\n\n/**\n * Check if a contract has a specific permission.\n */\nexport function hasPermission(\n contract: CodmirContract,\n kind: string,\n scope?: string\n): boolean {\n return contract.permissions.some((p) => {\n if (p.kind !== kind) return false;\n if (!scope) return true;\n\n // Check scope matching based on permission kind\n switch (p.kind) {\n case \"event:emit\":\n case \"event:read\":\n return matchPattern((p as { pattern: string }).pattern, scope);\n case \"storage:read\":\n case \"storage:write\":\n case \"repo:read\":\n case \"repo:write\":\n return matchPattern((p as { scope: string }).scope, scope);\n case \"http:request\":\n return (p as { domains: string[] }).domains.some((d) => matchPattern(d, scope));\n case \"secrets:read\":\n return (p as { keys: string[] }).keys.includes(scope);\n case \"llm:invoke\":\n return !(p as { models?: string[] }).models || (p as { models?: string[] }).models!.includes(scope);\n default:\n return false;\n }\n });\n}\n\n/**\n * Simple wildcard pattern matching.\n * Supports \"*\" as suffix wildcard.\n */\nfunction matchPattern(pattern: string, value: string): boolean {\n if (pattern === \"*\") return true;\n if (pattern.endsWith(\".*\")) {\n const prefix = pattern.slice(0, -2);\n return value === prefix || value.startsWith(prefix + \".\");\n }\n if (pattern.endsWith(\"*\")) {\n const prefix = pattern.slice(0, -1);\n return value.startsWith(prefix);\n }\n return pattern === value;\n}\n","/**\n * @fileoverview\n * Example contract: Ticket Triage Workflow\n *\n * This contract demonstrates an autonomous agent that:\n * 1. Analyzes incoming tickets\n * 2. Classifies priority and category\n * 3. Assigns to appropriate team\n * 4. Emits status updates\n */\n\nimport type { CodmirContract } from \"../schema\";\n\n/**\n * Ticket Triage Contract\n *\n * Triggered by: ticket.created\n * Permissions: Read tickets, emit events, invoke LLM\n */\nexport const ticketTriageContract: CodmirContract = {\n schemaVersion: \"codmir.contract.v1\",\n id: \"codmir.ticket-triage\",\n version: \"1.0.0\",\n title: \"Ticket Triage Agent\",\n description:\n \"Automatically analyzes and triages incoming support tickets using AI classification\",\n\n triggers: [\n {\n type: \"event\",\n event: \"ticket.created\",\n },\n ],\n\n permissions: [\n { kind: \"event:emit\", pattern: \"ticket.*\" },\n { kind: \"event:emit\", pattern: \"agent.*\" },\n { kind: \"event:read\", pattern: \"ticket.*\" },\n { kind: \"llm:invoke\", models: [\"gpt-5-mini-2025-08-07\", \"gpt-5\"] },\n ],\n\n limits: {\n maxRunMs: 60_000, // 1 minute\n maxSteps: 10,\n maxLlmCalls: 3,\n maxTokens: 5000,\n },\n\n entryStepId: \"analyze\",\n\n steps: [\n // Step 1: Analyze ticket with LLM\n {\n id: \"analyze\",\n name: \"Analyze Ticket\",\n kind: \"llm\",\n description: \"Use AI to analyze ticket content and extract key information\",\n model: \"gpt-5-mini-2025-08-07\",\n prompt: {\n system:\n \"You are a support ticket analyst. Analyze the ticket and extract: priority (low/medium/high/urgent), category (bug/feature/question/other), sentiment (positive/neutral/negative), and a brief summary.\",\n user: \"Ticket Title: {{trigger.title}}\\n\\nTicket Body:\\n{{trigger.body}}\",\n },\n saveAs: \"steps.analysis\",\n temperature: 0.3,\n maxTokens: 500,\n next: \"classify\",\n },\n\n // Step 2: Transform analysis into structured data\n {\n id: \"classify\",\n name: \"Classify Ticket\",\n kind: \"transform\",\n description: \"Structure the analysis results\",\n transforms: {\n \"classification.priority\": \"{{steps.analysis.priority}}\",\n \"classification.category\": \"{{steps.analysis.category}}\",\n \"classification.sentiment\": \"{{steps.analysis.sentiment}}\",\n \"classification.summary\": \"{{steps.analysis.summary}}\",\n },\n next: \"check-urgent\",\n },\n\n // Step 3: Branch on urgency\n {\n id: \"check-urgent\",\n name: \"Check Urgency\",\n kind: \"branch\",\n description: \"Route urgent tickets to fast path\",\n branches: [\n {\n when: { op: \"eq\", path: \"classification.priority\", value: \"urgent\" },\n next: \"escalate\",\n },\n {\n when: { op: \"eq\", path: \"classification.priority\", value: \"high\" },\n next: \"assign-senior\",\n },\n ],\n defaultNext: \"assign-team\",\n },\n\n // Step 4a: Escalate urgent tickets\n {\n id: \"escalate\",\n name: \"Escalate Urgent\",\n kind: \"emit\",\n description: \"Emit escalation event for urgent tickets\",\n event: \"ticket.escalated\",\n payload: {\n ticketId: \"{{trigger.id}}\",\n priority: \"urgent\",\n reason: \"Auto-escalated by triage agent\",\n analysis: \"{{classification}}\",\n },\n next: \"notify-complete\",\n },\n\n // Step 4b: Assign to senior team\n {\n id: \"assign-senior\",\n name: \"Assign to Senior\",\n kind: \"task\",\n description: \"Assign high-priority ticket to senior team\",\n task: \"assign-ticket\",\n input: {\n ticketId: \"{{trigger.id}}\",\n team: \"senior-support\",\n priority: \"high\",\n notes: \"{{classification.summary}}\",\n },\n saveAs: \"steps.assignment\",\n next: \"notify-complete\",\n },\n\n // Step 4c: Assign to regular team\n {\n id: \"assign-team\",\n name: \"Assign to Team\",\n kind: \"task\",\n description: \"Assign ticket to appropriate team based on category\",\n task: \"assign-ticket\",\n input: {\n ticketId: \"{{trigger.id}}\",\n team: \"{{classification.category}}-team\",\n priority: \"{{classification.priority}}\",\n notes: \"{{classification.summary}}\",\n },\n saveAs: \"steps.assignment\",\n next: \"notify-complete\",\n },\n\n // Step 5: Emit completion event\n {\n id: \"notify-complete\",\n name: \"Notify Complete\",\n kind: \"emit\",\n description: \"Emit triage completion event\",\n event: \"ticket.triaged\",\n payload: {\n ticketId: \"{{trigger.id}}\",\n classification: \"{{classification}}\",\n assignment: \"{{steps.assignment}}\",\n },\n next: null,\n },\n ],\n\n outputs: {\n onCompleted: [\n {\n event: \"agent.task.completed\",\n payload: {\n agent: \"ticket-triage\",\n ticketId: \"{{trigger.id}}\",\n result: \"{{classification}}\",\n },\n },\n ],\n onFailed: [\n {\n event: \"agent.task.failed\",\n payload: {\n agent: \"ticket-triage\",\n ticketId: \"{{trigger.id}}\",\n },\n },\n ],\n },\n\n tags: [\"support\", \"triage\", \"ai\", \"automation\"],\n author: \"codmir-team\",\n};\n\nexport default ticketTriageContract;\n","/**\n * @fileoverview\n * Example contract: Code Review Workflow\n *\n * This contract demonstrates an autonomous agent that:\n * 1. Analyzes pull request changes\n * 2. Checks for code quality issues\n * 3. Suggests improvements\n * 4. Posts review comments\n * 5. Waits for author response (human-in-the-loop)\n */\n\nimport type { CodmirContract } from \"../schema\";\n\n/**\n * Code Review Contract\n *\n * Triggered by: github.pull_request.opened, github.pull_request.synchronize\n * Permissions: Read repo, emit events, invoke LLM, post comments\n */\nexport const codeReviewContract: CodmirContract = {\n schemaVersion: \"codmir.contract.v1\",\n id: \"codmir.code-review\",\n version: \"1.0.0\",\n title: \"Code Review Agent\",\n description:\n \"Automatically reviews pull requests, checks code quality, and suggests improvements\",\n\n triggers: [\n {\n type: \"event\",\n event: \"github.pull_request.opened\",\n },\n {\n type: \"event\",\n event: \"github.pull_request.synchronize\",\n },\n ],\n\n permissions: [\n { kind: \"event:emit\", pattern: \"github.*\" },\n { kind: \"event:emit\", pattern: \"review.*\" },\n { kind: \"event:read\", pattern: \"github.*\" },\n { kind: \"repo:read\", scope: \"*\" },\n { kind: \"llm:invoke\", models: [\"gpt-5\", \"claude-3-sonnet\"] },\n { kind: \"http:request\", domains: [\"api.github.com\"] },\n ],\n\n limits: {\n maxRunMs: 300_000, // 5 minutes\n maxSteps: 20,\n maxLlmCalls: 10,\n maxTokens: 50000,\n },\n\n entryStepId: \"fetch-diff\",\n\n steps: [\n // Step 1: Fetch PR diff\n {\n id: \"fetch-diff\",\n name: \"Fetch PR Diff\",\n kind: \"task\",\n description: \"Fetch the pull request diff from GitHub\",\n task: \"github-fetch-diff\",\n input: {\n owner: \"{{trigger.repository.owner}}\",\n repo: \"{{trigger.repository.name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n saveAs: \"steps.diff\",\n timeout: { ms: 30000 },\n retry: { maxAttempts: 2, backoffMs: 1000 },\n next: \"check-size\",\n },\n\n // Step 2: Check PR size\n {\n id: \"check-size\",\n name: \"Check PR Size\",\n kind: \"branch\",\n description: \"Route large PRs differently\",\n branches: [\n {\n when: { op: \"gt\", path: \"steps.diff.linesChanged\", value: 1000 },\n next: \"large-pr-warning\",\n },\n ],\n defaultNext: \"analyze-code\",\n },\n\n // Step 2a: Warn about large PR\n {\n id: \"large-pr-warning\",\n name: \"Large PR Warning\",\n kind: \"emit\",\n description: \"Emit warning about large PR size\",\n event: \"review.warning\",\n payload: {\n pullNumber: \"{{trigger.pull_request.number}}\",\n reason: \"PR is too large for effective review\",\n linesChanged: \"{{steps.diff.linesChanged}}\",\n recommendation: \"Consider breaking into smaller PRs\",\n },\n next: \"analyze-code\",\n },\n\n // Step 3: Analyze code with LLM\n {\n id: \"analyze-code\",\n name: \"Analyze Code\",\n kind: \"llm\",\n description: \"Use AI to analyze code changes for issues\",\n model: \"gpt-5\",\n systemPrompt: `You are an expert code reviewer. Analyze the diff and identify:\n1. Potential bugs or logic errors\n2. Security vulnerabilities\n3. Performance issues\n4. Code style violations\n5. Missing tests\n6. Documentation gaps\n\nFor each issue, provide:\n- File and line number\n- Severity (critical/warning/info)\n- Description\n- Suggested fix\n\nRespond in JSON format with an \"issues\" array.`,\n prompt: {\n diff: \"{{steps.diff.content}}\",\n prTitle: \"{{trigger.pull_request.title}}\",\n prDescription: \"{{trigger.pull_request.body}}\",\n },\n saveAs: \"steps.analysis\",\n temperature: 0.2,\n maxTokens: 4000,\n next: \"check-critical\",\n },\n\n // Step 4: Check for critical issues\n {\n id: \"check-critical\",\n name: \"Check Critical Issues\",\n kind: \"branch\",\n description: \"Route critical issues to blocking review\",\n branches: [\n {\n when: {\n op: \"exists\",\n path: \"steps.analysis.issues\",\n },\n next: \"filter-critical\",\n },\n ],\n defaultNext: \"approve\",\n },\n\n // Step 4a: Filter critical issues\n {\n id: \"filter-critical\",\n name: \"Filter Critical\",\n kind: \"transform\",\n description: \"Extract critical issues for blocking\",\n transforms: {\n \"review.hasCritical\": true,\n \"review.issues\": \"{{steps.analysis.issues}}\",\n },\n next: \"post-comments\",\n },\n\n // Step 5: Post review comments\n {\n id: \"post-comments\",\n name: \"Post Comments\",\n kind: \"task\",\n description: \"Post review comments on GitHub\",\n task: \"github-post-review\",\n input: {\n owner: \"{{trigger.repository.owner}}\",\n repo: \"{{trigger.repository.name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n body: \"## AI Code Review\\n\\nI found {{review.issues.length}} issue(s) in this PR.\",\n comments: \"{{review.issues}}\",\n event: \"REQUEST_CHANGES\",\n },\n saveAs: \"steps.reviewPost\",\n next: \"wait-author-response\",\n },\n\n // Step 6: Wait for author response\n {\n id: \"wait-author-response\",\n name: \"Wait for Response\",\n kind: \"wait\",\n description: \"Wait for author to address issues or respond\",\n event: \"github.pull_request.synchronize\",\n saveEventAs: \"events.authorResponse\",\n timeout: { ms: 86400000 }, // 24 hours\n next: \"re-analyze\",\n nextOnTimeout: \"timeout-reminder\",\n },\n\n // Step 6a: Re-analyze after author changes\n {\n id: \"re-analyze\",\n name: \"Re-analyze\",\n kind: \"task\",\n description: \"Re-fetch and re-analyze after author changes\",\n task: \"github-fetch-diff\",\n input: {\n owner: \"{{trigger.repository.owner}}\",\n repo: \"{{trigger.repository.name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n saveAs: \"steps.newDiff\",\n next: \"analyze-code\",\n },\n\n // Step 6b: Timeout reminder\n {\n id: \"timeout-reminder\",\n name: \"Timeout Reminder\",\n kind: \"emit\",\n description: \"Remind author about pending review\",\n event: \"review.reminder\",\n payload: {\n pullNumber: \"{{trigger.pull_request.number}}\",\n author: \"{{trigger.pull_request.user.login}}\",\n message: \"Code review feedback is still pending\",\n },\n next: null,\n },\n\n // Step 7: Approve PR\n {\n id: \"approve\",\n name: \"Approve PR\",\n kind: \"task\",\n description: \"Approve the PR with positive review\",\n task: \"github-post-review\",\n input: {\n owner: \"{{trigger.repository.owner}}\",\n repo: \"{{trigger.repository.name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n body: \"## AI Code Review\\n\\nā
LGTM! No issues found.\",\n event: \"APPROVE\",\n },\n saveAs: \"steps.approval\",\n next: \"complete\",\n },\n\n // Step 8: Complete\n {\n id: \"complete\",\n name: \"Complete\",\n kind: \"emit\",\n description: \"Emit review completion event\",\n event: \"review.completed\",\n payload: {\n pullNumber: \"{{trigger.pull_request.number}}\",\n repository: \"{{trigger.repository.full_name}}\",\n result: \"approved\",\n },\n next: null,\n },\n ],\n\n outputs: {\n onCompleted: [\n {\n event: \"agent.task.completed\",\n payload: {\n agent: \"code-review\",\n repository: \"{{trigger.repository.full_name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n },\n ],\n onFailed: [\n {\n event: \"agent.task.failed\",\n payload: {\n agent: \"code-review\",\n repository: \"{{trigger.repository.full_name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n },\n ],\n },\n\n tags: [\"github\", \"code-review\", \"ai\", \"automation\"],\n author: \"codmir-team\",\n};\n\nexport default codeReviewContract;\n","/**\n * @fileoverview\n * PR Analysis Contract\n *\n * This contract is triggered by GitHub App webhooks (not GitHub Actions)\n * when a pull request is opened, synchronized, or reopened.\n *\n * It replaces the ai-pr-review.yml GitHub Actions workflow with\n * event-driven execution through the Codmir engine.\n */\n\nimport type { CodmirContract } from \"../schema\";\n\n/**\n * PR Analysis Contract\n *\n * Triggered by: github.pull_request.opened, github.pull_request.synchronize, github.pull_request.reopened\n * Permissions: Read repo, emit events, invoke LLM, post comments via HTTP\n */\nexport const prAnalysisContract: CodmirContract = {\n schemaVersion: \"codmir.contract.v1\",\n id: \"codmir.pr-analysis\",\n version: \"1.0.0\",\n title: \"PR Analysis Agent\",\n description:\n \"Automatically analyzes pull requests for code quality, secrets, and best practices when triggered by GitHub App webhook\",\n\n triggers: [\n {\n type: \"event\",\n event: \"github.pull_request.opened\",\n },\n {\n type: \"event\",\n event: \"github.pull_request.synchronize\",\n },\n {\n type: \"event\",\n event: \"github.pull_request.reopened\",\n },\n {\n type: \"event\",\n event: \"github.pull_request.ready_for_review\",\n },\n ],\n\n permissions: [\n { kind: \"event:emit\", pattern: \"github.*\" },\n { kind: \"event:emit\", pattern: \"pr.*\" },\n { kind: \"event:read\", pattern: \"github.*\" },\n { kind: \"repo:read\", scope: \"*\" },\n { kind: \"http:request\", domains: [\"api.github.com\"] },\n { kind: \"secrets:read\", keys: [\"GITHUB_TOKEN\", \"GITHUB_APP_*\"] },\n ],\n\n limits: {\n maxRunMs: 120_000, // 2 minutes\n maxSteps: 10,\n maxLlmCalls: 0, // No LLM calls needed for basic analysis\n maxTokens: 0,\n },\n\n entryStepId: \"run-analysis\",\n\n steps: [\n // Step 1: Run full PR analysis (fetch + analyze + post comment)\n {\n id: \"run-analysis\",\n name: \"Run PR Analysis\",\n kind: \"task\",\n description: \"Fetch PR info, analyze diff, and post analysis comment\",\n task: \"pr-run-analysis\",\n input: {\n owner: \"{{trigger.repository.owner.login}}\",\n repo: \"{{trigger.repository.name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n installationId: \"{{trigger.installation.id}}\",\n },\n saveAs: \"steps.analysis\",\n timeout: { ms: 60000 },\n retry: { maxAttempts: 2, backoffMs: 2000 },\n next: \"check-secrets\",\n },\n\n // Step 2: Check for critical issues (secrets detected)\n {\n id: \"check-secrets\",\n name: \"Check for Secrets\",\n kind: \"branch\",\n description: \"Check if secrets were detected in the PR\",\n branches: [\n {\n when: {\n op: \"gt\",\n path: \"steps.analysis.analysis.secrets.length\",\n value: 0,\n },\n next: \"emit-secret-alert\",\n },\n ],\n defaultNext: \"emit-completed\",\n },\n\n // Step 2a: Emit secret alert\n {\n id: \"emit-secret-alert\",\n name: \"Emit Secret Alert\",\n kind: \"emit\",\n description: \"Emit alert about potential secrets detected\",\n event: \"pr.secrets.detected\",\n payload: {\n pullNumber: \"{{trigger.pull_request.number}}\",\n repository: \"{{trigger.repository.full_name}}\",\n secretCount: \"{{steps.analysis.analysis.secrets.length}}\",\n secrets: \"{{steps.analysis.analysis.secrets}}\",\n severity: \"critical\",\n },\n next: \"emit-completed\",\n },\n\n // Step 3: Emit completion event\n {\n id: \"emit-completed\",\n name: \"Emit Completed\",\n kind: \"emit\",\n description: \"Emit PR analysis completion event\",\n event: \"pr.analysis.completed\",\n payload: {\n pullNumber: \"{{trigger.pull_request.number}}\",\n repository: \"{{trigger.repository.full_name}}\",\n analysis: \"{{steps.analysis.analysis}}\",\n commentPosted: \"{{steps.analysis.commentPosted}}\",\n commentId: \"{{steps.analysis.commentId}}\",\n },\n next: null,\n },\n ],\n\n outputs: {\n onCompleted: [\n {\n event: \"agent.task.completed\",\n payload: {\n agent: \"pr-analysis\",\n repository: \"{{trigger.repository.full_name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n result: \"{{steps.analysis}}\",\n },\n },\n ],\n onFailed: [\n {\n event: \"agent.task.failed\",\n payload: {\n agent: \"pr-analysis\",\n repository: \"{{trigger.repository.full_name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n },\n ],\n },\n\n tags: [\"github\", \"pr-analysis\", \"automation\", \"webhook\"],\n author: \"codmir-team\",\n};\n\n/**\n * Enhanced PR Analysis Contract with LLM review\n *\n * This version includes AI-powered code review in addition to static analysis.\n * Use this for more comprehensive reviews.\n */\nexport const prAnalysisWithLlmContract: CodmirContract = {\n schemaVersion: \"codmir.contract.v1\",\n id: \"codmir.pr-analysis-llm\",\n version: \"1.0.0\",\n title: \"PR Analysis Agent (with AI Review)\",\n description:\n \"Analyzes pull requests with AI-powered code review for deeper insights\",\n\n triggers: [\n {\n type: \"event\",\n event: \"github.pull_request.opened\",\n },\n {\n type: \"event\",\n event: \"github.pull_request.synchronize\",\n },\n ],\n\n permissions: [\n { kind: \"event:emit\", pattern: \"github.*\" },\n { kind: \"event:emit\", pattern: \"pr.*\" },\n { kind: \"event:read\", pattern: \"github.*\" },\n { kind: \"repo:read\", scope: \"*\" },\n { kind: \"http:request\", domains: [\"api.github.com\"] },\n { kind: \"secrets:read\", keys: [\"GITHUB_TOKEN\", \"GITHUB_APP_*\"] },\n { kind: \"llm:invoke\", models: [\"claude-3-sonnet\", \"claude-3-haiku\"] },\n ],\n\n limits: {\n maxRunMs: 300_000, // 5 minutes\n maxSteps: 15,\n maxLlmCalls: 5,\n maxTokens: 50000,\n },\n\n entryStepId: \"fetch-pr\",\n\n steps: [\n // Step 1: Fetch PR info\n {\n id: \"fetch-pr\",\n name: \"Fetch PR Info\",\n kind: \"task\",\n description: \"Fetch pull request metadata from GitHub\",\n task: \"pr-fetch-info\",\n input: {\n owner: \"{{trigger.repository.owner.login}}\",\n repo: \"{{trigger.repository.name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n saveAs: \"steps.pr\",\n timeout: { ms: 15000 },\n next: \"fetch-files\",\n },\n\n // Step 2: Fetch PR files\n {\n id: \"fetch-files\",\n name: \"Fetch PR Files\",\n kind: \"task\",\n description: \"Fetch changed files with patches\",\n task: \"pr-fetch-files\",\n input: {\n owner: \"{{trigger.repository.owner.login}}\",\n repo: \"{{trigger.repository.name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n saveAs: \"steps.files\",\n timeout: { ms: 30000 },\n next: \"static-analysis\",\n },\n\n // Step 3: Run static analysis\n {\n id: \"static-analysis\",\n name: \"Static Analysis\",\n kind: \"task\",\n description: \"Run heuristic analysis on PR diff\",\n task: \"pr-analyze-diff\",\n input: {\n pr: \"{{steps.pr}}\",\n files: \"{{steps.files}}\",\n owner: \"{{trigger.repository.owner.login}}\",\n repo: \"{{trigger.repository.name}}\",\n },\n saveAs: \"steps.staticAnalysis\",\n timeout: { ms: 30000 },\n next: \"llm-review\",\n },\n\n // Step 4: AI-powered code review\n {\n id: \"llm-review\",\n name: \"AI Code Review\",\n kind: \"llm\",\n description: \"Use AI to review code changes for issues and improvements\",\n model: \"claude-3-sonnet\",\n systemPrompt: `You are an expert code reviewer. Analyze the PR diff and identify:\n1. Potential bugs or logic errors\n2. Security vulnerabilities\n3. Performance issues\n4. Code style violations\n5. Missing error handling\n6. Suggestions for improvement\n\nBe concise and actionable. Focus on the most important issues.\nRespond in JSON format with an \"issues\" array containing objects with:\n- severity: \"critical\" | \"warning\" | \"info\"\n- file: string (filename)\n- line: number (approximate line if known)\n- issue: string (description)\n- suggestion: string (how to fix)`,\n prompt: {\n prTitle: \"{{steps.pr.title}}\",\n prDescription: \"{{trigger.pull_request.body}}\",\n staticIssues: \"{{steps.staticAnalysis.analysis.issues}}\",\n changedFiles: \"{{steps.files}}\",\n },\n saveAs: \"steps.llmReview\",\n temperature: 0.2,\n maxTokens: 4000,\n next: \"post-comment\",\n },\n\n // Step 5: Post combined analysis comment\n {\n id: \"post-comment\",\n name: \"Post Comment\",\n kind: \"task\",\n description: \"Post analysis and AI review comment to PR\",\n task: \"pr-post-comment\",\n input: {\n owner: \"{{trigger.repository.owner.login}}\",\n repo: \"{{trigger.repository.name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n markdown: \"{{steps.staticAnalysis.markdown}}\\n\\n### š¤ AI Review\\n\\n{{steps.llmReview.content}}\",\n },\n saveAs: \"steps.comment\",\n timeout: { ms: 15000 },\n next: \"emit-completed\",\n },\n\n // Step 6: Emit completion\n {\n id: \"emit-completed\",\n name: \"Complete\",\n kind: \"emit\",\n description: \"Emit completion event\",\n event: \"pr.analysis.completed\",\n payload: {\n pullNumber: \"{{trigger.pull_request.number}}\",\n repository: \"{{trigger.repository.full_name}}\",\n staticAnalysis: \"{{steps.staticAnalysis.analysis}}\",\n llmReview: \"{{steps.llmReview}}\",\n commentPosted: true,\n },\n next: null,\n },\n ],\n\n outputs: {\n onCompleted: [\n {\n event: \"agent.task.completed\",\n payload: {\n agent: \"pr-analysis-llm\",\n repository: \"{{trigger.repository.full_name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n },\n ],\n onFailed: [\n {\n event: \"agent.task.failed\",\n payload: {\n agent: \"pr-analysis-llm\",\n repository: \"{{trigger.repository.full_name}}\",\n pullNumber: \"{{trigger.pull_request.number}}\",\n },\n },\n ],\n },\n\n tags: [\"github\", \"pr-analysis\", \"ai-review\", \"automation\", \"webhook\"],\n author: \"codmir-team\",\n};\n\nexport default prAnalysisContract;\n","/**\n * @fileoverview\n * Zod schemas for the Codmir cluster-first compute plane.\n *\n * All types shared between:\n * - Control Plane (NestJS orchestrator)\n * - Node Agent (Jetson / x86 / Mac mini workers)\n * - IDE client (Next.js 15)\n */\n\nimport { z } from \"zod\";\n\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n// Constants\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n\n/** All recognised node capabilities. */\nexport const NODE_CAPABILITIES = [\n \"llm.chat\",\n \"llm.completion\",\n \"embeddings.encode\",\n \"repo.index\",\n \"tools.run\",\n \"build.compile\",\n \"build.test\",\n \"vision.detect\",\n \"audio.transcribe\",\n \"audio.tts\",\n] as const;\n\n/** All recognised job types. */\nexport const JOB_TYPES = [\n \"chat\",\n \"embed\",\n \"patch\",\n \"build\",\n \"test\",\n \"index\",\n \"transcribe\",\n \"custom\",\n] as const;\n\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n// Node schemas\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n\nexport const NodeCapabilitySchema = z.enum(NODE_CAPABILITIES);\nexport type NodeCapability = z.infer<typeof NodeCapabilitySchema>;\n\nexport const NodeHardwareSchema = z.object({\n arch: z.enum([\"arm64\", \"x86_64\", \"aarch64\"]),\n gpuType: z.string().optional(),\n gpuMemoryMb: z.number().int().nonnegative().optional(),\n ramMb: z.number().int().positive(),\n cpuCores: z.number().int().positive(),\n cudaCores: z.number().int().nonnegative().optional(),\n tensorCores: z.number().int().nonnegative().optional(),\n});\nexport type NodeHardware = z.infer<typeof NodeHardwareSchema>;\n\nexport const NodeStatusSchema = z.enum([\n \"online\",\n \"offline\",\n \"draining\",\n \"error\",\n]);\nexport type NodeStatus = z.infer<typeof NodeStatusSchema>;\n\nexport const NodeSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n capabilities: z.array(NodeCapabilitySchema).min(1),\n labels: z.array(z.string()).default([]),\n hardware: NodeHardwareSchema,\n modelsAvailable: z.array(z.string()).default([]),\n status: NodeStatusSchema.default(\"offline\"),\n maxConcurrency: z.number().int().positive().default(2),\n runningJobs: z.number().int().nonnegative().default(0),\n lastHeartbeatAt: z.string().datetime().optional(),\n registeredAt: z.string().datetime(),\n endpoint: z.string().url(),\n});\nexport type ComputeNode = z.infer<typeof NodeSchema>;\n\nexport const RegisterNodeSchema = z.object({\n name: z.string().min(1),\n capabilities: z.array(NodeCapabilitySchema).min(1),\n labels: z.array(z.string()).default([]),\n hardware: NodeHardwareSchema,\n modelsAvailable: z.array(z.string()).default([]),\n maxConcurrency: z.number().int().positive().default(2),\n endpoint: z.string().url(),\n});\nexport type RegisterNodePayload = z.infer<typeof RegisterNodeSchema>;\n\nexport const HeartbeatSchema = z.object({\n runningJobs: z.number().int().nonnegative(),\n modelsAvailable: z.array(z.string()).optional(),\n load: z\n .object({\n cpuPercent: z.number().min(0).max(100).optional(),\n gpuPercent: z.number().min(0).max(100).optional(),\n ramUsedMb: z.number().nonnegative().optional(),\n })\n .optional(),\n});\nexport type HeartbeatPayload = z.infer<typeof HeartbeatSchema>;\n\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n// Job schemas\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n\nexport const JobTypeSchema = z.enum(JOB_TYPES);\nexport type JobType = z.infer<typeof JobTypeSchema>;\n\nexport const JobStatusSchema = z.enum([\n \"queued\",\n \"assigned\",\n \"running\",\n \"succeeded\",\n \"failed\",\n \"canceled\",\n]);\nexport type JobStatus = z.infer<typeof JobStatusSchema>;\n\nexport const JobPrioritySchema = z.enum([\"critical\", \"high\", \"normal\", \"low\"]);\nexport type JobPriority = z.infer<typeof JobPrioritySchema>;\n\nexport const SubmitJobSchema = z.object({\n workspaceId: z.string().min(1),\n type: JobTypeSchema,\n priority: JobPrioritySchema.default(\"normal\"),\n requiredCapabilities: z.array(NodeCapabilitySchema).min(1),\n preferredModel: z.string().optional(),\n payload: z.record(z.unknown()),\n timeoutMs: z.number().int().positive().default(120_000),\n idempotencyKey: z.string().optional(),\n});\nexport type SubmitJobPayload = z.infer<typeof SubmitJobSchema>;\n\nexport const JobResultSchema = z.object({\n success: z.boolean(),\n output: z.record(z.unknown()).optional(),\n error: z.string().optional(),\n artifactRefs: z.array(z.string()).default([]),\n durationMs: z.number().int().nonnegative().optional(),\n});\nexport type JobResult = z.infer<typeof JobResultSchema>;\n\nexport const JobSchema = z.object({\n id: z.string().min(1),\n workspaceId: z.string().min(1),\n type: JobTypeSchema,\n priority: JobPrioritySchema,\n status: JobStatusSchema,\n requiredCapabilities: z.array(NodeCapabilitySchema),\n preferredModel: z.string().optional(),\n payload: z.record(z.unknown()),\n timeoutMs: z.number().int().positive(),\n assignedNodeId: z.string().optional(),\n result: JobResultSchema.optional(),\n createdAt: z.string().datetime(),\n startedAt: z.string().datetime().optional(),\n completedAt: z.string().datetime().optional(),\n});\nexport type ComputeJob = z.infer<typeof JobSchema>;\n\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n// Workspace schemas\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n\nexport const WorkspaceSchema = z.object({\n id: z.string().min(1),\n projectId: z.string().min(1),\n repoUrl: z.string().url(),\n defaultBranch: z.string().default(\"main\"),\n allowedCapabilities: z.array(NodeCapabilitySchema).optional(),\n createdAt: z.string().datetime(),\n});\nexport type ComputeWorkspace = z.infer<typeof WorkspaceSchema>;\n\nexport const RegisterWorkspaceSchema = z.object({\n projectId: z.string().min(1),\n repoUrl: z.string().url(),\n defaultBranch: z.string().default(\"main\"),\n allowedCapabilities: z.array(NodeCapabilitySchema).optional(),\n});\nexport type RegisterWorkspacePayload = z.infer<typeof RegisterWorkspaceSchema>;\n\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n// SSE event protocol\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n\nexport const JobEventTypeSchema = z.enum([\n \"job.queued\",\n \"job.assigned\",\n \"job.started\",\n \"job.token\",\n \"job.log\",\n \"job.progress\",\n \"job.artifact\",\n \"job.succeeded\",\n \"job.failed\",\n \"job.canceled\",\n]);\nexport type JobEventType = z.infer<typeof JobEventTypeSchema>;\n\nexport const JobEventSchema = z.object({\n type: JobEventTypeSchema,\n jobId: z.string().min(1),\n nodeId: z.string().optional(),\n timestamp: z.string().datetime(),\n data: z.record(z.unknown()).default({}),\n});\nexport type JobEvent = z.infer<typeof JobEventSchema>;\n\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n// Provider mode (IDE setting)\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n\nexport const ProviderModeSchema = z.enum([\"local\", \"cloud\", \"auto\"]);\nexport type ProviderMode = z.infer<typeof ProviderModeSchema>;\n","/**\n * @fileoverview\n * Voice Create Ticket Contract\n *\n * Creates a ticket/issue from a voice command.\n * This is a fast, synchronous action (instant duration).\n */\n\nimport type { CodmirContract } from \"../schema\";\n\nexport const voiceCreateTicketContract: CodmirContract = {\n schemaVersion: \"codmir.contract.v1\",\n id: \"voice.create-ticket\",\n version: \"1.0.0\",\n title: \"Create Ticket via Voice\",\n description: \"Creates a new ticket/issue from a voice command\",\n\n execution: {\n expectedDuration: \"instant\",\n mode: \"sync\",\n asyncAckMessage: \"Creating your ticket now...\",\n },\n\n triggers: [\n {\n type: \"event\",\n event: \"voice.action.requested\",\n where: { action: \"create_ticket\" },\n },\n ],\n\n permissions: [\n { kind: \"storage:write\", scope: \"tickets\" },\n { kind: \"event:emit\", pattern: \"ticket.created\" },\n ],\n\n limits: {\n maxRunMs: 10000,\n maxSteps: 5,\n },\n\n entryStepId: \"validate\",\n\n steps: [\n {\n id: \"validate\",\n name: \"Validate Input\",\n kind: \"transform\",\n transforms: {\n \"input.title\": \"{{trigger.payload.params.title}}\",\n \"input.description\": \"{{trigger.payload.params.description}}\",\n \"input.priority\": \"{{trigger.payload.params.priority}}\",\n \"input.projectId\": \"{{trigger.payload.params.projectId}}\",\n \"input.labels\": \"{{trigger.payload.params.labels}}\",\n \"input.userId\": \"{{trigger.payload.userId}}\",\n },\n next: \"create\",\n },\n {\n id: \"create\",\n name: \"Create Ticket\",\n kind: \"task\",\n task: \"voice.create-ticket\",\n input: {\n title: \"{{input.title}}\",\n description: \"{{input.description}}\",\n priority: \"{{input.priority}}\",\n projectId: \"{{input.projectId}}\",\n labels: \"{{input.labels}}\",\n userId: \"{{input.userId}}\",\n },\n saveAs: \"ticket\",\n next: \"emit\",\n },\n {\n id: \"emit\",\n name: \"Emit Ticket Created Event\",\n kind: \"emit\",\n event: \"ticket.created\",\n payload: {\n ticketId: \"{{ticket.id}}\",\n title: \"{{ticket.title}}\",\n priority: \"{{ticket.priority}}\",\n source: \"voice\",\n userId: \"{{input.userId}}\",\n },\n next: \"output\",\n },\n {\n id: \"output\",\n name: \"Prepare Output\",\n kind: \"transform\",\n transforms: {\n \"output.success\": true,\n \"output.ticketId\": \"{{ticket.id}}\",\n \"output.title\": \"{{ticket.title}}\",\n \"output.url\": \"{{ticket.url}}\",\n \"output.message\": \"Ticket created successfully\",\n },\n next: null,\n },\n ],\n\n outputs: {\n onCompleted: [\n {\n event: \"voice.action.completed\",\n payload: {\n action: \"create_ticket\",\n success: true,\n result: \"{{output}}\",\n },\n },\n ],\n onFailed: [\n {\n event: \"voice.action.failed\",\n payload: {\n action: \"create_ticket\",\n error: \"{{error}}\",\n },\n },\n ],\n },\n\n tags: [\"voice\", \"tickets\", \"instant\"],\n};\n","/**\n * @fileoverview\n * Voice Search Codebase Contract\n *\n * Searches the codebase for patterns, functions, or files from voice command.\n * This is a quick action (2-30s depending on codebase size).\n */\n\nimport type { CodmirContract } from \"../schema\";\n\nexport const voiceSearchCodebaseContract: CodmirContract = {\n schemaVersion: \"codmir.contract.v1\",\n id: \"voice.search-codebase\",\n version: \"1.0.0\",\n title: \"Search Codebase via Voice\",\n description: \"Searches the codebase for specific patterns, functions, or files\",\n\n execution: {\n expectedDuration: \"quick\",\n mode: \"sync\",\n syncThreshold: 15000, // 15 seconds max wait\n asyncAckMessage: \"Searching the codebase now...\",\n },\n\n triggers: [\n {\n type: \"event\",\n event: \"voice.action.requested\",\n where: { action: \"search_codebase\" },\n },\n ],\n\n permissions: [\n { kind: \"repo:read\", scope: \"*\" },\n { kind: \"event:emit\", pattern: \"search.completed\" },\n ],\n\n limits: {\n maxRunMs: 30000,\n maxSteps: 5,\n },\n\n entryStepId: \"validate\",\n\n steps: [\n {\n id: \"validate\",\n name: \"Validate Input\",\n kind: \"transform\",\n transforms: {\n \"input.query\": \"{{trigger.payload.params.query}}\",\n \"input.fileTypes\": \"{{trigger.payload.params.file_types}}\",\n \"input.pathFilter\": \"{{trigger.payload.params.path_filter}}\",\n \"input.maxResults\": \"{{trigger.payload.params.max_results}}\",\n \"input.userId\": \"{{trigger.payload.userId}}\",\n },\n next: \"search\",\n },\n {\n id: \"search\",\n name: \"Search Codebase\",\n kind: \"task\",\n task: \"voice.search-codebase\",\n input: {\n query: \"{{input.query}}\",\n fileTypes: \"{{input.fileTypes}}\",\n pathFilter: \"{{input.pathFilter}}\",\n maxResults: \"{{input.maxResults}}\",\n },\n saveAs: \"searchResults\",\n next: \"output\",\n },\n {\n id: \"output\",\n name: \"Prepare Output\",\n kind: \"transform\",\n transforms: {\n \"output.success\": true,\n \"output.query\": \"{{input.query}}\",\n \"output.results\": \"{{searchResults.results}}\",\n \"output.total\": \"{{searchResults.total}}\",\n \"output.message\": \"Found {{searchResults.total}} results\",\n },\n next: null,\n },\n ],\n\n outputs: {\n onCompleted: [\n {\n event: \"voice.action.completed\",\n payload: {\n action: \"search_codebase\",\n success: true,\n result: \"{{output}}\",\n },\n },\n ],\n onFailed: [\n {\n event: \"voice.action.failed\",\n payload: {\n action: \"search_codebase\",\n error: \"{{error}}\",\n },\n },\n ],\n },\n\n tags: [\"voice\", \"search\", \"code\", \"quick\"],\n};\n","/**\n * @fileoverview\n * Voice Deploy Preview Contract\n *\n * Deploys a preview environment from a voice command.\n * This is a long-running action that requires approval (async).\n */\n\nimport type { CodmirContract } from \"../schema\";\n\nexport const voiceDeployPreviewContract: CodmirContract = {\n schemaVersion: \"codmir.contract.v1\",\n id: \"voice.deploy-preview\",\n version: \"1.0.0\",\n title: \"Deploy Preview via Voice\",\n description: \"Deploys a preview environment for testing\",\n\n execution: {\n expectedDuration: \"long\",\n mode: \"async\",\n interruptible: true,\n asyncAckMessage: \"I'll start the deployment. This may take a few minutes - I'll notify you when it's ready.\",\n },\n\n triggers: [\n {\n type: \"event\",\n event: \"voice.action.requested\",\n where: { action: \"deploy_preview\" },\n },\n ],\n\n permissions: [\n { kind: \"http:request\", domains: [\"api.vercel.com\", \"api.netlify.com\", \"api.railway.app\"] },\n { kind: \"repo:read\", scope: \"*\" },\n { kind: \"event:emit\", pattern: \"deploy.*\" },\n ],\n\n limits: {\n maxRunMs: 600000, // 10 minutes\n maxSteps: 10,\n },\n\n entryStepId: \"validate\",\n\n steps: [\n {\n id: \"validate\",\n name: \"Validate Input\",\n kind: \"transform\",\n transforms: {\n \"input.branch\": \"{{trigger.payload.params.branch}}\",\n \"input.environment\": \"{{trigger.payload.params.environment}}\",\n \"input.projectId\": \"{{trigger.payload.params.projectId}}\",\n \"input.userId\": \"{{trigger.payload.userId}}\",\n },\n next: \"confirm\",\n },\n {\n id: \"confirm\",\n name: \"Confirm Deployment\",\n kind: \"approval\",\n prompt: \"Deploy branch '{{input.branch}}' to {{input.environment}} environment?\",\n approvers: [\"{{input.userId}}\"],\n nextOnApproved: \"deploy\",\n nextOnDenied: \"cancelled\",\n timeout: { ms: 60000 },\n timeoutAction: \"deny\",\n context: {\n branch: \"{{input.branch}}\",\n environment: \"{{input.environment}}\",\n },\n },\n {\n id: \"deploy\",\n name: \"Deploy to Preview\",\n kind: \"task\",\n task: \"voice.deploy-preview\",\n input: {\n branch: \"{{input.branch}}\",\n environment: \"{{input.environment}}\",\n projectId: \"{{input.projectId}}\",\n },\n saveAs: \"deployment\",\n timeout: { ms: 300000 }, // 5 min timeout for deployment\n next: \"notify\",\n },\n {\n id: \"notify\",\n name: \"Emit Deployment Event\",\n kind: \"emit\",\n event: \"deploy.completed\",\n payload: {\n deploymentId: \"{{deployment.id}}\",\n url: \"{{deployment.url}}\",\n branch: \"{{input.branch}}\",\n environment: \"{{input.environment}}\",\n source: \"voice\",\n userId: \"{{input.userId}}\",\n },\n next: \"output\",\n },\n {\n id: \"output\",\n name: \"Prepare Output\",\n kind: \"transform\",\n transforms: {\n \"output.success\": true,\n \"output.deploymentId\": \"{{deployment.id}}\",\n \"output.url\": \"{{deployment.url}}\",\n \"output.branch\": \"{{input.branch}}\",\n \"output.message\": \"Deployment complete! Preview available at {{deployment.url}}\",\n },\n next: null,\n },\n {\n id: \"cancelled\",\n name: \"Handle Cancellation\",\n kind: \"transform\",\n transforms: {\n \"output.success\": false,\n \"output.message\": \"Deployment was cancelled\",\n },\n next: null,\n },\n ],\n\n outputs: {\n onCompleted: [\n {\n event: \"voice.action.completed\",\n payload: {\n action: \"deploy_preview\",\n success: true,\n result: \"{{output}}\",\n },\n },\n ],\n onFailed: [\n {\n event: \"voice.action.failed\",\n payload: {\n action: \"deploy_preview\",\n error: \"{{error}}\",\n },\n },\n ],\n onCancelled: [\n {\n event: \"voice.action.cancelled\",\n payload: {\n action: \"deploy_preview\",\n reason: \"User cancelled or approval timeout\",\n },\n },\n ],\n },\n\n tags: [\"voice\", \"deploy\", \"preview\", \"long\", \"approval\"],\n};\n","/**\n * @fileoverview\n * Voice Save Note Contract\n *\n * Saves a note or snippet from a voice command.\n * This is a fast, synchronous action (instant duration).\n */\n\nimport type { CodmirContract } from \"../schema\";\n\nexport const voiceSaveNoteContract: CodmirContract = {\n schemaVersion: \"codmir.contract.v1\",\n id: \"voice.save-note\",\n version: \"1.0.0\",\n title: \"Save Note via Voice\",\n description: \"Saves a note or snippet for later reference\",\n\n execution: {\n expectedDuration: \"instant\",\n mode: \"sync\",\n asyncAckMessage: \"Saving your note...\",\n },\n\n triggers: [\n {\n type: \"event\",\n event: \"voice.action.requested\",\n where: { action: \"save_note\" },\n },\n ],\n\n permissions: [\n { kind: \"storage:write\", scope: \"notes\" },\n { kind: \"event:emit\", pattern: \"note.saved\" },\n ],\n\n limits: {\n maxRunMs: 10000,\n maxSteps: 4,\n },\n\n entryStepId: \"validate\",\n\n steps: [\n {\n id: \"validate\",\n name: \"Validate Input\",\n kind: \"transform\",\n transforms: {\n \"input.content\": \"{{trigger.payload.params.content}}\",\n \"input.title\": \"{{trigger.payload.params.title}}\",\n \"input.tags\": \"{{trigger.payload.params.tags}}\",\n \"input.userId\": \"{{trigger.payload.userId}}\",\n },\n next: \"save\",\n },\n {\n id: \"save\",\n name: \"Save Note\",\n kind: \"task\",\n task: \"voice.save-note\",\n input: {\n content: \"{{input.content}}\",\n title: \"{{input.title}}\",\n tags: \"{{input.tags}}\",\n userId: \"{{input.userId}}\",\n },\n saveAs: \"note\",\n next: \"output\",\n },\n {\n id: \"output\",\n name: \"Prepare Output\",\n kind: \"transform\",\n transforms: {\n \"output.success\": true,\n \"output.noteId\": \"{{note.id}}\",\n \"output.title\": \"{{note.title}}\",\n \"output.message\": \"Note saved successfully\",\n },\n next: null,\n },\n ],\n\n outputs: {\n onCompleted: [\n {\n event: \"voice.action.completed\",\n payload: {\n action: \"save_note\",\n success: true,\n result: \"{{output}}\",\n },\n },\n ],\n onFailed: [\n {\n event: \"voice.action.failed\",\n payload: {\n action: \"save_note\",\n error: \"{{error}}\",\n },\n },\n ],\n },\n\n tags: [\"voice\", \"notes\", \"instant\"],\n};\n","/**\n * @fileoverview\n * Voice Contract Registry\n *\n * Central registry for all voice action contracts.\n * Provides lookup by contract ID or action name.\n */\n\nimport type { CodmirContract } from \"../schema\";\nimport { voiceCreateTicketContract } from \"./create-ticket\";\nimport { voiceSearchCodebaseContract } from \"./search-codebase\";\nimport { voiceDeployPreviewContract } from \"./deploy-preview\";\nimport { voiceSaveNoteContract } from \"./save-note\";\n\n/**\n * Map of action names to contract IDs.\n * Action names come from the voice event catalog (e.g., \"create_ticket\").\n */\nconst ACTION_TO_CONTRACT_ID: Record<string, string> = {\n create_ticket: \"voice.create-ticket\",\n update_ticket: \"voice.update-ticket\",\n search_codebase: \"voice.search-codebase\",\n search_documentation: \"voice.search-documentation\",\n analyze_code: \"voice.analyze-code\",\n suggest_fix: \"voice.suggest-fix\",\n run_query: \"voice.run-query\",\n get_metrics: \"voice.get-metrics\",\n deploy_preview: \"voice.deploy-preview\",\n check_deploy_status: \"voice.check-deploy-status\",\n send_notification: \"voice.send-notification\",\n create_summary: \"voice.create-summary\",\n set_reminder: \"voice.set-reminder\",\n save_note: \"voice.save-note\",\n};\n\n/**\n * All registered voice contracts.\n */\nexport const VOICE_CONTRACTS: Record<string, CodmirContract> = {\n \"voice.create-ticket\": voiceCreateTicketContract,\n \"voice.search-codebase\": voiceSearchCodebaseContract,\n \"voice.deploy-preview\": voiceDeployPreviewContract,\n \"voice.save-note\": voiceSaveNoteContract,\n};\n\n/**\n * Get a voice contract by its ID.\n * @param contractId - Contract ID (e.g., \"voice.create-ticket\")\n * @returns The contract or undefined if not found\n */\nexport function getVoiceContract(contractId: string): CodmirContract | undefined {\n return VOICE_CONTRACTS[contractId];\n}\n\n/**\n * Get a voice contract by the action name from the event catalog.\n * @param actionName - Action name (e.g., \"create_ticket\")\n * @returns The contract or undefined if not found\n */\nexport function getVoiceContractForAction(actionName: string): CodmirContract | undefined {\n const contractId = ACTION_TO_CONTRACT_ID[actionName];\n if (!contractId) return undefined;\n return VOICE_CONTRACTS[contractId];\n}\n\n/**\n * Check if a contract exists for the given action.\n * @param actionName - Action name (e.g., \"create_ticket\")\n * @returns True if a contract exists for this action\n */\nexport function hasContractForAction(actionName: string): boolean {\n const contractId = ACTION_TO_CONTRACT_ID[actionName];\n return contractId !== undefined && VOICE_CONTRACTS[contractId] !== undefined;\n}\n\n/**\n * Get all registered voice contracts.\n * @returns Array of all voice contracts\n */\nexport function getAllVoiceContracts(): CodmirContract[] {\n return Object.values(VOICE_CONTRACTS);\n}\n\n/**\n * Get the contract ID for a given action name.\n * @param actionName - Action name (e.g., \"create_ticket\")\n * @returns Contract ID or undefined\n */\nexport function getContractIdForAction(actionName: string): string | undefined {\n return ACTION_TO_CONTRACT_ID[actionName];\n}\n"]}
|