agent-contracts 0.35.3 → 0.35.5

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/cli-contract.yaml CHANGED
@@ -3,7 +3,7 @@ cli_contracts: 0.1.0
3
3
 
4
4
  info:
5
5
  title: agent-contracts CLI
6
- version: 0.34.0
6
+ version: 0.35.5
7
7
  description: >-
8
8
  Declarative YAML DSL toolkit for defining, validating, and rendering
9
9
  multi-agent development workflows. Provides static validation,
@@ -1318,7 +1318,7 @@ cli_contracts: 0.1.0
1318
1318
 
1319
1319
  info:
1320
1320
  title: agent-contracts CLI
1321
- version: 0.34.0
1321
+ version: 0.35.5
1322
1322
  description: >-
1323
1323
  Declarative YAML DSL toolkit for defining, validating, and rendering
1324
1324
  multi-agent development workflows. Provides static validation,
@@ -2325,7 +2325,7 @@ command_sets:
2325
2325
  "cli_contracts": "0.1.0",
2326
2326
  "info": {
2327
2327
  "title": "agent-contracts CLI",
2328
- "version": "0.34.0",
2328
+ "version": "0.35.5",
2329
2329
  "description": "Declarative YAML DSL toolkit for defining, validating, and rendering multi-agent development workflows. Provides static validation, semantic linting, prompt rendering, guardrail generation, and completeness scoring for agent contract definitions.",
2330
2330
  "license": {
2331
2331
  "name": "MIT"
@@ -3517,11 +3517,11 @@ command_sets:
3517
3517
  }
3518
3518
  }
3519
3519
  }`;function yae(e,t){let r=new fae;return r.name("agent-contracts").version(t,"-V, --version").description("Agent contracts tooling \u2014 validate, lint, render DSL files."),r.option("--introspect","Output derived policy as JSON without executing the command"),r.command("resolve").description("Resolve DSL (load + merge extends) and output YAML.").argument("[dir]","Path to agent-contracts.yaml.").option("-c, --config <path>","Path to agent-contracts.config.yaml.").option("--team <id>","Limit to one team (multi-team config only).").option("--format <format>","Output format.","text").option("--expand-defaults","Expand all Zod default values in output. Fields like required_validations, tags, and can_read_artifacts are written explicitly instead of relying on schema defaults.",!1).action(async(i,n,a)=>{let o=a.optsWithGlobals();if(o.introspect){let s=ec("resolve",n);console.log(JSON.stringify(s,null,2));return}await e.resolve(i,n,o)}),r.command("validate").description("Validate DSL against schema and check references.").argument("[dir]","Path to agent-contracts.yaml.").option("-c, --config <path>","Path to agent-contracts.config.yaml.").option("--team <id>","Limit to one team (multi-team config only).").option("--format <format>","Diagnostic output format.","text").option("--quiet","Suppress output on success.",!1).option("--strict","Treat warnings as errors.",!1).action(async(i,n,a)=>{let o=a.optsWithGlobals();if(o.introspect){let s=ec("validate",n);console.log(JSON.stringify(s,null,2));return}await e.validate(i,n,o)}),r.command("lint").description("Run semantic lint rules on resolved DSL.").argument("[dir]","Path to agent-contracts.yaml.").option("-c, --config <path>","Path to agent-contracts.config.yaml.").option("--team <id>","Limit to one team (multi-team config only).").option("--format <format>","Output format.","text").option("--quiet","Suppress output on success.",!1).option("--strict","Treat warnings as errors.",!1).action(async(i,n,a)=>{let o=a.optsWithGlobals();if(o.introspect){let s=ec("lint",n);console.log(JSON.stringify(s,null,2));return}await e.lint(i,n,o)}),r.command("render").description("(deprecated) Alias for 'generate templates'.").option("-c, --config <path>","Path to agent-contracts.config.yaml.").option("--team <id>","Limit to one team (multi-team config only).").option("--check","Check for template drift without writing files.",!1).option("--quiet","Suppress output on success.",!1).action(async(i,n)=>{let a=n.optsWithGlobals();if(a.introspect){let o=ec("render",i);console.log(JSON.stringify(o,null,2));return}await e.render(i,a)}),r.command("check").description("Run full pipeline \u2014 resolve, validate, lint, render --check.").option("-c, --config <path>","Path to agent-contracts.config.yaml.").option("--team <id>","Limit to one team (multi-team config only).").option("--format <format>","Diagnostic output format.","text").option("--quiet","Suppress output on success.",!1).option("--strict","Treat warnings as errors.",!1).action(async(i,n)=>{let a=n.optsWithGlobals();if(a.introspect){let o=ec("check",i);console.log(JSON.stringify(o,null,2));return}await e.check(i,a)}),r.command("score").description("Calculate DSL completeness score.").argument("[dir]","Path to agent-contracts.yaml.").option("-c, --config <path>","Path to agent-contracts.config.yaml.").option("--team <id>","Limit to one team (multi-team config only).").option("--format <format>","Output format.","text").option("--threshold <number>","Minimum score; exit 1 if below (for CI gates).").action(async(i,n,a)=>{let o=a.optsWithGlobals();if(o.introspect){let s=ec("score",n);console.log(JSON.stringify(s,null,2));return}await e.score(i,n,o)}),r.command("audit").description("Run LLM-based semantic audit on DSL definitions and generated outputs.").argument("[type]","Audit type to run: render (semantic diff of generated outputs vs DSL), dsl (design coherence review), prompt (generated prompt fidelity check), extensions (unconsumed x-* property detection), or all (run all four).").option("-c, --config <path>","Path to agent-contracts.config.yaml.").option("--team <id>","Limit to one team (multi-team config only).").option("--format <format>","Output format.","text").option("--scope <entities>","Limit audit scope to specified entities (e.g. agents:architect,implementer).").option("--show-prompt","Output the constructed prompt without calling the LLM API.",!1).option("--adapter <name>","SDK adapter to use for LLM calls (overrides config audit.adapter).").option("--model <name>","LLM model override (overrides config audit.model).").option("-l, --log-file <value>","Write agent progress log to this file path.").option("--fail-on <level>","Minimum finding severity that causes exit 10 (info|warning|error|critical).","critical").option("-o, --output <file>","Write result to a file instead of stdout.").option("--report-format <fmt>","Alias for --format. When both are specified, --report-format takes precedence.","text").action(async(i,n,a)=>{let o=a.optsWithGlobals();if(o.introspect){let s=ec("audit",n);console.log(JSON.stringify(s,null,2));return}if(n.showPrompt){let s=await e.audit(i,n,o);typeof s=="string"&&process.stdout.write(s+`
