arkgate 4.8.16 → 4.8.17

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.
@@ -15,4 +15,4 @@ ${n}`),this.name="PolicyViolationError",this.violations=e}};var $=class{static{s
15
15
  `;for(let i of o)r+=` ${this.safeId(i)}[${i}]
16
16
  `;r+=` end
17
17
  `}for(let i of this.edges){let a=i.kind?`|${i.kind}|`:"";r+=` ${this.safeId(i.from)} -->${a} ${this.safeId(i.to)}
18
- `}return r.trim()}detectViolations(e=[]){let n=[],r=this.findSimpleCycles();r.length>0&&n.push(`Cycle detected: ${r.map(o=>o.join("->")).join(", ")}`);for(let o of e)try{let i=o(this.edges);i&&i.length&&n.push(...i)}catch(i){n.push(`Rule error: ${i.message}`)}return n}ensureNode(e){this.nodes.has(e)||this.nodes.set(e,{id:e})}addEdge(e){this.edges.some(r=>r.from===e.from&&r.to===e.to&&r.kind===e.kind)||this.edges.push(e)}findSimpleCycles(){let e=new Map;for(let c of this.edges)e.has(c.from)||e.set(c.from,[]),e.get(c.from).push(c.to);let n=[],r=new Set,o=[],i=s(c=>{r.add(c),o.push(c);for(let d of e.get(c)||[])if(!r.has(d))i(d);else if(o.includes(d)){let l=o.indexOf(d),u=o.slice(l).concat(d);n.push(u)}o.pop()},"dfs");for(let c of e.keys())r.has(c)||i(c);let a=new Set(n.map(c=>c.join("->")));return Array.from(a).map(c=>c.split("->"))}safeId(e){return e.replace(/[^a-zA-Z0-9_]/g,"_")}};function ot(){return new xe}s(ot,"createDependencyGraph");function it(t,e,n={}){let r=n.requireRegisteredTargets??!1;for(let o of t.getAllRelationships())r&&!t.has(o.to)||(o.kind==="dependsOn"?e.registerDependency(o.from,o.to,"declared"):e.registerDependency(o.from,o.to,"produces"))}s(it,"syncRegistryToGraph");var le=class{static{s(this,"IntentRegistry")}intents=new Map;dependencies=new Map;productions=new Map;define(e,n){if(this.intents.has(e))throw new Error(`Intent "${e}" is already registered. Intent names must be unique within a registry.`);let r=s(i=>({intent:e,payload:i,metadata:{occurredAt:new Date().toISOString(),source:"unknown"}}),"fn");Object.defineProperty(r,"name",{value:e,enumerable:!0,configurable:!1,writable:!1});let o=r;if(this.intents.set(e,o),n?.dependsOn)for(let i of n.dependsOn)this.declareDependency(e,i);if(n?.produces)for(let i of n.produces)this.declareProduction(e,i);return o}declareDependency(e,n){this.dependencies.has(e)||this.dependencies.set(e,new Set),this.dependencies.get(e).add(n)}declareProduction(e,n){this.productions.has(e)||this.productions.set(e,new Set),this.productions.get(e).add(n)}get(e){return this.intents.get(e)}list(){return Array.from(this.intents.values())}getDependencies(e){let n=this.dependencies.get(e);return n?Array.from(n):[]}getProductions(e){let n=this.productions.get(e);return n?Array.from(n):[]}getAllRelationships(){let e=[];for(let[n,r]of this.dependencies.entries())for(let o of r)e.push({from:n,to:o,kind:"dependsOn"});for(let[n,r]of this.productions.entries())for(let o of r)e.push({from:n,to:o,kind:"produces"});return e}has(e){return this.intents.has(e)}clear(){this.intents.clear(),this.dependencies.clear(),this.productions.clear()}};var ms=new le;function st(){return new le}s(st,"createIntentRegistry");var D={type:"array",items:{type:"string",minLength:1},uniqueItems:!0},pn={type:"object",additionalProperties:!1,properties:{mode:{type:"string",enum:["advisory","enforced"],default:"advisory"},compositionRoots:{...D,default:[]},kernelRoots:{...D},managedLayers:{...D,default:[]},requireDeclarations:{type:"boolean",default:!0},ignoreDirectNewForErrors:{type:"boolean",default:!0}}},fn={type:"object",additionalProperties:!1,properties:{mode:{type:"string",enum:["advisory","enforced"],default:"advisory"},planeRoots:{...D,default:[]},managedLayers:{...D,default:[]},maxXiKeys:{type:"integer",minimum:1,default:7},xiKeys:{...D,default:[]},appliesTo:{...D,default:[]}}};var gn="1.3",Zr=["public","auth","admin","internal"];var mn="https://unpkg.com/arkgate@4/schemas/ark.config.schema.json",yn=["DomainModel","ApplicationOrchestration","PersistenceAdapters","IntegrationAdapters","WorkflowSagaEngine","BackgroundJobsScheduling","PresentationAdapters","ReportingReadModels","ExtensibilityMetadata","SecurityAuditObservability","Kernel"],Yr=new Set(["PresentationAdapters->ApplicationOrchestration","ApplicationOrchestration->DomainModel","WorkflowSagaEngine->ApplicationOrchestration","WorkflowSagaEngine->DomainModel","BackgroundJobsScheduling->ApplicationOrchestration"]);function eo(){let t=[];for(let e of yn)for(let n of yn)e===n||Yr.has(`${e}->${n}`)||t.push({from:e,to:n,allowed:!1});return t}s(eo,"createDefaultRules");var at=eo();var w={type:"array",items:{type:"string",minLength:1},uniqueItems:!0},_s={$schema:"https://json-schema.org/draft/2020-12/schema",$id:mn,title:"ArkGate architecture contract",description:"Versioned contract consumed identically by ArkGate CLI, MCP, and ESLint surfaces.",type:"object",additionalProperties:!1,required:["$schema","schemaVersion","include","layers","rules"],properties:{$schema:{type:"string",minLength:1,default:mn,description:"Editor-facing URL or local path for this JSON Schema."},schemaVersion:{type:"string",const:gn,default:gn},name:{type:"string",minLength:1},include:{...w,minItems:1,default:["src"]},exclude:{...w,default:[]},excludeGenerated:{type:"boolean",default:!0},frameworkOverlay:{type:"string",minLength:1},layers:{type:"array",default:[],items:{$ref:"#/$defs/layer"}},rules:{type:"array",default:at,items:{$ref:"#/$defs/rule"}},cyclePolicy:{type:"string",enum:["strict","soft","framework-soft","off"],default:"strict"},dynamicImportAllowlist:{...w,default:[]},safety:{$ref:"#/$defs/safety",default:{maxTsSuppressions:0,maxAnyCasts:0,allowInMemory:!1,allowDisabledPeerIsolation:!1}},coverage:{$ref:"#/$defs/coverage"},arkRules:{type:"object",additionalProperties:{type:"string",minLength:1},default:{}},arkRun:{$ref:"#/$defs/arkRun"},arkOrder:{$ref:"#/$defs/arkOrder"},stewards:{...w,default:[]},requireLayerOwners:{type:"boolean"}},$defs:{layer:{type:"object",additionalProperties:!1,required:["name","patterns"],properties:{name:{type:"string",minLength:1},patterns:{...w,minItems:1},exclude:w,intentPrefixes:w,description:{type:"string",minLength:1},trustBoundary:{type:"string",enum:[...Zr]},owners:{...w,minItems:1},forbiddenGlobals:w,capabilities:{type:"object",additionalProperties:!1,properties:{deny:{type:"array",uniqueItems:!0,items:{type:"string",enum:["network","filesystem","clock","randomness","environment","process","persistence"]}}}},pure:{type:"boolean"},mayImportInfrastructure:{type:"boolean"},optional:{type:"boolean"},reserved:{type:"boolean"},allowEmpty:{type:"boolean"}}},rule:{type:"object",additionalProperties:!1,required:["from","to","allowed"],properties:{from:{type:"string",minLength:1},to:{type:"string",minLength:1},allowed:{type:"boolean"},message:{type:"string",minLength:1},peerIsolation:{type:"boolean"},sliceFolders:{...w,minItems:1},sharedRoots:{...w,minItems:1},allowedCrossSlice:{type:"array",minItems:1,items:{type:"object",additionalProperties:!1,required:["from","to"],properties:{from:{type:"string",minLength:1},to:{type:"string",minLength:1}}}}}},safety:{type:"object",additionalProperties:!1,properties:{maxTsSuppressions:{type:"integer",minimum:0,default:0},maxAnyCasts:{type:"integer",minimum:0,default:0},allowInMemory:{type:"boolean",default:!1},allowDisabledPeerIsolation:{type:"boolean",default:!1}}},coverage:{type:"object",additionalProperties:!1,description:"Invariant coverage scan controls. testGlobs replaces the built-in test-name heuristic; maxFiles raises or lowers the evidence file budget and also bounds structural-hint preload for orchestration-only, thin-adapter, and writes-via-aggregate (default 400; there is no arkrules.hintBudget); coverageRoots declares where the project runs its tests, so a covering test found outside them is reported instead of silently certifying an invariant. When any invariant is enforced, missing coverageRoots fails closed.",properties:{testGlobs:{...w,minItems:1},maxFiles:{type:"integer",minimum:1,description:"Evidence file budget (default 400) and structural-hint preload cap for orchestration-only, thin-adapter, and writes-via-aggregate. Raise this when hinted/governed counts show truncated sensors. There is no separate arkrules.hintBudget."},coverageRoots:{...w,minItems:1}}},arkRun:pn,arkOrder:fn}};function to(t){return t.endsWith(".")?t:`${t}.`}s(to,"normalizePrefix");function no(t,e){let n=t.prefixes.length?Math.max(...t.prefixes.map(o=>o.length)):0;return(e.prefixes.length?Math.max(...e.prefixes.map(o=>o.length)):0)-n}s(no,"byLongestPrefix");function hn(t){let e=t.layers.map(o=>({...o,prefixes:o.prefixes.map(to)})),n=[...e].sort(no),r=[...t.rules??[]];return{name:t.name,layers:e,rules:r,resolveLayer(o){return e.find(i=>i.match?.(o))?.name??n.find(i=>i.prefixes.some(a=>o.startsWith(a)))?.name}}}s(hn,"createArchitectureProfile");var ro=[{name:"DomainModel",prefixes:["Domain"],description:"Rich domain model, business rules, and domain events.",order:1},{name:"ApplicationOrchestration",prefixes:["Application"],description:"Use cases and command orchestration.",order:2},{name:"PersistenceAdapters",prefixes:["Adapter.Persistence","Adapter.Repository"],description:"Database, repository, and storage adapters.",order:3},{name:"IntegrationAdapters",prefixes:["Adapter.Integration","Adapter.External"],description:"External systems, APIs, and integration adapters.",order:4},{name:"WorkflowSagaEngine",prefixes:["Workflow"],description:"Sagas, workflows, and long-running processes.",order:5},{name:"BackgroundJobsScheduling",prefixes:["Job"],description:"Background jobs, scheduled work, and async processors.",order:6},{name:"PresentationAdapters",prefixes:["Presentation","Adapter.Presentation","Adapter.Api"],description:"API, UI, controller, and presentation adapters.",order:7},{name:"ReportingReadModels",prefixes:["Reporting"],description:"Read models, projections, and reporting surfaces.",order:8},{name:"ExtensibilityMetadata",prefixes:["Metadata"],description:"Metadata, extensions, and schema contracts.",order:9},{name:"SecurityAuditObservability",prefixes:["Security","Audit","Observability"],description:"Security, audit, and observability concerns.",order:10},{name:"Kernel",prefixes:["Kernel"],description:"Ark-owned governance and kernel signals.",order:11}],ct=hn({name:"Ark 11-layer Hexagonal Event-Driven Profile",layers:ro,rules:at.map(t=>({...t}))});var kn="4.8.16";function io(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}s(io,"policyId");var dt=class{constructor(e){this.data=e}data;static{s(this,"ArkManifestImpl")}toJSON(){return{...this.data}}};function lt(t={}){let e=t.registry,n=t.policyEngine,r=t.metadata,o=t.graph,i=t.profile,a=t.projections,c=t.eventContracts,d=t.observability,l=e?e.list().map(m=>({name:m.name,dependencies:e.getDependencies(m.name),productions:e.getProductions(m.name)})):[],u=e?e.getAllRelationships():[],y=n?n.getPolicies().map(m=>({id:io(m.name),name:m.name,severity:m.severity,tags:m.tags?[...m.tags]:void 0,owner:m.owner,version:m.version,rationale:m.rationale,enforcementMode:m.enforcementMode,deprecated:m.deprecated,replacedBy:m.replacedBy,description:m.tags?.includes("layer")?"Enforces clean-architecture layer dependency rules on declared relationships.":void 0})):[],f=r?r.toJSON():[],g=o?o.toJSON():{nodes:[],edges:[]},h=f.filter(m=>(m.emits?.length??0)>0||(m.consumes?.length??0)>0).map(m=>({entity:m.name,emits:m.emits,consumes:m.consumes})),p=a?a.list().map(m=>({name:m.name,sourceIntents:m.sourceIntents,checkpoint:a.getCheckpoint(m.name)})):[],F={schemaVersion:"1.0",version:kn,exportedAt:new Date().toISOString(),intents:l,relationships:u,policies:y,entities:f,graph:g,architecture:i?{profile:i.name,layers:i.layers,rules:i.rules}:void 0,projections:p,eventContracts:c?.list()??[],observability:d?.report(),links:{entityIntents:h}};return new dt(F)}s(lt,"createArkManifest");var Ee=class{static{s(this,"MetadataRegistryImpl")}entities=new Map;entity(e,n,r={}){if(this.entities.has(e)&&!r.allowOverwrite)throw new Error(`Entity metadata "${e}" is already registered.`);let o={name:e,fields:{},...n};return this.entities.set(e,o),o}getEntity(e){return this.entities.get(e)}listEntities(){return Array.from(this.entities.values())}findEntitiesByIntent(e){return this.listEntities().filter(n=>n.emits?.includes(e)||n.consumes?.includes(e))}validate(){let e=[];for(let n of this.entities.values()){n.name.trim()||e.push({entity:n.name,message:"Entity name is required."});for(let[r,o]of Object.entries(n.fields))r.trim()||e.push({entity:n.name,field:r,message:"Field name is required."}),(!o.type||typeof o.type!="string")&&e.push({entity:n.name,field:r,message:"Field type must be a non-empty string."}),o.relation&&!this.entities.has(o.relation.entity)&&e.push({entity:n.name,field:r,message:`Related entity "${o.relation.entity}" is not registered.`})}return{ok:e.length===0,issues:e}}toJSON(){return this.listEntities()}};function ut(){return new Ee}s(ut,"createMetadataRegistry");function pt(t){return`${t.from}->${t.to}`}s(pt,"flowKey");function Rn(t){let e=new Set,n=[];for(let r of t){let o=pt(r);e.has(o)||(e.add(o),n.push(r))}return n}s(Rn,"uniqueFlows");function An(t,e){let n=new Set(e.map(pt));return t.filter(r=>!n.has(pt(r)))}s(An,"difference");function ft(t){let e=t.registry,n=t.eventBus,r=t.graph;return{report(){let o=e?e.getAllRelationships().filter(p=>p.kind==="produces").map(p=>({from:p.from,to:p.to})):[],i=o.length>0||!r?[]:r.getEdges().filter(p=>p.kind==="produces").map(p=>({from:p.from,to:p.to})),a=n?.getHistory().map(p=>({from:p.event.metadata.source,to:p.event.intent}))??[],c=a.length>0||!r?[]:r.getEdges().filter(p=>p.kind==="observed").map(p=>({from:p.from,to:p.to})),d=Rn([...o,...i]),l=Rn([...a,...c]),u=l.filter(p=>!p.from||p.from==="unknown"),y=e?Array.from(new Set(l.map(p=>p.from).filter(p=>p&&p!=="unknown"&&!e.has(p)))):[],f=e?Array.from(new Set(l.map(p=>p.to).filter(p=>!e.has(p)))):[],g=new Set(l.flatMap(p=>[p.from,p.to])),h=e?e.list().map(p=>p.name).filter(p=>!g.has(p)):[];return{generatedAt:new Date().toISOString(),declaredProductions:d,observedProductions:l,declaredButUnobserved:An(d,l),observedButUndeclared:An(l.filter(p=>p.from!=="unknown"),d),unknownSources:u,unregisteredObservedSources:y,unregisteredObservedIntents:f,registeredButNeverObserved:h}}}}s(ft,"createObservabilityReporter");var In=0;function so(){return In+=1,`outbox-${Date.now()}-${In}`}s(so,"nextOutboxId");function bn(t){return{...t,event:{...t.event,metadata:{...t.event.metadata}}}}s(bn,"cloneRecord");var ue=class{static{s(this,"InMemoryEventBuffer")}records=new Map;async enqueue(e){let n=new Date().toISOString(),r={id:so(),event:e,status:"pending",attempts:0,createdAt:n,updatedAt:n};return this.records.set(r.id,r),bn(r)}async markDispatched(e){let n=this.records.get(e);n&&(n.status="dispatched",n.updatedAt=new Date().toISOString())}async markFailed(e,n){let r=this.records.get(e);r&&(r.status="failed",r.attempts+=1,r.error=n instanceof Error?n.message:String(n),r.updatedAt=new Date().toISOString())}async list(e){return Array.from(this.records.values()).filter(n=>!e||n.status===e).map(bn)}async clear(){this.records.clear()}};var Pe=class{static{s(this,"InMemoryReadModelStore")}states=new Map;load(e){return this.states.get(e)}save(e,n){this.states.set(e,n)}clear(e){e?this.states.delete(e):this.states.clear()}};function ao(t){return typeof t.initialState=="function"?t.initialState():t.initialState}s(ao,"initialState");var ve=class{static{s(this,"ProjectionRegistryImpl")}definitions=new Map;checkpoints=new Map;store;auditTrail;constructor(e={}){this.store=e.store??new Pe,this.auditTrail=e.auditTrail}register(e){if(this.definitions.has(e.name))throw new Error(`Projection "${e.name}" is already registered.`);this.definitions.set(e.name,e),this.checkpoints.set(e.name,{projection:e.name,appliedCount:0})}list(){return Array.from(this.definitions.values())}async apply(e){let n=[];for(let r of this.definitions.values()){if(!r.sourceIntents.includes(e.intent))continue;let o=await this.store.load(r.name)??ao(r),i=await r.project(e,o);await this.store.save(r.name,i);let a=this.checkpoints.get(r.name);this.checkpoints.set(r.name,{projection:r.name,appliedCount:(a?.appliedCount??0)+1,lastIntent:e.intent,lastCorrelationId:e.metadata.correlationId,updatedAt:new Date().toISOString()}),await this.auditTrail?.record({type:"projection.applied",source:"Kernel.ProjectionRegistry",intent:e.intent,correlationId:e.metadata.correlationId,causationId:e.metadata.causationId,subject:r.name,details:{projection:r.name}}),n.push(r.name)}return n}async getState(e){return this.store.load(e)}getCheckpoint(e){return this.checkpoints.get(e)}getCheckpoints(){return Array.from(this.checkpoints.values())}async clear(){await this.store.clear();for(let e of this.definitions.values())this.checkpoints.set(e.name,{projection:e.name,appliedCount:0})}};function gt(t){return new ve(t)}s(gt,"createProjectionRegistry");var Sn=0;function co(t){return Sn+=1,`${t}-${Date.now()}-${Sn}`}s(co,"createWorkflowId");function mt(t){return t instanceof Error?t.message:String(t)}s(mt,"errorMessage");function lo(t){return new Promise(e=>{setTimeout(e,t)})}s(lo,"sleep");async function uo(t,e,n){let r=new AbortController;if(e===void 0)return t(r.signal);let o,i=new Promise((a,c)=>{o=setTimeout(()=>{let d=new Error(`Workflow step "${n}" timed out after ${e}ms.`);r.abort(d),c(d)},e)});try{return await Promise.race([t(r.signal),i])}finally{o&&clearTimeout(o)}}s(uo,"withTimeout");var Ce=class{static{s(this,"InMemoryWorkflowStore")}snapshots=new Map;save(e,n){let r=this.snapshots.get(e.id);if(r&&r.version!==e.version)throw new Error(`Optimistic concurrency conflict for workflow ${e.id}`);let o=(e.version??0)+1;this.snapshots.set(e.id,{...e,version:o,context:{...e.context}}),e.version=o}get(e,n){let r=this.snapshots.get(e);return r?{...r,context:{...r.context}}:void 0}list(e){return Array.from(this.snapshots.values()).filter(n=>!e||n.workflowName===e).map(n=>({...n,context:{...n.context}}))}claim(e,n,r){let o=Date.now();for(let i of this.snapshots.values()){if(r&&i.workflowName!==r||i.status!=="running"&&i.status!=="compensating")continue;let a=i.expiresAt?new Date(i.expiresAt).getTime()<o:!0;if(!i.ownerId||a){i.ownerId=e,i.expiresAt=new Date(o+n).toISOString();let c=(i.version??0)+1;return i.version=c,this.snapshots.set(i.id,{...i,context:{...i.context}}),{...i,context:{...i.context}}}}}clear(){this.snapshots.clear()}},yt=class{constructor(e,n={}){this.bus=e;this.options=n;this.store=n.store??new Ce}bus;options;static{s(this,"WorkflowEngineImpl")}definitions=new Map;store;register(e){if(this.definitions.has(e.name))throw new Error(`Workflow "${e.name}" is already registered.`);let n=new Set;for(let r of e.steps){if(n.has(r.name))throw new Error(`Workflow "${e.name}" has duplicate step name "${r.name}".`);n.add(r.name)}if(this.definitions.set(e.name,e),e.startOn){let r=e.startOn;this.bus.subscribe(r.intent,async o=>{await this.start(e.name,r.mapEventToPayload(o))})}}async start(e,n,r={}){let o=this.definitions.get(e);if(!o)throw new Error(`Workflow "${e}" is not registered.`);let i=new Date().toISOString(),a={id:r.id??co(e),version:0,workflowName:e,status:"running",context:{...n},completedSteps:[],attempts:{},startedAt:i,updatedAt:i};return await this.store.save(a,r.tx),await this.audit("workflow.started",a,{workflowName:e}),this.executeSnapshot(a,o,r.tx)}async resume(e,n={}){let r=await this.get(e,n.tx);if(!r)return;if(r.status!=="running"&&r.status!=="compensating")return r;let o=this.definitions.get(r.workflowName);if(!o)throw new Error(`Workflow "${r.workflowName}" is not registered.`);return this.executeSnapshot(r,o,n.tx)}async executeSnapshot(e,n,r){try{let o=n.steps.filter(i=>!e.completedSteps.includes(i.name));for(let i of o)await this.runStep(e,i,r);return e.status="completed",e.currentStep=void 0,e.completedAt=new Date().toISOString(),e.updatedAt=e.completedAt,await this.store.save(e,r),await this.audit("workflow.completed",e,{workflowName:e.workflowName}),{...e,context:{...e.context}}}catch(o){throw await this.compensate(e,n.steps,o,r),e.status="failed",e.currentStep=void 0,e.error=mt(o),e.updatedAt=new Date().toISOString(),await this.store.save(e,r),await this.audit("workflow.failed",e,{workflowName:e.workflowName,error:e.error,failedStep:e.failedStep}),o}}async get(e,n){return this.store.get(e,n)}async list(e){return this.store.list(e)}async runStep(e,n,r){let o=n.retry??this.options.defaultRetry??{attempts:1},i=Math.max(1,o.attempts);e.currentStep=n.name,e.updatedAt=new Date().toISOString(),await this.store.save(e,r);for(let a=1;a<=i;a+=1){e.attempts[n.name]=a,await this.store.save(e,r);let c;try{c=await uo(d=>Promise.resolve(n.execute(e.context,this.bus,d)),n.timeoutMs,n.name)}catch(d){if(a<i){o.delayMs&&await lo(o.delayMs);continue}throw e.failedStep=n.name,e.updatedAt=new Date().toISOString(),await this.store.save(e,r),await this.audit("workflow.step.failed",e,{step:n.name,attempt:a,error:mt(d)}),d}c&&Object.assign(e.context,c),e.completedSteps.push(n.name),e.currentStep=void 0,e.updatedAt=new Date().toISOString(),await this.store.save(e,r),await this.audit("workflow.step.completed",e,{step:n.name,attempt:a});return}throw new Error(`Workflow step "${n.name}" did not complete.`)}async compensate(e,n,r,o){e.status="compensating",e.updatedAt=new Date().toISOString(),await this.store.save(e,o);let i=n.filter(a=>e.completedSteps.includes(a.name));for(let a=i.length-1;a>=0;a-=1){let c=i[a];if(c.compensate)try{await Promise.resolve(c.compensate(e.context,this.bus,r)),await this.audit("workflow.compensation.completed",e,{step:c.name})}catch(d){await this.audit("workflow.step.failed",e,{step:c.name,compensation:!0,error:mt(d)})}}}async audit(e,n,r){await this.options.auditTrail?.record({type:e,source:"Kernel.WorkflowEngine",subject:n.id,details:r})}};function ht(t,e){return new yt(t,e)}s(ht,"createWorkflowEngine");U();var po=new Set(["singleton","transient"]);function xn(t){let e={id:t.id,lifetime:t.lifetime,uses:[...t.uses],reactsTo:[...t.reactsTo],raises:[...t.raises],sends:[...t.sends]};if(t.extendedInfo){let n=t.extendedInfo;e.extendedInfo={...n.label?{label:n.label}:{},...n.architectureKind?{architectureKind:n.architectureKind}:{},...n.tags?{tags:[...n.tags]}:{},...n.group?{group:n.group}:{},...n.metadata?{metadata:{...n.metadata}}:{}}}return e}s(xn,"cloneComponent");function fo(t){if(t===void 0)return"singleton";if(typeof t=="string"&&po.has(t))return t;throw new Error('ArkRun component lifetime must be "singleton" or "transient".')}s(fo,"closedLifetime");function En(){let t=new Map,e=new Map,n=new Set;function r(a){let c=t.get(a);if(!c)throw new Error(`ArkRun component "${a}" is not registered.`);return c}s(r,"mustRecord");function o(a,c){if(!c.factory)throw new Error(`ArkRun component "${a}" has no factory; declarations-only registrations cannot be resolved.`);if(n.has(a))throw new Error(`ArkRun component "${a}" has a circular resolve.`);n.add(a);try{return c.factory()}finally{n.delete(a)}}s(o,"instantiate");function i(a,c){if(e.has(a))return e.get(a);let d=o(a,c);return e.set(a,d),d}return s(i,"singleton"),{register(a){let c=typeof a?.id=="string"?a.id.trim():"";if(!c)throw new Error("ArkRun component id must be a non-empty string.");if(t.has(c))throw new Error(`ArkRun component "${c}" is already registered.`);let d=fo(a.lifetime),l=Le({id:c,lifetime:d,uses:a.uses,reactsTo:a.reactsTo,raises:a.raises,sends:a.sends,extendedInfo:a.extendedInfo});if(!l)throw new Error("ArkRun component id must be a non-empty string.");let u=typeof a.factory=="function"?a.factory:void 0;return t.set(c,{component:l,factory:u}),xn(l)},resolve(a){let c=r(a);return c.component.lifetime==="transient"?o(a,c):i(a,c)},resolveSingleton(a){let c=r(a);if(c.component.lifetime==="transient")throw new Error(`ArkRun component "${a}" is transient; resolveSingleton requires lifetime "singleton".`);return i(a,c)},snapshotComponents(){return[...t.values()].map(a=>xn(a.component))}}}s(En,"createComponentRegistry");we();async function Cn(t,e={}){let n=We({host:e.host,port:e.port,nodeEnv:e.nodeEnv,processNodeEnv:process.env.NODE_ENV}),{listenArkRunInspector:r}=await Promise.resolve().then(()=>(vn(),Pn));return r(t,{bind:n,sseIntervalMs:e.sseIntervalMs})}s(Cn,"startArkRunInspector");me();function Ao(t){let e={...t.metadata??{}};if(t.source===void 0)return e;if(e.source&&e.source!==t.source)throw new N(t.source,e.source);return e.source=t.source,e}s(Ao,"stampMetadata");function Io(){}s(Io,"ignoreDetachedFailure");async function kt(t,e,n,r={}){let o=Lt({transport:r.transport,ephemeral:r.ephemeral??t.defaultEphemeral,brokerBound:typeof t.broker?.send=="function"}),i=Ao(r),a=await t.eventBus.dispatch(e,n,i,{notifySubscribers:o.notifySubscribers,awaitHandlers:o.awaitHandlers});if(o.deliveredVia==="broker"&&t.broker){let c=Promise.resolve(t.broker.send(a));o.awaitHandoff?await c:c.then(void 0,Io)}return o}s(kt,"sendOnArkRunTransport");var bo=1e3,On=0;function So(){return On+=1,`ark-kernel-${Date.now()}-${On}`}s(So,"nextKernelInstanceId");function Nn(t,e){let n=t.constructor?.name;return typeof n=="string"&&n.length>0?n:e}s(Nn,"portConstructorId");function Dn(t={}){let e=t.strict??!0,n=t.instanceId??So(),r=t.profile??ct,o=t.maxHistorySize??bo,i=st(),a=ot(),c=t.metadata??ut(),d=t.auditTrail===void 0,l=t.auditTrail??Je({maxRecords:o}),u=t.eventContracts??rt(),y=t.eventBuffer===void 0&&t.outbox===void 0,f=t.eventBuffer??t.outbox??new ue,g=t.projections??gt({auditTrail:l}),h=new $([Xe(r),...t.policies??[]]),p=s(()=>{it(i,a,{requireRegisteredTargets:!0})},"syncGraph"),F=t.ephemeral??!0,m=t.broker,T=new de({intentRegistry:i,dependencyGraph:a,policyEngine:h,strictRegistry:!0,validateIntentNaming:!0,auditTrail:l,eventContracts:u,strictEventContracts:t.strictEventContracts??e,requireKnownSource:t.requireKnownSource??!0,architectureProfile:r,enforceObservedLayerFlow:t.enforceObservedLayerFlow??(e?"hard":"off"),eventBuffer:f,instanceId:n,maxHistorySize:o,onPublish:t.autoApplyProjections===!1?void 0:async k=>{await g.apply(k)}}),wt=ht(T,{auditTrail:l}),Ne=ft({registry:i,eventBus:T,graph:a}),M=En(),Tn=typeof m?.send=="function",Mn=y?"InMemoryEventBuffer":Nn(f,"EventBufferStore"),Ln=d?"InMemoryAuditStore":Nn(l,"AuditTrail"),_n=qe({stores:[Z(Mn,"outbox"),Z(Ln,"audit"),Z("InMemoryWorkflowStore","workflow")]}),De={instanceId:n,profile:r,registry:i,graph:a,metadata:c,auditTrail:l,eventContracts:u,eventBuffer:f,outbox:f,projections:g,policyEngine:h,eventBus:T,workflowEngine:wt,observability:Ne,publisher(k){let L=T.createPublisher(k);return{source:L.source,publish:L.publish,send(S,Te,$n={}){return kt({eventBus:T,broker:m,defaultEphemeral:F},S,Te,{...$n,source:L.source})}}},send(k,L,S={}){return kt({eventBus:T,broker:m,defaultEphemeral:F},k,L,S)},register(k){return M.register(k)},resolve(k){return M.resolve(k)},resolveSingleton(k){return M.resolveSingleton(k)},getDependencyInformationPackage(){return v({kernelInstanceId:n,components:M.snapshotComponents()})},requestGraph(k){return Mt({kernelInstanceId:n,components:M.snapshotComponents()},k)},getInspectorSnapshot(k){return Bt({kernelInstanceId:n,host:k?.host,port:k?.port,package:{kernelInstanceId:n,components:M.snapshotComponents()},observability:Ne.report(),ephemeralDefault:F,brokerBound:Tn,hardening:_n})},startInspector(k){return Cn({getInspectorSnapshot:s(S=>De.getInspectorSnapshot(S),"getInspectorSnapshot"),requestGraph:s(S=>De.requestGraph(S),"requestGraph"),async listInspectorOutbox(){let[S,Te]=await Promise.all([f.list("pending"),f.list("failed")]);return Y([...S,...Te],{sampleLimit:A})},async listInspectorWorkflows(){return ee(await wt.list(),{sampleLimit:A})}},k)},syncGraph:p,manifest(){return p(),lt({registry:i,policyEngine:h,metadata:c,graph:a,profile:r,projections:g,eventContracts:u,observability:Ne})}};return De}s(Dn,"createArkKernel");var j=Symbol("ARK_KERNEL"),xo=s(()=>(0,Oe.Inject)(j),"InjectArk"),x=class{static forRoot(e){let n=e&&"registry"in e?e:Dn(e);return{module:x,global:!0,providers:[{provide:j,useValue:n}],exports:[j]}}static forRootAsync(e){return{module:x,global:!0,providers:[{provide:j,useFactory:e.useFactory,inject:e.inject??[]}],exports:[j]}}};s(x,"ArkModule"),x=bt([(0,Oe.Module)({})],x);0&&(module.exports={ARK_KERNEL,ArkModule,InjectArk});
18
+ `}return r.trim()}detectViolations(e=[]){let n=[],r=this.findSimpleCycles();r.length>0&&n.push(`Cycle detected: ${r.map(o=>o.join("->")).join(", ")}`);for(let o of e)try{let i=o(this.edges);i&&i.length&&n.push(...i)}catch(i){n.push(`Rule error: ${i.message}`)}return n}ensureNode(e){this.nodes.has(e)||this.nodes.set(e,{id:e})}addEdge(e){this.edges.some(r=>r.from===e.from&&r.to===e.to&&r.kind===e.kind)||this.edges.push(e)}findSimpleCycles(){let e=new Map;for(let c of this.edges)e.has(c.from)||e.set(c.from,[]),e.get(c.from).push(c.to);let n=[],r=new Set,o=[],i=s(c=>{r.add(c),o.push(c);for(let d of e.get(c)||[])if(!r.has(d))i(d);else if(o.includes(d)){let l=o.indexOf(d),u=o.slice(l).concat(d);n.push(u)}o.pop()},"dfs");for(let c of e.keys())r.has(c)||i(c);let a=new Set(n.map(c=>c.join("->")));return Array.from(a).map(c=>c.split("->"))}safeId(e){return e.replace(/[^a-zA-Z0-9_]/g,"_")}};function ot(){return new xe}s(ot,"createDependencyGraph");function it(t,e,n={}){let r=n.requireRegisteredTargets??!1;for(let o of t.getAllRelationships())r&&!t.has(o.to)||(o.kind==="dependsOn"?e.registerDependency(o.from,o.to,"declared"):e.registerDependency(o.from,o.to,"produces"))}s(it,"syncRegistryToGraph");var le=class{static{s(this,"IntentRegistry")}intents=new Map;dependencies=new Map;productions=new Map;define(e,n){if(this.intents.has(e))throw new Error(`Intent "${e}" is already registered. Intent names must be unique within a registry.`);let r=s(i=>({intent:e,payload:i,metadata:{occurredAt:new Date().toISOString(),source:"unknown"}}),"fn");Object.defineProperty(r,"name",{value:e,enumerable:!0,configurable:!1,writable:!1});let o=r;if(this.intents.set(e,o),n?.dependsOn)for(let i of n.dependsOn)this.declareDependency(e,i);if(n?.produces)for(let i of n.produces)this.declareProduction(e,i);return o}declareDependency(e,n){this.dependencies.has(e)||this.dependencies.set(e,new Set),this.dependencies.get(e).add(n)}declareProduction(e,n){this.productions.has(e)||this.productions.set(e,new Set),this.productions.get(e).add(n)}get(e){return this.intents.get(e)}list(){return Array.from(this.intents.values())}getDependencies(e){let n=this.dependencies.get(e);return n?Array.from(n):[]}getProductions(e){let n=this.productions.get(e);return n?Array.from(n):[]}getAllRelationships(){let e=[];for(let[n,r]of this.dependencies.entries())for(let o of r)e.push({from:n,to:o,kind:"dependsOn"});for(let[n,r]of this.productions.entries())for(let o of r)e.push({from:n,to:o,kind:"produces"});return e}has(e){return this.intents.has(e)}clear(){this.intents.clear(),this.dependencies.clear(),this.productions.clear()}};var ms=new le;function st(){return new le}s(st,"createIntentRegistry");var D={type:"array",items:{type:"string",minLength:1},uniqueItems:!0},pn={type:"object",additionalProperties:!1,properties:{mode:{type:"string",enum:["advisory","enforced"],default:"advisory"},compositionRoots:{...D,default:[]},kernelRoots:{...D},managedLayers:{...D,default:[]},requireDeclarations:{type:"boolean",default:!0},ignoreDirectNewForErrors:{type:"boolean",default:!0}}},fn={type:"object",additionalProperties:!1,properties:{mode:{type:"string",enum:["advisory","enforced"],default:"advisory"},planeRoots:{...D,default:[]},managedLayers:{...D,default:[]},maxXiKeys:{type:"integer",minimum:1,default:7},xiKeys:{...D,default:[]},appliesTo:{...D,default:[]}}};var gn="1.3",Zr=["public","auth","admin","internal"];var mn="https://unpkg.com/arkgate@4/schemas/ark.config.schema.json",yn=["DomainModel","ApplicationOrchestration","PersistenceAdapters","IntegrationAdapters","WorkflowSagaEngine","BackgroundJobsScheduling","PresentationAdapters","ReportingReadModels","ExtensibilityMetadata","SecurityAuditObservability","Kernel"],Yr=new Set(["PresentationAdapters->ApplicationOrchestration","ApplicationOrchestration->DomainModel","WorkflowSagaEngine->ApplicationOrchestration","WorkflowSagaEngine->DomainModel","BackgroundJobsScheduling->ApplicationOrchestration"]);function eo(){let t=[];for(let e of yn)for(let n of yn)e===n||Yr.has(`${e}->${n}`)||t.push({from:e,to:n,allowed:!1});return t}s(eo,"createDefaultRules");var at=eo();var w={type:"array",items:{type:"string",minLength:1},uniqueItems:!0},_s={$schema:"https://json-schema.org/draft/2020-12/schema",$id:mn,title:"ArkGate architecture contract",description:"Versioned contract consumed identically by ArkGate CLI, MCP, and ESLint surfaces.",type:"object",additionalProperties:!1,required:["$schema","schemaVersion","include","layers","rules"],properties:{$schema:{type:"string",minLength:1,default:mn,description:"Editor-facing URL or local path for this JSON Schema."},schemaVersion:{type:"string",const:gn,default:gn},name:{type:"string",minLength:1},include:{...w,minItems:1,default:["src"]},exclude:{...w,default:[]},excludeGenerated:{type:"boolean",default:!0},frameworkOverlay:{type:"string",minLength:1},layers:{type:"array",default:[],items:{$ref:"#/$defs/layer"}},rules:{type:"array",default:at,items:{$ref:"#/$defs/rule"}},cyclePolicy:{type:"string",enum:["strict","soft","framework-soft","off"],default:"strict"},dynamicImportAllowlist:{...w,default:[]},safety:{$ref:"#/$defs/safety",default:{maxTsSuppressions:0,maxAnyCasts:0,allowInMemory:!1,allowDisabledPeerIsolation:!1}},coverage:{$ref:"#/$defs/coverage"},arkRules:{type:"object",additionalProperties:{type:"string",minLength:1},default:{}},arkRun:{$ref:"#/$defs/arkRun"},arkOrder:{$ref:"#/$defs/arkOrder"},stewards:{...w,default:[]},requireLayerOwners:{type:"boolean"}},$defs:{layer:{type:"object",additionalProperties:!1,required:["name","patterns"],properties:{name:{type:"string",minLength:1},patterns:{...w,minItems:1},exclude:w,intentPrefixes:w,description:{type:"string",minLength:1},trustBoundary:{type:"string",enum:[...Zr]},owners:{...w,minItems:1},forbiddenGlobals:w,capabilities:{type:"object",additionalProperties:!1,properties:{deny:{type:"array",uniqueItems:!0,items:{type:"string",enum:["network","filesystem","clock","randomness","environment","process","persistence"]}}}},pure:{type:"boolean"},mayImportInfrastructure:{type:"boolean"},optional:{type:"boolean"},reserved:{type:"boolean"},allowEmpty:{type:"boolean"}}},rule:{type:"object",additionalProperties:!1,required:["from","to","allowed"],properties:{from:{type:"string",minLength:1},to:{type:"string",minLength:1},allowed:{type:"boolean"},message:{type:"string",minLength:1},peerIsolation:{type:"boolean"},sliceFolders:{...w,minItems:1},sharedRoots:{...w,minItems:1},allowedCrossSlice:{type:"array",minItems:1,items:{type:"object",additionalProperties:!1,required:["from","to"],properties:{from:{type:"string",minLength:1},to:{type:"string",minLength:1}}}}}},safety:{type:"object",additionalProperties:!1,properties:{maxTsSuppressions:{type:"integer",minimum:0,default:0},maxAnyCasts:{type:"integer",minimum:0,default:0},allowInMemory:{type:"boolean",default:!1},allowDisabledPeerIsolation:{type:"boolean",default:!1}}},coverage:{type:"object",additionalProperties:!1,description:"Invariant coverage scan controls. testGlobs replaces the built-in test-name heuristic; maxFiles raises or lowers the evidence file budget and also bounds structural-hint preload for orchestration-only, thin-adapter, and writes-via-aggregate (default 400; there is no arkrules.hintBudget); coverageRoots declares where the project runs its tests, so a covering test found outside them is reported instead of silently certifying an invariant. When any invariant is enforced, missing coverageRoots fails closed.",properties:{testGlobs:{...w,minItems:1},maxFiles:{type:"integer",minimum:1,description:"Evidence file budget (default 400) and structural-hint preload cap for orchestration-only, thin-adapter, and writes-via-aggregate. Raise this when hinted/governed counts show truncated sensors. There is no separate arkrules.hintBudget."},coverageRoots:{...w,minItems:1}}},arkRun:pn,arkOrder:fn}};function to(t){return t.endsWith(".")?t:`${t}.`}s(to,"normalizePrefix");function no(t,e){let n=t.prefixes.length?Math.max(...t.prefixes.map(o=>o.length)):0;return(e.prefixes.length?Math.max(...e.prefixes.map(o=>o.length)):0)-n}s(no,"byLongestPrefix");function hn(t){let e=t.layers.map(o=>({...o,prefixes:o.prefixes.map(to)})),n=[...e].sort(no),r=[...t.rules??[]];return{name:t.name,layers:e,rules:r,resolveLayer(o){return e.find(i=>i.match?.(o))?.name??n.find(i=>i.prefixes.some(a=>o.startsWith(a)))?.name}}}s(hn,"createArchitectureProfile");var ro=[{name:"DomainModel",prefixes:["Domain"],description:"Rich domain model, business rules, and domain events.",order:1},{name:"ApplicationOrchestration",prefixes:["Application"],description:"Use cases and command orchestration.",order:2},{name:"PersistenceAdapters",prefixes:["Adapter.Persistence","Adapter.Repository"],description:"Database, repository, and storage adapters.",order:3},{name:"IntegrationAdapters",prefixes:["Adapter.Integration","Adapter.External"],description:"External systems, APIs, and integration adapters.",order:4},{name:"WorkflowSagaEngine",prefixes:["Workflow"],description:"Sagas, workflows, and long-running processes.",order:5},{name:"BackgroundJobsScheduling",prefixes:["Job"],description:"Background jobs, scheduled work, and async processors.",order:6},{name:"PresentationAdapters",prefixes:["Presentation","Adapter.Presentation","Adapter.Api"],description:"API, UI, controller, and presentation adapters.",order:7},{name:"ReportingReadModels",prefixes:["Reporting"],description:"Read models, projections, and reporting surfaces.",order:8},{name:"ExtensibilityMetadata",prefixes:["Metadata"],description:"Metadata, extensions, and schema contracts.",order:9},{name:"SecurityAuditObservability",prefixes:["Security","Audit","Observability"],description:"Security, audit, and observability concerns.",order:10},{name:"Kernel",prefixes:["Kernel"],description:"Ark-owned governance and kernel signals.",order:11}],ct=hn({name:"Ark 11-layer Hexagonal Event-Driven Profile",layers:ro,rules:at.map(t=>({...t}))});var kn="4.8.17";function io(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}s(io,"policyId");var dt=class{constructor(e){this.data=e}data;static{s(this,"ArkManifestImpl")}toJSON(){return{...this.data}}};function lt(t={}){let e=t.registry,n=t.policyEngine,r=t.metadata,o=t.graph,i=t.profile,a=t.projections,c=t.eventContracts,d=t.observability,l=e?e.list().map(m=>({name:m.name,dependencies:e.getDependencies(m.name),productions:e.getProductions(m.name)})):[],u=e?e.getAllRelationships():[],y=n?n.getPolicies().map(m=>({id:io(m.name),name:m.name,severity:m.severity,tags:m.tags?[...m.tags]:void 0,owner:m.owner,version:m.version,rationale:m.rationale,enforcementMode:m.enforcementMode,deprecated:m.deprecated,replacedBy:m.replacedBy,description:m.tags?.includes("layer")?"Enforces clean-architecture layer dependency rules on declared relationships.":void 0})):[],f=r?r.toJSON():[],g=o?o.toJSON():{nodes:[],edges:[]},h=f.filter(m=>(m.emits?.length??0)>0||(m.consumes?.length??0)>0).map(m=>({entity:m.name,emits:m.emits,consumes:m.consumes})),p=a?a.list().map(m=>({name:m.name,sourceIntents:m.sourceIntents,checkpoint:a.getCheckpoint(m.name)})):[],F={schemaVersion:"1.0",version:kn,exportedAt:new Date().toISOString(),intents:l,relationships:u,policies:y,entities:f,graph:g,architecture:i?{profile:i.name,layers:i.layers,rules:i.rules}:void 0,projections:p,eventContracts:c?.list()??[],observability:d?.report(),links:{entityIntents:h}};return new dt(F)}s(lt,"createArkManifest");var Ee=class{static{s(this,"MetadataRegistryImpl")}entities=new Map;entity(e,n,r={}){if(this.entities.has(e)&&!r.allowOverwrite)throw new Error(`Entity metadata "${e}" is already registered.`);let o={name:e,fields:{},...n};return this.entities.set(e,o),o}getEntity(e){return this.entities.get(e)}listEntities(){return Array.from(this.entities.values())}findEntitiesByIntent(e){return this.listEntities().filter(n=>n.emits?.includes(e)||n.consumes?.includes(e))}validate(){let e=[];for(let n of this.entities.values()){n.name.trim()||e.push({entity:n.name,message:"Entity name is required."});for(let[r,o]of Object.entries(n.fields))r.trim()||e.push({entity:n.name,field:r,message:"Field name is required."}),(!o.type||typeof o.type!="string")&&e.push({entity:n.name,field:r,message:"Field type must be a non-empty string."}),o.relation&&!this.entities.has(o.relation.entity)&&e.push({entity:n.name,field:r,message:`Related entity "${o.relation.entity}" is not registered.`})}return{ok:e.length===0,issues:e}}toJSON(){return this.listEntities()}};function ut(){return new Ee}s(ut,"createMetadataRegistry");function pt(t){return`${t.from}->${t.to}`}s(pt,"flowKey");function Rn(t){let e=new Set,n=[];for(let r of t){let o=pt(r);e.has(o)||(e.add(o),n.push(r))}return n}s(Rn,"uniqueFlows");function An(t,e){let n=new Set(e.map(pt));return t.filter(r=>!n.has(pt(r)))}s(An,"difference");function ft(t){let e=t.registry,n=t.eventBus,r=t.graph;return{report(){let o=e?e.getAllRelationships().filter(p=>p.kind==="produces").map(p=>({from:p.from,to:p.to})):[],i=o.length>0||!r?[]:r.getEdges().filter(p=>p.kind==="produces").map(p=>({from:p.from,to:p.to})),a=n?.getHistory().map(p=>({from:p.event.metadata.source,to:p.event.intent}))??[],c=a.length>0||!r?[]:r.getEdges().filter(p=>p.kind==="observed").map(p=>({from:p.from,to:p.to})),d=Rn([...o,...i]),l=Rn([...a,...c]),u=l.filter(p=>!p.from||p.from==="unknown"),y=e?Array.from(new Set(l.map(p=>p.from).filter(p=>p&&p!=="unknown"&&!e.has(p)))):[],f=e?Array.from(new Set(l.map(p=>p.to).filter(p=>!e.has(p)))):[],g=new Set(l.flatMap(p=>[p.from,p.to])),h=e?e.list().map(p=>p.name).filter(p=>!g.has(p)):[];return{generatedAt:new Date().toISOString(),declaredProductions:d,observedProductions:l,declaredButUnobserved:An(d,l),observedButUndeclared:An(l.filter(p=>p.from!=="unknown"),d),unknownSources:u,unregisteredObservedSources:y,unregisteredObservedIntents:f,registeredButNeverObserved:h}}}}s(ft,"createObservabilityReporter");var In=0;function so(){return In+=1,`outbox-${Date.now()}-${In}`}s(so,"nextOutboxId");function bn(t){return{...t,event:{...t.event,metadata:{...t.event.metadata}}}}s(bn,"cloneRecord");var ue=class{static{s(this,"InMemoryEventBuffer")}records=new Map;async enqueue(e){let n=new Date().toISOString(),r={id:so(),event:e,status:"pending",attempts:0,createdAt:n,updatedAt:n};return this.records.set(r.id,r),bn(r)}async markDispatched(e){let n=this.records.get(e);n&&(n.status="dispatched",n.updatedAt=new Date().toISOString())}async markFailed(e,n){let r=this.records.get(e);r&&(r.status="failed",r.attempts+=1,r.error=n instanceof Error?n.message:String(n),r.updatedAt=new Date().toISOString())}async list(e){return Array.from(this.records.values()).filter(n=>!e||n.status===e).map(bn)}async clear(){this.records.clear()}};var Pe=class{static{s(this,"InMemoryReadModelStore")}states=new Map;load(e){return this.states.get(e)}save(e,n){this.states.set(e,n)}clear(e){e?this.states.delete(e):this.states.clear()}};function ao(t){return typeof t.initialState=="function"?t.initialState():t.initialState}s(ao,"initialState");var ve=class{static{s(this,"ProjectionRegistryImpl")}definitions=new Map;checkpoints=new Map;store;auditTrail;constructor(e={}){this.store=e.store??new Pe,this.auditTrail=e.auditTrail}register(e){if(this.definitions.has(e.name))throw new Error(`Projection "${e.name}" is already registered.`);this.definitions.set(e.name,e),this.checkpoints.set(e.name,{projection:e.name,appliedCount:0})}list(){return Array.from(this.definitions.values())}async apply(e){let n=[];for(let r of this.definitions.values()){if(!r.sourceIntents.includes(e.intent))continue;let o=await this.store.load(r.name)??ao(r),i=await r.project(e,o);await this.store.save(r.name,i);let a=this.checkpoints.get(r.name);this.checkpoints.set(r.name,{projection:r.name,appliedCount:(a?.appliedCount??0)+1,lastIntent:e.intent,lastCorrelationId:e.metadata.correlationId,updatedAt:new Date().toISOString()}),await this.auditTrail?.record({type:"projection.applied",source:"Kernel.ProjectionRegistry",intent:e.intent,correlationId:e.metadata.correlationId,causationId:e.metadata.causationId,subject:r.name,details:{projection:r.name}}),n.push(r.name)}return n}async getState(e){return this.store.load(e)}getCheckpoint(e){return this.checkpoints.get(e)}getCheckpoints(){return Array.from(this.checkpoints.values())}async clear(){await this.store.clear();for(let e of this.definitions.values())this.checkpoints.set(e.name,{projection:e.name,appliedCount:0})}};function gt(t){return new ve(t)}s(gt,"createProjectionRegistry");var Sn=0;function co(t){return Sn+=1,`${t}-${Date.now()}-${Sn}`}s(co,"createWorkflowId");function mt(t){return t instanceof Error?t.message:String(t)}s(mt,"errorMessage");function lo(t){return new Promise(e=>{setTimeout(e,t)})}s(lo,"sleep");async function uo(t,e,n){let r=new AbortController;if(e===void 0)return t(r.signal);let o,i=new Promise((a,c)=>{o=setTimeout(()=>{let d=new Error(`Workflow step "${n}" timed out after ${e}ms.`);r.abort(d),c(d)},e)});try{return await Promise.race([t(r.signal),i])}finally{o&&clearTimeout(o)}}s(uo,"withTimeout");var Ce=class{static{s(this,"InMemoryWorkflowStore")}snapshots=new Map;save(e,n){let r=this.snapshots.get(e.id);if(r&&r.version!==e.version)throw new Error(`Optimistic concurrency conflict for workflow ${e.id}`);let o=(e.version??0)+1;this.snapshots.set(e.id,{...e,version:o,context:{...e.context}}),e.version=o}get(e,n){let r=this.snapshots.get(e);return r?{...r,context:{...r.context}}:void 0}list(e){return Array.from(this.snapshots.values()).filter(n=>!e||n.workflowName===e).map(n=>({...n,context:{...n.context}}))}claim(e,n,r){let o=Date.now();for(let i of this.snapshots.values()){if(r&&i.workflowName!==r||i.status!=="running"&&i.status!=="compensating")continue;let a=i.expiresAt?new Date(i.expiresAt).getTime()<o:!0;if(!i.ownerId||a){i.ownerId=e,i.expiresAt=new Date(o+n).toISOString();let c=(i.version??0)+1;return i.version=c,this.snapshots.set(i.id,{...i,context:{...i.context}}),{...i,context:{...i.context}}}}}clear(){this.snapshots.clear()}},yt=class{constructor(e,n={}){this.bus=e;this.options=n;this.store=n.store??new Ce}bus;options;static{s(this,"WorkflowEngineImpl")}definitions=new Map;store;register(e){if(this.definitions.has(e.name))throw new Error(`Workflow "${e.name}" is already registered.`);let n=new Set;for(let r of e.steps){if(n.has(r.name))throw new Error(`Workflow "${e.name}" has duplicate step name "${r.name}".`);n.add(r.name)}if(this.definitions.set(e.name,e),e.startOn){let r=e.startOn;this.bus.subscribe(r.intent,async o=>{await this.start(e.name,r.mapEventToPayload(o))})}}async start(e,n,r={}){let o=this.definitions.get(e);if(!o)throw new Error(`Workflow "${e}" is not registered.`);let i=new Date().toISOString(),a={id:r.id??co(e),version:0,workflowName:e,status:"running",context:{...n},completedSteps:[],attempts:{},startedAt:i,updatedAt:i};return await this.store.save(a,r.tx),await this.audit("workflow.started",a,{workflowName:e}),this.executeSnapshot(a,o,r.tx)}async resume(e,n={}){let r=await this.get(e,n.tx);if(!r)return;if(r.status!=="running"&&r.status!=="compensating")return r;let o=this.definitions.get(r.workflowName);if(!o)throw new Error(`Workflow "${r.workflowName}" is not registered.`);return this.executeSnapshot(r,o,n.tx)}async executeSnapshot(e,n,r){try{let o=n.steps.filter(i=>!e.completedSteps.includes(i.name));for(let i of o)await this.runStep(e,i,r);return e.status="completed",e.currentStep=void 0,e.completedAt=new Date().toISOString(),e.updatedAt=e.completedAt,await this.store.save(e,r),await this.audit("workflow.completed",e,{workflowName:e.workflowName}),{...e,context:{...e.context}}}catch(o){throw await this.compensate(e,n.steps,o,r),e.status="failed",e.currentStep=void 0,e.error=mt(o),e.updatedAt=new Date().toISOString(),await this.store.save(e,r),await this.audit("workflow.failed",e,{workflowName:e.workflowName,error:e.error,failedStep:e.failedStep}),o}}async get(e,n){return this.store.get(e,n)}async list(e){return this.store.list(e)}async runStep(e,n,r){let o=n.retry??this.options.defaultRetry??{attempts:1},i=Math.max(1,o.attempts);e.currentStep=n.name,e.updatedAt=new Date().toISOString(),await this.store.save(e,r);for(let a=1;a<=i;a+=1){e.attempts[n.name]=a,await this.store.save(e,r);let c;try{c=await uo(d=>Promise.resolve(n.execute(e.context,this.bus,d)),n.timeoutMs,n.name)}catch(d){if(a<i){o.delayMs&&await lo(o.delayMs);continue}throw e.failedStep=n.name,e.updatedAt=new Date().toISOString(),await this.store.save(e,r),await this.audit("workflow.step.failed",e,{step:n.name,attempt:a,error:mt(d)}),d}c&&Object.assign(e.context,c),e.completedSteps.push(n.name),e.currentStep=void 0,e.updatedAt=new Date().toISOString(),await this.store.save(e,r),await this.audit("workflow.step.completed",e,{step:n.name,attempt:a});return}throw new Error(`Workflow step "${n.name}" did not complete.`)}async compensate(e,n,r,o){e.status="compensating",e.updatedAt=new Date().toISOString(),await this.store.save(e,o);let i=n.filter(a=>e.completedSteps.includes(a.name));for(let a=i.length-1;a>=0;a-=1){let c=i[a];if(c.compensate)try{await Promise.resolve(c.compensate(e.context,this.bus,r)),await this.audit("workflow.compensation.completed",e,{step:c.name})}catch(d){await this.audit("workflow.step.failed",e,{step:c.name,compensation:!0,error:mt(d)})}}}async audit(e,n,r){await this.options.auditTrail?.record({type:e,source:"Kernel.WorkflowEngine",subject:n.id,details:r})}};function ht(t,e){return new yt(t,e)}s(ht,"createWorkflowEngine");U();var po=new Set(["singleton","transient"]);function xn(t){let e={id:t.id,lifetime:t.lifetime,uses:[...t.uses],reactsTo:[...t.reactsTo],raises:[...t.raises],sends:[...t.sends]};if(t.extendedInfo){let n=t.extendedInfo;e.extendedInfo={...n.label?{label:n.label}:{},...n.architectureKind?{architectureKind:n.architectureKind}:{},...n.tags?{tags:[...n.tags]}:{},...n.group?{group:n.group}:{},...n.metadata?{metadata:{...n.metadata}}:{}}}return e}s(xn,"cloneComponent");function fo(t){if(t===void 0)return"singleton";if(typeof t=="string"&&po.has(t))return t;throw new Error('ArkRun component lifetime must be "singleton" or "transient".')}s(fo,"closedLifetime");function En(){let t=new Map,e=new Map,n=new Set;function r(a){let c=t.get(a);if(!c)throw new Error(`ArkRun component "${a}" is not registered.`);return c}s(r,"mustRecord");function o(a,c){if(!c.factory)throw new Error(`ArkRun component "${a}" has no factory; declarations-only registrations cannot be resolved.`);if(n.has(a))throw new Error(`ArkRun component "${a}" has a circular resolve.`);n.add(a);try{return c.factory()}finally{n.delete(a)}}s(o,"instantiate");function i(a,c){if(e.has(a))return e.get(a);let d=o(a,c);return e.set(a,d),d}return s(i,"singleton"),{register(a){let c=typeof a?.id=="string"?a.id.trim():"";if(!c)throw new Error("ArkRun component id must be a non-empty string.");if(t.has(c))throw new Error(`ArkRun component "${c}" is already registered.`);let d=fo(a.lifetime),l=Le({id:c,lifetime:d,uses:a.uses,reactsTo:a.reactsTo,raises:a.raises,sends:a.sends,extendedInfo:a.extendedInfo});if(!l)throw new Error("ArkRun component id must be a non-empty string.");let u=typeof a.factory=="function"?a.factory:void 0;return t.set(c,{component:l,factory:u}),xn(l)},resolve(a){let c=r(a);return c.component.lifetime==="transient"?o(a,c):i(a,c)},resolveSingleton(a){let c=r(a);if(c.component.lifetime==="transient")throw new Error(`ArkRun component "${a}" is transient; resolveSingleton requires lifetime "singleton".`);return i(a,c)},snapshotComponents(){return[...t.values()].map(a=>xn(a.component))}}}s(En,"createComponentRegistry");we();async function Cn(t,e={}){let n=We({host:e.host,port:e.port,nodeEnv:e.nodeEnv,processNodeEnv:process.env.NODE_ENV}),{listenArkRunInspector:r}=await Promise.resolve().then(()=>(vn(),Pn));return r(t,{bind:n,sseIntervalMs:e.sseIntervalMs})}s(Cn,"startArkRunInspector");me();function Ao(t){let e={...t.metadata??{}};if(t.source===void 0)return e;if(e.source&&e.source!==t.source)throw new N(t.source,e.source);return e.source=t.source,e}s(Ao,"stampMetadata");function Io(){}s(Io,"ignoreDetachedFailure");async function kt(t,e,n,r={}){let o=Lt({transport:r.transport,ephemeral:r.ephemeral??t.defaultEphemeral,brokerBound:typeof t.broker?.send=="function"}),i=Ao(r),a=await t.eventBus.dispatch(e,n,i,{notifySubscribers:o.notifySubscribers,awaitHandlers:o.awaitHandlers});if(o.deliveredVia==="broker"&&t.broker){let c=Promise.resolve(t.broker.send(a));o.awaitHandoff?await c:c.then(void 0,Io)}return o}s(kt,"sendOnArkRunTransport");var bo=1e3,On=0;function So(){return On+=1,`ark-kernel-${Date.now()}-${On}`}s(So,"nextKernelInstanceId");function Nn(t,e){let n=t.constructor?.name;return typeof n=="string"&&n.length>0?n:e}s(Nn,"portConstructorId");function Dn(t={}){let e=t.strict??!0,n=t.instanceId??So(),r=t.profile??ct,o=t.maxHistorySize??bo,i=st(),a=ot(),c=t.metadata??ut(),d=t.auditTrail===void 0,l=t.auditTrail??Je({maxRecords:o}),u=t.eventContracts??rt(),y=t.eventBuffer===void 0&&t.outbox===void 0,f=t.eventBuffer??t.outbox??new ue,g=t.projections??gt({auditTrail:l}),h=new $([Xe(r),...t.policies??[]]),p=s(()=>{it(i,a,{requireRegisteredTargets:!0})},"syncGraph"),F=t.ephemeral??!0,m=t.broker,T=new de({intentRegistry:i,dependencyGraph:a,policyEngine:h,strictRegistry:!0,validateIntentNaming:!0,auditTrail:l,eventContracts:u,strictEventContracts:t.strictEventContracts??e,requireKnownSource:t.requireKnownSource??!0,architectureProfile:r,enforceObservedLayerFlow:t.enforceObservedLayerFlow??(e?"hard":"off"),eventBuffer:f,instanceId:n,maxHistorySize:o,onPublish:t.autoApplyProjections===!1?void 0:async k=>{await g.apply(k)}}),wt=ht(T,{auditTrail:l}),Ne=ft({registry:i,eventBus:T,graph:a}),M=En(),Tn=typeof m?.send=="function",Mn=y?"InMemoryEventBuffer":Nn(f,"EventBufferStore"),Ln=d?"InMemoryAuditStore":Nn(l,"AuditTrail"),_n=qe({stores:[Z(Mn,"outbox"),Z(Ln,"audit"),Z("InMemoryWorkflowStore","workflow")]}),De={instanceId:n,profile:r,registry:i,graph:a,metadata:c,auditTrail:l,eventContracts:u,eventBuffer:f,outbox:f,projections:g,policyEngine:h,eventBus:T,workflowEngine:wt,observability:Ne,publisher(k){let L=T.createPublisher(k);return{source:L.source,publish:L.publish,send(S,Te,$n={}){return kt({eventBus:T,broker:m,defaultEphemeral:F},S,Te,{...$n,source:L.source})}}},send(k,L,S={}){return kt({eventBus:T,broker:m,defaultEphemeral:F},k,L,S)},register(k){return M.register(k)},resolve(k){return M.resolve(k)},resolveSingleton(k){return M.resolveSingleton(k)},getDependencyInformationPackage(){return v({kernelInstanceId:n,components:M.snapshotComponents()})},requestGraph(k){return Mt({kernelInstanceId:n,components:M.snapshotComponents()},k)},getInspectorSnapshot(k){return Bt({kernelInstanceId:n,host:k?.host,port:k?.port,package:{kernelInstanceId:n,components:M.snapshotComponents()},observability:Ne.report(),ephemeralDefault:F,brokerBound:Tn,hardening:_n})},startInspector(k){return Cn({getInspectorSnapshot:s(S=>De.getInspectorSnapshot(S),"getInspectorSnapshot"),requestGraph:s(S=>De.requestGraph(S),"requestGraph"),async listInspectorOutbox(){let[S,Te]=await Promise.all([f.list("pending"),f.list("failed")]);return Y([...S,...Te],{sampleLimit:A})},async listInspectorWorkflows(){return ee(await wt.list(),{sampleLimit:A})}},k)},syncGraph:p,manifest(){return p(),lt({registry:i,policyEngine:h,metadata:c,graph:a,profile:r,projections:g,eventContracts:u,observability:Ne})}};return De}s(Dn,"createArkKernel");var j=Symbol("ARK_KERNEL"),xo=s(()=>(0,Oe.Inject)(j),"InjectArk"),x=class{static forRoot(e){let n=e&&"registry"in e?e:Dn(e);return{module:x,global:!0,providers:[{provide:j,useValue:n}],exports:[j]}}static forRootAsync(e){return{module:x,global:!0,providers:[{provide:j,useFactory:e.useFactory,inject:e.inject??[]}],exports:[j]}}};s(x,"ArkModule"),x=bt([(0,Oe.Module)({})],x);0&&(module.exports={ARK_KERNEL,ArkModule,InjectArk});
@@ -15,4 +15,4 @@ ${n}`),this.name="PolicyViolationError",this.violations=e}};var _=class{static{s
15
15
  `;for(let i of o)r+=` ${this.safeId(i)}[${i}]
16
16
  `;r+=` end
17
17
  `}for(let i of this.edges){let a=i.kind?`|${i.kind}|`:"";r+=` ${this.safeId(i.from)} -->${a} ${this.safeId(i.to)}
18
- `}return r.trim()}detectViolations(e=[]){let n=[],r=this.findSimpleCycles();r.length>0&&n.push(`Cycle detected: ${r.map(o=>o.join("->")).join(", ")}`);for(let o of e)try{let i=o(this.edges);i&&i.length&&n.push(...i)}catch(i){n.push(`Rule error: ${i.message}`)}return n}ensureNode(e){this.nodes.has(e)||this.nodes.set(e,{id:e})}addEdge(e){this.edges.some(r=>r.from===e.from&&r.to===e.to&&r.kind===e.kind)||this.edges.push(e)}findSimpleCycles(){let e=new Map;for(let c of this.edges)e.has(c.from)||e.set(c.from,[]),e.get(c.from).push(c.to);let n=[],r=new Set,o=[],i=s(c=>{r.add(c),o.push(c);for(let d of e.get(c)||[])if(!r.has(d))i(d);else if(o.includes(d)){let l=o.indexOf(d),u=o.slice(l).concat(d);n.push(u)}o.pop()},"dfs");for(let c of e.keys())r.has(c)||i(c);let a=new Set(n.map(c=>c.join("->")));return Array.from(a).map(c=>c.split("->"))}safeId(e){return e.replace(/[^a-zA-Z0-9_]/g,"_")}};function rt(){return new Se}s(rt,"createDependencyGraph");function ot(t,e,n={}){let r=n.requireRegisteredTargets??!1;for(let o of t.getAllRelationships())r&&!t.has(o.to)||(o.kind==="dependsOn"?e.registerDependency(o.from,o.to,"declared"):e.registerDependency(o.from,o.to,"produces"))}s(ot,"syncRegistryToGraph");var ce=class{static{s(this,"IntentRegistry")}intents=new Map;dependencies=new Map;productions=new Map;define(e,n){if(this.intents.has(e))throw new Error(`Intent "${e}" is already registered. Intent names must be unique within a registry.`);let r=s(i=>({intent:e,payload:i,metadata:{occurredAt:new Date().toISOString(),source:"unknown"}}),"fn");Object.defineProperty(r,"name",{value:e,enumerable:!0,configurable:!1,writable:!1});let o=r;if(this.intents.set(e,o),n?.dependsOn)for(let i of n.dependsOn)this.declareDependency(e,i);if(n?.produces)for(let i of n.produces)this.declareProduction(e,i);return o}declareDependency(e,n){this.dependencies.has(e)||this.dependencies.set(e,new Set),this.dependencies.get(e).add(n)}declareProduction(e,n){this.productions.has(e)||this.productions.set(e,new Set),this.productions.get(e).add(n)}get(e){return this.intents.get(e)}list(){return Array.from(this.intents.values())}getDependencies(e){let n=this.dependencies.get(e);return n?Array.from(n):[]}getProductions(e){let n=this.productions.get(e);return n?Array.from(n):[]}getAllRelationships(){let e=[];for(let[n,r]of this.dependencies.entries())for(let o of r)e.push({from:n,to:o,kind:"dependsOn"});for(let[n,r]of this.productions.entries())for(let o of r)e.push({from:n,to:o,kind:"produces"});return e}has(e){return this.intents.has(e)}clear(){this.intents.clear(),this.dependencies.clear(),this.productions.clear()}};var as=new ce;function it(){return new ce}s(it,"createIntentRegistry");var D={type:"array",items:{type:"string",minLength:1},uniqueItems:!0},cn={type:"object",additionalProperties:!1,properties:{mode:{type:"string",enum:["advisory","enforced"],default:"advisory"},compositionRoots:{...D,default:[]},kernelRoots:{...D},managedLayers:{...D,default:[]},requireDeclarations:{type:"boolean",default:!0},ignoreDirectNewForErrors:{type:"boolean",default:!0}}},dn={type:"object",additionalProperties:!1,properties:{mode:{type:"string",enum:["advisory","enforced"],default:"advisory"},planeRoots:{...D,default:[]},managedLayers:{...D,default:[]},maxXiKeys:{type:"integer",minimum:1,default:7},xiKeys:{...D,default:[]},appliesTo:{...D,default:[]}}};var ln="1.3",Vr=["public","auth","admin","internal"];var un="https://unpkg.com/arkgate@4/schemas/ark.config.schema.json",pn=["DomainModel","ApplicationOrchestration","PersistenceAdapters","IntegrationAdapters","WorkflowSagaEngine","BackgroundJobsScheduling","PresentationAdapters","ReportingReadModels","ExtensibilityMetadata","SecurityAuditObservability","Kernel"],Ur=new Set(["PresentationAdapters->ApplicationOrchestration","ApplicationOrchestration->DomainModel","WorkflowSagaEngine->ApplicationOrchestration","WorkflowSagaEngine->DomainModel","BackgroundJobsScheduling->ApplicationOrchestration"]);function Wr(){let t=[];for(let e of pn)for(let n of pn)e===n||Ur.has(`${e}->${n}`)||t.push({from:e,to:n,allowed:!1});return t}s(Wr,"createDefaultRules");var st=Wr();var w={type:"array",items:{type:"string",minLength:1},uniqueItems:!0},vs={$schema:"https://json-schema.org/draft/2020-12/schema",$id:un,title:"ArkGate architecture contract",description:"Versioned contract consumed identically by ArkGate CLI, MCP, and ESLint surfaces.",type:"object",additionalProperties:!1,required:["$schema","schemaVersion","include","layers","rules"],properties:{$schema:{type:"string",minLength:1,default:un,description:"Editor-facing URL or local path for this JSON Schema."},schemaVersion:{type:"string",const:ln,default:ln},name:{type:"string",minLength:1},include:{...w,minItems:1,default:["src"]},exclude:{...w,default:[]},excludeGenerated:{type:"boolean",default:!0},frameworkOverlay:{type:"string",minLength:1},layers:{type:"array",default:[],items:{$ref:"#/$defs/layer"}},rules:{type:"array",default:st,items:{$ref:"#/$defs/rule"}},cyclePolicy:{type:"string",enum:["strict","soft","framework-soft","off"],default:"strict"},dynamicImportAllowlist:{...w,default:[]},safety:{$ref:"#/$defs/safety",default:{maxTsSuppressions:0,maxAnyCasts:0,allowInMemory:!1,allowDisabledPeerIsolation:!1}},coverage:{$ref:"#/$defs/coverage"},arkRules:{type:"object",additionalProperties:{type:"string",minLength:1},default:{}},arkRun:{$ref:"#/$defs/arkRun"},arkOrder:{$ref:"#/$defs/arkOrder"},stewards:{...w,default:[]},requireLayerOwners:{type:"boolean"}},$defs:{layer:{type:"object",additionalProperties:!1,required:["name","patterns"],properties:{name:{type:"string",minLength:1},patterns:{...w,minItems:1},exclude:w,intentPrefixes:w,description:{type:"string",minLength:1},trustBoundary:{type:"string",enum:[...Vr]},owners:{...w,minItems:1},forbiddenGlobals:w,capabilities:{type:"object",additionalProperties:!1,properties:{deny:{type:"array",uniqueItems:!0,items:{type:"string",enum:["network","filesystem","clock","randomness","environment","process","persistence"]}}}},pure:{type:"boolean"},mayImportInfrastructure:{type:"boolean"},optional:{type:"boolean"},reserved:{type:"boolean"},allowEmpty:{type:"boolean"}}},rule:{type:"object",additionalProperties:!1,required:["from","to","allowed"],properties:{from:{type:"string",minLength:1},to:{type:"string",minLength:1},allowed:{type:"boolean"},message:{type:"string",minLength:1},peerIsolation:{type:"boolean"},sliceFolders:{...w,minItems:1},sharedRoots:{...w,minItems:1},allowedCrossSlice:{type:"array",minItems:1,items:{type:"object",additionalProperties:!1,required:["from","to"],properties:{from:{type:"string",minLength:1},to:{type:"string",minLength:1}}}}}},safety:{type:"object",additionalProperties:!1,properties:{maxTsSuppressions:{type:"integer",minimum:0,default:0},maxAnyCasts:{type:"integer",minimum:0,default:0},allowInMemory:{type:"boolean",default:!1},allowDisabledPeerIsolation:{type:"boolean",default:!1}}},coverage:{type:"object",additionalProperties:!1,description:"Invariant coverage scan controls. testGlobs replaces the built-in test-name heuristic; maxFiles raises or lowers the evidence file budget and also bounds structural-hint preload for orchestration-only, thin-adapter, and writes-via-aggregate (default 400; there is no arkrules.hintBudget); coverageRoots declares where the project runs its tests, so a covering test found outside them is reported instead of silently certifying an invariant. When any invariant is enforced, missing coverageRoots fails closed.",properties:{testGlobs:{...w,minItems:1},maxFiles:{type:"integer",minimum:1,description:"Evidence file budget (default 400) and structural-hint preload cap for orchestration-only, thin-adapter, and writes-via-aggregate. Raise this when hinted/governed counts show truncated sensors. There is no separate arkrules.hintBudget."},coverageRoots:{...w,minItems:1}}},arkRun:cn,arkOrder:dn}};function qr(t){return t.endsWith(".")?t:`${t}.`}s(qr,"normalizePrefix");function zr(t,e){let n=t.prefixes.length?Math.max(...t.prefixes.map(o=>o.length)):0;return(e.prefixes.length?Math.max(...e.prefixes.map(o=>o.length)):0)-n}s(zr,"byLongestPrefix");function fn(t){let e=t.layers.map(o=>({...o,prefixes:o.prefixes.map(qr)})),n=[...e].sort(zr),r=[...t.rules??[]];return{name:t.name,layers:e,rules:r,resolveLayer(o){return e.find(i=>i.match?.(o))?.name??n.find(i=>i.prefixes.some(a=>o.startsWith(a)))?.name}}}s(fn,"createArchitectureProfile");var Jr=[{name:"DomainModel",prefixes:["Domain"],description:"Rich domain model, business rules, and domain events.",order:1},{name:"ApplicationOrchestration",prefixes:["Application"],description:"Use cases and command orchestration.",order:2},{name:"PersistenceAdapters",prefixes:["Adapter.Persistence","Adapter.Repository"],description:"Database, repository, and storage adapters.",order:3},{name:"IntegrationAdapters",prefixes:["Adapter.Integration","Adapter.External"],description:"External systems, APIs, and integration adapters.",order:4},{name:"WorkflowSagaEngine",prefixes:["Workflow"],description:"Sagas, workflows, and long-running processes.",order:5},{name:"BackgroundJobsScheduling",prefixes:["Job"],description:"Background jobs, scheduled work, and async processors.",order:6},{name:"PresentationAdapters",prefixes:["Presentation","Adapter.Presentation","Adapter.Api"],description:"API, UI, controller, and presentation adapters.",order:7},{name:"ReportingReadModels",prefixes:["Reporting"],description:"Read models, projections, and reporting surfaces.",order:8},{name:"ExtensibilityMetadata",prefixes:["Metadata"],description:"Metadata, extensions, and schema contracts.",order:9},{name:"SecurityAuditObservability",prefixes:["Security","Audit","Observability"],description:"Security, audit, and observability concerns.",order:10},{name:"Kernel",prefixes:["Kernel"],description:"Ark-owned governance and kernel signals.",order:11}],at=fn({name:"Ark 11-layer Hexagonal Event-Driven Profile",layers:Jr,rules:st.map(t=>({...t}))});var gn="4.8.16";function Xr(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}s(Xr,"policyId");var ct=class{constructor(e){this.data=e}data;static{s(this,"ArkManifestImpl")}toJSON(){return{...this.data}}};function dt(t={}){let e=t.registry,n=t.policyEngine,r=t.metadata,o=t.graph,i=t.profile,a=t.projections,c=t.eventContracts,d=t.observability,l=e?e.list().map(m=>({name:m.name,dependencies:e.getDependencies(m.name),productions:e.getProductions(m.name)})):[],u=e?e.getAllRelationships():[],y=n?n.getPolicies().map(m=>({id:Xr(m.name),name:m.name,severity:m.severity,tags:m.tags?[...m.tags]:void 0,owner:m.owner,version:m.version,rationale:m.rationale,enforcementMode:m.enforcementMode,deprecated:m.deprecated,replacedBy:m.replacedBy,description:m.tags?.includes("layer")?"Enforces clean-architecture layer dependency rules on declared relationships.":void 0})):[],f=r?r.toJSON():[],g=o?o.toJSON():{nodes:[],edges:[]},h=f.filter(m=>(m.emits?.length??0)>0||(m.consumes?.length??0)>0).map(m=>({entity:m.name,emits:m.emits,consumes:m.consumes})),p=a?a.list().map(m=>({name:m.name,sourceIntents:m.sourceIntents,checkpoint:a.getCheckpoint(m.name)})):[],B={schemaVersion:"1.0",version:gn,exportedAt:new Date().toISOString(),intents:l,relationships:u,policies:y,entities:f,graph:g,architecture:i?{profile:i.name,layers:i.layers,rules:i.rules}:void 0,projections:p,eventContracts:c?.list()??[],observability:d?.report(),links:{entityIntents:h}};return new ct(B)}s(dt,"createArkManifest");var xe=class{static{s(this,"MetadataRegistryImpl")}entities=new Map;entity(e,n,r={}){if(this.entities.has(e)&&!r.allowOverwrite)throw new Error(`Entity metadata "${e}" is already registered.`);let o={name:e,fields:{},...n};return this.entities.set(e,o),o}getEntity(e){return this.entities.get(e)}listEntities(){return Array.from(this.entities.values())}findEntitiesByIntent(e){return this.listEntities().filter(n=>n.emits?.includes(e)||n.consumes?.includes(e))}validate(){let e=[];for(let n of this.entities.values()){n.name.trim()||e.push({entity:n.name,message:"Entity name is required."});for(let[r,o]of Object.entries(n.fields))r.trim()||e.push({entity:n.name,field:r,message:"Field name is required."}),(!o.type||typeof o.type!="string")&&e.push({entity:n.name,field:r,message:"Field type must be a non-empty string."}),o.relation&&!this.entities.has(o.relation.entity)&&e.push({entity:n.name,field:r,message:`Related entity "${o.relation.entity}" is not registered.`})}return{ok:e.length===0,issues:e}}toJSON(){return this.listEntities()}};function lt(){return new xe}s(lt,"createMetadataRegistry");function ut(t){return`${t.from}->${t.to}`}s(ut,"flowKey");function yn(t){let e=new Set,n=[];for(let r of t){let o=ut(r);e.has(o)||(e.add(o),n.push(r))}return n}s(yn,"uniqueFlows");function hn(t,e){let n=new Set(e.map(ut));return t.filter(r=>!n.has(ut(r)))}s(hn,"difference");function pt(t){let e=t.registry,n=t.eventBus,r=t.graph;return{report(){let o=e?e.getAllRelationships().filter(p=>p.kind==="produces").map(p=>({from:p.from,to:p.to})):[],i=o.length>0||!r?[]:r.getEdges().filter(p=>p.kind==="produces").map(p=>({from:p.from,to:p.to})),a=n?.getHistory().map(p=>({from:p.event.metadata.source,to:p.event.intent}))??[],c=a.length>0||!r?[]:r.getEdges().filter(p=>p.kind==="observed").map(p=>({from:p.from,to:p.to})),d=yn([...o,...i]),l=yn([...a,...c]),u=l.filter(p=>!p.from||p.from==="unknown"),y=e?Array.from(new Set(l.map(p=>p.from).filter(p=>p&&p!=="unknown"&&!e.has(p)))):[],f=e?Array.from(new Set(l.map(p=>p.to).filter(p=>!e.has(p)))):[],g=new Set(l.flatMap(p=>[p.from,p.to])),h=e?e.list().map(p=>p.name).filter(p=>!g.has(p)):[];return{generatedAt:new Date().toISOString(),declaredProductions:d,observedProductions:l,declaredButUnobserved:hn(d,l),observedButUndeclared:hn(l.filter(p=>p.from!=="unknown"),d),unknownSources:u,unregisteredObservedSources:y,unregisteredObservedIntents:f,registeredButNeverObserved:h}}}}s(pt,"createObservabilityReporter");var kn=0;function Zr(){return kn+=1,`outbox-${Date.now()}-${kn}`}s(Zr,"nextOutboxId");function wn(t){return{...t,event:{...t.event,metadata:{...t.event.metadata}}}}s(wn,"cloneRecord");var de=class{static{s(this,"InMemoryEventBuffer")}records=new Map;async enqueue(e){let n=new Date().toISOString(),r={id:Zr(),event:e,status:"pending",attempts:0,createdAt:n,updatedAt:n};return this.records.set(r.id,r),wn(r)}async markDispatched(e){let n=this.records.get(e);n&&(n.status="dispatched",n.updatedAt=new Date().toISOString())}async markFailed(e,n){let r=this.records.get(e);r&&(r.status="failed",r.attempts+=1,r.error=n instanceof Error?n.message:String(n),r.updatedAt=new Date().toISOString())}async list(e){return Array.from(this.records.values()).filter(n=>!e||n.status===e).map(wn)}async clear(){this.records.clear()}};var Ee=class{static{s(this,"InMemoryReadModelStore")}states=new Map;load(e){return this.states.get(e)}save(e,n){this.states.set(e,n)}clear(e){e?this.states.delete(e):this.states.clear()}};function Yr(t){return typeof t.initialState=="function"?t.initialState():t.initialState}s(Yr,"initialState");var Pe=class{static{s(this,"ProjectionRegistryImpl")}definitions=new Map;checkpoints=new Map;store;auditTrail;constructor(e={}){this.store=e.store??new Ee,this.auditTrail=e.auditTrail}register(e){if(this.definitions.has(e.name))throw new Error(`Projection "${e.name}" is already registered.`);this.definitions.set(e.name,e),this.checkpoints.set(e.name,{projection:e.name,appliedCount:0})}list(){return Array.from(this.definitions.values())}async apply(e){let n=[];for(let r of this.definitions.values()){if(!r.sourceIntents.includes(e.intent))continue;let o=await this.store.load(r.name)??Yr(r),i=await r.project(e,o);await this.store.save(r.name,i);let a=this.checkpoints.get(r.name);this.checkpoints.set(r.name,{projection:r.name,appliedCount:(a?.appliedCount??0)+1,lastIntent:e.intent,lastCorrelationId:e.metadata.correlationId,updatedAt:new Date().toISOString()}),await this.auditTrail?.record({type:"projection.applied",source:"Kernel.ProjectionRegistry",intent:e.intent,correlationId:e.metadata.correlationId,causationId:e.metadata.causationId,subject:r.name,details:{projection:r.name}}),n.push(r.name)}return n}async getState(e){return this.store.load(e)}getCheckpoint(e){return this.checkpoints.get(e)}getCheckpoints(){return Array.from(this.checkpoints.values())}async clear(){await this.store.clear();for(let e of this.definitions.values())this.checkpoints.set(e.name,{projection:e.name,appliedCount:0})}};function ft(t){return new Pe(t)}s(ft,"createProjectionRegistry");var Rn=0;function eo(t){return Rn+=1,`${t}-${Date.now()}-${Rn}`}s(eo,"createWorkflowId");function gt(t){return t instanceof Error?t.message:String(t)}s(gt,"errorMessage");function to(t){return new Promise(e=>{setTimeout(e,t)})}s(to,"sleep");async function no(t,e,n){let r=new AbortController;if(e===void 0)return t(r.signal);let o,i=new Promise((a,c)=>{o=setTimeout(()=>{let d=new Error(`Workflow step "${n}" timed out after ${e}ms.`);r.abort(d),c(d)},e)});try{return await Promise.race([t(r.signal),i])}finally{o&&clearTimeout(o)}}s(no,"withTimeout");var ve=class{static{s(this,"InMemoryWorkflowStore")}snapshots=new Map;save(e,n){let r=this.snapshots.get(e.id);if(r&&r.version!==e.version)throw new Error(`Optimistic concurrency conflict for workflow ${e.id}`);let o=(e.version??0)+1;this.snapshots.set(e.id,{...e,version:o,context:{...e.context}}),e.version=o}get(e,n){let r=this.snapshots.get(e);return r?{...r,context:{...r.context}}:void 0}list(e){return Array.from(this.snapshots.values()).filter(n=>!e||n.workflowName===e).map(n=>({...n,context:{...n.context}}))}claim(e,n,r){let o=Date.now();for(let i of this.snapshots.values()){if(r&&i.workflowName!==r||i.status!=="running"&&i.status!=="compensating")continue;let a=i.expiresAt?new Date(i.expiresAt).getTime()<o:!0;if(!i.ownerId||a){i.ownerId=e,i.expiresAt=new Date(o+n).toISOString();let c=(i.version??0)+1;return i.version=c,this.snapshots.set(i.id,{...i,context:{...i.context}}),{...i,context:{...i.context}}}}}clear(){this.snapshots.clear()}},mt=class{constructor(e,n={}){this.bus=e;this.options=n;this.store=n.store??new ve}bus;options;static{s(this,"WorkflowEngineImpl")}definitions=new Map;store;register(e){if(this.definitions.has(e.name))throw new Error(`Workflow "${e.name}" is already registered.`);let n=new Set;for(let r of e.steps){if(n.has(r.name))throw new Error(`Workflow "${e.name}" has duplicate step name "${r.name}".`);n.add(r.name)}if(this.definitions.set(e.name,e),e.startOn){let r=e.startOn;this.bus.subscribe(r.intent,async o=>{await this.start(e.name,r.mapEventToPayload(o))})}}async start(e,n,r={}){let o=this.definitions.get(e);if(!o)throw new Error(`Workflow "${e}" is not registered.`);let i=new Date().toISOString(),a={id:r.id??eo(e),version:0,workflowName:e,status:"running",context:{...n},completedSteps:[],attempts:{},startedAt:i,updatedAt:i};return await this.store.save(a,r.tx),await this.audit("workflow.started",a,{workflowName:e}),this.executeSnapshot(a,o,r.tx)}async resume(e,n={}){let r=await this.get(e,n.tx);if(!r)return;if(r.status!=="running"&&r.status!=="compensating")return r;let o=this.definitions.get(r.workflowName);if(!o)throw new Error(`Workflow "${r.workflowName}" is not registered.`);return this.executeSnapshot(r,o,n.tx)}async executeSnapshot(e,n,r){try{let o=n.steps.filter(i=>!e.completedSteps.includes(i.name));for(let i of o)await this.runStep(e,i,r);return e.status="completed",e.currentStep=void 0,e.completedAt=new Date().toISOString(),e.updatedAt=e.completedAt,await this.store.save(e,r),await this.audit("workflow.completed",e,{workflowName:e.workflowName}),{...e,context:{...e.context}}}catch(o){throw await this.compensate(e,n.steps,o,r),e.status="failed",e.currentStep=void 0,e.error=gt(o),e.updatedAt=new Date().toISOString(),await this.store.save(e,r),await this.audit("workflow.failed",e,{workflowName:e.workflowName,error:e.error,failedStep:e.failedStep}),o}}async get(e,n){return this.store.get(e,n)}async list(e){return this.store.list(e)}async runStep(e,n,r){let o=n.retry??this.options.defaultRetry??{attempts:1},i=Math.max(1,o.attempts);e.currentStep=n.name,e.updatedAt=new Date().toISOString(),await this.store.save(e,r);for(let a=1;a<=i;a+=1){e.attempts[n.name]=a,await this.store.save(e,r);let c;try{c=await no(d=>Promise.resolve(n.execute(e.context,this.bus,d)),n.timeoutMs,n.name)}catch(d){if(a<i){o.delayMs&&await to(o.delayMs);continue}throw e.failedStep=n.name,e.updatedAt=new Date().toISOString(),await this.store.save(e,r),await this.audit("workflow.step.failed",e,{step:n.name,attempt:a,error:gt(d)}),d}c&&Object.assign(e.context,c),e.completedSteps.push(n.name),e.currentStep=void 0,e.updatedAt=new Date().toISOString(),await this.store.save(e,r),await this.audit("workflow.step.completed",e,{step:n.name,attempt:a});return}throw new Error(`Workflow step "${n.name}" did not complete.`)}async compensate(e,n,r,o){e.status="compensating",e.updatedAt=new Date().toISOString(),await this.store.save(e,o);let i=n.filter(a=>e.completedSteps.includes(a.name));for(let a=i.length-1;a>=0;a-=1){let c=i[a];if(c.compensate)try{await Promise.resolve(c.compensate(e.context,this.bus,r)),await this.audit("workflow.compensation.completed",e,{step:c.name})}catch(d){await this.audit("workflow.step.failed",e,{step:c.name,compensation:!0,error:gt(d)})}}}async audit(e,n,r){await this.options.auditTrail?.record({type:e,source:"Kernel.WorkflowEngine",subject:n.id,details:r})}};function yt(t,e){return new mt(t,e)}s(yt,"createWorkflowEngine");H();var ro=new Set(["singleton","transient"]);function An(t){let e={id:t.id,lifetime:t.lifetime,uses:[...t.uses],reactsTo:[...t.reactsTo],raises:[...t.raises],sends:[...t.sends]};if(t.extendedInfo){let n=t.extendedInfo;e.extendedInfo={...n.label?{label:n.label}:{},...n.architectureKind?{architectureKind:n.architectureKind}:{},...n.tags?{tags:[...n.tags]}:{},...n.group?{group:n.group}:{},...n.metadata?{metadata:{...n.metadata}}:{}}}return e}s(An,"cloneComponent");function oo(t){if(t===void 0)return"singleton";if(typeof t=="string"&&ro.has(t))return t;throw new Error('ArkRun component lifetime must be "singleton" or "transient".')}s(oo,"closedLifetime");function In(){let t=new Map,e=new Map,n=new Set;function r(a){let c=t.get(a);if(!c)throw new Error(`ArkRun component "${a}" is not registered.`);return c}s(r,"mustRecord");function o(a,c){if(!c.factory)throw new Error(`ArkRun component "${a}" has no factory; declarations-only registrations cannot be resolved.`);if(n.has(a))throw new Error(`ArkRun component "${a}" has a circular resolve.`);n.add(a);try{return c.factory()}finally{n.delete(a)}}s(o,"instantiate");function i(a,c){if(e.has(a))return e.get(a);let d=o(a,c);return e.set(a,d),d}return s(i,"singleton"),{register(a){let c=typeof a?.id=="string"?a.id.trim():"";if(!c)throw new Error("ArkRun component id must be a non-empty string.");if(t.has(c))throw new Error(`ArkRun component "${c}" is already registered.`);let d=oo(a.lifetime),l=Me({id:c,lifetime:d,uses:a.uses,reactsTo:a.reactsTo,raises:a.raises,sends:a.sends,extendedInfo:a.extendedInfo});if(!l)throw new Error("ArkRun component id must be a non-empty string.");let u=typeof a.factory=="function"?a.factory:void 0;return t.set(c,{component:l,factory:u}),An(l)},resolve(a){let c=r(a);return c.component.lifetime==="transient"?o(a,c):i(a,c)},resolveSingleton(a){let c=r(a);if(c.component.lifetime==="transient")throw new Error(`ArkRun component "${a}" is transient; resolveSingleton requires lifetime "singleton".`);return i(a,c)},snapshotComponents(){return[...t.values()].map(a=>An(a.component))}}}s(In,"createComponentRegistry");ke();async function xn(t,e={}){let n=Ue({host:e.host,port:e.port,nodeEnv:e.nodeEnv,processNodeEnv:process.env.NODE_ENV}),{listenArkRunInspector:r}=await Promise.resolve().then(()=>(Sn(),bn));return r(t,{bind:n,sseIntervalMs:e.sseIntervalMs})}s(xn,"startArkRunInspector");ge();function fo(t){let e={...t.metadata??{}};if(t.source===void 0)return e;if(e.source&&e.source!==t.source)throw new N(t.source,e.source);return e.source=t.source,e}s(fo,"stampMetadata");function go(){}s(go,"ignoreDetachedFailure");async function ht(t,e,n,r={}){let o=Nt({transport:r.transport,ephemeral:r.ephemeral??t.defaultEphemeral,brokerBound:typeof t.broker?.send=="function"}),i=fo(r),a=await t.eventBus.dispatch(e,n,i,{notifySubscribers:o.notifySubscribers,awaitHandlers:o.awaitHandlers});if(o.deliveredVia==="broker"&&t.broker){let c=Promise.resolve(t.broker.send(a));o.awaitHandoff?await c:c.then(void 0,go)}return o}s(ht,"sendOnArkRunTransport");var mo=1e3,En=0;function yo(){return En+=1,`ark-kernel-${Date.now()}-${En}`}s(yo,"nextKernelInstanceId");function Pn(t,e){let n=t.constructor?.name;return typeof n=="string"&&n.length>0?n:e}s(Pn,"portConstructorId");function vn(t={}){let e=t.strict??!0,n=t.instanceId??yo(),r=t.profile??at,o=t.maxHistorySize??mo,i=it(),a=rt(),c=t.metadata??lt(),d=t.auditTrail===void 0,l=t.auditTrail??ze({maxRecords:o}),u=t.eventContracts??nt(),y=t.eventBuffer===void 0&&t.outbox===void 0,f=t.eventBuffer??t.outbox??new de,g=t.projections??ft({auditTrail:l}),h=new _([Qe(r),...t.policies??[]]),p=s(()=>{ot(i,a,{requireRegisteredTargets:!0})},"syncGraph"),B=t.ephemeral??!0,m=t.broker,T=new ae({intentRegistry:i,dependencyGraph:a,policyEngine:h,strictRegistry:!0,validateIntentNaming:!0,auditTrail:l,eventContracts:u,strictEventContracts:t.strictEventContracts??e,requireKnownSource:t.requireKnownSource??!0,architectureProfile:r,enforceObservedLayerFlow:t.enforceObservedLayerFlow??(e?"hard":"off"),eventBuffer:f,instanceId:n,maxHistorySize:o,onPublish:t.autoApplyProjections===!1?void 0:async k=>{await g.apply(k)}}),kt=yt(T,{auditTrail:l}),Ce=pt({registry:i,eventBus:T,graph:a}),M=In(),Cn=typeof m?.send=="function",On=y?"InMemoryEventBuffer":Pn(f,"EventBufferStore"),Nn=d?"InMemoryAuditStore":Pn(l,"AuditTrail"),Dn=We({stores:[Q(On,"outbox"),Q(Nn,"audit"),Q("InMemoryWorkflowStore","workflow")]}),Oe={instanceId:n,profile:r,registry:i,graph:a,metadata:c,auditTrail:l,eventContracts:u,eventBuffer:f,outbox:f,projections:g,policyEngine:h,eventBus:T,workflowEngine:kt,observability:Ce,publisher(k){let L=T.createPublisher(k);return{source:L.source,publish:L.publish,send(S,Ne,Tn={}){return ht({eventBus:T,broker:m,defaultEphemeral:B},S,Ne,{...Tn,source:L.source})}}},send(k,L,S={}){return ht({eventBus:T,broker:m,defaultEphemeral:B},k,L,S)},register(k){return M.register(k)},resolve(k){return M.resolve(k)},resolveSingleton(k){return M.resolveSingleton(k)},getDependencyInformationPackage(){return v({kernelInstanceId:n,components:M.snapshotComponents()})},requestGraph(k){return Ot({kernelInstanceId:n,components:M.snapshotComponents()},k)},getInspectorSnapshot(k){return _t({kernelInstanceId:n,host:k?.host,port:k?.port,package:{kernelInstanceId:n,components:M.snapshotComponents()},observability:Ce.report(),ephemeralDefault:B,brokerBound:Cn,hardening:Dn})},startInspector(k){return xn({getInspectorSnapshot:s(S=>Oe.getInspectorSnapshot(S),"getInspectorSnapshot"),requestGraph:s(S=>Oe.requestGraph(S),"requestGraph"),async listInspectorOutbox(){let[S,Ne]=await Promise.all([f.list("pending"),f.list("failed")]);return X([...S,...Ne],{sampleLimit:A})},async listInspectorWorkflows(){return Z(await kt.list(),{sampleLimit:A})}},k)},syncGraph:p,manifest(){return p(),dt({registry:i,policyEngine:h,metadata:c,graph:a,profile:r,projections:g,eventContracts:u,observability:Ce})}};return Oe}s(vn,"createArkKernel");var le=Symbol("ARK_KERNEL"),oc=s(()=>ho(le),"InjectArk"),P=class{static forRoot(e){let n=e&&"registry"in e?e:vn(e);return{module:P,global:!0,providers:[{provide:le,useValue:n}],exports:[le]}}static forRootAsync(e){return{module:P,global:!0,providers:[{provide:le,useFactory:e.useFactory,inject:e.inject??[]}],exports:[le]}}};s(P,"ArkModule"),P=wt([ko({})],P);export{le as ARK_KERNEL,P as ArkModule,oc as InjectArk};
18
+ `}return r.trim()}detectViolations(e=[]){let n=[],r=this.findSimpleCycles();r.length>0&&n.push(`Cycle detected: ${r.map(o=>o.join("->")).join(", ")}`);for(let o of e)try{let i=o(this.edges);i&&i.length&&n.push(...i)}catch(i){n.push(`Rule error: ${i.message}`)}return n}ensureNode(e){this.nodes.has(e)||this.nodes.set(e,{id:e})}addEdge(e){this.edges.some(r=>r.from===e.from&&r.to===e.to&&r.kind===e.kind)||this.edges.push(e)}findSimpleCycles(){let e=new Map;for(let c of this.edges)e.has(c.from)||e.set(c.from,[]),e.get(c.from).push(c.to);let n=[],r=new Set,o=[],i=s(c=>{r.add(c),o.push(c);for(let d of e.get(c)||[])if(!r.has(d))i(d);else if(o.includes(d)){let l=o.indexOf(d),u=o.slice(l).concat(d);n.push(u)}o.pop()},"dfs");for(let c of e.keys())r.has(c)||i(c);let a=new Set(n.map(c=>c.join("->")));return Array.from(a).map(c=>c.split("->"))}safeId(e){return e.replace(/[^a-zA-Z0-9_]/g,"_")}};function rt(){return new Se}s(rt,"createDependencyGraph");function ot(t,e,n={}){let r=n.requireRegisteredTargets??!1;for(let o of t.getAllRelationships())r&&!t.has(o.to)||(o.kind==="dependsOn"?e.registerDependency(o.from,o.to,"declared"):e.registerDependency(o.from,o.to,"produces"))}s(ot,"syncRegistryToGraph");var ce=class{static{s(this,"IntentRegistry")}intents=new Map;dependencies=new Map;productions=new Map;define(e,n){if(this.intents.has(e))throw new Error(`Intent "${e}" is already registered. Intent names must be unique within a registry.`);let r=s(i=>({intent:e,payload:i,metadata:{occurredAt:new Date().toISOString(),source:"unknown"}}),"fn");Object.defineProperty(r,"name",{value:e,enumerable:!0,configurable:!1,writable:!1});let o=r;if(this.intents.set(e,o),n?.dependsOn)for(let i of n.dependsOn)this.declareDependency(e,i);if(n?.produces)for(let i of n.produces)this.declareProduction(e,i);return o}declareDependency(e,n){this.dependencies.has(e)||this.dependencies.set(e,new Set),this.dependencies.get(e).add(n)}declareProduction(e,n){this.productions.has(e)||this.productions.set(e,new Set),this.productions.get(e).add(n)}get(e){return this.intents.get(e)}list(){return Array.from(this.intents.values())}getDependencies(e){let n=this.dependencies.get(e);return n?Array.from(n):[]}getProductions(e){let n=this.productions.get(e);return n?Array.from(n):[]}getAllRelationships(){let e=[];for(let[n,r]of this.dependencies.entries())for(let o of r)e.push({from:n,to:o,kind:"dependsOn"});for(let[n,r]of this.productions.entries())for(let o of r)e.push({from:n,to:o,kind:"produces"});return e}has(e){return this.intents.has(e)}clear(){this.intents.clear(),this.dependencies.clear(),this.productions.clear()}};var as=new ce;function it(){return new ce}s(it,"createIntentRegistry");var D={type:"array",items:{type:"string",minLength:1},uniqueItems:!0},cn={type:"object",additionalProperties:!1,properties:{mode:{type:"string",enum:["advisory","enforced"],default:"advisory"},compositionRoots:{...D,default:[]},kernelRoots:{...D},managedLayers:{...D,default:[]},requireDeclarations:{type:"boolean",default:!0},ignoreDirectNewForErrors:{type:"boolean",default:!0}}},dn={type:"object",additionalProperties:!1,properties:{mode:{type:"string",enum:["advisory","enforced"],default:"advisory"},planeRoots:{...D,default:[]},managedLayers:{...D,default:[]},maxXiKeys:{type:"integer",minimum:1,default:7},xiKeys:{...D,default:[]},appliesTo:{...D,default:[]}}};var ln="1.3",Vr=["public","auth","admin","internal"];var un="https://unpkg.com/arkgate@4/schemas/ark.config.schema.json",pn=["DomainModel","ApplicationOrchestration","PersistenceAdapters","IntegrationAdapters","WorkflowSagaEngine","BackgroundJobsScheduling","PresentationAdapters","ReportingReadModels","ExtensibilityMetadata","SecurityAuditObservability","Kernel"],Ur=new Set(["PresentationAdapters->ApplicationOrchestration","ApplicationOrchestration->DomainModel","WorkflowSagaEngine->ApplicationOrchestration","WorkflowSagaEngine->DomainModel","BackgroundJobsScheduling->ApplicationOrchestration"]);function Wr(){let t=[];for(let e of pn)for(let n of pn)e===n||Ur.has(`${e}->${n}`)||t.push({from:e,to:n,allowed:!1});return t}s(Wr,"createDefaultRules");var st=Wr();var w={type:"array",items:{type:"string",minLength:1},uniqueItems:!0},vs={$schema:"https://json-schema.org/draft/2020-12/schema",$id:un,title:"ArkGate architecture contract",description:"Versioned contract consumed identically by ArkGate CLI, MCP, and ESLint surfaces.",type:"object",additionalProperties:!1,required:["$schema","schemaVersion","include","layers","rules"],properties:{$schema:{type:"string",minLength:1,default:un,description:"Editor-facing URL or local path for this JSON Schema."},schemaVersion:{type:"string",const:ln,default:ln},name:{type:"string",minLength:1},include:{...w,minItems:1,default:["src"]},exclude:{...w,default:[]},excludeGenerated:{type:"boolean",default:!0},frameworkOverlay:{type:"string",minLength:1},layers:{type:"array",default:[],items:{$ref:"#/$defs/layer"}},rules:{type:"array",default:st,items:{$ref:"#/$defs/rule"}},cyclePolicy:{type:"string",enum:["strict","soft","framework-soft","off"],default:"strict"},dynamicImportAllowlist:{...w,default:[]},safety:{$ref:"#/$defs/safety",default:{maxTsSuppressions:0,maxAnyCasts:0,allowInMemory:!1,allowDisabledPeerIsolation:!1}},coverage:{$ref:"#/$defs/coverage"},arkRules:{type:"object",additionalProperties:{type:"string",minLength:1},default:{}},arkRun:{$ref:"#/$defs/arkRun"},arkOrder:{$ref:"#/$defs/arkOrder"},stewards:{...w,default:[]},requireLayerOwners:{type:"boolean"}},$defs:{layer:{type:"object",additionalProperties:!1,required:["name","patterns"],properties:{name:{type:"string",minLength:1},patterns:{...w,minItems:1},exclude:w,intentPrefixes:w,description:{type:"string",minLength:1},trustBoundary:{type:"string",enum:[...Vr]},owners:{...w,minItems:1},forbiddenGlobals:w,capabilities:{type:"object",additionalProperties:!1,properties:{deny:{type:"array",uniqueItems:!0,items:{type:"string",enum:["network","filesystem","clock","randomness","environment","process","persistence"]}}}},pure:{type:"boolean"},mayImportInfrastructure:{type:"boolean"},optional:{type:"boolean"},reserved:{type:"boolean"},allowEmpty:{type:"boolean"}}},rule:{type:"object",additionalProperties:!1,required:["from","to","allowed"],properties:{from:{type:"string",minLength:1},to:{type:"string",minLength:1},allowed:{type:"boolean"},message:{type:"string",minLength:1},peerIsolation:{type:"boolean"},sliceFolders:{...w,minItems:1},sharedRoots:{...w,minItems:1},allowedCrossSlice:{type:"array",minItems:1,items:{type:"object",additionalProperties:!1,required:["from","to"],properties:{from:{type:"string",minLength:1},to:{type:"string",minLength:1}}}}}},safety:{type:"object",additionalProperties:!1,properties:{maxTsSuppressions:{type:"integer",minimum:0,default:0},maxAnyCasts:{type:"integer",minimum:0,default:0},allowInMemory:{type:"boolean",default:!1},allowDisabledPeerIsolation:{type:"boolean",default:!1}}},coverage:{type:"object",additionalProperties:!1,description:"Invariant coverage scan controls. testGlobs replaces the built-in test-name heuristic; maxFiles raises or lowers the evidence file budget and also bounds structural-hint preload for orchestration-only, thin-adapter, and writes-via-aggregate (default 400; there is no arkrules.hintBudget); coverageRoots declares where the project runs its tests, so a covering test found outside them is reported instead of silently certifying an invariant. When any invariant is enforced, missing coverageRoots fails closed.",properties:{testGlobs:{...w,minItems:1},maxFiles:{type:"integer",minimum:1,description:"Evidence file budget (default 400) and structural-hint preload cap for orchestration-only, thin-adapter, and writes-via-aggregate. Raise this when hinted/governed counts show truncated sensors. There is no separate arkrules.hintBudget."},coverageRoots:{...w,minItems:1}}},arkRun:cn,arkOrder:dn}};function qr(t){return t.endsWith(".")?t:`${t}.`}s(qr,"normalizePrefix");function zr(t,e){let n=t.prefixes.length?Math.max(...t.prefixes.map(o=>o.length)):0;return(e.prefixes.length?Math.max(...e.prefixes.map(o=>o.length)):0)-n}s(zr,"byLongestPrefix");function fn(t){let e=t.layers.map(o=>({...o,prefixes:o.prefixes.map(qr)})),n=[...e].sort(zr),r=[...t.rules??[]];return{name:t.name,layers:e,rules:r,resolveLayer(o){return e.find(i=>i.match?.(o))?.name??n.find(i=>i.prefixes.some(a=>o.startsWith(a)))?.name}}}s(fn,"createArchitectureProfile");var Jr=[{name:"DomainModel",prefixes:["Domain"],description:"Rich domain model, business rules, and domain events.",order:1},{name:"ApplicationOrchestration",prefixes:["Application"],description:"Use cases and command orchestration.",order:2},{name:"PersistenceAdapters",prefixes:["Adapter.Persistence","Adapter.Repository"],description:"Database, repository, and storage adapters.",order:3},{name:"IntegrationAdapters",prefixes:["Adapter.Integration","Adapter.External"],description:"External systems, APIs, and integration adapters.",order:4},{name:"WorkflowSagaEngine",prefixes:["Workflow"],description:"Sagas, workflows, and long-running processes.",order:5},{name:"BackgroundJobsScheduling",prefixes:["Job"],description:"Background jobs, scheduled work, and async processors.",order:6},{name:"PresentationAdapters",prefixes:["Presentation","Adapter.Presentation","Adapter.Api"],description:"API, UI, controller, and presentation adapters.",order:7},{name:"ReportingReadModels",prefixes:["Reporting"],description:"Read models, projections, and reporting surfaces.",order:8},{name:"ExtensibilityMetadata",prefixes:["Metadata"],description:"Metadata, extensions, and schema contracts.",order:9},{name:"SecurityAuditObservability",prefixes:["Security","Audit","Observability"],description:"Security, audit, and observability concerns.",order:10},{name:"Kernel",prefixes:["Kernel"],description:"Ark-owned governance and kernel signals.",order:11}],at=fn({name:"Ark 11-layer Hexagonal Event-Driven Profile",layers:Jr,rules:st.map(t=>({...t}))});var gn="4.8.17";function Xr(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}s(Xr,"policyId");var ct=class{constructor(e){this.data=e}data;static{s(this,"ArkManifestImpl")}toJSON(){return{...this.data}}};function dt(t={}){let e=t.registry,n=t.policyEngine,r=t.metadata,o=t.graph,i=t.profile,a=t.projections,c=t.eventContracts,d=t.observability,l=e?e.list().map(m=>({name:m.name,dependencies:e.getDependencies(m.name),productions:e.getProductions(m.name)})):[],u=e?e.getAllRelationships():[],y=n?n.getPolicies().map(m=>({id:Xr(m.name),name:m.name,severity:m.severity,tags:m.tags?[...m.tags]:void 0,owner:m.owner,version:m.version,rationale:m.rationale,enforcementMode:m.enforcementMode,deprecated:m.deprecated,replacedBy:m.replacedBy,description:m.tags?.includes("layer")?"Enforces clean-architecture layer dependency rules on declared relationships.":void 0})):[],f=r?r.toJSON():[],g=o?o.toJSON():{nodes:[],edges:[]},h=f.filter(m=>(m.emits?.length??0)>0||(m.consumes?.length??0)>0).map(m=>({entity:m.name,emits:m.emits,consumes:m.consumes})),p=a?a.list().map(m=>({name:m.name,sourceIntents:m.sourceIntents,checkpoint:a.getCheckpoint(m.name)})):[],B={schemaVersion:"1.0",version:gn,exportedAt:new Date().toISOString(),intents:l,relationships:u,policies:y,entities:f,graph:g,architecture:i?{profile:i.name,layers:i.layers,rules:i.rules}:void 0,projections:p,eventContracts:c?.list()??[],observability:d?.report(),links:{entityIntents:h}};return new ct(B)}s(dt,"createArkManifest");var xe=class{static{s(this,"MetadataRegistryImpl")}entities=new Map;entity(e,n,r={}){if(this.entities.has(e)&&!r.allowOverwrite)throw new Error(`Entity metadata "${e}" is already registered.`);let o={name:e,fields:{},...n};return this.entities.set(e,o),o}getEntity(e){return this.entities.get(e)}listEntities(){return Array.from(this.entities.values())}findEntitiesByIntent(e){return this.listEntities().filter(n=>n.emits?.includes(e)||n.consumes?.includes(e))}validate(){let e=[];for(let n of this.entities.values()){n.name.trim()||e.push({entity:n.name,message:"Entity name is required."});for(let[r,o]of Object.entries(n.fields))r.trim()||e.push({entity:n.name,field:r,message:"Field name is required."}),(!o.type||typeof o.type!="string")&&e.push({entity:n.name,field:r,message:"Field type must be a non-empty string."}),o.relation&&!this.entities.has(o.relation.entity)&&e.push({entity:n.name,field:r,message:`Related entity "${o.relation.entity}" is not registered.`})}return{ok:e.length===0,issues:e}}toJSON(){return this.listEntities()}};function lt(){return new xe}s(lt,"createMetadataRegistry");function ut(t){return`${t.from}->${t.to}`}s(ut,"flowKey");function yn(t){let e=new Set,n=[];for(let r of t){let o=ut(r);e.has(o)||(e.add(o),n.push(r))}return n}s(yn,"uniqueFlows");function hn(t,e){let n=new Set(e.map(ut));return t.filter(r=>!n.has(ut(r)))}s(hn,"difference");function pt(t){let e=t.registry,n=t.eventBus,r=t.graph;return{report(){let o=e?e.getAllRelationships().filter(p=>p.kind==="produces").map(p=>({from:p.from,to:p.to})):[],i=o.length>0||!r?[]:r.getEdges().filter(p=>p.kind==="produces").map(p=>({from:p.from,to:p.to})),a=n?.getHistory().map(p=>({from:p.event.metadata.source,to:p.event.intent}))??[],c=a.length>0||!r?[]:r.getEdges().filter(p=>p.kind==="observed").map(p=>({from:p.from,to:p.to})),d=yn([...o,...i]),l=yn([...a,...c]),u=l.filter(p=>!p.from||p.from==="unknown"),y=e?Array.from(new Set(l.map(p=>p.from).filter(p=>p&&p!=="unknown"&&!e.has(p)))):[],f=e?Array.from(new Set(l.map(p=>p.to).filter(p=>!e.has(p)))):[],g=new Set(l.flatMap(p=>[p.from,p.to])),h=e?e.list().map(p=>p.name).filter(p=>!g.has(p)):[];return{generatedAt:new Date().toISOString(),declaredProductions:d,observedProductions:l,declaredButUnobserved:hn(d,l),observedButUndeclared:hn(l.filter(p=>p.from!=="unknown"),d),unknownSources:u,unregisteredObservedSources:y,unregisteredObservedIntents:f,registeredButNeverObserved:h}}}}s(pt,"createObservabilityReporter");var kn=0;function Zr(){return kn+=1,`outbox-${Date.now()}-${kn}`}s(Zr,"nextOutboxId");function wn(t){return{...t,event:{...t.event,metadata:{...t.event.metadata}}}}s(wn,"cloneRecord");var de=class{static{s(this,"InMemoryEventBuffer")}records=new Map;async enqueue(e){let n=new Date().toISOString(),r={id:Zr(),event:e,status:"pending",attempts:0,createdAt:n,updatedAt:n};return this.records.set(r.id,r),wn(r)}async markDispatched(e){let n=this.records.get(e);n&&(n.status="dispatched",n.updatedAt=new Date().toISOString())}async markFailed(e,n){let r=this.records.get(e);r&&(r.status="failed",r.attempts+=1,r.error=n instanceof Error?n.message:String(n),r.updatedAt=new Date().toISOString())}async list(e){return Array.from(this.records.values()).filter(n=>!e||n.status===e).map(wn)}async clear(){this.records.clear()}};var Ee=class{static{s(this,"InMemoryReadModelStore")}states=new Map;load(e){return this.states.get(e)}save(e,n){this.states.set(e,n)}clear(e){e?this.states.delete(e):this.states.clear()}};function Yr(t){return typeof t.initialState=="function"?t.initialState():t.initialState}s(Yr,"initialState");var Pe=class{static{s(this,"ProjectionRegistryImpl")}definitions=new Map;checkpoints=new Map;store;auditTrail;constructor(e={}){this.store=e.store??new Ee,this.auditTrail=e.auditTrail}register(e){if(this.definitions.has(e.name))throw new Error(`Projection "${e.name}" is already registered.`);this.definitions.set(e.name,e),this.checkpoints.set(e.name,{projection:e.name,appliedCount:0})}list(){return Array.from(this.definitions.values())}async apply(e){let n=[];for(let r of this.definitions.values()){if(!r.sourceIntents.includes(e.intent))continue;let o=await this.store.load(r.name)??Yr(r),i=await r.project(e,o);await this.store.save(r.name,i);let a=this.checkpoints.get(r.name);this.checkpoints.set(r.name,{projection:r.name,appliedCount:(a?.appliedCount??0)+1,lastIntent:e.intent,lastCorrelationId:e.metadata.correlationId,updatedAt:new Date().toISOString()}),await this.auditTrail?.record({type:"projection.applied",source:"Kernel.ProjectionRegistry",intent:e.intent,correlationId:e.metadata.correlationId,causationId:e.metadata.causationId,subject:r.name,details:{projection:r.name}}),n.push(r.name)}return n}async getState(e){return this.store.load(e)}getCheckpoint(e){return this.checkpoints.get(e)}getCheckpoints(){return Array.from(this.checkpoints.values())}async clear(){await this.store.clear();for(let e of this.definitions.values())this.checkpoints.set(e.name,{projection:e.name,appliedCount:0})}};function ft(t){return new Pe(t)}s(ft,"createProjectionRegistry");var Rn=0;function eo(t){return Rn+=1,`${t}-${Date.now()}-${Rn}`}s(eo,"createWorkflowId");function gt(t){return t instanceof Error?t.message:String(t)}s(gt,"errorMessage");function to(t){return new Promise(e=>{setTimeout(e,t)})}s(to,"sleep");async function no(t,e,n){let r=new AbortController;if(e===void 0)return t(r.signal);let o,i=new Promise((a,c)=>{o=setTimeout(()=>{let d=new Error(`Workflow step "${n}" timed out after ${e}ms.`);r.abort(d),c(d)},e)});try{return await Promise.race([t(r.signal),i])}finally{o&&clearTimeout(o)}}s(no,"withTimeout");var ve=class{static{s(this,"InMemoryWorkflowStore")}snapshots=new Map;save(e,n){let r=this.snapshots.get(e.id);if(r&&r.version!==e.version)throw new Error(`Optimistic concurrency conflict for workflow ${e.id}`);let o=(e.version??0)+1;this.snapshots.set(e.id,{...e,version:o,context:{...e.context}}),e.version=o}get(e,n){let r=this.snapshots.get(e);return r?{...r,context:{...r.context}}:void 0}list(e){return Array.from(this.snapshots.values()).filter(n=>!e||n.workflowName===e).map(n=>({...n,context:{...n.context}}))}claim(e,n,r){let o=Date.now();for(let i of this.snapshots.values()){if(r&&i.workflowName!==r||i.status!=="running"&&i.status!=="compensating")continue;let a=i.expiresAt?new Date(i.expiresAt).getTime()<o:!0;if(!i.ownerId||a){i.ownerId=e,i.expiresAt=new Date(o+n).toISOString();let c=(i.version??0)+1;return i.version=c,this.snapshots.set(i.id,{...i,context:{...i.context}}),{...i,context:{...i.context}}}}}clear(){this.snapshots.clear()}},mt=class{constructor(e,n={}){this.bus=e;this.options=n;this.store=n.store??new ve}bus;options;static{s(this,"WorkflowEngineImpl")}definitions=new Map;store;register(e){if(this.definitions.has(e.name))throw new Error(`Workflow "${e.name}" is already registered.`);let n=new Set;for(let r of e.steps){if(n.has(r.name))throw new Error(`Workflow "${e.name}" has duplicate step name "${r.name}".`);n.add(r.name)}if(this.definitions.set(e.name,e),e.startOn){let r=e.startOn;this.bus.subscribe(r.intent,async o=>{await this.start(e.name,r.mapEventToPayload(o))})}}async start(e,n,r={}){let o=this.definitions.get(e);if(!o)throw new Error(`Workflow "${e}" is not registered.`);let i=new Date().toISOString(),a={id:r.id??eo(e),version:0,workflowName:e,status:"running",context:{...n},completedSteps:[],attempts:{},startedAt:i,updatedAt:i};return await this.store.save(a,r.tx),await this.audit("workflow.started",a,{workflowName:e}),this.executeSnapshot(a,o,r.tx)}async resume(e,n={}){let r=await this.get(e,n.tx);if(!r)return;if(r.status!=="running"&&r.status!=="compensating")return r;let o=this.definitions.get(r.workflowName);if(!o)throw new Error(`Workflow "${r.workflowName}" is not registered.`);return this.executeSnapshot(r,o,n.tx)}async executeSnapshot(e,n,r){try{let o=n.steps.filter(i=>!e.completedSteps.includes(i.name));for(let i of o)await this.runStep(e,i,r);return e.status="completed",e.currentStep=void 0,e.completedAt=new Date().toISOString(),e.updatedAt=e.completedAt,await this.store.save(e,r),await this.audit("workflow.completed",e,{workflowName:e.workflowName}),{...e,context:{...e.context}}}catch(o){throw await this.compensate(e,n.steps,o,r),e.status="failed",e.currentStep=void 0,e.error=gt(o),e.updatedAt=new Date().toISOString(),await this.store.save(e,r),await this.audit("workflow.failed",e,{workflowName:e.workflowName,error:e.error,failedStep:e.failedStep}),o}}async get(e,n){return this.store.get(e,n)}async list(e){return this.store.list(e)}async runStep(e,n,r){let o=n.retry??this.options.defaultRetry??{attempts:1},i=Math.max(1,o.attempts);e.currentStep=n.name,e.updatedAt=new Date().toISOString(),await this.store.save(e,r);for(let a=1;a<=i;a+=1){e.attempts[n.name]=a,await this.store.save(e,r);let c;try{c=await no(d=>Promise.resolve(n.execute(e.context,this.bus,d)),n.timeoutMs,n.name)}catch(d){if(a<i){o.delayMs&&await to(o.delayMs);continue}throw e.failedStep=n.name,e.updatedAt=new Date().toISOString(),await this.store.save(e,r),await this.audit("workflow.step.failed",e,{step:n.name,attempt:a,error:gt(d)}),d}c&&Object.assign(e.context,c),e.completedSteps.push(n.name),e.currentStep=void 0,e.updatedAt=new Date().toISOString(),await this.store.save(e,r),await this.audit("workflow.step.completed",e,{step:n.name,attempt:a});return}throw new Error(`Workflow step "${n.name}" did not complete.`)}async compensate(e,n,r,o){e.status="compensating",e.updatedAt=new Date().toISOString(),await this.store.save(e,o);let i=n.filter(a=>e.completedSteps.includes(a.name));for(let a=i.length-1;a>=0;a-=1){let c=i[a];if(c.compensate)try{await Promise.resolve(c.compensate(e.context,this.bus,r)),await this.audit("workflow.compensation.completed",e,{step:c.name})}catch(d){await this.audit("workflow.step.failed",e,{step:c.name,compensation:!0,error:gt(d)})}}}async audit(e,n,r){await this.options.auditTrail?.record({type:e,source:"Kernel.WorkflowEngine",subject:n.id,details:r})}};function yt(t,e){return new mt(t,e)}s(yt,"createWorkflowEngine");H();var ro=new Set(["singleton","transient"]);function An(t){let e={id:t.id,lifetime:t.lifetime,uses:[...t.uses],reactsTo:[...t.reactsTo],raises:[...t.raises],sends:[...t.sends]};if(t.extendedInfo){let n=t.extendedInfo;e.extendedInfo={...n.label?{label:n.label}:{},...n.architectureKind?{architectureKind:n.architectureKind}:{},...n.tags?{tags:[...n.tags]}:{},...n.group?{group:n.group}:{},...n.metadata?{metadata:{...n.metadata}}:{}}}return e}s(An,"cloneComponent");function oo(t){if(t===void 0)return"singleton";if(typeof t=="string"&&ro.has(t))return t;throw new Error('ArkRun component lifetime must be "singleton" or "transient".')}s(oo,"closedLifetime");function In(){let t=new Map,e=new Map,n=new Set;function r(a){let c=t.get(a);if(!c)throw new Error(`ArkRun component "${a}" is not registered.`);return c}s(r,"mustRecord");function o(a,c){if(!c.factory)throw new Error(`ArkRun component "${a}" has no factory; declarations-only registrations cannot be resolved.`);if(n.has(a))throw new Error(`ArkRun component "${a}" has a circular resolve.`);n.add(a);try{return c.factory()}finally{n.delete(a)}}s(o,"instantiate");function i(a,c){if(e.has(a))return e.get(a);let d=o(a,c);return e.set(a,d),d}return s(i,"singleton"),{register(a){let c=typeof a?.id=="string"?a.id.trim():"";if(!c)throw new Error("ArkRun component id must be a non-empty string.");if(t.has(c))throw new Error(`ArkRun component "${c}" is already registered.`);let d=oo(a.lifetime),l=Me({id:c,lifetime:d,uses:a.uses,reactsTo:a.reactsTo,raises:a.raises,sends:a.sends,extendedInfo:a.extendedInfo});if(!l)throw new Error("ArkRun component id must be a non-empty string.");let u=typeof a.factory=="function"?a.factory:void 0;return t.set(c,{component:l,factory:u}),An(l)},resolve(a){let c=r(a);return c.component.lifetime==="transient"?o(a,c):i(a,c)},resolveSingleton(a){let c=r(a);if(c.component.lifetime==="transient")throw new Error(`ArkRun component "${a}" is transient; resolveSingleton requires lifetime "singleton".`);return i(a,c)},snapshotComponents(){return[...t.values()].map(a=>An(a.component))}}}s(In,"createComponentRegistry");ke();async function xn(t,e={}){let n=Ue({host:e.host,port:e.port,nodeEnv:e.nodeEnv,processNodeEnv:process.env.NODE_ENV}),{listenArkRunInspector:r}=await Promise.resolve().then(()=>(Sn(),bn));return r(t,{bind:n,sseIntervalMs:e.sseIntervalMs})}s(xn,"startArkRunInspector");ge();function fo(t){let e={...t.metadata??{}};if(t.source===void 0)return e;if(e.source&&e.source!==t.source)throw new N(t.source,e.source);return e.source=t.source,e}s(fo,"stampMetadata");function go(){}s(go,"ignoreDetachedFailure");async function ht(t,e,n,r={}){let o=Nt({transport:r.transport,ephemeral:r.ephemeral??t.defaultEphemeral,brokerBound:typeof t.broker?.send=="function"}),i=fo(r),a=await t.eventBus.dispatch(e,n,i,{notifySubscribers:o.notifySubscribers,awaitHandlers:o.awaitHandlers});if(o.deliveredVia==="broker"&&t.broker){let c=Promise.resolve(t.broker.send(a));o.awaitHandoff?await c:c.then(void 0,go)}return o}s(ht,"sendOnArkRunTransport");var mo=1e3,En=0;function yo(){return En+=1,`ark-kernel-${Date.now()}-${En}`}s(yo,"nextKernelInstanceId");function Pn(t,e){let n=t.constructor?.name;return typeof n=="string"&&n.length>0?n:e}s(Pn,"portConstructorId");function vn(t={}){let e=t.strict??!0,n=t.instanceId??yo(),r=t.profile??at,o=t.maxHistorySize??mo,i=it(),a=rt(),c=t.metadata??lt(),d=t.auditTrail===void 0,l=t.auditTrail??ze({maxRecords:o}),u=t.eventContracts??nt(),y=t.eventBuffer===void 0&&t.outbox===void 0,f=t.eventBuffer??t.outbox??new de,g=t.projections??ft({auditTrail:l}),h=new _([Qe(r),...t.policies??[]]),p=s(()=>{ot(i,a,{requireRegisteredTargets:!0})},"syncGraph"),B=t.ephemeral??!0,m=t.broker,T=new ae({intentRegistry:i,dependencyGraph:a,policyEngine:h,strictRegistry:!0,validateIntentNaming:!0,auditTrail:l,eventContracts:u,strictEventContracts:t.strictEventContracts??e,requireKnownSource:t.requireKnownSource??!0,architectureProfile:r,enforceObservedLayerFlow:t.enforceObservedLayerFlow??(e?"hard":"off"),eventBuffer:f,instanceId:n,maxHistorySize:o,onPublish:t.autoApplyProjections===!1?void 0:async k=>{await g.apply(k)}}),kt=yt(T,{auditTrail:l}),Ce=pt({registry:i,eventBus:T,graph:a}),M=In(),Cn=typeof m?.send=="function",On=y?"InMemoryEventBuffer":Pn(f,"EventBufferStore"),Nn=d?"InMemoryAuditStore":Pn(l,"AuditTrail"),Dn=We({stores:[Q(On,"outbox"),Q(Nn,"audit"),Q("InMemoryWorkflowStore","workflow")]}),Oe={instanceId:n,profile:r,registry:i,graph:a,metadata:c,auditTrail:l,eventContracts:u,eventBuffer:f,outbox:f,projections:g,policyEngine:h,eventBus:T,workflowEngine:kt,observability:Ce,publisher(k){let L=T.createPublisher(k);return{source:L.source,publish:L.publish,send(S,Ne,Tn={}){return ht({eventBus:T,broker:m,defaultEphemeral:B},S,Ne,{...Tn,source:L.source})}}},send(k,L,S={}){return ht({eventBus:T,broker:m,defaultEphemeral:B},k,L,S)},register(k){return M.register(k)},resolve(k){return M.resolve(k)},resolveSingleton(k){return M.resolveSingleton(k)},getDependencyInformationPackage(){return v({kernelInstanceId:n,components:M.snapshotComponents()})},requestGraph(k){return Ot({kernelInstanceId:n,components:M.snapshotComponents()},k)},getInspectorSnapshot(k){return _t({kernelInstanceId:n,host:k?.host,port:k?.port,package:{kernelInstanceId:n,components:M.snapshotComponents()},observability:Ce.report(),ephemeralDefault:B,brokerBound:Cn,hardening:Dn})},startInspector(k){return xn({getInspectorSnapshot:s(S=>Oe.getInspectorSnapshot(S),"getInspectorSnapshot"),requestGraph:s(S=>Oe.requestGraph(S),"requestGraph"),async listInspectorOutbox(){let[S,Ne]=await Promise.all([f.list("pending"),f.list("failed")]);return X([...S,...Ne],{sampleLimit:A})},async listInspectorWorkflows(){return Z(await kt.list(),{sampleLimit:A})}},k)},syncGraph:p,manifest(){return p(),dt({registry:i,policyEngine:h,metadata:c,graph:a,profile:r,projections:g,eventContracts:u,observability:Ce})}};return Oe}s(vn,"createArkKernel");var le=Symbol("ARK_KERNEL"),oc=s(()=>ho(le),"InjectArk"),P=class{static forRoot(e){let n=e&&"registry"in e?e:vn(e);return{module:P,global:!0,providers:[{provide:le,useValue:n}],exports:[le]}}static forRootAsync(e){return{module:P,global:!0,providers:[{provide:le,useFactory:e.useFactory,inject:e.inject??[]}],exports:[le]}}};s(P,"ArkModule"),P=wt([ko({})],P);export{le as ARK_KERNEL,P as ArkModule,oc as InjectArk};