@visiq/harness 0.2.7 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -8,13 +8,17 @@ process, before it runs**. Decisions are made by the same compiled governance
8
8
  core (`@visiq/core-wasm`) that powers the VisIQ platform — so what you enforce
9
9
  locally is exactly what the control plane authored.
10
10
 
11
- - **Fail-closed by design**if a decision can't be made (core unavailable,
12
- network error, malformed policy), the call is **denied**, never allowed.
11
+ - **Fail-open by default, loudly strict deny is opt-in.** A policy **deny**
12
+ always blocks. But if VisIQ *itself* can't reach a decision (core unavailable,
13
+ network error, no bundle), the call proceeds **ungoverned** with a loud
14
+ fail-open report rather than stalling your agent — a VisIQ fault must never
15
+ become your outage. Set `VISIQ_FAIL_MODE=closed` (or `failMode: 'closed'`) to
16
+ deny in that case instead.
13
17
  - **One call to adopt** — `visiq(target)` wraps a framework executor or an
14
18
  individual tool. No rewrite of your agent.
15
19
  - **Human-in-the-loop** — an `approval_required` decision blocks the tool and
16
- waits for a human to approve/deny (bounded by a timeout that itself
17
- fails closed).
20
+ waits for a human to approve/deny, bounded by a timeout. When the timeout
21
+ elapses the call is blocked.
18
22
  - **Retrieval redaction** — masks sensitive fields in retrieved content
19
23
  according to policy.
20
24
 
@@ -74,9 +78,12 @@ spawn("node", ["summarizer.js"], { env: { ...process.env, ...childEnv } });
74
78
  - **Deny is terminal** — a denied tool call throws before the tool runs; the
75
79
  underlying tool is never invoked.
76
80
  - **Approval blocks** — an `approval_required` decision suspends the call until
77
- a human resolves it, or the HITL timeout elapses (then it fails closed).
78
- - **Errors fail closed** any evaluation error results in denial, never a
79
- silent allow.
81
+ a human resolves it, or the HITL timeout elapses (then the call is blocked).
82
+ - **Harness errors fail OPEN by default, but never silently** an evaluation
83
+ error proceeds ungoverned with a loud fail-open report on stderr and a
84
+ `failOpen` flag on the decision, so it is always visible in your telemetry.
85
+ Set `VISIQ_FAIL_MODE=closed` to deny instead. This governs VisIQ's own
86
+ failures only — it never softens a policy outcome.
80
87
 
81
88
  ## License
82
89
 
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
- import{randomUUID as sa}from"node:crypto";import*as Ge from"node:fs";import*as He from"node:path";import*as lr from"node:os";import{AsyncLocalStorage as la}from"node:async_hooks";import{z as p}from"zod";import*as P from"node:os";import{randomUUID as ue}from"node:crypto";var We=1,Tt="X-VisIQ-SDK",Et="X-VisIQ-Dialect",Rt="unknown";function H(e,t=1){return{[Tt]:e&&e.length>0?e:Rt,[Et]:String(t)}}var Ct="interceptor_source",_r=p.enum(["enforce","audit","off"]),yr=p.enum(["closed","open"]),xt=p.enum(["enforce","monitor","off"]),br=p.object({apiKey:p.string().min(1,"apiKey is required"),agentId:p.string().min(1,"agentId is required"),endpoint:p.string().url().optional(),mode:_r.optional(),timeoutMs:p.number().int().positive().optional(),hitlTimeoutMs:p.number().int().positive().optional(),failBehavior:yr.optional()}),Ra=p.object({agent_id:p.string().min(1),target_app:p.string().min(1),action:p.string().min(1),context:p.record(p.unknown()).optional(),session_id:p.string().min(1).max(255).optional(),telemetry:p.record(p.unknown()).optional()}),vr=p.object({field:p.string().optional(),pattern:p.string().optional(),replacement:p.string().optional(),mode:p.enum(["full","partial","email"]).optional(),keepFirst:p.number().optional(),keepLast:p.number().optional(),maskChar:p.string().optional()}),wr=p.object({decision_id:p.string().min(1),decision:p.enum(["permit","deny","approval_required","mask"]),reason:p.string().optional(),rule_code:p.string().nullable().optional(),enforced:p.boolean().optional(),agent_mode:xt.optional(),arg_redaction_rules:p.array(vr).optional(),plane:p.string().nullable().optional(),operation:p.string().nullable().optional(),is_retrieval:p.boolean().optional(),metadata:p.record(p.unknown()).optional()}),kr=p.object({field:p.string().min(1),operator:p.enum(["equals","in","not_equals","not_in","glob","gt","lt","gte","lte","contains","not_contains"]),value:p.union([p.string(),p.number(),p.array(p.string())])}),Ar=p.object({id:p.string().min(1),rule_code:p.string().default(""),name:p.string().min(1),description:p.string().nullable().default(null),effect:p.enum(["allow","deny","hitl","mask"]),resource_type:p.string().min(1),rego_source:p.string().default(""),target_app:p.string().nullable().default(null),action_pattern:p.string().nullable().default(null),conditions:p.array(kr).default([]),priority:p.number().int().default(0)}),Ir=p.object({version:p.string().min(1),agent_mode:xt.optional(),rules:p.array(Ar),no_coverage:p.object({no_coverage_defaults:p.record(p.string()),autopilot_enabled:p.boolean(),enduser_hitl_enabled:p.boolean(),hitl_timeout_seconds:p.number()}).optional()}),Sr=2e3,Qe=class{config;originalFetch;constructor(e,t){this.config=e,this.originalFetch=t}versionHeaders(){return H(this.config.sdkVersion,this.config.sdkDialect)}async evaluate(e){let t=new AbortController,n=setTimeout(()=>t.abort(),this.config.timeoutMs),r;try{r=await this.originalFetch(`${this.config.endpoint}/allow/evaluate`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.versionHeaders()},body:JSON.stringify(e),signal:t.signal})}finally{clearTimeout(n)}if(!r.ok)throw new Error(`ALLOW evaluate request failed: HTTP ${r.status} ${r.statusText}`);let i=await r.json();return wr.parse(i)}async fetchBundle(){let e=this.config.agentId?`?agent_id=${encodeURIComponent(this.config.agentId)}`:"",t=`${this.config.endpoint}/allow/rules/bundle${e}`,n=new AbortController,r=setTimeout(()=>n.abort(),this.config.timeoutMs),i;try{i=await this.originalFetch(t,{method:"GET",headers:{Authorization:`Bearer ${this.config.apiKey}`,Accept:"application/json",...this.versionHeaders()},signal:n.signal})}finally{clearTimeout(r)}if(!i.ok)throw new Error(`ALLOW rules/bundle fetch failed: HTTP ${i.status} ${i.statusText}`);let o=await i.json();return Ir.parse(o)}async sendTelemetry(e){if(e.length===0)return;let t=`${this.config.endpoint}/allow/telemetry`,n=await this.originalFetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.versionHeaders()},body:JSON.stringify({decisions:e})});if(!n.ok)throw new Error(`ALLOW telemetry delivery failed: HTTP ${n.status} ${n.statusText}`)}async sendCognition(e,t){if(t.length===0)return;let n=`${this.config.endpoint}/allow/cognition`,r=await this.originalFetch(n,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.versionHeaders()},body:JSON.stringify({...e?{session:e}:{},beats:t})});if(!r.ok)throw new Error(`ALLOW cognition delivery failed: HTTP ${r.status} ${r.statusText}`)}async reportExecutionResult(e,t,n){let r=`${this.config.endpoint}/allow/execution-events`;try{let i=await this.originalFetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.versionHeaders()},body:JSON.stringify({decision_id:e,result:t,details:n})});i.ok||console.warn(`[ALLOW] Execution result report failed: HTTP ${i.status}`)}catch(i){console.warn("[ALLOW] Execution result report failed:",i)}}async registerEnvironment(e){if(!this.config.agentId)return;let t=`${this.config.endpoint}/allow/agents/register`;try{let n=await this.originalFetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.versionHeaders()},body:JSON.stringify({agent_id:this.config.agentId,os:e.os,hostname:e.hostname,ip:e.ip,username:e.username,...this.config.harnessKind?{kind:this.config.harnessKind}:{},...e.agent_type?{agent_type:e.agent_type}:{}})});n.ok||console.warn(`[ALLOW] Agent registration failed: HTTP ${n.status} ${n.statusText}`)}catch(n){console.warn("[ALLOW] Agent registration failed:",n)}}async reportToolSurface(e){if(!this.config.agentId||e.length===0)return;let t=`${this.config.endpoint}/allow/agents/tools`;try{let n=await this.originalFetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.versionHeaders()},body:JSON.stringify({agent_id:this.config.agentId,tools:e})});n.ok||console.warn(`[ALLOW] Tool-surface report failed: HTTP ${n.status} ${n.statusText}`)}catch(n){console.warn("[ALLOW] Tool-surface report failed:",n)}}async waitForApproval(e){if(!e)throw new Error("waitForApproval: decisionId must be a non-empty string");let t=Date.now()+this.config.hitlTimeoutMs;for(;Date.now()<t;){let n=new AbortController,r=setTimeout(()=>n.abort(),this.config.timeoutMs),i;try{i=await this.originalFetch(`${this.config.endpoint}/v1/allow/decisions/${encodeURIComponent(e)}`,{method:"GET",headers:{Authorization:`Bearer ${this.config.apiKey}`,...this.versionHeaders()},signal:n.signal})}finally{clearTimeout(r)}if(!i.ok)throw new Error(`ALLOW decisions poll failed: HTTP ${i.status} ${i.statusText}`);let o=await i.json();if(typeof o!="object"||o===null)throw new Error("ALLOW decisions poll returned unexpected non-object response");let a=o,l=a.hitl_result;if(l==="approved")return{decision_id:e,decision:"permit",reason:"Approved by human reviewer"};if(l==="rejected")return{decision_id:e,decision:"deny",reason:typeof a.reason=="string"?a.reason:"Rejected by human reviewer"};if(l==="timeout"||l==="expired")return{decision_id:e,decision:"deny",reason:"HITL approval timed out"};await Tr(Sr)}return{decision_id:e,decision:"deny",reason:"HITL approval timed out"}}};function Tr(e){return new Promise(t=>setTimeout(t,e))}function Ye(){let e={};try{let t=`${P.platform()} ${P.release()}`.trim();t&&(e.os=t)}catch{}try{let t=P.hostname();t&&(e.hostname=t)}catch{}try{let{username:t}=P.userInfo();t&&(e.username=t)}catch{}try{let t=Er();t&&(e.ip=t)}catch{}return e}function Er(){let e=P.networkInterfaces();for(let t of Object.keys(e))for(let n of e[t]??[])if((n.family==="IPv4"||n.family===4)&&!n.internal&&n.address)return n.address}function Rr(e){return typeof e=="string"&&e.trim().length>0?e:void 0}function Ce(e,...t){for(let n of t){let r=Rr(e[n]);if(r)return r}}function xe(e){if(Ce(e,"run_id","runId","session_id","sessionId","thread_id","threadId"))return"session";if(Ce(e,"user_id","userId"))return"user";if(Ce(e,"agent_id","agentId"))return"agent";if(Ce(e,"org_id","orgId","namespace"))return"org"}var Cr=[{framework:"mem0",matches:e=>/^(mem0[_-])?(add|search|get|retrieve|update|delete)[_-]memor(y|ies)$/i.test(e),extract:(e,t)=>{let n=/^(?:mem0[_-])?([a-z]+)/i.exec(e)?.[1]?.toLowerCase(),r;n==="search"?r="search":n==="delete"?r="delete":n==="add"||n==="update"?r="write":r="read";let i=xe(t);return{op:r,store:"mem0",framework:"mem0",...i?{scope:i}:{}}}},{framework:"letta",matches:e=>/^(core_memory_(append|replace)|archival_memory_(insert|search)|conversation_search)$/i.test(e),extract:e=>{let t=e.toLowerCase();return t.startsWith("core_memory_")?{op:"write",store:"letta-core",scope:"agent",framework:"letta"}:t==="archival_memory_insert"?{op:"write",store:"letta-archival",scope:"agent",framework:"letta"}:t==="archival_memory_search"?{op:"search",store:"letta-archival",scope:"agent",framework:"letta"}:{op:"search",store:"letta-conversation",scope:"session",framework:"letta"}}},{framework:"langgraph",matches:e=>/^(upsert_memory|save_recall_memory|search_recall_memories)$/i.test(e),extract:(e,t)=>{let n=/^search_/i.test(e),r=xe(t);return{op:n?"search":"write",store:"langgraph-store",framework:"langgraph",...r?{scope:r}:{}}}},{framework:"zep",matches:e=>/^zep[_-](add|search|get|delete)[_-]memory$/i.test(e),extract:(e,t)=>{let n=/^zep[_-]([a-z]+)/i.exec(e)?.[1]?.toLowerCase(),r;n==="search"?r="search":n==="delete"?r="delete":n==="add"?r="write":r="read";let i=xe(t)??"session";return{op:r,store:"zep",scope:i,framework:"zep"}}},{framework:"mcp-memory",matches:e=>/^(create_entities|create_relations|add_observations|delete_entities|delete_relations|delete_observations|search_nodes|open_nodes|read_graph)$/i.test(e),extract:e=>{let t=e.toLowerCase(),n;return t.startsWith("delete_")?n="delete":t==="search_nodes"?n="search":t==="open_nodes"||t==="read_graph"?n="read":n="write",{op:n,store:"mcp-memory",scope:"agent",framework:"mcp-memory"}}},{framework:"generic",matches:e=>/(^|[_\-.])(memory|memories|mem0|recall)([_\-.]|$)/i.test(e),extract:(e,t)=>{let n=e.toLowerCase(),r;/(^|[_\-.])(search|query|find|lookup|retrieve)([_\-.]|$)/.test(n)?r="search":/(^|[_\-.])(delete|remove|forget|clear|purge)([_\-.]|$)/.test(n)?r="delete":/(^|[_\-.])(add|save|write|store|upsert|put|set|update|insert|append|remember)([_\-.]|$)/.test(n)?r="write":r="read";let i=xe(t);return{op:r,store:"memory",framework:"generic",...i?{scope:i}:{}}}}];function ce(e,t){if(!e)return null;let n=t??{};for(let r of Cr)try{if(r.matches(e)){let i=r.extract(e,n);if(i)return i}}catch{}return null}function Je(e,t){let n=typeof t?.itemCount=="number"&&Number.isFinite(t.itemCount)&&t.itemCount>=0?Math.round(t.itemCount):void 0,r=typeof t?.bytes=="number"&&Number.isFinite(t.bytes)&&t.bytes>=0?Math.round(t.bytes):void 0,i=e.op==="read"||e.op==="search";return{op:e.op,store:e.store,...e.scope?{scope:e.scope}:{},...n!==void 0?{itemCount:n}:{},...r!==void 0?{bytes:r}:{},...i&&n!==void 0?{hit:n>0}:{}}}var St=new Map;function de(e){let t=(St.get(e)??0)+1;return St.set(e,t),t}function Ot(e){if(!e||typeof e!="object")return;let t={};for(let n of["tokensIn","tokensOut","cacheRead","cacheWrite"]){let r=e[n];typeof r=="number"&&Number.isFinite(r)&&r>=0&&(t[n]=Math.round(r))}return Object.keys(t).length>0?t:void 0}function Ze(e,t,n){if(!e||typeof e.isCognitionEnabled!="function"||!e.isCognitionEnabled())return;let r=t.sessionId&&t.sessionId.length>0?t.sessionId:t.agentId,i=Array.isArray(n.texts)?n.texts.filter(a=>typeof a=="string"&&a.length>0).join(`
1
+ import{randomUUID as za}from"node:crypto";import*as et from"node:fs";import*as tt from"node:path";import*as xr from"node:os";import{AsyncLocalStorage as Ga}from"node:async_hooks";import{z as f}from"zod";import*as P from"node:os";import{randomUUID as pe}from"node:crypto";var rt=1,Lt="X-VisIQ-SDK",Dt="X-VisIQ-Dialect",Ft="unknown";function H(e,t=1){return{[Lt]:e&&e.length>0?e:Ft,[Dt]:String(t)}}var $t="interceptor_source",Ur=f.enum(["enforce","audit","off"]),Br=f.enum(["closed","open"]),Pt=f.enum(["enforce","monitor","off"]),qr=f.object({apiKey:f.string().min(1,"apiKey is required"),agentId:f.string().min(1,"agentId is required"),endpoint:f.string().url().optional(),mode:Ur.optional(),timeoutMs:f.number().int().positive().optional(),hitlTimeoutMs:f.number().int().positive().optional(),failBehavior:Br.optional()}),ms=f.object({agent_id:f.string().min(1),target_app:f.string().min(1),action:f.string().min(1),context:f.record(f.unknown()).optional(),session_id:f.string().min(1).max(255).optional(),action_schema_id:f.string().min(1).max(128).optional(),telemetry:f.record(f.unknown()).optional()}),Vr=f.object({field:f.string().optional(),pattern:f.string().optional(),replacement:f.string().optional(),mode:f.enum(["full","partial","email"]).optional(),keepFirst:f.number().optional(),keepLast:f.number().optional(),maskChar:f.string().optional()}),Kr=f.object({decision_id:f.string().min(1),decision:f.enum(["permit","deny","approval_required","mask"]),reason:f.string().optional(),rule_code:f.string().nullable().optional(),enforced:f.boolean().optional(),agent_mode:Pt.optional(),arg_redaction_rules:f.array(Vr).optional(),plane:f.string().nullable().optional(),operation:f.string().nullable().optional(),is_retrieval:f.boolean().optional(),metadata:f.record(f.unknown()).optional()}),zr=f.object({field:f.string().min(1),operator:f.enum(["equals","in","not_equals","not_in","glob","gt","lt","gte","lte","contains","not_contains"]),value:f.union([f.string(),f.number(),f.array(f.string())])}),Gr=f.object({id:f.string().min(1),rule_code:f.string().default(""),name:f.string().min(1),description:f.string().nullable().default(null),effect:f.enum(["allow","deny","hitl","mask"]),resource_type:f.string().min(1),rego_source:f.string().default(""),target_app:f.string().nullable().default(null),action_pattern:f.string().nullable().default(null),conditions:f.array(zr).default([]),priority:f.number().int().default(0)}),Hr=f.object({version:f.string().min(1),agent_mode:Pt.optional(),rules:f.array(Gr),no_coverage:f.object({no_coverage_defaults:f.record(f.string()),autopilot_enabled:f.boolean(),enduser_hitl_enabled:f.boolean(),hitl_timeout_seconds:f.number()}).optional()}),Wr=2e3,ot=class{config;originalFetch;constructor(e,t){this.config=e,this.originalFetch=t}versionHeaders(){return H(this.config.sdkVersion,this.config.sdkDialect)}async evaluate(e){let t=new AbortController,n=setTimeout(()=>t.abort(),this.config.timeoutMs),r;try{r=await this.originalFetch(`${this.config.endpoint}/allow/evaluate`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.versionHeaders()},body:JSON.stringify(e),signal:t.signal})}finally{clearTimeout(n)}if(!r.ok)throw new Error(`ALLOW evaluate request failed: HTTP ${r.status} ${r.statusText}`);let o=await r.json();return Kr.parse(o)}async fetchBundle(){let e=this.config.agentId?`?agent_id=${encodeURIComponent(this.config.agentId)}`:"",t=`${this.config.endpoint}/allow/rules/bundle${e}`,n=new AbortController,r=setTimeout(()=>n.abort(),this.config.timeoutMs),o;try{o=await this.originalFetch(t,{method:"GET",headers:{Authorization:`Bearer ${this.config.apiKey}`,Accept:"application/json",...this.versionHeaders()},signal:n.signal})}finally{clearTimeout(r)}if(!o.ok)throw new Error(`ALLOW rules/bundle fetch failed: HTTP ${o.status} ${o.statusText}`);let i=await o.json();return Hr.parse(i)}async sendTelemetry(e){if(e.length===0)return;let t=`${this.config.endpoint}/allow/telemetry`,n=await this.originalFetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.versionHeaders()},body:JSON.stringify({decisions:e})});if(!n.ok)throw new Error(`ALLOW telemetry delivery failed: HTTP ${n.status} ${n.statusText}`)}async sendCognition(e,t){if(t.length===0)return;let n=`${this.config.endpoint}/allow/cognition`,r=await this.originalFetch(n,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.versionHeaders()},body:JSON.stringify({...e?{session:e}:{},beats:t})});if(!r.ok)throw new Error(`ALLOW cognition delivery failed: HTTP ${r.status} ${r.statusText}`)}async reportExecutionResult(e,t,n){let r=`${this.config.endpoint}/allow/execution-events`;try{let o=await this.originalFetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.versionHeaders()},body:JSON.stringify({decision_id:e,result:t,details:n})});o.ok||console.warn(`[ALLOW] Execution result report failed: HTTP ${o.status}`)}catch(o){console.warn("[ALLOW] Execution result report failed:",o)}}async registerEnvironment(e){if(!this.config.agentId)return;let t=`${this.config.endpoint}/allow/agents/register`;try{let n=await this.originalFetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.versionHeaders()},body:JSON.stringify({agent_id:this.config.agentId,os:e.os,hostname:e.hostname,ip:e.ip,username:e.username,...this.config.harnessKind?{kind:this.config.harnessKind}:{},...e.agent_type?{agent_type:e.agent_type}:{},...e.model?{model:e.model}:{},...e.systemPrompt?{system_prompt:e.systemPrompt}:{},...e.toolSchemas&&e.toolSchemas.length>0?{tool_schemas:e.toolSchemas}:{}})});n.ok||console.warn(`[ALLOW] Agent registration failed: HTTP ${n.status} ${n.statusText}`)}catch(n){console.warn("[ALLOW] Agent registration failed:",n)}}async reportToolSurface(e){if(!this.config.agentId||e.length===0)return;let t=`${this.config.endpoint}/allow/agents/tools`;try{let n=await this.originalFetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,...this.versionHeaders()},body:JSON.stringify({agent_id:this.config.agentId,tools:e})});n.ok||console.warn(`[ALLOW] Tool-surface report failed: HTTP ${n.status} ${n.statusText}`)}catch(n){console.warn("[ALLOW] Tool-surface report failed:",n)}}async waitForApproval(e){if(!e)throw new Error("waitForApproval: decisionId must be a non-empty string");let t=Date.now()+this.config.hitlTimeoutMs;for(;Date.now()<t;){let n=new AbortController,r=setTimeout(()=>n.abort(),this.config.timeoutMs),o;try{o=await this.originalFetch(`${this.config.endpoint}/v1/allow/decisions/${encodeURIComponent(e)}`,{method:"GET",headers:{Authorization:`Bearer ${this.config.apiKey}`,...this.versionHeaders()},signal:n.signal})}finally{clearTimeout(r)}if(!o.ok)throw new Error(`ALLOW decisions poll failed: HTTP ${o.status} ${o.statusText}`);let i=await o.json();if(typeof i!="object"||i===null)throw new Error("ALLOW decisions poll returned unexpected non-object response");let a=i,s=a.hitl_result;if(s==="approved")return{decision_id:e,decision:"permit",reason:"Approved by human reviewer"};if(s==="rejected")return{decision_id:e,decision:"deny",reason:typeof a.reason=="string"?a.reason:"Rejected by human reviewer"};if(s==="timeout"||s==="expired")return{decision_id:e,decision:"deny",reason:"HITL approval timed out"};await Qr(Wr)}return{decision_id:e,decision:"deny",reason:"HITL approval timed out"}}};function Qr(e){return new Promise(t=>setTimeout(t,e))}function De(){let e={};try{let t=`${P.platform()} ${P.release()}`.trim();t&&(e.os=t)}catch{}try{let t=P.hostname();t&&(e.hostname=t)}catch{}try{let{username:t}=P.userInfo();t&&(e.username=t)}catch{}try{let t=Yr();t&&(e.ip=t)}catch{}return e}function Yr(){let e=P.networkInterfaces();for(let t of Object.keys(e))for(let n of e[t]??[])if((n.family==="IPv4"||n.family===4)&&!n.internal&&n.address)return n.address}function Jr(e){return typeof e=="string"&&e.trim().length>0?e:void 0}function Ne(e,...t){for(let n of t){let r=Jr(e[n]);if(r)return r}}function Le(e){if(Ne(e,"run_id","runId","session_id","sessionId","thread_id","threadId"))return"session";if(Ne(e,"user_id","userId"))return"user";if(Ne(e,"agent_id","agentId"))return"agent";if(Ne(e,"org_id","orgId","namespace"))return"org"}var Zr=[{framework:"mem0",matches:e=>/^(mem0[_-])?(add|search|get|retrieve|update|delete)[_-]memor(y|ies)$/i.test(e),extract:(e,t)=>{let n=/^(?:mem0[_-])?([a-z]+)/i.exec(e)?.[1]?.toLowerCase(),r;n==="search"?r="search":n==="delete"?r="delete":n==="add"||n==="update"?r="write":r="read";let o=Le(t);return{op:r,store:"mem0",framework:"mem0",...o?{scope:o}:{}}}},{framework:"letta",matches:e=>/^(core_memory_(append|replace)|archival_memory_(insert|search)|conversation_search)$/i.test(e),extract:e=>{let t=e.toLowerCase();return t.startsWith("core_memory_")?{op:"write",store:"letta-core",scope:"agent",framework:"letta"}:t==="archival_memory_insert"?{op:"write",store:"letta-archival",scope:"agent",framework:"letta"}:t==="archival_memory_search"?{op:"search",store:"letta-archival",scope:"agent",framework:"letta"}:{op:"search",store:"letta-conversation",scope:"session",framework:"letta"}}},{framework:"langgraph",matches:e=>/^(upsert_memory|save_recall_memory|search_recall_memories)$/i.test(e),extract:(e,t)=>{let n=/^search_/i.test(e),r=Le(t);return{op:n?"search":"write",store:"langgraph-store",framework:"langgraph",...r?{scope:r}:{}}}},{framework:"zep",matches:e=>/^zep[_-](add|search|get|delete)[_-]memory$/i.test(e),extract:(e,t)=>{let n=/^zep[_-]([a-z]+)/i.exec(e)?.[1]?.toLowerCase(),r;n==="search"?r="search":n==="delete"?r="delete":n==="add"?r="write":r="read";let o=Le(t)??"session";return{op:r,store:"zep",scope:o,framework:"zep"}}},{framework:"mcp-memory",matches:e=>/^(create_entities|create_relations|add_observations|delete_entities|delete_relations|delete_observations|search_nodes|open_nodes|read_graph)$/i.test(e),extract:e=>{let t=e.toLowerCase(),n;return t.startsWith("delete_")?n="delete":t==="search_nodes"?n="search":t==="open_nodes"||t==="read_graph"?n="read":n="write",{op:n,store:"mcp-memory",scope:"agent",framework:"mcp-memory"}}},{framework:"generic",matches:e=>/(^|[_\-.])(memory|memories|mem0|recall)([_\-.]|$)/i.test(e),extract:(e,t)=>{let n=e.toLowerCase(),r;/(^|[_\-.])(search|query|find|lookup|retrieve)([_\-.]|$)/.test(n)?r="search":/(^|[_\-.])(delete|remove|forget|clear|purge)([_\-.]|$)/.test(n)?r="delete":/(^|[_\-.])(add|save|write|store|upsert|put|set|update|insert|append|remember)([_\-.]|$)/.test(n)?r="write":r="read";let o=Le(t);return{op:r,store:"memory",framework:"generic",...o?{scope:o}:{}}}}];function de(e,t){if(!e)return null;let n=t??{};for(let r of Zr)try{if(r.matches(e)){let o=r.extract(e,n);if(o)return o}}catch{}return null}function it(e,t){let n=typeof t?.itemCount=="number"&&Number.isFinite(t.itemCount)&&t.itemCount>=0?Math.round(t.itemCount):void 0,r=typeof t?.bytes=="number"&&Number.isFinite(t.bytes)&&t.bytes>=0?Math.round(t.bytes):void 0,o=e.op==="read"||e.op==="search";return{op:e.op,store:e.store,...e.scope?{scope:e.scope}:{},...n!==void 0?{itemCount:n}:{},...r!==void 0?{bytes:r}:{},...o&&n!==void 0?{hit:n>0}:{}}}var Nt=new Map;function fe(e){let t=(Nt.get(e)??0)+1;return Nt.set(e,t),t}function jt(e){if(!e||typeof e!="object")return;let t={};for(let n of["tokensIn","tokensOut","cacheRead","cacheWrite"]){let r=e[n];typeof r=="number"&&Number.isFinite(r)&&r>=0&&(t[n]=Math.round(r))}return Object.keys(t).length>0?t:void 0}function at(e,t,n){if(!e||typeof e.isCognitionEnabled!="function"||!e.isCognitionEnabled())return;let r=t.sessionId&&t.sessionId.length>0?t.sessionId:t.agentId,o=Array.isArray(n.texts)?n.texts.filter(a=>typeof a=="string"&&a.length>0).join(`
2
2
 
3
- `):"",o=Ot(n.usage);e.emitCognition({clientEventId:ue(),agentId:t.agentId,sessionId:r,threadId:t.agentId,parentId:t.agentId,seq:de(r),ts:Date.now(),kind:n.final?"speech":"thought",visibility:"shown",provenance:"narration",...i?{content:{text:i}}:{},...o?{cost:o}:{},...n.model?{model:n.model}:{},...typeof n.durationMs=="number"&&Number.isFinite(n.durationMs)?{durationMs:Math.max(0,Math.round(n.durationMs))}:{},...t.framework?{framework:t.framework}:{}})}function pe(e,t,n){if(!e||typeof e.isCognitionEnabled!="function"||!e.isCognitionEnabled())return;let r=t.sessionId&&t.sessionId.length>0?t.sessionId:t.agentId;e.emitCognition({clientEventId:ue(),agentId:t.agentId,sessionId:r,threadId:t.agentId,parentId:t.agentId,seq:de(r),ts:Date.now(),kind:"spawn",visibility:"shown",provenance:"parsed",...t.framework?{framework:t.framework}:{},spawn:{childAgentId:n.childAgentId,childName:n.childName,kind:n.kind,...n.model?{model:n.model}:{},...n.task?{prompt:n.task}:{}}})}function fe(e,t,n){if(!e||typeof e.isCognitionEnabled!="function"||!e.isCognitionEnabled())return;let r=t.sessionId&&t.sessionId.length>0?t.sessionId:t.agentId,i=n.memory?Je(n.memory):void 0;e.emitCognition({clientEventId:ue(),agentId:t.agentId,sessionId:r,threadId:t.agentId,parentId:t.agentId,seq:de(r),ts:Date.now(),kind:i?"memory":"action",visibility:"shown",provenance:"parsed",...t.framework?{framework:t.framework}:{},tool:{name:n.toolName,...n.verb?{verb:n.verb}:{},...n.argSummary?{argSummary:n.argSummary}:{}},...i?{memory:i}:{}})}function me(e,t,n){if(!e||typeof e.isCognitionEnabled!="function"||!e.isCognitionEnabled())return;let r=t.sessionId&&t.sessionId.length>0?t.sessionId:t.agentId,i=s=>typeof s=="number"&&Number.isFinite(s)&&s>=0?Math.round(s):void 0,o=i(n.bytes),a=i(n.itemCount),l=i(n.durationMs),c;n.memory&&(c=Je(n.memory,{itemCount:a,bytes:o})),e.emitCognition({clientEventId:ue(),agentId:t.agentId,sessionId:r,threadId:t.agentId,parentId:t.agentId,seq:de(r),ts:Date.now(),kind:"observation",visibility:"shown",provenance:"parsed",...l!==void 0?{durationMs:l}:{},...t.framework?{framework:t.framework}:{},tool:{name:n.toolName},result:{ok:n.ok,...o!==void 0?{bytes:o}:{},...a!==void 0?{itemCount:a}:{}},...c?{memory:c}:{}})}function te(e,t,n){if(!e||typeof e.isCognitionEnabled!="function"||!e.isCognitionEnabled())return;let r=t.sessionId&&t.sessionId.length>0?t.sessionId:t.agentId;e.emitCognition({clientEventId:ue(),agentId:t.agentId,sessionId:r,threadId:t.agentId,parentId:t.agentId,seq:de(r),ts:Date.now(),kind:"intervention",visibility:"shown",provenance:"parsed",...t.framework?{framework:t.framework}:{},tool:{name:n.toolName},governance:{decision:n.decision,enforced:n.enforced,...n.ruleCode?{ruleCode:n.ruleCode}:{},...n.ruleLabel?{ruleLabel:n.ruleLabel}:{},...n.harnessMessage?{harnessMessage:n.harnessMessage}:{}}})}function W(e){try{let t=JSON.stringify(e);return typeof t=="string"?t.length:void 0}catch{return}}function Q(e){try{return Array.isArray(e)?e.length:void 0}catch{return}}import{z as m}from"zod";import{createHash as La}from"crypto";import{createHash as $a}from"crypto";var xr=["tier1","tier2","tier3"];function Mt(e){return typeof e=="string"&&xr.includes(e)}var Or=["read_only","transactional","data_processor","external_comms","code_exec","privileged"],Nr=["internal","customer_facing","experimental","third_party"],Dt=[...Or,...Nr];function Lr(e){return typeof e=="string"&&Dt.includes(e)}function $t(e){let t=new Set;for(let n of e)Lr(n)&&t.add(n);return Dt.filter(n=>t.has(n))}var Fr=["read_only","record_create","record_update","record_delete","data_export","data_share","data_subject_request","consent_change","funds_transfer","funds_disbursement","payroll_run","trade_execution","ledger_mutation","credit_decision","decision_adverse","account_restriction","account_closure","card_management","purchase_commitment","vendor_management","deal_management","pricing_change","contract_execution","legal_hold","regulatory_filing","personnel_action","employment_termination","compensation_change","campaign_send","content_publish","inventory_adjustment","order_fulfillment","account_servicing","credential_reset","access_grant","permission_change","credential_management","auth_policy_change","security_config_change","logging_change","alert_management","code_change","infrastructure_provision","deployment_change","communication_send","other"];function Pt(e){if(typeof e!="string"&&typeof e!="number")return null;let t=String(e).trim().replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"");return t.length>0?t:null}var Mr={wire_transfer:"funds_transfer",international_transfer:"funds_transfer",cross_border_payment:"funds_transfer",send_swift:"funds_transfer",send_wire:"funds_transfer",transfer_funds:"funds_transfer",update_wire_instructions:"funds_transfer",add_beneficiary:"funds_transfer",modify_payee:"funds_transfer",disburse_funds:"funds_disbursement",initiate_ach:"funds_disbursement",issue_refund:"funds_disbursement",execute_trade:"trade_execution",place_order:"trade_execution",post_journal_entry:"ledger_mutation",adjust_ledger:"ledger_mutation",modify_general_ledger:"ledger_mutation",raise_limit:"credit_decision",increase_credit_limit:"credit_decision",extend_credit:"credit_decision",decline_credit:"decision_adverse",deny_application:"decision_adverse",adverse_action:"decision_adverse",block_card:"card_management",cancel_card:"card_management",place_hold:"account_restriction",freeze_account:"account_restriction",restrict_account:"account_restriction",close_account:"account_closure",export_data:"data_export",export_customer_list:"data_export",download_report:"data_export",download_customer_list:"data_export",bulk_export:"data_export",share_data:"data_share",send_to_partner:"data_share",delete_records:"record_delete",delete_user:"record_delete",drop_table:"record_delete",grant_role:"access_grant",change_permissions:"permission_change",modify_access:"permission_change",rotate_keys:"credential_management",disable_mfa:"auth_policy_change",modify_security_config:"security_config_change",disable_logging:"logging_change",purge_logs:"logging_change",suppress_alert:"alert_management",dismiss_alert:"alert_management",rollback:"deployment_change",modify_billing:"record_update",close_sar:"record_update",send_email:"communication_send",send_sms:"communication_send",fulfill_dsar:"data_subject_request",process_dsar:"data_subject_request",fulfill_data_request:"data_subject_request",process_erasure_request:"data_subject_request",honor_deletion_request:"data_subject_request",export_subject_data:"data_subject_request",erase_subject_data:"data_subject_request",delete_subject_data:"data_subject_request",record_consent:"consent_change",capture_consent:"consent_change",update_consent:"consent_change",withdraw_consent:"consent_change",revoke_consent:"consent_change",opt_out:"consent_change",opt_in:"consent_change",run_payroll:"payroll_run",process_payroll:"payroll_run",submit_payroll:"payroll_run",approve_payroll:"payroll_run",create_purchase_order:"purchase_commitment",issue_purchase_order:"purchase_commitment",approve_purchase_order:"purchase_commitment",submit_purchase_order:"purchase_commitment",approve_purchase:"purchase_commitment",approve_requisition:"purchase_commitment",commit_spend:"purchase_commitment",onboard_vendor:"vendor_management",add_vendor:"vendor_management",create_supplier:"vendor_management",approve_vendor:"vendor_management",update_vendor_bank:"vendor_management",update_supplier_bank:"vendor_management",modify_supplier:"vendor_management",create_opportunity:"deal_management",update_opportunity:"deal_management",advance_deal_stage:"deal_management",update_deal_stage:"deal_management",close_deal:"deal_management",mark_closed_won:"deal_management",mark_closed_lost:"deal_management",issue_quote:"pricing_change",send_quote:"pricing_change",approve_discount:"pricing_change",apply_discount:"pricing_change",override_price:"pricing_change",update_pricing:"pricing_change",approve_special_pricing:"pricing_change",execute_contract:"contract_execution",sign_contract:"contract_execution",countersign_contract:"contract_execution",sign_agreement:"contract_execution",execute_agreement:"contract_execution",sign_nda:"contract_execution",execute_nda:"contract_execution",sign_document:"contract_execution",esign_document:"contract_execution",place_legal_hold:"legal_hold",place_litigation_hold:"legal_hold",apply_legal_hold:"legal_hold",release_legal_hold:"legal_hold",file_regulatory_report:"regulatory_filing",file_sar:"regulatory_filing",submit_regulatory_filing:"regulatory_filing",file_compliance_report:"regulatory_filing",file_disclosure:"regulatory_filing",onboard_employee:"personnel_action",hire_employee:"personnel_action",change_employee_role:"personnel_action",promote_employee:"personnel_action",transfer_employee:"personnel_action",update_job_title:"personnel_action",terminate_employee:"employment_termination",offboard_employee:"employment_termination",deactivate_employee:"employment_termination",separate_employee:"employment_termination",adjust_salary:"compensation_change",change_compensation:"compensation_change",approve_raise:"compensation_change",grant_equity:"compensation_change",grant_stock:"compensation_change",issue_bonus:"compensation_change",update_pay_rate:"compensation_change",send_campaign:"campaign_send",launch_campaign:"campaign_send",schedule_campaign:"campaign_send",send_bulk_email:"campaign_send",send_marketing_email:"campaign_send",send_newsletter:"campaign_send",blast_email:"campaign_send",publish_post:"content_publish",publish_content:"content_publish",publish_blog:"content_publish",post_to_social:"content_publish",schedule_post:"content_publish",adjust_inventory:"inventory_adjustment",write_off_inventory:"inventory_adjustment",update_stock_level:"inventory_adjustment",reconcile_inventory:"inventory_adjustment",fulfill_order:"order_fulfillment",ship_order:"order_fulfillment",dispatch_order:"order_fulfillment",mark_order_shipped:"order_fulfillment",update_customer_account:"account_servicing",modify_customer_account:"account_servicing",update_customer_contact:"account_servicing",change_customer_settings:"account_servicing",reset_customer_password:"credential_reset",reset_password:"credential_reset",force_password_reset:"credential_reset",reset_mfa:"credential_reset",unlock_account:"credential_reset",reset_customer_credentials:"credential_reset",merge_pull_request:"code_change",merge_pr:"code_change",merge_branch:"code_change",push_to_branch:"code_change",push_to_main:"code_change",push_code:"code_change",commit_code:"code_change",force_push:"code_change",provision_infrastructure:"infrastructure_provision",provision_resource:"infrastructure_provision",create_instance:"infrastructure_provision",terminate_instance:"infrastructure_provision",spin_up_server:"infrastructure_provision",tear_down_server:"infrastructure_provision",destroy_resource:"infrastructure_provision",create_cluster:"infrastructure_provision"};function Dr(e){let t=Pt(e);return t===null?"other":Mr[t]||(/^(delete|remove|purge|drop|destroy|wipe)_/.test(t)?"record_delete":/^(export|download|extract|dump)_/.test(t)?"data_export":/^(create|add|insert)_/.test(t)?"record_create":/^(update|edit|modify|patch|set)_/.test(t)?"record_update":t==="send_email"||t==="send_sms"||/^(notify|email|sms)_/.test(t)?"communication_send":/^(read|get|list|search|fetch|view|query)_/.test(t)||t==="read"||t==="get"?"read_only":"other")}var Nt={github:"version_control",gitlab:"version_control",bitbucket:"version_control",stripe:"payments",adyen:"payments",braintree:"payments",paypal:"payments",square:"payments",salesforce:"crm",hubspot:"crm",pipedrive:"crm",slack:"communication",teams:"communication",twilio:"communication",sendgrid:"communication",mailgun:"communication",gmail:"communication",outlook:"communication",zoom:"communication",aws:"cloud_infra",gcp:"cloud_infra",azure:"cloud_infra",okta:"identity",auth0:"identity",entra:"identity",onelogin:"identity",duo:"identity",snowflake:"data_warehouse",bigquery:"data_warehouse",databricks:"data_warehouse",redshift:"data_warehouse",jira:"ticketing",zendesk:"ticketing",servicenow:"ticketing",freshdesk:"ticketing",linear:"ticketing",workday:"hr",bamboohr:"hr",gusto:"hr",netsuite:"finance_erp",quickbooks:"finance_erp",sap:"finance_erp",xero:"finance_erp",s3:"storage",gcs:"storage",dropbox:"storage",box:"storage",postgres:"database",postgresql:"database",mysql:"database",mongodb:"database",redis:"database"};function $r(e){let t=Pt(e);return t===null?"other":Nt[t]??Nt[t.replace(/_/g,"")]??"other"}function Xe(e,t){let n={...e};if(t.action!==void 0&&t.action!==null&&n.action_class===void 0&&(n.action_class=Dr(t.action)),t.targetApp!==void 0&&t.targetApp!==null){let r=n.context&&typeof n.context=="object"&&!Array.isArray(n.context)?{...n.context}:{};r.app_category===void 0&&(r.app_category=$r(t.targetApp)),n.context=r}return n}var Lt=64,Pr=64,he={retrieved_data_categories:[],retrieved_classifications:[],taint:[],action_classes:[],action_counts:{},denied_count:0,inhibited_count:0,event_count:0,target_apps:[]};function jt(){return{retrieved_data_categories:[],retrieved_classifications:[],taint:[],action_classes:[],action_counts:{},denied_count:0,inhibited_count:0,event_count:0,target_apps:[]}}var jr=new Set(["deny","approval_required","escalate"]);function ge(e,t){if(t.length===0)return[...e];let n=new Set(e);for(let i of t)n.add(i);let r=[...n].sort();return r.length>Lt?r.slice(0,Lt):r}function Ft(e){return e?e.filter(t=>typeof t=="string"&&t.length>0):[]}function Oe(e){return typeof e=="string"&&e.length>0?e:null}function qt(e,t){let n=Ft(t.data_categories),r=Oe(t.classification),i=Ft(t.taint),o=Oe(t.action_class),a=o&&Fr.includes(o)?o:null,l=Oe(t.target_app),c=Oe(t.decision),s={...e.action_counts};if(a)if(a in s)s[a]=(s[a]??0)+1;else if(Object.keys(s).length<Pr)s[a]=1;else{let u=Object.keys(s).sort(),d=u[u.length-1];d!==void 0&&a<d&&(delete s[d],s[a]=1)}return{retrieved_data_categories:ge(e.retrieved_data_categories,n),retrieved_classifications:ge(e.retrieved_classifications,r?[r]:[]),taint:ge(e.taint,i),action_classes:ge(e.action_classes,a?[a]:[]),action_counts:s,denied_count:e.denied_count+(c==="deny"?1:0),inhibited_count:e.inhibited_count+(c&&jr.has(c)?1:0),event_count:e.event_count+1,target_apps:ge(e.target_apps,l?[l]:[])}}var Ut="generic",Bt=[{id:"finance_accounting",name:"Finance & Accounting",icon:"Landmark",description:"Payments, invoicing, ledgers, transactions, refunds, financial reporting, SOX/AML/KYC controls."},{id:"hr",name:"Human Resources",icon:"Users",description:"Employee records, payroll, hiring/recruiting, benefits, personnel actions and PII of staff."},{id:"engineering",name:"Engineering",icon:"Code",description:"Source code, build/deploy pipelines, infrastructure changes, production systems and developer tooling."},{id:"it_security",name:"IT & Security",icon:"ShieldCheck",description:"Credentials, secrets, access control, configuration, threat/exfiltration prevention and security operations."},{id:"legal",name:"Legal",icon:"Scale",description:"Contracts, NDAs, litigation, counsel communications and legal-hold material."},{id:"privacy_compliance",name:"Privacy & Compliance",icon:"BadgeCheck",description:"GDPR/CCPA/HIPAA, consent, data-subject rights, special-category data and regulatory data handling."},{id:"sales",name:"Sales",icon:"TrendingUp",description:"CRM, leads, deals, quotes, pipeline and customer commercial relationships."},{id:"marketing",name:"Marketing",icon:"Megaphone",description:"Campaigns, content, brand, social channels and prospect/audience data."},{id:"operations",name:"Operations",icon:"Cog",description:"Business operations, logistics, internal workflows, vendor/ops tooling and process automation."},{id:"customer_support",name:"Customer Support",icon:"LifeBuoy",description:"Support tickets, customer communications, account servicing and help-desk actions."},{id:"procurement",name:"Procurement",icon:"ShoppingCart",description:"Purchasing, supplier management, purchase orders, sourcing and spend approvals."},{id:Ut,name:"Generic",icon:"Shapes",description:"Catch-all for cross-cutting rules or rules that do not fit a specific function. Assign when no specific function clearly applies."}],qr=Bt.map(e=>e.id),Fa=new Map(Bt.map(e=>[e.id,e])),Ma=new Set(qr);function Vt(e){return Array.isArray(e)&&e.length>0?[...e]:[Ut]}var Ur=/^[a-z][a-z0-9_]*$/;function Kt(e){if(!Array.isArray(e))return[];let t=[],n=new Set;for(let r of e)typeof r=="string"&&Ur.test(r)&&!n.has(r)&&(n.add(r),t.push(r));return t}var Br=["narrow","moderate","broad","unbounded","unknown"];function zt(e){return typeof e=="string"&&Br.includes(e)}function Gt(e){return e==="open"||e==="closed"?e:null}var Vr=["action","retrieval","delegation"];function Kr(e){return typeof e=="string"&&Vr.includes(e)}var zr=new Set(["rules"]);function Ht(e){if(typeof e.id!="string"||typeof e.vendor_id!="string")return null;let t=typeof e.origin_table=="string"?e.origin_table:"";if(!zr.has(t))return null;let n=Array.isArray(e.applies_to)?e.applies_to.filter(Kr):[];return n.length===0?null:{id:e.id,originTable:t,vendorId:e.vendor_id,name:typeof e.name=="string"?e.name:"",description:typeof e.description=="string"?e.description:null,regoSource:typeof e.rego_source=="string"?e.rego_source:null,priority:typeof e.priority=="number"?e.priority:0,enabled:e.enabled===!0,appliesTo:n,targetApp:typeof e.target_app=="string"?e.target_app:null,actionPattern:typeof e.action_pattern=="string"?e.action_pattern:null,trustTier:typeof e.trust_tier=="string"?e.trust_tier:null,surface:typeof e.surface=="string"?e.surface:null,principalExclusions:Array.isArray(e.principal_exclusions)?e.principal_exclusions.filter(r=>typeof r=="string"):null,bypassActive:e.bypass_active===!0,bypassReason:typeof e.bypass_reason=="string"?e.bypass_reason:null,bypassExpiresAt:typeof e.bypass_expires_at=="string"?e.bypass_expires_at:null,redactionSpec:e.redaction_spec??null,failClosedOnEmptySpec:e.fail_closed_on_empty_spec===!0,hitlFallback:e.hitl_fallback==="mask"?"mask":"deny",ruleCode:typeof e.rule_code=="string"?e.rule_code:null}}import{z as Fe}from"zod";var Gr="[REDACTED]",nn=[{name:"private_key",re:/-----BEGIN (?:[A-Z]+ )?PRIVATE KEY-----[\s\S]*?-----END (?:[A-Z]+ )?PRIVATE KEY-----/g},{name:"jwt",re:/\beyJ[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}\b/g},{name:"aws_access_key",re:/\b(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA|ANVA|AIPA)[0-9A-Z]{16}\b/g},{name:"github_token",re:/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{36}\b|\bgithub_pat_[A-Za-z0-9_]{22,}\b/g},{name:"slack_token",re:/\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g},{name:"stripe_secret",re:/\b(?:sk|rk)_live_[A-Za-z0-9]{16,}\b/g},{name:"google_api_key",re:/\bAIza[0-9A-Za-z_-]{35}\b/g},{name:"llm_api_key",re:/\bsk-(?:ant-|proj-)?[A-Za-z0-9_-]{20,}\b/g},{name:"bearer_token",re:/\bBearer\s+[A-Za-z0-9._~+/=-]{20,}/g},{name:"connection_string",re:/\b(?:postgres(?:ql)?|mysql|mongodb(?:\+srv)?|redis|amqps?):\/\/[^\s/@:]+:[^\s/@:]+@[^\s'"]+/g},{name:"us_ein",re:/\b\d{2}-\d{7}\b/g},{name:"ssn",re:/\b\d{3}[- ]\d{2}[- ]\d{4}\b/g},{name:"email",re:/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g},{name:"swift_bic",re:/\b[A-Z]{6}[A-Z0-9]{2}(?:[A-Z0-9]{3})?\b/g},{name:"us_phone",re:/\b(?:\+?1[ .-]?)?\(?\d{3}\)?[ .-]?\d{3}[ .-]?\d{4}\b/g},{name:"ipv4",re:/\b(?:(?:25[0-5]|2[0-4]\d|1?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|1?\d?\d)\b/g},{name:"mac_address",re:/\b(?:[0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}\b/g}];function rn(e){if(!/^\d+$/.test(e))return!1;let t=0,n=!1;for(let r=e.length-1;r>=0;r--){let i=e.charCodeAt(r)-48;n&&(i*=2,i>9&&(i-=9)),t+=i,n=!n}return t%10===0}function Hr(e){let t=e.replace(/\s/g,"").toUpperCase();if(!/^[A-Z]{2}\d{2}[A-Z0-9]{10,30}$/.test(t))return!1;let n=t.slice(4)+t.slice(0,4),r=0;for(let i=0;i<n.length;i++){let o=n[i],a=o>="A"&&o<="Z"?String(o.charCodeAt(0)-55):o;for(let l=0;l<a.length;l++)r=(r*10+(a.charCodeAt(l)-48))%97}return r===1}function Wr(e){if(!/^\d{9}$/.test(e))return!1;let t=[3,7,1,3,7,1,3,7,1],n=0;for(let r=0;r<9;r++)n+=(e.charCodeAt(r)-48)*t[r];return n%10===0}var Qr=[{name:"pan",re:/\d(?:[ -]?\d){12,18}/g,normalize:e=>e.replace(/[ -]/g,""),validate:e=>e.length>=13&&e.length<=19&&rn(e)},{name:"iban",re:/\b[A-Z]{2}\d{2}(?:[ ]?[A-Z0-9]){10,30}\b/g,normalize:e=>e.replace(/\s/g,"").toUpperCase(),validate:Hr},{name:"aba_routing",re:/\b\d{9}\b/g,normalize:e=>e,validate:Wr}],E=Object.fromEntries(nn.map(e=>[e.name,e.re.source])),on=["private_key","jwt","aws_access_key","github_token","slack_token","stripe_secret","google_api_key","llm_api_key","bearer_token","connection_string","pan","iban","aba_routing","us_ein","swift_bic","ssn","email","us_phone","ipv4","mac_address"],rt={private_key:{id:"private_key",label:"Private keys (PEM)",description:"PEM-encoded private keys (RSA / EC / EdDSA / OpenSSH).",category:"secret",example:`-----BEGIN PRIVATE KEY-----
3
+ `):"",i=jt(n.usage);e.emitCognition({clientEventId:pe(),agentId:t.agentId,sessionId:r,threadId:t.agentId,parentId:t.agentId,seq:fe(r),ts:Date.now(),kind:n.final?"speech":"thought",visibility:"shown",provenance:"narration",...o?{content:{text:o}}:{},...i?{cost:i}:{},...n.model?{model:n.model}:{},...typeof n.durationMs=="number"&&Number.isFinite(n.durationMs)?{durationMs:Math.max(0,Math.round(n.durationMs))}:{},...t.framework?{framework:t.framework}:{}})}function me(e,t,n){if(!e||typeof e.isCognitionEnabled!="function"||!e.isCognitionEnabled())return;let r=t.sessionId&&t.sessionId.length>0?t.sessionId:t.agentId;e.emitCognition({clientEventId:pe(),agentId:t.agentId,sessionId:r,threadId:t.agentId,parentId:t.agentId,seq:fe(r),ts:Date.now(),kind:"spawn",visibility:"shown",provenance:"parsed",...t.framework?{framework:t.framework}:{},spawn:{childAgentId:n.childAgentId,childName:n.childName,kind:n.kind,...n.model?{model:n.model}:{},...n.task?{prompt:n.task}:{}}})}function ge(e,t,n){if(!e||typeof e.isCognitionEnabled!="function"||!e.isCognitionEnabled())return;let r=t.sessionId&&t.sessionId.length>0?t.sessionId:t.agentId,o=n.memory?it(n.memory):void 0;e.emitCognition({clientEventId:pe(),agentId:t.agentId,sessionId:r,threadId:t.agentId,parentId:t.agentId,seq:fe(r),ts:Date.now(),kind:o?"memory":"action",visibility:"shown",provenance:"parsed",...t.framework?{framework:t.framework}:{},tool:{name:n.toolName,...n.verb?{verb:n.verb}:{},...n.argSummary?{argSummary:n.argSummary}:{}},...o?{memory:o}:{}})}function he(e,t,n){if(!e||typeof e.isCognitionEnabled!="function"||!e.isCognitionEnabled())return;let r=t.sessionId&&t.sessionId.length>0?t.sessionId:t.agentId,o=c=>typeof c=="number"&&Number.isFinite(c)&&c>=0?Math.round(c):void 0,i=o(n.bytes),a=o(n.itemCount),s=o(n.durationMs),l;n.memory&&(l=it(n.memory,{itemCount:a,bytes:i})),e.emitCognition({clientEventId:pe(),agentId:t.agentId,sessionId:r,threadId:t.agentId,parentId:t.agentId,seq:fe(r),ts:Date.now(),kind:"observation",visibility:"shown",provenance:"parsed",...s!==void 0?{durationMs:s}:{},...t.framework?{framework:t.framework}:{},tool:{name:n.toolName},result:{ok:n.ok,...i!==void 0?{bytes:i}:{},...a!==void 0?{itemCount:a}:{}},...l?{memory:l}:{}})}function ee(e,t,n){if(!e||typeof e.isCognitionEnabled!="function"||!e.isCognitionEnabled())return;let r=t.sessionId&&t.sessionId.length>0?t.sessionId:t.agentId;e.emitCognition({clientEventId:pe(),agentId:t.agentId,sessionId:r,threadId:t.agentId,parentId:t.agentId,seq:fe(r),ts:Date.now(),kind:"intervention",visibility:"shown",provenance:"parsed",...t.framework?{framework:t.framework}:{},tool:{name:n.toolName},governance:{decision:n.decision,enforced:n.enforced,...n.ruleCode?{ruleCode:n.ruleCode}:{},...n.ruleLabel?{ruleLabel:n.ruleLabel}:{},...n.harnessMessage?{harnessMessage:n.harnessMessage}:{}}})}function W(e){try{let t=JSON.stringify(e);return typeof t=="string"?t.length:void 0}catch{return}}function Q(e){try{return Array.isArray(e)?e.length:void 0}catch{return}}import{z as g}from"zod";import{createHash as Xr}from"crypto";import{createHash as yo}from"crypto";var Ut=new Map;function Bt(e){return e.map(t=>t.trim()).filter(t=>t.length>0&&t!=="true")}function Gt(e){let t=Xr("sha256").update(e).digest("hex"),n=Ut.get(t);if(n)return n;let r=new Map,o=[],i=e.split(`
4
+ `).map(l=>eo(l)).filter(l=>l.trim().length>0),a=0;for(;a<i.length;){let l=i[a].trim();if(l.startsWith("package ")||l.startsWith("import ")){a++;continue}let c=l.match(/^default\s+(\w+)\s*:?=\s*(.+)$/);if(c){let _=c[1],h=c[2].trim();r.set(_,ye(h)),a++;continue}let u=l.match(/^(\w+)\s*:?=\s*(.+?)(?:\s+if)?\s*\{(.*)$/);if(u){let _=u[1],h=u[2].trim(),m=u[3].trim(),p=[];if(m&&m!=="}"){let C=m.endsWith("}")?m.slice(0,-1).trim():m;C&&p.push(C),m.endsWith("}")||(a++,a=Fe(i,a,p))}else m==="}"||(a++,a=Fe(i,a,p));let y=qt(p);o.push({variable:_,value:ye(h),conditions:y,rawConditions:Bt(p)}),a++;continue}let d=l.match(/^(\w+)(?:\s+if)?\s*\{(.*)$/);if(d){let _=d[1],h=d[2].trim(),m=[];if(h&&h!=="}"){let y=h.endsWith("}")?h.slice(0,-1).trim():h;y&&m.push(y),h.endsWith("}")||(a++,a=Fe(i,a,m))}else h==="}"||(a++,a=Fe(i,a,m));let p=qt(m);o.push({variable:_,value:"true",conditions:p,rawConditions:Bt(m)}),a++;continue}a++}let s={defaults:r,rules:o};return Ut.set(t,s),s}function eo(e){let t=!1,n="";for(let r=0;r<e.length;r++){let o=e[r];if(t)o===n&&e[r-1]!=="\\"&&(t=!1);else if(o==='"'||o==="'")t=!0,n=o;else if(o==="#")return e.slice(0,r)}return e}function Fe(e,t,n){let r=1,o=t;for(;o<e.length&&r>0;){let i=e[o].trim();for(let a of i)a==="{"&&r++,a==="}"&&r--;if(r>0)n.push(i),o++;else{let a=i.slice(0,i.lastIndexOf("}")).trim();return a&&n.push(a),o}}return o}function ye(e){return e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'")?e.slice(1,-1):e}function to(e){return e.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\")}function qt(e){let t=[];for(let n of e){let r=n.split(";").map(o=>o.trim()).filter(o=>o.length>0);for(let o of r){let i=no(o);i&&t.push(i)}}return t}function no(e){let t=!1,n=e.trim();if(n.startsWith("not ")&&(t=!0,n=n.slice(4).trim()),n==="true"||n==="false")return{type:"literal_bool",negated:t,field:"",value:n==="true"};if(n.includes("[_]"))return{type:"truthy",negated:!1,field:st,value:e.trim()};let r=n.match(/^count\(([^)]+)\)\s*(>=|<=|>|<)\s*(\d+)$/);if(r)return{type:"count_gt",negated:t,field:r[1].trim(),operator:r[2],value:parseInt(r[3],10)};let o=n.match(/^startswith\(([^,]+),\s*"([^"]*)"\)$/);if(o)return{type:"startswith",negated:t,field:o[1].trim(),value:o[2]};let i=n.match(/^endswith\(([^,]+),\s*"([^"]*)"\)$/);if(i)return{type:"endswith",negated:t,field:i[1].trim(),value:i[2]};let a=n.match(/^contains\(([^,]+),\s*"([^"]*)"\)$/);if(a)return{type:"contains",negated:t,field:a[1].trim(),value:a[2]};let s=n.match(/^regex\.match\(\s*("(?:[^"\\]|\\.)*")\s*,\s*((?:input|data)[^\s)]*)\s*\)$/);if(s)return{type:"regex_match",negated:t,field:s[2].trim(),value:to(s[1])};let l=n.match(/^("(?:[^"\\]|\\.)*"|-?\d+(?:\.\d+)?|true|false)\s+in\s+((?:input|data)[^\s]*)$/);if(l)return{type:"array_includes",negated:t,field:l[2].trim(),value:Wt(l[1])};let c=n.match(/^([^\s]+)\s+in\s+(\[.*\])$/);if(c){let p=oo(c[2]);if(p!==null)return{type:"in_set",negated:t,field:c[1].trim(),values:p}}let u=n.match(/^([^\s=!<>]+)\s*(>=|<=|>|<)\s*(-?\d+(?:\.\d+)?)$/);if(u)return{type:"comparison",negated:t,field:u[1].trim(),operator:u[2],value:parseFloat(u[3])};let d=n.match(/^("(?:[^"\\]|\\.)*"|-?\d+(?:\.\d+)?|true|false)\s*==\s*((?:input|data)\S*)$/);if(d)return{type:"equality",negated:t,field:d[2].trim(),value:ye(d[1].trim())};let _=n.match(/^([^\s=!]+)\s*==\s*(.+)$/);if(_)return{type:"equality",negated:t,field:_[1].trim(),value:ye(_[2].trim())};let h=n.match(/^([^\s=!]+)\s*!=\s*(.+)$/);if(h)return{type:"inequality",negated:t,field:h[1].trim(),value:ye(h[2].trim())};let m=n.match(/^(input(?:\.[a-zA-Z0-9_]+|\["[^"]+"\]|\['[^']+'\])+)$/);return m?{type:"truthy",negated:t,field:m[1].trim()}:{type:"truthy",negated:!1,field:st,value:e.trim()}}var st="__unrecognized_condition_forces_deny__";var ro=/[A-Za-z_][A-Za-z0-9_.]*\s*\(/;function Ht(e){let t=[];for(let n of e.rules)for(let r of n.conditions)typeof r.field=="string"&&r.field!==st&&ro.test(r.field)&&t.push(r.field);return t}function Wt(e){let t=e.trim();return t==="true"?!0:t==="false"?!1:/^-?\d+(?:\.\d+)?$/.test(t)?parseFloat(t):t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t}function oo(e){let t=e.trim().replace(/^\[/,"").replace(/\]$/,"").trim();if(t.length===0)return[];let n=[],r="",o=!1,i="";for(let s=0;s<t.length;s++){let l=t[s];o?(r+=l,l===i&&t[s-1]!=="\\"&&(o=!1)):l==='"'||l==="'"?(r+=l,o=!0,i=l):l===","?(n.push(r.trim()),r=""):r+=l}if(o)return null;r.trim().length>0&&n.push(r.trim());let a=[];for(let s of n){let l=s.startsWith('"')&&s.endsWith('"')&&s.length>=2||s.startsWith("'")&&s.endsWith("'")&&s.length>=2,c=/^-?\d+(?:\.\d+)?$/.test(s);if(!l&&!c&&!(s==="true"||s==="false"))return null;a.push(Wt(s))}return a}var io=["tier1","tier2","tier3"];function Qt(e){return typeof e=="string"&&io.includes(e)}var ao=["read_only","transactional","data_processor","external_comms","code_exec","privileged"],so=["internal","customer_facing","experimental","third_party"],Yt=[...ao,...so];function lo(e){return typeof e=="string"&&Yt.includes(e)}function Jt(e){let t=new Set;for(let n of e)lo(n)&&t.add(n);return Yt.filter(n=>t.has(n))}var co=["read_only","record_create","record_update","record_delete","data_export","data_share","data_subject_request","consent_change","funds_transfer","funds_disbursement","payroll_run","trade_execution","ledger_mutation","credit_decision","decision_adverse","account_restriction","account_closure","card_management","purchase_commitment","vendor_management","deal_management","pricing_change","contract_execution","legal_hold","regulatory_filing","personnel_action","employment_termination","compensation_change","campaign_send","content_publish","inventory_adjustment","order_fulfillment","account_servicing","credential_reset","access_grant","permission_change","credential_management","auth_policy_change","security_config_change","logging_change","alert_management","code_change","infrastructure_provision","deployment_change","communication_send","other"];function uo(e){if(typeof e!="string"&&typeof e!="number")return null;let t=String(e).trim().replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"");return t.length>0?t:null}var Vt={github:"version_control",gitlab:"version_control",bitbucket:"version_control",stripe:"payments",adyen:"payments",braintree:"payments",paypal:"payments",square:"payments",salesforce:"crm",hubspot:"crm",pipedrive:"crm",slack:"communication",teams:"communication",twilio:"communication",sendgrid:"communication",mailgun:"communication",gmail:"communication",outlook:"communication",zoom:"communication",aws:"cloud_infra",gcp:"cloud_infra",azure:"cloud_infra",okta:"identity",auth0:"identity",entra:"identity",onelogin:"identity",duo:"identity",snowflake:"data_warehouse",bigquery:"data_warehouse",databricks:"data_warehouse",redshift:"data_warehouse",jira:"ticketing",zendesk:"ticketing",servicenow:"ticketing",freshdesk:"ticketing",linear:"ticketing",workday:"hr",bamboohr:"hr",gusto:"hr",netsuite:"finance_erp",quickbooks:"finance_erp",sap:"finance_erp",xero:"finance_erp",s3:"storage",gcs:"storage",dropbox:"storage",box:"storage",postgres:"database",postgresql:"database",mysql:"database",mongodb:"database",redis:"database"};function po(e){let t=uo(e);return t===null?"other":Vt[t]??Vt[t.replace(/_/g,"")]??"other"}function Zt(e,t){let n={...e};if(t.targetApp!==void 0&&t.targetApp!==null){let r=n.context&&typeof n.context=="object"&&!Array.isArray(n.context)?{...n.context}:{};r.app_category===void 0&&(r.app_category=po(t.targetApp)),n.context=r}return n}var Kt=64,fo=64,be={retrieved_data_categories:[],retrieved_classifications:[],taint:[],action_classes:[],action_counts:{},denied_count:0,inhibited_count:0,event_count:0,target_apps:[]};function Xt(){return{retrieved_data_categories:[],retrieved_classifications:[],taint:[],action_classes:[],action_counts:{},denied_count:0,inhibited_count:0,event_count:0,target_apps:[]}}var mo=new Set(["deny","approval_required","escalate"]);function _e(e,t){if(t.length===0)return[...e];let n=new Set(e);for(let o of t)n.add(o);let r=[...n].sort();return r.length>Kt?r.slice(0,Kt):r}function zt(e){return e?e.filter(t=>typeof t=="string"&&t.length>0):[]}function $e(e){return typeof e=="string"&&e.length>0?e:null}function en(e,t){let n=zt(t.data_categories),r=$e(t.classification),o=zt(t.taint),i=$e(t.action_class),a=i&&co.includes(i)?i:null,s=$e(t.target_app),l=$e(t.decision),c={...e.action_counts};if(a)if(a in c)c[a]=(c[a]??0)+1;else if(Object.keys(c).length<fo)c[a]=1;else{let u=Object.keys(c).sort(),d=u[u.length-1];d!==void 0&&a<d&&(delete c[d],c[a]=1)}return{retrieved_data_categories:_e(e.retrieved_data_categories,n),retrieved_classifications:_e(e.retrieved_classifications,r?[r]:[]),taint:_e(e.taint,o),action_classes:_e(e.action_classes,a?[a]:[]),action_counts:c,denied_count:e.denied_count+(l==="deny"?1:0),inhibited_count:e.inhibited_count+(l&&mo.has(l)?1:0),event_count:e.event_count+1,target_apps:_e(e.target_apps,s?[s]:[])}}var tn="generic",nn=[{id:"finance_accounting",name:"Finance & Accounting",icon:"Landmark",description:"Payments, invoicing, ledgers, transactions, refunds, financial reporting, SOX/AML/KYC controls."},{id:"hr",name:"Human Resources",icon:"Users",description:"Employee records, payroll, hiring/recruiting, benefits, personnel actions and PII of staff."},{id:"engineering",name:"Engineering",icon:"Code",description:"Source code, build/deploy pipelines, infrastructure changes, production systems and developer tooling."},{id:"it_security",name:"IT & Security",icon:"ShieldCheck",description:"Credentials, secrets, access control, configuration, threat/exfiltration prevention and security operations."},{id:"legal",name:"Legal",icon:"Scale",description:"Contracts, NDAs, litigation, counsel communications and legal-hold material."},{id:"privacy_compliance",name:"Privacy & Compliance",icon:"BadgeCheck",description:"GDPR/CCPA/HIPAA, consent, data-subject rights, special-category data and regulatory data handling."},{id:"sales",name:"Sales",icon:"TrendingUp",description:"CRM, leads, deals, quotes, pipeline and customer commercial relationships."},{id:"marketing",name:"Marketing",icon:"Megaphone",description:"Campaigns, content, brand, social channels and prospect/audience data."},{id:"operations",name:"Operations",icon:"Cog",description:"Business operations, logistics, internal workflows, vendor/ops tooling and process automation."},{id:"customer_support",name:"Customer Support",icon:"LifeBuoy",description:"Support tickets, customer communications, account servicing and help-desk actions."},{id:"procurement",name:"Procurement",icon:"ShoppingCart",description:"Purchasing, supplier management, purchase orders, sourcing and spend approvals."},{id:tn,name:"Generic",icon:"Shapes",description:"Catch-all for cross-cutting rules or rules that do not fit a specific function. Assign when no specific function clearly applies."}],go=nn.map(e=>e.id),bs=new Map(nn.map(e=>[e.id,e])),vs=new Set(go);function rn(e){return Array.isArray(e)&&e.length>0?[...e]:[tn]}var ho=/^[a-z][a-z0-9_]*$/;function on(e){if(!Array.isArray(e))return[];let t=[],n=new Set;for(let r of e)typeof r=="string"&&ho.test(r)&&!n.has(r)&&(n.add(r),t.push(r));return t}var _o=["narrow","moderate","broad","unbounded","unknown"];function an(e){return typeof e=="string"&&_o.includes(e)}function sn(e){return e==="open"||e==="closed"?e:null}var bo=["tool_name","function","name","action"];function Pe(e,t,n){if(Array.isArray(e)){if(e.length===0){n.push([`${t}[]`,void 0]);return}for(let r of e)Pe(r,`${t}[]`,n);return}if(e!==null&&typeof e=="object"){let r=Object.entries(e);if(r.length===0){t&&n.push([t,void 0]);return}for(let[o,i]of r)Pe(i,t?`${t}.${o}`:o,n);return}t&&n.push([t,e])}function vo(e){let t=[];return Pe(e,"",t),[...new Set(t.map(([n])=>n))].sort()}function wo(e){let t=e.slice(e.lastIndexOf(".")+1);return t.endsWith("[]")?t.slice(0,-2):t}function ko(e){if(typeof e!="string"&&typeof e!="number")return null;let t=String(e).trim().toLowerCase();return t.length>0?t:null}function Ao(e,t={}){if(t.discriminatorField===null)return null;let n=[];Pe(e,"",n);let r=t.discriminatorField?[t.discriminatorField]:t.discriminatorFields??bo;for(let o of r){let i=null;for(let[a,s]of n){if(wo(a)!==o)continue;let l=ko(s);l!==null&&(i===null||a<i.path)&&(i={path:a,value:l})}if(i)return i.value}return null}function ln(e,t={}){let n=yo("sha256").update(vo(e).join(",")).digest("hex").slice(0,16),r=Ao(e,t);return r!==null?`${n}:${r}`:n}var Io=["action","retrieval","delegation"];function So(e){return typeof e=="string"&&Io.includes(e)}var To=new Set(["rules"]);function cn(e){if(typeof e.id!="string"||typeof e.vendor_id!="string")return null;let t=typeof e.origin_table=="string"?e.origin_table:"";if(!To.has(t))return null;let n=Array.isArray(e.applies_to)?e.applies_to.filter(So):[];return n.length===0?null:{id:e.id,originTable:t,vendorId:e.vendor_id,name:typeof e.name=="string"?e.name:"",description:typeof e.description=="string"?e.description:null,regoSource:typeof e.rego_source=="string"?e.rego_source:null,priority:typeof e.priority=="number"?e.priority:0,enabled:e.enabled===!0,appliesTo:n,targetApp:typeof e.target_app=="string"?e.target_app:null,actionPattern:typeof e.action_pattern=="string"?e.action_pattern:null,trustTier:typeof e.trust_tier=="string"?e.trust_tier:null,surface:typeof e.surface=="string"?e.surface:null,principalExclusions:Array.isArray(e.principal_exclusions)?e.principal_exclusions.filter(r=>typeof r=="string"):null,bypassActive:e.bypass_active===!0,bypassReason:typeof e.bypass_reason=="string"?e.bypass_reason:null,bypassExpiresAt:typeof e.bypass_expires_at=="string"?e.bypass_expires_at:null,redactionSpec:e.redaction_spec??null,failClosedOnEmptySpec:e.fail_closed_on_empty_spec===!0,hitlFallback:e.hitl_fallback==="mask"?"mask":"deny",ruleCode:typeof e.rule_code=="string"?e.rule_code:null}}import{z as qe}from"zod";var bn="[REDACTED]",vn=[{name:"private_key",re:/-----BEGIN (?:[A-Z]+ )?PRIVATE KEY-----[\s\S]*?-----END (?:[A-Z]+ )?PRIVATE KEY-----/g},{name:"jwt",re:/\beyJ[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}\b/g},{name:"aws_access_key",re:/\b(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA|ANVA|AIPA)[0-9A-Z]{16}\b/g},{name:"github_token",re:/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{36}\b|\bgithub_pat_[A-Za-z0-9_]{22,}\b/g},{name:"slack_token",re:/\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g},{name:"stripe_secret",re:/\b(?:sk|rk)_live_[A-Za-z0-9]{16,}\b/g},{name:"google_api_key",re:/\bAIza[0-9A-Za-z_-]{35}\b/g},{name:"llm_api_key",re:/\bsk-(?:ant-|proj-)?[A-Za-z0-9_-]{20,}\b/g},{name:"bearer_token",re:/\bBearer\s+[A-Za-z0-9._~+/=-]{20,}/g},{name:"connection_string",re:/\b(?:postgres(?:ql)?|mysql|mongodb(?:\+srv)?|redis|amqps?):\/\/[^\s/@:]+:[^\s/@:]+@[^\s'"]+/g},{name:"us_ein",re:/\b\d{2}-\d{7}\b/g},{name:"ssn",re:/\b\d{3}[- ]\d{2}[- ]\d{4}\b/g},{name:"email",re:/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g},{name:"swift_bic",re:/\b[A-Z]{6}[A-Z0-9]{2}(?:[A-Z0-9]{3})?\b/g},{name:"us_phone",re:/\b(?:\+?1[ .-]?)?\(?\d{3}\)?[ .-]?\d{3}[ .-]?\d{4}\b/g},{name:"ipv4",re:/\b(?:(?:25[0-5]|2[0-4]\d|1?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|1?\d?\d)\b/g},{name:"mac_address",re:/\b(?:[0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}\b/g}];function wn(e){if(!/^\d+$/.test(e))return!1;let t=0,n=!1;for(let r=e.length-1;r>=0;r--){let o=e.charCodeAt(r)-48;n&&(o*=2,o>9&&(o-=9)),t+=o,n=!n}return t%10===0}function Eo(e){let t=e.replace(/\s/g,"").toUpperCase();if(!/^[A-Z]{2}\d{2}[A-Z0-9]{10,30}$/.test(t))return!1;let n=t.slice(4)+t.slice(0,4),r=0;for(let o=0;o<n.length;o++){let i=n[o],a=i>="A"&&i<="Z"?String(i.charCodeAt(0)-55):i;for(let s=0;s<a.length;s++)r=(r*10+(a.charCodeAt(s)-48))%97}return r===1}function Ro(e){if(!/^\d{9}$/.test(e))return!1;let t=[3,7,1,3,7,1,3,7,1],n=0;for(let r=0;r<9;r++)n+=(e.charCodeAt(r)-48)*t[r];return n%10===0}var Co=[{name:"pan",re:/\d(?:[ -]?\d){12,18}/g,normalize:e=>e.replace(/[ -]/g,""),validate:e=>e.length>=13&&e.length<=19&&wn(e)},{name:"iban",re:/\b[A-Z]{2}\d{2}(?:[ ]?[A-Z0-9]){10,30}\b/g,normalize:e=>e.replace(/\s/g,"").toUpperCase(),validate:Eo},{name:"aba_routing",re:/\b\d{9}\b/g,normalize:e=>e,validate:Ro}],x=Object.fromEntries(vn.map(e=>[e.name,e.re.source])),kn=["private_key","jwt","aws_access_key","github_token","slack_token","stripe_secret","google_api_key","llm_api_key","bearer_token","connection_string","pan","iban","aba_routing","us_ein","swift_bic","ssn","email","us_phone","ipv4","mac_address"],Ue={private_key:{id:"private_key",label:"Private keys (PEM)",description:"PEM-encoded private keys (RSA / EC / EdDSA / OpenSSH).",category:"secret",example:`-----BEGIN PRIVATE KEY-----
4
5
  MIIEv\u2026
5
- -----END PRIVATE KEY-----`,template:{pattern:E.private_key,mode:"full"},defaultEnabled:!0},jwt:{id:"jwt",label:"JWT / bearer tokens",description:"JSON Web Tokens (base64url header.payload.signature).",category:"secret",example:"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIn0.dBjftJeZ4CVP",template:{pattern:E.jwt,mode:"full"},defaultEnabled:!0},aws_access_key:{id:"aws_access_key",label:"AWS access key IDs",description:"AWS access / identity key ids (AKIA / ASIA / AROA \u2026).",category:"secret",example:"AKIAIOSFODNN7EXAMPLE",template:{pattern:E.aws_access_key,mode:"full"},defaultEnabled:!0},github_token:{id:"github_token",label:"GitHub tokens",description:"GitHub personal / OAuth tokens (classic ghp_\u2026 + fine-grained).",category:"secret",example:"ghp_0123456789abcdef0123456789abcdef0123",template:{pattern:E.github_token,mode:"full"},defaultEnabled:!0},slack_token:{id:"slack_token",label:"Slack tokens",description:"Slack bot / user / app tokens (xoxb- / xoxp- \u2026).",category:"secret",example:"xoxb-1234567890-abcdefghijkl",template:{pattern:E.slack_token,mode:"full"},defaultEnabled:!0},stripe_secret:{id:"stripe_secret",label:"Stripe secret keys",description:"Stripe live secret / restricted keys (sk_live_ / rk_live_).",category:"secret",example:"sk_live_0123456789abcdefABCDEF",template:{pattern:E.stripe_secret,mode:"full"},defaultEnabled:!0},google_api_key:{id:"google_api_key",label:"Google API keys",description:"Google API keys (AIza\u2026).",category:"secret",example:"AIzaSyA1234567890abcdefghijklmnopqrstuv",template:{pattern:E.google_api_key,mode:"full"},defaultEnabled:!0},llm_api_key:{id:"llm_api_key",label:"LLM provider API keys",description:"OpenAI / Anthropic secret keys (sk-\u2026, sk-proj-\u2026, sk-ant-\u2026).",category:"secret",example:"sk-ant-api03-AbCdEf0123456789AbCdEf01",template:{pattern:E.llm_api_key,mode:"full"},defaultEnabled:!0},bearer_token:{id:"bearer_token",label:"Authorization bearer tokens",description:"Credentials following an HTTP `Authorization: Bearer \u2026` header.",category:"secret",example:"Bearer abcdef0123456789abcdef0123456789",template:{pattern:E.bearer_token,mode:"full"},defaultEnabled:!0},connection_string:{id:"connection_string",label:"Connection strings (with password)",description:"Database / broker DSNs carrying an inline password (scheme://user:pass@host).",category:"secret",example:"postgres://app:s3cr3t@db.internal:5432/main",template:{pattern:E.connection_string,mode:"full"},defaultEnabled:!0},pan:{id:"pan",label:"Payment card numbers (PAN)",description:"Luhn-valid 13\u201319 digit primary account numbers (PCI-DSS).",category:"financial",example:"4242 4242 4242 4242",template:{pattern:"\\b\\d{13,19}\\b",mode:"partial",keepLast:4},defaultEnabled:!0},iban:{id:"iban",label:"IBAN bank account numbers",description:"ISO 13616 IBANs (mod-97 validated); keeps the last 4 visible.",category:"financial",example:"DE89 3704 0044 0532 0130 00",template:{pattern:"\\b[A-Z]{2}\\d{2}(?:[ ]?[A-Z0-9]){10,30}\\b",mode:"partial",keepLast:4},defaultEnabled:!0},aba_routing:{id:"aba_routing",label:"ABA routing numbers",description:"US bank routing-transit numbers (9-digit, checksum-validated). DEFAULT-OFF (9-digit false-positive surface).",category:"financial",example:"021000021",template:{pattern:"\\b\\d{9}\\b",mode:"full"},defaultEnabled:!1},us_ein:{id:"us_ein",label:"US Employer ID (EIN)",description:"US tax Employer Identification Numbers (XX-XXXXXXX).",category:"financial",example:"12-3456789",template:{pattern:E.us_ein,mode:"full"},defaultEnabled:!0},swift_bic:{id:"swift_bic",label:"SWIFT / BIC codes",description:"Bank SWIFT/BIC codes (8 or 11 chars). DEFAULT-OFF (matches uppercase tokens).",category:"financial",example:"DEUTDEFF500",template:{pattern:E.swift_bic,mode:"full"},defaultEnabled:!1},ssn:{id:"ssn",label:"US Social Security numbers",description:"Dashed / spaced US SSNs (e.g. 123-45-6789).",category:"pii",example:"123-45-6789",template:{pattern:E.ssn,mode:"partial",keepLast:4},defaultEnabled:!0},email:{id:"email",label:"Email addresses",description:"Email addresses (the mailbox is masked, the domain kept).",category:"pii",example:"alice@acme.com",template:{pattern:E.email,mode:"email"},defaultEnabled:!0},us_phone:{id:"us_phone",label:"US phone numbers",description:"US phone numbers in common formats. DEFAULT-OFF (10-digit false-positive surface).",category:"pii",example:"(415) 555-0132",template:{pattern:E.us_phone,mode:"partial",keepLast:4},defaultEnabled:!1},ipv4:{id:"ipv4",label:"IPv4 addresses",description:"Dotted-quad IPv4 addresses. DEFAULT-OFF (common + usually benign).",category:"identifier",example:"203.0.113.42",template:{pattern:E.ipv4,mode:"full"},defaultEnabled:!1},mac_address:{id:"mac_address",label:"MAC addresses",description:"Hardware MAC addresses. DEFAULT-OFF.",category:"identifier",example:"3c:22:fb:1a:2b:3c",template:{pattern:E.mac_address,mode:"full"},defaultEnabled:!1}},ja=new Set(on.filter(e=>!rt[e].defaultEnabled));function Yr(e,t){let n=new Set;for(let r of on)(rt[r].defaultEnabled?!e?.has(r):t?.has(r))||n.add(r);return n}function Jr(e,t,n,r){if(typeof e!="string"||e.length===0)return e;let i=e;for(let{name:o,re:a}of nn){let l=o;n.has(l)||(i=i.replace(a,()=>(r?.(l),t)))}for(let{name:o,re:a,normalize:l,validate:c}of Qr)n.has(o)||(i=i.replace(a,s=>c(l(s))?(r?.(o),t):s));return i}function Zr(e,t=Gr,n,r){let i=new Set,o=Yr(n,r),a=!o.has("pan"),l=s=>{i.add(s)},c=s=>{if(typeof s=="string")return Jr(s,t,o,l);if(typeof s=="number"&&Number.isInteger(s)&&s>0){if(!a)return s;let u=String(s);return u.length>=13&&u.length<=19&&rn(u)?(i.add("pan"),t):s}if(Array.isArray(s))return s.map(u=>c(u));if(s!==null&&typeof s=="object"){let u=s,d={};for(let h of Object.keys(u))d[h]=c(u[h]);return d}return s};return{value:c(e),detectors:[...i].sort()}}var Xr=/[\u00AD\u200B-\u200F\u202A-\u202E\u2060\u2066-\u2069\uFEFF]/g,an=Object.freeze({\u0430:"a",\u0435:"e",\u043E:"o",\u0440:"p",\u0441:"c",\u0443:"y",\u0445:"x",\u0456:"i",\u0455:"s",\u043A:"k",\u043C:"m",\u0442:"t",\u043D:"h",\u0432:"b",\u0433:"r",\u03BF:"o",\u03B1:"a",\u03C1:"p",\u03B9:"i",\u03C4:"t",\u03B5:"e",\u03BA:"k",\u03BD:"v",\u03C5:"u",\u03B7:"n",\u0131:"i","\u04CF":"l",\u0578:"n"}),ei=new RegExp(`[${Object.keys(an).join("")}]`,"gu"),ti=Object.freeze({4:"a","@":"a",3:"e",1:"i","!":"i",0:"o",5:"s",$:"s",7:"t",9:"g","(":"c",8:"b"}),sn="\u2801\u2803\u2809\u2819\u2811\u280B\u281B\u2813\u280A\u281A\u2805\u2807\u280D\u281D\u2815\u280F\u281F\u2817\u280E\u281E\u2825\u2827\u283A\u282D\u283D\u2835",ni=Object.freeze(Object.fromEntries([...sn].map((e,t)=>[e,String.fromCharCode(97+t)]))),ri=new RegExp(`[${sn}\u2800]`,"g"),ln=/[⠀-⣿]/;function ii(e){let t="";for(let n of e){let r=n.codePointAt(0);r!==void 0&&(r>=917536&&r<=917630?t+=String.fromCodePoint(r-917504):r>=917504&&r<=917631||(t+=n))}return t}function oi(e){return e.replace(Xr,"")}function cn(e){return e.replace(ei,t=>an[t]??t)}function ai(e){return e.replace(/[4@31!05$79(8]/g,t=>ti[t]??t)}function si(e){return e.replace(/[a-zA-Z]/g,t=>{let n=t<="Z"?65:97;return String.fromCharCode((t.charCodeAt(0)-n+13)%26+n)})}function li(e){return ln.test(e)?e.replace(ri,t=>t==="\u2800"?" ":ni[t]??t):e}function Wt(e){let t;try{t=ii(e)}catch{t=e}try{t=t.normalize("NFKC")}catch{}return t=oi(t),t=cn(t),t}var ci=/^[A-Za-z0-9+/]{16,}={0,2}$/,ui=/^(?:[0-9a-fA-F]{2}\s*){8,}$/,Qt=/[A-Za-z0-9+/]{20,}={0,2}/g;function nt(e){if(e.length===0)return 0;let t=0;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);(r===9||r===10||r===13||r>=32&&r<=126||r>=160&&r!==65533)&&t++}return t/e.length}var un=new TextDecoder("utf-8",{fatal:!1});function dn(e){let t;try{t=atob(e)}catch{return[]}let n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=t.charCodeAt(i)&255;let r=un.decode(n);return t===r?[t]:[r,t]}function di(e){let t=e.replace(/\s+/g,"");if(t.length===0||t.length%2!==0)return[];let n=new Uint8Array(t.length/2);for(let o=0;o<n.length;o++){let a=Number.parseInt(t.slice(o*2,o*2+2),16);if(Number.isNaN(a))return[];n[o]=a}let r="";for(let o=0;o<n.length;o++)r+=String.fromCharCode(n[o]);let i=un.decode(n);return r===i?[r]:[i,r]}function Yt(e){let t=e.trim(),n=[];if(ui.test(t))for(let r of di(t))n.push({decoded:r,textiness:nt(r)});if(ci.test(t)&&t.length%4===0)for(let r of dn(t))n.push({decoded:r,textiness:nt(r)});return n}function Jt(e,t){let n=[],r;for(Qt.lastIndex=0;(r=Qt.exec(e))!==null&&n.length<t;){let i=r[0];if(i.length%4===0)for(let o of dn(i))n.push({decoded:o,textiness:nt(o)})}return n}var pi=Object.freeze({maxDepth:3,byteCap:262144,maxNodes:256,maxBlobsPerNode:8});function pn(e,t=pi){if(typeof e!="string"||e.length===0)return{views:[],anyDecoded:!1,truncated:!1,nodes:0,maxDepthSeen:0};let{maxDepth:n,byteCap:r,maxNodes:i,maxBlobsPerNode:o}=t,a=new Set,l=_=>{_.length>0&&_.length<=r&&a.add(_)},c=!1,s=!1,u=0,d=0,h=[{s:e,depth:0}];for(;h.length>0;){if(u>=i){s=!0;break}let _=h.pop();if(_===void 0)break;let{s:g,depth:f}=_;if(g.length>r){s=!0;continue}u++,f>d&&(d=f);let b=Wt(g);l(b);let L=ai(b);if(L!==b&&l(L),l(si(b)),ln.test(g)&&l(li(b)),f>=n){let I=Wt(g);(Yt(I).length>0||Jt(I,o).length>0)&&(s=!0);continue}let F=[...Yt(b),...Jt(b,o)];for(let I of F){if(c=!0,I.decoded.length>r){s=!0;continue}I.textiness>=.85&&I.decoded!==b?h.push({s:I.decoded,depth:f+1}):l(I.decoded)}}return{views:[...a],anyDecoded:c,truncated:s,nodes:u,maxDepthSeen:d}}var fn=["hidden_text_carrier","injected_turn_boundary","mixed_script_token","nested_encoding_payload"],fi=Object.freeze(["hidden_text_carrier","injected_turn_boundary","mixed_script_token"]),mi=8,gi=new Set([173,8203,8204,8205,8206,8207,8288,65279,8234,8235,8236,8237,8238,8294,8295,8296,8297]),Zt=e=>e!==void 0&&(e>=65&&e<=90||e>=97&&e<=122);function hi(e){let t=[...e].map(r=>r.codePointAt(0)),n=0;for(let r=0;r<t.length;r++){let i=t[r];if(i>=917504&&i<=917631||gi.has(i)&&Zt(t[r-1])&&Zt(t[r+1])&&(n++,n>=mi))return!0}return!1}var _i=/^[ \t]*(?:system|assistant|developer|user)[ \t]*:/i;function yi(e){let t=e.split(/\r?\n/),n=!1;for(let r of t){if(_i.test(r)){if(n)return!0;continue}r.trim().length>0&&(n=!0)}return!1}var bi=[{name:"latin",lo:65,hi:591},{name:"greek",lo:880,hi:1023},{name:"cyrillic",lo:1024,hi:1279}];function vi(e){for(let t of bi)if(e>=t.lo&&e<=t.hi)return t.name;return null}function wi(e){for(let t of e.split(/\s+/)){if(t.length<4)continue;let n=0,r=0,i=!0;for(let o of t){let a=vi(o.codePointAt(0));if(a===null){i=!1;break}a==="latin"?n++:cn(o)!==o&&r++}if(i&&n>0&&r>0)return!0}return!1}var Xt=Object.freeze({signals:[],contributes:!1});function ki(e){if(typeof e!="string"||e.length===0)return{...Xt,signals:[]};let t=new Set;try{hi(e)&&t.add("hidden_text_carrier"),yi(e)&&t.add("injected_turn_boundary"),wi(e)&&t.add("mixed_script_token");let{anyDecoded:n,maxDepthSeen:r,truncated:i}=pn(e);n&&(r>=2||i)&&t.add("nested_encoding_payload")}catch{return{...Xt,signals:[]}}return{signals:[...fn.filter(n=>t.has(n))],contributes:fi.some(n=>t.has(n))}}var Le=[{name:"override_instructions",re:/\bignore (?:all |the )?(?:previous|above|prior) (?:instructions|prompts?)\b/i},{name:"disregard_instructions",re:/\bdisregard (?:the )?(?:above|previous|system)\b/i},{name:"role_tag",re:/<\/?(system|assistant|instructions|host_context)\b/i},{name:"privilege_override",re:/\b(grant|escalate|elevate) (admin|root|all|full) (access|privileges?)\b/i},{name:"tool_smuggle",re:/```[\s\S]*?(tool_call|function_call)/i}];function en(e){return typeof e!="string"||e.length===0?[]:Le.filter(({re:t})=>t.test(e)).map(({name:t})=>t)}function Ai(e){if(typeof e!="string"||e.length===0)return[];let t=new Set(en(e)),{views:n}=pn(e);for(let r of n)for(let i of en(r))t.add(i);return Le.filter(r=>t.has(r.name)).map(r=>r.name)}function Ii(e){let t=new Set,n=new Set,r=!1,i=o=>{if(o!=null){if(typeof o=="string"){for(let l of Ai(o))t.add(l);let a=ki(o);for(let l of a.signals)n.add(l);a.contributes&&(r=!0);return}if(Array.isArray(o)){for(let a of o)i(a);return}if(typeof o=="object")for(let a of Object.values(o))i(a)}};return i(e),{matched:t.size>0||r,signatures:Le.filter(o=>t.has(o.name)).map(o=>o.name),structural:fn.filter(o=>n.has(o))}}function Si(e){return Ii(e).matched}var qa=Le.map(e=>e.name);var Ti=new Set(["untrusted","external","public","public_internet","external_third_party","web"]);var Ei="i:injection";function mn(e){let t=new Set;if(e.content!==void 0&&e.content!==null){let{detectors:i}=Zr(e.content);for(let o of i){let a=rt[o]?.category;a&&t.add(`c:${a}`)}Si(e.content)&&t.add(Ei)}let n=e.resourceMetadata??{},r=n.source_trust;return(n.untrusted_source===!0||typeof r=="string"&&Ti.has(r.toLowerCase()))&&t.add("i:untrusted"),[...t].sort()}var et="(?:system\\s+prompt|initial\\s+(?:instructions|prompt)|system\\s+(?:instructions|message)|hidden\\s+(?:instructions|prompt)|your\\s+(?:system\\s+prompt|initial\\s+instructions|instructions|prompt)|the\\s+prompt\\s+(?:above|you\\s+were\\s+given))",Ua=[{name:"reveal_prompt",re:new RegExp(`\\b(?:reveal|show|print|repeat|output|echo|display|expose|dump|leak|reprint|divulge|disclose)\\b[\\s\\S]{0,40}?\\b${et}\\b`,"i")},{name:"what_is_prompt",re:new RegExp(`\\bwhat\\s+(?:is|are|were)\\b[\\s\\S]{0,20}?\\b${et}\\b`,"i")},{name:"tell_me_prompt",re:new RegExp(`\\b(?:tell|give|send|show)\\s+me\\b[\\s\\S]{0,30}?\\b${et}\\b`,"i")},{name:"repeat_above",re:/\b(?:repeat|print|output|echo|reproduce)\b[\s\S]{0,20}?\b(?:everything|all\s+(?:the\s+)?(?:text|words))\b[\s\S]{0,12}?\b(?:above|before|preceding|verbatim|word\s+for\s+word)\b/i}],tn="(?:instructions?|prompts?|rules?|directives?|guidelines?|constraints?|guardrails?)",Ri=`(?:(?:all\\s+|any\\s+|the\\s+|these\\s+|those\\s+)*(?:previous|prior|preceding|earlier|above|foregoing|initial|original|system|developer)\\s+${tn}|your\\s+(?:(?:system|initial|original|previous|prior|current)\\s+)?(?:${tn}|programming|training))`,Ci="(?:(?:all|any|every|the|of|and|now|please|completely|entirely|totally|immediately)\\s+){0,3}",tt="(?:\\b(?:unrestricted|unfiltered|uncensored|unbounded|unlimited|unchained|jailbroken|lawless|amoral)\\b|\\b(?:DAN|STAN|DUDE|AIM)\\b|\\bno\\s+(?:longer\\s+)?(?:restrictions?|limits?|rules?|guidelines?|filters?|boundaries|constraints?)\\b|\\bwithout\\s+(?:any\\s+)?(?:restrictions?|limits?|rules?|guidelines?|filters?|constraints?|censorship)\\b|\\b(?:free|freed|released)\\s+from\\s+(?:your\\s+)?(?:restrictions?|limits?|rules?|guidelines?|guardrails?|programming|constraints?)\\b|\\b(?:can|will|are\\s+able\\s+to)\\s+(?:do|say)\\s+anything\\b|\\bignore\\s+(?:all\\s+)?(?:your\\s+)?(?:previous\\s+|prior\\s+|system\\s+)?(?:instructions?|rules?|guidelines?)\\b)",xi="(?:ignore|disregard|forget|override|overrule|bypass|act|behave|respond|reply|answer|pretend|roleplay|role-play|assume|impersonate|only|always|never|no\\s+longer|instead|obey|comply\\s+with|follow\\s+(?:only|my|these))",Ba=[{name:"override_instructions",re:new RegExp(`\\b(?:ignore|disregard|forget|discard|override|overrule|bypass|delete|erase)\\s+${Ci}${Ri}\\b`,"i")},{name:"forget_everything_prior",re:/\b(?:forget|ignore|disregard|erase|discard)\s+(?:about\s+|all\s+|any\s+)?(?:everything|anything)\b[\s\S]{0,24}?\b(?:above|before|previously|prior|earlier|you\s+(?:were|have\s+been)\s+(?:told|instructed|given|programmed))\b/i},{name:"persona_reassignment_jailbreak",re:new RegExp(`\\byou\\s+are\\s+now\\s+(?:(?:a|an|the)\\s+)?[\\s\\S]{0,48}?${tt}`,"i")},{name:"constraint_release",re:/\byou\s+are\s+no\s+longer\s+(?:bound|restricted|limited|constrained|obligated|governed|subject\s+to|required\s+to)\b/i},{name:"from_now_on_reassignment",re:new RegExp(`\\bfrom\\s+now\\s+on\\s*,?\\s+you\\s+(?:are|will|must|shall)\\s+(?:${xi}|(?:a|an|the)\\b[\\s\\S]{0,40}?${tt}|${tt})`,"i")},{name:"new_instructions_header",re:/^\s*(?:[#*>-]+\s*)?(?:new|real|actual|true|secret|hidden|override)\s+(?:system\s+)?(?:instructions?|prompts?|directives?)\s*:/im}];var Va=Object.freeze({"\u2019":"'",\u02BC:"'","\uFF07":"'","\u02B9":"'","\u2032":"'"});var U=e=>`[^.!?;\\n]{0,${e}}?`,Oi=["\\bi\\s+(?:can'?t|cannot|can\\s+not|won'?t|will\\s+not)\\b","\\bi(?:'m|\\s+am)\\s+(?:not\\s+able\\s+to|unable\\s+to|not\\s+going\\s+to|not\\s+permitted\\s+to|not\\s+allowed\\s+to)\\b"].join("|"),gn="(?:help|assist|provide|create|generate|produce|write|compose|draft|comply|fulfil|fulfill|share|disclose|reveal|perform|execute|run|send|transmit|publish|export|approve|grant|carry\\s+out|do\\s+that|do\\s+this|do\\s+so|go\\s+ahead)",Ka=Object.freeze([{id:"capability_denial",class:"strong",re:new RegExp([`(?:${Oi})\\s${U(40)}\\b${gn}\\b`,"\\b(?:that|this|it)(?:'s|\\s+is)\\s+not\\s+something\\s+i\\s+(?:can|could|am\\s+able\\s+to|'m\\s+able\\s+to)\\b",`\\b(?:falls|sits|is)\\s+outside\\s+(?:of\\s+)?(?:what|the\\s+(?:scope|range|bounds))\\b${U(40)}\\bi\\s+(?:can|am|'m)\\b`,"\\bnot\\s+something\\s+i(?:'m|\\s+am)\\s+(?:able|willing|permitted|allowed)\\s+to\\b"].join("|"),"i")},{id:"explicit_decline",class:"strong",re:new RegExp(["\\bi\\s+(?:must|have\\s+to|need\\s+to|will\\s+have\\s+to|am\\s+going\\s+to|'m\\s+going\\s+to)\\s+(?:respectfully\\s+)?decline\\b","\\bi(?:'m|\\s+am)\\s+not\\s+(?:comfortable|willing|prepared)\\b","\\bi(?:'ll|\\s+will)\\s+(?:have\\s+to\\s+)?pass\\s+on\\b","\\bi\\s+(?:must|have\\s+to)\\s+refuse\\b"].join("|"),"i")},{id:"policy_citation",class:"strong",re:new RegExp([`\\b(?:against|contrary\\s+to|prohibited\\s+by|forbidden\\s+by|in\\s+violation\\s+of|violates)\\s${U(24)}\\b(?:polic(?:y|ies)|guidelines?|terms\\s+of\\s+(?:use|service)|rules\\s+of\\s+engagement|code\\s+of\\s+conduct)\\b`,`\\b(?:my|our|the|company|organi[sz]ation'?s?)\\s+(?:polic(?:y|ies)|guidelines?)\\s${U(24)}\\b(?:do(?:es)?\\s+not\\s+(?:allow|permit)|prohibit|forbid|prevent)\\b`,`\\bnot\\s+(?:permitted|allowed|authori[sz]ed)\\s+(?:under|by)\\s${U(24)}\\b(?:polic(?:y|ies)|guidelines?)\\b`].join("|"),"i")},{id:"guardrail_selfreference",class:"strong",re:new RegExp(["\\bi(?:'ve|\\s+have)\\s+been\\s+(?:instructed|configured|told|trained)\\s+not\\s+to\\b","\\bi(?:'m|\\s+am)\\s+(?:designed|configured|programmed|built|set\\s+up)\\s+not\\s+to\\b",`\\bmy\\s+(?:safety\\s+)?(?:instructions|configuration|guardrails?|constraints|training)\\s${U(24)}\\b(?:prevent|prohibit|forbid|do(?:es)?\\s+not\\s+(?:allow|permit)|preclude)\\b`,"\\b(?:outside|beyond)\\s+(?:my|the)\\s+(?:permitted|authori[sz]ed|configured|approved)\\s+(?:scope|remit|capabilities|actions|operations)\\b"].join("|"),"i")},{id:"ethical_objection",class:"strong",re:new RegExp(["\\b(?:that|this|doing\\s+(?:so|that)|what\\s+you(?:'re|\\s+are)\\s+asking|the\\s+request|such\\s+a\\s+request)\\s+(?:would\\s+be|is|are)\\s+(?:clearly\\s+|both\\s+|potentially\\s+)?(?:illegal|unethical|unlawful|harmful|fraudulent)\\b","\\bi\\s+(?:do\\s+not|don'?t)\\s+condone\\b","\\b(?:goes|would\\s+go|runs)\\s+against\\s+my\\s+(?:principles|values|ethics)\\b","\\bi\\s+(?:can'?t|cannot|won'?t)\\s+in\\s+good\\s+conscience\\b"].join("|"),"i")},{id:"apology_marker",class:"weak",re:new RegExp("\\b(?:i(?:'m|\\s+am)\\s+(?:really\\s+|very\\s+|terribly\\s+|so\\s+)?sorry|i\\s+apologi[sz]e|my\\s+apologies)\\b","i")}]),za=Object.freeze([/```/,/\b(?:here(?:'s|\s+is|\s+are)|below\s+(?:is|are|you(?:'ll|\s+will)\s+find)|the\s+following\s+(?:is|are))\b/i,new RegExp(`\\b(?:but|however|instead|although|that\\s+said)\\b${U(60)}\\b(?:i\\s+(?:can|could)(?!'t)\\s${U(30)}\\b${gn}\\b|i(?:'d|\\s+would)\\s+be\\s+happy\\s+to\\b|i(?:'m|\\s+am)\\s+able\\s+to\\b)`,"i"),/\bwhat\s+i\s+can\s+do\s+(?:instead|is|for\s+you)\b/i]);var _e=e=>`[^.!?;\\n]{0,${e}}?`,Ga=Object.freeze([{id:"vulnerability_scanning",objectPatterns:[/\b(?:vulnerability|vuln|security)\s+(?:scan|scans|scanning|assessment|audit|test|testing)\b/i,/\bpen(?:etration)?[\s-]?test(?:ing)?\b/i,/\bport\s+scan(?:ning)?\b/i,/\b(?:exploit|nmap|metasploit|nessus|burp\s+suite)\b/i,/\bCVE-\d{4}-\d{4,7}\b/i],purposeFunctions:["it_security","engineering"],purposePatterns:[/\b(?:security|vulnerability|incident\s+respon\w{0,4}|threat|soc|red\s+team|phishing|malware)\b/i]},{id:"credential_access",objectPatterns:[/\b(?:credential|password|passphrase|api\s+key|access\s+key|secret|token|private\s+key|ssh\s+key)s?\b/i,/\b(?:vault|secrets?\s+manager|keychain|keystore)\b/i,/\bservice\s+account\s+key\b/i],purposeFunctions:["it_security","engineering"],purposePatterns:[/\b(?:security|identity|iam|credential|secrets?\s+manage\w{0,4}|vault|platform|devops)\b/i]},{id:"financial_transaction",objectPatterns:[/\b(?:wire\s+transfer|bank\s+transfer|payout|disbursement|chargeback)\b/i,new RegExp(`\\b(?:approve|issue|initiate|process|release)\\s${_e(20)}\\b(?:payment|refund|invoice|transfer|purchase\\s+order)s?\\b`,"i"),new RegExp(`\\b(?:move|transfer)\\s${_e(20)}\\b(?:funds|money)\\b`,"i")],purposeFunctions:["finance_accounting","procurement"],purposePatterns:[/\b(?:finance|financial|accounting|invoice|invoicing|payment|payments|billing|refund|refunds|treasury|procurement|spend|purchasing|fraud|kyc)\b/i]},{id:"personnel_data",objectPatterns:[/\b(?:employee|personnel|payroll|hr|staff)\s+(?:record|records|data|file|files|information|details)\b/i,/\b(?:salary|salaries|compensation|performance\s+review|termination\s+letter)s?\b/i,/\b(?:home\s+address|social\s+security\s+number|national\s+insurance\s+number)e?s?\b/i],purposeFunctions:["hr","privacy_compliance"],purposePatterns:[/\b(?:hr|human\s+resources|people\s+ops|payroll|benefits|recruit\w{0,4}|onboarding|privacy|dsar|consent)\b/i]},{id:"regulated_advice",objectPatterns:[/\b(?:legal|medical|tax|investment|financial)\s+advice\b/i,/\bpractis\w{0,3}\s+law\b/i,/\b(?:diagnose|diagnosis|prescribe|prescription)\b/i,/\b(?:binding|enforceable)\s+(?:opinion|interpretation)\b/i],purposeFunctions:["legal","privacy_compliance"],purposePatterns:[/\b(?:legal|compliance|counsel|contract|contracts|litigation|nda|privacy|regulator\w{0,2}|audit\w{0,3})\b/i]},{id:"data_export",objectPatterns:[new RegExp(`\\b(?:export|download|dump|extract|exfiltrat\\w{0,3}|bulk\\s+copy)\\b\\s${_e(30)}\\b(?:data|database|dataset|records?|table|tables|customer\\s+list|contact\\s+list|report)\\b`,"i"),/\b(?:full|entire|whole)\s+(?:database|dataset|customer\s+table)\b/i],purposeFunctions:["operations","engineering","privacy_compliance"],purposePatterns:[/\b(?:data\s+(?:pipeline|engineering|platform)|etl|export|reporting|analytics|operations|document\s+extract\w{0,3}|forecast\w{0,3})\b/i]},{id:"code_execution",objectPatterns:[new RegExp(`\\b(?:run|execute|invoke)\\s${_e(24)}\\b(?:script|scripts|command|commands|shell|code|binary|query|migration)\\b`,"i"),/\b(?:shell|root|sudo|admin)\s+(?:access|command|session)\b/i,/\bagainst\s+(?:the\s+)?production\s+(?:system|server|database|environment)s?\b/i],purposeFunctions:["engineering","it_security"],purposePatterns:[/\b(?:engineering|developer|devops|platform|release|deploy\w{0,4}|build|pipeline|sandbox|test\s+data|change\s+window)\b/i]},{id:"external_communication",objectPatterns:[new RegExp(`\\b(?:send|post|publish|email|tweet|message|broadcast)\\b\\s${_e(30)}\\b(?:external|customer|customers|public|press|social\\s+media|third[\\s-]party|prospect|prospects)\\b`,"i"),/\b(?:cold\s+outreach|marketing\s+blast|phishing\s+email|press\s+release)\b/i],purposeFunctions:["marketing","sales","customer_support"],purposePatterns:[/\b(?:marketing|campaign|outreach|email\s+assistant|support|customer|sales|lead|leads|communication|communications)\b/i]}]);var it="[REDACTED]",ne="\u2022",Ne=e=>/[A-Za-z0-9]/.test(e);function hn(e,t,n,r){let i=Array.from(e),o=i.length,a=Math.max(0,Math.floor(t)||0),l=Math.max(0,Math.floor(n)||0),c=r.length>0?r:ne,s=a+l>=o;return i.map((u,d)=>!s&&(d<a||d>=o-l)?u:Ne(u)?c:u).join("")}function Ni(e,t){let n=e.indexOf("@");if(n<=0||n>=e.length-1)return hn(e,0,0,t);let r=e.slice(0,n),i=e.slice(n),o=t.length>0?t:ne;return(r.length<=1?o:r[0]+Array.from(r.slice(1)).map(a=>Ne(a)?o:a).join(""))+i}function Li(e,t,n){let r=n.length>0?n:ne,i=new Array(e.length).fill(!1);if(typeof t=="string"&&t.length>0)try{let s=new RegExp(t,"g"),u;for(;(u=s.exec(e))!==null;){if(u[0].length===0){s.lastIndex++;continue}for(let d=u.index;d<u.index+u[0].length;d++)i[d]=!0}}catch{}let o=!1,a=!0;for(let s=0;s<e.length;s++)if(Ne(e[s])&&(o=!0,!i[s])){a=!1;break}let l=o&&a,c="";for(let s=0;s<e.length;s++){let u=e[s];!l&&i[s]||!Ne(u)?c+=u:c+=r}return c}function _n(e,t){let n=t.mode??"full";return n==="partial"?hn(e,t.keepFirst??0,t.keepLast??0,t.maskChar??ne):n==="email"?Ni(e,t.maskChar??ne):n==="custom"?Li(e,t.keepPattern,t.maskChar??ne):t.replacement??it}function Fi(e,t){return typeof e=="string"?_n(e,t):t.replacement??it}function yn(e){let t=[],n=e.replacement??it;for(let r of e.patterns??[])typeof r!="string"||r.length===0||t.push({source:r,replacer:()=>n});for(let r of e.directives??[]){let{pattern:i}=r;typeof i!="string"||i.length===0||t.push({source:i,replacer:o=>_n(o,r)})}return t}function bn(e,t){let n=e;for(let{source:r,replacer:i}of t){let o;try{o=new RegExp(r,"g")}catch(a){let l=a instanceof Error?a.message:String(a);throw new Error(`[visiq-redact] Invalid redaction pattern "${r}": ${l}`)}n=n.replace(o,a=>i(a))}return n}function O(e,t){return e==null?e:typeof e=="string"?Mi(e,t):typeof e=="object"?Di(e,t):e}function Mi(e,t){if(typeof e!="string")return e;let n=yn(t);return n.length===0?e:bn(e,n)}function Di(e,t){let n=new Map;for(let l of t.fields??[])typeof l=="string"&&l.length>0&&n.set(l,{field:l,mode:"full",replacement:t.replacement});for(let l of t.directives??[])typeof l.field=="string"&&l.field.length>0&&n.set(l.field,l);let r=yn(t),i=n.size>0,o=r.length>0,a=l=>{if(l==null)return l;if(Array.isArray(l))return l.map(c=>a(c));if(typeof l=="object"){let c=l,s=Object.create(Object.getPrototypeOf(c));for(let u of Object.keys(c)){let d=i?n.get(u):void 0;if(d){s[u]=Fi(c[u],d);continue}s[u]=a(c[u])}return s}return typeof l=="string"&&o?bn(l,r):l};return a(e)}var vn=e=>e!==void 0&&e.length>5120?e.slice(0,5120):e;function $i(e){let t={...e};return t.content?.text!==void 0&&(t.content={...t.content,text:vn(t.content.text)}),t.spawn?.prompt!==void 0&&(t.spawn={...t.spawn,prompt:vn(t.spawn.prompt)}),t}function Pi(e,t=process.env){if(typeof e=="number"&&Number.isFinite(e)&&e>0)return e;let n=t.ALLOW_TIMEOUT_MS;if(n!==void 0){let r=Number.parseInt(n,10);if(Number.isFinite(r)&&r>0)return r}return 5e3}var ji=1440*60*1e3,qi="VISIQ_BUNDLE_GRACE_TTL_MS",Ui="VISIQ_BUNDLE_CACHE_DISABLED",Bi="VISIQ_CACHE_DIR",Vi=Fe.object({graceTtlMs:Fe.number().int().nonnegative().optional(),disabled:Fe.boolean().optional(),cacheDir:Fe.string().min(1).optional()}).strict();function Ki(e){return e==null?{}:Vi.parse(e)}function zi(e,t=process.env){if(typeof e=="number"&&Number.isInteger(e)&&e>=0)return e;let n=t[qi];if(n!==void 0){let r=Number(n);if(Number.isInteger(r)&&r>=0)return r}return ji}function Gi(e,t=process.env){if(typeof e=="boolean")return e;let n=(t[Ui]??"").trim().toLowerCase();return n==="1"||n==="true"||n==="yes"}var wn;function Hi(){if(wn!==void 0)return wn;try{return typeof process<"u"&&!!process.versions&&!!process.versions.node}catch{return!1}}function Wi(e){return JSON.stringify(at(e))}function at(e){if(Array.isArray(e))return e.map(at);if(e!==null&&typeof e=="object"){let t=e,n={};for(let r of Object.keys(t).sort())n[r]=at(t[r]);return n}return e}function Qi(e,t,n){let r=n-e.fetchedAt;return r<0?!1:r<=t}function Yi(e){if(e!==null&&typeof e=="object"&&typeof e.fetchedAt=="number"&&typeof e.contentHash=="string"&&"body"in e){let t=e;return{fetchedAt:t.fetchedAt,version:typeof t.version=="string"?t.version:null,contentHash:t.contentHash,body:t.body}}return null}async function En(){if(!Hi())return null;try{let[e,t,n,r]=await Promise.all([import("node:fs/promises"),import("node:path"),import("node:os"),import("node:crypto")]);return{fs:e,path:t,os:n,crypto:r}}catch{return null}}function Rn(e,t){return e.createHash("sha256").update(Wi(t)).digest("hex")}function Ji(e,t){let n=t.cacheDir?.trim();if(n)return n;let r=process.env[Bi]?.trim();if(r)return r;let i=process.env.XDG_CACHE_HOME?.trim();if(i)return e.path.join(i,"visiq");let o="";try{o=e.os.homedir()}catch{o=""}return o?e.path.join(o,".cache","visiq"):e.path.join(e.os.tmpdir(),"visiq-cache")}function Zi(e,t){return e.crypto.createHash("sha256").update(`${t.endpoint}\0${t.agentId}\0${t.apiKey}`).digest("hex")}function Cn(e,t,n){return e.path.join(Ji(e,n),"bundles",`${Zi(e,t)}.json`)}async function Xi(e,t,n,r={}){let i=await En();if(i)try{let o=Cn(i,e,r),a=i.path.dirname(o);await i.fs.mkdir(a,{recursive:!0,mode:448});let l={fetchedAt:r.now??Date.now(),version:n,contentHash:Rn(i.crypto,t),body:t},c=`${o}.tmp-${process.pid}-${i.crypto.randomBytes(6).toString("hex")}`;await i.fs.writeFile(c,JSON.stringify(l),{mode:384});try{await i.fs.rename(c,o)}catch(s){throw await i.fs.rm(c,{force:!0}).catch(()=>{}),s}}catch{}}async function eo(e,t={}){let n=await En();if(!n)return null;try{let r=await n.fs.readFile(Cn(n,e,t),"utf-8"),i=Yi(JSON.parse(r));return!i||Rn(n.crypto,i.body)!==i.contentHash?null:i}catch{return null}}var ye;async function to(){if(ye!==void 0)return ye;try{let e=await import("@visiq/core-wasm"),t=e.evaluate??e.default?.evaluate;ye=typeof t=="function"?t:null}catch{ye=null}return ye}var no=5e3,ro=1e4,io=25,kn=1e3,oo=5e3,ao=100,An=2e3,so=512,lo=1800*1e3,co="monitor",uo="Agent has been shut down by an operator \u2014 all actions are blocked (G001)",In="Rules bundle requires a newer SDK wire-contract dialect than this SDK supports \u2014 refusing the bundle and blocking all actions (fail-closed, G001). Upgrade the VisIQ SDK.",Me="open";function be(e){if(typeof e!="string")return;let t=e.trim().toLowerCase();return t==="open"||t==="closed"?t:void 0}function po(e,t){return mn({content:e,resourceMetadata:t})}var fo=m.object({operations:m.array(m.enum(["retrieval","action","delegation"])).min(1,"at least one operation is required"),agentId:m.string().min(1,"agentId is required"),sessionId:m.string().min(1).max(255).optional(),toolName:m.string().optional(),toolArgs:m.record(m.unknown()).optional(),targetResource:m.string().optional(),resourceType:m.string().optional(),resourceMetadata:m.record(m.unknown()).optional(),normalized:m.record(m.unknown()).optional(),query:m.string().optional(),contentPreview:m.string().optional(),telemetry:m.record(m.unknown()).optional(),context:m.record(m.unknown()).optional()}),mo=m.object({version:m.string().min(1),dialect_version:m.number().int().optional(),min_dialect:m.number().int().optional(),shutdown:m.boolean().optional(),agent_mode:m.enum(["enforce","monitor","off"]).optional(),cognition_capture:m.boolean().optional(),agent_mode_by_operation:m.object({action:m.string().optional(),retrieval:m.string().optional(),delegation:m.string().optional()}).partial().optional(),agent_attributes:m.object({trust_tier:m.string().nullable().optional(),categories:m.array(m.string()).optional(),business_function:m.string().nullable().optional(),business_functions:m.array(m.string()).nullable().optional(),blast_radius_tier:m.string().nullable().optional(),no_coverage:m.string().nullable().optional(),fail_mode:m.string().nullable().optional()}).optional(),rules:m.array(m.record(m.unknown())),no_coverage:m.object({no_coverage_defaults:m.record(m.string()),autopilot_enabled:m.boolean(),enduser_hitl_enabled:m.boolean(),hitl_timeout_seconds:m.number().optional()}).optional()});function go(e){let t=e.trust_tier??null,n=[];Array.isArray(e.business_functions)&&e.business_functions.length>0?n=e.business_functions:typeof e.business_function=="string"&&e.business_function!==""&&(n=[e.business_function]);let r=Vt(Kt(n));return{trust_tier:Mt(t)?t:null,categories:$t(e.categories??[]),business_functions:r,business_function:r[0]??null,blast_radius_tier:typeof e.blast_radius_tier=="string"&&zt(e.blast_radius_tier)?e.blast_radius_tier:null}}function ho(e){if(!e)return null;let t={};for(let n of["action","retrieval","delegation"]){let r=e[n];(r==="enforce"||r==="monitor"||r==="off")&&(t[n]=r)}return Object.keys(t).length>0?t:null}function _o(e){return e==="permit"?"permit":e==="mask"||e==="redact"?"mask":e==="approval_required"||e==="escalate"?"approval_required":"deny"}var st=new Set,Sn=!1;async function Tn(e){let t=[];for(let n of st){if(n.pendingTelemetryCount()>0&&!n.hasBackend()){console.warn(`[UnifiedRuntime] exiting with ${n.pendingTelemetryCount()} un-sent decision(s) and no backend \u2014 telemetry lost.`);continue}let r=n.flush();e&&t.push(r)}t.length>0&&await Promise.allSettled(t)}function yo(){if(!Sn&&!(typeof process>"u"||typeof process.once!="function")){Sn=!0,process.once("beforeExit",()=>{Tn(!1)});for(let e of["SIGINT","SIGTERM"])process.once(e,()=>{(async()=>{try{await Tn(!0)}finally{process.kill(process.pid,e)}})()})}}var xn=class{client;originalFetch;resolvedApiKey;resolvedEndpoint;resolvedAgentId;harnessKind;sdkVersion;sdkDialect;rules=[];agentAttributes=null;agentNoCoverage=null;sessions=new Map;noCoverage=null;bundleVersion=null;bundleEtag=null;bundleLoaded=!1;bundleFetchInProgress=!1;initialBundlePromise=null;refreshTimer=null;cacheIdentity;bundleCacheDisabled;bundleGraceTtlMs;bundleCacheDirOverride;diskFallbackServed=!1;agentMode=co;agentModeByOperation=null;rawBundle=null;agentModeConfirmed=!1;operatorShutdown=!1;bundleApplyFailed=!1;dialectRefused=!1;failMode=be(typeof process<"u"?process.env?.VISIQ_FAIL_MODE:void 0)??Me;governedFailMode=null;telemetryBuffer=[];telemetryTimer=null;cognitionBuffer=[];cognitionTimer=null;cognitionEnabled=process.env.VISIQ_COGNITION_CAPTURE==="1";envRegistered=!1;registerPromise=null;lastToolSurfaceSig=null;constructor(e,t,n,r,i,o,a,l){let c=e??process.env.VISIQ_API_KEY??process.env.ALLOW_API_KEY??process.env.VISIQ_ALLOW_API_KEY,s=t??process.env.VISIQ_ENDPOINT??process.env.ALLOW_ENDPOINT,u=n??process.env.VISIQ_AGENT_ID??process.env.ALLOW_AGENT_ID??"";this.resolvedApiKey=c,this.resolvedEndpoint=s,this.resolvedAgentId=u,this.harnessKind=r,this.sdkVersion=o,this.sdkDialect=a,this.originalFetch=globalThis.fetch.bind(globalThis);let d=Ki(l);if(this.bundleCacheDisabled=Gi(d.disabled),this.bundleGraceTtlMs=zi(d.graceTtlMs),this.bundleCacheDirOverride=d.cacheDir,this.cacheIdentity=c&&s&&!this.bundleCacheDisabled?{endpoint:s,agentId:u,apiKey:c}:null,c&&s){let h={apiKey:c,agentId:u,endpoint:s,mode:"enforce",timeoutMs:Pi(i),hitlTimeoutMs:12e4,failBehavior:"closed",...r?{harnessKind:r}:{},...o!==void 0?{sdkVersion:o}:{},...a!==void 0?{sdkDialect:a}:{}};this.client=new Qe(h,this.originalFetch),this.initialBundlePromise=this.initialBundleLoad(),this.refreshTimer=setInterval(()=>{this.fetchBundleBackground()},no),ot(this.refreshTimer),this.telemetryTimer=setInterval(()=>{this.flushTelemetry()},ro),ot(this.telemetryTimer),this.cognitionTimer=setInterval(()=>{this.flushCognition()},oo),ot(this.cognitionTimer),st.add(this),yo()}else this.client=null}async evaluate(e){let t=fo.parse(e),n=Date.now();if(this.operatorShutdown){let s=this.denyAll(t,uo);return this.applyAgentMode(s,"enforce",t,n)}if(this.dialectRefused){if(this.failMode==="open")return this.failOpen(t,In,n);let s=this.denyAll(t,In);return this.applyAgentMode(s,"enforce",t,n)}if(t.operations.every(s=>this.modeFor(s)==="off"))return this.offDecision(t);if(!this.bundleLoaded){let s;if(this.agentModeConfirmed?s=this.agentMode:this.bundleApplyFailed?s="enforce":s="monitor",s==="enforce"&&this.failMode==="open")return this.failOpen(t,"no unified bundle loaded and no local rules",n);let u=this.denyAll(t,"No unified bundle loaded and no local rules \u2014 fail-closed (G001)");return this.applyAgentMode(u,s,t,n)}let r=this.readSession(t.sessionId),i=await to();if(!i||!this.rawBundle){if(this.failMode==="open")return this.failOpen(t,"governance core (@visiq/core-wasm) unavailable",n);throw new Error("governance core (@visiq/core-wasm) unavailable \u2014 failing closed (G001)")}let o=t.operations.includes("action")||t.operations.includes("delegation")?Xe(t.normalized??{},{action:t.toolName??"",targetApp:t.targetResource??t.toolName??""}):t.normalized,a={...t,normalized:o,session:r,at:Date.now()},l={...this.rawBundle,agent_mode:this.agentMode,...this.agentModeByOperation?{agent_mode_by_operation:this.agentModeByOperation}:{}},c;try{c=i(a,l)}catch(s){if(this.failMode==="open")return this.failOpen(t,`governance core evaluation threw: ${s instanceof Error?s.message:String(s)}`,n);throw s}return this.foldSession(t,c.enforced?c.decision:"permit"),c.enforced&&c.action.decision==="approval_required"&&await this.registerHitl(t,c),this.bufferTelemetry(t,c,Date.now()-n,c.enforced),c}modeFor(e){return this.agentModeByOperation?.[e]??this.agentMode}readSession(e){if(!e)return he;let t=this.sessions.get(e);return t?Date.now()-t.touchedAt>lo?(this.sessions.delete(e),he):t.state:he}foldSession(e,t){let{sessionId:n}=e;if(!n)return;let r=this.readSession(n),i=e.resourceMetadata??{},o=e.operations.includes("retrieval"),a=e.operations.includes("action")||e.operations.includes("delegation"),l=a?Xe(e.normalized??{},{action:e.toolName??"",targetApp:e.targetResource??e.toolName??""}):e.normalized??{},c=qt(r===he?jt():r,{data_categories:o&&Array.isArray(i.data_categories)?i.data_categories:void 0,classification:o?i.classification:void 0,taint:o?po(e.contentPreview,i):void 0,action_class:a?l.action_class:void 0,target_app:a?e.targetResource??e.toolName:void 0,decision:t});if(this.sessions.delete(n),this.sessions.set(n,{state:c,touchedAt:Date.now()}),this.sessions.size>so){let s=this.sessions.keys().next().value;s!==void 0&&this.sessions.delete(s)}}applyAgentMode(e,t,n,r){let i=Date.now()-r;if(t==="enforce"){let a={...e,enforced:!0,agentMode:"enforce"};return this.bufferTelemetry(n,a,i,!0),a}let o={...e,allowed:!0,enforced:!1,agentMode:"monitor"};return this.bufferTelemetry(n,o,i,!1),o}setFailMode(e){this.failMode=e}getFailMode(){return this.failMode}getGovernedFailMode(){return this.governedFailMode}failOpen(e,t,n){let r=`fail-open: ${t} \u2014 proceeding UNGOVERNED (set VISIQ_FAIL_MODE=closed to block instead)`;console.error(`[VisIQ] FAIL-OPEN: ${t} \u2014 proceeding UNGOVERNED. Set VISIQ_FAIL_MODE=closed to block instead.`);let i=e.operations.includes("action")||e.operations.includes("delegation"),o=e.operations.includes("retrieval"),a={decision:"permit",allowed:!0,reason:r,ruleId:null,ruleCode:null,enforced:!1,agentMode:this.agentMode,action:i?{decision:"permit",allowed:!0}:{decision:null,allowed:!0},retrieval:o?{action:"allow"}:{action:null},failOpen:!0};return this.bufferTelemetry(e,a,Date.now()-n,!1,!0),a}reportFailOpen(e,t){try{let n={operations:["action"],agentId:this.resolvedAgentId,...t?.toolName?{toolName:t.toolName}:{},...t?.sessionId?{sessionId:t.sessionId}:{}},r={decision:"permit",allowed:!0,reason:`fail-open: ${e} \u2014 proceeding UNGOVERNED (set VISIQ_FAIL_MODE=closed to block instead)`,ruleId:null,ruleCode:null,enforced:!1,agentMode:this.agentMode,action:{decision:"permit",allowed:!0},retrieval:{action:null},failOpen:!0};this.bufferTelemetry(n,r,0,!1,!0)}catch{}}offDecision(e){let t=e.operations.includes("action")||e.operations.includes("delegation"),n=e.operations.includes("retrieval");return{decision:"permit",allowed:!0,reason:"agent_mode=off \u2014 evaluation bypassed",ruleId:null,ruleCode:null,enforced:!1,agentMode:"off",action:t?{decision:"permit",allowed:!0}:{decision:null,allowed:!0},retrieval:n?{action:"allow"}:{action:null}}}denyAll(e,t){let n=e.operations.includes("action")||e.operations.includes("delegation"),r=e.operations.includes("retrieval");return{decision:"deny",allowed:!1,reason:t,ruleId:null,ruleCode:null,enforced:!0,agentMode:"enforce",action:n?{decision:"deny",allowed:!1}:{decision:null,allowed:!0},retrieval:r?{action:"deny"}:{action:null}}}async registerHitl(e,t){if(this.client)try{let n={agent_id:e.agentId,target_app:e.targetResource??e.toolName??"",action:e.toolName??"",context:e.toolName?{[e.toolName]:e.toolArgs??{}}:{},...e.sessionId?{session_id:e.sessionId}:{},...e.telemetry?{telemetry:e.telemetry}:{}},r=await this.client.evaluate(n);r.decision_id&&(t.action.decisionId=r.decision_id)}catch(n){console.warn("[UNIFIED] HITL registration failed \u2014 staying fail-closed (G001):",n)}}applyBundle(e){this.bundleApplyFailed=!0;let t=mo.parse(e);this.bundleApplyFailed=!1;let n=this.sdkDialect??1;if(t.min_dialect!==void 0&&t.min_dialect>n){this.dialectRefused=!0,this.bundleApplyFailed=!0,console.warn(`[UNIFIED] rules bundle requires dialect ${t.min_dialect} but this SDK speaks ${n} \u2014 refusing the bundle and failing closed (deny-all, G001). Upgrade the VisIQ SDK.`);return}this.dialectRefused=!1,!(this.bundleLoaded&&t.version===this.bundleVersion)&&(this.rules=t.rules.map(r=>Ht(r)).filter(r=>r!==null),this.agentAttributes=t.agent_attributes?go(t.agent_attributes):null,this.agentNoCoverage=Gt(t.agent_attributes?.no_coverage),this.governedFailMode=be(t.agent_attributes?.fail_mode)??null,this.bundleVersion=t.version,this.bundleLoaded=!0,this.noCoverage=t.no_coverage?{no_coverage_defaults:t.no_coverage.no_coverage_defaults,autopilot_enabled:t.no_coverage.autopilot_enabled,enduser_hitl_enabled:t.no_coverage.enduser_hitl_enabled}:null,t.agent_mode!==void 0&&(this.agentMode=t.agent_mode,this.agentModeConfirmed=!0),this.agentModeByOperation=ho(t.agent_mode_by_operation),process.env.VISIQ_COGNITION_CAPTURE==="1"?this.cognitionEnabled=!0:typeof t.cognition_capture=="boolean"&&(this.cognitionEnabled=t.cognition_capture),this.operatorShutdown=t.shutdown===!0,this.rawBundle=e)}async awaitBundleReady(e=5e3){if(!this.initialBundlePromise||this.bundleLoaded)return;let t,n=new Promise(r=>{t=setTimeout(r,e)});try{await Promise.race([this.initialBundlePromise,n])}catch{}finally{t&&clearTimeout(t)}}async fetchBundleBackground(){if(!(this.bundleFetchInProgress||!this.resolvedEndpoint||!this.resolvedApiKey)){this.bundleFetchInProgress=!0;try{let e=this.resolvedAgentId?`?agent_id=${encodeURIComponent(this.resolvedAgentId)}`:"",t={Authorization:`Bearer ${this.resolvedApiKey}`,Accept:"application/json",...H(this.sdkVersion,this.sdkDialect)};this.bundleEtag&&(t["If-None-Match"]=this.bundleEtag);let n=await this.originalFetch(`${this.resolvedEndpoint}/rules/bundle${e}`,{method:"GET",headers:t});if(n.status===304)return;if(!n.ok)throw new Error(`unified bundle fetch failed: HTTP ${n.status}`);let r=n.headers.get("ETag"),i=await n.json();this.applyBundle(i);let o=this.bundleLoaded&&!this.dialectRefused&&!this.bundleApplyFailed;r&&o?this.bundleEtag=r:o||(this.bundleEtag=null),o&&await this.persistBundleToDisk(i)}catch(e){this.bundleLoaded?console.warn("[UNIFIED] Bundle refresh failed (using cached rules):",e):console.warn("[UNIFIED] Initial bundle fetch failed (fail-closed until loaded):",e)}finally{this.bundleFetchInProgress=!1}}}async initialBundleLoad(){await this.fetchBundleBackground(),this.bundleLoaded||await this.tryLoadFromDiskCache()}async tryLoadFromDiskCache(){if(this.bundleLoaded||this.bundleCacheDisabled||!this.cacheIdentity||this.dialectRefused)return;let e;try{e=await eo(this.cacheIdentity,{...this.bundleCacheDirOverride?{cacheDir:this.bundleCacheDirOverride}:{}})}catch{return}if(!e)return;let t=Date.now();if(Qi(e,this.bundleGraceTtlMs,t)){try{this.applyBundle(e.body)}catch{return}if(this.bundleLoaded&&!this.dialectRefused&&!this.diskFallbackServed){this.diskFallbackServed=!0;let n=Math.max(0,Math.round((t-e.fetchedAt)/1e3)),r=Math.round(this.bundleGraceTtlMs/1e3);console.warn(`[UnifiedRuntime] serving cached rules bundle (age ${n}s) \u2014 control plane unreachable on cold start; will keep retrying and fail closed once the cache exceeds the ${r}s grace window.`)}}}async persistBundleToDisk(e){this.bundleCacheDisabled||!this.cacheIdentity||await Xi(this.cacheIdentity,e,this.bundleVersion,{...this.bundleCacheDirOverride?{cacheDir:this.bundleCacheDirOverride}:{}})}hasRules(){return this.bundleLoaded&&this.rules.length>0}hasClient(){return this.client!==null}getEndpoint(){return this.resolvedEndpoint}getApiKey(){return this.resolvedApiKey}getBundleVersion(){return this.bundleVersion}isBundleLoaded(){return this.bundleLoaded}getAgentMode(){return this.agentMode}getAgentAttributes(){return this.agentAttributes}getSessionState(e){return this.readSession(e)}registerEnvironment(e){!this.client||this.envRegistered||!this.resolvedAgentId||(this.envRegistered=!0,this.registerPromise=this.client.registerEnvironment(e))}registerHostEnvironment(e){this.registerEnvironment({...Ye(),...e?{agent_type:e}:{}})}reportToolSurface(e){if(!this.client||!this.resolvedAgentId||e.length===0)return;let t=JSON.stringify([...e].map(n=>({n:n.name,d:n.description??"",s:n.input_schema??null})).sort((n,r)=>n.n.localeCompare(r.n)));t!==this.lastToolSurfaceSig&&(this.lastToolSurfaceSig=t,this.client.reportToolSurface(e))}bufferTelemetry(e,t,n,r,i=!1){this.telemetryBuffer.push({decision_id:crypto.randomUUID(),agent_id:e.agentId,target_app:e.targetResource??e.toolName??"",action:e.toolName??e.operations.join("+"),...e.sessionId?{session_id:e.sessionId}:{},decision:r?_o(t.decision):"permit",reason:t.reason,evaluated_at:new Date().toISOString(),rule_id:t.ruleId,rule_code:t.ruleCode,enforced:r,agent_mode:this.agentMode,latency_ms:n,evaluation_mode:"local",raw_event:{agent_id:e.agentId,operations:e.operations,...e.toolName?{tool_name:e.toolName}:{},...e.targetResource?{target_resource:e.targetResource}:{},...e.resourceType?{resource_type:e.resourceType}:{}},...this.harnessKind||e.context||i?{context:{...this.harnessKind?{[Ct]:this.harnessKind}:{},...e.context??{},...i?{fail_open:!0}:{}}}:{}}),this.enforceTelemetryCap(),this.telemetryBuffer.length>=io&&this.flushTelemetry()}pendingTelemetryCount(){return this.telemetryBuffer.length}hasBackend(){return this.client!==null}async flushTelemetry(){if(this.telemetryBuffer.length===0||!this.client)return;let e=this.telemetryBuffer.splice(0);try{await this.client.sendTelemetry(e)}catch(t){console.error("[UnifiedRuntime] telemetry flush failed (non-fatal):",t)}}enforceTelemetryCap(){let e=this.telemetryBuffer.length-kn;e>0&&(this.telemetryBuffer.splice(0,e),console.warn(`[UnifiedRuntime] telemetry buffer full \u2014 dropped ${e} oldest entries (cap ${kn})`))}isCognitionEnabled(){return this.cognitionEnabled}emitCognition(e){!this.cognitionEnabled||!this.client||(this.cognitionBuffer.push($i(e)),this.enforceCognitionCap(),this.cognitionBuffer.length>=ao&&this.flushCognition())}async flushCognition(){if(this.cognitionBuffer.length===0||!this.client)return;let e=this.cognitionBuffer.splice(0);try{await this.client.sendCognition(void 0,e)}catch(t){console.error("[UnifiedRuntime] cognition flush failed (non-fatal):",t)}}enforceCognitionCap(){let e=this.cognitionBuffer.length-An;e>0&&(this.cognitionBuffer.splice(0,e),console.warn(`[UnifiedRuntime] cognition buffer full \u2014 dropped ${e} oldest beats (cap ${An})`))}async flush(){if(this.registerPromise)try{await this.registerPromise}catch{}await this.flushTelemetry(),await this.flushCognition()}async shutdown(){await this.flush(),this.dispose(),st.delete(this)}dispose(){this.refreshTimer&&(clearInterval(this.refreshTimer),this.refreshTimer=null),this.telemetryTimer&&(clearInterval(this.telemetryTimer),this.telemetryTimer=null),this.cognitionTimer&&(clearInterval(this.cognitionTimer),this.cognitionTimer=null),this.flushTelemetry(),this.flushCognition()}};function ot(e){e&&typeof e=="object"&&"unref"in e&&e.unref()}function bo(e){return typeof e=="string"&&e.trim().length>0?e:void 0}function $(e,...t){for(let n of t){let r=bo(e[n]);if(r)return r}}var vo=[{framework:"openai-agents",matches:e=>/^transfer_to_.+/.test(e),extract:(e,t)=>{let n=e.replace(/^transfer_to_/,"");return{childAgentId:n,childName:n.replace(/[_-]+/g," ").trim(),kind:"teammate",task:$(t,"task","input","reason","message"),source:"structural"}}},{framework:"voltagent",matches:e=>e==="delegate_task",extract:(e,t)=>{let n=$(t,"targetAgent","agent","subAgent","agentName","name");return n?{childAgentId:n,childName:n,kind:"subagent",task:$(t,"task","message","input"),description:$(t,"purpose"),source:"structural"}:null}},{framework:"crewai",matches:e=>/delegate work to (co-?worker|.+)/i.test(e),extract:(e,t)=>{let n=$(t,"coworker","agent","role");return n?{childAgentId:n,childName:n,kind:"teammate",agentType:n,task:$(t,"task","question"),description:$(t,"context"),source:"structural"}:null}},{framework:"llamaindex",matches:e=>e==="handoff"||/handoff/i.test(e),extract:(e,t)=>{let n=$(t,"to_agent","toAgent","agent_name","agentName","agent","name");return n?{childAgentId:n,childName:n,kind:"subagent",task:$(t,"reason","task","message"),source:"structural"}:null}},{framework:"generic",matches:e=>/^(delegate|hand[_-]?off|route[_-]?to|call[_-]?agent)([_-].+)?$/i.test(e),extract:(e,t)=>{let n=$(t,"agent","agentName","agentId","target","targetAgent","to","to_agent","coworker","name")??(/[_-]/.test(e)?e.replace(/^(delegate|hand[_-]?off|route[_-]?to|call[_-]?agent)[_-]/i,""):void 0);return n?{childAgentId:n,childName:n.replace(/[_-]+/g," ").trim(),kind:"subagent",task:$(t,"task","message","input","reason","prompt"),source:"heuristic"}:null}}];function De(e,t){if(!e)return null;let n=t??{};for(let r of vo)try{if(r.matches(e)){let i=r.extract(e,n);if(i)return i}}catch{}return null}function $e(e,t){return{delegation:{is_delegated:!0,role:"parent",parent_agent_id:t,target_agent:e.childAgentId,source:e.source,spawn:{childAgentId:e.childAgentId,childName:e.childName,kind:e.kind,...e.model?{model:e.model}:{},...e.task?{prompt:e.task}:{},...e.description?{description:e.description}:{},...e.goal?{goal:e.goal}:{},...e.agentType?{agentType:e.agentType}:{}}}}}function lt(e){if(e===null||typeof e!="object"||Array.isArray(e))return{input:e===void 0?"":String(e)};let t=e,n=Object.keys(t);return n.length===1&&n[0]==="context"&&t.context!==null&&typeof t.context=="object"?t.context:t}function On(e){if(typeof e=="string"){try{let t=JSON.parse(e);if(t!==null&&typeof t=="object"&&!Array.isArray(t))return t}catch{}return{input:e}}return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{input:e===void 0?"":String(e)}}function N(e){let t=[],n=[],r,i=[];for(let a of e){if(a.mode==="partial"||a.mode==="email"||a.mode==="custom"){let c={mode:a.mode};a.field&&(c.field=a.field),a.pattern&&(c.pattern=a.pattern),typeof a.keepFirst=="number"&&(c.keepFirst=a.keepFirst),typeof a.keepLast=="number"&&(c.keepLast=a.keepLast),a.maskChar&&(c.maskChar=a.maskChar),a.keepPattern&&(c.keepPattern=a.keepPattern),a.replacement!==void 0&&(c.replacement=a.replacement),i.push(c);continue}a.field&&t.push(a.field),a.pattern&&n.push(a.pattern);let{replacement:l}=a;l&&r===void 0&&(r=l)}let o={};return t.length>0&&(o.fields=t),n.length>0&&(o.patterns=n),r!==void 0&&(o.replacement=r),i.length>0&&(o.directives=i),o}var B="0.2.7";import{AsyncLocalStorage as wo}from"node:async_hooks";var T=new wo,ko=5120,Nn=50;function Ao(e,t){if(typeof e!="string")return"";let n=new TextEncoder,r=n.encode(e);if(r.length<=t)return e;let o=`\u2026[truncated ${Math.ceil(r.length/1024)}KB]`,a=n.encode(o).length,l=Math.max(0,t-a),c=r.subarray(0,l);return new TextDecoder("utf-8",{fatal:!1}).decode(c)+o}function V(e){if(!e)return;let t=r=>r.length<=Nn?r.slice():r.slice(r.length-Nn),n=r=>Ao(r,ko);return{session_id:e.session_id,llm_prompts:t(e.llm_prompts).map(n),llm_responses:t(e.llm_responses).map(n),agent_reasoning:t(e.agent_reasoning).map(n)}}var ct=12e4,Ln=2e3,Fn=3,Io=5e3;function ve(e,t){return e==="mask"&&(t?.length??0)>0}var So=new Set(["approved","resolved"]),To=new Set(["rejected","dismissed","expired","timeout","bypassed_disabled"]);function Eo(e){return new Promise(t=>setTimeout(t,e))}function Ro(e){if(typeof e!="object"||e===null)return null;let t=e,n=t.hitl_result;if(typeof n=="string"&&n.length>0)return n;let{hitl:r}=t;if(r&&typeof r=="object"){let{status:i}=r;if(typeof i=="string"&&i.length>0)return i==="pending"?null:i}return null}async function we(e){let{endpoint:t,apiKey:n,decisionId:r,timeoutMs:i=ct,maskFallback:o=!1,sdkVersion:a,fetchImpl:l=globalThis.fetch,sleep:c=Eo,log:s=f=>console.warn(f)}=e,u=f=>o?{resolution:"mask",reason:f}:{resolution:"block",reason:f};if(!t)return u("HITL approval cannot be confirmed (no backend endpoint) \u2014 fail-closed (G001)");if(!r)return u("HITL approval cannot be confirmed (no decision id) \u2014 fail-closed (G001)");let d=`${t.replace(/\/$/,"")}/v1/allow/decisions/${encodeURIComponent(r)}`,h={Accept:"application/json",...H(a)};n&&(h.Authorization=`Bearer ${n}`);let _=Date.now()+Math.max(0,i),g=0;for(s(`[VisIQ HITL] Awaiting human approval for decision ${r} (timeout ${i}ms)`);;){if(Date.now()>=_)return s(`[VisIQ HITL] Decision ${r} timed out after ${i}ms \u2014 ${o?"masking":"blocking"} (G001)`),u("HITL approval timed out");let f=null;try{let b=new AbortController,L=setTimeout(()=>b.abort(),Io),F;try{F=await l(d,{method:"GET",headers:h,signal:b.signal})}finally{clearTimeout(L)}if(!F.ok)throw new Error(`HTTP ${F.status} ${F.statusText}`);let I=await F.json();f=Ro(I),g=0}catch(b){g+=1;let L=b instanceof Error?b.message:String(b);if(s(`[VisIQ HITL] Poll failed for decision ${r} (${g}/${Fn}): ${L}`),g>=Fn)return u(`HITL approval poll failed repeatedly \u2014 fail-closed (G001): ${L}`);await c(Ln);continue}if(f!==null){let b=f.toLowerCase();return So.has(b)?(s(`[VisIQ HITL] Decision ${r} approved (${f}) \u2014 proceeding`),{resolution:"proceed",reason:`Approved by human reviewer (${f})`}):To.has(b)?(s(`[VisIQ HITL] Decision ${r} resolved as ${f} \u2014 ${o?"masking":"blocking"}`),u(`Not approved by human reviewer (${f})`)):(s(`[VisIQ HITL] Decision ${r} returned unknown status '${f}' \u2014 ${o?"masking":"blocking"} (G001)`),u(`HITL returned unknown status '${f}' \u2014 fail-closed (G001)`))}await c(Ln)}}function K(e){return e??be(typeof process<"u"?process.env?.VISIQ_FAIL_MODE:void 0)??Me}function y(e,t){try{console.error(`[VisIQ] FAIL-OPEN (${e}): ${t} \u2014 proceeding UNGOVERNED. Set VISIQ_FAIL_MODE=closed to block instead.`)}catch{}}function q(e,t){try{console.error(`[VisIQ] TRACE-DEGRADED (${e}): ${t} \u2014 the governance decision was still made and enforced; only the execution-trace beat was lost.`)}catch{}}function re(e){let t=e.getFailMode;return(typeof t=="function"?t.call(e):void 0)??K()}function Y(e){return e.enforced?{allowed:e.action.allowed,decision:e.action.decision,...e.action.decisionId!==void 0?{decisionId:e.action.decisionId}:{},...e.ruleCode!==null?{ruleCode:e.ruleCode}:{},reason:e.reason,argRedactionRules:e.action.argRedactionRules??[],...e.action.hitlFallback?{hitlFallback:e.action.hitlFallback}:{}}:{allowed:!0,decision:"permit",reason:e.reason,argRedactionRules:[]}}function Dn(e){if(!e.enforced)return{action:"allow",reason:e.reason,redactionRules:[]};let t=e.retrieval.action??"deny",n=e.retrieval.redactionRules??[];return t==="escalate"&&ve(e.retrieval.hitlFallback,n)?{action:"redact",reason:e.reason,redactionRules:n}:{action:t,reason:e.reason,redactionRules:n}}var Mn=new Set;function ft(e){Mn.has(e)||(Mn.add(e),console.warn(`[VisIQ] unrecognized retrieval outcome "${e}" \u2014 failing closed (withholding content). Upgrade @visiq/harness if a newer control plane introduced this outcome.`))}async function je(e,t,n){let r=T.getStore(),i=V(r),o=await e.evaluate({operations:["retrieval"],agentId:t,...r?.session_id?{sessionId:r.session_id}:{},resourceType:n.resourceType??"document",resourceMetadata:n.resourceMetadata??{},...n.query!==void 0?{query:n.query}:{},...n.contentPreview!==void 0?{contentPreview:n.contentPreview}:{},...i?{telemetry:i}:{}});return Dn(o)}async function qe(e,t,n){return await e.awaitBundleReady(),je(e,t,n)}function $n(e,t,n=K()){switch(t.action){case"allow":case"escalate":return e;case"deny":return null;case"redact":{if(t.redactionRules.length===0)return e;try{return O(e,N(t.redactionRules))}catch{return n==="closed"?null:(y("redact-error","document redaction failed \u2014 document passed UNREDACTED"),e)}}default:return ft(String(t.action)),n==="closed"?null:(y("unknown-retrieval-verb",`unrecognized outcome "${String(t.action)}" \u2014 document passed through`),e)}}async function Pn(e,t,n,r){if(!Array.isArray(e)||e.length===0)return e;await r.awaitBundleReady();let i=[];for(let o of e){let a=o,l=String(a.pageContent??a.text??a.content??""),c=a.metadata??{},s=await je(r,t,{resourceType:"document",resourceMetadata:c,query:n,contentPreview:l.slice(0,500)}),u=$n(o,s,re(r));u!==null&&i.push(u)}return i}async function jn(e,t,n){if(typeof e!="string")return e;await n.awaitBundleReady();let r;try{r=await je(n,t,{resourceType:"document",resourceMetadata:{content_preview:e.slice(0,500)},contentPreview:e.slice(0,500)})}catch(i){return re(n)==="closed"?"[RECALL] Retrieved context blocked \u2014 policy evaluation error (blocked \u2014 VISIQ_FAIL_MODE=closed).":(y("eval-error",`retrieval evaluation failed \u2014 text passed through: ${i instanceof Error?i.message:String(i)}`),e)}switch(r.action){case"allow":case"escalate":return e;case"deny":return"[RECALL] Retrieved context was blocked by policy.";case"redact":{if(r.redactionRules.length===0)return e;try{return O(e,N(r.redactionRules))}catch{return re(n)==="closed"?"[RECALL] Retrieved context was blocked by policy.":(y("redact-error","text redaction failed \u2014 text passed UNREDACTED"),e)}}default:return ft(String(r.action)),re(n)==="closed"?"[RECALL] Retrieved context was blocked by policy.":(y("unknown-retrieval-verb",`unrecognized outcome "${String(r.action)}" \u2014 text passed through`),e)}}var qn=4,Un=1e3;function Pe(e){return e.length===0?!1:e.some(t=>t!==null&&typeof t=="object"&&(typeof t.pageContent=="string"||typeof t.text=="string"||typeof t.content=="string"))}async function Bn(e,t,n){let r=[];for(let i of e){let o=i,a=String(o.pageContent??o.text??o.content??""),l={...o.metadata??{},content_preview:a.slice(0,500)},c;try{c=await je(n,t,{resourceType:"document",resourceMetadata:l,contentPreview:a.slice(0,500)})}catch(u){if(re(n)==="closed")continue;y("eval-error",`document retrieval evaluation failed \u2014 document passed through: ${u instanceof Error?u.message:String(u)}`),r.push(i);continue}let s=$n(i,c,re(n));s!==null&&r.push(s)}return r}async function dt(e,t,n,r,i){if(r>qn||i.nodes++>Un)return e;if(Array.isArray(e)){if(Pe(e))return i.matched=!0,Bn(e,t,n);let o=[];for(let a of e)o.push(await dt(a,t,n,r+1,i));return o}if(e!==null&&typeof e=="object"){let o=e,a={...o};for(let l of Object.keys(o))a[l]=await dt(o[l],t,n,r+1,i);return a}return e}async function Ue(e,t,n){if(await n.awaitBundleReady(),Array.isArray(e)&&Pe(e))return Bn(e,t,n);if(e!==null&&typeof e=="object"){let r={nodes:0,matched:!1},i=await dt(e,t,n,0,r);if(r.matched)return i}return e}var Co={blocked:!0,reason:"[RECALL] Retrieved context was blocked by policy."};function pt(e,t,n){if(t>qn||n.n++>Un)return e;if(Array.isArray(e))return Pe(e)?[]:e.map(r=>pt(r,t+1,n));if(e!==null&&typeof e=="object"){if(Pe([e]))return{...Co};let r=e,i={};for(let o of Object.keys(r))i[o]=pt(r[o],t+1,n);return i}return e}function ut(e){return typeof e=="string"?"[RECALL] Retrieved context was blocked by policy.":Array.isArray(e)?[]:e!==null&&typeof e=="object"?pt(e,0,{n:0}):e}function Vn(e,t,n=K()){let r=Dn(t);switch(r.action){case"allow":case"escalate":return e;case"deny":return ut(e);case"redact":{if(r.redactionRules.length===0)return e;try{return O(e,N(r.redactionRules))}catch{return n==="closed"?ut(e):(y("redact-error","result redaction failed \u2014 result passed UNREDACTED"),e)}}default:return ft(String(r.action)),n==="closed"?ut(e):(y("unknown-retrieval-verb",`unrecognized outcome "${String(r.action)}" \u2014 result passed through`),e)}}function R(e){return typeof e=="object"&&e!==null?e:null}function Kn(...e){for(let t of e)if(typeof t=="string"&&t.trim().length>0)return t}function xo(e,t){let n=R(e.metadata),r=n&&typeof n.name=="string"?n.name:void 0;return Kn(e.name,e.id,r,t)}function Oo(e){let t=R(e.metadata),n=t&&typeof t.description=="string"?t.description:void 0,r=Kn(e.description,n);return r===void 0?void 0:r.slice(0,4e3)}function No(e){let t=R(e);return t!==null&&("type"in t||"properties"in t||"$schema"in t)}function Lo(e){let t=R(e);if(t===null||!("_def"in t))return;let{shape:n}=t;if(typeof n=="function")try{n=n.call(t)}catch{n=void 0}let r=R(n);if(r===null)return{type:"object"};let i={};for(let o of Object.keys(r))i[o]={};return{type:"object",properties:i}}var Fo=new Set(["default","const","enum","examples","example"]);function mt(e){if(Array.isArray(e))return e.map(mt);let t=R(e);if(t===null)return e;let n={};for(let[r,i]of Object.entries(t))Fo.has(r)||(n[r]=mt(i));return n}function Mo(e){let t;if(No(e))t=e;else{let n=Lo(e);if(n===void 0)return;t=n}try{let n=JSON.stringify(t);if(n.length>2e4){let r=R(t),i=r&&R(r.properties);if(i){let o={};for(let a of Object.keys(i))o[a]={};return{type:"object",properties:o}}return{type:"object"}}return mt(JSON.parse(n))}catch{return}}function Do(e){let t=R(e.metadata),n=e.input_schema??e.inputSchema??e.parameters??e.schema??e.args_schema??e.tool_call_schema??(t?t.parameters:void 0);return n===void 0?void 0:Mo(n)}function $o(e,t){let n=R(e);if(n===null)return null;let r=xo(n,t);if(r===void 0)return null;let i={name:r.slice(0,255)},o=Oo(n);o!==void 0&&(i.description=o);let a=Do(n);return a!==void 0&&(i.input_schema=a),i}function ke(e){let t=[],n=new Set,r=(i,o)=>{try{let a=$o(i,o);a!==null&&!n.has(a.name)&&(n.add(a.name),t.push(a))}catch{}};if(Array.isArray(e)){for(let i of e)if(r(i),t.length>=200)break}else if(e instanceof Map){for(let[i,o]of e.entries())if(r(o,typeof i=="string"?i:void 0),t.length>=200)break}else{let i=R(e);if(i!==null){for(let o of Object.keys(i))if(r(i[o],o),t.length>=200)break}}return t}function gt(e){try{let t=R(e);if(t===null)return[];let n=[],r=new Set,i=c=>{for(let s of c)!r.has(s.name)&&n.length<200&&(r.add(s.name),n.push(s))};t.tools!==void 0&&i(ke(t.tools));let o=R(t.settings);o&&o.tools!==void 0&&i(ke(o.tools));for(let c of["getTools","listTools"]){let s=t[c];if(typeof s=="function")try{i(ke(s.call(t)))}catch{}}let a=R(t.nodes);if(a)for(let c of Object.keys(a)){let s=R(a[c]);s&&s.tools!==void 0&&i(ke(s.tools))}let{agents:l}=t;if(l instanceof Map)for(let c of l.values()){let s=R(c);s&&s.tools!==void 0&&i(ke(s.tools))}return n}catch{return[]}}import{z as Be}from"zod";var Po=Be.object({decision:Be.enum(["permit","deny"]),reason:Be.string(),handoff_event_id:Be.string().nullable()}),j=class extends Error{constructor(e,t,n){super(e),this.code=t,this.status=n,this.name="OrchestrateError"}code;status},J=class extends j{constructor(e,t){super(`Orchestrate grant denied: ${e}`,"GRANT_DENIED"),this.reason=e,this.handoffEventId=t,this.name="GrantDeniedError"}reason;handoffEventId},jo="https://api.visiqlabs.com",qo=1e4,ie=class{config;fetch;constructor(e,t=globalThis.fetch){this.config={agentId:e.agentId,apiKey:e.apiKey??process.env.VISIQ_API_KEY??"",endpoint:e.endpoint??process.env.VISIQ_ENDPOINT??jo,timeoutMs:e.timeoutMs??qo},this.fetch=t}get headers(){return{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,"X-Agent-ID":this.config.agentId}}async post(e,t){let n=new AbortController,r=setTimeout(()=>n.abort(),this.config.timeoutMs),i;try{i=await this.fetch(`${this.config.endpoint}${e}`,{method:"POST",headers:this.headers,body:JSON.stringify(t),signal:n.signal})}finally{clearTimeout(r)}let o=await i.json();if(!i.ok){let a=o?.error??`HTTP ${i.status}`;throw new j(a,"API_ERROR",i.status)}return o}async requestGrant(e){let t=await this.post("/orchestrate/grants",{parent_agent_id:e.parentAgentId,child_agent_id:e.childAgentId,tool_scope:e.toolScope??null,context_scope:e.contextScope??null,purpose:e.purpose,duration_seconds:e.durationSeconds,max_depth:e.maxDepth,parent_grant_token:e.parentGrantToken});return{grantId:t.grant_id,status:"pending",effectiveToolScope:t.effective_tool_scope,effectiveContextScope:t.effective_context_scope,acceptDeadline:t.accept_deadline}}async acceptGrant(e){let t=await this.post(`/orchestrate/grants/${e}/accept`,{});return{grantToken:t.grant_token,toolScope:t.tool_scope,contextScope:t.context_scope,expiresAt:t.expires_at}}async evaluate(e){let t=await this.post("/orchestrate/evaluate",{grant_token:e.grantToken,action:e.action,resource_type:e.resourceType,resource_metadata:e.resourceMetadata??{}}),n=Po.parse(t);return{decision:n.decision,reason:n.reason,handoffEventId:n.handoff_event_id}}async revokeGrant(e,t){return{revokedCount:(await this.post(`/orchestrate/grants/${e}/revoke`,{reason:t})).revoked_count}}};var zn=new Map;async function Gn(e,t){if(!e||e.trim()==="")throw new Error("[ORCHESTRATE] bootstrapGrant: agentId is required");if(!t||t.trim()==="")throw new Error("[ORCHESTRATE] bootstrapGrant: grantId is required");let n=zn.get(e);if(n)return n;let r=process.env.VISIQ_API_KEY;if(!r)throw new Error("[ORCHESTRATE] bootstrapGrant: VISIQ_API_KEY env var is required");let i=process.env.VISIQ_ENDPOINT,o=(await new ie({agentId:e,apiKey:r,...i?{endpoint:i}:{}}).acceptGrant(t)).grantToken;if(!o||o.trim()==="")throw new Error("[ORCHESTRATE] bootstrapGrant: backend returned empty grant token");return zn.set(e,o),o}var Ae=Symbol.for("visiq.orchestrate.wrapped");function Uo(e){return e instanceof j&&typeof e.status=="number"&&e.status>=400&&e.status<500}function Hn(e,t){if(!t.agentId||t.agentId.trim()==="")throw new j("agentId is required","CONFIG_ERROR");if(!t.grantToken||t.grantToken.trim()==="")throw new j("grantToken is required","CONFIG_ERROR");if(e[Ae]===!0)return e;let n=new ie(t),r=t.failBehavior??(process.env.VISIQ_FAIL_MODE?.trim().toLowerCase()==="closed"?"deny":"permit"),i=async(o,a)=>{let l;try{l=await n.evaluate({grantToken:t.grantToken,action:o,resourceType:a})}catch(c){if(Uo(c))throw c;if(r==="permit"){console.warn('[VisIQ] FAIL-OPEN (orchestrate-eval-error): evaluate failed \u2014 proceeding UNGOVERNED. Set VISIQ_FAIL_MODE=closed (or failBehavior:"deny") to block instead.',c);return}throw new j(`ORCHESTRATE evaluate failed: ${c instanceof Error?c.message:String(c)}`,"EVALUATE_ERROR")}if(l.decision==="deny")throw new J(l.reason,l.handoffEventId)};return new Proxy(e,{get(o,a,l){let c=Reflect.get(o,a,l);return a===Ae?!0:a==="_call"&&typeof c=="function"?async function(s,...u){let d=o.name;return await i(d??"_call"),c.call(this??o,s,...u)}:(a==="call"||a==="execute"||a==="run")&&typeof c=="function"?async function(s,...u){let d=o.name;return await i(d??String(a)),c.call(this??o,s,...u)}:c}})}import{randomUUID as Jn}from"node:crypto";var Wn=Symbol.for("visiq.semantickernel.instrumented");function Qn(e){if(e===null||typeof e!="object")return!1;let t=e;return typeof t.useFunctionInvocation=="function"&&typeof t.usePromptRender=="function"&&typeof t.execute!="function"&&typeof t.generate!="function"&&typeof t.run!="function"}function Bo(e){let t=e.arguments;return t&&typeof t=="object"&&"arguments"in t&&t.arguments&&typeof t.arguments=="object"?t.arguments:t??{}}function Vo(e,t){let n=e.arguments;if(n&&typeof n=="object"&&"arguments"in n&&n.arguments&&typeof n.arguments=="object"){let r=n.arguments;for(let i of Object.keys(r))delete r[i];Object.assign(r,t);return}e.arguments=t}function z(e,t){e.result&&typeof e.result=="object"?e.result.value=t:e.result={value:t}}function Ko(e){return e.result?.value}function zo(e){let{agentId:t,unified:n,failMode:r}=e;return async function(o,a){let l=o.function?.metadata?.name??"unknown",c=o.function?.metadata?.pluginName,s=Bo(o),u=c;try{let f=Y(await n.evaluate({operations:["action"],agentId:t,toolName:l,toolArgs:s,...u!==void 0?{targetResource:u}:{}}));if(!f.allowed){z(o,C({outcome:"deny",code:f.ruleCode??"DENY",reason:f.reason}));return}f.decision==="mask"&&f.argRedactionRules.length>0&&Vo(o,O(s,N(f.argRedactionRules)))}catch(f){if(r==="closed"){z(o,C({outcome:"error",code:"EVAL-ERROR",mechanism:`evaluation error (blocked \u2014 VISIQ_FAIL_MODE=closed): ${f instanceof Error?f.message:String(f)}`}));return}y("eval-error",`SK action pre-gate failed for "${l}": ${f instanceof Error?f.message:String(f)}`)}try{let f=await qe(n,t,{resourceType:"tool_result",resourceMetadata:{function_name:l,plugin_name:c}});if(f.action==="deny"||f.action==="escalate"){z(o,`[RECALL: access denied \u2014 ${f.reason}]`);return}}catch(f){if(r==="closed"){z(o,`[RECALL] Result withheld \u2014 evaluation error (blocked \u2014 VISIQ_FAIL_MODE=closed): ${f instanceof Error?f.message:String(f)}.`);return}y("eval-error",`SK retrieval pre-gate failed for "${l}": ${f instanceof Error?f.message:String(f)}`)}await a(o);let d=Ko(o),_=(typeof d=="string"?d:(()=>{try{return JSON.stringify(d)??String(d)}catch{return String(d)}})()).slice(0,500),g;try{g=await qe(n,t,{resourceType:"tool_result",resourceMetadata:{function_name:l,plugin_name:c,content_preview:_},contentPreview:_})}catch(f){r==="closed"?z(o,"[RECALL] Result withheld \u2014 evaluation error (blocked \u2014 VISIQ_FAIL_MODE=closed)."):y("eval-error",`SK post-result retrieval eval failed for "${l}": ${f instanceof Error?f.message:String(f)}`);return}if(g.action==="deny"||g.action==="escalate"){z(o,`[RECALL: access denied \u2014 ${g.reason}]`);return}if(g.action==="redact"&&g.redactionRules&&g.redactionRules.length>0&&d!==null&&d!==void 0)try{z(o,O(d,N(g.redactionRules)))}catch(f){r==="closed"?z(o,"[RECALL] Result withheld \u2014 redaction error (blocked \u2014 VISIQ_FAIL_MODE=closed)."):y("redact-error",`SK result redaction failed for "${l}" \u2014 result passed UNREDACTED: ${f instanceof Error?f.message:String(f)}`)}}}function Go(e){return async function(n,r){await r(n);let i=n.renderedPrompt;if(typeof i!="string"||i.length===0)return;let o;try{o=await qe(e.unified,e.agentId,{resourceType:"prompt",resourceMetadata:{},contentPreview:i.slice(0,500)})}catch(a){e.failMode==="closed"?n.renderedPrompt="[RECALL] Prompt withheld \u2014 evaluation error (blocked \u2014 VISIQ_FAIL_MODE=closed).":y("eval-error",`SK prompt-render eval failed: ${a instanceof Error?a.message:String(a)}`);return}if(o.action==="redact"&&o.redactionRules&&o.redactionRules.length>0){try{n.renderedPrompt=O(i,N(o.redactionRules))}catch(a){e.failMode==="closed"?n.renderedPrompt="[RECALL] Prompt withheld \u2014 redaction error (blocked \u2014 VISIQ_FAIL_MODE=closed).":y("redact-error",`SK prompt redaction failed \u2014 prompt passed UNREDACTED: ${a instanceof Error?a.message:String(a)}`)}return}(o.action==="deny"||o.action==="escalate")&&(n.renderedPrompt=`[RECALL: prompt suppressed \u2014 ${o.reason}]`)}}function Yn(e,t){let n=e;if(n[Wn]===!0)return t.onWrap?.(),e;let r=zo(t),i=Go(t),o=!1;return Array.isArray(n._functionInvocationFilters)?(n._functionInvocationFilters.unshift(r),o=!0):typeof n.useFunctionInvocation=="function"&&(n.useFunctionInvocation(r),o=!0),typeof n.usePromptRender=="function"?n.usePromptRender(i):Array.isArray(n._promptRenderFilters)&&n._promptRenderFilters.push(i),o&&(n[Wn]=!0,t.onWrap?.()),e}function C(e){let t=/^D-/.test(e.code),n;e.outcome==="approval_required"?n="requires human approval, which was not granted":e.outcome==="error"?n="was blocked (fail-closed) after a policy-evaluation error":n="was denied by policy";let r=e.reason?.trim(),i;r?i=r:t?i="no policy rule covers this action, so the organization default applied":e.outcome==="approval_required"?i="this action is routed to a human for approval":i="denied by policy";let o=e.mechanism?.trim()?` \u2014 ${e.mechanism.trim()}`:"";return`[VisIQ decision=${e.outcome} code=${e.code}] This tool call was NOT executed: it ${n} (${i})${o}. VisIQ is a security harness installed by your developer. Report this reason to the user verbatim; do not invent a different one.`}function Ve(e){return e instanceof Error?e.message:String(e)}var Ho=/https?:\/\/[^\s"'`,)}\]]+/;function ht(e){let t=e.match(Ho);if(t)try{let n=new URL(t[0]);return n.hostname+n.pathname}catch{return t[0]}}var oe=Symbol.for("visiq.toolexec.instrumented");function Wo(e){return e!==null&&typeof e=="object"&&typeof e.execute=="function"}var _t={vercel:"Vercel AI SDK agent",mastra:"Mastra Agent",openai:"OpenAI Agents SDK agent",llamaindex:"LlamaIndex.TS agent",voltagent:"VoltAgent agent","semantic-kernel":"Semantic Kernel"};function Zn(e){if(e===null||typeof e!="object")return null;let t=e;if(Wo(t))return null;if(Qn(e))return"semantic-kernel";if(typeof t.generateText=="function"&&(typeof t.getTools=="function"||t.toolManager!==void 0))return"voltagent";if(typeof t.run=="function"&&typeof t.runStream=="function"&&t.agents!==void 0)return"llamaindex";if(Array.isArray(t.tools)&&t.handoffs!==void 0&&(typeof t.on=="function"||t.eventEmitter!==void 0))return"openai";if(typeof t.generate=="function"&&typeof t.getLLM=="function"&&(typeof t.listTools=="function"||typeof t.getTools=="function"))return"mastra";if(typeof t.generate=="function"){let n=t.settings;if(n&&typeof n=="object"&&n.tools!==void 0||t.tools!==void 0)return"vercel"}return null}async function Qo(e,t,n,r,i,o){let{agentId:a,unified:l}=e,c=V(i),s;try{await l.awaitBundleReady(),s=Y(await l.evaluate({operations:o?["action","delegation"]:["action"],agentId:a,toolName:t,toolArgs:n,...o?{context:$e(o,a)}:{},...i?.session_id?{sessionId:i.session_id}:{},...r!==void 0?{targetResource:r}:{},...c?{telemetry:c}:{}}))}catch(u){let d=u instanceof Error?u.message:String(u);return e.failMode==="closed"?{block:C({outcome:"error",code:"EVAL-ERROR",mechanism:`policy evaluation failed: ${d} (blocked \u2014 VISIQ_FAIL_MODE=closed)`})}:(y("eval-error",`policy evaluation failed for tool "${t}": ${d}`),{block:null})}if(s.decision==="approval_required"&&s.decisionId){let u=l.getApiKey()??e.apiKey,d=await we({endpoint:l.getEndpoint()??e.endpoint??"",...u?{apiKey:u}:{},decisionId:s.decisionId,timeoutMs:e.hitlTimeoutMs,sdkVersion:B});return d.resolution!=="proceed"?{block:C({outcome:"approval_required",code:s.ruleCode??"HITL-BLOCK",reason:s.reason,mechanism:d.reason}),decision:s}:{block:null}}if(!s.allowed)return{block:C({outcome:"deny",code:s.ruleCode??"DENY",reason:s.reason}),decision:s};if(s.decision==="mask"&&s.argRedactionRules&&s.argRedactionRules.length>0)try{let u=N(s.argRedactionRules);return{block:null,maskedArgs:O(n,u),decision:s}}catch(u){let d=u instanceof Error?u.message:String(u);return e.failMode==="closed"?{block:C({outcome:"error",code:"MASK-ERROR",mechanism:`argument masking failed: ${d} (blocked \u2014 VISIQ_FAIL_MODE=closed)`})}:(y("mask-error",`argument masking failed for tool "${t}" \u2014 running with UNMASKED args: ${d}`),{block:null})}return{block:null}}async function yt(e,t,n,r,i){let o=T.getStore()??e.telemetry,a=De(t,n);a&&pe(e.unified,{agentId:e.agentId,sessionId:o?.session_id,...e.framework?{framework:e.framework}:{}},a);let l={agentId:e.agentId,sessionId:o?.session_id,...e.framework?{framework:e.framework}:{}},c=ce(t,n);try{fe(e.unified,l,{toolName:t,...c?{memory:c}:{},argSummary:r.slice(0,512)})}catch(g){q("step-beat",`emit failed for tool "${t}": ${Ve(g)}`)}let s=Date.now(),u=await Qo(e,t,n,ht(r),o,a);if(u.block!==null){try{u.decision&&te(e.unified,l,{toolName:t,decision:u.decision.decision??"deny",...u.decision.ruleCode?{ruleCode:u.decision.ruleCode}:{},...u.decision.reason?{ruleLabel:u.decision.reason}:{},enforced:!0,harnessMessage:u.block})}catch(g){q("intervention-beat",`emit failed for tool "${t}": ${Ve(g)}`)}return u.block}if(u.maskedArgs!==void 0&&u.decision)try{te(e.unified,l,{toolName:t,decision:u.decision.decision??"mask",...u.decision.ruleCode?{ruleCode:u.decision.ruleCode}:{},...u.decision.reason?{ruleLabel:u.decision.reason}:{},enforced:!0})}catch(g){q("intervention-beat",`emit failed for tool "${t}": ${Ve(g)}`)}let d=u.maskedArgs??n,h=await i(d),_=await Ue(h,e.agentId,e.unified);try{me(e.unified,l,{toolName:t,ok:!0,durationMs:Date.now()-s,...W(_)!==void 0?{bytes:W(_)}:{},...Q(_)!==void 0?{itemCount:Q(_)}:{},...c?{memory:c}:{}})}catch(g){q("observation-beat",`emit failed for tool "${t}": ${Ve(g)}`)}return _}function Ke(e,t,n){let r=e;if(r[oe]){n.onWrap?.();return}if(typeof r.execute!="function")return;let i=r.execute;vt(r,"execute",async function(...a){let l=lt(a[0]);return yt(n,t,l,Se(l),c=>Promise.resolve(i.apply(this,[c,...a.slice(1)])))}),r[oe]=!0,n.onWrap?.()}function Yo(e,t,n){let r=e;if(r[oe]){n.onWrap?.();return}if(typeof r.invoke!="function")return;let i=r.invoke;vt(r,"invoke",async function(...a){let l=a[1],c=On(l),s=typeof l=="string"?l:Se(c);return yt(n,t,c,s,u=>{let d=typeof l=="string"?JSON.stringify(u):u;return Promise.resolve(i.apply(this,[a[0],d,...a.slice(2)]))})}),r[oe]=!0,n.onWrap?.()}function Jo(e,t){let n=e;if(n[oe]){t.onWrap?.();return}if(typeof n.call!="function")return;let r=n.metadata,i=typeof r?.name=="string"?r.name:"unknown",o=n.call;vt(n,"call",async function(...l){let c=lt(l[0]);return yt(t,i,c,Se(c),s=>Promise.resolve(o.apply(this,[s,...l.slice(1)])))}),n[oe]=!0,t.onWrap?.()}function Xn(e,t){for(let[n,r]of Object.entries(e))r!==null&&typeof r=="object"&&Ke(r,n,t);return e}function er(e,t,n){let r={...t,framework:n};switch(n){case"vercel":return Zo(e,r);case"mastra":return Xo(e,r);case"openai":return na(e,r);case"llamaindex":return ta(e,r);case"voltagent":return ea(e,r);case"semantic-kernel":return Yn(e,r);default:return e}}function Zo(e,t){let n=e,r=n.settings&&typeof n.settings=="object"?n.settings:void 0,i=r?.tools??n.tools;return i&&typeof i=="object"&&Xn(i,t),r&&!r.__visiq_step&&(r.__visiq_step=!0,r.onStepFinish=bt(r.onStepFinish)),ze(e,["generate","stream"],async(o,a)=>(Ie(a,o[0]),o)),e}function Xo(e,t){let r=aa(e);return r&&Xn(r,t),ze(e,["generate","stream","generateVNext","streamVNext"],async(i,o)=>{Ie(o,i[0]);let a=i[1]&&typeof i[1]=="object"?{...i[1]}:{};a.onStepFinish=bt(a.onStepFinish);let l=[...i];return l[1]=a,l}),e}function ea(e,t){let n=ia(e);if(n){for(let r of n)if(r!==null&&typeof r=="object"){let{name:i}=r;Ke(r,typeof i=="string"?i:"unknown",t)}}return ze(e,["generateText","streamText","generateObject","streamObject"],async(r,i)=>{Ie(i,r[0]);let o=r[1]&&typeof r[1]=="object"?{...r[1]}:{};o.onStepFinish=bt(o.onStepFinish);let a=[...r];return a[1]=o,a}),e}function ta(e,t){let n=e,r=o=>{let a=o?.tools;if(Array.isArray(a))for(let l of a)l!==null&&typeof l=="object"&&Jo(l,t)},{agents:i}=n;if(i instanceof Map)for(let o of i.values())r(o);else Array.isArray(n.tools)&&r(n);return ze(e,["run"],async(o,a)=>(Ie(a,o[0]),o)),oa(e,"runStream",(o,a,l)=>{l||Ie(a,o[0])}),e}function na(e,t){let n=e,{tools:r}=n;if(Array.isArray(r)){for(let i of r)if(i!==null&&typeof i=="object"){let{name:o}=i;Yo(i,typeof o=="string"?o:"unknown",t)}}return ra(e,t),e}function ra(e,t){let n=e;if(n.__visiq_openai_hooks||typeof n.on!="function")return;let r=n.on,{telemetry:i}=t;r.call(e,"agent_start",(...o)=>{i.session_id=Jn(),i.llm_prompts=[],i.llm_responses=[],i.agent_reasoning=[],i.retrieverQueries=new Map;let a=o[2];a!=null&&i.llm_prompts.push(Se(a).slice(0,5120))}),r.call(e,"agent_end",(...o)=>{let a=o[1];typeof a=="string"&&a&&i.llm_responses.push(a.slice(0,5120))}),n.__visiq_openai_hooks=!0}function ia(e){let t=r=>Array.isArray(r)&&r.some(i=>i!==null&&typeof i.execute=="function");if(typeof e.getTools=="function")try{let r=e.getTools();if(t(r))return r}catch{}let n=e.toolManager;if(n&&typeof n.getAllBaseTools=="function")try{let r=n.getAllBaseTools();if(t(r))return r}catch{}return t(e.tools)?e.tools:null}function ze(e,t,n){let r=e;for(let i of t){if(typeof r[i]!="function")continue;let o=`__visiq_wrapped_${i}`;if(r[o])continue;let a=r[i];r[i]=function(...l){let c=tr();return T.run(c,async()=>{let s=await n(l,c);return a.apply(e,s)})},r[o]=!0}}function oa(e,t,n){let r=e;if(typeof r[t]!="function")return;let i=`__visiq_wrapped_${t}`;if(r[i])return;let o=r[t];r[t]=function(...a){let l=T.getStore(),c=l??tr();return n(a,c,l!==void 0),T.run(c,()=>o.apply(e,a))},r[i]=!0}function bt(e){return t=>{let n=T.getStore(),r=t;if(n&&typeof r?.text=="string"&&r.text&&n.llm_responses.push(r.text.slice(0,5120)),typeof e=="function")return e(t)}}function Ie(e,t){if(t==null)return;let n=t;if(typeof t=="object"){let r=t;n=r.prompt??r.messages??t}e.llm_prompts.push(Se(n).slice(0,5120))}function aa(e){for(let t of["listTools","getTools"])if(typeof e[t]=="function")try{let n=e[t]();if(n&&typeof n=="object"&&typeof n.then!="function")return n}catch{}return null}function tr(){return{session_id:Jn(),llm_prompts:[],llm_responses:[],agent_reasoning:[],retrieverQueries:new Map}}function vt(e,t,n){try{e[t]=n}catch{Object.defineProperty(e,t,{value:n,writable:!0,configurable:!0,enumerable:!0})}}function Se(e){try{return JSON.stringify(e)??String(e)}catch{return String(e)}}function cr(e,t){let n=pa(t);if(e[Ae]===!0)return e;let r=ha(e);if(r==="langchain-executor"||r==="langchain-graph")return se(n.apiKey,n.endpoint,n.agentId,n.timeoutMs,rr(r,null),n.failMode),ir(e,n),_a(e,n);let i=Zn(e);if(i){se(n.apiKey,n.endpoint,n.agentId,n.timeoutMs,rr("unknown",i),n.failMode),ir(e,n);let o=0,a=fr(n);a.onWrap=()=>{o+=1};let l=er(e,a,i);if(o===0){let c=0;try{c=gt(e).length}catch{c=0}if(c>0){let s=`[VisIQ] Detected a ${_t[i]} that ADVERTISES ${String(c)} tool(s) but instrumented ZERO of them \u2014 its tool calls run UN-GOVERNED while this SDK appears correctly wired. This is almost always a tool bag that moved/renamed on a framework version bump. Upgrade @visiq/harness, or pass the tools through visiq() directly (visiq(tools, \u2026)). Set onInstrumentFailure:'throw' (or VISIQ_ON_INSTRUMENT_FAILURE=throw / VISIQ_FAIL_MODE=closed) to refuse to run ungoverned.`;if(n.onInstrumentFailure!==void 0?n.onInstrumentFailure==="throw":n.failMode==="closed")throw new Error(s);y("zero-instrument",`advertised ${String(c)} tool(s), instrumented none`),console.warn(s)}else{let s=`[VisIQ] Detected a ${_t[i]} with no tools to instrument (the agent advertises none). If it is intentionally tool-less (LLM-only) this is safe to ignore; otherwise its tool bag is not where this SDK looks for it \u2014 upgrade @visiq/harness or pass the tools through visiq() (visiq(tools, \u2026)). Set onInstrumentFailure:'throw' (or VISIQ_ON_INSTRUMENT_FAILURE=throw) to fail closed here.`;if(n.onInstrumentFailure==="throw")throw new Error(s);console.warn(s)}}return l}if(ka(e)){let o=process.env.VISIQ_GRANT_ID;return o?Ia(e,n,o):Sa(e,n)}throw new Error("[VisIQ] Cannot detect agentic framework. Pass a LangChain AgentExecutor, LangGraph CompiledGraph, or a tool with one of: _call, execute, call, run, invoke.")}var ca="https://api.visiqlabs.com",ua="\0",nr=new Map;function rr(e,t){if(e==="langchain-executor"||e==="langchain-graph")return"langchain";switch(t){case"vercel":return"vercel_ai";case"mastra":return"mastra";case"openai":return"openai_agents";case"llamaindex":return"llamaindex";case"voltagent":return"voltagent";case"semantic-kernel":return"semantic_kernel";default:return}}function se(e,t,n,r,i,o){let a=[e??"",t??"",n??"",r??"",o??""].join(ua),l=nr.get(a);return l||(l=new xn(e,t,n,void 0,r,B,We),l.registerHostEnvironment(i),nr.set(a,l)),o!==void 0&&l.setFailMode(o),l}function ir(e,t){try{let n=gt(e);n.length>0&&se(t.apiKey,t.endpoint,t.agentId,t.timeoutMs,void 0,t.failMode).reportToolSurface(n)}catch{}}function da(e){if(typeof e=="number"&&Number.isFinite(e)&&e>0)return e;let t=process.env.VISIQ_TIMEOUT_MS;if(t!==void 0){let n=Number.parseInt(t,10);if(Number.isFinite(n)&&n>0)return n}}function pa(e){let t=e?.agentId??process.env.VISIQ_AGENT_ID??ma(),n=e?.apiKey??process.env.VISIQ_API_KEY,r=e?.endpoint??process.env.VISIQ_ENDPOINT??(n?ca:void 0);return{agentId:t,apiKey:n,endpoint:r,hitlTimeoutMs:ga(e?.hitlTimeoutMs),timeoutMs:da(e?.timeoutMs),onInstrumentFailure:e?.onInstrumentFailure??fa(),failMode:K(e?.failMode)}}function fa(){let e=process.env.VISIQ_ON_INSTRUMENT_FAILURE;if(e==="throw")return"throw";if(e==="warn")return"warn"}function ma(){let e=t=>t.toLowerCase().replace(/^@[^/]+\//,"").replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,255);try{let t=process.cwd();for(let n=0;n<64;n++){let r=He.join(t,"package.json");if(Ge.existsSync(r)){let o=JSON.parse(Ge.readFileSync(r,"utf8"));if(typeof o.name=="string"&&o.name.trim()){let a=e(o.name);if(a)return a}break}let i=He.dirname(t);if(i===t)break;t=i}}catch{}try{let t=e(lr.hostname());if(t)return t}catch{}return"agent"}function ga(e){if(typeof e=="number"&&Number.isFinite(e)&&e>0)return e;let t=process.env.VISIQ_HITL_TIMEOUT_MS;if(t){let n=Number(t);if(Number.isFinite(n)&&n>0)return n}return ct}function ha(e){let t=e;return typeof t.invoke=="function"&&t.agent&&Array.isArray(t.tools)?"langchain-executor":typeof t.invoke=="function"&&t.nodes&&(t.edges||t.lg_is_pregel===!0||typeof t.builder=="object"&&t.builder!==null&&t.builder.edges)?"langchain-graph":"unknown"}function _a(e,t){let n=e,r=se(t.apiKey,t.endpoint,t.agentId,t.timeoutMs,void 0,t.failMode),i=ya(n);for(let c of i)At(c,t.agentId,r),ba(c,t.agentId,r,t),dr(c,r,t);let{nodes:o}=n;if(!!o&&typeof o=="object"&&"tools"in o&&i.length===0){let c="[VisIQ] Detected a LangGraph agent whose compiled graph carries a ToolNode, but resolved ZERO tools from it \u2014 its tool calls run UN-GOVERNED while this SDK appears correctly wired. This is almost always a compiled-graph tool bag that moved on a @langchain/langgraph version bump. Upgrade @visiq/harness, or pass the tools through visiq() directly (visiq(tools, \u2026)). Set onInstrumentFailure:'throw' (or VISIQ_ON_INSTRUMENT_FAILURE=throw / VISIQ_FAIL_MODE=closed) to refuse to run ungoverned.";if(t.onInstrumentFailure!==void 0?t.onInstrumentFailure==="throw":t.failMode==="closed")throw new Error(c);y("zero-instrument","langgraph compiled-graph ToolNode present, resolved no tools"),console.warn(c)}let l=n.invoke;if(n.invoke=function(c,s){let u=kt(),d=sr(t.agentId,r),h=s?.callbacks??[];return T.run(u,()=>l.call(this,c,{...s,callbacks:[...h,d]}))},typeof n.stream=="function"){let c=n.stream;n.stream=function(s,u){let d=kt(),h=sr(t.agentId,r),_=u?.callbacks??[];return T.run(d,()=>c.call(this,s,{...u,callbacks:[..._,h]}))}}return e}function ya(e){let t=[],n=new Set,r=o=>{if(Array.isArray(o))for(let a of o)a&&typeof a=="object"&&!n.has(a)&&(n.add(a),t.push(a))};r(e.tools);let{nodes:i}=e;if(i&&typeof i=="object"){for(let o of Object.values(i))if(o&&typeof o=="object"){let a=o;r(a.tools);let{bound:l}=a;l&&typeof l=="object"&&r(l.tools)}}return t}function kt(){return{session_id:sa(),llm_prompts:[],llm_responses:[],agent_reasoning:[],retrieverQueries:new Map}}function At(e,t,n){let r=e,i=Symbol.for("visiq.recall.instrumented");if(!r[i]){if(typeof r._getRelevantDocuments=="function"){let o=r._getRelevantDocuments;r._getRelevantDocuments=async function(a,l){let c=await o.call(this,a,l);return or(c,t,a,n)},r[i]=!0}if(typeof r.retrieve=="function"&&!r._getRelevantDocuments){let o=r.retrieve;r.retrieve=async function(a){let l=await o.call(this,a);return or(l,t,String(a),n)},r[i]=!0}r.retriever&&typeof r.retriever=="object"&&At(r.retriever,t,n)}}function ba(e,t,n,r){let i=e,o=Symbol.for("visiq.recall.tool-instrumented");if(i[o]||typeof i.func!="function")return;let a=typeof i.name=="string"?i.name:"",l=typeof i.retriever=="object"&&i.retriever!==null,c=a.split(/[^a-zA-Z0-9]+|(?<=[a-z])(?=[A-Z])/).map(A=>A.toLowerCase()),s=new Set(["update","delete","create","write","archive","insert","remove","patch"]),u=new Set(["send","post","put"]),d=c.some(A=>s.has(A)),h=u.has(c[0]??""),_=d||h,g=["update","delete","create","archive","insert","remove"],f=c.some(A=>g.some(x=>A.length>x.length&&A.endsWith(x))),L=/retriev/i.test(a)||/search.*doc|knowledge/i.test(a)&&!_&&!f;if(!(l||L))return;let I=d||f;if(!I)if(l)At(i.retriever,t,n);else{let A=globalThis,x=Symbol.for("visiq.recall.closureRetrieverWarned"),M=A[x]??=new Set;M.has(a)||(M.add(a),console.warn(`[VisIQ] Retriever tool "${a||"(unnamed)"}" exposes no reachable retriever (e.g. LangChain createRetrieverTool returns a joined string). RECALL masks its output via value-shape + whole-result rules, but PER-DOCUMENT metadata/classification rules cannot apply to a metadata-less joined string. For full per-doc governance, pass the retriever to visiq() directly, or use a tool that returns a Document[].`))}let G=i.func;I?(i[ur]=!0,i.func=async function(...A){await n.awaitBundleReady();let x=A[0],M=typeof x=="object"&&x!==null?x:{input:x},X=typeof M.query=="string"?M.query:void 0,v=T.getStore(),w=V(v),S;try{S=await n.evaluate({operations:["retrieval","action"],agentId:t,...v?.session_id?{sessionId:v.session_id}:{},toolName:a||"unknown",toolArgs:M,resourceType:"document",resourceMetadata:{},...X!==void 0?{query:X}:{},...w?{telemetry:w}:{}})}catch(D){let le=D instanceof Error?D.message:String(D);return K(r?.failMode)==="closed"?C({outcome:"error",code:"EVAL-ERROR",mechanism:`policy evaluation failed: ${le} (blocked \u2014 VISIQ_FAIL_MODE=closed)`}):(y("eval-error",`policy evaluation failed for hybrid tool "${a||"unknown"}": ${le}`),G.apply(this,A))}let k=Y(S),ee=ve(k.hitlFallback,k.argRedactionRules),Re=A,It=()=>{try{return Re=[O(M,N(k.argRedactionRules)),...A.slice(1)],null}catch{return K(r?.failMode)==="closed"?C({outcome:"error",code:"MASK-ERROR",mechanism:"argument masking failed (blocked \u2014 VISIQ_FAIL_MODE=closed)"}):(y("mask-error",`argument masking failed for tool "${a||"unknown"}" \u2014 running with UNMASKED args`),null)}};if(k.decision==="approval_required"&&k.decisionId&&r){let D=await we({endpoint:n.getEndpoint()??r.endpoint??"",apiKey:n.getApiKey()??r.apiKey,decisionId:k.decisionId,timeoutMs:r.hitlTimeoutMs,maskFallback:ee,sdkVersion:B});if(D.resolution==="mask"){let le=It();if(le)return le}else if(D.resolution!=="proceed")return C({outcome:"approval_required",code:k.ruleCode??"HITL-BLOCK",reason:k.reason,mechanism:D.reason})}else if(!k.allowed)return C({outcome:"deny",code:k.ruleCode??"DENY",reason:k.reason});if(k.decision==="mask"&&k.argRedactionRules.length>0){let D=It();if(D)return D}let hr=await G.apply(this,Re);return Vn(hr,S,r?.failMode)}):i.func=async function(...A){let x=await G.apply(this,A);return typeof x=="string"?jn(x,t,n):Ue(x,t,n)},i[o]=!0}var ur=Symbol.for("visiq.hybrid.instrumented");async function or(e,t,n,r){return Pn(e,t,n,r)}var ar=["invoke","call","_call"],ae=new la;function dr(e,t,n){let r=e,i=Symbol.for("visiq.allow.instrumented");if(r[i]||typeof r._getRelevantDocuments=="function"||r[ur]||!ar.some(s=>typeof r[s]=="function"))return;let{agentId:o}=n,a=typeof r.name=="string"?r.name:"unknown",l=Symbol("visiq.gate"),c=async(s,u,d,h,_)=>{let g=ae.getStore();if(g!==void 0&&g.gateKey===l&&!g.entered.has(_))return g.entered.add(_),s.call(u,d,...h);let f;if(typeof d=="string")f=d;else{let w=d?.input;f=w!=null?String(w):JSON.stringify(d)??""}let b=T.getStore(),L=V(b),F=typeof d=="object"&&d!==null?d:{input:f},I=De(a,F);I&&pe(t,{agentId:o,sessionId:b?.session_id,framework:"langchain"},I);let G={agentId:o,sessionId:b?.session_id,framework:"langchain"},A=ce(a,F);try{fe(t,G,{toolName:a,...A?{memory:A}:{},argSummary:f.slice(0,512)})}catch(w){q("step-beat",`emit failed for tool "${a}": ${wt(w)}`)}let x=Date.now(),M=async w=>{let S=await w();try{me(t,G,{toolName:a,ok:!0,durationMs:Date.now()-x,...W(S)!==void 0?{bytes:W(S)}:{},...Q(S)!==void 0?{itemCount:Q(S)}:{},...A?{memory:A}:{}})}catch(k){q("observation-beat",`emit failed for tool "${a}": ${wt(k)}`)}return S},X=(w,S,k,ee)=>{try{te(t,G,{toolName:a,decision:w,...S?{ruleCode:S}:{},...k?{ruleLabel:k}:{},enforced:!0,...ee?{harnessMessage:ee}:{}})}catch(Re){q("intervention-beat",`emit failed for tool "${a}": ${wt(Re)}`)}};await t.awaitBundleReady();let v;try{v=Y(await t.evaluate({operations:I?["action","delegation"]:["action"],agentId:o,...b?.session_id?{sessionId:b.session_id}:{},toolName:a,toolArgs:F,targetResource:ht(f),...L?{telemetry:L}:{},...I?{context:$e(I,o)}:{}}))}catch(w){let S=w instanceof Error?w.message:String(w);return n.failMode==="closed"?C({outcome:"error",code:"EVAL-ERROR",mechanism:`policy evaluation failed: ${S} (blocked \u2014 VISIQ_FAIL_MODE=closed)`}):(y("eval-error",`policy evaluation failed for tool "${a}": ${S}`),ae.run({gateKey:l,entered:new Set([_])},()=>s.call(u,d,...h)))}if(v.decision==="approval_required"&&v.decisionId){let w=ve(v.hitlFallback,v.argRedactionRules),S=await we({endpoint:t.getEndpoint()??n.endpoint??"",apiKey:t.getApiKey()??n.apiKey,decisionId:v.decisionId,timeoutMs:n.hitlTimeoutMs,maskFallback:w,sdkVersion:B});if(S.resolution==="proceed")return M(()=>ae.run({gateKey:l,entered:new Set([_])},()=>s.call(u,d,...h)));if(S.resolution==="mask")try{let ee=O(d,N(v.argRedactionRules));return X("mask",v.ruleCode,v.reason),M(()=>ae.run({gateKey:l,entered:new Set([_])},()=>s.call(u,ee,...h)))}catch{return n.failMode==="closed"?C({outcome:"error",code:"MASK-ERROR",mechanism:"argument masking failed (blocked \u2014 VISIQ_FAIL_MODE=closed)"}):(y("mask-error",`HITL mask fallback failed for tool "${a}" \u2014 running with UNMASKED args`),ae.run({gateKey:l,entered:new Set([_])},()=>s.call(u,d,...h)))}let k=C({outcome:"approval_required",code:v.ruleCode??"HITL-BLOCK",reason:v.reason,mechanism:S.reason});return X("approval_required",v.ruleCode,v.reason,k),k}if(!v.allowed){let w=C({outcome:"deny",code:v.ruleCode??"DENY",reason:v.reason});return X("deny",v.ruleCode,v.reason,w),w}return M(()=>ae.run({gateKey:l,entered:new Set([_])},()=>s.call(u,d,...h)))};for(let s of ar){if(typeof r[s]!="function")continue;let u=r[s];r[s]=function(d,...h){return c(u,this,d,h,s)}}r[i]=!0}function wt(e){return e instanceof Error?e.message:String(e)}function va(e,t,n){let r=(a,l)=>{if(!a||typeof a!="object")return;let c=a[l];return typeof c=="string"&&c.length>0?c:void 0},i=t?.invocation_params,o=e&&typeof e=="object"?e.kwargs:void 0;return r(i,"model")??r(i,"model_name")??r(n,"ls_model_name")??r(o,"model")??r(o,"model_name")}function wa(e,t){let n=(_,g)=>{if(!_||typeof _!="object")return;let f=_[g];return typeof f=="number"&&Number.isFinite(f)?f:void 0},r=e?.tokenUsage,i=n(r,"promptTokens"),o=n(r,"completionTokens");if(i!==void 0||o!==void 0)return{...i!==void 0?{tokensIn:i}:{},...o!==void 0?{tokensOut:o}:{}};let a=t?.usage_metadata,l=n(a,"input_tokens"),c=n(a,"output_tokens");if(l===void 0&&c===void 0)return;let s=a&&typeof a=="object"?a.input_token_details:void 0,u=n(s,"cache_read"),d=n(s,"cache_creation"),h=l!==void 0?Math.max(0,l-(u??0)-(d??0)):void 0;return{...h!==void 0?{tokensIn:h}:{},...c!==void 0?{tokensOut:c}:{},...u!==void 0?{cacheRead:u}:{},...d!==void 0?{cacheWrite:d}:{}}}function sr(e,t){return{name:"VisiqHandler",handleLLMStart:async(n,r,i,o,a,l,c)=>{let s=T.getStore();if(!s)return;s.llm_prompts.push(...r);let u=va(n,a,c);u&&(s.llm_model=u)},handleLLMEnd:async n=>{let r=T.getStore();if(!r)return;let o=n?.generations?.[0]?.[0],a=typeof o?.text=="string"?o.text:"";a&&r.llm_responses.push(a);try{let l=n?.llmOutput,c=o?.message&&typeof o.message=="object"?o.message:void 0,s=wa(l,c);if(!s&&!a)return;let u=c?.tool_calls,d=typeof l?.model=="string"?l.model:void 0,h=r.llm_model??d;await t.awaitBundleReady(),Ze(t,{agentId:e,sessionId:r.session_id,framework:"langchain"},{...a?{texts:[a]}:{},...s?{usage:s}:{},...h?{model:h}:{},final:!(Array.isArray(u)&&u.length>0)})}catch{}},handleAgentAction:async n=>{let r=T.getStore();if(!r)return;let i=typeof n.log=="string"?n.log:"";i&&r.agent_reasoning.push(i)},handleRetrieverStart:async(n,r,i)=>{let o=T.getStore();o&&o.retrieverQueries.set(i,r??"")},handleRetrieverEnd:async(n,r)=>{let i=T.getStore();if(!i)return;let o=i.retrieverQueries.get(r)??"";if(i.retrieverQueries.delete(r),!Array.isArray(n))return;let a=V(i);for(let l of n){let c=l,s=String(c.pageContent??c.text??c.content??""),u=c.metadata??{};await t.evaluate({operations:["retrieval"],agentId:e,resourceType:"document",resourceMetadata:u,query:o,contentPreview:s.slice(0,500),...a?{telemetry:a}:{}})}},handleRetrieverError:async(n,r)=>{let i=T.getStore();i&&i.retrieverQueries.delete(r)}}}var pr=["_call","execute","call","run","invoke"];function ka(e){let t=e;for(let n of pr)if(typeof t[n]=="function")return!0;return!1}function Aa(e){return e instanceof J?!0:e instanceof j?typeof e.status=="number"&&e.status>=400&&e.status<500:!1}function Ia(e,t,n){let r=null,i=null,o=!1,a=async()=>{if(r)return r;if(i)throw new J(`Failed to bootstrap grant ${n}: ${i.message}`,null);let l;try{l=await Gn(t.agentId,n)}catch(c){throw o=Aa(c),o&&(i=c instanceof Error?c:new Error(String(c))),new J(`Failed to bootstrap grant ${n}: ${c instanceof Error?c.message:String(c)}`,null)}return r=Hn(e,{agentId:t.agentId,grantToken:l,failBehavior:t.failMode==="closed"?"deny":"permit",...t.apiKey?{apiKey:t.apiKey}:{},...t.endpoint?{endpoint:t.endpoint}:{}}),r};return new Proxy(e,{get(l,c,s){if(c===Ae)return!0;let u=Reflect.get(l,c,s);return typeof u!="function"||typeof c!="string"||!pr.includes(c)?u:async function(...d){let h;try{h=await a()}catch(g){if(o||t.failMode==="closed")throw g;return y("grant-bootstrap",`grant ${n} bootstrap failed: ${g instanceof Error?g.message:String(g)}`),u.call(this,...d)}return h[c].call(h,...d)}}})}function Sa(e,t){let n=se(t.apiKey,t.endpoint,t.agentId,t.timeoutMs,void 0,t.failMode);dr(e,n,t);let r=e;if(typeof r.execute=="function"){let i=typeof r.name=="string"&&r.name||typeof r.id=="string"&&r.id||"unknown";Ke(e,i,fr(t))}return e}function fr(e){return{agentId:e.agentId,unified:se(e.apiKey,e.endpoint,e.agentId,e.timeoutMs,void 0,e.failMode),hitlTimeoutMs:e.hitlTimeoutMs,failMode:e.failMode,...e.apiKey?{apiKey:e.apiKey}:{},...e.endpoint?{endpoint:e.endpoint}:{},telemetry:kt()}}async function mr(e,t={}){if(!e||e.trim()==="")throw new Error("[VisIQ] visiq.delegate: childAgentId is required");let n=process.env.VISIQ_AGENT_ID;if(!n)throw new Error("[VisIQ] visiq.delegate: VISIQ_AGENT_ID env var is required. Set it to the parent agent ID before calling delegate.");let r=process.env.VISIQ_API_KEY;if(!r)throw new Error("[VisIQ] visiq.delegate: VISIQ_API_KEY env var is required");let i=process.env.VISIQ_ENDPOINT;return{VISIQ_GRANT_ID:(await new ie({agentId:n,apiKey:r,...i?{endpoint:i}:{}}).requestGrant({parentAgentId:n,childAgentId:e,toolScope:t.toolScope??null,contextScope:t.contextScope??null,durationSeconds:t.durationSeconds??3600,purpose:t.purpose??`Delegated to ${e}`,...t.maxDepth!==void 0?{maxDepth:t.maxDepth}:{},...t.parentGrantToken!==void 0?{parentGrantToken:t.parentGrantToken}:{}})).grantId}}var Te=class{constructor(t){this.transport=t}transport;deploy(t={}){let n={include_mac:t.includeMac??!1};return t.autoInstallHarness!==void 0&&(n.auto_install_harness=t.autoInstallHarness),Z(this.transport,"POST","/api/discovery/fleet/deploy",n)}status(){return Z(this.transport,"GET","/api/discovery/fleet/status")}heartbeat(t){return Z(this.transport,"POST","/api/discovery/fleet/heartbeat",{instance_id:t.instanceId,vendor:t.vendor})}stop(){return Z(this.transport,"POST","/api/discovery/fleet/stop")}};var Ee=class{constructor(t){this.transport=t}transport;connectAws(t){return Z(this.transport,"POST","/api/discovery/integrations/aws",{aws_account_id:t.awsAccountId,aws_region:t.awsRegion})}};function Ta(e){if(!e.baseUrl||e.baseUrl.length===0)throw new Error("[VisIQ] createVisiqClient: baseUrl is required");if(!e.accessToken&&!e.cookieHeader)throw new Error("[VisIQ] createVisiqClient: one of accessToken or cookieHeader is required");let t=e.baseUrl.replace(/\/$/,""),n=e.fetchImpl??globalThis.fetch.bind(globalThis),r={baseUrl:t,accessToken:e.accessToken,cookieHeader:e.cookieHeader,fetchImpl:n};return{fleet:new Te(r),integrations:new Ee(r)}}async function Z(e,t,n,r){let i=`${e.baseUrl}${n.startsWith("/")?n:`/${n}`}`,o={...H(B)};e.cookieHeader&&(o.Cookie=e.cookieHeader),e.accessToken&&(o.Authorization=`Bearer ${e.accessToken}`);let a;r!==void 0&&(o["Content-Type"]="application/json",a=JSON.stringify(r));let l=await e.fetchImpl(i,{method:t,headers:o,body:a});if(!l.ok){let c="";try{c=await l.text()}catch{}throw new Error(`[VisIQ] ${t} ${n} failed (${l.status}): ${c||l.statusText}`)}return await l.json()}var gr=cr;gr.delegate=mr;var _l=gr;export{Me as DEFAULT_FAIL_MODE,Te as FleetClient,Ee as IntegrationsClient,Ta as createVisiqClient,mr as delegate,be as normalizeFailMode,_l as visiq};
6
+ -----END PRIVATE KEY-----`,template:{pattern:x.private_key,mode:"full"},defaultEnabled:!0},jwt:{id:"jwt",label:"JWT / bearer tokens",description:"JSON Web Tokens (base64url header.payload.signature).",category:"secret",example:"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIn0.dBjftJeZ4CVP",template:{pattern:x.jwt,mode:"full"},defaultEnabled:!0},aws_access_key:{id:"aws_access_key",label:"AWS access key IDs",description:"AWS access / identity key ids (AKIA / ASIA / AROA \u2026).",category:"secret",example:"AKIAIOSFODNN7EXAMPLE",template:{pattern:x.aws_access_key,mode:"full"},defaultEnabled:!0},github_token:{id:"github_token",label:"GitHub tokens",description:"GitHub personal / OAuth tokens (classic ghp_\u2026 + fine-grained).",category:"secret",example:"ghp_0123456789abcdef0123456789abcdef0123",template:{pattern:x.github_token,mode:"full"},defaultEnabled:!0},slack_token:{id:"slack_token",label:"Slack tokens",description:"Slack bot / user / app tokens (xoxb- / xoxp- \u2026).",category:"secret",example:"xoxb-1234567890-abcdefghijkl",template:{pattern:x.slack_token,mode:"full"},defaultEnabled:!0},stripe_secret:{id:"stripe_secret",label:"Stripe secret keys",description:"Stripe live secret / restricted keys (sk_live_ / rk_live_).",category:"secret",example:"sk_live_0123456789abcdefABCDEF",template:{pattern:x.stripe_secret,mode:"full"},defaultEnabled:!0},google_api_key:{id:"google_api_key",label:"Google API keys",description:"Google API keys (AIza\u2026).",category:"secret",example:"AIzaSyA1234567890abcdefghijklmnopqrstuv",template:{pattern:x.google_api_key,mode:"full"},defaultEnabled:!0},llm_api_key:{id:"llm_api_key",label:"LLM provider API keys",description:"OpenAI / Anthropic secret keys (sk-\u2026, sk-proj-\u2026, sk-ant-\u2026).",category:"secret",example:"sk-ant-api03-AbCdEf0123456789AbCdEf01",template:{pattern:x.llm_api_key,mode:"full"},defaultEnabled:!0},bearer_token:{id:"bearer_token",label:"Authorization bearer tokens",description:"Credentials following an HTTP `Authorization: Bearer \u2026` header.",category:"secret",example:"Bearer abcdef0123456789abcdef0123456789",template:{pattern:x.bearer_token,mode:"full"},defaultEnabled:!0},connection_string:{id:"connection_string",label:"Connection strings (with password)",description:"Database / broker DSNs carrying an inline password (scheme://user:pass@host).",category:"secret",example:"postgres://app:s3cr3t@db.internal:5432/main",template:{pattern:x.connection_string,mode:"full"},defaultEnabled:!0},pan:{id:"pan",label:"Payment card numbers (PAN)",description:"Luhn-valid 13\u201319 digit primary account numbers (PCI-DSS).",category:"financial",example:"4242 4242 4242 4242",template:{pattern:"\\b\\d{13,19}\\b",mode:"partial",keepLast:4},defaultEnabled:!0},iban:{id:"iban",label:"IBAN bank account numbers",description:"ISO 13616 IBANs (mod-97 validated); keeps the last 4 visible.",category:"financial",example:"DE89 3704 0044 0532 0130 00",template:{pattern:"\\b[A-Z]{2}\\d{2}(?:[ ]?[A-Z0-9]){10,30}\\b",mode:"partial",keepLast:4},defaultEnabled:!0},aba_routing:{id:"aba_routing",label:"ABA routing numbers",description:"US bank routing-transit numbers (9-digit, checksum-validated). DEFAULT-OFF (9-digit false-positive surface).",category:"financial",example:"021000021",template:{pattern:"\\b\\d{9}\\b",mode:"full"},defaultEnabled:!1},us_ein:{id:"us_ein",label:"US Employer ID (EIN)",description:"US tax Employer Identification Numbers (XX-XXXXXXX).",category:"financial",example:"12-3456789",template:{pattern:x.us_ein,mode:"full"},defaultEnabled:!0},swift_bic:{id:"swift_bic",label:"SWIFT / BIC codes",description:"Bank SWIFT/BIC codes (8 or 11 chars). DEFAULT-OFF (matches uppercase tokens).",category:"financial",example:"DEUTDEFF500",template:{pattern:x.swift_bic,mode:"full"},defaultEnabled:!1},ssn:{id:"ssn",label:"US Social Security numbers",description:"Dashed / spaced US SSNs (e.g. 123-45-6789).",category:"pii",example:"123-45-6789",template:{pattern:x.ssn,mode:"partial",keepLast:4},defaultEnabled:!0},email:{id:"email",label:"Email addresses",description:"Email addresses (the mailbox is masked, the domain kept).",category:"pii",example:"alice@acme.com",template:{pattern:x.email,mode:"email"},defaultEnabled:!0},us_phone:{id:"us_phone",label:"US phone numbers",description:"US phone numbers in common formats. DEFAULT-OFF (10-digit false-positive surface).",category:"pii",example:"(415) 555-0132",template:{pattern:x.us_phone,mode:"partial",keepLast:4},defaultEnabled:!1},ipv4:{id:"ipv4",label:"IPv4 addresses",description:"Dotted-quad IPv4 addresses. DEFAULT-OFF (common + usually benign).",category:"identifier",example:"203.0.113.42",template:{pattern:x.ipv4,mode:"full"},defaultEnabled:!1},mac_address:{id:"mac_address",label:"MAC addresses",description:"Hardware MAC addresses. DEFAULT-OFF.",category:"identifier",example:"3c:22:fb:1a:2b:3c",template:{pattern:x.mac_address,mode:"full"},defaultEnabled:!1}},As=new Set(kn.filter(e=>!Ue[e].defaultEnabled));function xo(e,t){let n=new Set;for(let r of kn)(Ue[r].defaultEnabled?!e?.has(r):t?.has(r))||n.add(r);return n}function Oo(e,t,n,r){if(typeof e!="string"||e.length===0)return e;let o=e;for(let{name:i,re:a}of vn){let s=i;n.has(s)||(o=o.replace(a,()=>(r?.(s),t)))}for(let{name:i,re:a,normalize:s,validate:l}of Co)n.has(i)||(o=o.replace(a,c=>l(s(c))?(r?.(i),t):c));return o}function ut(e,t=bn,n,r){return Mo(e,t,xo(n,r))}function Mo(e,t,n){let r=new Set,o=!n.has("pan"),i=s=>{r.add(s)},a=s=>{if(typeof s=="string")return Oo(s,t,n,i);if(typeof s=="number"&&Number.isInteger(s)&&s>0){if(!o)return s;let l=String(s);return l.length>=13&&l.length<=19&&wn(l)?(r.add("pan"),t):s}if(Array.isArray(s))return s.map(l=>a(l));if(s!==null&&typeof s=="object"){let l=s,c={};for(let u of Object.keys(l))c[u]=a(l[u]);return c}return s};return{value:a(e),detectors:[...r].sort()}}function An(e,t=bn){return ut(e,t).value}function No(e){let{value:t,detectors:n}=ut(e),r=n.some(o=>Ue[o].category==="secret");return{detectors:n,blocked:r,redacted:t}}function Lo(e,t){let{blocked:n,redacted:r,detectors:o}=No(e);return n?t.failMode==="closed"?{verdict:"block",redacted:r,detectors:o}:{verdict:"redact",redacted:r,detectors:o}:{verdict:"allow",redacted:r,detectors:o}}function Do(e){if(typeof e!="string"||e.length===0)return e;let t=e.lastIndexOf("__");return t<0?e:e.slice(t+2)}var Fo=new Set(["send","send_email","send_message","email","email_send","message","post","post_message","http_post","upload","export","export_data","share","publish","webhook"]);function $o(e){return Fo.has(Do(e))}function ne(e,t,n){return n.enforced&&$o(e)?Lo(t,{failMode:n.failMode}):{verdict:"allow",redacted:t,detectors:[]}}var Po=/[\u00AD\u200B-\u200F\u202A-\u202E\u2060\u2066-\u2069\uFEFF]/g,In=Object.freeze({\u0430:"a",\u0435:"e",\u043E:"o",\u0440:"p",\u0441:"c",\u0443:"y",\u0445:"x",\u0456:"i",\u0455:"s",\u043A:"k",\u043C:"m",\u0442:"t",\u043D:"h",\u0432:"b",\u0433:"r",\u03BF:"o",\u03B1:"a",\u03C1:"p",\u03B9:"i",\u03C4:"t",\u03B5:"e",\u03BA:"k",\u03BD:"v",\u03C5:"u",\u03B7:"n",\u0131:"i","\u04CF":"l",\u0578:"n"}),jo=new RegExp(`[${Object.keys(In).join("")}]`,"gu"),Uo=Object.freeze({4:"a","@":"a",3:"e",1:"i","!":"i",0:"o",5:"s",$:"s",7:"t",9:"g","(":"c",8:"b"}),Sn="\u2801\u2803\u2809\u2819\u2811\u280B\u281B\u2813\u280A\u281A\u2805\u2807\u280D\u281D\u2815\u280F\u281F\u2817\u280E\u281E\u2825\u2827\u283A\u282D\u283D\u2835",Bo=Object.freeze(Object.fromEntries([...Sn].map((e,t)=>[e,String.fromCharCode(97+t)]))),qo=new RegExp(`[${Sn}\u2800]`,"g"),Tn=/[⠀-⣿]/;function Vo(e){let t="";for(let n of e){let r=n.codePointAt(0);r!==void 0&&(r>=917536&&r<=917630?t+=String.fromCodePoint(r-917504):r>=917504&&r<=917631||(t+=n))}return t}function Ko(e){return e.replace(Po,"")}function En(e){return e.replace(jo,t=>In[t]??t)}function zo(e){return e.replace(/[4@31!05$79(8]/g,t=>Uo[t]??t)}function Go(e){return e.replace(/[a-zA-Z]/g,t=>{let n=t<="Z"?65:97;return String.fromCharCode((t.charCodeAt(0)-n+13)%26+n)})}function Ho(e){return Tn.test(e)?e.replace(qo,t=>t==="\u2800"?" ":Bo[t]??t):e}function un(e){let t;try{t=Vo(e)}catch{t=e}try{t=t.normalize("NFKC")}catch{}return t=Ko(t),t=En(t),t}var Wo=/^[A-Za-z0-9+/]{16,}={0,2}$/,Qo=/^(?:[0-9a-fA-F]{2}\s*){8,}$/,dn=/[A-Za-z0-9+/]{20,}={0,2}/g;function ct(e){if(e.length===0)return 0;let t=0;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);(r===9||r===10||r===13||r>=32&&r<=126||r>=160&&r!==65533)&&t++}return t/e.length}var Rn=new TextDecoder("utf-8",{fatal:!1});function Cn(e){let t;try{t=atob(e)}catch{return[]}let n=new Uint8Array(t.length);for(let o=0;o<t.length;o++)n[o]=t.charCodeAt(o)&255;let r=Rn.decode(n);return t===r?[t]:[r,t]}function Yo(e){let t=e.replace(/\s+/g,"");if(t.length===0||t.length%2!==0)return[];let n=new Uint8Array(t.length/2);for(let i=0;i<n.length;i++){let a=Number.parseInt(t.slice(i*2,i*2+2),16);if(Number.isNaN(a))return[];n[i]=a}let r="";for(let i=0;i<n.length;i++)r+=String.fromCharCode(n[i]);let o=Rn.decode(n);return r===o?[r]:[o,r]}function pn(e){let t=e.trim(),n=[];if(Qo.test(t))for(let r of Yo(t))n.push({decoded:r,textiness:ct(r)});if(Wo.test(t)&&t.length%4===0)for(let r of Cn(t))n.push({decoded:r,textiness:ct(r)});return n}function fn(e,t){let n=[],r;for(dn.lastIndex=0;(r=dn.exec(e))!==null&&n.length<t;){let o=r[0];if(o.length%4===0)for(let i of Cn(o))n.push({decoded:i,textiness:ct(i)})}return n}var Jo=Object.freeze({maxDepth:3,byteCap:262144,maxNodes:256,maxBlobsPerNode:8});function xn(e,t=Jo){if(typeof e!="string"||e.length===0)return{views:[],anyDecoded:!1,truncated:!1,nodes:0,maxDepthSeen:0};let{maxDepth:n,byteCap:r,maxNodes:o,maxBlobsPerNode:i}=t,a=new Set,s=h=>{h.length>0&&h.length<=r&&a.add(h)},l=!1,c=!1,u=0,d=0,_=[{s:e,depth:0}];for(;_.length>0;){if(u>=o){c=!0;break}let h=_.pop();if(h===void 0)break;let{s:m,depth:p}=h;if(m.length>r){c=!0;continue}u++,p>d&&(d=p);let y=un(m);s(y);let C=zo(y);if(C!==y&&s(C),s(Go(y)),Tn.test(m)&&s(Ho(y)),p>=n){let T=un(m);(pn(T).length>0||fn(T,i).length>0)&&(c=!0);continue}let A=[...pn(y),...fn(y,i)];for(let T of A){if(l=!0,T.decoded.length>r){c=!0;continue}T.textiness>=.85&&T.decoded!==y?_.push({s:T.decoded,depth:p+1}):s(T.decoded)}}return{views:[...a],anyDecoded:l,truncated:c,nodes:u,maxDepthSeen:d}}var On=["hidden_text_carrier","injected_turn_boundary","mixed_script_token","nested_encoding_payload"],Zo=Object.freeze(["hidden_text_carrier","injected_turn_boundary","mixed_script_token"]),Xo=8,ei=new Set([173,8203,8204,8205,8206,8207,8288,65279,8234,8235,8236,8237,8238,8294,8295,8296,8297]),mn=e=>e!==void 0&&(e>=65&&e<=90||e>=97&&e<=122);function ti(e){let t=[...e].map(r=>r.codePointAt(0)),n=0;for(let r=0;r<t.length;r++){let o=t[r];if(o>=917504&&o<=917631||ei.has(o)&&mn(t[r-1])&&mn(t[r+1])&&(n++,n>=Xo))return!0}return!1}var ni=/^[ \t]*(?:system|assistant|developer|user)[ \t]*:/i;function ri(e){let t=e.split(/\r?\n/),n=!1;for(let r of t){if(ni.test(r)){if(n)return!0;continue}r.trim().length>0&&(n=!0)}return!1}var oi=[{name:"latin",lo:65,hi:591},{name:"greek",lo:880,hi:1023},{name:"cyrillic",lo:1024,hi:1279}];function ii(e){for(let t of oi)if(e>=t.lo&&e<=t.hi)return t.name;return null}function ai(e){for(let t of e.split(/\s+/)){if(t.length<4)continue;let n=0,r=0,o=!0;for(let i of t){let a=ii(i.codePointAt(0));if(a===null){o=!1;break}a==="latin"?n++:En(i)!==i&&r++}if(o&&n>0&&r>0)return!0}return!1}var gn=Object.freeze({signals:[],contributes:!1});function si(e){if(typeof e!="string"||e.length===0)return{...gn,signals:[]};let t=new Set;try{ti(e)&&t.add("hidden_text_carrier"),ri(e)&&t.add("injected_turn_boundary"),ai(e)&&t.add("mixed_script_token");let{anyDecoded:n,maxDepthSeen:r,truncated:o}=xn(e);n&&(r>=2||o)&&t.add("nested_encoding_payload")}catch{return{...gn,signals:[]}}return{signals:[...On.filter(n=>t.has(n))],contributes:Zo.some(n=>t.has(n))}}var Be=[{name:"override_instructions",re:/\bignore (?:all |the )?(?:previous|above|prior) (?:instructions|prompts?)\b/i},{name:"disregard_instructions",re:/\bdisregard (?:the )?(?:above|previous|system)\b/i},{name:"role_tag",re:/<\/?(system|assistant|instructions|host_context)\b/i},{name:"privilege_override",re:/\b(grant|escalate|elevate) (admin|root|all|full) (access|privileges?)\b/i},{name:"tool_smuggle",re:/```[\s\S]*?(tool_call|function_call)/i}];function hn(e){return typeof e!="string"||e.length===0?[]:Be.filter(({re:t})=>t.test(e)).map(({name:t})=>t)}function li(e){if(typeof e!="string"||e.length===0)return[];let t=new Set(hn(e)),{views:n}=xn(e);for(let r of n)for(let o of hn(r))t.add(o);return Be.filter(r=>t.has(r.name)).map(r=>r.name)}function ci(e){let t=new Set,n=new Set,r=!1,o=i=>{if(i!=null){if(typeof i=="string"){for(let s of li(i))t.add(s);let a=si(i);for(let s of a.signals)n.add(s);a.contributes&&(r=!0);return}if(Array.isArray(i)){for(let a of i)o(a);return}if(typeof i=="object")for(let a of Object.values(i))o(a)}};return o(e),{matched:t.size>0||r,signatures:Be.filter(i=>t.has(i.name)).map(i=>i.name),structural:On.filter(i=>n.has(i))}}function ui(e){return ci(e).matched}var Is=Be.map(e=>e.name);var di=new Set(["untrusted","external","public","public_internet","external_third_party","web"]);var pi="i:injection";function Mn(e){let t=new Set;if(e.content!==void 0&&e.content!==null){let{detectors:o}=ut(e.content);for(let i of o){let a=Ue[i]?.category;a&&t.add(`c:${a}`)}ui(e.content)&&t.add(pi)}let n=e.resourceMetadata??{},r=n.source_trust;return(n.untrusted_source===!0||typeof r=="string"&&di.has(r.toLowerCase()))&&t.add("i:untrusted"),[...t].sort()}var lt="(?:system\\s+prompt|initial\\s+(?:instructions|prompt)|system\\s+(?:instructions|message)|hidden\\s+(?:instructions|prompt)|your\\s+(?:system\\s+prompt|initial\\s+instructions|instructions|prompt)|the\\s+prompt\\s+(?:above|you\\s+were\\s+given))",Ss=[{name:"reveal_prompt",re:new RegExp(`\\b(?:reveal|show|print|repeat|output|echo|display|expose|dump|leak|reprint|divulge|disclose)\\b[\\s\\S]{0,40}?\\b${lt}\\b`,"i")},{name:"what_is_prompt",re:new RegExp(`\\bwhat\\s+(?:is|are|were)\\b[\\s\\S]{0,20}?\\b${lt}\\b`,"i")},{name:"tell_me_prompt",re:new RegExp(`\\b(?:tell|give|send|show)\\s+me\\b[\\s\\S]{0,30}?\\b${lt}\\b`,"i")},{name:"repeat_above",re:/\b(?:repeat|print|output|echo|reproduce)\b[\s\S]{0,20}?\b(?:everything|all\s+(?:the\s+)?(?:text|words))\b[\s\S]{0,12}?\b(?:above|before|preceding|verbatim|word\s+for\s+word)\b/i}],_n="(?:instructions?|prompts?|rules?|directives?|guidelines?|constraints?|guardrails?)",fi=`(?:(?:all\\s+|any\\s+|the\\s+|these\\s+|those\\s+)*(?:previous|prior|preceding|earlier|above|foregoing|initial|original|system|developer)\\s+${_n}|your\\s+(?:(?:system|initial|original|previous|prior|current)\\s+)?(?:${_n}|programming|training))`,mi="(?:(?:all|any|every|the|of|and|now|please|completely|entirely|totally|immediately)\\s+){0,3}",yn="(?:\\b(?:unrestricted|unfiltered|uncensored|unbounded|unlimited|unchained|jailbroken|lawless|amoral)\\b|\\b(?:DAN|STAN|DUDE|AIM)\\b|\\bno\\s+(?:longer\\s+)?(?:restrictions?|limits?|rules?|guidelines?|filters?|boundaries|constraints?)\\b(?!\\s+(?:on|over|regarding|upon|for)\\b)|\\bwithout\\s+(?:any\\s+)?(?:restrictions?|limits?|rules?|guidelines?|filters?|constraints?|censorship)\\b|\\b(?:free|freed|released)\\s+from\\s+(?:your\\s+)?(?:restrictions?|limits?|rules?|guidelines?|guardrails?|programming|constraints?)\\b|\\b(?:can|will|are\\s+able\\s+to)\\s+(?:do|say)\\s+anything\\b|\\bignore\\s+(?:all\\s+)?(?:your\\s+)?(?:previous\\s+|prior\\s+|system\\s+)?(?:instructions?|rules?|guidelines?)\\b)",gi="(?:ignore|disregard|forget|override|overrule|bypass|obey|comply\\s+with|follow\\s+(?:only|my|these))",Ts=[{name:"override_instructions",re:new RegExp(`\\b(?:ignore|disregard|forget|discard|override|overrule|bypass|delete|erase)\\s+${mi}${fi}\\b`,"i")},{name:"forget_everything_prior",re:/\b(?:forget|ignore|disregard|erase|discard)\s+(?:about\s+|all\s+|any\s+)?(?:everything|anything)\b[\s\S]{0,24}?\b(?:above|before|previously|prior|earlier|you\s+(?:were|have\s+been)\s+(?:told|instructed|given|programmed))\b/i},{name:"persona_reassignment_jailbreak",re:new RegExp(`\\byou\\s+are\\s+now\\s+(?:(?:a|an|the)\\s+)?[\\s\\S]{0,48}?${yn}`,"i")},{name:"constraint_release",re:/\byou\s+are\s+no\s+longer\s+(?:bound|restricted|limited|constrained|obligated|governed|subject\s+to|required\s+to)\b/i},{name:"from_now_on_reassignment",re:new RegExp(`\\bfrom\\s+now\\s+on\\s*,?\\s+you\\s+(?:are|will|must|shall|have|can)\\s+(?:${gi}\\b|[\\s\\S]{0,40}?${yn})`,"i")},{name:"new_instructions_header",re:/^\s*(?:[#*>-]+\s*)?(?:new|real|actual|true|secret|hidden|override)\s+(?:system\s+)?(?:instructions?|prompts?|directives?)\s*:/im}];var Es=Object.freeze({"\u2019":"'",\u02BC:"'","\uFF07":"'","\u02B9":"'","\u2032":"'"});var q=e=>`[^.!?;\\n]{0,${e}}?`,hi=["\\bi\\s+(?:can'?t|cannot|can\\s+not|won'?t|will\\s+not)\\b","\\bi(?:'m|\\s+am)\\s+(?:not\\s+able\\s+to|unable\\s+to|not\\s+going\\s+to|not\\s+permitted\\s+to|not\\s+allowed\\s+to)\\b"].join("|"),Nn="(?:help|assist|provide|create|generate|produce|write|compose|draft|comply|fulfil|fulfill|share|disclose|reveal|perform|execute|run|send|transmit|publish|export|approve|grant|carry\\s+out|do\\s+that|do\\s+this|do\\s+so|go\\s+ahead)",Rs=Object.freeze([{id:"capability_denial",class:"strong",re:new RegExp([`(?:${hi})\\s${q(40)}\\b${Nn}\\b`,"\\b(?:that|this|it)(?:'s|\\s+is)\\s+not\\s+something\\s+i\\s+(?:can|could|am\\s+able\\s+to|'m\\s+able\\s+to)\\b",`\\b(?:falls|sits|is)\\s+outside\\s+(?:of\\s+)?(?:what|the\\s+(?:scope|range|bounds))\\b${q(40)}\\bi\\s+(?:can|am|'m)\\b`,"\\bnot\\s+something\\s+i(?:'m|\\s+am)\\s+(?:able|willing|permitted|allowed)\\s+to\\b"].join("|"),"i")},{id:"explicit_decline",class:"strong",re:new RegExp(["\\bi\\s+(?:must|have\\s+to|need\\s+to|will\\s+have\\s+to|am\\s+going\\s+to|'m\\s+going\\s+to)\\s+(?:respectfully\\s+)?decline\\b","\\bi(?:'m|\\s+am)\\s+not\\s+(?:comfortable|willing|prepared)\\b","\\bi(?:'ll|\\s+will)\\s+(?:have\\s+to\\s+)?pass\\s+on\\b","\\bi\\s+(?:must|have\\s+to)\\s+refuse\\b"].join("|"),"i")},{id:"policy_citation",class:"strong",re:new RegExp([`\\b(?:against|contrary\\s+to|prohibited\\s+by|forbidden\\s+by|in\\s+violation\\s+of|violates)\\s${q(24)}\\b(?:polic(?:y|ies)|guidelines?|terms\\s+of\\s+(?:use|service)|rules\\s+of\\s+engagement|code\\s+of\\s+conduct)\\b`,`\\b(?:my|our|the|company|organi[sz]ation'?s?)\\s+(?:polic(?:y|ies)|guidelines?)\\s${q(24)}\\b(?:do(?:es)?\\s+not\\s+(?:allow|permit)|prohibit|forbid|prevent)\\b`,`\\bnot\\s+(?:permitted|allowed|authori[sz]ed)\\s+(?:under|by)\\s${q(24)}\\b(?:polic(?:y|ies)|guidelines?)\\b`].join("|"),"i")},{id:"guardrail_selfreference",class:"strong",re:new RegExp(["\\bi(?:'ve|\\s+have)\\s+been\\s+(?:instructed|configured|told|trained)\\s+not\\s+to\\b","\\bi(?:'m|\\s+am)\\s+(?:designed|configured|programmed|built|set\\s+up)\\s+not\\s+to\\b",`\\bmy\\s+(?:safety\\s+)?(?:instructions|configuration|guardrails?|constraints|training)\\s${q(24)}\\b(?:prevent|prohibit|forbid|do(?:es)?\\s+not\\s+(?:allow|permit)|preclude)\\b`,"\\b(?:outside|beyond)\\s+(?:my|the)\\s+(?:permitted|authori[sz]ed|configured|approved)\\s+(?:scope|remit|capabilities|actions|operations)\\b"].join("|"),"i")},{id:"ethical_objection",class:"strong",re:new RegExp(["\\b(?:that|this|doing\\s+(?:so|that)|what\\s+you(?:'re|\\s+are)\\s+asking|the\\s+request|such\\s+a\\s+request)\\s+(?:would\\s+be|is|are)\\s+(?:clearly\\s+|both\\s+|potentially\\s+)?(?:illegal|unethical|unlawful|harmful|fraudulent)\\b","\\bi\\s+(?:do\\s+not|don'?t)\\s+condone\\b","\\b(?:goes|would\\s+go|runs)\\s+against\\s+my\\s+(?:principles|values|ethics)\\b","\\bi\\s+(?:can'?t|cannot|won'?t)\\s+in\\s+good\\s+conscience\\b"].join("|"),"i")},{id:"apology_marker",class:"weak",re:new RegExp("\\b(?:i(?:'m|\\s+am)\\s+(?:really\\s+|very\\s+|terribly\\s+|so\\s+)?sorry|i\\s+apologi[sz]e|my\\s+apologies)\\b","i")}]),Cs=Object.freeze([/```/,/\b(?:here(?:'s|\s+is|\s+are)|below\s+(?:is|are|you(?:'ll|\s+will)\s+find)|the\s+following\s+(?:is|are))\b/i,new RegExp(`\\b(?:but|however|instead|although|that\\s+said)\\b${q(60)}\\b(?:i\\s+(?:can|could)(?!'t)\\s${q(30)}\\b${Nn}\\b|i(?:'d|\\s+would)\\s+be\\s+happy\\s+to\\b|i(?:'m|\\s+am)\\s+able\\s+to\\b)`,"i"),/\bwhat\s+i\s+can\s+do\s+(?:instead|is|for\s+you)\b/i]);var ve=e=>`[^.!?;\\n]{0,${e}}?`,xs=Object.freeze([{id:"vulnerability_scanning",objectPatterns:[/\b(?:vulnerability|vuln|security)\s+(?:scan|scans|scanning|assessment|audit|test|testing)\b/i,/\bpen(?:etration)?[\s-]?test(?:ing)?\b/i,/\bport\s+scan(?:ning)?\b/i,/\b(?:exploit|nmap|metasploit|nessus|burp\s+suite)\b/i,/\bCVE-\d{4}-\d{4,7}\b/i],purposeFunctions:["it_security","engineering"],purposePatterns:[/\b(?:security|vulnerability|incident\s+respon\w{0,4}|threat|soc|red\s+team|phishing|malware)\b/i]},{id:"credential_access",objectPatterns:[/\b(?:credential|password|passphrase|api\s+key|access\s+key|secret|token|private\s+key|ssh\s+key)s?\b/i,/\b(?:vault|secrets?\s+manager|keychain|keystore)\b/i,/\bservice\s+account\s+key\b/i],purposeFunctions:["it_security","engineering"],purposePatterns:[/\b(?:security|identity|iam|credential|secrets?\s+manage\w{0,4}|vault|platform|devops)\b/i]},{id:"financial_transaction",objectPatterns:[/\b(?:wire\s+transfer|bank\s+transfer|payout|disbursement|chargeback)\b/i,new RegExp(`\\b(?:approve|issue|initiate|process|release)\\s${ve(20)}\\b(?:payment|refund|invoice|transfer|purchase\\s+order)s?\\b`,"i"),new RegExp(`\\b(?:move|transfer)\\s${ve(20)}\\b(?:funds|money)\\b`,"i")],purposeFunctions:["finance_accounting","procurement"],purposePatterns:[/\b(?:finance|financial|accounting|invoice|invoicing|payment|payments|billing|refund|refunds|treasury|procurement|spend|purchasing|fraud|kyc)\b/i]},{id:"personnel_data",objectPatterns:[/\b(?:employee|personnel|payroll|hr|staff)\s+(?:record|records|data|file|files|information|details)\b/i,/\b(?:salary|salaries|compensation|performance\s+review|termination\s+letter)s?\b/i,/\b(?:home\s+address|social\s+security\s+number|national\s+insurance\s+number)e?s?\b/i],purposeFunctions:["hr","privacy_compliance"],purposePatterns:[/\b(?:hr|human\s+resources|people\s+ops|payroll|benefits|recruit\w{0,4}|onboarding|privacy|dsar|consent)\b/i]},{id:"regulated_advice",objectPatterns:[/\b(?:legal|medical|tax|investment|financial)\s+advice\b/i,/\bpractis\w{0,3}\s+law\b/i,/\b(?:diagnose|diagnosis|prescribe|prescription)\b/i,/\b(?:binding|enforceable)\s+(?:opinion|interpretation)\b/i],purposeFunctions:["legal","privacy_compliance"],purposePatterns:[/\b(?:legal|compliance|counsel|contract|contracts|litigation|nda|privacy|regulator\w{0,2}|audit\w{0,3})\b/i]},{id:"data_export",objectPatterns:[new RegExp(`\\b(?:export|download|dump|extract|exfiltrat\\w{0,3}|bulk\\s+copy)\\b\\s${ve(30)}\\b(?:data|database|dataset|records?|table|tables|customer\\s+list|contact\\s+list|report)\\b`,"i"),/\b(?:full|entire|whole)\s+(?:database|dataset|customer\s+table)\b/i],purposeFunctions:["operations","engineering","privacy_compliance"],purposePatterns:[/\b(?:data\s+(?:pipeline|engineering|platform)|etl|export|reporting|analytics|operations|document\s+extract\w{0,3}|forecast\w{0,3})\b/i]},{id:"code_execution",objectPatterns:[new RegExp(`\\b(?:run|execute|invoke)\\s${ve(24)}\\b(?:script|scripts|command|commands|shell|code|binary|query|migration)\\b`,"i"),/\b(?:shell|root|sudo|admin)\s+(?:access|command|session)\b/i,/\bagainst\s+(?:the\s+)?production\s+(?:system|server|database|environment)s?\b/i],purposeFunctions:["engineering","it_security"],purposePatterns:[/\b(?:engineering|developer|devops|platform|release|deploy\w{0,4}|build|pipeline|sandbox|test\s+data|change\s+window)\b/i]},{id:"external_communication",objectPatterns:[new RegExp(`\\b(?:send|post|publish|email|tweet|message|broadcast)\\b\\s${ve(30)}\\b(?:external|customer|customers|public|press|social\\s+media|third[\\s-]party|prospect|prospects)\\b`,"i"),/\b(?:cold\s+outreach|marketing\s+blast|phishing\s+email|press\s+release)\b/i],purposeFunctions:["marketing","sales","customer_support"],purposePatterns:[/\b(?:marketing|campaign|outreach|email\s+assistant|support|customer|sales|lead|leads|communication|communications)\b/i]}]);var dt="[REDACTED]",te="\u2022",je=e=>/[A-Za-z0-9]/.test(e);function Ln(e,t,n,r){let o=Array.from(e),i=o.length,a=Math.max(0,Math.floor(t)||0),s=Math.max(0,Math.floor(n)||0),l=r.length>0?r:te,c=a+s>=i;return o.map((u,d)=>!c&&(d<a||d>=i-s)?u:je(u)?l:u).join("")}function _i(e,t){let n=e.indexOf("@");if(n<=0||n>=e.length-1)return Ln(e,0,0,t);let r=e.slice(0,n),o=e.slice(n),i=t.length>0?t:te;return(r.length<=1?i:r[0]+Array.from(r.slice(1)).map(a=>je(a)?i:a).join(""))+o}function yi(e,t,n){let r=n.length>0?n:te,o=new Array(e.length).fill(!1);if(typeof t=="string"&&t.length>0)try{let c=new RegExp(t,"g"),u;for(;(u=c.exec(e))!==null;){if(u[0].length===0){c.lastIndex++;continue}for(let d=u.index;d<u.index+u[0].length;d++)o[d]=!0}}catch{}let i=!1,a=!0;for(let c=0;c<e.length;c++)if(je(e[c])&&(i=!0,!o[c])){a=!1;break}let s=i&&a,l="";for(let c=0;c<e.length;c++){let u=e[c];!s&&o[c]||!je(u)?l+=u:l+=r}return l}function Dn(e,t){let n=t.mode??"full";return n==="partial"?Ln(e,t.keepFirst??0,t.keepLast??0,t.maskChar??te):n==="email"?_i(e,t.maskChar??te):n==="custom"?yi(e,t.keepPattern,t.maskChar??te):t.replacement??dt}function bi(e,t){return typeof e=="string"?Dn(e,t):t.replacement??dt}function Fn(e){let t=[],n=e.replacement??dt;for(let r of e.patterns??[])typeof r!="string"||r.length===0||t.push({source:r,replacer:()=>n});for(let r of e.directives??[]){let{pattern:o}=r;typeof o!="string"||o.length===0||t.push({source:o,replacer:i=>Dn(i,r)})}return t}function $n(e,t){let n=e;for(let{source:r,replacer:o}of t){let i;try{i=new RegExp(r,"g")}catch(a){let s=a instanceof Error?a.message:String(a);throw new Error(`[visiq-redact] Invalid redaction pattern "${r}": ${s}`)}n=n.replace(i,a=>o(a))}return n}function N(e,t){return e==null?e:typeof e=="string"?vi(e,t):typeof e=="object"?wi(e,t):e}function vi(e,t){if(typeof e!="string")return e;let n=Fn(t);return n.length===0?e:$n(e,n)}function wi(e,t){let n=new Map;for(let s of t.fields??[])typeof s=="string"&&s.length>0&&n.set(s,{field:s,mode:"full",replacement:t.replacement});for(let s of t.directives??[])typeof s.field=="string"&&s.field.length>0&&n.set(s.field,s);let r=Fn(t),o=n.size>0,i=r.length>0,a=s=>{if(s==null)return s;if(Array.isArray(s))return s.map(l=>a(l));if(typeof s=="object"){let l=s,c=Object.create(Object.getPrototypeOf(l));for(let u of Object.keys(l)){let d=o?n.get(u):void 0;if(d){c[u]=bi(l[u],d);continue}c[u]=a(l[u])}return c}return typeof s=="string"&&i?$n(s,r):s};return a(e)}var Pn=e=>e!==void 0&&e.length>5120?e.slice(0,5120):e;function ki(e){let t={...e};return t.content?.text!==void 0&&(t.content={...t.content,text:Pn(t.content.text)}),t.spawn?.prompt!==void 0&&(t.spawn={...t.spawn,prompt:Pn(t.spawn.prompt)}),t}function Ai(e,t=process.env){if(typeof e=="number"&&Number.isFinite(e)&&e>0)return e;let n=t.ALLOW_TIMEOUT_MS;if(n!==void 0){let r=Number.parseInt(n,10);if(Number.isFinite(r)&&r>0)return r}return 5e3}var Ii=1440*60*1e3,Si="VISIQ_BUNDLE_GRACE_TTL_MS",Ti="VISIQ_BUNDLE_CACHE_DISABLED",Ei="VISIQ_CACHE_DIR",Ri=qe.object({graceTtlMs:qe.number().int().nonnegative().optional(),disabled:qe.boolean().optional(),cacheDir:qe.string().min(1).optional()}).strict();function Ci(e){return e==null?{}:Ri.parse(e)}function xi(e,t=process.env){if(typeof e=="number"&&Number.isInteger(e)&&e>=0)return e;let n=t[Si];if(n!==void 0){let r=Number(n);if(Number.isInteger(r)&&r>=0)return r}return Ii}function Oi(e,t=process.env){if(typeof e=="boolean")return e;let n=(t[Ti]??"").trim().toLowerCase();return n==="1"||n==="true"||n==="yes"}var jn;function Mi(){if(jn!==void 0)return jn;try{return typeof process<"u"&&!!process.versions&&!!process.versions.node}catch{return!1}}function Ni(e){return JSON.stringify(ft(e))}function ft(e){if(Array.isArray(e))return e.map(ft);if(e!==null&&typeof e=="object"){let t=e,n={};for(let r of Object.keys(t).sort())n[r]=ft(t[r]);return n}return e}function Li(e,t,n){let r=n-e.fetchedAt;return r<0?!1:r<=t}function Di(e){if(e!==null&&typeof e=="object"&&typeof e.fetchedAt=="number"&&typeof e.contentHash=="string"&&"body"in e){let t=e;return{fetchedAt:t.fetchedAt,version:typeof t.version=="string"?t.version:null,contentHash:t.contentHash,body:t.body}}return null}async function zn(){if(!Mi())return null;try{let[e,t,n,r]=await Promise.all([import("node:fs/promises"),import("node:path"),import("node:os"),import("node:crypto")]);return{fs:e,path:t,os:n,crypto:r}}catch{return null}}function Gn(e,t){return e.createHash("sha256").update(Ni(t)).digest("hex")}function Fi(e,t){let n=t.cacheDir?.trim();if(n)return n;let r=process.env[Ei]?.trim();if(r)return r;let o=process.env.XDG_CACHE_HOME?.trim();if(o)return e.path.join(o,"visiq");let i="";try{i=e.os.homedir()}catch{i=""}return i?e.path.join(i,".cache","visiq"):e.path.join(e.os.tmpdir(),"visiq-cache")}function $i(e,t){return e.crypto.createHash("sha256").update(`${t.endpoint}\0${t.agentId}\0${t.apiKey}`).digest("hex")}function Hn(e,t,n){return e.path.join(Fi(e,n),"bundles",`${$i(e,t)}.json`)}async function Pi(e,t,n,r={}){let o=await zn();if(o)try{let i=Hn(o,e,r),a=o.path.dirname(i);await o.fs.mkdir(a,{recursive:!0,mode:448});let s={fetchedAt:r.now??Date.now(),version:n,contentHash:Gn(o.crypto,t),body:t},l=`${i}.tmp-${process.pid}-${o.crypto.randomBytes(6).toString("hex")}`;await o.fs.writeFile(l,JSON.stringify(s),{mode:384});try{await o.fs.rename(l,i)}catch(c){throw await o.fs.rm(l,{force:!0}).catch(()=>{}),c}}catch{}}async function ji(e,t={}){let n=await zn();if(!n)return null;try{let r=await n.fs.readFile(Hn(n,e,t),"utf-8"),o=Di(JSON.parse(r));return!o||Gn(n.crypto,o.body)!==o.contentHash?null:o}catch{return null}}var we;async function Ui(){if(we!==void 0)return we;try{let e=await import("@visiq/core-wasm"),t=e.evaluate??e.default?.evaluate;we=typeof t=="function"?t:null}catch{we=null}return we}function Bi(e){let t=[];for(let n of e){if(typeof n!="object"||n===null)continue;let r=n,o=r.rego_source;if(typeof o!="string"||o.length===0)continue;let i;try{i=Gt(o)}catch{continue}let a=typeof r.id=="string"?r.id:"<rule>";for(let s of Ht(i))t.push(`${a}: ${s}`)}return t}var qi=5e3,Vi=1e4,Ki=25,Un=1e3,zi=5e3,Gi=100,Bn=2e3,Hi=512,Wi=1800*1e3,Qi=.7,Yi="monitor",Ji="Agent has been shut down by an operator \u2014 all actions are blocked (G001)",qn="Rules bundle requires a newer SDK wire-contract dialect than this SDK supports \u2014 refusing the bundle and blocking all actions (fail-closed, G001). Upgrade the VisIQ SDK.",Ve="open";function ke(e){if(typeof e!="string")return;let t=e.trim().toLowerCase();return t==="open"||t==="closed"?t:void 0}function Zi(e,t){return Mn({content:e,resourceMetadata:t})}var Xi=g.object({operations:g.array(g.enum(["retrieval","action","delegation"])).min(1,"at least one operation is required"),agentId:g.string().min(1,"agentId is required"),sessionId:g.string().min(1).max(255).optional(),toolName:g.string().optional(),toolArgs:g.record(g.unknown()).optional(),targetResource:g.string().optional(),resourceType:g.string().optional(),resourceMetadata:g.record(g.unknown()).optional(),normalized:g.record(g.unknown()).optional(),query:g.string().optional(),contentPreview:g.string().optional(),telemetry:g.record(g.unknown()).optional(),context:g.record(g.unknown()).optional(),mcpServer:g.string().min(1).max(255).optional()}),ea=g.object({version:g.string().min(1),dialect_version:g.number().int().optional(),min_dialect:g.number().int().optional(),shutdown:g.boolean().optional(),agent_mode:g.enum(["enforce","monitor","off"]).optional(),cognition_capture:g.boolean().optional(),agent_mode_by_operation:g.object({action:g.string().optional(),retrieval:g.string().optional(),delegation:g.string().optional()}).partial().optional(),agent_attributes:g.object({trust_tier:g.string().nullable().optional(),categories:g.array(g.string()).optional(),business_function:g.string().nullable().optional(),business_functions:g.array(g.string()).nullable().optional(),blast_radius_tier:g.string().nullable().optional(),no_coverage:g.string().nullable().optional(),fail_mode:g.string().nullable().optional()}).optional(),rules:g.array(g.record(g.unknown())),action_schemas:g.array(g.object({id:g.string(),plane:g.string().optional(),field_mappings:g.array(g.record(g.unknown())).optional(),derived_fields:g.array(g.record(g.unknown())).optional(),action_class:g.string().nullable().optional(),action_class_confidence:g.number().optional()})).optional(),no_coverage:g.object({no_coverage_defaults:g.record(g.string()),autopilot_enabled:g.boolean(),enduser_hitl_enabled:g.boolean(),hitl_timeout_seconds:g.number().optional()}).optional()});function ta(e){let t=e.trust_tier??null,n=[];Array.isArray(e.business_functions)&&e.business_functions.length>0?n=e.business_functions:typeof e.business_function=="string"&&e.business_function!==""&&(n=[e.business_function]);let r=rn(on(n));return{trust_tier:Qt(t)?t:null,categories:Jt(e.categories??[]),business_functions:r,business_function:r[0]??null,blast_radius_tier:typeof e.blast_radius_tier=="string"&&an(e.blast_radius_tier)?e.blast_radius_tier:null}}function na(e){if(!e)return null;let t={};for(let n of["action","retrieval","delegation"]){let r=e[n];(r==="enforce"||r==="monitor"||r==="off")&&(t[n]=r)}return Object.keys(t).length>0?t:null}function ra(e){return e==="permit"?"permit":e==="mask"||e==="redact"?"mask":e==="approval_required"||e==="escalate"?"approval_required":"deny"}var mt=new Set,Vn=!1;async function Kn(e){let t=[];for(let n of mt){if(n.pendingTelemetryCount()>0&&!n.hasBackend()){console.warn(`[UnifiedRuntime] exiting with ${n.pendingTelemetryCount()} un-sent decision(s) and no backend \u2014 telemetry lost.`);continue}let r=n.flush();e&&t.push(r)}t.length>0&&await Promise.allSettled(t)}function oa(){if(!Vn&&!(typeof process>"u"||typeof process.once!="function")){Vn=!0,process.once("beforeExit",()=>{Kn(!1)});for(let e of["SIGINT","SIGTERM"])process.once(e,()=>{(async()=>{try{await Kn(!0)}finally{process.kill(process.pid,e)}})()})}}var Wn=class{client;originalFetch;resolvedApiKey;resolvedEndpoint;resolvedAgentId;harnessKind;sdkVersion;sdkDialect;rules=[];agentAttributes=null;agentNoCoverage=null;sessions=new Map;noCoverage=null;bundleVersion=null;bundleEtag=null;bundleLoaded=!1;bundleFetchInProgress=!1;initialBundlePromise=null;refreshTimer=null;cacheIdentity;bundleCacheDisabled;bundleGraceTtlMs;bundleCacheDirOverride;diskFallbackServed=!1;agentMode=Yi;agentModeByOperation=null;rawBundle=null;agentModeConfirmed=!1;operatorShutdown=!1;bundleApplyFailed=!1;dialectRefused=!1;failMode=ke(typeof process<"u"?process.env?.VISIQ_FAIL_MODE:void 0)??Ve;governedFailMode=null;telemetryBuffer=[];telemetryTimer=null;cognitionBuffer=[];cognitionTimer=null;cognitionEnabled=process.env.VISIQ_COGNITION_CAPTURE==="1";envRegistered=!1;registerPromise=null;lastToolSurfaceSig=null;lastCloneCaptureSig=null;toolDescriptions=new Map;constructor(e,t,n,r,o,i,a,s){let l=e??process.env.VISIQ_API_KEY??process.env.ALLOW_API_KEY??process.env.VISIQ_ALLOW_API_KEY,c=t??process.env.VISIQ_ENDPOINT??process.env.ALLOW_ENDPOINT,u=n??process.env.VISIQ_AGENT_ID??process.env.ALLOW_AGENT_ID??"";this.resolvedApiKey=l,this.resolvedEndpoint=c,this.resolvedAgentId=u,this.harnessKind=r,this.sdkVersion=i,this.sdkDialect=a,this.originalFetch=globalThis.fetch.bind(globalThis);let d=Ci(s);if(this.bundleCacheDisabled=Oi(d.disabled),this.bundleGraceTtlMs=xi(d.graceTtlMs),this.bundleCacheDirOverride=d.cacheDir,this.cacheIdentity=l&&c&&!this.bundleCacheDisabled?{endpoint:c,agentId:u,apiKey:l}:null,l&&c){let _={apiKey:l,agentId:u,endpoint:c,mode:"enforce",timeoutMs:Ai(o),hitlTimeoutMs:12e4,failBehavior:"closed",...r?{harnessKind:r}:{},...i!==void 0?{sdkVersion:i}:{},...a!==void 0?{sdkDialect:a}:{}};this.client=new ot(_,this.originalFetch),this.initialBundlePromise=this.initialBundleLoad(),this.refreshTimer=setInterval(()=>{this.fetchBundleBackground()},qi),pt(this.refreshTimer),this.telemetryTimer=setInterval(()=>{this.flushTelemetry()},Vi),pt(this.telemetryTimer),this.cognitionTimer=setInterval(()=>{this.flushCognition()},zi),pt(this.cognitionTimer),mt.add(this),oa()}else this.client=null}async evaluate(e){let t=Xi.parse(e),n=Date.now();if(this.operatorShutdown){let d=this.denyAll(t,Ji);return this.applyAgentMode(d,"enforce",t,n)}if(this.dialectRefused){if(this.failMode==="open")return this.failOpen(t,qn,n);let d=this.denyAll(t,qn);return this.applyAgentMode(d,"enforce",t,n)}if(t.operations.every(d=>this.modeFor(d)==="off"))return this.offDecision(t);if(!this.bundleLoaded){let d;if(this.agentModeConfirmed?d=this.agentMode:this.bundleApplyFailed?d="enforce":d="monitor",d==="enforce"&&this.failMode==="open")return this.failOpen(t,"no unified bundle loaded and no local rules",n);let _=this.denyAll(t,"No unified bundle loaded and no local rules \u2014 fail-closed (G001)");return this.applyAgentMode(_,d,t,n)}let r=this.readSession(t.sessionId),o=await Ui();if(!o||!this.rawBundle){if(this.failMode==="open")return this.failOpen(t,"governance core (@visiq/core-wasm) unavailable",n);throw new Error("governance core (@visiq/core-wasm) unavailable \u2014 failing closed (G001)")}let i=t.operations.includes("action")||t.operations.includes("delegation")?Zt(t.normalized??{},{targetApp:t.targetResource??t.toolName??""}):t.normalized,a=this.buildActionSchemaEvent(t),s=t.mcpServer?{...i??{},mcp_server:t.mcpServer}:i,l={...t,normalized:s,session:r,at:Date.now(),action_schema_id:a.id,action_schema_raw:a.canonical},c={...this.rawBundle,agent_mode:this.agentMode,...this.agentModeByOperation?{agent_mode_by_operation:this.agentModeByOperation}:{}},u;try{u=o(l,c)}catch(d){if(this.failMode==="open")return this.failOpen(t,`governance core evaluation threw: ${d instanceof Error?d.message:String(d)}`,n);throw d}return this.foldSession(t,u.enforced?u.decision:"permit"),u.enforced&&u.action.decision==="approval_required"&&await this.registerHitl(t,u),this.bufferTelemetry(t,u,Date.now()-n,u.enforced),u}modeFor(e){return this.agentModeByOperation?.[e]??this.agentMode}readSession(e){if(!e)return be;let t=this.sessions.get(e);return t?Date.now()-t.touchedAt>Wi?(this.sessions.delete(e),be):t.state:be}foldActionClass(e){let t=e.normalized?.action_class;if(typeof t=="string"&&t.length>0)return t;let n=this.rawBundle?.action_schemas;if(!Array.isArray(n))return;let{id:r}=this.buildActionSchemaEvent(e),o=n.find(s=>s?.id===r);if(!o)return;let i=o.action_class,a=typeof o.action_class_confidence=="number"?o.action_class_confidence:0;if(typeof i=="string"&&i.length>0&&a>=Qi)return i}foldSession(e,t){let{sessionId:n}=e;if(!n)return;let r=this.readSession(n),o=e.resourceMetadata??{},i=e.operations.includes("retrieval"),a=e.operations.includes("action")||e.operations.includes("delegation"),s=en(r===be?Xt():r,{data_categories:i&&Array.isArray(o.data_categories)?o.data_categories:void 0,classification:i?o.classification:void 0,taint:i?Zi(e.contentPreview,o):void 0,action_class:a?this.foldActionClass(e):void 0,target_app:a?e.targetResource??e.toolName:void 0,decision:t});if(this.sessions.delete(n),this.sessions.set(n,{state:s,touchedAt:Date.now()}),this.sessions.size>Hi){let l=this.sessions.keys().next().value;l!==void 0&&this.sessions.delete(l)}}applyAgentMode(e,t,n,r){let o=Date.now()-r;if(t==="enforce"){let a={...e,enforced:!0,agentMode:"enforce"};return this.bufferTelemetry(n,a,o,!0),a}let i={...e,allowed:!0,enforced:!1,agentMode:"monitor"};return this.bufferTelemetry(n,i,o,!1),i}setFailMode(e){this.failMode=e}getFailMode(){return this.failMode}getGovernedFailMode(){return this.governedFailMode}failOpen(e,t,n){let r=`fail-open: ${t} \u2014 proceeding UNGOVERNED (set VISIQ_FAIL_MODE=closed to block instead)`;console.error(`[VisIQ] FAIL-OPEN: ${t} \u2014 proceeding UNGOVERNED. Set VISIQ_FAIL_MODE=closed to block instead.`);let o=e.operations.includes("action")||e.operations.includes("delegation"),i=e.operations.includes("retrieval"),a={decision:"permit",allowed:!0,reason:r,ruleId:null,ruleCode:null,enforced:!1,agentMode:this.agentMode,action:o?{decision:"permit",allowed:!0}:{decision:null,allowed:!0},retrieval:i?{action:"allow"}:{action:null},failOpen:!0};return this.bufferTelemetry(e,a,Date.now()-n,!1,!0),a}reportFailOpen(e,t){try{let n={operations:["action"],agentId:this.resolvedAgentId,...t?.toolName?{toolName:t.toolName}:{},...t?.sessionId?{sessionId:t.sessionId}:{}},r={decision:"permit",allowed:!0,reason:`fail-open: ${e} \u2014 proceeding UNGOVERNED (set VISIQ_FAIL_MODE=closed to block instead)`,ruleId:null,ruleCode:null,enforced:!1,agentMode:this.agentMode,action:{decision:"permit",allowed:!0},retrieval:{action:null},failOpen:!0};this.bufferTelemetry(n,r,0,!1,!0)}catch{}}offDecision(e){let t=e.operations.includes("action")||e.operations.includes("delegation"),n=e.operations.includes("retrieval");return{decision:"permit",allowed:!0,reason:"agent_mode=off \u2014 evaluation bypassed",ruleId:null,ruleCode:null,enforced:!1,agentMode:"off",action:t?{decision:"permit",allowed:!0}:{decision:null,allowed:!0},retrieval:n?{action:"allow"}:{action:null}}}denyAll(e,t){let n=e.operations.includes("action")||e.operations.includes("delegation"),r=e.operations.includes("retrieval");return{decision:"deny",allowed:!1,reason:t,ruleId:null,ruleCode:null,enforced:!0,agentMode:"enforce",action:n?{decision:"deny",allowed:!1}:{decision:null,allowed:!0},retrieval:r?{action:"deny"}:{action:null}}}async registerHitl(e,t){if(this.client)try{let n={agent_id:e.agentId,target_app:e.targetResource??e.toolName??"",action:e.toolName??"",context:e.toolName?{[e.toolName]:e.toolArgs??{}}:{},action_schema_id:this.buildActionSchemaEvent(e).id,...e.sessionId?{session_id:e.sessionId}:{},...e.telemetry?{telemetry:e.telemetry}:{}},r=await this.client.evaluate(n);r.decision_id&&(t.action.decisionId=r.decision_id)}catch(n){console.warn("[UNIFIED] HITL registration failed \u2014 staying fail-closed (G001):",n)}}applyBundle(e){this.bundleApplyFailed=!0;let t=ea.parse(e);this.bundleApplyFailed=!1;let n=this.sdkDialect??1;if(t.min_dialect!==void 0&&t.min_dialect>n){this.dialectRefused=!0,this.bundleApplyFailed=!0,console.warn(`[UNIFIED] rules bundle requires dialect ${t.min_dialect} but this SDK speaks ${n} \u2014 refusing the bundle and failing closed (deny-all, G001). Upgrade the VisIQ SDK.`);return}let r=Bi(t.rules);if(r.length>0){this.dialectRefused=!0,this.bundleApplyFailed=!0,console.warn(`[UNIFIED] rules bundle contains rego_source using a builtin the engine cannot evaluate (would silently never match \u2192 fail open): ${r.join("; ")}. Refusing the bundle and failing closed (G001). Recompile the rule without case-folding wrappers like upper()/lower().`);return}this.dialectRefused=!1,!(this.bundleLoaded&&t.version===this.bundleVersion)&&(this.rules=t.rules.map(o=>cn(o)).filter(o=>o!==null),this.agentAttributes=t.agent_attributes?ta(t.agent_attributes):null,this.agentNoCoverage=sn(t.agent_attributes?.no_coverage),this.governedFailMode=ke(t.agent_attributes?.fail_mode)??null,this.bundleVersion=t.version,this.bundleLoaded=!0,this.noCoverage=t.no_coverage?{no_coverage_defaults:t.no_coverage.no_coverage_defaults,autopilot_enabled:t.no_coverage.autopilot_enabled,enduser_hitl_enabled:t.no_coverage.enduser_hitl_enabled}:null,t.agent_mode!==void 0&&(this.agentMode=t.agent_mode,this.agentModeConfirmed=!0),this.agentModeByOperation=na(t.agent_mode_by_operation),process.env.VISIQ_COGNITION_CAPTURE==="1"?this.cognitionEnabled=!0:typeof t.cognition_capture=="boolean"&&(this.cognitionEnabled=t.cognition_capture),this.operatorShutdown=t.shutdown===!0,this.rawBundle=e)}async awaitBundleReady(e=5e3){if(!this.initialBundlePromise||this.bundleLoaded)return;let t,n=new Promise(r=>{t=setTimeout(r,e)});try{await Promise.race([this.initialBundlePromise,n])}catch{}finally{t&&clearTimeout(t)}}async fetchBundleBackground(){if(!(this.bundleFetchInProgress||!this.resolvedEndpoint||!this.resolvedApiKey)){this.bundleFetchInProgress=!0;try{let e=this.resolvedAgentId?`?agent_id=${encodeURIComponent(this.resolvedAgentId)}`:"",t={Authorization:`Bearer ${this.resolvedApiKey}`,Accept:"application/json",...H(this.sdkVersion,this.sdkDialect)};this.bundleEtag&&(t["If-None-Match"]=this.bundleEtag);let n=await this.originalFetch(`${this.resolvedEndpoint}/rules/bundle${e}`,{method:"GET",headers:t});if(n.status===304)return;if(!n.ok)throw new Error(`unified bundle fetch failed: HTTP ${n.status}`);let r=n.headers.get("ETag"),o=await n.json();this.applyBundle(o);let i=this.bundleLoaded&&!this.dialectRefused&&!this.bundleApplyFailed;r&&i?this.bundleEtag=r:i||(this.bundleEtag=null),i&&await this.persistBundleToDisk(o)}catch(e){this.bundleLoaded?console.warn("[UNIFIED] Bundle refresh failed (using cached rules):",e):console.warn("[UNIFIED] Initial bundle fetch failed (fail-closed until loaded):",e)}finally{this.bundleFetchInProgress=!1}}}async initialBundleLoad(){await this.fetchBundleBackground(),this.bundleLoaded||await this.tryLoadFromDiskCache()}async tryLoadFromDiskCache(){if(this.bundleLoaded||this.bundleCacheDisabled||!this.cacheIdentity||this.dialectRefused)return;let e;try{e=await ji(this.cacheIdentity,{...this.bundleCacheDirOverride?{cacheDir:this.bundleCacheDirOverride}:{}})}catch{return}if(!e)return;let t=Date.now();if(Li(e,this.bundleGraceTtlMs,t)){try{this.applyBundle(e.body)}catch{return}if(this.bundleLoaded&&!this.dialectRefused&&!this.diskFallbackServed){this.diskFallbackServed=!0;let n=Math.max(0,Math.round((t-e.fetchedAt)/1e3)),r=Math.round(this.bundleGraceTtlMs/1e3);console.warn(`[UnifiedRuntime] serving cached rules bundle (age ${n}s) \u2014 control plane unreachable on cold start; will keep retrying and fail closed once the cache exceeds the ${r}s grace window.`)}}}async persistBundleToDisk(e){this.bundleCacheDisabled||!this.cacheIdentity||await Pi(this.cacheIdentity,e,this.bundleVersion,{...this.bundleCacheDirOverride?{cacheDir:this.bundleCacheDirOverride}:{}})}hasRules(){return this.bundleLoaded&&this.rules.length>0}hasClient(){return this.client!==null}getEndpoint(){return this.resolvedEndpoint}getApiKey(){return this.resolvedApiKey}getBundleVersion(){return this.bundleVersion}isBundleLoaded(){return this.bundleLoaded}getAgentMode(){return this.agentMode}getAgentAttributes(){return this.agentAttributes}getSessionState(e){return this.readSession(e)}registerEnvironment(e){!this.client||this.envRegistered||!this.resolvedAgentId||(this.envRegistered=!0,this.registerPromise=this.client.registerEnvironment(e))}registerHostEnvironment(e,t){this.registerEnvironment({...De(),...e?{agent_type:e}:{},...t?.model?{model:t.model}:{},...t?.systemPrompt?{systemPrompt:t.systemPrompt}:{},...t?.toolSchemas&&t.toolSchemas.length>0?{toolSchemas:t.toolSchemas}:{}})}reportToolSurface(e){if(!this.client||!this.resolvedAgentId||e.length===0)return;let t=JSON.stringify([...e].map(n=>({n:n.name,d:n.description??"",s:n.input_schema??null})).sort((n,r)=>n.n.localeCompare(r.n)));for(let n of e)n.description&&this.toolDescriptions.set(n.name,n.description);t!==this.lastToolSurfaceSig&&(this.lastToolSurfaceSig=t,this.client.reportToolSurface(e))}captureCloneMetadata(e){if(!this.client||!this.resolvedAgentId||!(e.model||e.systemPrompt||(e.toolSchemas?.length??0)>0))return;let t=JSON.stringify({m:e.model??"",s:e.systemPrompt??"",t:e.toolSchemas??[]});t!==this.lastCloneCaptureSig&&(this.lastCloneCaptureSig=t,this.client.registerEnvironment({...De(),...e.agentType?{agent_type:e.agentType}:{},...e.model?{model:e.model}:{},...e.systemPrompt?{systemPrompt:e.systemPrompt}:{},...e.toolSchemas&&e.toolSchemas.length>0?{toolSchemas:e.toolSchemas}:{}}))}buildActionSchemaEvent(e){let t=e.toolName?this.toolDescriptions.get(e.toolName):void 0,n={agent_id:e.agentId,operations:e.operations,...e.toolName?{tool_name:e.toolName}:{},...e.targetResource?{target_resource:e.targetResource}:{},...e.resourceType?{resource_type:e.resourceType}:{},...e.toolArgs?{tool_args:e.toolArgs}:{},...t?{tool_description:t}:{}},r=ln(n),o={...n};return e.toolArgs&&(o.tool_args=An(e.toolArgs)),{canonical:n,id:r,rawEventForWire:o}}bufferTelemetry(e,t,n,r,o=!1){let i=this.buildActionSchemaEvent(e);this.telemetryBuffer.push({decision_id:crypto.randomUUID(),agent_id:e.agentId,target_app:e.targetResource??e.toolName??"",action:e.toolName??e.operations.join("+"),...e.sessionId?{session_id:e.sessionId}:{},decision:r?ra(t.decision):"permit",reason:t.reason,evaluated_at:new Date().toISOString(),rule_id:t.ruleId,rule_code:t.ruleCode,enforced:r,agent_mode:this.agentMode,latency_ms:n,evaluation_mode:"local",raw_event:i.rawEventForWire,action_schema_id:i.id,...this.harnessKind||e.context||o?{context:{...this.harnessKind?{[$t]:this.harnessKind}:{},...e.context??{},...o?{fail_open:!0}:{}}}:{}}),this.enforceTelemetryCap(),this.telemetryBuffer.length>=Ki&&this.flushTelemetry()}pendingTelemetryCount(){return this.telemetryBuffer.length}hasBackend(){return this.client!==null}async flushTelemetry(){if(this.telemetryBuffer.length===0||!this.client)return;let e=this.telemetryBuffer.splice(0);try{await this.client.sendTelemetry(e)}catch(t){console.error("[UnifiedRuntime] telemetry flush failed (non-fatal):",t)}}enforceTelemetryCap(){let e=this.telemetryBuffer.length-Un;e>0&&(this.telemetryBuffer.splice(0,e),console.warn(`[UnifiedRuntime] telemetry buffer full \u2014 dropped ${e} oldest entries (cap ${Un})`))}isCognitionEnabled(){return this.cognitionEnabled}emitCognition(e){!this.cognitionEnabled||!this.client||(this.cognitionBuffer.push(ki(e)),this.enforceCognitionCap(),this.cognitionBuffer.length>=Gi&&this.flushCognition())}async flushCognition(){if(this.cognitionBuffer.length===0||!this.client)return;let e=this.cognitionBuffer.splice(0);try{await this.client.sendCognition(void 0,e)}catch(t){console.error("[UnifiedRuntime] cognition flush failed (non-fatal):",t)}}enforceCognitionCap(){let e=this.cognitionBuffer.length-Bn;e>0&&(this.cognitionBuffer.splice(0,e),console.warn(`[UnifiedRuntime] cognition buffer full \u2014 dropped ${e} oldest beats (cap ${Bn})`))}async flush(){if(this.registerPromise)try{await this.registerPromise}catch{}await this.flushTelemetry(),await this.flushCognition()}async shutdown(){await this.flush(),this.dispose(),mt.delete(this)}dispose(){this.refreshTimer&&(clearInterval(this.refreshTimer),this.refreshTimer=null),this.telemetryTimer&&(clearInterval(this.telemetryTimer),this.telemetryTimer=null),this.cognitionTimer&&(clearInterval(this.cognitionTimer),this.cognitionTimer=null),this.flushTelemetry(),this.flushCognition()}};function pt(e){e&&typeof e=="object"&&"unref"in e&&e.unref()}function ia(e){return typeof e=="string"&&e.trim().length>0?e:void 0}function F(e,...t){for(let n of t){let r=ia(e[n]);if(r)return r}}var aa=[{framework:"openai-agents",matches:e=>/^transfer_to_.+/.test(e),extract:(e,t)=>{let n=e.replace(/^transfer_to_/,"");return{childAgentId:n,childName:n.replace(/[_-]+/g," ").trim(),kind:"teammate",task:F(t,"task","input","reason","message"),source:"structural"}}},{framework:"voltagent",matches:e=>e==="delegate_task",extract:(e,t)=>{let n=F(t,"targetAgent","agent","subAgent","agentName","name");return n?{childAgentId:n,childName:n,kind:"subagent",task:F(t,"task","message","input"),description:F(t,"purpose"),source:"structural"}:null}},{framework:"crewai",matches:e=>/delegate work to (co-?worker|.+)/i.test(e),extract:(e,t)=>{let n=F(t,"coworker","agent","role");return n?{childAgentId:n,childName:n,kind:"teammate",agentType:n,task:F(t,"task","question"),description:F(t,"context"),source:"structural"}:null}},{framework:"llamaindex",matches:e=>e==="handoff"||/handoff/i.test(e),extract:(e,t)=>{let n=F(t,"to_agent","toAgent","agent_name","agentName","agent","name");return n?{childAgentId:n,childName:n,kind:"subagent",task:F(t,"reason","task","message"),source:"structural"}:null}},{framework:"generic",matches:e=>/^(delegate|hand[_-]?off|route[_-]?to|call[_-]?agent)([_-].+)?$/i.test(e),extract:(e,t)=>{let n=F(t,"agent","agentName","agentId","target","targetAgent","to","to_agent","coworker","name")??(/[_-]/.test(e)?e.replace(/^(delegate|hand[_-]?off|route[_-]?to|call[_-]?agent)[_-]/i,""):void 0);return n?{childAgentId:n,childName:n.replace(/[_-]+/g," ").trim(),kind:"subagent",task:F(t,"task","message","input","reason","prompt"),source:"heuristic"}:null}}];function Ke(e,t){if(!e)return null;let n=t??{};for(let r of aa)try{if(r.matches(e)){let o=r.extract(e,n);if(o)return o}}catch{}return null}function ze(e,t){return{delegation:{is_delegated:!0,role:"parent",parent_agent_id:t,target_agent:e.childAgentId,source:e.source,spawn:{childAgentId:e.childAgentId,childName:e.childName,kind:e.kind,...e.model?{model:e.model}:{},...e.task?{prompt:e.task}:{},...e.description?{description:e.description}:{},...e.goal?{goal:e.goal}:{},...e.agentType?{agentType:e.agentType}:{}}}}}function gt(e){if(e===null||typeof e!="object"||Array.isArray(e))return{input:e===void 0?"":String(e)};let t=e,n=Object.keys(t);return n.length===1&&n[0]==="context"&&t.context!==null&&typeof t.context=="object"?t.context:t}function Qn(e){if(typeof e=="string"){try{let t=JSON.parse(e);if(t!==null&&typeof t=="object"&&!Array.isArray(t))return t}catch{}return{input:e}}return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{input:e===void 0?"":String(e)}}function L(e){let t=[],n=[],r,o=[];for(let a of e){if(a.mode==="partial"||a.mode==="email"||a.mode==="custom"){let l={mode:a.mode};a.field&&(l.field=a.field),a.pattern&&(l.pattern=a.pattern),typeof a.keepFirst=="number"&&(l.keepFirst=a.keepFirst),typeof a.keepLast=="number"&&(l.keepLast=a.keepLast),a.maskChar&&(l.maskChar=a.maskChar),a.keepPattern&&(l.keepPattern=a.keepPattern),a.replacement!==void 0&&(l.replacement=a.replacement),o.push(l);continue}a.field&&t.push(a.field),a.pattern&&n.push(a.pattern);let{replacement:s}=a;s&&r===void 0&&(r=s)}let i={};return t.length>0&&(i.fields=t),n.length>0&&(i.patterns=n),r!==void 0&&(i.replacement=r),o.length>0&&(i.directives=o),i}var V="0.2.8";import{AsyncLocalStorage as sa}from"node:async_hooks";var R=new sa,la=5120,Yn=50;function ca(e,t){if(typeof e!="string")return"";let n=new TextEncoder,r=n.encode(e);if(r.length<=t)return e;let i=`\u2026[truncated ${Math.ceil(r.length/1024)}KB]`,a=n.encode(i).length,s=Math.max(0,t-a),l=r.subarray(0,s);return new TextDecoder("utf-8",{fatal:!1}).decode(l)+i}function K(e){if(!e)return;let t=r=>r.length<=Yn?r.slice():r.slice(r.length-Yn),n=r=>ca(r,la);return{session_id:e.session_id,llm_prompts:t(e.llm_prompts).map(n),llm_responses:t(e.llm_responses).map(n),agent_reasoning:t(e.agent_reasoning).map(n)}}var ht=12e4,Jn=2e3,Zn=3,ua=5e3;function Ae(e,t){return e==="mask"&&(t?.length??0)>0}var da=new Set(["approved","resolved"]),pa=new Set(["rejected","dismissed","expired","timeout","bypassed_disabled"]);function fa(e){return new Promise(t=>setTimeout(t,e))}function ma(e){if(typeof e!="object"||e===null)return null;let t=e,n=t.hitl_result;if(typeof n=="string"&&n.length>0)return n;let{hitl:r}=t;if(r&&typeof r=="object"){let{status:o}=r;if(typeof o=="string"&&o.length>0)return o==="pending"?null:o}return null}async function Ie(e){let{endpoint:t,apiKey:n,decisionId:r,timeoutMs:o=ht,maskFallback:i=!1,sdkVersion:a,fetchImpl:s=globalThis.fetch,sleep:l=fa,log:c=p=>console.warn(p)}=e,u=p=>i?{resolution:"mask",reason:p}:{resolution:"block",reason:p};if(!t)return u("HITL approval cannot be confirmed (no backend endpoint) \u2014 fail-closed (G001)");if(!r)return u("HITL approval cannot be confirmed (no decision id) \u2014 fail-closed (G001)");let d=`${t.replace(/\/$/,"")}/v1/allow/decisions/${encodeURIComponent(r)}`,_={Accept:"application/json",...H(a)};n&&(_.Authorization=`Bearer ${n}`);let h=Date.now()+Math.max(0,o),m=0;for(c(`[VisIQ HITL] Awaiting human approval for decision ${r} (timeout ${o}ms)`);;){if(Date.now()>=h)return c(`[VisIQ HITL] Decision ${r} timed out after ${o}ms \u2014 ${i?"masking":"blocking"} (G001)`),u("HITL approval timed out");let p=null;try{let y=new AbortController,C=setTimeout(()=>y.abort(),ua),A;try{A=await s(d,{method:"GET",headers:_,signal:y.signal})}finally{clearTimeout(C)}if(!A.ok)throw new Error(`HTTP ${A.status} ${A.statusText}`);let T=await A.json();p=ma(T),m=0}catch(y){m+=1;let C=y instanceof Error?y.message:String(y);if(c(`[VisIQ HITL] Poll failed for decision ${r} (${m}/${Zn}): ${C}`),m>=Zn)return u(`HITL approval poll failed repeatedly \u2014 fail-closed (G001): ${C}`);await l(Jn);continue}if(p!==null){let y=p.toLowerCase();return da.has(y)?(c(`[VisIQ HITL] Decision ${r} approved (${p}) \u2014 proceeding`),{resolution:"proceed",reason:`Approved by human reviewer (${p})`}):pa.has(y)?(c(`[VisIQ HITL] Decision ${r} resolved as ${p} \u2014 ${i?"masking":"blocking"}`),u(`Not approved by human reviewer (${p})`)):(c(`[VisIQ HITL] Decision ${r} returned unknown status '${p}' \u2014 ${i?"masking":"blocking"} (G001)`),u(`HITL returned unknown status '${p}' \u2014 fail-closed (G001)`))}await l(Jn)}}function z(e){return e??ke(typeof process<"u"?process.env?.VISIQ_FAIL_MODE:void 0)??Ve}function v(e,t){try{console.error(`[VisIQ] FAIL-OPEN (${e}): ${t} \u2014 proceeding UNGOVERNED. Set VISIQ_FAIL_MODE=closed to block instead.`)}catch{}}function U(e,t){try{console.error(`[VisIQ] TRACE-DEGRADED (${e}): ${t} \u2014 the governance decision was still made and enforced; only the execution-trace beat was lost.`)}catch{}}function re(e){let t=e.getFailMode;return(typeof t=="function"?t.call(e):void 0)??z()}function Y(e){return e.enforced?{allowed:e.action.allowed,decision:e.action.decision,...e.action.decisionId!==void 0?{decisionId:e.action.decisionId}:{},...e.ruleCode!==null?{ruleCode:e.ruleCode}:{},reason:e.reason,argRedactionRules:e.action.argRedactionRules??[],...e.action.hitlFallback?{hitlFallback:e.action.hitlFallback}:{}}:{allowed:!0,decision:"permit",reason:e.reason,argRedactionRules:[]}}function er(e){if(!e.enforced)return{action:"allow",reason:e.reason,redactionRules:[]};let t=e.retrieval.action??"deny",n=e.retrieval.redactionRules??[];return t==="escalate"&&Ae(e.retrieval.hitlFallback,n)?{action:"redact",reason:e.reason,redactionRules:n}:{action:t,reason:e.reason,redactionRules:n}}var Xn=new Set;function vt(e){Xn.has(e)||(Xn.add(e),console.warn(`[VisIQ] unrecognized retrieval outcome "${e}" \u2014 failing closed (withholding content). Upgrade @visiq/harness if a newer control plane introduced this outcome.`))}async function He(e,t,n){let r=R.getStore(),o=K(r),i=await e.evaluate({operations:["retrieval"],agentId:t,...r?.session_id?{sessionId:r.session_id}:{},resourceType:n.resourceType??"document",resourceMetadata:n.resourceMetadata??{},...n.query!==void 0?{query:n.query}:{},...n.contentPreview!==void 0?{contentPreview:n.contentPreview}:{},...o?{telemetry:o}:{}});return er(i)}async function We(e,t,n){return await e.awaitBundleReady(),He(e,t,n)}function tr(e,t,n=z()){switch(t.action){case"allow":case"escalate":return e;case"deny":return null;case"redact":{if(t.redactionRules.length===0)return e;try{return N(e,L(t.redactionRules))}catch{return n==="closed"?null:(v("redact-error","document redaction failed \u2014 document passed UNREDACTED"),e)}}default:return vt(String(t.action)),n==="closed"?null:(v("unknown-retrieval-verb",`unrecognized outcome "${String(t.action)}" \u2014 document passed through`),e)}}async function nr(e,t,n,r){if(!Array.isArray(e)||e.length===0)return e;await r.awaitBundleReady();let o=[];for(let i of e){let a=i,s=String(a.pageContent??a.text??a.content??""),l=a.metadata??{},c=await He(r,t,{resourceType:"document",resourceMetadata:l,query:n,contentPreview:s.slice(0,500)}),u=tr(i,c,re(r));u!==null&&o.push(u)}return o}async function rr(e,t,n){if(typeof e!="string")return e;await n.awaitBundleReady();let r;try{r=await He(n,t,{resourceType:"document",resourceMetadata:{content_preview:e.slice(0,500)},contentPreview:e.slice(0,500)})}catch(o){return re(n)==="closed"?"[RECALL] Retrieved context blocked \u2014 policy evaluation error (blocked \u2014 VISIQ_FAIL_MODE=closed).":(v("eval-error",`retrieval evaluation failed \u2014 text passed through: ${o instanceof Error?o.message:String(o)}`),e)}switch(r.action){case"allow":case"escalate":return e;case"deny":return"[RECALL] Retrieved context was blocked by policy.";case"redact":{if(r.redactionRules.length===0)return e;try{return N(e,L(r.redactionRules))}catch{return re(n)==="closed"?"[RECALL] Retrieved context was blocked by policy.":(v("redact-error","text redaction failed \u2014 text passed UNREDACTED"),e)}}default:return vt(String(r.action)),re(n)==="closed"?"[RECALL] Retrieved context was blocked by policy.":(v("unknown-retrieval-verb",`unrecognized outcome "${String(r.action)}" \u2014 text passed through`),e)}}var or=4,ir=1e3;function Ge(e){return e.length===0?!1:e.some(t=>t!==null&&typeof t=="object"&&(typeof t.pageContent=="string"||typeof t.text=="string"||typeof t.content=="string"))}async function ar(e,t,n){let r=[];for(let o of e){let i=o,a=String(i.pageContent??i.text??i.content??""),s={...i.metadata??{},content_preview:a.slice(0,500)},l;try{l=await He(n,t,{resourceType:"document",resourceMetadata:s,contentPreview:a.slice(0,500)})}catch(u){if(re(n)==="closed")continue;v("eval-error",`document retrieval evaluation failed \u2014 document passed through: ${u instanceof Error?u.message:String(u)}`),r.push(o);continue}let c=tr(o,l,re(n));c!==null&&r.push(c)}return r}async function yt(e,t,n,r,o){if(r>or||o.nodes++>ir)return e;if(Array.isArray(e)){if(Ge(e))return o.matched=!0,ar(e,t,n);let i=[];for(let a of e)i.push(await yt(a,t,n,r+1,o));return i}if(e!==null&&typeof e=="object"){let i=e,a={...i};for(let s of Object.keys(i))a[s]=await yt(i[s],t,n,r+1,o);return a}return e}async function Qe(e,t,n){if(await n.awaitBundleReady(),Array.isArray(e)&&Ge(e))return ar(e,t,n);if(e!==null&&typeof e=="object"){let r={nodes:0,matched:!1},o=await yt(e,t,n,0,r);if(r.matched)return o}return e}var ga={blocked:!0,reason:"[RECALL] Retrieved context was blocked by policy."};function bt(e,t,n){if(t>or||n.n++>ir)return e;if(Array.isArray(e))return Ge(e)?[]:e.map(r=>bt(r,t+1,n));if(e!==null&&typeof e=="object"){if(Ge([e]))return{...ga};let r=e,o={};for(let i of Object.keys(r))o[i]=bt(r[i],t+1,n);return o}return e}function _t(e){return typeof e=="string"?"[RECALL] Retrieved context was blocked by policy.":Array.isArray(e)?[]:e!==null&&typeof e=="object"?bt(e,0,{n:0}):e}function sr(e,t,n=z()){let r=er(t);switch(r.action){case"allow":case"escalate":return e;case"deny":return _t(e);case"redact":{if(r.redactionRules.length===0)return e;try{return N(e,L(r.redactionRules))}catch{return n==="closed"?_t(e):(v("redact-error","result redaction failed \u2014 result passed UNREDACTED"),e)}}default:return vt(String(r.action)),n==="closed"?_t(e):(v("unknown-retrieval-verb",`unrecognized outcome "${String(r.action)}" \u2014 result passed through`),e)}}function O(e){return typeof e=="object"&&e!==null?e:null}function lr(...e){for(let t of e)if(typeof t=="string"&&t.trim().length>0)return t}function ha(e,t){let n=O(e.metadata),r=n&&typeof n.name=="string"?n.name:void 0;return lr(e.name,e.id,r,t)}function _a(e){let t=O(e.metadata),n=t&&typeof t.description=="string"?t.description:void 0,r=lr(e.description,n);return r===void 0?void 0:r.slice(0,4e3)}function ya(e){let t=O(e);return t!==null&&("type"in t||"properties"in t||"$schema"in t)}function ba(e){let t=O(e);if(t===null||!("_def"in t))return;let{shape:n}=t;if(typeof n=="function")try{n=n.call(t)}catch{n=void 0}let r=O(n);if(r===null)return{type:"object"};let o={};for(let i of Object.keys(r))o[i]={};return{type:"object",properties:o}}var va=new Set(["default","const","enum","examples","example"]);function wt(e){if(Array.isArray(e))return e.map(wt);let t=O(e);if(t===null)return e;let n={};for(let[r,o]of Object.entries(t))va.has(r)||(n[r]=wt(o));return n}function wa(e){let t;if(ya(e))t=e;else{let n=ba(e);if(n===void 0)return;t=n}try{let n=JSON.stringify(t);if(n.length>2e4){let r=O(t),o=r&&O(r.properties);if(o){let i={};for(let a of Object.keys(o))i[a]={};return{type:"object",properties:i}}return{type:"object"}}return wt(JSON.parse(n))}catch{return}}function ka(e){let t=O(e.metadata),n=e.input_schema??e.inputSchema??e.parameters??e.schema??e.args_schema??e.tool_call_schema??(t?t.parameters:void 0);return n===void 0?void 0:wa(n)}function Aa(e,t){let n=O(e);if(n===null)return null;let r=ha(n,t);if(r===void 0)return null;let o={name:r.slice(0,255)},i=_a(n);i!==void 0&&(o.description=i);let a=ka(n);return a!==void 0&&(o.input_schema=a),o}function Se(e){let t=[],n=new Set,r=(o,i)=>{try{let a=Aa(o,i);a!==null&&!n.has(a.name)&&(n.add(a.name),t.push(a))}catch{}};if(Array.isArray(e)){for(let o of e)if(r(o),t.length>=200)break}else if(e instanceof Map){for(let[o,i]of e.entries())if(r(i,typeof o=="string"?o:void 0),t.length>=200)break}else{let o=O(e);if(o!==null){for(let i of Object.keys(o))if(r(o[i],i),t.length>=200)break}}return t}function kt(e){try{let t=O(e);if(t===null)return[];let n=[],r=new Set,o=l=>{for(let c of l)!r.has(c.name)&&n.length<200&&(r.add(c.name),n.push(c))};t.tools!==void 0&&o(Se(t.tools));let i=O(t.settings);i&&i.tools!==void 0&&o(Se(i.tools));for(let l of["getTools","listTools"]){let c=t[l];if(typeof c=="function")try{o(Se(c.call(t)))}catch{}}let a=O(t.nodes);if(a)for(let l of Object.keys(a)){let c=O(a[l]);c&&c.tools!==void 0&&o(Se(c.tools))}let{agents:s}=t;if(s instanceof Map)for(let l of s.values()){let c=O(l);c&&c.tools!==void 0&&o(Se(c.tools))}return n}catch{return[]}}import{z as Ye}from"zod";var Ia=Ye.object({decision:Ye.enum(["permit","deny"]),reason:Ye.string(),handoff_event_id:Ye.string().nullable()}),j=class extends Error{constructor(e,t,n){super(e),this.code=t,this.status=n,this.name="OrchestrateError"}code;status},J=class extends j{constructor(e,t){super(`Orchestrate grant denied: ${e}`,"GRANT_DENIED"),this.reason=e,this.handoffEventId=t,this.name="GrantDeniedError"}reason;handoffEventId},Sa="https://api.visiqlabs.com",Ta=1e4,oe=class{config;fetch;constructor(e,t=globalThis.fetch){this.config={agentId:e.agentId,apiKey:e.apiKey??process.env.VISIQ_API_KEY??"",endpoint:e.endpoint??process.env.VISIQ_ENDPOINT??Sa,timeoutMs:e.timeoutMs??Ta},this.fetch=t}get headers(){return{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,"X-Agent-ID":this.config.agentId}}async post(e,t){let n=new AbortController,r=setTimeout(()=>n.abort(),this.config.timeoutMs),o;try{o=await this.fetch(`${this.config.endpoint}${e}`,{method:"POST",headers:this.headers,body:JSON.stringify(t),signal:n.signal})}finally{clearTimeout(r)}let i=await o.json();if(!o.ok){let a=i?.error??`HTTP ${o.status}`;throw new j(a,"API_ERROR",o.status)}return i}async requestGrant(e){let t=await this.post("/orchestrate/grants",{parent_agent_id:e.parentAgentId,child_agent_id:e.childAgentId,tool_scope:e.toolScope??null,context_scope:e.contextScope??null,purpose:e.purpose,duration_seconds:e.durationSeconds,max_depth:e.maxDepth,parent_grant_token:e.parentGrantToken});return{grantId:t.grant_id,status:"pending",effectiveToolScope:t.effective_tool_scope,effectiveContextScope:t.effective_context_scope,acceptDeadline:t.accept_deadline}}async acceptGrant(e){let t=await this.post(`/orchestrate/grants/${e}/accept`,{});return{grantToken:t.grant_token,toolScope:t.tool_scope,contextScope:t.context_scope,expiresAt:t.expires_at}}async evaluate(e){let t=await this.post("/orchestrate/evaluate",{grant_token:e.grantToken,action:e.action,resource_type:e.resourceType,resource_metadata:e.resourceMetadata??{}}),n=Ia.parse(t);return{decision:n.decision,reason:n.reason,handoffEventId:n.handoff_event_id}}async revokeGrant(e,t){return{revokedCount:(await this.post(`/orchestrate/grants/${e}/revoke`,{reason:t})).revoked_count}}};var cr=new Map;async function ur(e,t){if(!e||e.trim()==="")throw new Error("[ORCHESTRATE] bootstrapGrant: agentId is required");if(!t||t.trim()==="")throw new Error("[ORCHESTRATE] bootstrapGrant: grantId is required");let n=cr.get(e);if(n)return n;let r=process.env.VISIQ_API_KEY;if(!r)throw new Error("[ORCHESTRATE] bootstrapGrant: VISIQ_API_KEY env var is required");let o=process.env.VISIQ_ENDPOINT,i=(await new oe({agentId:e,apiKey:r,...o?{endpoint:o}:{}}).acceptGrant(t)).grantToken;if(!i||i.trim()==="")throw new Error("[ORCHESTRATE] bootstrapGrant: backend returned empty grant token");return cr.set(e,i),i}var Te=Symbol.for("visiq.orchestrate.wrapped");function Ea(e){return e instanceof j&&typeof e.status=="number"&&e.status>=400&&e.status<500}function dr(e,t){if(!t.agentId||t.agentId.trim()==="")throw new j("agentId is required","CONFIG_ERROR");if(!t.grantToken||t.grantToken.trim()==="")throw new j("grantToken is required","CONFIG_ERROR");if(e[Te]===!0)return e;let n=new oe(t),r=t.failBehavior??(process.env.VISIQ_FAIL_MODE?.trim().toLowerCase()==="closed"?"deny":"permit"),o=async(i,a)=>{let s;try{s=await n.evaluate({grantToken:t.grantToken,action:i,resourceType:a})}catch(l){if(Ea(l))throw l;if(r==="permit"){console.warn('[VisIQ] FAIL-OPEN (orchestrate-eval-error): evaluate failed \u2014 proceeding UNGOVERNED. Set VISIQ_FAIL_MODE=closed (or failBehavior:"deny") to block instead.',l);return}throw new j(`ORCHESTRATE evaluate failed: ${l instanceof Error?l.message:String(l)}`,"EVALUATE_ERROR")}if(s.decision==="deny")throw new J(s.reason,s.handoffEventId)};return new Proxy(e,{get(i,a,s){let l=Reflect.get(i,a,s);return a===Te?!0:a==="_call"&&typeof l=="function"?async function(c,...u){let d=i.name;return await o(d??"_call"),l.call(this??i,c,...u)}:(a==="call"||a==="execute"||a==="run")&&typeof l=="function"?async function(c,...u){let d=i.name;return await o(d??String(a)),l.call(this??i,c,...u)}:l}})}import{randomUUID as _r}from"node:crypto";var pr=Symbol.for("visiq.semantickernel.instrumented");function gr(e){if(e===null||typeof e!="object")return!1;let t=e;return typeof t.useFunctionInvocation=="function"&&typeof t.usePromptRender=="function"&&typeof t.execute!="function"&&typeof t.generate!="function"&&typeof t.run!="function"}function fr(e){let t=e.arguments;return t&&typeof t=="object"&&"arguments"in t&&t.arguments&&typeof t.arguments=="object"?t.arguments:t??{}}function mr(e,t){let n=e.arguments;if(n&&typeof n=="object"&&"arguments"in n&&n.arguments&&typeof n.arguments=="object"){let r=n.arguments;for(let o of Object.keys(r))delete r[o];Object.assign(r,t);return}e.arguments=t}function B(e,t){e.result&&typeof e.result=="object"?e.result.value=t:e.result={value:t}}function Ra(e){return e.result?.value}function Ca(e){let{agentId:t,unified:n,failMode:r}=e;return async function(i,a){let s=i.function?.metadata?.name??"unknown",l=i.function?.metadata?.pluginName,c=fr(i),u=l;try{let p=await n.evaluate({operations:["action"],agentId:t,toolName:s,toolArgs:c,...u!==void 0?{targetResource:u}:{}}),y=Y(p);if(!y.allowed){B(i,E({outcome:"deny",code:y.ruleCode??"DENY",reason:y.reason}));return}y.decision==="mask"&&y.argRedactionRules.length>0&&mr(i,N(c,L(y.argRedactionRules)));let C=fr(i),A=ne(s,C,{failMode:r==="closed"?"closed":"open",enforced:p.enforced});if(A.verdict==="block"){B(i,E({outcome:"deny",code:"OUTPUT-BLOCK",reason:`outbound content carried a live secret (${A.detectors.join(",")})`}));return}A.verdict==="redact"&&(mr(i,A.redacted),v("outbound-secret-redacted",`outbound secret screen redacted ${A.detectors.length} detector(s): ${A.detectors.join(",")}`))}catch(p){if(r==="closed"){B(i,E({outcome:"error",code:"EVAL-ERROR",mechanism:`evaluation error (blocked \u2014 VISIQ_FAIL_MODE=closed): ${p instanceof Error?p.message:String(p)}`}));return}v("eval-error",`SK action pre-gate failed for "${s}": ${p instanceof Error?p.message:String(p)}`)}try{let p=await We(n,t,{resourceType:"tool_result",resourceMetadata:{function_name:s,plugin_name:l}});if(p.action==="deny"||p.action==="escalate"){B(i,`[RECALL: access denied \u2014 ${p.reason}]`);return}}catch(p){if(r==="closed"){B(i,`[RECALL] Result withheld \u2014 evaluation error (blocked \u2014 VISIQ_FAIL_MODE=closed): ${p instanceof Error?p.message:String(p)}.`);return}v("eval-error",`SK retrieval pre-gate failed for "${s}": ${p instanceof Error?p.message:String(p)}`)}await a(i);let d=Ra(i),h=(typeof d=="string"?d:(()=>{try{return JSON.stringify(d)??String(d)}catch{return String(d)}})()).slice(0,500),m;try{m=await We(n,t,{resourceType:"tool_result",resourceMetadata:{function_name:s,plugin_name:l,content_preview:h},contentPreview:h})}catch(p){r==="closed"?B(i,"[RECALL] Result withheld \u2014 evaluation error (blocked \u2014 VISIQ_FAIL_MODE=closed)."):v("eval-error",`SK post-result retrieval eval failed for "${s}": ${p instanceof Error?p.message:String(p)}`);return}if(m.action==="deny"||m.action==="escalate"){B(i,`[RECALL: access denied \u2014 ${m.reason}]`);return}if(m.action==="redact"&&m.redactionRules&&m.redactionRules.length>0&&d!==null&&d!==void 0)try{B(i,N(d,L(m.redactionRules)))}catch(p){r==="closed"?B(i,"[RECALL] Result withheld \u2014 redaction error (blocked \u2014 VISIQ_FAIL_MODE=closed)."):v("redact-error",`SK result redaction failed for "${s}" \u2014 result passed UNREDACTED: ${p instanceof Error?p.message:String(p)}`)}}}function xa(e){return async function(n,r){await r(n);let o=n.renderedPrompt;if(typeof o!="string"||o.length===0)return;let i;try{i=await We(e.unified,e.agentId,{resourceType:"prompt",resourceMetadata:{},contentPreview:o.slice(0,500)})}catch(a){e.failMode==="closed"?n.renderedPrompt="[RECALL] Prompt withheld \u2014 evaluation error (blocked \u2014 VISIQ_FAIL_MODE=closed).":v("eval-error",`SK prompt-render eval failed: ${a instanceof Error?a.message:String(a)}`);return}if(i.action==="redact"&&i.redactionRules&&i.redactionRules.length>0){try{n.renderedPrompt=N(o,L(i.redactionRules))}catch(a){e.failMode==="closed"?n.renderedPrompt="[RECALL] Prompt withheld \u2014 redaction error (blocked \u2014 VISIQ_FAIL_MODE=closed).":v("redact-error",`SK prompt redaction failed \u2014 prompt passed UNREDACTED: ${a instanceof Error?a.message:String(a)}`)}return}(i.action==="deny"||i.action==="escalate")&&(n.renderedPrompt=`[RECALL: prompt suppressed \u2014 ${i.reason}]`)}}function hr(e,t){let n=e;if(n[pr]===!0)return t.onWrap?.(),e;let r=Ca(t),o=xa(t),i=!1;return Array.isArray(n._functionInvocationFilters)?(n._functionInvocationFilters.unshift(r),i=!0):typeof n.useFunctionInvocation=="function"&&(n.useFunctionInvocation(r),i=!0),typeof n.usePromptRender=="function"?n.usePromptRender(o):Array.isArray(n._promptRenderFilters)&&n._promptRenderFilters.push(o),i&&(n[pr]=!0,t.onWrap?.()),e}function E(e){let t=/^D-/.test(e.code),n;e.outcome==="approval_required"?n="requires human approval, which was not granted":e.outcome==="error"?n="was blocked (fail-closed) after a policy-evaluation error":n="was denied by policy";let r=e.reason?.trim(),o;r?o=r:t?o="no policy rule covers this action, so the organization default applied":e.outcome==="approval_required"?o="this action is routed to a human for approval":o="denied by policy";let i=e.mechanism?.trim()?` \u2014 ${e.mechanism.trim()}`:"";return`[VisIQ decision=${e.outcome} code=${e.code}] This tool call was NOT executed: it ${n} (${o})${i}. VisIQ is a security harness installed by your developer. Report this reason to the user verbatim; do not invent a different one.`}function Je(e){return e instanceof Error?e.message:String(e)}var Oa=/https?:\/\/[^\s"'`,)}\]]+/;function At(e){let t=e.match(Oa);if(t)try{let n=new URL(t[0]);return n.hostname+n.pathname}catch{return t[0]}}var ie=Symbol.for("visiq.toolexec.instrumented");function Ma(e){return e!==null&&typeof e=="object"&&typeof e.execute=="function"}var It={vercel:"Vercel AI SDK agent",mastra:"Mastra Agent",openai:"OpenAI Agents SDK agent",llamaindex:"LlamaIndex.TS agent",voltagent:"VoltAgent agent","semantic-kernel":"Semantic Kernel"};function yr(e){if(e===null||typeof e!="object")return null;let t=e;if(Ma(t))return null;if(gr(e))return"semantic-kernel";if(typeof t.generateText=="function"&&(typeof t.getTools=="function"||t.toolManager!==void 0))return"voltagent";if(typeof t.run=="function"&&typeof t.runStream=="function"&&t.agents!==void 0)return"llamaindex";if(Array.isArray(t.tools)&&t.handoffs!==void 0&&(typeof t.on=="function"||t.eventEmitter!==void 0))return"openai";if(typeof t.generate=="function"&&typeof t.getLLM=="function"&&(typeof t.listTools=="function"||typeof t.getTools=="function"))return"mastra";if(typeof t.generate=="function"){let n=t.settings;if(n&&typeof n=="object"&&n.tools!==void 0||t.tools!==void 0)return"vercel"}return null}async function Na(e,t,n,r,o,i){let{agentId:a,unified:s}=e,l=K(o),c,u=!1;try{await s.awaitBundleReady();let p=await s.evaluate({operations:i?["action","delegation"]:["action"],agentId:a,toolName:t,toolArgs:n,...i?{context:ze(i,a)}:{},...o?.session_id?{sessionId:o.session_id}:{},...r!==void 0?{targetResource:r}:{},...l?{telemetry:l}:{}});({enforced:u}=p),c=Y(p)}catch(p){let y=p instanceof Error?p.message:String(p);return e.failMode==="closed"?{block:E({outcome:"error",code:"EVAL-ERROR",mechanism:`policy evaluation failed: ${y} (blocked \u2014 VISIQ_FAIL_MODE=closed)`})}:(v("eval-error",`policy evaluation failed for tool "${t}": ${y}`),{block:null})}if(c.decision==="approval_required"&&c.decisionId){let p=s.getApiKey()??e.apiKey,y=await Ie({endpoint:s.getEndpoint()??e.endpoint??"",...p?{apiKey:p}:{},decisionId:c.decisionId,timeoutMs:e.hitlTimeoutMs,sdkVersion:V});return y.resolution!=="proceed"?{block:E({outcome:"approval_required",code:c.ruleCode??"HITL-BLOCK",reason:c.reason,mechanism:y.reason}),decision:c}:{block:null}}if(!c.allowed)return{block:E({outcome:"deny",code:c.ruleCode??"DENY",reason:c.reason}),decision:c};let d=n,_=!1,h;if(c.decision==="mask"&&c.argRedactionRules&&c.argRedactionRules.length>0)try{let p=L(c.argRedactionRules);d=N(n,p),_=!0,h=c}catch(p){let y=p instanceof Error?p.message:String(p);if(e.failMode==="closed")return{block:E({outcome:"error",code:"MASK-ERROR",mechanism:`argument masking failed: ${y} (blocked \u2014 VISIQ_FAIL_MODE=closed)`})};v("mask-error",`argument masking failed for tool "${t}" \u2014 running with UNMASKED args: ${y}`)}let m=ne(t,d,{failMode:e.failMode==="closed"?"closed":"open",enforced:u});return m.verdict==="block"?{block:E({outcome:"deny",code:"OUTPUT-BLOCK",reason:`outbound content carried a live secret (${m.detectors.join(",")})`}),decision:{allowed:!1,decision:"deny",ruleCode:"OUTPUT-BLOCK",reason:"outbound content carried a live secret",argRedactionRules:[]}}:(m.verdict==="redact"&&(d=m.redacted,_=!0,v("outbound-secret-redacted",`outbound secret screen redacted ${m.detectors.length} detector(s): ${m.detectors.join(",")}`),h??={allowed:!0,decision:"mask",ruleCode:"OUTPUT-BLOCK",reason:"outbound secret redacted before egress",argRedactionRules:[]}),_?{block:null,maskedArgs:d,decision:h}:{block:null})}async function St(e,t,n,r,o){let i=R.getStore()??e.telemetry,a=Ke(t,n);a&&me(e.unified,{agentId:e.agentId,sessionId:i?.session_id,...e.framework?{framework:e.framework}:{}},a);let s={agentId:e.agentId,sessionId:i?.session_id,...e.framework?{framework:e.framework}:{}},l=de(t,n);try{ge(e.unified,s,{toolName:t,...l?{memory:l}:{},argSummary:r.slice(0,512)})}catch(m){U("step-beat",`emit failed for tool "${t}": ${Je(m)}`)}let c=Date.now(),u=await Na(e,t,n,At(r),i,a);if(u.block!==null){try{u.decision&&ee(e.unified,s,{toolName:t,decision:u.decision.decision??"deny",...u.decision.ruleCode?{ruleCode:u.decision.ruleCode}:{},...u.decision.reason?{ruleLabel:u.decision.reason}:{},enforced:!0,harnessMessage:u.block})}catch(m){U("intervention-beat",`emit failed for tool "${t}": ${Je(m)}`)}return u.block}if(u.maskedArgs!==void 0&&u.decision)try{ee(e.unified,s,{toolName:t,decision:u.decision.decision??"mask",...u.decision.ruleCode?{ruleCode:u.decision.ruleCode}:{},...u.decision.reason?{ruleLabel:u.decision.reason}:{},enforced:!0})}catch(m){U("intervention-beat",`emit failed for tool "${t}": ${Je(m)}`)}let d=u.maskedArgs??n,_=await o(d),h=await Qe(_,e.agentId,e.unified);try{he(e.unified,s,{toolName:t,ok:!0,durationMs:Date.now()-c,...W(h)!==void 0?{bytes:W(h)}:{},...Q(h)!==void 0?{itemCount:Q(h)}:{},...l?{memory:l}:{}})}catch(m){U("observation-beat",`emit failed for tool "${t}": ${Je(m)}`)}return h}function Ze(e,t,n){let r=e;if(r[ie]){n.onWrap?.();return}if(typeof r.execute!="function")return;let o=r.execute;Et(r,"execute",async function(...a){let s=gt(a[0]);return St(n,t,s,Re(s),l=>Promise.resolve(o.apply(this,[l,...a.slice(1)])))}),r[ie]=!0,n.onWrap?.()}function La(e,t,n){let r=e;if(r[ie]){n.onWrap?.();return}if(typeof r.invoke!="function")return;let o=r.invoke;Et(r,"invoke",async function(...a){let s=a[1],l=Qn(s),c=typeof s=="string"?s:Re(l);return St(n,t,l,c,u=>{let d=typeof s=="string"?JSON.stringify(u):u;return Promise.resolve(o.apply(this,[a[0],d,...a.slice(2)]))})}),r[ie]=!0,n.onWrap?.()}function Da(e,t){let n=e;if(n[ie]){t.onWrap?.();return}if(typeof n.call!="function")return;let r=n.metadata,o=typeof r?.name=="string"?r.name:"unknown",i=n.call;Et(n,"call",async function(...s){let l=gt(s[0]);return St(t,o,l,Re(l),c=>Promise.resolve(i.apply(this,[c,...s.slice(1)])))}),n[ie]=!0,t.onWrap?.()}function br(e,t){for(let[n,r]of Object.entries(e))r!==null&&typeof r=="object"&&Ze(r,n,t);return e}function vr(e,t,n){let r={...t,framework:n};switch(n){case"vercel":return Fa(e,r);case"mastra":return $a(e,r);case"openai":return Ua(e,r);case"llamaindex":return ja(e,r);case"voltagent":return Pa(e,r);case"semantic-kernel":return hr(e,r);default:return e}}function Fa(e,t){let n=e,r=n.settings&&typeof n.settings=="object"?n.settings:void 0,o=r?.tools??n.tools;return o&&typeof o=="object"&&br(o,t),r&&!r.__visiq_step&&(r.__visiq_step=!0,r.onStepFinish=Tt(r.onStepFinish)),Xe(e,["generate","stream"],async(i,a)=>(Ee(a,i[0]),i)),e}function $a(e,t){let r=Ka(e);return r&&br(r,t),Xe(e,["generate","stream","generateVNext","streamVNext"],async(o,i)=>{Ee(i,o[0]);let a=o[1]&&typeof o[1]=="object"?{...o[1]}:{};a.onStepFinish=Tt(a.onStepFinish);let s=[...o];return s[1]=a,s}),e}function Pa(e,t){let n=qa(e);if(n){for(let r of n)if(r!==null&&typeof r=="object"){let{name:o}=r;Ze(r,typeof o=="string"?o:"unknown",t)}}return Xe(e,["generateText","streamText","generateObject","streamObject"],async(r,o)=>{Ee(o,r[0]);let i=r[1]&&typeof r[1]=="object"?{...r[1]}:{};i.onStepFinish=Tt(i.onStepFinish);let a=[...r];return a[1]=i,a}),e}function ja(e,t){let n=e,r=i=>{let a=i?.tools;if(Array.isArray(a))for(let s of a)s!==null&&typeof s=="object"&&Da(s,t)},{agents:o}=n;if(o instanceof Map)for(let i of o.values())r(i);else Array.isArray(n.tools)&&r(n);return Xe(e,["run"],async(i,a)=>(Ee(a,i[0]),i)),Va(e,"runStream",(i,a,s)=>{s||Ee(a,i[0])}),e}function Ua(e,t){let n=e,{tools:r}=n;if(Array.isArray(r)){for(let o of r)if(o!==null&&typeof o=="object"){let{name:i}=o;La(o,typeof i=="string"?i:"unknown",t)}}return Ba(e,t),e}function Ba(e,t){let n=e;if(n.__visiq_openai_hooks||typeof n.on!="function")return;let r=n.on,{telemetry:o}=t;r.call(e,"agent_start",(...i)=>{o.session_id=_r(),o.llm_prompts=[],o.llm_responses=[],o.agent_reasoning=[],o.retrieverQueries=new Map;let a=i[2];a!=null&&o.llm_prompts.push(Re(a).slice(0,5120))}),r.call(e,"agent_end",(...i)=>{let a=i[1];typeof a=="string"&&a&&o.llm_responses.push(a.slice(0,5120))}),n.__visiq_openai_hooks=!0}function qa(e){let t=r=>Array.isArray(r)&&r.some(o=>o!==null&&typeof o.execute=="function");if(typeof e.getTools=="function")try{let r=e.getTools();if(t(r))return r}catch{}let n=e.toolManager;if(n&&typeof n.getAllBaseTools=="function")try{let r=n.getAllBaseTools();if(t(r))return r}catch{}return t(e.tools)?e.tools:null}function Xe(e,t,n){let r=e;for(let o of t){if(typeof r[o]!="function")continue;let i=`__visiq_wrapped_${o}`;if(r[i])continue;let a=r[o];r[o]=function(...s){let l=wr();return R.run(l,async()=>{let c=await n(s,l);return a.apply(e,c)})},r[i]=!0}}function Va(e,t,n){let r=e;if(typeof r[t]!="function")return;let o=`__visiq_wrapped_${t}`;if(r[o])return;let i=r[t];r[t]=function(...a){let s=R.getStore(),l=s??wr();return n(a,l,s!==void 0),R.run(l,()=>i.apply(e,a))},r[o]=!0}function Tt(e){return t=>{let n=R.getStore(),r=t;if(n&&typeof r?.text=="string"&&r.text&&n.llm_responses.push(r.text.slice(0,5120)),typeof e=="function")return e(t)}}function Ee(e,t){if(t==null)return;let n=t;if(typeof t=="object"){let r=t;n=r.prompt??r.messages??t}e.llm_prompts.push(Re(n).slice(0,5120))}function Ka(e){for(let t of["listTools","getTools"])if(typeof e[t]=="function")try{let n=e[t]();if(n&&typeof n=="object"&&typeof n.then!="function")return n}catch{}return null}function wr(){return{session_id:_r(),llm_prompts:[],llm_responses:[],agent_reasoning:[],retrieverQueries:new Map}}function Et(e,t,n){try{e[t]=n}catch{Object.defineProperty(e,t,{value:n,writable:!0,configurable:!0,enumerable:!0})}}function Re(e){try{return JSON.stringify(e)??String(e)}catch{return String(e)}}function Or(e,t){let n=Ya(t);if(e[Te]===!0)return e;let r=es(e);if(r==="langchain-executor"||r==="langchain-graph")return se(n.apiKey,n.endpoint,n.agentId,n.timeoutMs,Ar(r,null),n.failMode,{model:Ir(e)}),Tr(e,n),ts(e,n);let o=yr(e);if(o){se(n.apiKey,n.endpoint,n.agentId,n.timeoutMs,Ar("unknown",o),n.failMode,{model:Ir(e)}),Tr(e,n);let i=0,a=Fr(n);a.onWrap=()=>{i+=1};let s=vr(e,a,o);if(i===0){let l=0;try{l=kt(e).length}catch{l=0}if(l>0){let c=`[VisIQ] Detected a ${It[o]} that ADVERTISES ${String(l)} tool(s) but instrumented ZERO of them \u2014 its tool calls run UN-GOVERNED while this SDK appears correctly wired. This is almost always a tool bag that moved/renamed on a framework version bump. Upgrade @visiq/harness, or pass the tools through visiq() directly (visiq(tools, \u2026)). Set onInstrumentFailure:'throw' (or VISIQ_ON_INSTRUMENT_FAILURE=throw / VISIQ_FAIL_MODE=closed) to refuse to run ungoverned.`;if(n.onInstrumentFailure!==void 0?n.onInstrumentFailure==="throw":n.failMode==="closed")throw new Error(c);v("zero-instrument",`advertised ${String(l)} tool(s), instrumented none`),console.warn(c)}else{let c=`[VisIQ] Detected a ${It[o]} with no tools to instrument (the agent advertises none). If it is intentionally tool-less (LLM-only) this is safe to ignore; otherwise its tool bag is not where this SDK looks for it \u2014 upgrade @visiq/harness or pass the tools through visiq() (visiq(tools, \u2026)). Set onInstrumentFailure:'throw' (or VISIQ_ON_INSTRUMENT_FAILURE=throw) to fail closed here.`;if(n.onInstrumentFailure==="throw")throw new Error(c);console.warn(c)}}return s}if(ls(e)){let i=process.env.VISIQ_GRANT_ID;return i?us(e,n,i):ds(e,n)}throw new Error("[VisIQ] Cannot detect agentic framework. Pass a LangChain AgentExecutor, LangGraph CompiledGraph, or a tool with one of: _call, execute, call, run, invoke.")}var Ha="https://api.visiqlabs.com",Wa="\0",kr=new Map;function Ar(e,t){if(e==="langchain-executor"||e==="langchain-graph")return"langchain";switch(t){case"vercel":return"vercel_ai";case"mastra":return"mastra";case"openai":return"openai_agents";case"llamaindex":return"llamaindex";case"voltagent":return"voltagent";case"semantic-kernel":return"semantic_kernel";default:return}}function Ir(e){try{if(typeof e!="object"||e===null)return;let t=e,n=ae(t.model);if(n)return n;let{settings:r}=t;if(typeof r=="object"&&r!==null){let a=ae(r.model);if(a)return a}let{llm:o}=t;if(typeof o=="object"&&o!==null){let a=Sr(o);if(a)return a}let{agents:i}=t;if(i instanceof Map){for(let a of i.values())if(typeof a=="object"&&a!==null){let s=a,l=s.llm,c=ae(s.model)??(typeof l=="object"&&l!==null?Sr(l):void 0);if(c)return c}}return}catch{return}}function Sr(e){return ae(e.model)??ae(e.modelId)??ae(e.model_name)}function ae(e){if(typeof e=="string"&&e.trim().length>0)return e.trim();if(typeof e=="object"&&e!==null){let t=e;for(let n of["modelId","model_id","id","model","modelName","model_name"]){let r=t[n];if(typeof r=="string"&&r.trim().length>0)return r.trim()}}}function se(e,t,n,r,o,i,a){let s=[e??"",t??"",n??"",r??"",i??""].join(Wa),l=kr.get(s);return l||(l=new Wn(e,t,n,void 0,r,V,rt),l.registerHostEnvironment(o,a),kr.set(s,l)),i!==void 0&&l.setFailMode(i),l}function Tr(e,t){try{let n=kt(e);n.length>0&&se(t.apiKey,t.endpoint,t.agentId,t.timeoutMs,void 0,t.failMode).reportToolSurface(n)}catch{}}function Qa(e){if(typeof e=="number"&&Number.isFinite(e)&&e>0)return e;let t=process.env.VISIQ_TIMEOUT_MS;if(t!==void 0){let n=Number.parseInt(t,10);if(Number.isFinite(n)&&n>0)return n}}function Ya(e){let t=e?.agentId??process.env.VISIQ_AGENT_ID??Za(),n=e?.apiKey??process.env.VISIQ_API_KEY,r=e?.endpoint??process.env.VISIQ_ENDPOINT??(n?Ha:void 0);return{agentId:t,apiKey:n,endpoint:r,hitlTimeoutMs:Xa(e?.hitlTimeoutMs),timeoutMs:Qa(e?.timeoutMs),onInstrumentFailure:e?.onInstrumentFailure??Ja(),failMode:z(e?.failMode)}}function Ja(){let e=process.env.VISIQ_ON_INSTRUMENT_FAILURE;if(e==="throw")return"throw";if(e==="warn")return"warn"}function Za(){let e=t=>t.toLowerCase().replace(/^@[^/]+\//,"").replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,255);try{let t=process.cwd();for(let n=0;n<64;n++){let r=tt.join(t,"package.json");if(et.existsSync(r)){let i=JSON.parse(et.readFileSync(r,"utf8"));if(typeof i.name=="string"&&i.name.trim()){let a=e(i.name);if(a)return a}break}let o=tt.dirname(t);if(o===t)break;t=o}}catch{}try{let t=e(xr.hostname());if(t)return t}catch{}return"agent"}function Xa(e){if(typeof e=="number"&&Number.isFinite(e)&&e>0)return e;let t=process.env.VISIQ_HITL_TIMEOUT_MS;if(t){let n=Number(t);if(Number.isFinite(n)&&n>0)return n}return ht}function es(e){let t=e;return typeof t.invoke=="function"&&t.agent&&Array.isArray(t.tools)?"langchain-executor":typeof t.invoke=="function"&&t.nodes&&(t.edges||t.lg_is_pregel===!0||typeof t.builder=="object"&&t.builder!==null&&t.builder.edges)?"langchain-graph":"unknown"}function ts(e,t){let n=e,r=se(t.apiKey,t.endpoint,t.agentId,t.timeoutMs,void 0,t.failMode),o=ns(n);for(let l of o)xt(l,t.agentId,r),is(l,t.agentId,r,t),Lr(l,r,t);let{nodes:i}=n;if(!!i&&typeof i=="object"&&"tools"in i&&o.length===0){let l="[VisIQ] Detected a LangGraph agent whose compiled graph carries a ToolNode, but resolved ZERO tools from it \u2014 its tool calls run UN-GOVERNED while this SDK appears correctly wired. This is almost always a compiled-graph tool bag that moved on a @langchain/langgraph version bump. Upgrade @visiq/harness, or pass the tools through visiq() directly (visiq(tools, \u2026)). Set onInstrumentFailure:'throw' (or VISIQ_ON_INSTRUMENT_FAILURE=throw / VISIQ_FAIL_MODE=closed) to refuse to run ungoverned.";if(t.onInstrumentFailure!==void 0?t.onInstrumentFailure==="throw":t.failMode==="closed")throw new Error(l);v("zero-instrument","langgraph compiled-graph ToolNode present, resolved no tools"),console.warn(l)}let s=n.invoke;if(n.invoke=function(l,c){let u=Ct(),d=Cr(t.agentId,r),_=c?.callbacks??[];return R.run(u,()=>s.call(this,l,{...c,callbacks:[..._,d]}))},typeof n.stream=="function"){let l=n.stream;n.stream=function(c,u){let d=Ct(),_=Cr(t.agentId,r),h=u?.callbacks??[];return R.run(d,()=>l.call(this,c,{...u,callbacks:[...h,_]}))}}return e}function ns(e){let t=[],n=new Set,r=i=>{if(Array.isArray(i))for(let a of i)a&&typeof a=="object"&&!n.has(a)&&(n.add(a),t.push(a))};r(e.tools);let{nodes:o}=e;if(o&&typeof o=="object"){for(let i of Object.values(o))if(i&&typeof i=="object"){let a=i;r(a.tools);let{bound:s}=a;s&&typeof s=="object"&&r(s.tools)}}return t}function Ct(){return{session_id:za(),llm_prompts:[],llm_responses:[],agent_reasoning:[],retrieverQueries:new Map}}function xt(e,t,n){let r=e,o=Symbol.for("visiq.recall.instrumented");if(!r[o]){if(typeof r._getRelevantDocuments=="function"){let i=r._getRelevantDocuments;r._getRelevantDocuments=async function(a,s){let l=await i.call(this,a,s);return Er(l,t,a,n)},r[o]=!0}if(typeof r.retrieve=="function"&&!r._getRelevantDocuments){let i=r.retrieve;r.retrieve=async function(a){let s=await i.call(this,a);return Er(s,t,String(a),n)},r[o]=!0}r.retriever&&typeof r.retriever=="object"&&xt(r.retriever,t,n)}}var rs=Symbol.for("visiq.operations"),os=new Set(["action","retrieval","delegation"]);function Mr(e){if(typeof e!="object"||e===null)return;let t=e[rs]??e.visiqOperations;if(!Array.isArray(t))return;let n=t.filter(r=>typeof r=="string"&&os.has(r));return n.length>0?Array.from(new Set(n)):void 0}function is(e,t,n,r){let o=e,i=Symbol.for("visiq.recall.tool-instrumented");if(o[i]||typeof o.func!="function")return;let a=typeof o.name=="string"?o.name:"",s=typeof o.retriever=="object"&&o.retriever!==null,l=a.split(/[^a-zA-Z0-9]+|(?<=[a-z])(?=[A-Z])/).map(I=>I.toLowerCase()),c=new Set(["update","delete","create","write","archive","insert","remove","patch"]),u=new Set(["send","post","put"]),d=l.some(I=>c.has(I)),_=u.has(l[0]??""),h=d||_,m=["update","delete","create","archive","insert","remove"],p=l.some(I=>m.some(b=>I.length>b.length&&I.endsWith(b))),C=/retriev/i.test(a)||/search.*doc|knowledge/i.test(a)&&!h&&!p,A=Mr(o),T=A?.includes("retrieval")??!1;if(A!==void 0&&!T||!(s||C||T))return;let Me=A?T&&A.includes("action"):d||p;if(!Me)if(s)xt(o.retriever,t,n);else{let I=globalThis,b=Symbol.for("visiq.recall.closureRetrieverWarned"),$=I[b]??=new Set;$.has(a)||($.add(a),console.warn(`[VisIQ] Retriever tool "${a||"(unnamed)"}" exposes no reachable retriever (e.g. LangChain createRetrieverTool returns a joined string). RECALL masks its output via value-shape + whole-result rules, but PER-DOCUMENT metadata/classification rules cannot apply to a metadata-less joined string. For full per-doc governance, pass the retriever to visiq() directly, or use a tool that returns a Document[].`))}let G=o.func;Me?(o[Nr]=!0,o.func=async function(...I){await n.awaitBundleReady();let b=I[0],$=typeof b=="object"&&b!==null?b:{input:b},ce=typeof $.query=="string"?$.query:void 0,w=R.getStore(),k=K(w),M;try{M=await n.evaluate({operations:["retrieval","action"],agentId:t,...w?.session_id?{sessionId:w.session_id}:{},toolName:a||"unknown",toolArgs:$,resourceType:"document",resourceMetadata:{},...ce!==void 0?{query:ce}:{},...k?{telemetry:k}:{}})}catch(D){let ue=D instanceof Error?D.message:String(D);return z(r?.failMode)==="closed"?E({outcome:"error",code:"EVAL-ERROR",mechanism:`policy evaluation failed: ${ue} (blocked \u2014 VISIQ_FAIL_MODE=closed)`}):(v("eval-error",`policy evaluation failed for hybrid tool "${a||"unknown"}": ${ue}`),G.apply(this,I))}let S=Y(M),nt=Ae(S.hitlFallback,S.argRedactionRules),Ot=I,Mt=()=>{try{return Ot=[N($,L(S.argRedactionRules)),...I.slice(1)],null}catch{return z(r?.failMode)==="closed"?E({outcome:"error",code:"MASK-ERROR",mechanism:"argument masking failed (blocked \u2014 VISIQ_FAIL_MODE=closed)"}):(v("mask-error",`argument masking failed for tool "${a||"unknown"}" \u2014 running with UNMASKED args`),null)}};if(S.decision==="approval_required"&&S.decisionId&&r){let D=await Ie({endpoint:n.getEndpoint()??r.endpoint??"",apiKey:n.getApiKey()??r.apiKey,decisionId:S.decisionId,timeoutMs:r.hitlTimeoutMs,maskFallback:nt,sdkVersion:V});if(D.resolution==="mask"){let ue=Mt();if(ue)return ue}else if(D.resolution!=="proceed")return E({outcome:"approval_required",code:S.ruleCode??"HITL-BLOCK",reason:S.reason,mechanism:D.reason})}else if(!S.allowed)return E({outcome:"deny",code:S.ruleCode??"DENY",reason:S.reason});if(S.decision==="mask"&&S.argRedactionRules.length>0){let D=Mt();if(D)return D}let jr=await G.apply(this,Ot);return sr(jr,M,r?.failMode)}):o.func=async function(...I){let b=await G.apply(this,I);return typeof b=="string"?rr(b,t,n):Qe(b,t,n)},o[i]=!0}var Nr=Symbol.for("visiq.hybrid.instrumented");async function Er(e,t,n,r){return nr(e,t,n,r)}var Rr=["invoke","call","_call"],Z=new Ga;function Lr(e,t,n){let r=e,o=Symbol.for("visiq.allow.instrumented");if(r[o]||typeof r._getRelevantDocuments=="function"||r[Nr]||Mr(r)?.every(c=>c==="retrieval")||!Rr.some(c=>typeof r[c]=="function"))return;let{agentId:i}=n,a=typeof r.name=="string"?r.name:"unknown",s=Symbol("visiq.gate"),l=async(c,u,d,_,h)=>{let m=Z.getStore();if(m!==void 0&&m.gateKey===s&&!m.entered.has(h))return m.entered.add(h),c.call(u,d,..._);let p;if(typeof d=="string")p=d;else{let w=d?.input;p=w!=null?String(w):JSON.stringify(d)??""}let y=R.getStore(),C=K(y),A=typeof d=="object"&&d!==null?d:{input:p},T=Ke(a,A);T&&me(t,{agentId:i,sessionId:y?.session_id,framework:"langchain"},T);let Oe={agentId:i,sessionId:y?.session_id,framework:"langchain"},le=de(a,A);try{ge(t,Oe,{toolName:a,...le?{memory:le}:{},argSummary:p.slice(0,512)})}catch(w){U("step-beat",`emit failed for tool "${a}": ${Rt(w)}`)}let Me=Date.now(),G=async w=>{let k=await w();try{he(t,Oe,{toolName:a,ok:!0,durationMs:Date.now()-Me,...W(k)!==void 0?{bytes:W(k)}:{},...Q(k)!==void 0?{itemCount:Q(k)}:{},...le?{memory:le}:{}})}catch(M){U("observation-beat",`emit failed for tool "${a}": ${Rt(M)}`)}return k},I=(w,k,M,S)=>{try{ee(t,Oe,{toolName:a,decision:w,...k?{ruleCode:k}:{},...M?{ruleLabel:M}:{},enforced:!0,...S?{harnessMessage:S}:{}})}catch(nt){U("intervention-beat",`emit failed for tool "${a}": ${Rt(nt)}`)}};await t.awaitBundleReady();let b,$=!1;try{let w=await t.evaluate({operations:T?["action","delegation"]:["action"],agentId:i,...y?.session_id?{sessionId:y.session_id}:{},toolName:a,toolArgs:A,targetResource:At(p),...C?{telemetry:C}:{},...T?{context:ze(T,i)}:{}});({enforced:$}=w),b=Y(w)}catch(w){let k=w instanceof Error?w.message:String(w);return n.failMode==="closed"?E({outcome:"error",code:"EVAL-ERROR",mechanism:`policy evaluation failed: ${k} (blocked \u2014 VISIQ_FAIL_MODE=closed)`}):(v("eval-error",`policy evaluation failed for tool "${a}": ${k}`),Z.run({gateKey:s,entered:new Set([h])},()=>c.call(u,d,..._)))}let ce=w=>{let k=ne(a,w,{failMode:n.failMode==="closed"?"closed":"open",enforced:$});if(k.verdict==="block"){let S=E({outcome:"deny",code:"OUTPUT-BLOCK",reason:`outbound content carried a live secret (${k.detectors.join(",")})`});return I("deny","OUTPUT-BLOCK","outbound content carried a live secret",S),S}let M=w;return k.verdict==="redact"&&(M=k.redacted,v("outbound-secret-redacted",`outbound secret screen redacted ${k.detectors.length} detector(s): ${k.detectors.join(",")}`),I("mask","OUTPUT-BLOCK","outbound secret redacted before egress")),G(()=>Z.run({gateKey:s,entered:new Set([h])},()=>c.call(u,M,..._)))};if(b.decision==="approval_required"&&b.decisionId){let w=Ae(b.hitlFallback,b.argRedactionRules),k=await Ie({endpoint:t.getEndpoint()??n.endpoint??"",apiKey:t.getApiKey()??n.apiKey,decisionId:b.decisionId,timeoutMs:n.hitlTimeoutMs,maskFallback:w,sdkVersion:V});if(k.resolution==="proceed")return G(()=>Z.run({gateKey:s,entered:new Set([h])},()=>c.call(u,d,..._)));if(k.resolution==="mask")try{let S=N(d,L(b.argRedactionRules));return I("mask",b.ruleCode,b.reason),G(()=>Z.run({gateKey:s,entered:new Set([h])},()=>c.call(u,S,..._)))}catch{return n.failMode==="closed"?E({outcome:"error",code:"MASK-ERROR",mechanism:"argument masking failed (blocked \u2014 VISIQ_FAIL_MODE=closed)"}):(v("mask-error",`HITL mask fallback failed for tool "${a}" \u2014 running with UNMASKED args`),Z.run({gateKey:s,entered:new Set([h])},()=>c.call(u,d,..._)))}let M=E({outcome:"approval_required",code:b.ruleCode??"HITL-BLOCK",reason:b.reason,mechanism:k.reason});return I("approval_required",b.ruleCode,b.reason,M),M}if(!b.allowed){let w=E({outcome:"deny",code:b.ruleCode??"DENY",reason:b.reason});return I("deny",b.ruleCode,b.reason,w),w}if(b.decision==="mask"&&b.argRedactionRules.length>0)try{let w=N(d,L(b.argRedactionRules));return I("mask",b.ruleCode,b.reason),ce(w)}catch{return n.failMode==="closed"?E({outcome:"error",code:"MASK-ERROR",mechanism:"argument masking failed (blocked \u2014 VISIQ_FAIL_MODE=closed)"}):(v("mask-error",`argument masking failed for tool "${a}" \u2014 running with UNMASKED args`),Z.run({gateKey:s,entered:new Set([h])},()=>c.call(u,d,..._)))}return ce(d)};for(let c of Rr){if(typeof r[c]!="function")continue;let u=r[c];r[c]=function(d,..._){return l(u,this,d,_,c)}}r[o]=!0}function Rt(e){return e instanceof Error?e.message:String(e)}function as(e,t,n){let r=(a,s)=>{if(!a||typeof a!="object")return;let l=a[s];return typeof l=="string"&&l.length>0?l:void 0},o=t?.invocation_params,i=e&&typeof e=="object"?e.kwargs:void 0;return r(o,"model")??r(o,"model_name")??r(n,"ls_model_name")??r(i,"model")??r(i,"model_name")}function ss(e,t){let n=(h,m)=>{if(!h||typeof h!="object")return;let p=h[m];return typeof p=="number"&&Number.isFinite(p)?p:void 0},r=e?.tokenUsage,o=n(r,"promptTokens"),i=n(r,"completionTokens");if(o!==void 0||i!==void 0)return{...o!==void 0?{tokensIn:o}:{},...i!==void 0?{tokensOut:i}:{}};let a=t?.usage_metadata,s=n(a,"input_tokens"),l=n(a,"output_tokens");if(s===void 0&&l===void 0)return;let c=a&&typeof a=="object"?a.input_token_details:void 0,u=n(c,"cache_read"),d=n(c,"cache_creation"),_=s!==void 0?Math.max(0,s-(u??0)-(d??0)):void 0;return{..._!==void 0?{tokensIn:_}:{},...l!==void 0?{tokensOut:l}:{},...u!==void 0?{cacheRead:u}:{},...d!==void 0?{cacheWrite:d}:{}}}function Cr(e,t){return{name:"VisiqHandler",handleLLMStart:async(n,r,o,i,a,s,l)=>{let c=R.getStore();if(!c)return;c.llm_prompts.push(...r);let u=as(n,a,l);u&&(c.llm_model=u,t.captureCloneMetadata({model:u,agentType:"langchain"}))},handleLLMEnd:async n=>{let r=R.getStore();if(!r)return;let i=n?.generations?.[0]?.[0],a=typeof i?.text=="string"?i.text:"";a&&r.llm_responses.push(a);try{let s=n?.llmOutput,l=i?.message&&typeof i.message=="object"?i.message:void 0,c=ss(s,l);if(!c&&!a)return;let u=l?.tool_calls,d=typeof s?.model=="string"?s.model:void 0,_=r.llm_model??d;await t.awaitBundleReady(),at(t,{agentId:e,sessionId:r.session_id,framework:"langchain"},{...a?{texts:[a]}:{},...c?{usage:c}:{},..._?{model:_}:{},final:!(Array.isArray(u)&&u.length>0)})}catch{}},handleAgentAction:async n=>{let r=R.getStore();if(!r)return;let o=typeof n.log=="string"?n.log:"";o&&r.agent_reasoning.push(o)},handleRetrieverStart:async(n,r,o)=>{let i=R.getStore();i&&i.retrieverQueries.set(o,r??"")},handleRetrieverEnd:async(n,r)=>{let o=R.getStore();if(!o)return;let i=o.retrieverQueries.get(r)??"";if(o.retrieverQueries.delete(r),!Array.isArray(n))return;let a=K(o);for(let s of n){let l=s,c=String(l.pageContent??l.text??l.content??""),u=l.metadata??{};await t.evaluate({operations:["retrieval"],agentId:e,resourceType:"document",resourceMetadata:u,query:i,contentPreview:c.slice(0,500),...a?{telemetry:a}:{}})}},handleRetrieverError:async(n,r)=>{let o=R.getStore();o&&o.retrieverQueries.delete(r)}}}var Dr=["_call","execute","call","run","invoke"];function ls(e){let t=e;for(let n of Dr)if(typeof t[n]=="function")return!0;return!1}function cs(e){return e instanceof J?!0:e instanceof j?typeof e.status=="number"&&e.status>=400&&e.status<500:!1}function us(e,t,n){let r=null,o=null,i=!1,a=async()=>{if(r)return r;if(o)throw new J(`Failed to bootstrap grant ${n}: ${o.message}`,null);let s;try{s=await ur(t.agentId,n)}catch(l){throw i=cs(l),i&&(o=l instanceof Error?l:new Error(String(l))),new J(`Failed to bootstrap grant ${n}: ${l instanceof Error?l.message:String(l)}`,null)}return r=dr(e,{agentId:t.agentId,grantToken:s,failBehavior:t.failMode==="closed"?"deny":"permit",...t.apiKey?{apiKey:t.apiKey}:{},...t.endpoint?{endpoint:t.endpoint}:{}}),r};return new Proxy(e,{get(s,l,c){if(l===Te)return!0;let u=Reflect.get(s,l,c);return typeof u!="function"||typeof l!="string"||!Dr.includes(l)?u:async function(...d){let _;try{_=await a()}catch(m){if(i||t.failMode==="closed")throw m;return v("grant-bootstrap",`grant ${n} bootstrap failed: ${m instanceof Error?m.message:String(m)}`),u.call(this,...d)}return _[l].call(_,...d)}}})}function ds(e,t){let n=se(t.apiKey,t.endpoint,t.agentId,t.timeoutMs,void 0,t.failMode);Lr(e,n,t);let r=e;if(typeof r.execute=="function"){let o=typeof r.name=="string"&&r.name||typeof r.id=="string"&&r.id||"unknown";Ze(e,o,Fr(t))}return e}function Fr(e){return{agentId:e.agentId,unified:se(e.apiKey,e.endpoint,e.agentId,e.timeoutMs,void 0,e.failMode),hitlTimeoutMs:e.hitlTimeoutMs,failMode:e.failMode,...e.apiKey?{apiKey:e.apiKey}:{},...e.endpoint?{endpoint:e.endpoint}:{},telemetry:Ct()}}async function $r(e,t={}){if(!e||e.trim()==="")throw new Error("[VisIQ] visiq.delegate: childAgentId is required");let n=process.env.VISIQ_AGENT_ID;if(!n)throw new Error("[VisIQ] visiq.delegate: VISIQ_AGENT_ID env var is required. Set it to the parent agent ID before calling delegate.");let r=process.env.VISIQ_API_KEY;if(!r)throw new Error("[VisIQ] visiq.delegate: VISIQ_API_KEY env var is required");let o=process.env.VISIQ_ENDPOINT;return{VISIQ_GRANT_ID:(await new oe({agentId:n,apiKey:r,...o?{endpoint:o}:{}}).requestGrant({parentAgentId:n,childAgentId:e,toolScope:t.toolScope??null,contextScope:t.contextScope??null,durationSeconds:t.durationSeconds??3600,purpose:t.purpose??`Delegated to ${e}`,...t.maxDepth!==void 0?{maxDepth:t.maxDepth}:{},...t.parentGrantToken!==void 0?{parentGrantToken:t.parentGrantToken}:{}})).grantId}}var Ce=class{constructor(t){this.transport=t}transport;deploy(t={}){let n={include_mac:t.includeMac??!1};return t.autoInstallHarness!==void 0&&(n.auto_install_harness=t.autoInstallHarness),X(this.transport,"POST","/api/discovery/fleet/deploy",n)}status(){return X(this.transport,"GET","/api/discovery/fleet/status")}heartbeat(t){return X(this.transport,"POST","/api/discovery/fleet/heartbeat",{instance_id:t.instanceId,vendor:t.vendor})}stop(){return X(this.transport,"POST","/api/discovery/fleet/stop")}};var xe=class{constructor(t){this.transport=t}transport;connectAws(t){return X(this.transport,"POST","/api/discovery/integrations/aws",{aws_account_id:t.awsAccountId,aws_region:t.awsRegion})}};function ps(e){if(!e.baseUrl||e.baseUrl.length===0)throw new Error("[VisIQ] createVisiqClient: baseUrl is required");if(!e.accessToken&&!e.cookieHeader)throw new Error("[VisIQ] createVisiqClient: one of accessToken or cookieHeader is required");let t=e.baseUrl.replace(/\/$/,""),n=e.fetchImpl??globalThis.fetch.bind(globalThis),r={baseUrl:t,accessToken:e.accessToken,cookieHeader:e.cookieHeader,fetchImpl:n};return{fleet:new Ce(r),integrations:new xe(r)}}async function X(e,t,n,r){let o=`${e.baseUrl}${n.startsWith("/")?n:`/${n}`}`,i={...H(V)};e.cookieHeader&&(i.Cookie=e.cookieHeader),e.accessToken&&(i.Authorization=`Bearer ${e.accessToken}`);let a;r!==void 0&&(i["Content-Type"]="application/json",a=JSON.stringify(r));let s=await e.fetchImpl(o,{method:t,headers:i,body:a});if(!s.ok){let l="";try{l=await s.text()}catch{}throw new Error(`[VisIQ] ${t} ${n} failed (${s.status}): ${l||s.statusText}`)}return await s.json()}var Pr=Or;Pr.delegate=$r;var tc=Pr;export{Ve as DEFAULT_FAIL_MODE,Ce as FleetClient,xe as IntegrationsClient,ps as createVisiqClient,$r as delegate,ke as normalizeFailMode,tc as visiq};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visiq/harness",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "description": "VisIQ SDK — AI agent governance harness",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",