3520
- `);return}await e.audit(i,n,o)}),r.command("generate").description("Generate artifacts from DSL \u2014 templates, guardrails, and/or interface.").argument("[type]","Type of artifacts to generate. Omit to run all targets.").option("-c, --config <path>","Path to agent-contracts.config.yaml.").option("--team <id>","Limit to one team (multi-team config only).").option("--check","Check for template drift without writing files. Only applies to the templates target.",!1).option("--binding <name...>","Filter to specific software binding(s). Guardrails type only.").option("-o, --output <path>","Output path for generated team interface. Interface type only.").option("--format <format>","Output format for team interface (yaml or json). Interface type only.","yaml").option("--dry-run","Print what would be generated without writing files.",!1).option("--quiet","Suppress output on success.",!1).action(async(i,n,a)=>{let o=a.optsWithGlobals();if(o.introspect){let s=ec("generate",n);console.log(JSON.stringify(s,null,2));return}await e.generate(i,n,o)}),r.command("navigation-index").description("Build artifact-centric navigation index from resolved DSL.").argument("[dir]","Path to agent-contracts.yaml.").option("-c, --config <path>","Path to agent-contracts.config.yaml.").option("--team <id>","Limit to one team (multi-team config only).").option("--format <format>","Output format.","json").option("--artifact <id>","Filter output to a single artifact by ID.").option("--quiet","Suppress informational output.",!1).action(async(i,n,a)=>{let o=a.optsWithGlobals();if(o.introspect){let s=ec("navigation-index",n);console.log(JSON.stringify(s,null,2));return}await e.navigationIndex(i,n,o)}),r.command("artifact-coverage").description("Measure file coverage by artifact path_patterns definitions.").argument("[dir]","Path to agent-contracts.yaml.").option("-c, --config <path>","Path to agent-contracts.config.yaml.").option("--team <id>","Limit to one team (multi-team config only).").option("--format <format>","Output format.","text").option("--min-coverage <number>","Minimum coverage percentage; exit 1 if below (for CI gates).").action(async(i,n,a)=>{let o=a.optsWithGlobals();if(o.introspect){let s=ec("artifact-coverage",n);console.log(JSON.stringify(s,null,2));return}await e.artifactCoverage(i,n,o)}),r.command("extract").description("Extract contract specification for this CLI tool.").argument("[commands...]","Command IDs to extract. Use dot notation.").option("-a, --all","Extract all commands.",!1).option("--include-meta","Include extraction metadata.",!0).option("-F, --format <format>","Output format (yaml or json).","yaml").action(async(i,n,a)=>{i.length===0&&!n.all&&(process.stderr.write(JSON.stringify({code:"INVALID_ARGS",message:"Specify command IDs or use --all"})+`
3521
- `),process.exit(2));let o=n.format||"yaml",s=JSON.parse(vae),u=n.all?[]:i;if(u.length===0)if(o==="json"){let l={};n.includeMeta&&(l._meta={source:"embedded",type:"cli-contracts/extract",extractedAt:new Date().toISOString(),specVersion:s.cli_contracts??"0.1.0",commands:["agent-contracts.resolve","agent-contracts.validate","agent-contracts.lint","agent-contracts.render","agent-contracts.check","agent-contracts.score","agent-contracts.audit","agent-contracts.generate","agent-contracts.navigation-index","agent-contracts.artifact-coverage"]}),Object.assign(l,s),process.stdout.write(JSON.stringify(l,null,2)+`
3522
- `)}else{let l=[];if(l.push("# agent-contracts extract"),l.push("# source: embedded"),l.push("# type: cli-contracts/command-extract"),n.includeMeta){l.push("---"),l.push("source: embedded"),l.push("type: cli-contracts/command-extract"),l.push("extractedAt: "+new Date().toISOString()),l.push("spec_version: "+(s.cli_contracts??"0.1.0")),l.push("commands:");for(let c of["agent-contracts.resolve","agent-contracts.validate","agent-contracts.lint","agent-contracts.render","agent-contracts.check","agent-contracts.score","agent-contracts.audit","agent-contracts.generate","agent-contracts.navigation-index","agent-contracts.artifact-coverage"])l.push(" - "+c)}l.push("---"),l.push(gae),process.stdout.write(l.join(`
3520
+ `);return}await e.audit(i,n,o)}),r.command("generate").description("Generate artifacts from DSL \u2014 templates, guardrails, and/or interface.").argument("[type]","Type of artifacts to generate. Omit to run all targets.").option("-c, --config <path>","Path to agent-contracts.config.yaml.").option("--team <id>","Limit to one team (multi-team config only).").option("--check","Check for template drift without writing files. Only applies to the templates target.",!1).option("--binding <name...>","Filter to specific software binding(s). Guardrails type only.").option("-o, --output <path>","Output path for generated team interface. Interface type only.").option("--format <format>","Output format for team interface (yaml or json). Interface type only.","yaml").option("--dry-run","Print what would be generated without writing files.",!1).option("--quiet","Suppress output on success.",!1).action(async(i,n,a)=>{let o=a.optsWithGlobals();if(o.introspect){let s=ec("generate",n);console.log(JSON.stringify(s,null,2));return}await e.generate(i,n,o)}),r.command("navigation-index").description("Build artifact-centric navigation index from resolved DSL.").argument("[dir]","Path to agent-contracts.yaml.").option("-c, --config <path>","Path to agent-contracts.config.yaml.").option("--team <id>","Limit to one team (multi-team config only).").option("--format <format>","Output format.","json").option("--artifact <id>","Filter output to a single artifact by ID.").option("--quiet","Suppress informational output.",!1).action(async(i,n,a)=>{let o=a.optsWithGlobals();if(o.introspect){let s=ec("navigation-index",n);console.log(JSON.stringify(s,null,2));return}await e.navigationIndex(i,n,o)}),r.command("artifact-coverage").description("Measure file coverage by artifact path_patterns definitions.").argument("[dir]","Path to agent-contracts.yaml.").option("-c, --config <path>","Path to agent-contracts.config.yaml.").option("--team <id>","Limit to one team (multi-team config only).").option("--format <format>","Output format.","text").option("--min-coverage <number>","Minimum coverage percentage; exit 1 if below (for CI gates).").action(async(i,n,a)=>{let o=a.optsWithGlobals();if(o.introspect){let s=ec("artifact-coverage",n);console.log(JSON.stringify(s,null,2));return}await e.artifactCoverage(i,n,o)}),r.command("extract").description("Extract contract specification for this CLI tool.").argument("[commands...]","Command IDs to extract. Use dot notation.").option("-a, --all","Extract all commands.",!1).option("--include-meta","Include extraction metadata.",!0).option("-F, --format <format>","Output format (yaml or json).","yaml").action(async(i,n)=>{i.length===0&&!n.all&&(process.stderr.write(JSON.stringify({code:"INVALID_ARGS",message:"Specify command IDs or use --all"})+`
3521
+ `),process.exit(2));let a=n.format||"yaml",o=JSON.parse(vae),s=n.all?[]:i;if(s.length===0)if(a==="json"){let u={};n.includeMeta&&(u._meta={source:"embedded",type:"cli-contracts/extract",extractedAt:new Date().toISOString(),specVersion:o.cli_contracts??"0.1.0",commands:["agent-contracts.resolve","agent-contracts.validate","agent-contracts.lint","agent-contracts.render","agent-contracts.check","agent-contracts.score","agent-contracts.audit","agent-contracts.generate","agent-contracts.navigation-index","agent-contracts.artifact-coverage"]}),Object.assign(u,o),process.stdout.write(JSON.stringify(u,null,2)+`
3522
+ `)}else{let u=[];if(u.push("# agent-contracts extract"),u.push("# source: embedded"),u.push("# type: cli-contracts/command-extract"),n.includeMeta){u.push("---"),u.push("source: embedded"),u.push("type: cli-contracts/command-extract"),u.push("extractedAt: "+new Date().toISOString()),u.push("spec_version: "+(o.cli_contracts??"0.1.0")),u.push("commands:");for(let l of["agent-contracts.resolve","agent-contracts.validate","agent-contracts.lint","agent-contracts.render","agent-contracts.check","agent-contracts.score","agent-contracts.audit","agent-contracts.generate","agent-contracts.navigation-index","agent-contracts.artifact-coverage"])u.push(" - "+l)}u.push("---"),u.push(gae),process.stdout.write(u.join(`
3523
3523
  `)+`
3524
- `)}else{let l={cli_contracts:s.cli_contracts,info:s.info,command_sets:{}},c=l.command_sets;for(let[d,p]of Object.entries(s.command_sets??{})){let f=p.commands;if(!f)continue;let m={};for(let[g,v]of Object.entries(f)){let y=d+"."+g;u.some(S=>S===g||S===y||g.startsWith(S+"."))&&(m[g]=v)}if(Object.keys(m).length>0){let g={...p};g.commands=m,c[d]=g}}s.components&&(l.components=s.components),process.stdout.write(JSON.stringify(l,null,2)+`
3524
+ `)}else{let u={cli_contracts:o.cli_contracts,info:o.info,command_sets:{}},l=u.command_sets;for(let[c,d]of Object.entries(o.command_sets??{})){let p=d.commands;if(!p)continue;let f={};for(let[m,g]of Object.entries(p)){let v=c+"."+m;s.some(y=>y===m||y===v||m.startsWith(y+"."))&&(f[m]=g)}if(Object.keys(f).length>0){let m={...d};m.commands=f,l[c]=m}}o.components&&(u.components=o.components),process.stdout.write(JSON.stringify(u,null,2)+`
3525
3525
  `)}process.exit(0)}),r}var gm=_n(fu(),1);import{writeFileSync as vze}from"node:fs";import{existsSync as PVt,readFileSync as CVt}from"node:fs";import{join as IVt,dirname as Yie}from"node:path";import{resolve as jVt}from"node:path";import{access as TVt}from"node:fs/promises";var pfe=_n(fu(),1);import{readFile as vYe}from"node:fs/promises";import{dirname as yYe,resolve as cfe}from"node:path";import{stat as dfe}from"node:fs/promises";Ri();var qf=q.object({title:q.string(),content:q.string().optional(),list:q.enum(["agents","workflow","validations","guardrails"]).optional()}).passthrough(),lx=q.object({id:q.string(),name:q.string().optional(),description:q.string(),severity:q.enum(["mandatory","recommended","optional"]),detection_method:q.string().optional(),escalation:q.string().optional(),ref:q.string().optional()}).passthrough(),cx=q.object({condition:q.string(),action:q.enum(["stop_and_report","report_to_architect","wait_for_approval"])}).passthrough(),ope=q.object({action:q.enum(["read","execute"]),target:q.string(),required:q.boolean()}).passthrough(),spe=q.object({resumable:q.boolean().optional(),ref_required:q.boolean().optional(),emits_memory_ref:q.boolean().optional()}),GU=q.object({role_name:q.string(),purpose:q.string(),own_artifacts:q.array(q.string()).default([]),can_read_artifacts:q.array(q.string()).default([]),can_write_artifacts:q.array(q.string()).default([]),can_execute_tools:q.array(q.string()).default([]),can_perform_validations:q.array(q.string()).default([]),can_invoke_agents:q.array(q.string()).default([]),can_return_handoffs:q.array(q.string()).default([]),dispatch_only:q.boolean().optional(),mode:q.enum(["read-only","read-write"]).optional(),responsibilities:q.array(q.string()).optional(),constraints:q.array(q.string()).optional(),rules:q.array(lx).optional(),anti_patterns:q.array(q.string()).optional(),escalation_criteria:q.array(cx).optional(),sections:q.array(qf).optional(),prerequisites:q.array(ope).optional(),guardrails:q.array(q.string()).optional(),memory:spe.optional(),effects:q.array(q.string()).optional()}).passthrough();Ri();var ZU=q.object({type:q.string(),description:q.string().optional(),owner:q.string().optional(),producers:q.array(q.string()).default([]),editors:q.array(q.string()).default([]),consumers:q.array(q.string()).default([]),states:q.array(q.string()).default([]),required_validations:q.array(q.string()).default([]),visibility:q.string().optional(),classification:q.string().optional(),guardrails:q.array(q.string()).optional(),authority:q.enum(["canonical","derived","generated","control"]).optional(),path_patterns:q.array(q.string()).optional(),exclude_patterns:q.array(q.string()).optional(),manual_edit:q.enum(["allowed","discouraged","forbidden"]).optional(),change_control:q.enum(["none","approval-required","regeneration-required"]).optional(),derived_from:q.union([q.string(),q.array(q.string())]).optional()}).passthrough();Ri();Ri();var _0=["agent","task","artifact","tool","validation","handoff_type","workflow","policy","guardrail","guardrail_policy","system","navigation_index"],b0=q.enum(_0),upe=_0.filter(e=>e!=="system"&&e!=="navigation_index");var uJe=q.object({type:q.literal("command_regex"),pattern:q.string()}).passthrough(),lJe=q.object({type:q.literal("content_regex"),pattern:q.string(),file_glob:q.string().optional(),exclude_glob:q.string().optional()}).passthrough(),cJe=q.object({type:q.literal("file_glob"),pattern:q.string(),exclude_glob:q.string().optional()}).passthrough(),lpe=q.discriminatedUnion("type",[uJe,lJe,cJe]),cpe=q.object({matcher:lpe.optional(),script:q.string().optional(),message:q.string().optional()}).passthrough(),dpe=q.object({target:q.string(),template:q.string().optional(),inline_template:q.string().optional(),source:q.string().optional(),mode:q.enum(["write","patch"]).default("write"),format:q.enum(["json","yaml","bash","text"]).optional(),patch_strategy:q.enum(["deep_merge","array_append","section_append"]).optional(),array_merge_key:q.string().optional(),group_by:q.string().optional(),executable:q.boolean().optional(),skip_empty:q.boolean().optional()}).passthrough().refine(e=>{let t=[e.template,e.inline_template,e.source].filter(Boolean).length;return t===1||t===0},{message:"Only one of template, inline_template, or source may be specified"}),ppe=q.object({commands:q.record(q.string(),q.string()),fail_open:q.boolean().default(!0),timeout_ms:q.number().default(5e3)}).passthrough(),dJe=q.object({checks:q.array(cpe)}),fpe=q.object({template:q.string().optional(),inline_template:q.string().optional(),context:b0,output:q.string(),include:q.array(q.string()).optional(),exclude:q.array(q.string()).optional(),skip_empty:q.boolean().optional(),executable:q.boolean().optional()}).passthrough().refine(e=>[e.template,e.inline_template].filter(Boolean).length===1,{message:"Exactly one of template or inline_template must be specified"}).refine(e=>!(e.include&&e.exclude),{message:"include and exclude are mutually exclusive"}).refine(e=>!(e.context==="system"&&(e.include||e.exclude)),{message:"include/exclude cannot be used with context: system"}),mpe=q.object({axis:q.string(),name:q.string(),lifecycle:q.string(),condition:q.string().optional(),each:q.string().optional(),attributes:q.record(q.string(),q.string()).optional()}).passthrough(),hpe=q.object({type:q.string(),from:q.string(),to:q.string(),condition:q.string().optional(),attributes:q.record(q.string(),q.string()).optional()}).passthrough(),gpe=q.object({spans:q.array(mpe).optional(),links:q.array(hpe).optional()}).passthrough(),WU=q.object({software:q.string(),version:q.literal(1),extends:q.string().optional(),guardrail_impl:q.record(q.string(),dJe).optional(),outputs:q.record(q.string(),dpe).optional(),renders:q.array(fpe).optional(),reporting:ppe.optional(),event_mapping:q.record(q.string(),gpe).optional()}).passthrough();Ri();Ri();var KU=q.object({version:q.number(),description:q.string().optional(),schema:q.record(q.string(),q.any()),example:q.record(q.string(),q.any()).optional(),target_agent:q.string().optional(),workflow_phase:q.string().optional()}).passthrough();Ri();var vpe=q.object({agents:q.array(q.string()).optional(),tasks:q.array(q.string()).optional(),tools:q.array(q.string()).optional(),artifacts:q.array(q.string()).optional(),workflows:q.array(q.string()).optional()}).passthrough(),HU=q.object({description:q.string(),scope:vpe,rationale:q.string().optional(),tags:q.array(q.string()).default([]),exemptions:q.array(q.string()).optional()}).passthrough(),ype=q.object({target:q.string(),condition:q.string().optional()}).passthrough(),dx=q.enum(["block","warn","shadow","info"]),_pe=q.object({default:dx,when:q.record(q.string(),dx)}),bpe=q.union([dx,_pe]),wpe=q.object({guardrail:q.string(),severity:q.enum(["critical","mandatory","warning","info"]),action:bpe,allow_override:q.boolean().default(!1),override_requires:q.array(q.string()).optional(),escalation:ype.optional()}).passthrough(),JU=q.object({description:q.string().optional(),rules:q.array(wpe)}).passthrough();Ri();var Spe=q.object({artifact_type:q.string().optional(),workflow:q.string().optional()}).passthrough(),YU=q.object({when:Spe,requires_validations:q.array(q.string()).optional(),requires:q.array(q.string()).optional()}).passthrough();Ri();var pJe=q.literal(1),fJe=q.string().optional(),Epe=q.record(q.string(),q.array(q.string())).optional(),QU=q.object({id:q.string(),name:q.string(),default_workflow_order:q.array(q.string()),sections:q.array(qf).optional(),context_loading:Epe,states:q.array(q.string()).default([])}).passthrough();Ri();var xpe=q.enum(["fast","standard","thinking"]),$pe=q.object({id:q.string(),action:q.string(),description:q.string().optional(),required:q.boolean().optional(),abort_on_failure:q.boolean().optional(),uses_tool:q.string().optional(),produces_artifact:q.string().optional(),reads_artifact:q.string().optional(),validates_artifact:q.string().optional(),validation_kind:q.enum(["schema","mechanical","semantic","approval","provenance","traceability","fidelity"]).optional(),depends_on:q.array(q.string()).optional(),skip_condition:q.string().optional(),wait_for_approval:q.boolean().optional()}).passthrough(),XU=q.object({description:q.string(),target_agent:q.string(),allowed_from_agents:q.array(q.string()).default([]),workflow:q.string(),input_artifacts:q.array(q.string()),invocation_handoff:q.string(),result_handoff:q.string(),default_priority:q.string().optional(),responsibilities:q.array(q.string()).optional(),constraints:q.array(q.string()).optional(),execution_steps:q.array($pe).optional(),completion_criteria:q.array(q.string()).optional(),rules:q.array(lx).optional(),anti_patterns:q.array(q.string()).optional(),escalation_criteria:q.array(cx).optional(),sections:q.array(qf).optional(),validations:q.array(q.string()).default([]),guardrails:q.array(q.string()).optional(),model_class:xpe.optional(),effects:q.array(q.string()).optional()}).passthrough();Ri();var eV=q.object({interface:q.string(),version:q.string().optional()}).passthrough();Ri();var kpe=q.object({internal_workflow:q.string().optional(),input_handoff:q.string(),output_handoff:q.string(),description:q.string().optional()}).passthrough(),tV=q.object({version:q.number(),description:q.string().optional(),accepts:q.object({workflows:q.record(q.string(),kpe)}).passthrough().optional(),exposes:q.object({artifacts:q.array(q.string())}).passthrough().optional(),constraints:q.array(q.string()).optional()}).passthrough();Ri();var Ape=q.object({command:q.string(),category:q.string(),reads:q.array(q.string()).default([]),writes:q.array(q.string()).default([]),purpose:q.string().optional()}),rV=q.object({kind:q.string().optional(),extends:q.string().optional(),command:q.string().optional(),description:q.string().optional(),input_artifacts:q.array(q.string()).default([]),output_artifacts:q.array(q.string()).default([]),invokable_by:q.array(q.string()).default([]),cli_contract:q.string().optional(),component_contract:q.string().optional(),artifact_bindings:q.record(q.string(),q.string()).default({}),side_effects:q.array(q.string()).default([]),commands:q.array(Ape).default([]),guardrails:q.array(q.string()).optional()}).passthrough();Ri();var nV=q.object({target_artifact:q.string(),kind:q.enum(["schema","mechanical","semantic","approval","provenance","traceability","fidelity"]),executor_type:q.enum(["tool","agent"]).optional(),executor:q.string().optional(),blocking:q.boolean(),produces_evidence:q.string().optional(),description:q.string().optional()}).passthrough();Ri();var Dpe=q.object({condition:q.string(),fix_task:q.string(),revalidate_task:q.string().optional()}),mJe=q.object({id:q.string(),kind:q.enum(["actor","participant"]),label:q.string(),description:q.string().optional()}),hJe=q.object({type:q.literal("delegate"),description:q.string().optional(),task:q.string(),from_agent:q.string(),group:q.string().optional(),depends_on:q.array(q.string()).optional(),max_retries:q.number().int().min(0).optional(),max_follow_ups:q.number().int().min(0).optional(),retry:Dpe.optional()}).passthrough(),gJe=q.object({type:q.literal("gate"),description:q.string().optional(),gate_kind:q.string(),group:q.string().optional(),depends_on:q.array(q.string()).optional()}).passthrough(),vJe=q.object({type:q.literal("handoff"),description:q.string().optional(),handoff_kind:q.string(),task:q.string().optional(),from_agent:q.string().optional(),group:q.string().optional(),depends_on:q.array(q.string()).optional(),retry:Dpe.optional()}).passthrough(),yJe=q.object({type:q.literal("validation"),description:q.string().optional(),validation:q.string(),group:q.string().optional(),depends_on:q.array(q.string()).optional()}).passthrough(),_Je=q.object({type:q.literal("decision"),description:q.string().optional(),on:q.string().optional(),routing_key:q.string().optional(),branches:q.record(q.string(),q.array(q.string())),group:q.string().optional(),depends_on:q.array(q.string()).optional()}).passthrough(),bJe=q.object({type:q.literal("team_task"),description:q.string().optional(),to_team:q.string(),workflow:q.string(),handoff:q.string(),expects:q.string(),group:q.string().optional(),depends_on:q.array(q.string()).optional()}).passthrough(),wJe=q.object({type:q.literal("evaluate"),description:q.string().optional(),task:q.string(),from_agent:q.string(),evaluator_agent:q.string().optional(),loop_to:q.string(),max_iterations:q.number().int().min(1).max(10),inject_as:q.string().optional(),on_exhausted:q.enum(["fail_partial","escalate","abort"]).optional(),group:q.string().optional(),depends_on:q.array(q.string()).optional()}).passthrough(),Ope=q.discriminatedUnion("type",[hJe,gJe,vJe,yJe,_Je,bJe,wJe]),iV=q.object({description:q.string().optional(),entry_conditions:q.array(q.string()).default([]),trigger:q.string().optional(),steps:q.array(Ope),sections:q.array(qf).optional(),external_participants:q.array(mJe).default([])}).passthrough();var Ppe=q.object({schemas:q.record(q.string(),q.record(q.string(),q.any())).default({})}).passthrough(),px=["root","system","agent","task","execution_step","artifact","tool","tool_command","validation","handoff_type","workflow","workflow_step","policy","guardrail","guardrail_policy","rule","escalation_criterion","prerequisite"],Cpe=q.enum(px),Ipe=q.object({type:q.string(),items:q.string().optional(),description:q.string().optional(),scope:q.array(Cpe).optional(),schema:q.record(q.string(),q.any()).optional(),required:q.boolean().default(!1)}),W4=q.object({version:q.literal(1),extends:q.string().optional(),system:QU,agents:q.record(q.string(),GU).default({}),tasks:q.record(q.string(),XU).default({}),artifacts:q.record(q.string(),ZU).default({}),tools:q.record(q.string(),rV).default({}),validations:q.record(q.string(),nV).default({}),handoff_types:q.record(q.string(),KU).default({}),team_interface:tV.optional(),imports:q.record(q.string(),eV).optional(),workflow:q.record(q.string(),iV).default({}),policies:q.record(q.string(),YU).default({}),guardrails:q.record(q.string(),HU).default({}),guardrail_policies:q.record(q.string(),JU).default({}),components:Ppe.default({schemas:{}}),extensions:q.record(q.string(),Ipe).default({}),extensions_strict:q.boolean().default(!1)}).passthrough();function is(e){let t=e.allOf;if(!Array.isArray(t))return SJe(e);let r={},i=[],n={};for(let o of t){if(typeof o!="object"||o===null||Array.isArray(o))continue;let s=is(o);s.properties&&typeof s.properties=="object"&&(r={...r,...s.properties}),Array.isArray(s.required)&&(i=[...i,...s.required]);for(let[u,l]of Object.entries(s))u!=="properties"&&u!=="required"&&u!=="allOf"&&(n[u]=l)}for(let[o,s]of Object.entries(e))o!=="allOf"&&(o==="properties"&&typeof s=="object"?r={...r,...s}:o==="required"&&Array.isArray(s)?i=[...i,...s]:n[o]=s);let a={...n};return Object.keys(r).length>0&&(a.properties=jpe(r)),i.length>0&&(a.required=[...new Set(i)]),a}function SJe(e){let t=e.properties;return!t||typeof t!="object"?e:{...e,properties:jpe(t)}}function jpe(e){let t={};for(let[r,i]of Object.entries(e))if(i&&typeof i=="object"&&!Array.isArray(i)){let n=i;t[r]=n.allOf?is(n):n}else t[r]=i;return t}var EJe=/^#\/components\/schemas\/(.+)$/;function aV(e,t={}){let r=K4(e,t,new Set);return is(r)}function K4(e,t,r){let i=e.$ref;if(typeof i=="string"){let u=i.match(EJe);if(u){let l=u[1];if(r.has(l))return e;let c=t[l];if(c&&typeof c=="object"){r.add(l);try{return K4({...c},t,r)}finally{r.delete(l)}}}return e}let n={...e},a=e.allOf;Array.isArray(a)&&(n.allOf=a.map(u=>typeof u=="object"&&u!==null&&!Array.isArray(u)?K4(u,t,r):u));let o=e.properties;if(o&&typeof o=="object"){let u={};for(let[l,c]of Object.entries(o))c&&typeof c=="object"&&!Array.isArray(c)?u[l]=K4(c,t,r):u[l]=c;n.properties=u}let s=e.items;s&&typeof s=="object"&&!Array.isArray(s)&&(n.items=K4(s,t,r));for(let u of["oneOf","anyOf"]){let l=e[u];Array.isArray(l)&&(n[u]=l.map(c=>typeof c=="object"&&c!==null&&!Array.isArray(c)?K4(c,t,r):c))}return n}Ri();var xJe=q.object({$append:q.record(q.string(),q.any())}),$Je=q.object({$prepend:q.record(q.string(),q.any())}),kJe=q.object({$insert_after:q.object({after:q.string(),entries:q.record(q.string(),q.any())})}),AJe=q.object({$replace:q.any()}),DJe=q.object({$remove:q.array(q.union([q.string(),q.object({id:q.string()})]))});var Rpe=_n(fu(),1);import{readFile as CJe,access as IJe}from"node:fs/promises";import{resolve as Xu,dirname as jJe}from"node:path";Ri();var Tpe=q.object({template:q.string(),context:b0,output:q.string(),include:q.array(q.string()).optional(),exclude:q.array(q.string()).optional(),skip_empty:q.boolean().optional()}).refine(e=>!(e.include&&e.exclude),{message:"include and exclude are mutually exclusive"}).refine(e=>!(e.context==="system"&&(e.include||e.exclude)),{message:"include/exclude cannot be used with context: system"}),oV=q.union([q.string(),q.object({source:q.string(),mappings:q.record(q.string(),q.string()).optional()})]),Npe=q.object({dsl:q.string().optional(),bindings:q.array(q.string()).default([]),vars:q.record(q.string(),q.string()).optional(),paths:q.record(q.string(),q.string()).optional(),active_guardrail_policy:q.string().optional(),interface_output:q.string().optional(),artifact_binding:oV.optional()}),OJe=q.object({adapter:q.string().optional(),model:q.string().optional(),temperature:q.number().min(0).max(2).optional(),cache_dir:q.string().optional()}).optional(),PJe=q.object({exclude_patterns:q.array(q.string()).default([])}).optional(),sV=q.object({dsl:q.string().optional(),vars:q.record(q.string(),q.string()).optional(),renders:q.array(Tpe).default([]),bindings:q.array(q.string()).default([]),active_guardrail_policy:q.string().optional(),paths:q.record(q.string(),q.string()).optional(),teams:q.record(q.string(),Npe).optional(),audit:OJe,artifact_coverage:PJe,artifact_binding:oV.optional()}).superRefine((e,t)=>{if(e.dsl!==void 0&&e.teams!==void 0){t.addIssue({code:q.ZodIssueCode.custom,message:"dsl and teams are mutually exclusive",path:["teams"]});return}if(e.dsl===void 0&&e.teams===void 0){t.addIssue({code:q.ZodIssueCode.custom,message:"Either dsl or teams must be specified",path:[]});return}if(e.teams)for(let[r,i]of Object.entries(e.teams))r!=="_defaults"&&i.dsl===void 0&&t.addIssue({code:q.ZodIssueCode.custom,message:`Team "${r}" must specify dsl`,path:["teams",r,"dsl"]})});var TJe="agent-contracts.config.yaml",Pi=class extends Error{constructor(r,i){super(r);this.filePath=i;this.name="ConfigLoadError"}filePath};async function NJe(e){try{return await IJe(e),!0}catch{return!1}}function Lpe(e,t){if(e!==void 0)return typeof e=="string"?{source:Xu(t,e)}:{source:Xu(t,e.source),mappings:e.mappings}}function RJe(e,t){let r=e._defaults,i={};for(let[n,a]of Object.entries(e)){if(n==="_defaults")continue;let o=[...r?.bindings??[],...a.bindings].map(l=>Xu(t,l)),s=r?.vars||a.vars?{...r?.vars??{},...a.vars??{}}:void 0,u=r?.paths||a.paths?{...r?.paths??{},...a.paths??{}}:void 0;i[n]={dsl:Xu(t,a.dsl),bindings:o,vars:s,activeGuardrailPolicy:a.active_guardrail_policy??r?.active_guardrail_policy,paths:u,interfaceOutput:a.interface_output?Xu(t,a.interface_output):void 0,artifactBinding:Lpe(a.artifact_binding??r?.artifact_binding,t)}}return i}async function ac(e){let t=e!==void 0,r=Xu(e??TJe);if(!await NJe(r)){if(t)throw new Pi(`Config file not found: ${r}`,r);return null}let i;try{i=await CJe(r,"utf8")}catch{throw new Pi(`Failed to read config file: ${r}`,r)}let n;try{n=(0,Rpe.parse)(i)}catch(l){let c=l instanceof Error?l.message:String(l);throw new Pi(`Invalid YAML syntax in ${r}: ${c}`,r)}let a=sV.safeParse(n);if(!a.success){let l=a.error.issues.map(c=>` ${c.path.join(".")}: ${c.message}`).join(`
3526
3526
  `);throw new Pi(`Invalid config in ${r}:
3527
3527
  ${l}`,r)}let o=jJe(r),s=a.data,u=s.renders.map(l=>({...l,template:Xu(o,l.template),output:Xu(o,l.output)}));return s.teams?{dsl:"",vars:void 0,renders:u,configDir:o,bindings:[],activeGuardrailPolicy:void 0,paths:void 0,teams:RJe(s.teams,o),audit:s.audit??void 0,artifactCoverage:s.artifact_coverage??void 0}:{dsl:Xu(o,s.dsl),vars:s.vars,renders:u,configDir:o,bindings:(s.bindings??[]).map(l=>Xu(o,l)),activeGuardrailPolicy:s.active_guardrail_policy,paths:s.paths,audit:s.audit??void 0,artifactCoverage:s.artifact_coverage??void 0,artifactBinding:Lpe(s.artifact_binding,o)}}function zf(e,t,r){return e!==void 0&&e!==t?Xu(e):r?r.dsl:Xu(t)}import{resolve as GJe,join as ZJe}from"node:path";import{stat as Vpe}from"node:fs/promises";var Fpe=_n(fu(),1);import{readFile as LJe,readdir as BJe,stat as Bpe}from"node:fs/promises";import{dirname as uV,resolve as lV,join as FJe,extname as MJe}from"node:path";var bi=class extends Error{constructor(r,i){super(r);this.filePath=i;this.name="DslLoadError"}filePath};function Uf(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Mpe(e){return Uf(e)&&"$ref"in e&&typeof e.$ref=="string"}function mx(e){if(typeof e!="object"||e===null)return e;if(Array.isArray(e))return e.map(mx);let t={};for(let[r,i]of Object.entries(e))t[r]=mx(i);return t}function qpe(e,t){let i=t.slice(2).split("/").map(a=>a.replace(/~1/g,"/").replace(/~0/g,"~")),n=e;for(let a of i){if(!Uf(n))throw new bi(`Cannot resolve JSON Pointer "${t}": path segment "${a}" is not an object`);if(n=n[a],n===void 0)return{found:!1}}return{found:!0,value:n}}function zpe(e,t){let r=qpe(e,t);if(!r.found)throw new bi(`Cannot resolve JSON Pointer "${t}": target not found`);return r.value}function qJe(e){if(!("$refs"in e))return!1;let t=e.$refs;return Array.isArray(t)&&t.every(r=>typeof r=="string")}async function gx(e){let t;try{t=await LJe(e,"utf8")}catch{throw new bi(`File not found: ${e}`,e)}try{return(0,Fpe.parse)(t)}catch(r){let i=r instanceof Error?r.message:String(r);throw new bi(`Invalid YAML syntax in ${e}: ${i}`,e)}}function hx(e,t,r){let i={...e};for(let[n,a]of Object.entries(t)){let o=i[n];if(o===void 0)i[n]=a;else if(Uf(o)&&Uf(a))i[n]=hx(o,a,r);else throw new bi(`Conflicting value for key "${n}" while merging $refs from ${r}`,r)}return i}async function zJe(e,t,r){let i=lV(t,e),n=await Bpe(i).catch(()=>null);if(n?.isDirectory()){if(r.has(i))throw new bi(`Circular $refs detected: ${i}`,i);r.add(i);let s=await Upe(i,r);return r.delete(i),s}if(!n?.isFile())throw new bi(`File not found: ${i}`,i);if(r.has(i))throw new bi(`Circular $refs detected: ${i}`,i);r.add(i);let a=await gx(i);if(!Uf(a))throw new bi(`Expected YAML object in ${i}, got ${Array.isArray(a)?"array":typeof a}`,i);let o=await w0(a,uV(i),r,a);return r.delete(i),o}async function Upe(e,t){let r;try{r=await BJe(e)}catch{throw new bi(`Cannot read directory: ${e}`,e)}let i=r.filter(a=>[".yaml",".yml"].includes(MJe(a))).sort();if(i.length===0)throw new bi(`No YAML files found in directory: ${e}`,e);let n={};for(let a of i){let o=FJe(e,a),s=await gx(o);if(!Uf(s))throw new bi(`Expected YAML object in ${o}, got ${Array.isArray(s)?"array":typeof s}`,o);let u=await w0(s,e,t,s);n=hx(n,u,o)}return n}async function UJe(e,t,r){let i=e.$refs,n={};for(let[o,s]of Object.entries(e))o!=="$refs"&&(n[o]=s);let a={};for(let o of i){let s=await zJe(o,t,r);a=hx(a,s,o)}return a=hx(a,n,"(inline)"),a}async function w0(e,t,r,i){if(typeof e!="object"||e===null)return e;if(Array.isArray(e))return Promise.all(e.map(o=>w0(o,t,r,i)));if(Mpe(e)){let o=e.$ref;if(o.startsWith("#/")){if(r.has(o))throw new bi(`Circular $ref detected: ${o}`);let g=qpe(i,o);if(!g.found)return e;r.add(o);let v=await w0(mx(g.value),t,r,i);return r.delete(o),v}let s=o.indexOf("#"),u=s>=0?o.slice(0,s):o,l=s>=0?o.slice(s):null,c=lV(t,u),d=await Bpe(c).catch(()=>null);if(d?.isDirectory()){if(l)throw new bi(`Cannot use JSON Pointer fragment with directory $ref: ${o}`,c);if(r.has(c))throw new bi(`Circular $ref detected: ${c}`,c);r.add(c);let g=await Upe(c,r);return r.delete(c),g}if(!d?.isFile())throw new bi(`File not found: ${c}`,c);if(r.has(c))throw new bi(`Circular $ref detected: ${c}`,c);r.add(c);let p=await gx(c),f=Uf(p)?p:i,m=await w0(p,uV(c),r,f);if(r.delete(c),l&&l.startsWith("#/")){if(!Uf(m))throw new bi(`Cannot resolve fragment "${l}" in ${c}: file content is not an object`,c);m=zpe(m,l)}return m}let n=e;qJe(n)&&(n=await UJe(n,t,r));let a={};for(let[o,s]of Object.entries(n))a[o]=await w0(s,t,r,i);return a}function fx(e,t){if(typeof e!="object"||e===null)return e;if(Array.isArray(e))return e.map(n=>fx(n,t));if(Mpe(e)){let n=e.$ref;if(n.startsWith("#/")){let a=zpe(t,n);return fx(mx(a),t)}return e}let r=e,i={};for(let[n,a]of Object.entries(r))i[n]=fx(a,t);return i}function VJe(e,t){let r=e.version;if(r===void 0)throw new bi(`Missing DSL version in ${t}: expected version: 1`,t);if(r!==1)throw new bi(`Unsupported DSL version in ${t}: expected 1, got ${JSON.stringify(r)}`,t)}async function S0(e){let t=lV(e),r=await gx(t);if(typeof r!="object"||r===null)throw new bi(`Expected YAML object in ${t}, got ${typeof r}`,t);let i=r;VJe(i,t);let n=uV(t),a=await w0(i,n,new Set([t]),i);return{data:fx(a,a),filePath:t}}var Vf=class extends Error{constructor(t){super(t),this.name="BaseResolveError"}};async function Gpe(e){let t=["agent-contracts.yaml","agent-contracts.yml"];for(let r of t){let i=ZJe(e,r);try{if((await Vpe(i)).isFile())return i}catch{continue}}throw new Vf(`No agent-contracts.yaml found in directory: ${e}`)}async function Zpe(e,t){let r=GJe(t,e),i=await Vpe(r).catch(()=>null);if(i?.isDirectory()){let n=await Gpe(r);return S0(n)}if(i?.isFile())return S0(r);throw new Vf(`Base path not found: ${r}`)}async function WJe(e){try{let t=import.meta.resolve(e),r=new URL(".",t).pathname,i=await Gpe(r);return S0(i)}catch{throw new Vf(`Could not resolve package: ${e}. Is it installed?`)}}async function cV(e,t){return e.startsWith("./")||e.startsWith("../")?Zpe(e,t):WJe(e)}var yu=class extends Error{constructor(t){super(t),this.name="MergeError"}};function vu(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Gf(e,t){let r=["$append","$prepend","$insert_after","$replace","$remove"],i=[];for(let n of r)n in e&&i.push(n);if(i.length>1)throw new yu(`Multiple merge operators in the same object at ${t??"unknown"}: ${i.join(", ")}`);return i.length===1?i[0]:null}function KJe(e,t){return e.findIndex(r=>typeof r=="string"?r===t:vu(r)&&r.id===t)}function vx(e,t,r){let i=Gf(t,r);if(!i)return e;switch(i){case"$append":{let n=t.$append;return[...e,...n]}case"$prepend":return[...t.$prepend,...e];case"$insert_after":{let n=t.$insert_after,a=n.target,o=n.items,s=KJe(e,a);if(s===-1)throw new yu(`$insert_after target "${a}" not found in base at ${r}`);let u=[...e];return u.splice(s+1,0,...o),u}case"$replace":return t.$replace;case"$remove":{let n=t.$remove;if(n.length===0)return e;if(typeof n[0]=="string"){let s=new Set(n),u=e.filter(l=>typeof l=="string"&&s.has(l)?(s.delete(l),!1):!0);if(s.size>0)throw new yu(`$remove values not found in base at ${r}: ${[...s].join(", ")}`);return u}let a=new Set(n.map(s=>s.id)),o=e.filter(s=>{if(vu(s)&&typeof s.id=="string"){let u=s.id;if(a.has(u))return a.delete(u),!1}return!0});if(a.size>0)throw new yu(`$remove ids not found in base at ${r}: ${[...a].join(", ")}`);return o}default:return e}}function HJe(e,t,r){let i=new Set(Object.keys(r)),n={},a=!1;for(let o of Object.keys(e))if(!(a&&i.has(o))&&(n[o]=e[o],o===t)){for(let[s,u]of Object.entries(r))n[s]=u;a=!0}return n}function dV(e,t,r){let i=Gf(t,r);if(!i)return e;switch(i){case"$append":{let n=t.$append;return{...e,...n}}case"$prepend":return{...t.$prepend,...e};case"$insert_after":{let n=t.$insert_after,a=n.after,o=n.entries;if(!(a in e))throw new yu(`$insert_after key "${a}" not found in base at ${r}`);return HJe(e,a,o)}case"$replace":return t.$replace;case"$remove":{let n=t.$remove,a=new Set(n),o=n.filter(u=>!(u in e));if(o.length>0)throw new yu(`$remove keys not found in base at ${r}: ${o.join(", ")}`);let s={};for(let[u,l]of Object.entries(e))a.has(u)||(s[u]=l);return s}default:return e}}function H4(e,t,r,i){let n={...e};for(let a of Object.keys(t)){let o=n[a],s=t[a];if(vu(s)&&Gf(s,`${r}.${a}`)){if(!i)throw new yu(`Merge operator used without extends at ${r}.${a}`);Array.isArray(o)?n[a]=vx(o,s,`${r}.${a}`):vu(o)?n[a]=dV(o,s,`${r}.${a}`):Gf(s,`${r}.${a}`)==="$replace"?n[a]=s.$replace:n[a]=vx([],s,`${r}.${a}`)}else vu(s)&&vu(o)&&!Array.isArray(s)&&!Array.isArray(o)?n[a]=H4(o,s,`${r}.${a}`,i):n[a]=s}return n}var JJe=new Set(["$append","$prepend","$insert_after","$replace","$remove"]);function yx(e,t,r,i,n){switch(n){case"map":{let a=vu(e)?e:{};return Wpe(a,t,r,i)}case"array":{let a=Array.isArray(e)?e:[];if(vu(t)&&Gf(t,r)){if(!i)throw new yu(`Merge operator used without extends at ${r}`);return vx(a,t,r)}let o=Array.isArray(t)?t:[];return[...a,...o]}case"object":{let a=vu(e)?e:{},o=vu(t)?t:{};if(Gf(o,r)){if(!i)throw new yu(`Merge operator used without extends at ${r}`);return dV(a,o,r)}return H4(a,o,r,i)}}}function Wpe(e,t,r,i){let n;if(vu(t)&&!Array.isArray(t))if(Gf(t,r)){if(!i)throw new yu(`Merge operator used without extends at ${r}`);n=dV(e,t,r)}else n={...e};else n={...e};for(let[a,o]of Object.entries(t)){if(JJe.has(a))continue;let s=n[a];if(vu(o)&&!Array.isArray(o)){let u=vu(s)?s:{};n[a]=H4(u,o,`${r}.${a}`,i)}else n[a]=o}return n}var YJe={agents:"map",tasks:"map",artifacts:"map",tools:"map",validations:"map",handoff_types:"map",imports:"map",workflow:"map",policies:"map",guardrails:"map",guardrail_policies:"map",components:"map",extensions:"map",system:"object"};function pV(e,t){let r=typeof t.extends=="string",i={...e,...t};for(let[n,a]of Object.entries(YJe))t[n]!==void 0&&(i[n]=yx(e[n],t[n],n,r,a));return delete i.extends,i}import{dirname as nYe,resolve as iYe}from"node:path";var Zf=class extends Error{constructor(t){super(t),this.name="CloneError"}};function _x(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var QJe=["agents","tasks","artifacts","tools","validations","handoff_types","imports","workflow","policies","guardrails","guardrail_policies","components","extensions"];function XJe(e){return structuredClone(e)}function Kpe(e){return _x(e)&&"$clone"in e}function Hpe(e){let t=e.$clone;if(!_x(t))throw new Zf("Invalid $clone: expected object");let r=t.from;if(typeof r!="string")throw new Zf("Invalid $clone: from must be a string");let i=t.merge;return{from:r,merge:_x(i)?i:void 0}}function eYe(e,t){let r=new Set(e),i=new Set,n=new Set,a=[];function o(s){if(n.has(s))return;if(i.has(s))throw new Zf(`circular reference detected involving "${s}"`);i.add(s);let u=Hpe(t[s]);r.has(u.from)&&o(u.from),i.delete(s),n.add(s),a.push(s)}for(let s of e)o(s);return a}function tYe(e,t){let r=Object.keys(t).filter(a=>Kpe(t[a]));if(r.length===0)return;let i=eYe(r,t),n=new Map;for(let a of i){let o=Hpe(t[a]),s=o.from,u;if(n.has(s))u=n.get(s);else if(s in t){let c=t[s];if(Kpe(c))throw new Zf(`base "${s}" not found in section "${e}"`);u=c}else throw new Zf(`base "${s}" not found in section "${e}"`);let l=XJe(u);o.merge!==void 0&&(l=H4(l,o.merge,`${e}.${a}`,!0)),n.set(a,l),t[a]=l}}function fV(e){for(let t of QJe){let r=e[t];r==null||!_x(r)||Array.isArray(r)||tYe(t,r)}return e}var w5=class extends Error{constructor(t){super(t),this.name="ToolExtendsError"}};function Wf(e){return Array.isArray(e)?e:[]}function Jpe(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{}}function Ype(e){return Array.isArray(e)?e:[]}function Qc(e){return e==null}function rYe(e,t){let r={...t};r.artifact_bindings={...Jpe(e.artifact_bindings),...Jpe(t.artifact_bindings)},Qc(t.kind)&&!Qc(e.kind)&&(r.kind=e.kind),Qc(t.cli_contract)&&!Qc(e.cli_contract)&&(r.cli_contract=e.cli_contract),Qc(t.component_contract)&&!Qc(e.component_contract)&&(r.component_contract=e.component_contract),Qc(t.description)&&!Qc(e.description)&&(r.description=e.description);let i=Wf(t.invokable_by),n=Wf(e.invokable_by);i.length===0&&n.length>0&&(r.invokable_by=[...n]);let a=Wf(t.input_artifacts),o=Wf(e.input_artifacts);a.length===0&&o.length>0&&(r.input_artifacts=[...o]);let s=Wf(t.output_artifacts),u=Wf(e.output_artifacts);s.length===0&&u.length>0&&(r.output_artifacts=[...u]);let l=Wf(t.side_effects),c=Wf(e.side_effects);l.length===0&&c.length>0&&(r.side_effects=[...c]);let d=Ype(t.commands),p=Ype(e.commands);return d.length===0&&p.length>0&&(r.commands=[...p]),Qc(t.guardrails)&&!Qc(e.guardrails)&&(r.guardrails=e.guardrails),r}function Qpe(e,t,r,i){let n=i.get(e);if(n!==void 0)return n;let a=t[e];if(a===void 0)throw new w5(`Tool "${e}" not found`);let o=a.extends;if(o===void 0)return i.set(e,a),a;if(r.has(e))throw new w5(`Circular tool extends detected involving "${e}"`);if(t[o]===void 0)return i.set(e,a),a;r.add(e);try{let u=Qpe(o,t,r,i),l=rYe(u,a);return i.set(e,l),l}finally{r.delete(e)}}function el(e){let t=new Map,r={};for(let i of Object.keys(e))r[i]=Qpe(i,e,new Set,t);return r}async function Xpe(e,t,r){let i=e.extends;if(typeof i!="string")return{data:e,basePaths:[]};let n=nYe(t),a=await cV(i,n),o=a.filePath;if(r.has(o))throw new Vf(`Circular extends detected: ${o}`);r.add(o);let{data:s,basePaths:u}=await Xpe(a.data,o,r);return{data:pV(s,e),basePaths:[...u,o]}}async function so(e){let t=iYe(e),r=await S0(t),{data:i,basePaths:n}=await Xpe(r.data,r.filePath,new Set);fV(i);let a=i.tools;return a!=null&&typeof a=="object"&&!Array.isArray(a)&&(i.tools=el(a)),{data:i,projectPath:r.filePath,basePaths:n}}var tfe=_n(fu(),1);import{existsSync as aYe,readFileSync as oYe}from"node:fs";import{isAbsolute as sYe,resolve as uYe}from"node:path";function efe(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function lYe(e){let t=e.artifact_slots;if(!t||typeof t!="object")return null;let r={};for(let[i,n]of Object.entries(t)){if(!n||typeof n!="object")continue;let a=n.direction;(a==="read"||a==="write"||a==="readwrite")&&(r[i]={direction:a})}return Object.keys(r).length>0?r:null}function cYe(e){let t={},r=e.command_sets;if(!r||typeof r!="object")return t;for(let i of Object.values(r)){if(!i||typeof i!="object")continue;let n=i.commands;if(!(!n||typeof n!="object"))for(let[a,o]of Object.entries(n)){if(!o||typeof o!="object")continue;let s=o.effects;!s||typeof s!="object"||(t[a]={reads:efe(s.reads),writes:efe(s.writes)})}}return t}function dYe(e){return sYe(e)?e:uYe(process.cwd(),e)}function tl(e){let t=dYe(e);if(!aYe(t))return null;let r;try{r=(0,tfe.parse)(oYe(t,"utf8"))}catch{return null}if(!r||typeof r!="object")return null;let i=lYe(r);return i?{artifactSlots:i,commandEffects:cYe(r)}:null}function Kf(e,t,r){let i=r.commandEffects[t];if(i){if(i.writes.includes(e))return"write";if(i.reads.includes(e))return"read"}let n=r.artifactSlots[e];return n&&(n.direction==="write"||n.direction==="readwrite")?"write":"read"}function J4(e,t){t.length>0&&e.add(t)}function rfe(e){let t=new Set;for(let r of e.side_effects??[])J4(t,r);if(e.cli_contract){let r=e.command??"",i=tl(e.cli_contract);if(i)for(let[n,a]of Object.entries(e.artifact_bindings??{})){let o=Kf(n,r,i);J4(t,`${o}:${a}`)}}for(let r of e.input_artifacts??[])J4(t,`read:${r}`);for(let r of e.output_artifacts??[])J4(t,`write:${r}`);for(let r of e.commands??[]){for(let i of r.reads??[])J4(t,`read:${i}`);for(let i of r.writes??[])J4(t,`write:${i}`)}return t}function nfe(e){return[...e].sort()}function ife(e,t){return!t||t.length===0?{derived:e,effective:e}:{derived:e,override:t,effective:[...t].sort()}}function Y4(e,t,r){let i=e.agents[t];if(!i)return{derived:[],effective:[]};let n=r??el(e.tools),a=new Set;for(let s of i.can_execute_tools??[]){let u=n[s];if(u)for(let l of rfe(u))a.add(l)}let o=nfe(a);return ife(o,i.effects)}function mV(e,t,r){let i=e.tasks[t];if(!i)return{derived:[],effective:[]};let n=r??el(e.tools),a=new Set,o=Y4(e,i.target_agent,n);for(let u of o.derived)a.add(u);for(let u of i.execution_steps??[]){if(!u.uses_tool)continue;let l=n[u.uses_tool];if(l)for(let c of rfe(l))a.add(c)}let s=nfe(a);return ife(s,i.effects)}function bx(e,t){if(!t||t.length===0)return!0;let r=new Set(e);return t.every(i=>r.has(i))}function hV(e,t,r){let i=new Set,n=r??el(e.tools);for(let[a,o]of Object.entries(e.agents))o.can_write_artifacts.includes(t)&&i.add(`agent:${a}`);for(let[a,o]of Object.entries(e.tasks))for(let s of o.execution_steps??[])s.produces_artifact===t&&(i.add(`agent:${o.target_agent}`),i.add(`task:${a}`));for(let[a,o]of Object.entries(n))if(o.output_artifacts.includes(t)&&i.add(`tool:${a}`),o.cli_contract){let s=o.command??"",u=tl(o.cli_contract);if(u)for(let[l,c]of Object.entries(o.artifact_bindings??{}))c===t&&Kf(l,s,u)==="write"&&i.add(`tool:${a}`)}for(let a of e.artifacts[t]?.producers??[])i.add(`agent:${a}`);for(let a of e.artifacts[t]?.editors??[])i.add(`agent:${a}`);return i}function gV(e,t,r){let i=new Set,n=r??el(e.tools);for(let[a,o]of Object.entries(e.agents))o.can_read_artifacts.includes(t)&&i.add(`agent:${a}`);for(let[a,o]of Object.entries(e.tasks)){o.input_artifacts.includes(t)&&(i.add(`agent:${o.target_agent}`),i.add(`task:${a}`));for(let s of o.execution_steps??[])s.reads_artifact===t&&(i.add(`agent:${o.target_agent}`),i.add(`task:${a}`))}for(let[a,o]of Object.entries(n))if(o.input_artifacts.includes(t)&&i.add(`tool:${a}`),o.cli_contract){let s=o.command??"",u=tl(o.cli_contract);if(u)for(let[l,c]of Object.entries(o.artifact_bindings??{}))c===t&&Kf(l,s,u)==="read"&&i.add(`tool:${a}`)}for(let a of e.artifacts[t]?.consumers??[])i.add(`agent:${a}`);return i}function vV(e){return e?Array.isArray(e)?e:[e]:[]}var pYe=/\$\{vars\.([a-zA-Z0-9_-]+)\}/g,wx=class extends Error{constructor(r,i,n){let a=n.length>0?n.join(", "):"(none)";super(`Undefined variable "${r}" in value "${i}"
@@ -4154,7 +4154,7 @@ ${l}
4154
4154
  `),process.exit(1))}return}let a=zf(e??jl,jl,i),o=await O7(a,i?.vars,void 0,i?.artifactBinding,i?.paths),s=wze(o),u=i?.configDir??Yie(a),l=Kie(u,n),c=Hie(l,s);if(r==="json"?process.stdout.write(JSON.stringify(c,null,2)+`
4155
4155
  `):process.stdout.write(Jie(c)),t.minCoverage!==void 0){let d=parseFloat(t.minCoverage);c.summary.coverage_percent<d&&(process.stderr.write(`Coverage ${c.summary.coverage_percent}% is below threshold (${d}%)
4156
4156
  `),process.exit(1))}}catch(i){let n=i instanceof Error?i.message:String(i);process.stderr.write(`Error: ${n}
4157
- `),process.exit(1)}};function wze(e){let t={};for(let[r,i]of Object.entries(e.artifacts))i.files.path_patterns.length>0&&(t[r]={path_patterns:i.files.path_patterns,exclude_patterns:i.files.exclude_patterns});return t}var Eze={resolve:NVt,validate:RVt,lint:LVt,render:BVt,check:FVt,score:MVt,audit:zVt,generate:Sze,navigationIndex:WVt,artifactCoverage:KVt};var HVt={version:"0.35.3"},JVt=yae(Eze,HVt.version);JVt.parse();
4157
+ `),process.exit(1)}};function wze(e){let t={};for(let[r,i]of Object.entries(e.artifacts))i.files.path_patterns.length>0&&(t[r]={path_patterns:i.files.path_patterns,exclude_patterns:i.files.exclude_patterns});return t}var Eze={resolve:NVt,validate:RVt,lint:LVt,render:BVt,check:FVt,score:MVt,audit:zVt,generate:Sze,navigationIndex:WVt,artifactCoverage:KVt};var HVt={version:"0.35.5"},JVt=yae(Eze,HVt.version);JVt.parse();
4158
4158
  /*! Bundled license information:
4159
4159
 
4160
4160
  lodash/lodash.js: