@ornexus/neocortex 4.60.42 → 4.60.44

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.
@@ -1,2 +1,2 @@
1
- const t="support@neocortex.sh",u={AUTH_EXPIRED:{en:{summary:"Your session has expired.",whatHappened:"The token we use to authenticate your CLI has expired. This is normal and happens every few hours.",whatToDo:"Re-activate with the license key that was emailed to you.",command:"neocortex activate YOUR-LICENSE-KEY",url:"https://neocortex.sh/portal"},"pt-BR":{summary:"Sua sess\xE3o expirou.",whatHappened:"O token de autentica\xE7\xE3o do CLI expirou. Isso \xE9 normal e acontece a cada poucas horas.",whatToDo:"Reative o CLI com a license key que voc\xEA recebeu por email.",command:"neocortex activate SUA-LICENSE-KEY",url:"https://neocortex.sh/portal"}},UPGRADE_REQUIRED:{en:{summary:"Your CLI version is outdated.",whatHappened:"The server requires a newer CLI version. Older versions are not allowed for security and compatibility reasons.",whatToDo:"Install the latest CLI globally with npm.",command:"npm install -g @ornexus/neocortex@latest"},"pt-BR":{summary:"Sua vers\xE3o do CLI est\xE1 desatualizada.",whatHappened:"O servidor exige uma vers\xE3o mais recente do CLI. Vers\xF5es antigas n\xE3o s\xE3o permitidas por motivos de seguran\xE7a e compatibilidade.",whatToDo:"Instale a vers\xE3o mais recente globalmente via npm.",command:"npm install -g @ornexus/neocortex@latest"}},RATE_LIMITED:{en:{summary:"You sent too many requests in a short window.",whatHappened:"You hit the rate limit for your plan. This protects the service from abuse and keeps it fast for everyone.",whatToDo:"Wait a few seconds and try again. If you hit this often, upgrading your plan raises the limit.",url:"https://neocortex.sh/portal/plans"},"pt-BR":{summary:"Voc\xEA fez muitas requisi\xE7\xF5es em pouco tempo.",whatHappened:"O limite de taxa do seu plano foi atingido. Isso protege o servi\xE7o contra abuso e mant\xE9m a velocidade para todos.",whatToDo:"Espere alguns segundos e tente novamente. Se isso acontece com frequ\xEAncia, fazer upgrade do seu plano aumenta o limite.",url:"https://neocortex.sh/portal/plans"}},TRIGGER_NOT_ALLOWED:{en:{summary:"This command is not available on your current plan.",whatHappened:"You tried to use a trigger that requires a paid plan (Pro or Enterprise).",whatToDo:"See the full comparison and upgrade in the portal.",url:"https://neocortex.sh/portal/plans"},"pt-BR":{summary:"Este comando n\xE3o est\xE1 dispon\xEDvel no seu plano atual.",whatHappened:"Voc\xEA tentou usar um trigger que requer um plano pago (Pro ou Enterprise).",whatToDo:"Veja a compara\xE7\xE3o completa e fa\xE7a upgrade no portal.",url:"https://neocortex.sh/portal/plans"}},QUOTA_EXCEEDED:{en:{summary:"Daily quota reached.",whatHappened:"You have used all invocations allowed by your plan today. Quotas reset at midnight UTC.",whatToDo:"Wait for the daily reset, or upgrade your plan for a higher quota.",url:"https://neocortex.sh/portal/plans"},"pt-BR":{summary:"Quota di\xE1ria atingida.",whatHappened:"Voc\xEA usou todas as invoca\xE7\xF5es permitidas pelo seu plano hoje. As quotas s\xE3o resetadas \xE0 meia-noite UTC.",whatToDo:"Aguarde o reset di\xE1rio ou fa\xE7a upgrade do plano para uma quota maior.",url:"https://neocortex.sh/portal/plans"}},SERVER_ERROR:{en:{summary:"Server error.",whatHappened:"Something went wrong on our side. We have logged the error and will investigate.",whatToDo:`Try again in a minute. If the problem persists, please contact ${t} with the details.`},"pt-BR":{summary:"Erro do servidor.",whatHappened:"Algo deu errado no nosso lado. O erro foi registrado e vamos investigar.",whatToDo:`Tente novamente em um minuto. Se o problema persistir, entre em contato: ${t}.`}},ECONNREFUSED:{en:{summary:"Cannot reach the Neocortex server.",whatHappened:"We could not open a connection to the server. This is usually a network problem on your side.",whatToDo:"Check your internet connection, any VPN or corporate proxy, and try again."},"pt-BR":{summary:"N\xE3o foi poss\xEDvel alcan\xE7ar o servidor Neocortex.",whatHappened:"N\xE3o conseguimos abrir uma conex\xE3o com o servidor. Isso geralmente \xE9 um problema de rede do seu lado.",whatToDo:"Verifique sua conex\xE3o, qualquer VPN ou proxy corporativo, e tente novamente."}},MACHINE_LIMIT_EXCEEDED:{en:{summary:"Machine limit reached.",whatHappened:"Your plan allows a limited number of active machines, and this one would exceed it.",whatToDo:"Deactivate a machine you no longer use from the portal, then re-run activate here.",url:"https://neocortex.sh/portal/machines"},"pt-BR":{summary:"Limite de m\xE1quinas atingido.",whatHappened:"Seu plano permite um n\xFAmero limitado de m\xE1quinas ativas, e esta ultrapassaria o limite.",whatToDo:"Desative uma m\xE1quina que voc\xEA n\xE3o usa mais no portal e rode activate aqui de novo.",url:"https://neocortex.sh/portal/machines"}},NOT_CONFIGURED:{en:{summary:"Neocortex is not configured on this machine.",whatHappened:"No license key was found. You need to run `neocortex activate` once before using the CLI.",whatToDo:"Get a license key from the portal and activate.",command:"neocortex activate YOUR-LICENSE-KEY",url:"https://neocortex.sh/portal"},"pt-BR":{summary:"Neocortex n\xE3o est\xE1 configurado nesta m\xE1quina.",whatHappened:"Nenhuma license key encontrada. Voc\xEA precisa rodar `neocortex activate` uma vez antes de usar o CLI.",whatToDo:"Pegue uma license key no portal e ative.",command:"neocortex activate SUA-LICENSE-KEY",url:"https://neocortex.sh/portal"}}};function r(o=process.env){return(o.LC_ALL??o.LANG??"").toLowerCase().startsWith("pt")?"pt-BR":"en"}function p(o,a=r()){const e=u[o];return e?e[a]??e.en??null:null}function c(o,a=r()){const e=[];e.push(""),e.push(`[Neocortex] ${o.summary}`),e.push("");const n=a==="pt-BR"?"O que aconteceu":"What happened",s=a==="pt-BR"?"O que fazer":"What to do",i=a==="pt-BR"?`Precisa de ajuda? ${t}`:`Need help? ${t}`;return e.push(`${n}: ${o.whatHappened}`),e.push(`${s}: ${o.whatToDo}`),o.command&&(e.push(""),e.push(` ${o.command}`)),o.url&&(e.push(""),e.push(` ${o.url}`)),e.push(""),e.push(i),e.push(""),e.join(`
2
- `)}function l(o){if(!o||typeof o!="object")return null;const a=o;return typeof a.code=="string"&&(a.code==="ECONNREFUSED"||a.code==="ENOTFOUND"||a.code==="ETIMEDOUT"||a.code==="ECONNRESET")||typeof a.message=="string"&&(/connect/i.test(a.message)&&/refus/i.test(a.message)||/fetch failed/i.test(a.message))?"ECONNREFUSED":null}export{r as detectErrorLocale,c as formatHumanizedError,p as humanizeError,l as inferErrorCodeFromException};
1
+ const t="support@neocortex.sh",u={AUTH_REFRESH_REQUIRED:{en:{summary:"Authentication must be refreshed.",whatHappened:"Strict read-only mode found configured credentials, but no safely reusable token is available. It did not refresh or change authentication state.",whatToDo:"Re-activate outside strict read-only mode, then retry the command.",command:"neocortex activate YOUR-LICENSE-KEY",url:"https://neocortex.sh/portal"},"pt-BR":{summary:"A autentica\xE7\xE3o precisa ser renovada.",whatHappened:"O modo estritamente somente leitura encontrou credenciais configuradas, mas nenhum token reutiliz\xE1vel com seguran\xE7a. Nenhum refresh ou estado de autentica\xE7\xE3o foi alterado.",whatToDo:"Reative fora do modo estritamente somente leitura e tente o comando novamente.",command:"neocortex activate SUA-LICENSE-KEY",url:"https://neocortex.sh/portal"}},AUTH_EXPIRED:{en:{summary:"Your session has expired.",whatHappened:"The token we use to authenticate your CLI has expired. This is normal and happens every few hours.",whatToDo:"Re-activate with the license key that was emailed to you.",command:"neocortex activate YOUR-LICENSE-KEY",url:"https://neocortex.sh/portal"},"pt-BR":{summary:"Sua sess\xE3o expirou.",whatHappened:"O token de autentica\xE7\xE3o do CLI expirou. Isso \xE9 normal e acontece a cada poucas horas.",whatToDo:"Reative o CLI com a license key que voc\xEA recebeu por email.",command:"neocortex activate SUA-LICENSE-KEY",url:"https://neocortex.sh/portal"}},UPGRADE_REQUIRED:{en:{summary:"Your CLI version is outdated.",whatHappened:"The server requires a newer CLI version. Older versions are not allowed for security and compatibility reasons.",whatToDo:"Install the latest CLI globally with npm.",command:"npm install -g @ornexus/neocortex@latest"},"pt-BR":{summary:"Sua vers\xE3o do CLI est\xE1 desatualizada.",whatHappened:"O servidor exige uma vers\xE3o mais recente do CLI. Vers\xF5es antigas n\xE3o s\xE3o permitidas por motivos de seguran\xE7a e compatibilidade.",whatToDo:"Instale a vers\xE3o mais recente globalmente via npm.",command:"npm install -g @ornexus/neocortex@latest"}},RATE_LIMITED:{en:{summary:"You sent too many requests in a short window.",whatHappened:"You hit the rate limit for your plan. This protects the service from abuse and keeps it fast for everyone.",whatToDo:"Wait a few seconds and try again. If you hit this often, upgrading your plan raises the limit.",url:"https://neocortex.sh/portal/plans"},"pt-BR":{summary:"Voc\xEA fez muitas requisi\xE7\xF5es em pouco tempo.",whatHappened:"O limite de taxa do seu plano foi atingido. Isso protege o servi\xE7o contra abuso e mant\xE9m a velocidade para todos.",whatToDo:"Espere alguns segundos e tente novamente. Se isso acontece com frequ\xEAncia, fazer upgrade do seu plano aumenta o limite.",url:"https://neocortex.sh/portal/plans"}},TRIGGER_NOT_ALLOWED:{en:{summary:"This command is not available on your current plan.",whatHappened:"You tried to use a trigger that requires a paid plan (Pro or Enterprise).",whatToDo:"See the full comparison and upgrade in the portal.",url:"https://neocortex.sh/portal/plans"},"pt-BR":{summary:"Este comando n\xE3o est\xE1 dispon\xEDvel no seu plano atual.",whatHappened:"Voc\xEA tentou usar um trigger que requer um plano pago (Pro ou Enterprise).",whatToDo:"Veja a compara\xE7\xE3o completa e fa\xE7a upgrade no portal.",url:"https://neocortex.sh/portal/plans"}},QUOTA_EXCEEDED:{en:{summary:"Daily quota reached.",whatHappened:"You have used all invocations allowed by your plan today. Quotas reset at midnight UTC.",whatToDo:"Wait for the daily reset, or upgrade your plan for a higher quota.",url:"https://neocortex.sh/portal/plans"},"pt-BR":{summary:"Quota di\xE1ria atingida.",whatHappened:"Voc\xEA usou todas as invoca\xE7\xF5es permitidas pelo seu plano hoje. As quotas s\xE3o resetadas \xE0 meia-noite UTC.",whatToDo:"Aguarde o reset di\xE1rio ou fa\xE7a upgrade do plano para uma quota maior.",url:"https://neocortex.sh/portal/plans"}},SERVER_ERROR:{en:{summary:"Server error.",whatHappened:"Something went wrong on our side. We have logged the error and will investigate.",whatToDo:`Try again in a minute. If the problem persists, please contact ${t} with the details.`},"pt-BR":{summary:"Erro do servidor.",whatHappened:"Algo deu errado no nosso lado. O erro foi registrado e vamos investigar.",whatToDo:`Tente novamente em um minuto. Se o problema persistir, entre em contato: ${t}.`}},ECONNREFUSED:{en:{summary:"Cannot reach the Neocortex server.",whatHappened:"We could not open a connection to the server. This is usually a network problem on your side.",whatToDo:"Check your internet connection, any VPN or corporate proxy, and try again."},"pt-BR":{summary:"N\xE3o foi poss\xEDvel alcan\xE7ar o servidor Neocortex.",whatHappened:"N\xE3o conseguimos abrir uma conex\xE3o com o servidor. Isso geralmente \xE9 um problema de rede do seu lado.",whatToDo:"Verifique sua conex\xE3o, qualquer VPN ou proxy corporativo, e tente novamente."}},MACHINE_LIMIT_EXCEEDED:{en:{summary:"Machine limit reached.",whatHappened:"Your plan allows a limited number of active machines, and this one would exceed it.",whatToDo:"Deactivate a machine you no longer use from the portal, then re-run activate here.",url:"https://neocortex.sh/portal/machines"},"pt-BR":{summary:"Limite de m\xE1quinas atingido.",whatHappened:"Seu plano permite um n\xFAmero limitado de m\xE1quinas ativas, e esta ultrapassaria o limite.",whatToDo:"Desative uma m\xE1quina que voc\xEA n\xE3o usa mais no portal e rode activate aqui de novo.",url:"https://neocortex.sh/portal/machines"}},NOT_CONFIGURED:{en:{summary:"Neocortex is not configured on this machine.",whatHappened:"No license key was found. You need to run `neocortex activate` once before using the CLI.",whatToDo:"Get a license key from the portal and activate.",command:"neocortex activate YOUR-LICENSE-KEY",url:"https://neocortex.sh/portal"},"pt-BR":{summary:"Neocortex n\xE3o est\xE1 configurado nesta m\xE1quina.",whatHappened:"Nenhuma license key encontrada. Voc\xEA precisa rodar `neocortex activate` uma vez antes de usar o CLI.",whatToDo:"Pegue uma license key no portal e ative.",command:"neocortex activate SUA-LICENSE-KEY",url:"https://neocortex.sh/portal"}}};function r(o=process.env){return(o.LC_ALL??o.LANG??"").toLowerCase().startsWith("pt")?"pt-BR":"en"}function p(o,a=r()){const e=u[o];return e?e[a]??e.en??null:null}function c(o,a=r()){const e=[];e.push(""),e.push(`[Neocortex] ${o.summary}`),e.push("");const n=a==="pt-BR"?"O que aconteceu":"What happened",s=a==="pt-BR"?"O que fazer":"What to do",i=a==="pt-BR"?`Precisa de ajuda? ${t}`:`Need help? ${t}`;return e.push(`${n}: ${o.whatHappened}`),e.push(`${s}: ${o.whatToDo}`),o.command&&(e.push(""),e.push(` ${o.command}`)),o.url&&(e.push(""),e.push(` ${o.url}`)),e.push(""),e.push(i),e.push(""),e.join(`
2
+ `)}function m(o){if(!o||typeof o!="object")return null;const a=o;return typeof a.code=="string"&&(a.code==="ECONNREFUSED"||a.code==="ENOTFOUND"||a.code==="ETIMEDOUT"||a.code==="ECONNRESET")||typeof a.message=="string"&&(/connect/i.test(a.message)&&/refus/i.test(a.message)||/fetch failed/i.test(a.message))?"ECONNREFUSED":null}export{r as detectErrorLocale,c as formatHumanizedError,p as humanizeError,m as inferErrorCodeFromException};
@@ -9,6 +9,8 @@ export interface RichProjectEvidenceCandidate {
9
9
  export interface CollectProjectEvidenceOptions {
10
10
  readonly projectRoot: string;
11
11
  readonly candidatePaths?: readonly string[];
12
+ /** Scan the bounded repository inventory after all explicit files/directories. */
13
+ readonly includeFallbackInventory?: boolean;
12
14
  readonly richCandidates?: readonly RichProjectEvidenceCandidate[];
13
15
  readonly consent?: Partial<ProjectEvidenceConsent>;
14
16
  readonly collectedAt?: string;
@@ -1 +1 @@
1
- import{createHash as B}from"node:crypto";import{lstatSync as E,readdirSync as F,readFileSync as $,realpathSync as _,statSync as S}from"node:fs";import{isAbsolute as A,relative as j,resolve as g}from"node:path";const D=Object.freeze({maxItems:48,maxFileBytes:96*1024,maxTotalBytes:512*1024,maxSummaryChars:280,maxEnvelopeBytes:64*1024,maxExclusions:64}),k=512,I=/(?:\.tsx?|\.jsx?|\.vue|\.svelte|\.css|\.scss|\.json|\.ya?ml|\.mdx?|\.html)$/i,R=/\.(?:png|jpe?g|webp)$/i,H=new Set([".git",".neocortex","node_modules","dist","build","coverage","core","private","secrets","credentials","raw-logs"]),N=/(?:[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}|\b(?:api[-_ ]?key|license[-_ ]?key|password|secret|token)\b\s*[:=]|\b(?:sk|pk|ghp|github_pat)_[A-Za-z0-9_-]{12,}|https?:\/\/(?:localhost|127\.0\.0\.1|10\.\d+\.\d+\.\d+|192\.168\.\d+\.\d+|172\.(?:1[6-9]|2\d|3[01])\.\d+\.\d+|[^/\s]+\.(?:local|internal))\b|private\s+(?:prompt|workflow|customer data)|-----BEGIN [A-Z ]+PRIVATE KEY-----)/i,T=new Set(["metadata-only-v1","visual-pii-v1","strict-v1"]);function m(t){return B("sha256").update(t).digest("hex")}function y(t){if(Array.isArray(t))return`[${t.map(y).join(",")}]`;if(t&&typeof t=="object"){const e=t;return`{${Object.keys(e).sort().map(s=>`${JSON.stringify(s)}:${y(e[s])}`).join(",")}}`}return JSON.stringify(t)??"null"}function h(t){return t.trim().replace(/\\/g,"/").replace(/\/+/g,"/").replace(/^\.\//,"")}function w(t){const e=h(t);return!e||A(t)||e.startsWith("/")||/^[a-z]:[\\/]/i.test(t)?"absolute_path_rejected":e===".."||e.startsWith("../")||e.includes("/../")?"traversal_path_rejected":null}function P(t){return`evidence:${m(t).slice(0,16)}`}function c(t,e){return{sourceId:P(t),reasonCode:e}}function b(t){return h(t).toLowerCase().split("/").some(e=>e.startsWith(".env")||H.has(e))}function x(t,e){const s=j(t,e);return s===""||!s.startsWith("..")&&!A(s)}function C(t,e,s,i){if(!(s.length>=k))for(const o of F(e,{withFileTypes:!0}).sort((r,a)=>r.name.localeCompare(a.name))){if(s.length>=k)break;const r=g(e,o.name),a=h(j(t,r));if(!b(a)){if(o.isSymbolicLink()){i.push(c(a,"symlink_escape_rejected"));continue}if(o.isDirectory()){C(t,r,s,i);continue}o.isFile()&&I.test(o.name)&&s.push(a)}}}function Z(t){const e=t.toLowerCase();return/\.(?:stories|story)\.(?:tsx?|jsx?|mdx?)$/.test(e)||e.includes("/.storybook/")?"storybook":/(?:^|\/)(?:__tests__|tests?|e2e)(?:\/|$)|\.(?:test|spec)\.(?:tsx?|jsx?)$|playwright|vitest|jest/.test(e)?"validation":/(?:^|\/)(?:routes?|pages?|app)(?:\/|$)|(?:^|\/)router\./.test(e)?"route":/(?:^|\/)(?:components?|ui)(?:\/|$)|[A-Z][A-Za-z0-9_-]*\.(?:tsx|jsx|vue|svelte)$/.test(t)?"component":/(?:tokens?|theme|tailwind|design-system)|\.(?:css|scss)$/.test(e)?"token":/(?:openapi|asyncapi|contracts?|schemas?|events?)|\.(?:graphql|proto)$/.test(e)?"contract":e==="package.json"||e.startsWith("docs/architecture")||e.startsWith("docs/arquitetura-software")?"source_summary":null}function W(t,e){let s=0;const i=[/\bexport\s+(?:default\s+)?(?:async\s+)?(?:function|class|const|let|var|interface|type|enum)\s+([A-Za-z_$][\w$]*)/g,/\b(?:GET|POST|PUT|PATCH|DELETE|OPTIONS|HEAD)\b/g,/--([a-z][a-z0-9-]{1,64})\s*:/gi];for(const o of i)for(const r of e.matchAll(o)){const a=(r[1]??r[0]).replace(/^--/,"");if(/^[A-Za-z_$][\w$-]{0,64}$/.test(a)&&(s+=1),s>=12)break}return`${t}; lines=${e.split(/\r?\n/).length}; structuralIdentifiers=${s}`}function L(t,e){const s=e.match(/\.[A-Za-z0-9]+$/)?.[0].toLowerCase()??".json";return`evidence/${t}/${m(e).slice(0,20)}${s}`}function q(t,e){const s=t.consent??{},i=s.redactionPolicy&&T.has(s.redactionPolicy)?s.redactionPolicy:void 0,o=typeof s.expiresAt=="string"?s.expiresAt:void 0,r=Date.parse(e),a=o?Date.parse(o):Number.NaN,u=Number.isFinite(r)&&Number.isFinite(a)&&a>r&&a-r<=3600*1e3;return{richEvidence:s.richEvidence===!0&&!!i&&u,screenshots:s.screenshots===!0&&s.richEvidence===!0&&!!i&&u,liveEvidence:s.liveEvidence===!0&&s.richEvidence===!0&&!!i&&u,...i?{redactionPolicy:i}:{},...o?{expiresAt:o}:{}}}function G(t,e,s,i){const o=w(e);if(o)return{exclusion:c(e,o)};if(b(e)||N.test(e))return{exclusion:c(e,"private_evidence_rejected")};if(!s||!I.test(e))return{exclusion:c(e,"unsupported_file_type")};const r=g(t,e);if(!x(t,r))return{exclusion:c(e,"traversal_path_rejected")};if(E(r).isSymbolicLink())return{exclusion:c(e,"symlink_escape_rejected")};const u=_(r);if(!x(t,u))return{exclusion:c(e,"symlink_escape_rejected")};const d=S(u);if(!d.isFile())return{exclusion:c(e,"unsupported_file_type")};if(d.size>i.maxFileBytes)return{exclusion:c(e,"oversized_evidence")};const f=$(u);if(f.includes(0)||N.test(f.toString("utf8")))return{exclusion:c(e,"private_evidence_rejected")};const p=h(e),l=m(f),n=L(s,p);return{item:{id:`${s}:${m(`${p}:${l}`).slice(0,20)}`,kind:s,source:{path:n,contentHash:l,byteLength:d.size},summary:W(s,f.toString("utf8")).slice(0,i.maxSummaryChars)}}}function J(t,e,s,i){const o=w(e.path);if(o)return{exclusion:c(e.path,o)};if(!R.test(e.path))return{exclusion:c(e.path,"unsupported_file_type")};if(!s.richEvidence||(e.kind==="screenshot"?!s.screenshots:!s.liveEvidence))return{exclusion:c(e.path,"consent_required")};if(!e.redactionPolicy||!T.has(e.redactionPolicy)||e.redactionPolicy!==s.redactionPolicy)return{exclusion:c(e.path,"redaction_policy_required")};if(!e.expiresAt||e.expiresAt!==s.expiresAt)return{exclusion:c(e.path,"ttl_invalid")};if(b(e.path))return{exclusion:c(e.path,"private_evidence_rejected")};const r=g(t,e.path);if(!x(t,r))return{exclusion:c(e.path,"traversal_path_rejected")};if(E(r).isSymbolicLink())return{exclusion:c(e.path,"symlink_escape_rejected")};const u=_(r);if(!x(t,u))return{exclusion:c(e.path,"symlink_escape_rejected")};const d=S(u);if(!d.isFile())return{exclusion:c(e.path,"unsupported_file_type")};if(d.size>i.maxFileBytes)return{exclusion:c(e.path,"oversized_evidence")};const f=$(u),p=h(e.path),l={path:L(e.kind,p),contentHash:m(f),byteLength:d.size};return{item:{id:`${e.kind}:${m(`${p}:${l.contentHash}`).slice(0,20)}`,kind:e.kind,source:l,summary:`${e.kind}; metadata-only; bytes=${l.byteLength}`,consent:{redactionPolicy:e.redactionPolicy,expiresAt:e.expiresAt}}}}function U(t){const e=_(t.projectRoot),s=new Date(t.collectedAt??Date.now()).toISOString(),i={...D,...t.budget},o=q(t,s),r=[],a=[];t.candidatePaths?a.push(...t.candidatePaths):C(e,e,a,r);const u=[];let d=0;for(const l of[...new Set(a)].sort()){let n;try{n=G(e,l,Z(h(l)),i)}catch{n={exclusion:c(l,"malformed_evidence")}}if(n.exclusion&&r.push(n.exclusion),!!n.item){if(u.length>=i.maxItems||d+n.item.source.byteLength>i.maxTotalBytes){r.push(c(l,"budget_exceeded"));continue}u.push(n.item),d+=n.item.source.byteLength}}for(const l of t.richCandidates??[]){let n;try{n=J(e,l,o,i)}catch{n={exclusion:c(l.path,"malformed_evidence")}}if(n.exclusion&&r.push(n.exclusion),!!n.item){if(u.length>=i.maxItems||d+n.item.source.byteLength>i.maxTotalBytes){r.push(c(l.path,"budget_exceeded"));continue}u.push(n.item),d+=n.item.source.byteLength}}u.sort((l,n)=>l.kind.localeCompare(n.kind)||l.source.path.localeCompare(n.source.path));const f=m(y(u));let p={schemaVersion:1,envelopeId:`evidence-${f.slice(0,24)}`,evidenceHash:f,collectedAt:s,consent:o,budget:{...i,acceptedItems:u.length,acceptedBytes:d},evidence:u,exclusions:r.slice(0,i.maxExclusions)};for(;Buffer.byteLength(JSON.stringify(p),"utf8")>i.maxEnvelopeBytes&&p.evidence.length>0;){const l=p.evidence.at(-1),n=p.evidence.slice(0,-1),v=m(y(n));p={...p,envelopeId:`evidence-${v.slice(0,24)}`,evidenceHash:v,budget:{...p.budget,acceptedItems:n.length,acceptedBytes:n.reduce((z,O)=>z+O.source.byteLength,0)},evidence:n,exclusions:[...p.exclusions,c(l.id,"budget_exceeded")].slice(0,i.maxExclusions)}}return p}export{D as CLIENT_PROJECT_EVIDENCE_BUDGET,U as collectProjectEvidence};
1
+ import{createHash as q}from"node:crypto";import{lstatSync as A,readdirSync as G,readFileSync as z,realpathSync as E,statSync as O}from"node:fs";import{isAbsolute as F,relative as B,resolve as $}from"node:path";const J=Object.freeze({maxItems:48,maxFileBytes:96*1024,maxTotalBytes:512*1024,maxSummaryChars:280,maxEnvelopeBytes:64*1024,maxExclusions:64}),S=512,D=/(?:\.tsx?|\.jsx?|\.vue|\.svelte|\.css|\.scss|\.json|\.ya?ml|\.mdx?|\.html)$/i,V=/\.(?:png|jpe?g|webp)$/i,X=new Set([".git",".neocortex","node_modules","dist","build","coverage","core","private","secrets","credentials","raw-logs"]),I=/(?:[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}|\b(?:api[-_ ]?key|license[-_ ]?key|password|secret|token)\b\s*[:=]|\b(?:sk|pk|ghp|github_pat)_[A-Za-z0-9_-]{12,}|https?:\/\/(?:localhost|127\.0\.0\.1|10\.\d+\.\d+\.\d+|192\.168\.\d+\.\d+|172\.(?:1[6-9]|2\d|3[01])\.\d+\.\d+|[^/\s]+\.(?:local|internal))\b|private\s+(?:prompt|workflow|customer data)|-----BEGIN [A-Z ]+PRIVATE KEY-----)/i,R=new Set(["metadata-only-v1","visual-pii-v1","strict-v1"]);function _(t){return q("sha256").update(t).digest("hex")}function j(t){if(Array.isArray(t))return`[${t.map(j).join(",")}]`;if(t&&typeof t=="object"){const e=t;return`{${Object.keys(e).sort().map(s=>`${JSON.stringify(s)}:${j(e[s])}`).join(",")}}`}return JSON.stringify(t)??"null"}function h(t){return t.trim().replace(/\\/g,"/").replace(/\/+/g,"/").replace(/^\.\//,"")}function N(t){const e=h(t);return!e||F(t)||e.startsWith("/")||/^[a-z]:[\\/]/i.test(t)?"absolute_path_rejected":e===".."||e.startsWith("../")||e.includes("/../")?"traversal_path_rejected":null}function K(t){return`evidence:${_(t).slice(0,16)}`}function c(t,e){return{sourceId:K(t),reasonCode:e}}function k(t){return h(t).toLowerCase().split("/").some(e=>e.startsWith(".env")||X.has(e))}function b(t,e){const s=B(t,e);return s===""||!s.startsWith("..")&&!F(s)}function w(t,e,s,r,u=S){if(!(s.length>=u))for(const i of G(e,{withFileTypes:!0}).sort((a,l)=>a.name.localeCompare(l.name))){if(s.length>=u)break;const a=$(e,i.name),l=h(B(t,a));if(!k(l)){if(i.isSymbolicLink()){r.push(c(l,"symlink_escape_rejected"));continue}if(i.isDirectory()){w(t,a,s,r,u);continue}i.isFile()&&D.test(i.name)&&s.push(l)}}}function U(t,e,s,r){const u=N(e);if(u){r.push(c(e,u));return}const i=h(e);if(k(i)||I.test(i)){r.push(c(e,"private_evidence_rejected"));return}const a=$(t,i);if(!b(t,a)){r.push(c(e,"traversal_path_rejected"));return}const l=A(a);if(l.isSymbolicLink()){r.push(c(e,"symlink_escape_rejected"));return}const p=E(a);if(!b(t,p)){r.push(c(e,"symlink_escape_rejected"));return}if(l.isDirectory()){w(t,p,s,r);return}l.isFile()&&s.push(i)}function Y(t){const e=t.toLowerCase();return/\.(?:stories|story)\.(?:tsx?|jsx?|mdx?)$/.test(e)||e.includes("/.storybook/")?"storybook":/(?:^|\/)(?:__tests__|tests?|e2e)(?:\/|$)|\.(?:test|spec)\.(?:tsx?|jsx?)$|playwright|vitest|jest/.test(e)?"validation":/(?:^|\/)(?:routes?|pages?|app)(?:\/|$)|(?:^|\/)router\./.test(e)?"route":/(?:^|\/)(?:components?|ui)(?:\/|$)|[A-Z][A-Za-z0-9_-]*\.(?:tsx|jsx|vue|svelte)$/.test(t)?"component":/(?:tokens?|theme|tailwind|design-system)|\.(?:css|scss)$/.test(e)?"token":/(?:openapi|asyncapi|contracts?|schemas?|events?)|\.(?:graphql|proto)$/.test(e)?"contract":e==="package.json"||e.startsWith("docs/architecture")||e.startsWith("docs/arquitetura-software")?"source_summary":null}function Q(t,e){let s=0;const r=[/\bexport\s+(?:default\s+)?(?:async\s+)?(?:function|class|const|let|var|interface|type|enum)\s+([A-Za-z_$][\w$]*)/g,/\b(?:GET|POST|PUT|PATCH|DELETE|OPTIONS|HEAD)\b/g,/--([a-z][a-z0-9-]{1,64})\s*:/gi];for(const u of r)for(const i of e.matchAll(u)){const a=(i[1]??i[0]).replace(/^--/,"");if(/^[A-Za-z_$][\w$-]{0,64}$/.test(a)&&(s+=1),s>=12)break}return`${t}; lines=${e.split(/\r?\n/).length}; structuralIdentifiers=${s}`}function H(t,e){const s=e.match(/\.[A-Za-z0-9]+$/)?.[0].toLowerCase()??".json";return`evidence/${t}/${_(e).slice(0,20)}${s}`}function ee(t,e){const s=t.consent??{},r=s.redactionPolicy&&R.has(s.redactionPolicy)?s.redactionPolicy:void 0,u=typeof s.expiresAt=="string"?s.expiresAt:void 0,i=Date.parse(e),a=u?Date.parse(u):Number.NaN,l=Number.isFinite(i)&&Number.isFinite(a)&&a>i&&a-i<=3600*1e3;return{richEvidence:s.richEvidence===!0&&!!r&&l,screenshots:s.screenshots===!0&&s.richEvidence===!0&&!!r&&l,liveEvidence:s.liveEvidence===!0&&s.richEvidence===!0&&!!r&&l,...r?{redactionPolicy:r}:{},...u?{expiresAt:u}:{}}}function te(t,e,s,r){const u=N(e);if(u)return{exclusion:c(e,u)};if(k(e)||I.test(e))return{exclusion:c(e,"private_evidence_rejected")};if(!s||!D.test(e))return{exclusion:c(e,"unsupported_file_type")};const i=$(t,e);if(!b(t,i))return{exclusion:c(e,"traversal_path_rejected")};if(A(i).isSymbolicLink())return{exclusion:c(e,"symlink_escape_rejected")};const l=E(i);if(!b(t,l))return{exclusion:c(e,"symlink_escape_rejected")};const p=O(l);if(!p.isFile())return{exclusion:c(e,"unsupported_file_type")};if(p.size>r.maxFileBytes)return{exclusion:c(e,"oversized_evidence")};const y=z(l);if(y.includes(0)||I.test(y.toString("utf8")))return{exclusion:c(e,"private_evidence_rejected")};const f=h(e),d=_(y),g=H(s,f);return{item:{id:`${s}:${_(`${f}:${d}`).slice(0,20)}`,kind:s,source:{path:g,contentHash:d,byteLength:p.size},summary:Q(s,y.toString("utf8")).slice(0,r.maxSummaryChars)}}}function se(t,e,s,r){const u=N(e.path);if(u)return{exclusion:c(e.path,u)};if(!V.test(e.path))return{exclusion:c(e.path,"unsupported_file_type")};if(!s.richEvidence||(e.kind==="screenshot"?!s.screenshots:!s.liveEvidence))return{exclusion:c(e.path,"consent_required")};if(!e.redactionPolicy||!R.has(e.redactionPolicy)||e.redactionPolicy!==s.redactionPolicy)return{exclusion:c(e.path,"redaction_policy_required")};if(!e.expiresAt||e.expiresAt!==s.expiresAt)return{exclusion:c(e.path,"ttl_invalid")};if(k(e.path))return{exclusion:c(e.path,"private_evidence_rejected")};const i=$(t,e.path);if(!b(t,i))return{exclusion:c(e.path,"traversal_path_rejected")};if(A(i).isSymbolicLink())return{exclusion:c(e.path,"symlink_escape_rejected")};const l=E(i);if(!b(t,l))return{exclusion:c(e.path,"symlink_escape_rejected")};const p=O(l);if(!p.isFile())return{exclusion:c(e.path,"unsupported_file_type")};if(p.size>r.maxFileBytes)return{exclusion:c(e.path,"oversized_evidence")};const y=z(l),f=h(e.path),d={path:H(e.kind,f),contentHash:_(y),byteLength:p.size};return{item:{id:`${e.kind}:${_(`${f}:${d.contentHash}`).slice(0,20)}`,kind:e.kind,source:d,summary:`${e.kind}; metadata-only; bytes=${d.byteLength}`,consent:{redactionPolicy:e.redactionPolicy,expiresAt:e.expiresAt}}}}function ce(t){const e=E(t.projectRoot),s=new Date(t.collectedAt??Date.now()).toISOString(),r={...J,...t.budget},u=ee(t,s),i=[],a=[];for(const n of[...t.candidatePaths??[]].sort()){try{U(e,n,a,i)}catch{i.push(c(n,"malformed_evidence"))}if(a.length>=S)break}const l=[];(!t.candidatePaths||t.includeFallbackInventory===!0)&&w(e,e,l,i,Math.max(0,S-a.length));const p=new Set(a.map(h)),y=[...new Set([...a,...l])].slice(0,S),f=[];for(const n of y){let o;try{o=te(e,n,Y(h(n)),r)}catch{o={exclusion:c(n,"malformed_evidence")}}o.exclusion&&i.push(o.exclusion),o.item&&f.push({candidate:n,explicit:p.has(h(n)),item:o.item})}const d=new Map;for(const n of f)d.set(n.item.kind,[...d.get(n.item.kind)??[],n]);const g=(n,o)=>Number(o.explicit)-Number(n.explicit)||n.candidate.localeCompare(o.candidate);for(const n of d.values())n.sort(g);const C=[...d.keys()].sort().flatMap(n=>d.get(n)?.slice(0,1)??[]),P=new Set(C.map(n=>n.item.id)),Z=f.filter(n=>!P.has(n.item.id)).sort(g),x=[];let v=0;for(const n of[...C,...Z]){if(x.length>=r.maxItems||v+n.item.source.byteLength>r.maxTotalBytes){i.push(c(n.candidate,"budget_exceeded"));continue}x.push(n.item),v+=n.item.source.byteLength}for(const n of t.richCandidates??[]){let o;try{o=se(e,n,u,r)}catch{o={exclusion:c(n.path,"malformed_evidence")}}if(o.exclusion&&i.push(o.exclusion),!!o.item){if(x.length>=r.maxItems||v+o.item.source.byteLength>r.maxTotalBytes){i.push(c(n.path,"budget_exceeded"));continue}x.push(o.item),v+=o.item.source.byteLength}}x.sort((n,o)=>n.kind.localeCompare(o.kind)||n.source.path.localeCompare(o.source.path));const T=_(j(x));let m={schemaVersion:1,envelopeId:`evidence-${T.slice(0,24)}`,evidenceHash:T,collectedAt:s,consent:u,budget:{...r,acceptedItems:x.length,acceptedBytes:v},evidence:x,exclusions:i.slice(0,r.maxExclusions)};for(;Buffer.byteLength(JSON.stringify(m),"utf8")>r.maxEnvelopeBytes&&m.evidence.length>0;){const n=m.evidence.at(-1),o=m.evidence.slice(0,-1),L=_(j(o));m={...m,envelopeId:`evidence-${L.slice(0,24)}`,evidenceHash:L,budget:{...m.budget,acceptedItems:o.length,acceptedBytes:o.reduce((M,W)=>M+W.source.byteLength,0)},evidence:o,exclusions:[...m.exclusions,c(n.id,"budget_exceeded")].slice(0,r.maxExclusions)}}return m}export{J as CLIENT_PROJECT_EVIDENCE_BUDGET,ce as collectProjectEvidence};
@@ -24,6 +24,15 @@ interface ActivationResult {
24
24
  readonly expiresIn: number;
25
25
  readonly refreshToken?: string;
26
26
  }
27
+ export type LicenseTokenInspection = {
28
+ readonly status: 'authenticated';
29
+ readonly token: string;
30
+ } | {
31
+ readonly status: 'refresh-required';
32
+ readonly reason: 'expired' | 'near-expiry' | 'unavailable';
33
+ } | {
34
+ readonly status: 'not-configured';
35
+ };
27
36
  export declare class LicenseClient {
28
37
  private readonly serverUrl;
29
38
  private readonly licenseKey;
@@ -47,6 +56,8 @@ export declare class LicenseClient {
47
56
  * 6. activate() -> return
48
57
  */
49
58
  getToken(): Promise<string | null>;
59
+ /** Read-only authentication classification. It never refreshes, activates, clears or writes cache state. */
60
+ inspectToken(): Promise<LicenseTokenInspection>;
50
61
  /**
51
62
  * Activate the license by calling POST /api/v1/license/activate.
52
63
  * Stores token and refresh_token in memory and cache on success.
@@ -1 +1 @@
1
- import{decodeJwt as c}from"jose";import{NoOpCache as a}from"../types/index.js";import{getMachineFingerprint as o}from"../machine/fingerprint.js";const i="neocortex:jwt:token",s="neocortex:jwt:refresh_token",l=300,h=10080*60*1e3,f="0.1.0";class T{serverUrl;licenseKey;cache;clientVersion;machineId;strictReadOnly;token=null;refreshToken=null;constructor(e){this.serverUrl=e.serverUrl.replace(/\/+$/,""),this.licenseKey=e.licenseKey,this.cache=e.cacheProvider??new a,this.clientVersion=e.clientVersion??f,this.strictReadOnly=e.strictReadOnly??!1,this.machineId=o({strictReadOnly:this.strictReadOnly})}async getToken(){try{if(this.token){const r=this.checkTokenValidity(this.token);if(r==="valid")return this.token;if(r==="needs-refresh")return this.strictReadOnly?this.token:(await this.refresh())?.token??this.token;this.token=null}const e=await this.loadFromCache();if(e){this.token=e;const r=this.checkTokenValidity(e);if(r==="valid")return e;if(r==="needs-refresh")return this.strictReadOnly?e:(await this.refresh())?.token??e;this.token=null}if(this.strictReadOnly)return null;if(this.refreshToken||(this.refreshToken=await this.loadRefreshTokenFromCache()),this.refreshToken){const r=await this.refresh();if(r?.token)return r.token}return(await this.activate())?.token??null}catch{return null}}async activate(){if(this.strictReadOnly)return null;try{const e=await fetch(`${this.serverUrl}/api/v1/license/activate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({license_key:this.licenseKey,machine_id:this.machineId,client_version:this.clientVersion})});if(!e.ok)return null;const t=await e.json();return this.token=t.token,this.refreshToken=t.refresh_token??null,await this.cache.set(i,t.token,t.expires_in*1e3).catch(()=>{}),t.refresh_token&&await this.cache.set(s,t.refresh_token,h).catch(()=>{}),{token:t.token,expiresIn:t.expires_in,refreshToken:t.refresh_token}}catch{return null}}async refresh(e){if(this.strictReadOnly)return null;try{const t=this.refreshToken??await this.loadRefreshTokenFromCache();if(!t)return null;const r=await fetch(`${this.serverUrl}/api/v1/license/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refresh_token:t})});if(!r.ok)return this.refreshToken=null,await this.cache.set(s,"",1).catch(()=>{}),null;const n=await r.json();return this.token=n.token,this.refreshToken=n.refresh_token??null,await this.cache.set(i,n.token,n.expires_in*1e3).catch(()=>{}),n.refresh_token&&await this.cache.set(s,n.refresh_token,h).catch(()=>{}),{token:n.token,expiresIn:n.expires_in,refreshToken:n.refresh_token}}catch{return null}}async forceRefresh(){if(this.strictReadOnly)return null;try{const e=await this.refresh();return e?.token?e.token:(this.token=null,this.refreshToken=null,await this.cache.clear().catch(()=>{}),(await this.activate())?.token??null)}catch{return null}}checkTokenValidity(e){try{const t=c(e);if(!t.exp)return"expired";const r=Math.floor(Date.now()/1e3);return t.exp<=r?"expired":t.exp-r<=l?"needs-refresh":"valid"}catch{return"expired"}}async loadFromCache(){try{return await this.cache.get(i)}catch{return null}}async loadRefreshTokenFromCache(){try{const e=await this.cache.get(s);return e&&e.length>0?e:null}catch{return null}}}export{T as LicenseClient};
1
+ import{decodeJwt as h}from"jose";import{NoOpCache as c}from"../types/index.js";import{getMachineFingerprint as o}from"../machine/fingerprint.js";const i="neocortex:jwt:token",s="neocortex:jwt:refresh_token",l=300,a=10080*60*1e3,u="0.1.0";class T{serverUrl;licenseKey;cache;clientVersion;machineId;strictReadOnly;token=null;refreshToken=null;constructor(e){this.serverUrl=e.serverUrl.replace(/\/+$/,""),this.licenseKey=e.licenseKey,this.cache=e.cacheProvider??new c,this.clientVersion=e.clientVersion??u,this.strictReadOnly=e.strictReadOnly??!1,this.machineId=o({strictReadOnly:this.strictReadOnly})}async getToken(){try{if(this.strictReadOnly){const r=await this.inspectToken();return r.status==="authenticated"?r.token:null}if(this.token){const r=this.checkTokenValidity(this.token);if(r==="valid")return this.token;if(r==="needs-refresh")return this.strictReadOnly?this.token:(await this.refresh())?.token??this.token;this.token=null}const e=await this.loadFromCache();if(e){this.token=e;const r=this.checkTokenValidity(e);if(r==="valid")return e;if(r==="needs-refresh")return this.strictReadOnly?e:(await this.refresh())?.token??e;this.token=null}if(this.strictReadOnly)return null;if(this.refreshToken||(this.refreshToken=await this.loadRefreshTokenFromCache()),this.refreshToken){const r=await this.refresh();if(r?.token)return r.token}return(await this.activate())?.token??null}catch{return null}}async inspectToken(){try{const e=this.token??await this.loadFromCache();if(e){const t=this.checkTokenValidity(e);return t==="valid"?{status:"authenticated",token:e}:{status:"refresh-required",reason:t==="needs-refresh"?"near-expiry":"expired"}}return this.licenseKey?{status:"refresh-required",reason:"unavailable"}:{status:"not-configured"}}catch{return this.licenseKey?{status:"refresh-required",reason:"unavailable"}:{status:"not-configured"}}}async activate(){if(this.strictReadOnly)return null;try{const e=await fetch(`${this.serverUrl}/api/v1/license/activate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({license_key:this.licenseKey,machine_id:this.machineId,client_version:this.clientVersion})});if(!e.ok)return null;const t=await e.json();return this.token=t.token,this.refreshToken=t.refresh_token??null,await this.cache.set(i,t.token,t.expires_in*1e3).catch(()=>{}),t.refresh_token&&await this.cache.set(s,t.refresh_token,a).catch(()=>{}),{token:t.token,expiresIn:t.expires_in,refreshToken:t.refresh_token}}catch{return null}}async refresh(e){if(this.strictReadOnly)return null;try{const t=this.refreshToken??await this.loadRefreshTokenFromCache();if(!t)return null;const r=await fetch(`${this.serverUrl}/api/v1/license/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refresh_token:t})});if(!r.ok)return this.refreshToken=null,await this.cache.set(s,"",1).catch(()=>{}),null;const n=await r.json();return this.token=n.token,this.refreshToken=n.refresh_token??null,await this.cache.set(i,n.token,n.expires_in*1e3).catch(()=>{}),n.refresh_token&&await this.cache.set(s,n.refresh_token,a).catch(()=>{}),{token:n.token,expiresIn:n.expires_in,refreshToken:n.refresh_token}}catch{return null}}async forceRefresh(){if(this.strictReadOnly)return null;try{const e=await this.refresh();return e?.token?e.token:(this.token=null,this.refreshToken=null,await this.cache.clear().catch(()=>{}),(await this.activate())?.token??null)}catch{return null}}checkTokenValidity(e){try{const t=h(e);if(!t.exp)return"expired";const r=Math.floor(Date.now()/1e3);return t.exp<=r?"expired":t.exp-r<=l?"needs-refresh":"valid"}catch{return"expired"}}async loadFromCache(){try{return await this.cache.get(i)}catch{return null}}async loadRefreshTokenFromCache(){try{const e=await this.cache.get(s);return e&&e.length>0?e:null}catch{return null}}}export{T as LicenseClient};
@@ -4,6 +4,7 @@
4
4
  *
5
5
  * P190.06 -- runner root-owned execution plane for run_yoloop directives.
6
6
  */
7
+ import type { InvokeOptions, InvokeResult } from '../../commands/invoke.js';
7
8
  import { type ContinuityHeadlessExecutionAttemptStatus, type ContinuitySqliteStore } from '../../continuity/sqlite-store.js';
8
9
  import { HeadlessAdapterRegistry } from './adapters.js';
9
10
  import { type HeadlessAdapterExecutionOptions, type HeadlessAdapterId, type HeadlessRedactionEvidence } from './types.js';
@@ -41,6 +42,11 @@ export interface RunYoloopRootInvokeResult {
41
42
  readonly publicSafe?: true;
42
43
  }
43
44
  export type RunYoloopRootInvoker = (input: RunYoloopRootInvokeInput) => Promise<RunYoloopRootInvokeResult>;
45
+ export interface RunYoloopRootInvokeBoundary {
46
+ readonly projectRoot: string;
47
+ readonly timeoutMs: number;
48
+ }
49
+ export type RunYoloopRootInvokeTransport = (options: InvokeOptions, boundary: RunYoloopRootInvokeBoundary) => Promise<InvokeResult>;
44
50
  export interface RunYoloopExecutionPhaseOptions {
45
51
  readonly store: ContinuitySqliteStore;
46
52
  readonly projectRoot: string;
@@ -116,5 +122,5 @@ export interface RunYoloopExecutionPhaseSummary {
116
122
  readonly publicSafe: true;
117
123
  }
118
124
  export declare function isCanonicalDelegatedStoryPrompt(prompt: string): boolean;
119
- export declare function defaultYoloopRootInvoker(input: RunYoloopRootInvokeInput): Promise<RunYoloopRootInvokeResult>;
125
+ export declare function defaultYoloopRootInvoker(input: RunYoloopRootInvokeInput, invokeTransport?: RunYoloopRootInvokeTransport): Promise<RunYoloopRootInvokeResult>;
120
126
  export declare function runYoloopExecutionPhase(options: RunYoloopExecutionPhaseOptions): Promise<RunYoloopExecutionPhaseSummary>;
@@ -1,8 +1,10 @@
1
- import{createHash as Ee,randomBytes as Re}from"node:crypto";import{spawn as ve}from"node:child_process";import{existsSync as Pe}from"node:fs";import{join as ye}from"node:path";import{AUTONOMOUS_GOVERNANCE_EVIDENCE_TAG as Te,AUTONOMOUS_GOVERNANCE_REASON_CODES as he,autonomousGovernanceMetadata as xe,buildAutonomousGovernanceEnvelope as we,readAutonomousGovernanceEnvelopeFromMetadata as Le,recordAutonomousGovernance as De}from"../../continuity/autonomous-governance.js";import{createDefaultHeadlessAdapterRegistry as Me}from"./adapters.js";import{loadHeadlessRuntimeDefaults as Ne,resolveHeadlessRuntime as je}from"./resolver.js";import{DEFAULT_HEADLESS_EXECUTION_BACKOFF_MS as He,DEFAULT_HEADLESS_EXECUTION_LEASE_MS as ze,DEFAULT_HEADLESS_EXECUTION_LIMIT as Ke,DEFAULT_HEADLESS_EXECUTION_MAX_ATTEMPTS as $e,DEFAULT_HEADLESS_EXECUTION_STALE_LEASE_AFTER_MS as Be,DEFAULT_HEADLESS_EXECUTION_TIMEOUT_MS as Ue,headlessExecutionEntityId as V,runYoloExecutionPhase as Fe}from"./run-yolo.js";import{HEADLESS_REASON_CODES as p,boundPublicSummary as ie,hashPublicValue as w,redaction as _}from"./types.js";import{validatePhasedYoloopPlan as Ye}from"./prepared-story-bundle.js";import{createAnchoredContinuousStoryCommandRunner as Ve,createBranchlessContinuousStoryWorkspaceManager as qe}from"./continuous-story-workspace.js";import{executeEpicGitReconciliation as We,executeEpicTerminalGit as Ge}from"./epic-terminal-git-runner.js";import{createCliEpicTerminalGitAdapter as Xe}from"./epic-terminal-git-cli-adapter.js";import{acquireGitLifecyclePhysicalIntegrationLock as Ze,releaseGitLifecyclePhysicalIntegrationLock as Je}from"../../git/git-lifecycle-store.js";import{normalizeContinuousWriteRef as Qe}from"../../../../shared/dist/yoloop/wave-decision-receipt.js";const et=20,tt=1800*1e3,_e=1,ot=10,so=Object.freeze(["start","lifecycle_evidence","metadata_parse","child_story_delegation","reinvoke","git_reconciliation","terminal_git","complete","aborted","backoff"]),de=/^docs\/epics\/epic-[A-Za-z0-9._-]+\.md$/,rt=/^docs\/stories\/[A-Za-z0-9._-]+\.story\.md$/,ce=/^\*yolo @docs\/stories\/[A-Za-z0-9._-]+\.story\.md(?: branchless-preparation)?$/,at=/^\*yolo @docs\/stories\/[A-Za-z0-9._-]+\.story\.md branchless-preparation$/,nt=/^(?:\uFEFF)?---(?:\r?\n)/,st=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/,q=/(?:[;&|`$<>]|\$\(|\n|\r|\0)/,te=/(raw[_-]?(?:logs?|payloads?)|std(?:out|err)|stack(?:[_-]?trace)?|transcript|objective(?:[_-]?(?:text|body|prompt))|prompt(?:[_-]?(?:body|text))?|private[_-]?(?:urls?|prompts?)|secret|token|password|protected(?:[_-]?(?:field|body|bodies|internals))?|workflow(?:[_-]?body)?|step(?:[_-]?body)?|customer(?:[_-]?(?:pii|data))?|\bpii\b|authorization|api[_-]?key|license[_-]?key|argv|args|executable(?:[_-]?path)?|binary(?:[_-]?path)?|shell|cwd|command[_-]?path|vendor(?:[_-]?(?:payload|corpus|response|output)))/i,L=/(https?:\/\/\S+|(?:^|\s)(?:\/(?:home|Users|media|mnt|tmp|var|etc|private)\/\S+|[A-Za-z]:\\\S+)|ghp_[A-Za-z0-9_]+|sk-[A-Za-z0-9_-]+|-----BEGIN [A-Z ]*PRIVATE KEY-----|authorization\s*:|password\s*=|token\s*=|api[_-]?key\s*=|license[_-]?key\s*=|raw[_-]?(?:logs?)\s*[:=]|transcript|stack\s*trace|stderr:|stdout:|system prompt|workflow body|step body|PROTECTED_|PRIVATE_INTERNALS|CUSTOMER_PII|\bPII\b|VENDOR_CORPUS|P190[_-]?SYNTHETIC[_-]?(?:HEADLESS|CONTINUITY))/i,it=new Set(["no_private_prompt_or_history","no_raw_vendor_corpus","no_unrelated_story_context"]);function Ce(e){return nt.test(e)||e.includes("@neocortex")||e.includes("*yoloop")||q.test(e)||L.test(e)}function io(e){return!Ce(e)&&ce.test(e)}const dt=new Set(["schemaVersion","contractVersion","kind","commandClass","jobId","operationId","idempotencyKey","targetKind","targetRef","commandRef","epicId","runtime","publicSummary","reasonCode","attempts","metadata","redactionSummary","publicSafe"]),ct=new Set(["runtimeId","modelId","source","reasonCode","publicSafe"]),lt="job-aborted",ut="max-iterations-reached",pt="max-duration-reached",mt=new Set(["git-lifecycle-integration-backpressure","git-lifecycle-integration-lock-failed","git-lifecycle-integration-lock-release-failed"]);async function ft(e){const t=Date.now(),o=ye(__dirname,"../../commands/invoke.js"),a=Pe(o)?o:ye(__dirname,"../../../dist/commands/invoke.js"),r={args:e.args,projectRoot:e.projectRoot,format:"json",platformTarget:"runner",serverUrl:e.serverUrl,strictReadOnly:e.strictReadOnly},n=await new Promise(s=>{const i=ve(process.execPath,["-e",`
1
+ import{createHash as Ee,randomBytes as Re}from"node:crypto";import{spawn as ve}from"node:child_process";import{existsSync as Pe}from"node:fs";import{dirname as Te,join as ye}from"node:path";import{fileURLToPath as xe}from"node:url";import{AUTONOMOUS_GOVERNANCE_EVIDENCE_TAG as we,AUTONOMOUS_GOVERNANCE_REASON_CODES as he,autonomousGovernanceMetadata as Le,buildAutonomousGovernanceEnvelope as De,readAutonomousGovernanceEnvelopeFromMetadata as Me,recordAutonomousGovernance as Ne}from"../../continuity/autonomous-governance.js";import{createDefaultHeadlessAdapterRegistry as je}from"./adapters.js";import{loadHeadlessRuntimeDefaults as He,resolveHeadlessRuntime as ze}from"./resolver.js";import{DEFAULT_HEADLESS_EXECUTION_BACKOFF_MS as Ke,DEFAULT_HEADLESS_EXECUTION_LEASE_MS as $e,DEFAULT_HEADLESS_EXECUTION_LIMIT as Be,DEFAULT_HEADLESS_EXECUTION_MAX_ATTEMPTS as Ue,DEFAULT_HEADLESS_EXECUTION_STALE_LEASE_AFTER_MS as Fe,DEFAULT_HEADLESS_EXECUTION_TIMEOUT_MS as Ye,headlessExecutionEntityId as V,runYoloExecutionPhase as Ve}from"./run-yolo.js";import{HEADLESS_REASON_CODES as p,boundPublicSummary as ie,hashPublicValue as w,redaction as _}from"./types.js";import{validatePhasedYoloopPlan as qe}from"./prepared-story-bundle.js";import{createAnchoredContinuousStoryCommandRunner as We,createBranchlessContinuousStoryWorkspaceManager as Ge}from"./continuous-story-workspace.js";import{executeEpicGitReconciliation as Xe,executeEpicTerminalGit as Ze}from"./epic-terminal-git-runner.js";import{createCliEpicTerminalGitAdapter as Je}from"./epic-terminal-git-cli-adapter.js";import{acquireGitLifecyclePhysicalIntegrationLock as Qe,releaseGitLifecyclePhysicalIntegrationLock as et}from"../../git/git-lifecycle-store.js";import{normalizeContinuousWriteRef as tt}from"../../../../shared/dist/yoloop/wave-decision-receipt.js";const ot=20,rt=1800*1e3,_e=1,at=10,uo=Object.freeze(["start","lifecycle_evidence","metadata_parse","child_story_delegation","reinvoke","git_reconciliation","terminal_git","complete","aborted","backoff"]),de=/^docs\/epics\/epic-[A-Za-z0-9._-]+\.md$/,nt=/^docs\/stories\/[A-Za-z0-9._-]+\.story\.md$/,ce=/^\*yolo @docs\/stories\/[A-Za-z0-9._-]+\.story\.md(?: branchless-preparation)?$/,st=/^\*yolo @docs\/stories\/[A-Za-z0-9._-]+\.story\.md branchless-preparation$/,it=/^(?:\uFEFF)?---(?:\r?\n)/,dt=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/,q=/(?:[;&|`$<>]|\$\(|\n|\r|\0)/,te=/(raw[_-]?(?:logs?|payloads?)|std(?:out|err)|stack(?:[_-]?trace)?|transcript|objective(?:[_-]?(?:text|body|prompt))|prompt(?:[_-]?(?:body|text))?|private[_-]?(?:urls?|prompts?)|secret|token|password|protected(?:[_-]?(?:field|body|bodies|internals))?|workflow(?:[_-]?body)?|step(?:[_-]?body)?|customer(?:[_-]?(?:pii|data))?|\bpii\b|authorization|api[_-]?key|license[_-]?key|argv|args|executable(?:[_-]?path)?|binary(?:[_-]?path)?|shell|cwd|command[_-]?path|vendor(?:[_-]?(?:payload|corpus|response|output)))/i,L=/(https?:\/\/\S+|(?:^|\s)(?:\/(?:home|Users|media|mnt|tmp|var|etc|private)\/\S+|[A-Za-z]:\\\S+)|ghp_[A-Za-z0-9_]+|sk-[A-Za-z0-9_-]+|-----BEGIN [A-Z ]*PRIVATE KEY-----|authorization\s*:|password\s*=|token\s*=|api[_-]?key\s*=|license[_-]?key\s*=|raw[_-]?(?:logs?)\s*[:=]|transcript|stack\s*trace|stderr:|stdout:|system prompt|workflow body|step body|PROTECTED_|PRIVATE_INTERNALS|CUSTOMER_PII|\bPII\b|VENDOR_CORPUS|P190[_-]?SYNTHETIC[_-]?(?:HEADLESS|CONTINUITY))/i,ct=new Set(["no_private_prompt_or_history","no_raw_vendor_corpus","no_unrelated_story_context"]);function Ce(e){return it.test(e)||e.includes("@neocortex")||e.includes("*yoloop")||q.test(e)||L.test(e)}function po(e){return!Ce(e)&&ce.test(e)}const lt=new Set(["schemaVersion","contractVersion","kind","commandClass","jobId","operationId","idempotencyKey","targetKind","targetRef","commandRef","epicId","runtime","publicSummary","reasonCode","attempts","metadata","redactionSummary","publicSafe"]),ut=new Set(["runtimeId","modelId","source","reasonCode","publicSafe"]),pt="job-aborted",mt="max-iterations-reached",ft="max-duration-reached",yt=new Set(["git-lifecycle-integration-backpressure","git-lifecycle-integration-lock-failed","git-lifecycle-integration-lock-release-failed"]);async function ht(e,t){const o=Te(xe(import.meta.url)),a=ye(o,"../../commands/invoke.js"),r=Pe(a)?a:ye(o,"../../../dist/commands/invoke.js");return new Promise(s=>{const n=ve(process.execPath,["--input-type=module","-e",`
2
+ import { pathToFileURL } from 'node:url';
2
3
  process.once('message', async ({ modulePath, options }) => {
3
4
  try {
4
- const result = await require(modulePath).invoke(options);
5
+ const { invoke } = await import(pathToFileURL(modulePath).href);
6
+ const result = await invoke(options);
5
7
  process.send(result, () => process.exit(0));
6
8
  } catch { process.exit(1); }
7
9
  });
8
- `],{cwd:e.projectRoot,stdio:["ignore","pipe","pipe","ipc"],windowsHide:!0});let d,u=0,m=!1;const f=setTimeout(()=>{m=!0,i.kill()},e.timeoutMs),c=S=>{u+=S.length,u>32*1024*1024&&(m=!0,i.kill())};i.stdout?.on("data",c),i.stderr?.on("data",c),i.on("message",S=>{if(d||!I(S)||typeof S.success!="boolean"||Buffer.byteLength(JSON.stringify(S))>32*1024*1024){m=!0,i.kill();return}d=S});const h={success:!1,errorCode:"headless-root-invoke-failed",error:"The isolated root metadata invocation did not complete.",exitCode:1};i.on("error",()=>{m=!0}),i.on("close",S=>{clearTimeout(f),s(S===0&&!m&&d?d:h)}),i.send({modulePath:a,options:r},S=>{S&&(m=!0,i.kill())})});return{success:n.success,instructions:n.instructions,metadata:n.metadata,error:n.error,errorCode:n.errorCode,exitCode:n.exitCode,durationMs:Date.now()-t,publicSafe:!0}}async function co(e){const t=e.adapterRegistry??Me(),o=U(e.limit??Ke,1,10),a=U(e.leaseMs??ze,1e3,3600*1e3),r=U(e.staleLeaseAfterMs??Be,0,1440*60*1e3),n=U(e.maxAttempts??$e,1,10),s=U(e.localConcurrencyCap??_e,1,ot),i=[],d=[],u=e.now(),m=yt({store:e.store,metadata:e.metadata,nowIso:u,maxAttempts:n,queueCap:e.queueCap});i.push(...m.reasonCodes);const f=e.store.recoverStaleHeadlessExecutionAttempts({nowIso:u,staleAfterMs:r,limit:o*2});f.recoveredAttemptIds.length>0&&(i.push(p.EXECUTION_BACKOFF),f.failedAttemptIds.length>0&&i.push(p.EXECUTION_TIMEOUT));const c=e.store.listDueHeadlessExecutionAttempts({nowIso:e.now(),limit:Math.max(o*5,10)}).filter(h=>h.directive_kind==="run_yoloop").slice(0,o);for(const h of c){const S=await ht({store:e.store,projectRoot:e.projectRoot,runnerId:e.runnerId,attempt:h,registry:t,now:e.now,leaseMs:a,timeoutMs:U(e.timeoutMs??Ue,1e3,18e5),backoffMs:U(e.backoffMs??He,1e3,36e5),maxAttempts:n,maxIterations:U(e.maxIterations??et,1,100),maxDurationMs:U(e.maxDurationMs??tt,1e3,72e5),localConcurrencyCap:s,queueCap:e.queueCap,adapterOptions:e.adapterOptions,runtimeDefaults:e.runtimeDefaults,runtimeFallback:e.runtimeFallback,yoloopInvoker:e.yoloopInvoker??ft,serverUrl:e.serverUrl,idFactory:e.idFactory??Ut,continuousWorkspaceManager:e.continuousWorkspaceManager??qe(),terminalGitAdapter:e.terminalGitAdapter??Xe(e.projectRoot)});d.push(S),i.push(S.reasonCode,...S.workerPoolSummary.reasonCodes)}return{ok:d.every(h=>h.outcome!=="failed")&&m.rejectedCount===0,enqueuedAttemptCount:m.enqueuedCount,dueAttemptCount:c.length,processedAttemptCount:d.filter(h=>h.outcome!=="ignored").length,recoveredAttemptIds:f.recoveredAttemptIds,receipts:d,reasonCodes:B(i.length>0?i:[p.OK]),publicSafe:!0}}function yt(e){let t=0,o=0;const a=[];for(const r of Mt(e.metadata)){if(!I(r)||r.kind!=="run_yoloop")continue;const n=gt(r);if(!n.ok){o+=1,a.push(n.reasonCode);continue}const s=n.directive;if(!e.store.jobExists(s.jobId)){o+=1,a.push(he.BYPASS_BLOCKED);continue}const i=Nt(s);if(e.store.hasCompletedHeadlessExecutionDirectiveHash(i)){a.push(p.EXECUTION_COMPLETED);continue}const d=we({autonomousKind:"run_yoloop",source:"headless-run-yoloop",targetKind:"epic",targetRef:s.targetRef,epicId:s.epicId??re(s.targetRef),jobId:s.jobId,operationSeed:s.operationId,commandHash:w(s.commandRef)}),u=De(e.store,d,e.nowIso,{requireExistingJob:!0});if(!u.ok){o+=1,a.push(u.reasonCode);continue}const m=V("attempt",s.idempotencyKey),f=V("exec",s.operationId),c=e.store.enqueueHeadlessExecutionAttempt({attemptId:m,executionId:f,jobId:s.jobId,directiveHash:i,directiveKind:"run_yoloop",commandClass:s.commandClass,targetKind:"epic",targetRef:s.targetRef,epicId:s.epicId??re(s.targetRef),runtimeId:s.runtime?.runtimeId,modelId:s.runtime?.modelId,runtimeSource:Bt(s.runtime?.source),reasonCode:s.reasonCode,publicSummary:s.publicSummary,enqueuedAt:e.nowIso,notBeforeAt:e.nowIso,maxAttempts:e.maxAttempts,queueCap:e.queueCap,operationId:`${s.operationId}:enqueue`,idempotencyKey:s.idempotencyKey,counts:{directives:1},hashes:{directive:i},redactionSummary:s.redactionSummary,relativePaths:[s.targetRef],metadata:xe(d,{schemaVersion:1,contractVersion:"continuity-v1",jobId:s.jobId,operationId:s.operationId,reasonCode:s.reasonCode??p.OK,targetRef:s.targetRef,directiveHash:i})});if(!c.accepted){o+=1,a.push(c.reasonCode??"queue-cap-reached");continue}c.inserted&&(t+=1),a.push(p.OK)}return{enqueuedCount:t,rejectedCount:o,reasonCodes:B(a)}}async function ht(e){const t=e.now(),o=e.idFactory("lease",e.attempt.attempt_id),a=Oe(t,e.leaseMs);if(!e.store.claimHeadlessExecutionAttempt({attemptId:e.attempt.attempt_id,leaseId:o,runnerId:e.runnerId,claimedAt:t,leaseExpiresAt:a,reasonCode:p.OK}).inserted)return wt(e.attempt,{status:e.attempt.status,receiptStatus:"ignored",reasonCode:"lease-conflict",timestamp:t});if(e.store.hasCompletedHeadlessExecutionDirectiveHash(e.attempt.directive_hash,e.attempt.attempt_id))return ue(e.store,e.attempt,{leaseId:o,runnerId:e.runnerId,status:"skipped",receiptStatus:"ignored",reasonCode:p.EXECUTION_COMPLETED,publicSummary:"Skipped duplicate run_yoloop directive because the directive hash is already completed.",completedAt:e.now(),counts:me(),hashes:{directive:e.attempt.directive_hash},redactionSummary:[],relativePaths:[e.attempt.target_ref],childStoryIds:[],stateTransitions:["start","complete"]});const s=Ct(e);if(!s.ok)return ue(e.store,e.attempt,{leaseId:o,runnerId:e.runnerId,status:s.status,receiptStatus:s.receiptStatus,reasonCode:s.reasonCode,publicSummary:s.publicSummary,completedAt:e.now(),counts:me(),hashes:{directive:e.attempt.directive_hash},redactionSummary:s.redactionSummary,relativePaths:zt(e.attempt),childStoryIds:[],stateTransitions:["start"]});const i=await _t({...e,prepared:s.input}),d=Lt(e.attempt,i,e.maxAttempts,e.backoffMs,e.now()),u=d.retry?"backoff":i.status,m=d.retry?"deferred":i.receiptStatus,f=d.retry?mt.has(i.reasonCode)?i.reasonCode:p.EXECUTION_BACKOFF:i.reasonCode,c=d.retry?"Headless run_yoloop execution scheduled bounded retry after transient metadata/runtime outcome.":i.publicSummary;return ue(e.store,e.attempt,{leaseId:o,runnerId:e.runnerId,status:u,receiptStatus:m,reasonCode:f,publicSummary:c,completedAt:e.now(),durationMs:i.durationMs,notBeforeAt:d.notBeforeAt,retryCount:d.retryCount,counts:i.counts,workerPoolSummary:i.workerPoolSummary,hashes:{...i.hashes,directive:e.attempt.directive_hash},redactionSummary:i.redactionSummary,relativePaths:i.relativePaths,childStoryIds:i.childStoryIds,runtimeId:s.input.runtimeId,modelId:s.input.modelId,runtimeSource:s.input.runtimeSource,stateTransitions:i.stateTransitions})}async function _t(e){const t=Date.now(),o=["start"],a=new Set,r=[],n=[],s={root:w(e.prepared.rootPrompt)},i=[_("rootPrompt","prompt_body",s.root)];let d=0,u=0,m=0,f=0,c=0,h=0,S;const l=ge(e.localConcurrencyCap),y=new Map;let D=!1;const T=new Map,H=new Map,ae=v=>{const b=v.child;s[`child-${b.storyId.replace(/[^A-Za-z0-9_.:-]/g,"-")}`]=v.commandHash,i.push(v.promptRedaction);const g=v.receipt;if(v.terminalFailure){if(v.deferredFailure){T.set(b.storyId,v.terminalFailure),l.backpressurePauseCount+=1;return}T.delete(b.storyId),H.set(b.storyId,v.terminalFailure),a.has(b.storyId)||(a.add(b.storyId),r.push(b.storyId),n.push(b.targetRef),m+=1);return}if(!g||g.outcome==="deferred"){T.set(b.storyId,v.reasonCodes.includes("queue-cap-reached")?p.WORKER_POOL_BACKPRESSURE_PAUSED:g?.reasonCode||p.EXECUTION_BACKOFF),v.reasonCodes.includes("queue-cap-reached")&&(l.backpressurePauseCount+=1);return}T.delete(b.storyId),!a.has(b.storyId)&&(a.add(b.storyId),r.push(b.storyId),n.push(b.targetRef),g.outcome==="failed"?(m+=1,H.set(b.storyId,g.reasonCode||p.EXECUTION_FAILED)):g.outcome==="ignored"?f+=1:u+=1)},J=async()=>{const v=await Promise.race([...y.entries()].map(([b,g])=>g.promise.then(K=>({storyId:b,result:K}))));y.delete(v.storyId),l.completedChildCount+=1,l.pendingChildCount=y.size,ae(v.result)};for(;;){if(d>=e.maxIterations)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:ut,publicSummary:"Headless yoloop reached the bounded iteration limit before completion metadata.",retryable:!1,startedAt:t,counts:E(d,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});if(Date.now()-t>e.maxDurationMs)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:pt,publicSummary:"Headless yoloop reached the bounded duration limit before completion metadata.",retryable:!1,startedAt:t,counts:E(d,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});if(e.terminalGitAdapter.prepareLifecycleEvidence){o.push("lifecycle_evidence");const A=await e.terminalGitAdapter.prepareLifecycleEvidence({epicId:e.prepared.epicId,nowIso:e.now()});if(!A.ok)return o.push("backoff"),R({status:A.retryEligible?"backoff":"failed",receiptStatus:A.retryEligible?"deferred":"failed",reasonCode:A.reasonCode,publicSummary:"Headless yoloop stopped because physical Git lifecycle evidence could not be produced safely.",retryable:A.retryEligible,startedAt:t,counts:E(d,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});S=A.p205Authority}o.push("metadata_parse");const v=await e.yoloopInvoker({projectRoot:e.projectRoot,args:e.prepared.rootPrompt,attemptId:e.attempt.attempt_id,executionId:e.attempt.execution_id,jobId:e.attempt.job_id,runnerId:e.runnerId,iteration:d,runtimeId:e.prepared.runtimeId,...e.prepared.modelId?{modelId:e.prepared.modelId}:{},timeoutMs:e.timeoutMs,serverUrl:e.serverUrl});if(v.durationMs!==void 0&&(s[`iter-${d}`]=w(String(v.durationMs))),!v.success)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:p.EXECUTION_FAILED,publicSummary:"Headless yoloop root metadata invocation failed with bounded public evidence.",retryable:!0,startedAt:t,counts:E(d,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});const b=v.metadata,g=Tt(b);if(!g.ok)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:g.reasonCode,publicSummary:g.publicSummary,retryable:!1,startedAt:t,counts:E(d,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:[...i,...g.redactionSummary],relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});if((g.aborted||g.complete||g.replay||g.outcome&&g.outcome!=="selected"&&g.outcome!=="queue_exhausted")&&D&&y.size>0){await J(),d+=1,o.push("reinvoke");continue}if(g.aborted)return h+=1,o.push("aborted"),R({status:"failed",receiptStatus:"failed",reasonCode:lt,publicSummary:"Headless yoloop stopped because public metadata reported an aborted loop.",retryable:!1,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});if(g.outcome&&g.outcome!=="selected"&&g.outcome!=="queue_exhausted")return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:`yoloop-${g.outcome}`,publicSummary:"Headless yoloop stopped on a non-executable graph-first continuation outcome.",retryable:!1,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});if(g.replay)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:"yoloop-replay-pending",publicSummary:"Headless yoloop observed pending replay authority and did not delegate a second child.",retryable:!0,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});if(g.complete&&D&&T.size>0&&H.size===0)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:[...T.values()].sort()[0],publicSummary:"Headless yoloop rejected terminal completion while previously runnable work remained undispatched.",retryable:!0,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});if(g.complete&&D&&H.size>0)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:[...H.values()].sort()[0],publicSummary:"Headless yoloop rejected terminal completion because runnable work failed before an accepted dispatch receipt.",retryable:!1,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});const K=vt(b);if(K){o.push("terminal_git");const A=new Date,x=await Ze(e.projectRoot,{kind:"continuous",storyId:K.epicId,sessionId:`${e.runnerId}:${e.attempt.attempt_id}`,idempotencyKey:K.idempotencyKey,persistent:!1,expiresAt:new Date(A.getTime()+Math.max(e.timeoutMs,e.maxDurationMs)+6e4).toISOString()});if(!x.ok)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:x.reasonCode,publicSummary:"Headless yoloop deferred terminal Git while another physical writer retained authority.",retryable:!0,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});let z,j=!1;try{z=await Ge(K,e.terminalGitAdapter,e.now,S)}finally{j=await Je(x.path,x.owner).catch(()=>!1)}if(!j)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:"git-lifecycle-integration-lock-release-failed",publicSummary:"Headless yoloop stopped because terminal Git writer ownership could not be released safely.",retryable:!0,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});if(s[`terminal-git-${d}`]=w(`${z.receipt.idempotencyKey}:${z.receipt.physicalStatus}`),!z.ok){const M=z.receipt.retryEligible;return o.push("backoff"),R({status:M?"backoff":"failed",receiptStatus:M?"deferred":"failed",reasonCode:z.reasonCodes[0]??"epic-terminal-git-failed",publicSummary:"Headless yoloop stopped at the epic terminal Git boundary with public-safe retry evidence.",retryable:M,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o})}if(g.complete)return c+=1,o.push("complete"),R({status:"completed",receiptStatus:"applied",reasonCode:p.EXECUTION_COMPLETED,publicSummary:"Headless yoloop completed only after fresh root-owned physical Git verification.",retryable:!1,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});d+=1,o.push("reinvoke");continue}if(g.complete)return c+=1,o.push("complete"),R({status:"completed",receiptStatus:"applied",reasonCode:p.EXECUTION_COMPLETED,publicSummary:"Headless yoloop completed after public metadata reported yoloopComplete.",retryable:!1,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});const Q=Pt(b);if(Q){o.push("git_reconciliation");const A=await We(Q,e.terminalGitAdapter,e.now);if(s[`git-reconciliation-${d}`]=w(`${Q.idempotencyKey}:${A.reasonCodes.join(",")}`),!A.ok)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:A.reasonCodes[0]??"git-reconciliation-failed",publicSummary:"Headless yoloop paused at a fail-closed Git reconciliation boundary.",retryable:!0,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o})}const C=At(b,e.prepared.epicId);if(!C.ok)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:C.reasonCode,publicSummary:C.publicSummary,retryable:!1,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:[...i,...C.redactionSummary],relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});const F=C.continuous?void 0:C.prompts.find(A=>a.has(A.storyId));if(F)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:p.YOLOOP_ISOLATION_VIOLATION,publicSummary:"Headless yoloop rejected cyclic child story delegation evidence.",retryable:!1,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:[...i,_("storyId","prompt_body",w(F.storyId))],relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});if(l.mode=C.mode==="continuous_dag"?"continuous_dag":C.parallelAuthorized?"parallel_wave":"serial",l.serverMaxConcurrency=C.serverMaxConcurrency,C.continuous){D=!0;const A=C.prompts.filter(x=>!a.has(x.storyId)&&!y.has(x.storyId));if(l.pendingChildCount=A.length+y.size,A.length>0){const x=Se({store:e.store,nowIso:e.now(),localCap:e.localConcurrencyCap,serverMaxConcurrency:C.serverMaxConcurrency,parallelAuthorized:!0,continuous:!0,eligibleCount:A.length});if(l.queueCap=x.queueCap,l.availableLeases=x.availableLeases,l.effectiveConcurrency=x.effectiveConcurrency,l.reasonCodes.push(x.reasonCode),x.effectiveConcurrency===0&&y.size===0)return l.backpressurePauseCount+=1,o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:p.WORKER_POOL_BACKPRESSURE_PAUSED,publicSummary:"Headless yoloop retained its eligible frontier while physical worker capacity was unavailable.",retryable:!0,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});const z=A.slice(0,x.effectiveConcurrency);o.push("child_story_delegation");for(const j of z)y.set(j.storyId,{child:j,promise:Ie({...e,child:j,iteration:d})});l.startedChildCount+=z.length,l.peakConcurrency=Math.max(l.peakConcurrency,y.size),l.pendingChildCount=A.length-z.length+y.size}if(y.size>0)await J();else{if(T.size>0)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:[...T.values()].sort()[0],publicSummary:"Headless yoloop retained deferred continuous work for a bounded retry.",retryable:!0,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});if(H.size>0)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:[...H.values()].sort()[0],publicSummary:"Headless yoloop completed independent work and stopped on the remaining failed dependency closure.",retryable:!1,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o})}d+=1,o.push("reinvoke");continue}l.pendingChildCount=C.prompts.length;const Y=[...C.prompts];for(;Y.length>0;){const A=Se({store:e.store,nowIso:e.now(),localCap:e.localConcurrencyCap,serverMaxConcurrency:C.serverMaxConcurrency,parallelAuthorized:C.parallelAuthorized,continuous:!1,eligibleCount:Y.length});if(l.queueCap=A.queueCap,l.availableLeases=A.availableLeases,l.effectiveConcurrency=A.effectiveConcurrency,l.reasonCodes.push(A.reasonCode),A.effectiveConcurrency===0)return l.backpressurePauseCount+=1,l.pendingChildCount=Y.length,o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:p.WORKER_POOL_BACKPRESSURE_PAUSED,publicSummary:"Headless yoloop paused child workers because bounded queue or lease capacity was unavailable.",retryable:!0,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});const x=Y.splice(0,A.effectiveConcurrency);l.startedChildCount+=x.length,l.peakConcurrency=Math.max(l.peakConcurrency,x.length),l.pendingChildCount=Y.length,o.push("child_story_delegation");const z=await Promise.all(x.map(M=>Ie({...e,child:M,iteration:d})));l.completedChildCount+=z.length;let j;for(const M of z){const ne=M.child;s[`child-${ne.storyId.replace(/[^A-Za-z0-9_.:-]/g,"-")}`]=M.commandHash,i.push(M.promptRedaction),r.push(ne.storyId),n.push(ne.targetRef),a.add(ne.storyId);const ee=M.receipt;if(!ee){M.reasonCodes.includes("queue-cap-reached")?(l.backpressurePauseCount+=1,l.pendingChildCount+=1,l.reasonCodes.push(p.WORKER_POOL_BACKPRESSURE_PAUSED),j??={kind:"deferred",reasonCode:p.WORKER_POOL_BACKPRESSURE_PAUSED}):(m+=1,j??={kind:"missing",reasonCode:p.EXECUTION_FAILED});continue}if(ee.outcome==="deferred"){j??={kind:"deferred",reasonCode:p.EXECUTION_BACKOFF};continue}if(ee.outcome==="failed"){m+=1,j??={kind:"failed",reasonCode:ee.reasonCode||p.EXECUTION_FAILED};continue}ee.outcome==="ignored"?f+=1:u+=1}if(j){const M=j.kind==="deferred";return R({status:M?"backoff":"failed",receiptStatus:M?"deferred":"failed",reasonCode:j.reasonCode,publicSummary:j.kind==="missing"?"Headless yoloop child story delegation did not produce a public receipt.":M?"Headless yoloop child story delegated bounded backoff to the root attempt.":"Headless yoloop child story execution failed with public receipt evidence.",retryable:M,startedAt:t,counts:E(d+1,r.length,u,m,f,c,h),workerPoolSummary:k(l),hashes:s,redactions:i,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o})}}d+=1,o.push("reinvoke")}}async function Ie(e){const t=e.child.dispatchId?await e.continuousWorkspaceManager.prepare({projectRoot:e.projectRoot,epicId:e.prepared.epicId,storyId:e.child.storyId,targetRef:e.child.targetRef,dispatchId:e.child.dispatchId,executionBranch:e.child.executionBranch??"",graphRevision:e.child.graphRevision??"",authorizedWriteSet:e.child.writeSet??[]}):void 0;if(t&&!t.ok)return{child:e.child,reasonCodes:[t.reasonCode],commandHash:w(e.child.commandRef),promptRedaction:_(`child.${e.child.storyId}`,"prompt_body",w(e.child.commandRef)),terminalFailure:t.reasonCode,deferredFailure:/backpressure|lease-active/.test(t.reasonCode)};const o=e.projectRoot,a=t?.ok?Ve(t.value):e.adapterOptions?.commandRunner,r=xt({rootAttempt:e.attempt,child:e.child,iteration:e.iteration,runtimeId:e.prepared.runtimeId,modelId:e.prepared.modelId,runtimeSource:e.prepared.runtimeSource}),n=V("attempt",r.idempotencyKey);let s=!!t;try{const i=await Fe({store:e.store,projectRoot:o,runnerId:e.runnerId,now:e.now,metadata:{continuityExecutionDirectives:[r]},adapterRegistry:e.registry,adapterOptions:{...e.adapterOptions,cwd:o,env:{...e.adapterOptions?.env,...t?.ok?{NEOCORTEX_BRANCHLESS_PROJECT_ROOT:t.value.workspacePath,NEOCORTEX_BRANCHLESS_ROOT_AUTHORITY:JSON.stringify(e.child.rootAuthority)}:{}},...a?{commandRunner:a,versionRunner:a}:{}},runtimeDefaults:e.runtimeDefaults,runtimeFallback:e.runtimeFallback,timeoutMs:e.timeoutMs,maxAttempts:1,limit:1,queueCap:e.queueCap,attemptIds:[n],idFactory:e.idFactory}),d=i.receipts.find(u=>u.attemptId===n)??i.receipts[0];if(t?.ok&&d&&d.outcome!=="failed"&&d.outcome!=="deferred"){const u=await e.continuousWorkspaceManager.integrate(t.value,{receiptRefs:[`continuity:${d.attemptId}`],nowIso:d.timestamp});if(!u.ok)return{child:e.child,receipt:d,reasonCodes:[...i.reasonCodes,u.reasonCode],commandHash:w(e.child.commandRef),promptRedaction:_(`child.${e.child.storyId}`,"prompt_body",w(e.child.commandRef)),terminalFailure:u.reasonCode,deferredFailure:/backpressure|graph-revision-stale/.test(u.reasonCode)};s=!1}return{child:e.child,receipt:d,reasonCodes:i.reasonCodes,commandHash:w(e.child.commandRef),promptRedaction:_(`child.${e.child.storyId}`,"prompt_body",w(e.child.commandRef))}}finally{t?.ok&&await e.continuousWorkspaceManager.release(t.value,s)}}function Se(e){const t=e.store.collectSnapshotRows({nowIso:e.nowIso,jobLimit:1,staleLeaseLimit:1,receiptLimit:1,eventLimit:1,snapshotLimit:1}),o=Math.max(1,Math.floor(t.queue.capacity)),a=Math.max(0,Math.floor(t.queue.running)-1),r=e.continuous?Math.max(0,Math.floor(t.queue.available)):Math.max(0,Math.min(Math.max(0,e.localCap-a),Math.floor(t.queue.available))),n=e.parallelAuthorized?Math.max(1,Math.floor(e.serverMaxConcurrency)):1,s=Math.max(0,Math.min(e.continuous?e.eligibleCount:n,...e.continuous?[]:[e.localCap],o,r));return{queueCap:o,availableLeases:r,effectiveConcurrency:s,reasonCode:s===0?p.WORKER_POOL_BACKPRESSURE_PAUSED:(e.parallelAuthorized||e.continuous)&&s>1?p.WORKER_POOL_PARALLEL_ACTIVE:p.WORKER_POOL_SERIAL_FALLBACK}}function ge(e){return{mode:"serial",serverMaxConcurrency:1,localCap:e,queueCap:1,availableLeases:1,effectiveConcurrency:1,peakConcurrency:0,pendingChildCount:0,startedChildCount:0,completedChildCount:0,backpressurePauseCount:0,reasonCodes:[]}}function k(e){return{mode:e.mode,serverMaxConcurrency:$(e.serverMaxConcurrency),localCap:$(e.localCap),queueCap:$(e.queueCap),availableLeases:$(e.availableLeases),effectiveConcurrency:$(e.effectiveConcurrency),peakConcurrency:$(e.peakConcurrency),pendingChildCount:$(e.pendingChildCount),startedChildCount:$(e.startedChildCount),completedChildCount:$(e.completedChildCount),backpressurePauseCount:$(e.backpressurePauseCount),reasonCodes:B(e.reasonCodes.length>0?e.reasonCodes:[p.WORKER_POOL_SERIAL_FALLBACK]).slice(0,10),publicSafe:!0}}function le(e=_e){return k(ge(e))}function $(e){return Number.isFinite(e)?Math.max(0,Math.min(1e4,Math.floor(e))):0}function Ct(e){const t=Le(e.attempt.metadata_json,{autonomousKind:"run_yoloop",jobId:e.attempt.job_id,targetKind:"epic",targetRef:e.attempt.target_ref});if(!t.ok)return{ok:!1,status:"failed",receiptStatus:"failed",reasonCode:t.reasonCode,publicSummary:t.publicSummary,redactionSummary:t.redactionSummary};const o=It(e.attempt);if(!o.ok)return o;const a=St(e);if(!a.ok)return{ok:!1,status:"failed",receiptStatus:"failed",reasonCode:a.reasonCode,publicSummary:a.publicSummary,redactionSummary:a.redactionSummary};const r=e.attempt.epic_id??re(e.attempt.target_ref);return{ok:!0,input:{rootPrompt:`*yoloop @${e.attempt.target_ref}`,targetRef:e.attempt.target_ref,epicId:r,runtimeId:a.runtimeId,...a.modelId?{modelId:a.modelId}:{},runtimeSource:a.runtimeSource,publicSafe:!0}}}function It(e){const t=[];e.directive_kind!=="run_yoloop"&&t.push(_("directiveKind","unsafe_key","value-denied")),e.target_kind!=="epic"&&t.push(_("targetKind","prompt_body","value-denied")),(!de.test(e.target_ref)||q.test(e.target_ref)||L.test(e.target_ref))&&t.push(_("targetRef","prompt_body","value-denied"));const o=re(e.target_ref);return e.epic_id&&e.epic_id!==o&&t.push(_("epicId","prompt_body","value-denied")),t.length>0?{ok:!1,status:"failed",receiptStatus:"failed",reasonCode:p.PROMPT_REJECTED,publicSummary:"Headless run_yoloop attempt did not match the canonical public epic prompt shape.",redactionSummary:t}:{ok:!0,input:{rootPrompt:`*yoloop @${e.target_ref}`,targetRef:e.target_ref,epicId:o,runtimeId:"fake",publicSafe:!0}}}function St(e){const t=e.runtimeDefaults!==void 0?e.runtimeDefaults:Ne({projectRoot:e.projectRoot});if(I(t)&&t.ok===!1)return{ok:!1,reasonCode:p.RUNTIME_UNTRUSTED,publicSummary:typeof t.publicSummary=="string"?t.publicSummary:"Headless runtime defaults failed public-safety validation.",redactionSummary:Array.isArray(t.redactionSummary)?t.redactionSummary:[]};const o=$t(e.attempt.runtime_source)??"explicit",a=e.attempt.runtime_id||e.attempt.model_id?{...e.attempt.runtime_id?{runtimeId:e.attempt.runtime_id}:{},...e.attempt.model_id?{modelId:e.attempt.model_id}:{},source:o,publicSafe:!0}:void 0,r={registry:e.registry,defaults:t,fallback:e.runtimeFallback};a&&(o==="origin"?r.origin=a:o==="default"?r.projectDefault=a:o==="fallback"?r.fallback=a:r.explicit=a);const n=je(r);return n.ok?{ok:!0,runtimeId:n.runtimeId,...n.modelId?{modelId:n.modelId}:{},runtimeSource:n.runtimeSource}:{ok:!1,reasonCode:n.reasonCode,publicSummary:n.publicSummary,redactionSummary:n.redactionSummary}}function gt(e){const t=[];for(const y of Object.keys(e))(!dt.has(y)||te.test(y))&&t.push(_(y,Z(y),"key-denied"));e.publicSafe!==!0&&t.push(_("publicSafe","unsafe_key","value-denied"));const o=N(e,"kind"),a=N(e,"commandClass"),r=N(e,"jobId"),n=N(e,"operationId"),s=N(e,"idempotencyKey"),i=N(e,"targetKind"),d=N(e,"targetRef"),u=N(e,"commandRef"),m=N(e,"publicSummary"),f=N(e,"epicId");o!=="run_yoloop"&&t.push(_("kind","unsafe_key","value-denied")),a!=="goal-tick"&&a!=="loop-tick"&&t.push(_("commandClass","unsafe_key","value-denied")),fe(r)||t.push(_("jobId","unsafe_key","value-denied")),fe(n)||t.push(_("operationId","unsafe_key","value-denied")),fe(s)||t.push(_("idempotencyKey","unsafe_key","value-denied")),(i!=="epic"||!d||!de.test(d)||L.test(d))&&t.push(_("targetRef","prompt_body","value-denied"));const c=d?`*yoloop @${d}`:void 0;(!u||u!==c||u.includes("@neocortex")||q.test(u)||L.test(u))&&t.push(_("commandRef","prompt_body","value-denied")),f&&d&&f!==re(d)&&t.push(_("epicId","prompt_body","value-denied")),(!m||m.length>240||L.test(m))&&t.push(_("publicSummary","unbounded_text","value-denied")),e.reasonCode!==void 0&&(typeof e.reasonCode!="string"||L.test(e.reasonCode))&&t.push(_("reasonCode","unsafe_key","value-denied"));const h=Dt(e.runtime,t);e.attempts!==void 0&&se(e.attempts,"attempts",t),e.metadata!==void 0&&se(e.metadata,"metadata",t);const S=I(e.metadata)?e.metadata:void 0,l=jt(e.redactionSummary,t);return t.length>0||o!=="run_yoloop"||!a||!r||!n||!s||!d||!u||!m?{ok:!1,reasonCode:t.some(D=>D.reason==="prompt_body")?p.PROMPT_REJECTED:p.DIRECTIVE_REJECTED,redactionSummary:t}:{ok:!0,directive:{kind:"run_yoloop",commandClass:a,jobId:r,operationId:n,idempotencyKey:s,targetKind:"epic",targetRef:d,commandRef:u,...f?{epicId:f}:{},...h?{runtime:h}:{},publicSummary:m,...typeof e.reasonCode=="string"?{reasonCode:e.reasonCode}:{},...S?{metadata:S}:{},...l.length>0?{redactionSummary:l}:{},publicSafe:!0}}}function At(e,t){if(!e)return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop metadata was missing.",[]);const o=bt(e);if(!o.ok)return o;const a=[],r=I(e.yoloopExecutionPlan)?e.yoloopExecutionPlan:void 0,n=r?P(r.storyIds).filter(W):[],s=r?.version===3&&I(r.scheduler)&&Array.isArray(r.scheduler.nodes)?new Map(r.scheduler.nodes.filter(I).map(c=>[String(c.storyId??""),c])):new Map,i=r?.version===3&&I(r.scheduler)&&typeof r.scheduler.graphRevision=="string"?r.scheduler.graphRevision:void 0,d=r?.version===3&&typeof r.executionBranch=="string"?r.executionBranch:void 0;let u;if(r){const c=Ot(r);if(!c.ok)return c;u=c;for(const S of Rt(r)){const l=X(S,t,"execution-plan");if(!l.ok)return l;a.push(Ae(l.prompt,s.get(l.prompt.storyId),i,d))}if(a.length===0)for(const S of n){const l=X(`*yolo @docs/stories/${S}.story.md`,t,"execution-plan");if(!l.ok)return l;a.push(Ae(l.prompt,s.get(l.prompt.storyId),i,d))}const h=kt(e.skillDirectives,a);if(!h.ok)return h}const m=typeof e.nextStoryId=="string"&&W(e.nextStoryId)?e.nextStoryId:void 0;for(const c of r?[]:Array.isArray(e.skillDirectives)?e.skillDirectives:[]){if(!I(c)||c.kind!=="task")continue;const h=P(c.promptTemplates);if(h.length>0){for(const D of h){const T=X(D,t,"task-directive");if(!T.ok)return T;a.push(T.prompt)}continue}const S=typeof c.promptTemplate=="string"?c.promptTemplate:void 0;if(!S)continue;const l=P(c.storyIds).filter(W),y=l.length>0?l:m?[m]:[];if(y.length===0&&ce.test(S)){const D=X(S,t,"task-directive");if(!D.ok)return D;a.push(D.prompt);continue}for(const D of y){const T=S.includes("{storyId}")?S.replaceAll("{storyId}",D):S,H=X(T,t,"task-directive");if(!H.ok)return H;a.push(H.prompt)}}if(a.length===0&&m){const c=X(`*yolo @docs/stories/${m}.story.md`,t,"next-story");if(!c.ok)return c;a.push(c.prompt)}const f=Ft(a,c=>c.commandRef);if(u?.continuous){if(f.length!==n.length||f.some(c=>c.preparationOnly!==!0||c.source!=="execution-plan"))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless continuous yoloop rejected an ambiguous or non-preparation child prompt.",[_("promptTemplates","prompt_body","operation-denied")])}else if(f.some(c=>c.preparationOnly===!0))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected branchless preparation outside a validated continuous plan.",[_("promptTemplates","prompt_body","operation-denied")]);if(n.length>0){const c=new Set(n);for(const h of f)if(!c.has(h.storyId))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a child prompt outside the server-authorized execution plan.",[_("storyId","prompt_body",w(h.storyId))])}return u?.parallelAuthorized&&!G(f.map(c=>c.storyId),n)?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected a parallel plan whose executable prompts did not match the selected wave.",[]):f.length===0&&!u?.continuous?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop metadata did not include an authorized per-story child prompt.",[]):{ok:!0,prompts:f,mode:u?.mode??"legacy",serverMaxConcurrency:u?.serverMaxConcurrency??1,parallelAuthorized:u?.parallelAuthorized??!1,continuous:u?.continuous??!1,reasonCodes:[p.OK,u?.parallelAuthorized?p.WORKER_POOL_PARALLEL_ACTIVE:p.WORKER_POOL_SERIAL_FALLBACK]}}function Ae(e,t,o,a){if(!t||!o||!a)return e;const r=Array.isArray(t.writeSet)?P(t.writeSet):[],n=be(t.childExecutionAuthority,{storyId:e.storyId,invocationPrompt:e.commandRef,authorizedWriteSet:r});return{...e,...typeof t.dispatchId=="string"?{dispatchId:t.dispatchId}:{},...typeof t.idempotencyKey=="string"?{idempotencyKey:t.idempotencyKey}:{},graphRevision:o,executionBranch:a,...r.length>0?{writeSet:r}:{},...n?{rootAuthority:n}:{}}}function bt(e){const t=[];return e.nextStoryId!==void 0&&oe(e.nextStoryId,"nextStoryId",t),e.yoloopExecutionPlan!==void 0&&oe(e.yoloopExecutionPlan,"yoloopExecutionPlan",t),Array.isArray(e.skillDirectives)&&e.skillDirectives.forEach((o,a)=>{I(o)&&o.kind==="task"&&oe(o,`skillDirectives.${a}`,t)}),t.length>0?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected unsafe public metadata before child delegation.",t):{ok:!0}}function kt(e,t){if(!Array.isArray(e))return{ok:!0};const o=new Set(t.map(a=>a.commandRef));for(const[a,r]of e.entries()){if(!I(r)||r.kind!=="task")continue;const n=typeof r.promptTemplate=="string"?r.promptTemplate:void 0,s=P(r.promptTemplates);if(n==="[REDACTED]"&&r.subagentType==="neocortex"&&typeof r.reasonCode=="string"&&r.reasonCode.startsWith("directive-prompt-")&&s.length===0)continue;const d=[...n?[n]:[],...s];if(r.subagentType!=="neocortex"||d.length===0||d.some(u=>!o.has(u)))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a task directive that conflicted with the server-authorized execution plan.",[_(`skillDirectives.${a}`,"prompt_body","operation-denied")])}return{ok:!0}}function oe(e,t,o){if(typeof e=="string"){if(/\.allowedDebt\.constraints\.\d+$/.test(t)&&it.has(e))return;(L.test(e)||/\0/.test(e))&&o.push(_(t,Z(t),"value-denied"));return}if(!(e==null||typeof e=="number"||typeof e=="boolean")){if(Array.isArray(e)){e.forEach((a,r)=>oe(a,`${t}.${r}`,o));return}if(I(e)){for(const[a,r]of Object.entries(e)){const n=`${t}.${a}`;!(a==="promptTemplate"||a==="promptTemplates"||a==="invocationPrompt"||a==="childPromptKind"||a==="allowMetaTaskPromptInChild"||a==="authorization")&&te.test(a)&&o.push(_(n,Z(a),"key-denied")),oe(r,n,o)}return}o.push(_(t,"unsafe_key","value-denied"))}}function Ot(e){const t=typeof e.mode=="string"?e.mode:"",o=I(e.isolationPolicy)?e.isolationPolicy:void 0,a=P(e.storyIds);if(e.authorization!=="server_authorized")return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan was not server-authorized.",[]);if(e.executor!=="root_agent"&&e.executor!=="root_agent_with_child_tasks")return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan executor was not root-owned.",[]);if(t!=="serial"&&t!=="parallel_wave"&&t!=="continuous_dag"&&t!=="manual")return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan mode was invalid.",[]);const r=e.version===3&&t==="continuous_dag";if(!Array.isArray(e.storyIds)||!r&&a.length===0||a.length!==e.storyIds.length||a.some(y=>!W(y))||new Set(a).size!==a.length)return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan story selection was invalid or ambiguous.",[]);if(!o||o.rootOwnsLoop!==!0||o.childPromptKind==="per_story_branchless_preparation_only"&&!r||Object.prototype.hasOwnProperty.call(o,"childExecutionBoundary")&&!r||o.childPromptKind!=="per_story_yolo_only"&&o.childPromptKind!=="per_story_branchless_preparation_only"&&!(o.childPromptKind==="none"&&(t==="serial"&&o.childTaskDelegation==="not_required"||t==="parallel_wave"&&e.executor==="root_agent"&&o.childTaskDelegation==="forbidden"))||o.allowOuterYoloopInChild!==!1||o.allowMetaTaskPromptInChild!==!1)return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected an execution plan that did not preserve root-owned child isolation.",[_("isolationPolicy","prompt_body","value-denied")]);const n=Array.isArray(e.skippedStories)?e.skippedStories:[];for(const y of n){if(!I(y)||typeof y.storyId!="string"||!W(y.storyId)||typeof y.reason!="string")return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop skipped-story evidence was malformed.",[]);if(a.includes(y.storyId))return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop selected a story that server evidence marked skipped.",[])}if(r){const y=I(e.scheduler)?e.scheduler:void 0,D=Array.isArray(y?.nodes)?y.nodes.filter(I):[],T=P(y?.readyStoryIds),H=P(y?.runningStoryIds),ae=P(e.promptTemplates),J=I(e.dependencyBasis)?e.dependencyBasis:void 0,v=I(e.readinessBasis)?e.readinessBasis:void 0,b=typeof y?.graphRevision=="string"?y.graphRevision:"",g=typeof e.executionBranch=="string"?e.executionBranch:"",K=D.map(C=>typeof C.storyId=="string"?C.storyId:""),Q=D.find(C=>{const F=typeof C.storyId=="string"?C.storyId:"",Y=typeof C.promptTemplate=="string"?C.promptTemplate:"",A=Array.isArray(C.writeSet)?P(C.writeSet):[];return!W(F)||Y!==`*yolo @docs/stories/${F}.story.md branchless-preparation`||typeof C.dispatchId!="string"||!/^[a-f0-9]{64}$/.test(C.dispatchId)||typeof C.idempotencyKey!="string"||!/^[a-f0-9]{64}$/.test(C.idempotencyKey)||C.dependencyBasis!=="verified"||!Array.isArray(C.dependencies)||P(C.dependencies).length!==C.dependencies.length||!Array.isArray(C.writeSet)||A.length===0||A.length!==C.writeSet.length||!be(C.childExecutionAuthority,{storyId:F,invocationPrompt:Y,authorizedWriteSet:A})});return e.executor!=="root_agent_with_child_tasks"||e.legacyConcurrencyIgnored!==!0||Object.prototype.hasOwnProperty.call(e,"maxConcurrency")||Object.prototype.hasOwnProperty.call(e,"maxParallel")||o?.rootOwnedScheduling!=="continuous_dag_allowed"||o?.childPromptKind!=="per_story_branchless_preparation_only"||o?.childExecutionBoundary!=="filesystem_only"||o?.childTaskDelegation!=="allowed"||o?.maxDepth!==1||o?.childWorkspace!=="branchless_sandbox"||o?.epicCheckout!=="current_checkout"||o?.workspaceLifecycle!=="user_managed"||o?.integrationOwner!=="root_agent"||!y||y.schemaVersion!==1||y.strategy!=="continuous-event-driven-dag"||y.logicalConcurrency!=="ready-set"||y.capacityPolicy!=="backpressure-only"||y.rootOwnsLoop!==!0||y.maxDepth!==1||!/^[a-f0-9]{64}$/.test(b)||!Ht(g)||new Set(K).size!==K.length||K.some(C=>!W(C))||T.some(C=>!K.includes(C))||H.some(C=>!K.includes(C)||T.includes(C))||!G(a,T)||ae.length!==a.length||ae.some((C,F)=>C!==`*yolo @docs/stories/${a[F]}.story.md branchless-preparation`)||!J||J.source!=="state_snapshot"||!v||v.source!=="ready_wave"||!G(P(v.selectedStoryIds),a)||Q?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected an invalid continuous DAG execution plan.",[]):{ok:!0,mode:"continuous_dag",serverMaxConcurrency:a.length,parallelAuthorized:!0,continuous:!0}}if(e.version===2){const y=Ye(e);return y.ok?{ok:!0,mode:"parallel_wave",serverMaxConcurrency:y.childExecutionConcurrency,parallelAuthorized:!1,continuous:!1}:O(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected an unsafe phased execution plan.",[])}if(t!=="parallel_wave")return{ok:!0,mode:t,serverMaxConcurrency:1,parallelAuthorized:!1,continuous:!1};const s=e.maxConcurrency,i=e.maxParallel,d=I(e.dependencyBasis)?e.dependencyBasis:void 0,u=I(e.readinessBasis)?e.readinessBasis:void 0,m=Array.isArray(e.parallelWaves)?e.parallelWaves:[],f=m.length===1&&I(m[0])?m[0]:void 0;if(o.rootOwnedScheduling!=="parallel_wave_allowed"||!Number.isInteger(s)||typeof s!="number"||s<2||s>a.length||!Number.isInteger(i)||i!==s||!d||d.source!=="state_snapshot"||!G(P(d.storyIds),a)||!u||u.source!=="ready_wave"||!G(P(u.selectedStoryIds),a)||!f||!G(P(f.storyIds),a)||f.maxConcurrency!==s)return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan lacked consistent bounded authorization and readiness evidence.",[]);const c=P(f.promptTemplates);if(c.length!==a.length||new Set(c).size!==c.length)return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel wave prompts were incomplete or ambiguous.",[]);const S=(Array.isArray(f.proofSummaries)?f.proofSummaries:Array.isArray(e.proofSummaries)?e.proofSummaries:[]).find(y=>I(y)&&G(P(y.storyIds),a));return!I(S)||S.dependencyClosure!=="resolved"||S.contractOwnership!=="non_overlapping"||S.validationSurfaces!=="compatible"?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan lacked resolved independence proof.",[]):n.find(y=>I(y)&&typeof y.reason=="string"&&/(cycle|unresolved|ambiguous)/i.test(y.reason))?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan contained unresolved dependency evidence.",[]):{ok:!0,mode:"parallel_wave",serverMaxConcurrency:s,parallelAuthorized:!0,continuous:!1}}function be(e,t){if(!I(e)||!I(e.artifact))return;const o=e.artifact,a=Array.isArray(e.authorizedWriteSet)?P(e.authorizedWriteSet):[];if(Object.keys(e).sort().join("\0")!==["artifact","authorizedWriteSet","effectScope","invocationPrompt","kind","lifecycleAuthority","publicSafe","schemaVersion","storyId"].sort().join("\0")||Object.keys(o).sort().join("\0")!==["content","contentBinding","kind","path","schemaVersion"].sort().join("\0")||e.schemaVersion!==1||e.kind!=="branchless_story_preparation"||e.storyId!==t.storyId||e.invocationPrompt!==t.invocationPrompt||!Array.isArray(e.authorizedWriteSet)||a.length!==e.authorizedWriteSet.length||a.some(n=>Qe(n)!==n)||!Et(a,t.authorizedWriteSet)||e.effectScope!=="filesystem_only"||e.lifecycleAuthority!=="root_only"||e.publicSafe!==!0||o.schemaVersion!==1||o.kind!=="branchless_root_bound_artifact"||typeof o.path!="string"||!a.includes(o.path)||typeof o.content!="string"||o.content.length===0||o.content.length>4096||typeof o.contentBinding!="string"||!/^[a-f0-9]{64}$/.test(o.contentBinding))return;const r=Ee("sha256").update(["branchless-root-bound-artifact-v1",t.storyId,t.invocationPrompt,...a,"filesystem_only","root_only",o.path,o.content].join("\0")).digest("hex");if(o.contentBinding===r)return e}function Et(e,t){return e.length===t.length&&e.every((o,a)=>o===t[a])}function Rt(e){const t=[];t.push(...P(e.promptTemplates));for(const o of Array.isArray(e.serialSteps)?e.serialSteps:[])I(o)&&typeof o.promptTemplate=="string"&&t.push(o.promptTemplate);for(const o of Array.isArray(e.parallelWaves)?e.parallelWaves:[])I(o)&&t.push(...P(o.promptTemplates));return t}function X(e,t,o){if(Ce(e))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected an unsafe child prompt shape.",[_("promptTemplate","prompt_body",w(e))]);if(!ce.test(e))return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop child prompt did not match the canonical per-story yolo shape.",[_("promptTemplate","prompt_body",w(e))]);const a=at.test(e),r=e.replace(/^\*yolo @/,"").replace(/ branchless-preparation$/,""),n=Kt(r);return!rt.test(r)||!W(n)||!n.startsWith(`${t}.`)?O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a child prompt outside the targeted public epic.",[_("storyId","prompt_body",w(n))]):{ok:!0,prompt:{storyId:n,targetRef:r,commandRef:e,source:o,...a?{preparationOnly:!0}:{}}}}function vt(e){const t=e?.epicTerminalGitDirective;if(!(!I(t)||t.schemaVersion!==1||t.kind!=="epic_terminal_git"||typeof t.epicId!="string"||typeof t.executionBranch!="string"||typeof t.originBranch!="string"||typeof t.expectedExecutionHeadSha!="string"||!Array.isArray(t.storyCheckpointIds)||!I(t.localGates)||t.localGates.passed!==!0||!Array.isArray(t.localGates.receiptRefs)||!I(t.reconcile)||typeof t.idempotencyKey!="string"||t.publicSafe!==!0))return t}function Pt(e){const t=e?.epicGitReconciliationDirective;if(!(!I(t)||t.schemaVersion!==1||t.kind!=="epic_git_reconciliation"||typeof t.epicId!="string"||typeof t.executionBranch!="string"||typeof t.originBranch!="string"||!["start","resume","audit"].includes(String(t.lifecycleBoundary))||typeof t.dryRun!="boolean"||typeof t.idempotencyKey!="string"||t.publicSafe!==!0))return t}function Tt(e){if(!e||!I(e))return{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop root invocation did not return public metadata.",redactionSummary:[]};const t=I(e.yoloopContinuationDecision)?e.yoloopContinuationDecision:void 0,o=typeof t?.outcome=="string"?t.outcome:void 0,a=o==="queue_exhausted"||e.yoloopComplete===!0,r=e.yoloopAborted===!0,n=o==="selected"&&t?.replay===!0;return o&&!["selected","queue_exhausted","blocked","cycle","invalid","no_progress"].includes(o)?{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop rejected an unknown continuation outcome.",redactionSummary:[]}:o==="queue_exhausted"&&t?.terminalSuccess!==!0?{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop rejected inconsistent queue exhaustion metadata.",redactionSummary:[]}:a&&r?{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop metadata reported mutually exclusive terminal states.",redactionSummary:[_("yoloopTerminal","unsafe_key","value-denied")]}:{ok:!0,complete:a,aborted:r,outcome:o,replay:n}}function xt(e){const t=`${e.rootAttempt.execution_id}:${e.child.graphRevision??"legacy"}:${e.child.storyId}`,o=e.child.dispatchId??V("child-op",`${t}:${e.iteration}`),a=e.child.idempotencyKey??V("child-idem",`${t}:${e.iteration}`);return{schemaVersion:1,contractVersion:"continuity-v1",kind:"run_yolo",commandClass:e.rootAttempt.command_class==="goal-tick"?"goal-tick":"loop-tick",jobId:e.rootAttempt.job_id,operationId:o,idempotencyKey:a,targetKind:"story",targetRef:e.child.targetRef,commandRef:e.child.commandRef,...e.child.preparationOnly?{executionMode:"branchless_child_preparation"}:{},storyId:e.child.storyId,runtime:{runtimeId:e.runtimeId,...e.modelId?{modelId:e.modelId}:{},source:e.runtimeSource??"explicit",reasonCode:e.runtimeSource==="fallback"?p.RUNTIME_FALLBACK:p.RUNTIME_EXPLICIT,publicSafe:!0},publicSummary:`Root-owned yoloop delegated public story ${e.child.storyId}.`,reasonCode:p.OK,metadata:{governanceSource:"delegated-subagent",parentAttemptId:e.rootAttempt.attempt_id,parentExecutionId:e.rootAttempt.execution_id,iteration:e.iteration,...e.child.dispatchId?{dispatchId:e.child.dispatchId}:{},...e.child.graphRevision?{graphRevision:e.child.graphRevision}:{},...e.child.writeSet?{writeSet:e.child.writeSet}:{},...e.child.executionBranch?{executionBranch:e.child.executionBranch}:{},...e.child.graphRevision?{childWorkspace:"branchless_sandbox",epicCheckout:"current_checkout",workspaceLifecycle:"user_managed",integrationOwner:"root_agent",maxDepth:1}:{},publicSafe:!0},attempts:[],redactionSummary:[_("prompt","prompt_body",w(e.child.commandRef))],publicSafe:!0}}function ue(e,t,o){const a=ke(o.hashes),r=o.workerPoolSummary??le(),n=ke({iterations:o.counts.iterations,childCount:o.counts.childCount,succeededChildCount:o.counts.succeededChildCount,failedChildCount:o.counts.failedChildCount,skippedChildCount:o.counts.skippedChildCount,metadataCompleteCount:o.counts.metadataCompleteCount,metadataAbortedCount:o.counts.metadataAbortedCount,serverMaxConcurrency:r.serverMaxConcurrency,localCap:r.localCap,queueCap:r.queueCap,availableLeases:r.availableLeases,effectiveConcurrency:r.effectiveConcurrency,peakConcurrency:r.peakConcurrency,pendingChildCount:r.pendingChildCount,startedChildCount:r.startedChildCount,completedChildCount:r.completedChildCount,backpressurePauseCount:r.backpressurePauseCount}),s={schemaVersion:1,contractVersion:"continuity-v1",attemptId:t.attempt_id,executionId:t.execution_id,jobId:t.job_id,directiveHash:t.directive_hash,status:o.status,reasonCode:o.reasonCode,storyIds:o.childStoryIds.slice(0,50),counts:n,hashes:a,...o.reasonCode===he.BYPASS_BLOCKED?{governanceEvidence:Te}:{},reasonCodes:B([o.reasonCode,...r.reasonCodes,...o.stateTransitions]),publicSummary:ie(o.publicSummary)};return e.completeHeadlessExecutionAttempt({attemptId:t.attempt_id,executionId:t.execution_id,jobId:t.job_id,leaseId:o.leaseId,runnerId:o.runnerId,status:o.status,completedAt:o.completedAt,durationMs:o.durationMs,reasonCode:o.reasonCode,publicSummary:ie(o.publicSummary),notBeforeAt:o.notBeforeAt,retryCount:o.retryCount,counts:n,hashes:a,redactionSummary:o.redactionSummary,relativePaths:B([t.target_ref,...o.relativePaths]),metadata:s}),e.recordHeadlessExecutionReceipt({receiptId:`receipt-${V("headless-yoloop",`${t.attempt_id}-${o.status}`)}`,attemptId:t.attempt_id,executionId:t.execution_id,jobId:t.job_id,status:o.receiptStatus,reasonCode:o.reasonCode,createdAt:o.completedAt,operationId:`${t.execution_id}:${o.status}:receipt`,idempotencyKey:`${t.directive_hash}:${o.status}:receipt`,counts:n,hashes:a,redactionSummary:o.redactionSummary,relativePaths:B([t.target_ref,...o.relativePaths]),metadata:s}),e.recordHeadlessExecutionSummary({eventId:`event-${V("headless-yoloop-summary",`${t.attempt_id}-${o.status}`)}`,attemptId:t.attempt_id,executionId:t.execution_id,jobId:t.job_id,status:o.status,runtimeId:o.runtimeId,modelId:o.modelId,publicSummary:ie(o.publicSummary),reasonCode:o.reasonCode,createdAt:o.completedAt,durationMs:o.durationMs,counts:n,hashes:a,redactionSummary:o.redactionSummary,relativePaths:B([t.target_ref,...o.relativePaths]),metadata:s}),{attemptId:t.attempt_id,executionId:t.execution_id,jobId:t.job_id,status:o.status,outcome:o.receiptStatus,reasonCode:o.reasonCode,timestamp:o.completedAt,childStoryIds:o.childStoryIds,aggregateCounts:o.counts,workerPoolSummary:r,redactionSummary:o.redactionSummary,publicSafe:!0}}function wt(e,t){return{attemptId:e.attempt_id,executionId:e.execution_id,jobId:e.job_id,status:t.status,outcome:t.receiptStatus,reasonCode:t.reasonCode,timestamp:t.timestamp,childStoryIds:[],aggregateCounts:me(),workerPoolSummary:le(),redactionSummary:[],publicSafe:!0}}function Lt(e,t,o,a,r){if(!t.retryable)return{retry:!1};const n=e.retry_count+1;if(n>=Math.max(1,e.max_attempts||o))return{retry:!1,retryCount:n};const s=Math.min(8,2**Math.max(0,e.retry_count));return{retry:!0,retryCount:n,notBeforeAt:Oe(r,a*s)}}function R(e){return{status:e.status,receiptStatus:e.receiptStatus,reasonCode:e.reasonCode,publicSummary:e.publicSummary,retryable:e.retryable,durationMs:Math.max(0,Date.now()-e.startedAt),counts:e.counts,workerPoolSummary:e.workerPoolSummary??le(),hashes:e.hashes,redactionSummary:e.redactions.slice(0,50),relativePaths:B(e.relativePaths).slice(0,50),childStoryIds:B(e.childStoryIds).slice(0,50),stateTransitions:B(e.stateTransitions)}}function Dt(e,t){if(e===void 0)return;if(!I(e)){t.push(_("runtime","unsafe_key","value-denied"));return}for(const n of Object.keys(e))(!ct.has(n)||te.test(n))&&t.push(_(`runtime.${n}`,Z(n),"key-denied"));e.publicSafe!==!0&&t.push(_("runtime.publicSafe","unsafe_key","value-denied"));const o=N(e,"runtimeId"),a=N(e,"modelId"),r=N(e,"source");if(o&&(!/^[A-Za-z0-9][A-Za-z0-9._:-]{0,79}$/.test(o)||L.test(o)||q.test(o))&&t.push(_("runtime.runtimeId","unsafe_key","value-denied")),a&&(!/^[A-Za-z0-9][A-Za-z0-9._:+/-]{0,119}$/.test(a)||L.test(a)||q.test(a))&&t.push(_("runtime.modelId","unsafe_key","value-denied")),r!==void 0&&r!=="explicit"&&r!=="origin"&&r!=="default"&&r!=="fallback"&&r!=="unspecified"&&t.push(_("runtime.source","unsafe_key","value-denied")),e.reasonCode!==void 0&&(typeof e.reasonCode!="string"||L.test(e.reasonCode))&&t.push(_("runtime.reasonCode","unsafe_key","value-denied")),e.publicSafe===!0)return{...o?{runtimeId:o}:{},...a?{modelId:a}:{},...r==="explicit"||r==="origin"||r==="default"||r==="fallback"||r==="unspecified"?{source:r}:{},...typeof e.reasonCode=="string"?{reasonCode:e.reasonCode}:{},publicSafe:!0}}function Mt(e){const t=Array.isArray(e)?e:e?[e]:[],o=[];for(const a of t){const r=a.continuityExecutionDirectives;Array.isArray(r)&&o.push(...r)}return o}function Nt(e){return w(pe({kind:e.kind,commandClass:e.commandClass,jobId:e.jobId,targetRef:e.targetRef,commandRef:e.commandRef,epicId:e.epicId,runtime:e.runtime}))}function pe(e){return Array.isArray(e)?`[${e.map(pe).join(",")}]`:I(e)?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${pe(e[t])}`).join(",")}}`:JSON.stringify(e)}function se(e,t,o){if(typeof e=="string"){(L.test(e)||q.test(e))&&o.push(_(t,Z(t),"value-denied"));return}if(!(e==null||typeof e=="number"||typeof e=="boolean")){if(Array.isArray(e)){e.forEach((a,r)=>se(a,`${t}.${r}`,o));return}if(I(e)){for(const[a,r]of Object.entries(e)){const n=`${t}.${a}`;te.test(a)&&o.push(_(n,Z(a),"key-denied")),se(r,n,o)}return}o.push(_(t,"unsafe_key","value-denied"))}}function jt(e,t){if(e===void 0)return[];if(!Array.isArray(e))return t.push(_("redactionSummary","unsafe_key","value-denied")),[];const o=[];for(const[a,r]of e.entries()){if(!I(r)||r.publicSafe!==!0){t.push(_(`redactionSummary.${a}`,"unsafe_key","value-denied"));continue}const n=N(r,"field"),s=N(r,"reason"),i=N(r,"evidence");if(!n||!s||!i||L.test(n)||L.test(s)||L.test(i)){t.push(_(`redactionSummary.${a}`,"unsafe_key","value-denied"));continue}o.push({field:n,reason:s,evidence:i,publicSafe:!0})}return o}function O(e,t,o){return{ok:!1,reasonCode:e,publicSummary:t,redactionSummary:o}}function P(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function Ht(e){return e.length>0&&e.length<=240&&!e.startsWith("-")&&!e.includes("..")&&!e.includes("\\")&&/^[A-Za-z0-9._/-]+$/.test(e)}function G(e,t){return e.length===t.length&&new Set(e).size===e.length&&e.every(o=>t.includes(o))}function zt(e){return de.test(e.target_ref)?[e.target_ref]:[]}function ke(e){if(!e)return;const t={};for(const[o,a]of Object.entries(e))!/^[A-Za-z0-9_.:-]{1,80}$/.test(o)||te.test(o)||L.test(o)||typeof a=="string"&&L.test(a)||(t[o]=a);return Object.keys(t).length>0?t:void 0}function me(){return E(0,0,0,0,0,0,0)}function E(e,t,o,a,r,n,s){return{iterations:e,childCount:t,succeededChildCount:o,failedChildCount:a,skippedChildCount:r,metadataCompleteCount:n,metadataAbortedCount:s}}function Kt(e){return e.replace(/^docs\/stories\//,"").replace(/\.story\.md$/,"")}function re(e){return e.replace(/^docs\/epics\/epic-/,"").replace(/\.md$/,"")}function W(e){return/^[A-Za-z0-9][A-Za-z0-9_-]*\.\d+[A-Za-z0-9_-]*$/.test(e)&&!L.test(e)&&!q.test(e)}function $t(e){if(e==="explicit"||e==="origin"||e==="default"||e==="fallback")return e}function Bt(e){if(e==="explicit"||e==="origin"||e==="default"||e==="fallback"||e==="unspecified")return e}function Z(e){return/prompt|commandRef/i.test(e)?"prompt_body":/std(?:out|err)|raw|log|transcript|stack/i.test(e)?"raw_log":/url/i.test(e)?"private_url":/path|cwd|argv|args|shell|command|binary|executable/i.test(e)?"executable_path":/secret|token|password|authorization|api[_-]?key|license/i.test(e)?"secret_or_pii":"unsafe_key"}function N(e,t){return typeof e[t]=="string"?e[t]:void 0}function fe(e){return!!(e&&st.test(e)&&!L.test(e)&&!q.test(e))}function I(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ut(e,t){return V(e,`${t}-${Date.now()}-${Re(4).toString("hex")}`)}function Oe(e,t){const o=Date.parse(e);return new Date((Number.isFinite(o)?o:Date.now())+t).toISOString()}function U(e,t,o){return Number.isFinite(e)?Math.max(t,Math.min(o,Math.floor(e))):t}function B(e){return Array.from(new Set(e))}function Ft(e,t){const o=new Set,a=[];for(const r of e){const n=t(r);o.has(n)||(o.add(n),a.push(r))}return a}export{_e as DEFAULT_HEADLESS_YOLOOP_LOCAL_CONCURRENCY_CAP,tt as DEFAULT_HEADLESS_YOLOOP_MAX_DURATION_MS,et as DEFAULT_HEADLESS_YOLOOP_MAX_ITERATIONS,ot as MAX_HEADLESS_YOLOOP_LOCAL_CONCURRENCY_CAP,so as RUN_YOLOOP_DRIVER_STATES,ft as defaultYoloopRootInvoker,io as isCanonicalDelegatedStoryPrompt,co as runYoloopExecutionPhase};
10
+ `],{cwd:t.projectRoot,stdio:["ignore","pipe","pipe","ipc"],windowsHide:!0});let d,i=0,c=!1;const y=setTimeout(()=>{c=!0,n.kill()},t.timeoutMs),m=f=>{i+=f.length,i>32*1024*1024&&(c=!0,n.kill())};n.stdout?.on("data",m),n.stderr?.on("data",m),n.on("message",f=>{if(d||!I(f)||typeof f.success!="boolean"||Buffer.byteLength(JSON.stringify(f))>32*1024*1024){c=!0,n.kill();return}d=f});const l={success:!1,errorCode:"headless-root-invoke-failed",error:"The isolated root metadata invocation did not complete.",exitCode:1};n.on("error",()=>{c=!0}),n.on("close",f=>{clearTimeout(y),s(f===0&&!c&&d?d:l)}),n.send({modulePath:r,options:e},f=>{f&&(c=!0,n.kill())})})}async function _t(e,t=ht){const o=Date.now(),a={args:e.args,projectRoot:e.projectRoot,format:"json",platformTarget:"runner",serverUrl:e.serverUrl,strictReadOnly:e.strictReadOnly},r=await t(a,{projectRoot:e.projectRoot,timeoutMs:e.timeoutMs});return{success:r.success,instructions:r.instructions,metadata:r.metadata,error:r.error,errorCode:r.errorCode,exitCode:r.exitCode,durationMs:Date.now()-o,publicSafe:!0}}async function mo(e){const t=e.adapterRegistry??je(),o=U(e.limit??Be,1,10),a=U(e.leaseMs??$e,1e3,3600*1e3),r=U(e.staleLeaseAfterMs??Fe,0,1440*60*1e3),s=U(e.maxAttempts??Ue,1,10),n=U(e.localConcurrencyCap??_e,1,at),d=[],i=[],c=e.now(),y=Ct({store:e.store,metadata:e.metadata,nowIso:c,maxAttempts:s,queueCap:e.queueCap});d.push(...y.reasonCodes);const m=e.store.recoverStaleHeadlessExecutionAttempts({nowIso:c,staleAfterMs:r,limit:o*2});m.recoveredAttemptIds.length>0&&(d.push(p.EXECUTION_BACKOFF),m.failedAttemptIds.length>0&&d.push(p.EXECUTION_TIMEOUT));const l=e.store.listDueHeadlessExecutionAttempts({nowIso:e.now(),limit:Math.max(o*5,10)}).filter(f=>f.directive_kind==="run_yoloop").slice(0,o);for(const f of l){const A=await It({store:e.store,projectRoot:e.projectRoot,runnerId:e.runnerId,attempt:f,registry:t,now:e.now,leaseMs:a,timeoutMs:U(e.timeoutMs??Ye,1e3,18e5),backoffMs:U(e.backoffMs??Ke,1e3,36e5),maxAttempts:s,maxIterations:U(e.maxIterations??ot,1,100),maxDurationMs:U(e.maxDurationMs??rt,1e3,72e5),localConcurrencyCap:n,queueCap:e.queueCap,adapterOptions:e.adapterOptions,runtimeDefaults:e.runtimeDefaults,runtimeFallback:e.runtimeFallback,yoloopInvoker:e.yoloopInvoker??_t,serverUrl:e.serverUrl,idFactory:e.idFactory??Vt,continuousWorkspaceManager:e.continuousWorkspaceManager??Ge(),terminalGitAdapter:e.terminalGitAdapter??Je(e.projectRoot)});i.push(A),d.push(A.reasonCode,...A.workerPoolSummary.reasonCodes)}return{ok:i.every(f=>f.outcome!=="failed")&&y.rejectedCount===0,enqueuedAttemptCount:y.enqueuedCount,dueAttemptCount:l.length,processedAttemptCount:i.filter(f=>f.outcome!=="ignored").length,recoveredAttemptIds:m.recoveredAttemptIds,receipts:i,reasonCodes:B(d.length>0?d:[p.OK]),publicSafe:!0}}function Ct(e){let t=0,o=0;const a=[];for(const r of Ht(e.metadata)){if(!I(r)||r.kind!=="run_yoloop")continue;const s=kt(r);if(!s.ok){o+=1,a.push(s.reasonCode);continue}const n=s.directive;if(!e.store.jobExists(n.jobId)){o+=1,a.push(he.BYPASS_BLOCKED);continue}const d=zt(n);if(e.store.hasCompletedHeadlessExecutionDirectiveHash(d)){a.push(p.EXECUTION_COMPLETED);continue}const i=De({autonomousKind:"run_yoloop",source:"headless-run-yoloop",targetKind:"epic",targetRef:n.targetRef,epicId:n.epicId??re(n.targetRef),jobId:n.jobId,operationSeed:n.operationId,commandHash:w(n.commandRef)}),c=Ne(e.store,i,e.nowIso,{requireExistingJob:!0});if(!c.ok){o+=1,a.push(c.reasonCode);continue}const y=V("attempt",n.idempotencyKey),m=V("exec",n.operationId),l=e.store.enqueueHeadlessExecutionAttempt({attemptId:y,executionId:m,jobId:n.jobId,directiveHash:d,directiveKind:"run_yoloop",commandClass:n.commandClass,targetKind:"epic",targetRef:n.targetRef,epicId:n.epicId??re(n.targetRef),runtimeId:n.runtime?.runtimeId,modelId:n.runtime?.modelId,runtimeSource:Yt(n.runtime?.source),reasonCode:n.reasonCode,publicSummary:n.publicSummary,enqueuedAt:e.nowIso,notBeforeAt:e.nowIso,maxAttempts:e.maxAttempts,queueCap:e.queueCap,operationId:`${n.operationId}:enqueue`,idempotencyKey:n.idempotencyKey,counts:{directives:1},hashes:{directive:d},redactionSummary:n.redactionSummary,relativePaths:[n.targetRef],metadata:Le(i,{schemaVersion:1,contractVersion:"continuity-v1",jobId:n.jobId,operationId:n.operationId,reasonCode:n.reasonCode??p.OK,targetRef:n.targetRef,directiveHash:d})});if(!l.accepted){o+=1,a.push(l.reasonCode??"queue-cap-reached");continue}l.inserted&&(t+=1),a.push(p.OK)}return{enqueuedCount:t,rejectedCount:o,reasonCodes:B(a)}}async function It(e){const t=e.now(),o=e.idFactory("lease",e.attempt.attempt_id),a=Oe(t,e.leaseMs);if(!e.store.claimHeadlessExecutionAttempt({attemptId:e.attempt.attempt_id,leaseId:o,runnerId:e.runnerId,claimedAt:t,leaseExpiresAt:a,reasonCode:p.OK}).inserted)return Mt(e.attempt,{status:e.attempt.status,receiptStatus:"ignored",reasonCode:"lease-conflict",timestamp:t});if(e.store.hasCompletedHeadlessExecutionDirectiveHash(e.attempt.directive_hash,e.attempt.attempt_id))return ue(e.store,e.attempt,{leaseId:o,runnerId:e.runnerId,status:"skipped",receiptStatus:"ignored",reasonCode:p.EXECUTION_COMPLETED,publicSummary:"Skipped duplicate run_yoloop directive because the directive hash is already completed.",completedAt:e.now(),counts:me(),hashes:{directive:e.attempt.directive_hash},redactionSummary:[],relativePaths:[e.attempt.target_ref],childStoryIds:[],stateTransitions:["start","complete"]});const n=gt(e);if(!n.ok)return ue(e.store,e.attempt,{leaseId:o,runnerId:e.runnerId,status:n.status,receiptStatus:n.receiptStatus,reasonCode:n.reasonCode,publicSummary:n.publicSummary,completedAt:e.now(),counts:me(),hashes:{directive:e.attempt.directive_hash},redactionSummary:n.redactionSummary,relativePaths:Bt(e.attempt),childStoryIds:[],stateTransitions:["start"]});const d=await St({...e,prepared:n.input}),i=Nt(e.attempt,d,e.maxAttempts,e.backoffMs,e.now()),c=i.retry?"backoff":d.status,y=i.retry?"deferred":d.receiptStatus,m=i.retry?yt.has(d.reasonCode)?d.reasonCode:p.EXECUTION_BACKOFF:d.reasonCode,l=i.retry?"Headless run_yoloop execution scheduled bounded retry after transient metadata/runtime outcome.":d.publicSummary;return ue(e.store,e.attempt,{leaseId:o,runnerId:e.runnerId,status:c,receiptStatus:y,reasonCode:m,publicSummary:l,completedAt:e.now(),durationMs:d.durationMs,notBeforeAt:i.notBeforeAt,retryCount:i.retryCount,counts:d.counts,workerPoolSummary:d.workerPoolSummary,hashes:{...d.hashes,directive:e.attempt.directive_hash},redactionSummary:d.redactionSummary,relativePaths:d.relativePaths,childStoryIds:d.childStoryIds,runtimeId:n.input.runtimeId,modelId:n.input.modelId,runtimeSource:n.input.runtimeSource,stateTransitions:d.stateTransitions})}async function St(e){const t=Date.now(),o=["start"],a=new Set,r=[],s=[],n={root:w(e.prepared.rootPrompt)},d=[_("rootPrompt","prompt_body",n.root)];let i=0,c=0,y=0,m=0,l=0,f=0,A;const u=ge(e.localConcurrencyCap),h=new Map;let D=!1;const T=new Map,H=new Map,ae=v=>{const b=v.child;n[`child-${b.storyId.replace(/[^A-Za-z0-9_.:-]/g,"-")}`]=v.commandHash,d.push(v.promptRedaction);const S=v.receipt;if(v.terminalFailure){if(v.deferredFailure){T.set(b.storyId,v.terminalFailure),u.backpressurePauseCount+=1;return}T.delete(b.storyId),H.set(b.storyId,v.terminalFailure),a.has(b.storyId)||(a.add(b.storyId),r.push(b.storyId),s.push(b.targetRef),y+=1);return}if(!S||S.outcome==="deferred"){T.set(b.storyId,v.reasonCodes.includes("queue-cap-reached")?p.WORKER_POOL_BACKPRESSURE_PAUSED:S?.reasonCode||p.EXECUTION_BACKOFF),v.reasonCodes.includes("queue-cap-reached")&&(u.backpressurePauseCount+=1);return}T.delete(b.storyId),!a.has(b.storyId)&&(a.add(b.storyId),r.push(b.storyId),s.push(b.targetRef),S.outcome==="failed"?(y+=1,H.set(b.storyId,S.reasonCode||p.EXECUTION_FAILED)):S.outcome==="ignored"?m+=1:c+=1)},J=async()=>{const v=await Promise.race([...h.entries()].map(([b,S])=>S.promise.then(K=>({storyId:b,result:K}))));h.delete(v.storyId),u.completedChildCount+=1,u.pendingChildCount=h.size,ae(v.result)};for(;;){if(i>=e.maxIterations)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:mt,publicSummary:"Headless yoloop reached the bounded iteration limit before completion metadata.",retryable:!1,startedAt:t,counts:E(i,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(Date.now()-t>e.maxDurationMs)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:ft,publicSummary:"Headless yoloop reached the bounded duration limit before completion metadata.",retryable:!1,startedAt:t,counts:E(i,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(e.terminalGitAdapter.prepareLifecycleEvidence){o.push("lifecycle_evidence");const g=await e.terminalGitAdapter.prepareLifecycleEvidence({epicId:e.prepared.epicId,nowIso:e.now()});if(!g.ok)return o.push("backoff"),R({status:g.retryEligible?"backoff":"failed",receiptStatus:g.retryEligible?"deferred":"failed",reasonCode:g.reasonCode,publicSummary:"Headless yoloop stopped because physical Git lifecycle evidence could not be produced safely.",retryable:g.retryEligible,startedAt:t,counts:E(i,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});A=g.p205Authority}o.push("metadata_parse");const v=await e.yoloopInvoker({projectRoot:e.projectRoot,args:e.prepared.rootPrompt,attemptId:e.attempt.attempt_id,executionId:e.attempt.execution_id,jobId:e.attempt.job_id,runnerId:e.runnerId,iteration:i,runtimeId:e.prepared.runtimeId,...e.prepared.modelId?{modelId:e.prepared.modelId}:{},timeoutMs:e.timeoutMs,serverUrl:e.serverUrl});if(v.durationMs!==void 0&&(n[`iter-${i}`]=w(String(v.durationMs))),!v.success)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:p.EXECUTION_FAILED,publicSummary:"Headless yoloop root metadata invocation failed with bounded public evidence.",retryable:!0,startedAt:t,counts:E(i,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});const b=v.metadata,S=Lt(b);if(!S.ok)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:S.reasonCode,publicSummary:S.publicSummary,retryable:!1,startedAt:t,counts:E(i,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:[...d,...S.redactionSummary],relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if((S.aborted||S.complete||S.replay||S.outcome&&S.outcome!=="selected"&&S.outcome!=="queue_exhausted")&&D&&h.size>0){await J(),i+=1,o.push("reinvoke");continue}if(S.aborted)return f+=1,o.push("aborted"),R({status:"failed",receiptStatus:"failed",reasonCode:pt,publicSummary:"Headless yoloop stopped because public metadata reported an aborted loop.",retryable:!1,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(S.outcome&&S.outcome!=="selected"&&S.outcome!=="queue_exhausted")return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:`yoloop-${S.outcome}`,publicSummary:"Headless yoloop stopped on a non-executable graph-first continuation outcome.",retryable:!1,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(S.replay)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:"yoloop-replay-pending",publicSummary:"Headless yoloop observed pending replay authority and did not delegate a second child.",retryable:!0,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(S.complete&&D&&T.size>0&&H.size===0)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:[...T.values()].sort()[0],publicSummary:"Headless yoloop rejected terminal completion while previously runnable work remained undispatched.",retryable:!0,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(S.complete&&D&&H.size>0)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:[...H.values()].sort()[0],publicSummary:"Headless yoloop rejected terminal completion because runnable work failed before an accepted dispatch receipt.",retryable:!1,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});const K=xt(b);if(K){o.push("terminal_git");const g=new Date,x=await Qe(e.projectRoot,{kind:"continuous",storyId:K.epicId,sessionId:`${e.runnerId}:${e.attempt.attempt_id}`,idempotencyKey:K.idempotencyKey,persistent:!1,expiresAt:new Date(g.getTime()+Math.max(e.timeoutMs,e.maxDurationMs)+6e4).toISOString()});if(!x.ok)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:x.reasonCode,publicSummary:"Headless yoloop deferred terminal Git while another physical writer retained authority.",retryable:!0,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});let z,j=!1;try{z=await Ze(K,e.terminalGitAdapter,e.now,A)}finally{j=await et(x.path,x.owner).catch(()=>!1)}if(!j)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:"git-lifecycle-integration-lock-release-failed",publicSummary:"Headless yoloop stopped because terminal Git writer ownership could not be released safely.",retryable:!0,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(n[`terminal-git-${i}`]=w(`${z.receipt.idempotencyKey}:${z.receipt.physicalStatus}`),!z.ok){const M=z.receipt.retryEligible;return o.push("backoff"),R({status:M?"backoff":"failed",receiptStatus:M?"deferred":"failed",reasonCode:z.reasonCodes[0]??"epic-terminal-git-failed",publicSummary:"Headless yoloop stopped at the epic terminal Git boundary with public-safe retry evidence.",retryable:M,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o})}if(S.complete)return l+=1,o.push("complete"),R({status:"completed",receiptStatus:"applied",reasonCode:p.EXECUTION_COMPLETED,publicSummary:"Headless yoloop completed only after fresh root-owned physical Git verification.",retryable:!1,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});i+=1,o.push("reinvoke");continue}if(S.complete)return l+=1,o.push("complete"),R({status:"completed",receiptStatus:"applied",reasonCode:p.EXECUTION_COMPLETED,publicSummary:"Headless yoloop completed after public metadata reported yoloopComplete.",retryable:!1,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});const Q=wt(b);if(Q){o.push("git_reconciliation");const g=await Xe(Q,e.terminalGitAdapter,e.now);if(n[`git-reconciliation-${i}`]=w(`${Q.idempotencyKey}:${g.reasonCodes.join(",")}`),!g.ok)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:g.reasonCodes[0]??"git-reconciliation-failed",publicSummary:"Headless yoloop paused at a fail-closed Git reconciliation boundary.",retryable:!0,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o})}const C=Ot(b,e.prepared.epicId);if(!C.ok)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:C.reasonCode,publicSummary:C.publicSummary,retryable:!1,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:[...d,...C.redactionSummary],relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});const F=C.continuous?void 0:C.prompts.find(g=>a.has(g.storyId));if(F)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:p.YOLOOP_ISOLATION_VIOLATION,publicSummary:"Headless yoloop rejected cyclic child story delegation evidence.",retryable:!1,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:[...d,_("storyId","prompt_body",w(F.storyId))],relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(u.mode=C.mode==="continuous_dag"?"continuous_dag":C.parallelAuthorized?"parallel_wave":"serial",u.serverMaxConcurrency=C.serverMaxConcurrency,C.continuous){D=!0;const g=C.prompts.filter(x=>!a.has(x.storyId)&&!h.has(x.storyId));if(u.pendingChildCount=g.length+h.size,g.length>0){const x=Se({store:e.store,nowIso:e.now(),localCap:e.localConcurrencyCap,serverMaxConcurrency:C.serverMaxConcurrency,parallelAuthorized:!0,continuous:!0,eligibleCount:g.length});if(u.queueCap=x.queueCap,u.availableLeases=x.availableLeases,u.effectiveConcurrency=x.effectiveConcurrency,u.reasonCodes.push(x.reasonCode),x.effectiveConcurrency===0&&h.size===0)return u.backpressurePauseCount+=1,o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:p.WORKER_POOL_BACKPRESSURE_PAUSED,publicSummary:"Headless yoloop retained its eligible frontier while physical worker capacity was unavailable.",retryable:!0,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});const z=g.slice(0,x.effectiveConcurrency);o.push("child_story_delegation");for(const j of z)h.set(j.storyId,{child:j,promise:Ie({...e,child:j,iteration:i})});u.startedChildCount+=z.length,u.peakConcurrency=Math.max(u.peakConcurrency,h.size),u.pendingChildCount=g.length-z.length+h.size}if(h.size>0)await J();else{if(T.size>0)return o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:[...T.values()].sort()[0],publicSummary:"Headless yoloop retained deferred continuous work for a bounded retry.",retryable:!0,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});if(H.size>0)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:[...H.values()].sort()[0],publicSummary:"Headless yoloop completed independent work and stopped on the remaining failed dependency closure.",retryable:!1,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o})}i+=1,o.push("reinvoke");continue}u.pendingChildCount=C.prompts.length;const Y=[...C.prompts];for(;Y.length>0;){const g=Se({store:e.store,nowIso:e.now(),localCap:e.localConcurrencyCap,serverMaxConcurrency:C.serverMaxConcurrency,parallelAuthorized:C.parallelAuthorized,continuous:!1,eligibleCount:Y.length});if(u.queueCap=g.queueCap,u.availableLeases=g.availableLeases,u.effectiveConcurrency=g.effectiveConcurrency,u.reasonCodes.push(g.reasonCode),g.effectiveConcurrency===0)return u.backpressurePauseCount+=1,u.pendingChildCount=Y.length,o.push("backoff"),R({status:"backoff",receiptStatus:"deferred",reasonCode:p.WORKER_POOL_BACKPRESSURE_PAUSED,publicSummary:"Headless yoloop paused child workers because bounded queue or lease capacity was unavailable.",retryable:!0,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o});const x=Y.splice(0,g.effectiveConcurrency);u.startedChildCount+=x.length,u.peakConcurrency=Math.max(u.peakConcurrency,x.length),u.pendingChildCount=Y.length,o.push("child_story_delegation");const z=await Promise.all(x.map(M=>Ie({...e,child:M,iteration:i})));u.completedChildCount+=z.length;let j;for(const M of z){const ne=M.child;n[`child-${ne.storyId.replace(/[^A-Za-z0-9_.:-]/g,"-")}`]=M.commandHash,d.push(M.promptRedaction),r.push(ne.storyId),s.push(ne.targetRef),a.add(ne.storyId);const ee=M.receipt;if(!ee){M.reasonCodes.includes("queue-cap-reached")?(u.backpressurePauseCount+=1,u.pendingChildCount+=1,u.reasonCodes.push(p.WORKER_POOL_BACKPRESSURE_PAUSED),j??={kind:"deferred",reasonCode:p.WORKER_POOL_BACKPRESSURE_PAUSED}):(y+=1,j??={kind:"missing",reasonCode:p.EXECUTION_FAILED});continue}if(ee.outcome==="deferred"){j??={kind:"deferred",reasonCode:p.EXECUTION_BACKOFF};continue}if(ee.outcome==="failed"){y+=1,j??={kind:"failed",reasonCode:ee.reasonCode||p.EXECUTION_FAILED};continue}ee.outcome==="ignored"?m+=1:c+=1}if(j){const M=j.kind==="deferred";return R({status:M?"backoff":"failed",receiptStatus:M?"deferred":"failed",reasonCode:j.reasonCode,publicSummary:j.kind==="missing"?"Headless yoloop child story delegation did not produce a public receipt.":M?"Headless yoloop child story delegated bounded backoff to the root attempt.":"Headless yoloop child story execution failed with public receipt evidence.",retryable:M,startedAt:t,counts:E(i+1,r.length,c,y,m,l,f),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:o})}}i+=1,o.push("reinvoke")}}async function Ie(e){const t=e.child.dispatchId?await e.continuousWorkspaceManager.prepare({projectRoot:e.projectRoot,epicId:e.prepared.epicId,storyId:e.child.storyId,targetRef:e.child.targetRef,dispatchId:e.child.dispatchId,executionBranch:e.child.executionBranch??"",graphRevision:e.child.graphRevision??"",authorizedWriteSet:e.child.writeSet??[]}):void 0;if(t&&!t.ok)return{child:e.child,reasonCodes:[t.reasonCode],commandHash:w(e.child.commandRef),promptRedaction:_(`child.${e.child.storyId}`,"prompt_body",w(e.child.commandRef)),terminalFailure:t.reasonCode,deferredFailure:/backpressure|lease-active/.test(t.reasonCode)};const o=e.projectRoot,a=t?.ok?We(t.value):e.adapterOptions?.commandRunner,r=Dt({rootAttempt:e.attempt,child:e.child,iteration:e.iteration,runtimeId:e.prepared.runtimeId,modelId:e.prepared.modelId,runtimeSource:e.prepared.runtimeSource}),s=V("attempt",r.idempotencyKey);let n=!!t;try{const d=await Ve({store:e.store,projectRoot:o,runnerId:e.runnerId,now:e.now,metadata:{continuityExecutionDirectives:[r]},adapterRegistry:e.registry,adapterOptions:{...e.adapterOptions,cwd:o,env:{...e.adapterOptions?.env,...t?.ok?{NEOCORTEX_BRANCHLESS_PROJECT_ROOT:t.value.workspacePath,NEOCORTEX_BRANCHLESS_ROOT_AUTHORITY:JSON.stringify(e.child.rootAuthority)}:{}},...a?{commandRunner:a,versionRunner:a}:{}},runtimeDefaults:e.runtimeDefaults,runtimeFallback:e.runtimeFallback,timeoutMs:e.timeoutMs,maxAttempts:1,limit:1,queueCap:e.queueCap,attemptIds:[s],idFactory:e.idFactory}),i=d.receipts.find(c=>c.attemptId===s)??d.receipts[0];if(t?.ok&&i&&i.outcome!=="failed"&&i.outcome!=="deferred"){const c=await e.continuousWorkspaceManager.integrate(t.value,{receiptRefs:[`continuity:${i.attemptId}`],nowIso:i.timestamp});if(!c.ok)return{child:e.child,receipt:i,reasonCodes:[...d.reasonCodes,c.reasonCode],commandHash:w(e.child.commandRef),promptRedaction:_(`child.${e.child.storyId}`,"prompt_body",w(e.child.commandRef)),terminalFailure:c.reasonCode,deferredFailure:/backpressure|graph-revision-stale/.test(c.reasonCode)};n=!1}return{child:e.child,receipt:i,reasonCodes:d.reasonCodes,commandHash:w(e.child.commandRef),promptRedaction:_(`child.${e.child.storyId}`,"prompt_body",w(e.child.commandRef))}}finally{t?.ok&&await e.continuousWorkspaceManager.release(t.value,n)}}function Se(e){const t=e.store.collectSnapshotRows({nowIso:e.nowIso,jobLimit:1,staleLeaseLimit:1,receiptLimit:1,eventLimit:1,snapshotLimit:1}),o=Math.max(1,Math.floor(t.queue.capacity)),a=Math.max(0,Math.floor(t.queue.running)-1),r=e.continuous?Math.max(0,Math.floor(t.queue.available)):Math.max(0,Math.min(Math.max(0,e.localCap-a),Math.floor(t.queue.available))),s=e.parallelAuthorized?Math.max(1,Math.floor(e.serverMaxConcurrency)):1,n=Math.max(0,Math.min(e.continuous?e.eligibleCount:s,...e.continuous?[]:[e.localCap],o,r));return{queueCap:o,availableLeases:r,effectiveConcurrency:n,reasonCode:n===0?p.WORKER_POOL_BACKPRESSURE_PAUSED:(e.parallelAuthorized||e.continuous)&&n>1?p.WORKER_POOL_PARALLEL_ACTIVE:p.WORKER_POOL_SERIAL_FALLBACK}}function ge(e){return{mode:"serial",serverMaxConcurrency:1,localCap:e,queueCap:1,availableLeases:1,effectiveConcurrency:1,peakConcurrency:0,pendingChildCount:0,startedChildCount:0,completedChildCount:0,backpressurePauseCount:0,reasonCodes:[]}}function k(e){return{mode:e.mode,serverMaxConcurrency:$(e.serverMaxConcurrency),localCap:$(e.localCap),queueCap:$(e.queueCap),availableLeases:$(e.availableLeases),effectiveConcurrency:$(e.effectiveConcurrency),peakConcurrency:$(e.peakConcurrency),pendingChildCount:$(e.pendingChildCount),startedChildCount:$(e.startedChildCount),completedChildCount:$(e.completedChildCount),backpressurePauseCount:$(e.backpressurePauseCount),reasonCodes:B(e.reasonCodes.length>0?e.reasonCodes:[p.WORKER_POOL_SERIAL_FALLBACK]).slice(0,10),publicSafe:!0}}function le(e=_e){return k(ge(e))}function $(e){return Number.isFinite(e)?Math.max(0,Math.min(1e4,Math.floor(e))):0}function gt(e){const t=Me(e.attempt.metadata_json,{autonomousKind:"run_yoloop",jobId:e.attempt.job_id,targetKind:"epic",targetRef:e.attempt.target_ref});if(!t.ok)return{ok:!1,status:"failed",receiptStatus:"failed",reasonCode:t.reasonCode,publicSummary:t.publicSummary,redactionSummary:t.redactionSummary};const o=At(e.attempt);if(!o.ok)return o;const a=bt(e);if(!a.ok)return{ok:!1,status:"failed",receiptStatus:"failed",reasonCode:a.reasonCode,publicSummary:a.publicSummary,redactionSummary:a.redactionSummary};const r=e.attempt.epic_id??re(e.attempt.target_ref);return{ok:!0,input:{rootPrompt:`*yoloop @${e.attempt.target_ref}`,targetRef:e.attempt.target_ref,epicId:r,runtimeId:a.runtimeId,...a.modelId?{modelId:a.modelId}:{},runtimeSource:a.runtimeSource,publicSafe:!0}}}function At(e){const t=[];e.directive_kind!=="run_yoloop"&&t.push(_("directiveKind","unsafe_key","value-denied")),e.target_kind!=="epic"&&t.push(_("targetKind","prompt_body","value-denied")),(!de.test(e.target_ref)||q.test(e.target_ref)||L.test(e.target_ref))&&t.push(_("targetRef","prompt_body","value-denied"));const o=re(e.target_ref);return e.epic_id&&e.epic_id!==o&&t.push(_("epicId","prompt_body","value-denied")),t.length>0?{ok:!1,status:"failed",receiptStatus:"failed",reasonCode:p.PROMPT_REJECTED,publicSummary:"Headless run_yoloop attempt did not match the canonical public epic prompt shape.",redactionSummary:t}:{ok:!0,input:{rootPrompt:`*yoloop @${e.target_ref}`,targetRef:e.target_ref,epicId:o,runtimeId:"fake",publicSafe:!0}}}function bt(e){const t=e.runtimeDefaults!==void 0?e.runtimeDefaults:He({projectRoot:e.projectRoot});if(I(t)&&t.ok===!1)return{ok:!1,reasonCode:p.RUNTIME_UNTRUSTED,publicSummary:typeof t.publicSummary=="string"?t.publicSummary:"Headless runtime defaults failed public-safety validation.",redactionSummary:Array.isArray(t.redactionSummary)?t.redactionSummary:[]};const o=Ft(e.attempt.runtime_source)??"explicit",a=e.attempt.runtime_id||e.attempt.model_id?{...e.attempt.runtime_id?{runtimeId:e.attempt.runtime_id}:{},...e.attempt.model_id?{modelId:e.attempt.model_id}:{},source:o,publicSafe:!0}:void 0,r={registry:e.registry,defaults:t,fallback:e.runtimeFallback};a&&(o==="origin"?r.origin=a:o==="default"?r.projectDefault=a:o==="fallback"?r.fallback=a:r.explicit=a);const s=ze(r);return s.ok?{ok:!0,runtimeId:s.runtimeId,...s.modelId?{modelId:s.modelId}:{},runtimeSource:s.runtimeSource}:{ok:!1,reasonCode:s.reasonCode,publicSummary:s.publicSummary,redactionSummary:s.redactionSummary}}function kt(e){const t=[];for(const h of Object.keys(e))(!lt.has(h)||te.test(h))&&t.push(_(h,Z(h),"key-denied"));e.publicSafe!==!0&&t.push(_("publicSafe","unsafe_key","value-denied"));const o=N(e,"kind"),a=N(e,"commandClass"),r=N(e,"jobId"),s=N(e,"operationId"),n=N(e,"idempotencyKey"),d=N(e,"targetKind"),i=N(e,"targetRef"),c=N(e,"commandRef"),y=N(e,"publicSummary"),m=N(e,"epicId");o!=="run_yoloop"&&t.push(_("kind","unsafe_key","value-denied")),a!=="goal-tick"&&a!=="loop-tick"&&t.push(_("commandClass","unsafe_key","value-denied")),fe(r)||t.push(_("jobId","unsafe_key","value-denied")),fe(s)||t.push(_("operationId","unsafe_key","value-denied")),fe(n)||t.push(_("idempotencyKey","unsafe_key","value-denied")),(d!=="epic"||!i||!de.test(i)||L.test(i))&&t.push(_("targetRef","prompt_body","value-denied"));const l=i?`*yoloop @${i}`:void 0;(!c||c!==l||c.includes("@neocortex")||q.test(c)||L.test(c))&&t.push(_("commandRef","prompt_body","value-denied")),m&&i&&m!==re(i)&&t.push(_("epicId","prompt_body","value-denied")),(!y||y.length>240||L.test(y))&&t.push(_("publicSummary","unbounded_text","value-denied")),e.reasonCode!==void 0&&(typeof e.reasonCode!="string"||L.test(e.reasonCode))&&t.push(_("reasonCode","unsafe_key","value-denied"));const f=jt(e.runtime,t);e.attempts!==void 0&&se(e.attempts,"attempts",t),e.metadata!==void 0&&se(e.metadata,"metadata",t);const A=I(e.metadata)?e.metadata:void 0,u=Kt(e.redactionSummary,t);return t.length>0||o!=="run_yoloop"||!a||!r||!s||!n||!i||!c||!y?{ok:!1,reasonCode:t.some(D=>D.reason==="prompt_body")?p.PROMPT_REJECTED:p.DIRECTIVE_REJECTED,redactionSummary:t}:{ok:!0,directive:{kind:"run_yoloop",commandClass:a,jobId:r,operationId:s,idempotencyKey:n,targetKind:"epic",targetRef:i,commandRef:c,...m?{epicId:m}:{},...f?{runtime:f}:{},publicSummary:y,...typeof e.reasonCode=="string"?{reasonCode:e.reasonCode}:{},...A?{metadata:A}:{},...u.length>0?{redactionSummary:u}:{},publicSafe:!0}}}function Ot(e,t){if(!e)return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop metadata was missing.",[]);const o=Et(e);if(!o.ok)return o;const a=[],r=I(e.yoloopExecutionPlan)?e.yoloopExecutionPlan:void 0,s=r?P(r.storyIds).filter(W):[],n=r?.version===3&&I(r.scheduler)&&Array.isArray(r.scheduler.nodes)?new Map(r.scheduler.nodes.filter(I).map(l=>[String(l.storyId??""),l])):new Map,d=r?.version===3&&I(r.scheduler)&&typeof r.scheduler.graphRevision=="string"?r.scheduler.graphRevision:void 0,i=r?.version===3&&typeof r.executionBranch=="string"?r.executionBranch:void 0;let c;if(r){const l=vt(r);if(!l.ok)return l;c=l;for(const A of Tt(r)){const u=X(A,t,"execution-plan");if(!u.ok)return u;a.push(Ae(u.prompt,n.get(u.prompt.storyId),d,i))}if(a.length===0)for(const A of s){const u=X(`*yolo @docs/stories/${A}.story.md`,t,"execution-plan");if(!u.ok)return u;a.push(Ae(u.prompt,n.get(u.prompt.storyId),d,i))}const f=Rt(e.skillDirectives,a);if(!f.ok)return f}const y=typeof e.nextStoryId=="string"&&W(e.nextStoryId)?e.nextStoryId:void 0;for(const l of r?[]:Array.isArray(e.skillDirectives)?e.skillDirectives:[]){if(!I(l)||l.kind!=="task")continue;const f=P(l.promptTemplates);if(f.length>0){for(const D of f){const T=X(D,t,"task-directive");if(!T.ok)return T;a.push(T.prompt)}continue}const A=typeof l.promptTemplate=="string"?l.promptTemplate:void 0;if(!A)continue;const u=P(l.storyIds).filter(W),h=u.length>0?u:y?[y]:[];if(h.length===0&&ce.test(A)){const D=X(A,t,"task-directive");if(!D.ok)return D;a.push(D.prompt);continue}for(const D of h){const T=A.includes("{storyId}")?A.replaceAll("{storyId}",D):A,H=X(T,t,"task-directive");if(!H.ok)return H;a.push(H.prompt)}}if(a.length===0&&y){const l=X(`*yolo @docs/stories/${y}.story.md`,t,"next-story");if(!l.ok)return l;a.push(l.prompt)}const m=qt(a,l=>l.commandRef);if(c?.continuous){if(m.length!==s.length||m.some(l=>l.preparationOnly!==!0||l.source!=="execution-plan"))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless continuous yoloop rejected an ambiguous or non-preparation child prompt.",[_("promptTemplates","prompt_body","operation-denied")])}else if(m.some(l=>l.preparationOnly===!0))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected branchless preparation outside a validated continuous plan.",[_("promptTemplates","prompt_body","operation-denied")]);if(s.length>0){const l=new Set(s);for(const f of m)if(!l.has(f.storyId))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a child prompt outside the server-authorized execution plan.",[_("storyId","prompt_body",w(f.storyId))])}return c?.parallelAuthorized&&!G(m.map(l=>l.storyId),s)?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected a parallel plan whose executable prompts did not match the selected wave.",[]):m.length===0&&!c?.continuous?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop metadata did not include an authorized per-story child prompt.",[]):{ok:!0,prompts:m,mode:c?.mode??"legacy",serverMaxConcurrency:c?.serverMaxConcurrency??1,parallelAuthorized:c?.parallelAuthorized??!1,continuous:c?.continuous??!1,reasonCodes:[p.OK,c?.parallelAuthorized?p.WORKER_POOL_PARALLEL_ACTIVE:p.WORKER_POOL_SERIAL_FALLBACK]}}function Ae(e,t,o,a){if(!t||!o||!a)return e;const r=Array.isArray(t.writeSet)?P(t.writeSet):[],s=be(t.childExecutionAuthority,{storyId:e.storyId,invocationPrompt:e.commandRef,authorizedWriteSet:r});return{...e,...typeof t.dispatchId=="string"?{dispatchId:t.dispatchId}:{},...typeof t.idempotencyKey=="string"?{idempotencyKey:t.idempotencyKey}:{},graphRevision:o,executionBranch:a,...r.length>0?{writeSet:r}:{},...s?{rootAuthority:s}:{}}}function Et(e){const t=[];return e.nextStoryId!==void 0&&oe(e.nextStoryId,"nextStoryId",t),e.yoloopExecutionPlan!==void 0&&oe(e.yoloopExecutionPlan,"yoloopExecutionPlan",t),Array.isArray(e.skillDirectives)&&e.skillDirectives.forEach((o,a)=>{I(o)&&o.kind==="task"&&oe(o,`skillDirectives.${a}`,t)}),t.length>0?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected unsafe public metadata before child delegation.",t):{ok:!0}}function Rt(e,t){if(!Array.isArray(e))return{ok:!0};const o=new Set(t.map(a=>a.commandRef));for(const[a,r]of e.entries()){if(!I(r)||r.kind!=="task")continue;const s=typeof r.promptTemplate=="string"?r.promptTemplate:void 0,n=P(r.promptTemplates);if(s==="[REDACTED]"&&r.subagentType==="neocortex"&&typeof r.reasonCode=="string"&&r.reasonCode.startsWith("directive-prompt-")&&n.length===0)continue;const i=[...s?[s]:[],...n];if(r.subagentType!=="neocortex"||i.length===0||i.some(c=>!o.has(c)))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a task directive that conflicted with the server-authorized execution plan.",[_(`skillDirectives.${a}`,"prompt_body","operation-denied")])}return{ok:!0}}function oe(e,t,o){if(typeof e=="string"){if(/\.allowedDebt\.constraints\.\d+$/.test(t)&&ct.has(e))return;(L.test(e)||/\0/.test(e))&&o.push(_(t,Z(t),"value-denied"));return}if(!(e==null||typeof e=="number"||typeof e=="boolean")){if(Array.isArray(e)){e.forEach((a,r)=>oe(a,`${t}.${r}`,o));return}if(I(e)){for(const[a,r]of Object.entries(e)){const s=`${t}.${a}`;!(a==="promptTemplate"||a==="promptTemplates"||a==="invocationPrompt"||a==="childPromptKind"||a==="allowMetaTaskPromptInChild"||a==="authorization")&&te.test(a)&&o.push(_(s,Z(a),"key-denied")),oe(r,s,o)}return}o.push(_(t,"unsafe_key","value-denied"))}}function vt(e){const t=typeof e.mode=="string"?e.mode:"",o=I(e.isolationPolicy)?e.isolationPolicy:void 0,a=P(e.storyIds);if(e.authorization!=="server_authorized")return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan was not server-authorized.",[]);if(e.executor!=="root_agent"&&e.executor!=="root_agent_with_child_tasks")return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan executor was not root-owned.",[]);if(t!=="serial"&&t!=="parallel_wave"&&t!=="continuous_dag"&&t!=="manual")return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan mode was invalid.",[]);const r=e.version===3&&t==="continuous_dag";if(!Array.isArray(e.storyIds)||!r&&a.length===0||a.length!==e.storyIds.length||a.some(h=>!W(h))||new Set(a).size!==a.length)return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan story selection was invalid or ambiguous.",[]);if(!o||o.rootOwnsLoop!==!0||o.childPromptKind==="per_story_branchless_preparation_only"&&!r||Object.prototype.hasOwnProperty.call(o,"childExecutionBoundary")&&!r||o.childPromptKind!=="per_story_yolo_only"&&o.childPromptKind!=="per_story_branchless_preparation_only"&&!(o.childPromptKind==="none"&&(t==="serial"&&o.childTaskDelegation==="not_required"||t==="parallel_wave"&&e.executor==="root_agent"&&o.childTaskDelegation==="forbidden"))||o.allowOuterYoloopInChild!==!1||o.allowMetaTaskPromptInChild!==!1)return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected an execution plan that did not preserve root-owned child isolation.",[_("isolationPolicy","prompt_body","value-denied")]);const s=Array.isArray(e.skippedStories)?e.skippedStories:[];for(const h of s){if(!I(h)||typeof h.storyId!="string"||!W(h.storyId)||typeof h.reason!="string")return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop skipped-story evidence was malformed.",[]);if(a.includes(h.storyId))return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop selected a story that server evidence marked skipped.",[])}if(r){const h=I(e.scheduler)?e.scheduler:void 0,D=Array.isArray(h?.nodes)?h.nodes.filter(I):[],T=P(h?.readyStoryIds),H=P(h?.runningStoryIds),ae=P(e.promptTemplates),J=I(e.dependencyBasis)?e.dependencyBasis:void 0,v=I(e.readinessBasis)?e.readinessBasis:void 0,b=typeof h?.graphRevision=="string"?h.graphRevision:"",S=typeof e.executionBranch=="string"?e.executionBranch:"",K=D.map(C=>typeof C.storyId=="string"?C.storyId:""),Q=D.find(C=>{const F=typeof C.storyId=="string"?C.storyId:"",Y=typeof C.promptTemplate=="string"?C.promptTemplate:"",g=Array.isArray(C.writeSet)?P(C.writeSet):[];return!W(F)||Y!==`*yolo @docs/stories/${F}.story.md branchless-preparation`||typeof C.dispatchId!="string"||!/^[a-f0-9]{64}$/.test(C.dispatchId)||typeof C.idempotencyKey!="string"||!/^[a-f0-9]{64}$/.test(C.idempotencyKey)||C.dependencyBasis!=="verified"||!Array.isArray(C.dependencies)||P(C.dependencies).length!==C.dependencies.length||!Array.isArray(C.writeSet)||g.length===0||g.length!==C.writeSet.length||!be(C.childExecutionAuthority,{storyId:F,invocationPrompt:Y,authorizedWriteSet:g})});return e.executor!=="root_agent_with_child_tasks"||e.legacyConcurrencyIgnored!==!0||Object.prototype.hasOwnProperty.call(e,"maxConcurrency")||Object.prototype.hasOwnProperty.call(e,"maxParallel")||o?.rootOwnedScheduling!=="continuous_dag_allowed"||o?.childPromptKind!=="per_story_branchless_preparation_only"||o?.childExecutionBoundary!=="filesystem_only"||o?.childTaskDelegation!=="allowed"||o?.maxDepth!==1||o?.childWorkspace!=="branchless_sandbox"||o?.epicCheckout!=="current_checkout"||o?.workspaceLifecycle!=="user_managed"||o?.integrationOwner!=="root_agent"||!h||h.schemaVersion!==1||h.strategy!=="continuous-event-driven-dag"||h.logicalConcurrency!=="ready-set"||h.capacityPolicy!=="backpressure-only"||h.rootOwnsLoop!==!0||h.maxDepth!==1||!/^[a-f0-9]{64}$/.test(b)||!$t(S)||new Set(K).size!==K.length||K.some(C=>!W(C))||T.some(C=>!K.includes(C))||H.some(C=>!K.includes(C)||T.includes(C))||!G(a,T)||ae.length!==a.length||ae.some((C,F)=>C!==`*yolo @docs/stories/${a[F]}.story.md branchless-preparation`)||!J||J.source!=="state_snapshot"||!v||v.source!=="ready_wave"||!G(P(v.selectedStoryIds),a)||Q?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected an invalid continuous DAG execution plan.",[]):{ok:!0,mode:"continuous_dag",serverMaxConcurrency:a.length,parallelAuthorized:!0,continuous:!0}}if(e.version===2){const h=qe(e);return h.ok?{ok:!0,mode:"parallel_wave",serverMaxConcurrency:h.childExecutionConcurrency,parallelAuthorized:!1,continuous:!1}:O(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected an unsafe phased execution plan.",[])}if(t!=="parallel_wave")return{ok:!0,mode:t,serverMaxConcurrency:1,parallelAuthorized:!1,continuous:!1};const n=e.maxConcurrency,d=e.maxParallel,i=I(e.dependencyBasis)?e.dependencyBasis:void 0,c=I(e.readinessBasis)?e.readinessBasis:void 0,y=Array.isArray(e.parallelWaves)?e.parallelWaves:[],m=y.length===1&&I(y[0])?y[0]:void 0;if(o.rootOwnedScheduling!=="parallel_wave_allowed"||!Number.isInteger(n)||typeof n!="number"||n<2||n>a.length||!Number.isInteger(d)||d!==n||!i||i.source!=="state_snapshot"||!G(P(i.storyIds),a)||!c||c.source!=="ready_wave"||!G(P(c.selectedStoryIds),a)||!m||!G(P(m.storyIds),a)||m.maxConcurrency!==n)return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan lacked consistent bounded authorization and readiness evidence.",[]);const l=P(m.promptTemplates);if(l.length!==a.length||new Set(l).size!==l.length)return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel wave prompts were incomplete or ambiguous.",[]);const A=(Array.isArray(m.proofSummaries)?m.proofSummaries:Array.isArray(e.proofSummaries)?e.proofSummaries:[]).find(h=>I(h)&&G(P(h.storyIds),a));return!I(A)||A.dependencyClosure!=="resolved"||A.contractOwnership!=="non_overlapping"||A.validationSurfaces!=="compatible"?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan lacked resolved independence proof.",[]):s.find(h=>I(h)&&typeof h.reason=="string"&&/(cycle|unresolved|ambiguous)/i.test(h.reason))?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan contained unresolved dependency evidence.",[]):{ok:!0,mode:"parallel_wave",serverMaxConcurrency:n,parallelAuthorized:!0,continuous:!1}}function be(e,t){if(!I(e)||!I(e.artifact))return;const o=e.artifact,a=Array.isArray(e.authorizedWriteSet)?P(e.authorizedWriteSet):[];if(Object.keys(e).sort().join("\0")!==["artifact","authorizedWriteSet","effectScope","invocationPrompt","kind","lifecycleAuthority","publicSafe","schemaVersion","storyId"].sort().join("\0")||Object.keys(o).sort().join("\0")!==["content","contentBinding","kind","path","schemaVersion"].sort().join("\0")||e.schemaVersion!==1||e.kind!=="branchless_story_preparation"||e.storyId!==t.storyId||e.invocationPrompt!==t.invocationPrompt||!Array.isArray(e.authorizedWriteSet)||a.length!==e.authorizedWriteSet.length||a.some(s=>tt(s)!==s)||!Pt(a,t.authorizedWriteSet)||e.effectScope!=="filesystem_only"||e.lifecycleAuthority!=="root_only"||e.publicSafe!==!0||o.schemaVersion!==1||o.kind!=="branchless_root_bound_artifact"||typeof o.path!="string"||!a.includes(o.path)||typeof o.content!="string"||o.content.length===0||o.content.length>4096||typeof o.contentBinding!="string"||!/^[a-f0-9]{64}$/.test(o.contentBinding))return;const r=Ee("sha256").update(["branchless-root-bound-artifact-v1",t.storyId,t.invocationPrompt,...a,"filesystem_only","root_only",o.path,o.content].join("\0")).digest("hex");if(o.contentBinding===r)return e}function Pt(e,t){return e.length===t.length&&e.every((o,a)=>o===t[a])}function Tt(e){const t=[];t.push(...P(e.promptTemplates));for(const o of Array.isArray(e.serialSteps)?e.serialSteps:[])I(o)&&typeof o.promptTemplate=="string"&&t.push(o.promptTemplate);for(const o of Array.isArray(e.parallelWaves)?e.parallelWaves:[])I(o)&&t.push(...P(o.promptTemplates));return t}function X(e,t,o){if(Ce(e))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected an unsafe child prompt shape.",[_("promptTemplate","prompt_body",w(e))]);if(!ce.test(e))return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop child prompt did not match the canonical per-story yolo shape.",[_("promptTemplate","prompt_body",w(e))]);const a=st.test(e),r=e.replace(/^\*yolo @/,"").replace(/ branchless-preparation$/,""),s=Ut(r);return!nt.test(r)||!W(s)||!s.startsWith(`${t}.`)?O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a child prompt outside the targeted public epic.",[_("storyId","prompt_body",w(s))]):{ok:!0,prompt:{storyId:s,targetRef:r,commandRef:e,source:o,...a?{preparationOnly:!0}:{}}}}function xt(e){const t=e?.epicTerminalGitDirective;if(!(!I(t)||t.schemaVersion!==1||t.kind!=="epic_terminal_git"||typeof t.epicId!="string"||typeof t.executionBranch!="string"||typeof t.originBranch!="string"||typeof t.expectedExecutionHeadSha!="string"||!Array.isArray(t.storyCheckpointIds)||!I(t.localGates)||t.localGates.passed!==!0||!Array.isArray(t.localGates.receiptRefs)||!I(t.reconcile)||typeof t.idempotencyKey!="string"||t.publicSafe!==!0))return t}function wt(e){const t=e?.epicGitReconciliationDirective;if(!(!I(t)||t.schemaVersion!==1||t.kind!=="epic_git_reconciliation"||typeof t.epicId!="string"||typeof t.executionBranch!="string"||typeof t.originBranch!="string"||!["start","resume","audit"].includes(String(t.lifecycleBoundary))||typeof t.dryRun!="boolean"||typeof t.idempotencyKey!="string"||t.publicSafe!==!0))return t}function Lt(e){if(!e||!I(e))return{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop root invocation did not return public metadata.",redactionSummary:[]};const t=I(e.yoloopContinuationDecision)?e.yoloopContinuationDecision:void 0,o=typeof t?.outcome=="string"?t.outcome:void 0,a=o==="queue_exhausted"||e.yoloopComplete===!0,r=e.yoloopAborted===!0,s=o==="selected"&&t?.replay===!0;return o&&!["selected","queue_exhausted","blocked","cycle","invalid","no_progress"].includes(o)?{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop rejected an unknown continuation outcome.",redactionSummary:[]}:o==="queue_exhausted"&&t?.terminalSuccess!==!0?{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop rejected inconsistent queue exhaustion metadata.",redactionSummary:[]}:a&&r?{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop metadata reported mutually exclusive terminal states.",redactionSummary:[_("yoloopTerminal","unsafe_key","value-denied")]}:{ok:!0,complete:a,aborted:r,outcome:o,replay:s}}function Dt(e){const t=`${e.rootAttempt.execution_id}:${e.child.graphRevision??"legacy"}:${e.child.storyId}`,o=e.child.dispatchId??V("child-op",`${t}:${e.iteration}`),a=e.child.idempotencyKey??V("child-idem",`${t}:${e.iteration}`);return{schemaVersion:1,contractVersion:"continuity-v1",kind:"run_yolo",commandClass:e.rootAttempt.command_class==="goal-tick"?"goal-tick":"loop-tick",jobId:e.rootAttempt.job_id,operationId:o,idempotencyKey:a,targetKind:"story",targetRef:e.child.targetRef,commandRef:e.child.commandRef,...e.child.preparationOnly?{executionMode:"branchless_child_preparation"}:{},storyId:e.child.storyId,runtime:{runtimeId:e.runtimeId,...e.modelId?{modelId:e.modelId}:{},source:e.runtimeSource??"explicit",reasonCode:e.runtimeSource==="fallback"?p.RUNTIME_FALLBACK:p.RUNTIME_EXPLICIT,publicSafe:!0},publicSummary:`Root-owned yoloop delegated public story ${e.child.storyId}.`,reasonCode:p.OK,metadata:{governanceSource:"delegated-subagent",parentAttemptId:e.rootAttempt.attempt_id,parentExecutionId:e.rootAttempt.execution_id,iteration:e.iteration,...e.child.dispatchId?{dispatchId:e.child.dispatchId}:{},...e.child.graphRevision?{graphRevision:e.child.graphRevision}:{},...e.child.writeSet?{writeSet:e.child.writeSet}:{},...e.child.executionBranch?{executionBranch:e.child.executionBranch}:{},...e.child.graphRevision?{childWorkspace:"branchless_sandbox",epicCheckout:"current_checkout",workspaceLifecycle:"user_managed",integrationOwner:"root_agent",maxDepth:1}:{},publicSafe:!0},attempts:[],redactionSummary:[_("prompt","prompt_body",w(e.child.commandRef))],publicSafe:!0}}function ue(e,t,o){const a=ke(o.hashes),r=o.workerPoolSummary??le(),s=ke({iterations:o.counts.iterations,childCount:o.counts.childCount,succeededChildCount:o.counts.succeededChildCount,failedChildCount:o.counts.failedChildCount,skippedChildCount:o.counts.skippedChildCount,metadataCompleteCount:o.counts.metadataCompleteCount,metadataAbortedCount:o.counts.metadataAbortedCount,serverMaxConcurrency:r.serverMaxConcurrency,localCap:r.localCap,queueCap:r.queueCap,availableLeases:r.availableLeases,effectiveConcurrency:r.effectiveConcurrency,peakConcurrency:r.peakConcurrency,pendingChildCount:r.pendingChildCount,startedChildCount:r.startedChildCount,completedChildCount:r.completedChildCount,backpressurePauseCount:r.backpressurePauseCount}),n={schemaVersion:1,contractVersion:"continuity-v1",attemptId:t.attempt_id,executionId:t.execution_id,jobId:t.job_id,directiveHash:t.directive_hash,status:o.status,reasonCode:o.reasonCode,storyIds:o.childStoryIds.slice(0,50),counts:s,hashes:a,...o.reasonCode===he.BYPASS_BLOCKED?{governanceEvidence:we}:{},reasonCodes:B([o.reasonCode,...r.reasonCodes,...o.stateTransitions]),publicSummary:ie(o.publicSummary)};return e.completeHeadlessExecutionAttempt({attemptId:t.attempt_id,executionId:t.execution_id,jobId:t.job_id,leaseId:o.leaseId,runnerId:o.runnerId,status:o.status,completedAt:o.completedAt,durationMs:o.durationMs,reasonCode:o.reasonCode,publicSummary:ie(o.publicSummary),notBeforeAt:o.notBeforeAt,retryCount:o.retryCount,counts:s,hashes:a,redactionSummary:o.redactionSummary,relativePaths:B([t.target_ref,...o.relativePaths]),metadata:n}),e.recordHeadlessExecutionReceipt({receiptId:`receipt-${V("headless-yoloop",`${t.attempt_id}-${o.status}`)}`,attemptId:t.attempt_id,executionId:t.execution_id,jobId:t.job_id,status:o.receiptStatus,reasonCode:o.reasonCode,createdAt:o.completedAt,operationId:`${t.execution_id}:${o.status}:receipt`,idempotencyKey:`${t.directive_hash}:${o.status}:receipt`,counts:s,hashes:a,redactionSummary:o.redactionSummary,relativePaths:B([t.target_ref,...o.relativePaths]),metadata:n}),e.recordHeadlessExecutionSummary({eventId:`event-${V("headless-yoloop-summary",`${t.attempt_id}-${o.status}`)}`,attemptId:t.attempt_id,executionId:t.execution_id,jobId:t.job_id,status:o.status,runtimeId:o.runtimeId,modelId:o.modelId,publicSummary:ie(o.publicSummary),reasonCode:o.reasonCode,createdAt:o.completedAt,durationMs:o.durationMs,counts:s,hashes:a,redactionSummary:o.redactionSummary,relativePaths:B([t.target_ref,...o.relativePaths]),metadata:n}),{attemptId:t.attempt_id,executionId:t.execution_id,jobId:t.job_id,status:o.status,outcome:o.receiptStatus,reasonCode:o.reasonCode,timestamp:o.completedAt,childStoryIds:o.childStoryIds,aggregateCounts:o.counts,workerPoolSummary:r,redactionSummary:o.redactionSummary,publicSafe:!0}}function Mt(e,t){return{attemptId:e.attempt_id,executionId:e.execution_id,jobId:e.job_id,status:t.status,outcome:t.receiptStatus,reasonCode:t.reasonCode,timestamp:t.timestamp,childStoryIds:[],aggregateCounts:me(),workerPoolSummary:le(),redactionSummary:[],publicSafe:!0}}function Nt(e,t,o,a,r){if(!t.retryable)return{retry:!1};const s=e.retry_count+1;if(s>=Math.max(1,e.max_attempts||o))return{retry:!1,retryCount:s};const n=Math.min(8,2**Math.max(0,e.retry_count));return{retry:!0,retryCount:s,notBeforeAt:Oe(r,a*n)}}function R(e){return{status:e.status,receiptStatus:e.receiptStatus,reasonCode:e.reasonCode,publicSummary:e.publicSummary,retryable:e.retryable,durationMs:Math.max(0,Date.now()-e.startedAt),counts:e.counts,workerPoolSummary:e.workerPoolSummary??le(),hashes:e.hashes,redactionSummary:e.redactions.slice(0,50),relativePaths:B(e.relativePaths).slice(0,50),childStoryIds:B(e.childStoryIds).slice(0,50),stateTransitions:B(e.stateTransitions)}}function jt(e,t){if(e===void 0)return;if(!I(e)){t.push(_("runtime","unsafe_key","value-denied"));return}for(const s of Object.keys(e))(!ut.has(s)||te.test(s))&&t.push(_(`runtime.${s}`,Z(s),"key-denied"));e.publicSafe!==!0&&t.push(_("runtime.publicSafe","unsafe_key","value-denied"));const o=N(e,"runtimeId"),a=N(e,"modelId"),r=N(e,"source");if(o&&(!/^[A-Za-z0-9][A-Za-z0-9._:-]{0,79}$/.test(o)||L.test(o)||q.test(o))&&t.push(_("runtime.runtimeId","unsafe_key","value-denied")),a&&(!/^[A-Za-z0-9][A-Za-z0-9._:+/-]{0,119}$/.test(a)||L.test(a)||q.test(a))&&t.push(_("runtime.modelId","unsafe_key","value-denied")),r!==void 0&&r!=="explicit"&&r!=="origin"&&r!=="default"&&r!=="fallback"&&r!=="unspecified"&&t.push(_("runtime.source","unsafe_key","value-denied")),e.reasonCode!==void 0&&(typeof e.reasonCode!="string"||L.test(e.reasonCode))&&t.push(_("runtime.reasonCode","unsafe_key","value-denied")),e.publicSafe===!0)return{...o?{runtimeId:o}:{},...a?{modelId:a}:{},...r==="explicit"||r==="origin"||r==="default"||r==="fallback"||r==="unspecified"?{source:r}:{},...typeof e.reasonCode=="string"?{reasonCode:e.reasonCode}:{},publicSafe:!0}}function Ht(e){const t=Array.isArray(e)?e:e?[e]:[],o=[];for(const a of t){const r=a.continuityExecutionDirectives;Array.isArray(r)&&o.push(...r)}return o}function zt(e){return w(pe({kind:e.kind,commandClass:e.commandClass,jobId:e.jobId,targetRef:e.targetRef,commandRef:e.commandRef,epicId:e.epicId,runtime:e.runtime}))}function pe(e){return Array.isArray(e)?`[${e.map(pe).join(",")}]`:I(e)?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${pe(e[t])}`).join(",")}}`:JSON.stringify(e)}function se(e,t,o){if(typeof e=="string"){(L.test(e)||q.test(e))&&o.push(_(t,Z(t),"value-denied"));return}if(!(e==null||typeof e=="number"||typeof e=="boolean")){if(Array.isArray(e)){e.forEach((a,r)=>se(a,`${t}.${r}`,o));return}if(I(e)){for(const[a,r]of Object.entries(e)){const s=`${t}.${a}`;te.test(a)&&o.push(_(s,Z(a),"key-denied")),se(r,s,o)}return}o.push(_(t,"unsafe_key","value-denied"))}}function Kt(e,t){if(e===void 0)return[];if(!Array.isArray(e))return t.push(_("redactionSummary","unsafe_key","value-denied")),[];const o=[];for(const[a,r]of e.entries()){if(!I(r)||r.publicSafe!==!0){t.push(_(`redactionSummary.${a}`,"unsafe_key","value-denied"));continue}const s=N(r,"field"),n=N(r,"reason"),d=N(r,"evidence");if(!s||!n||!d||L.test(s)||L.test(n)||L.test(d)){t.push(_(`redactionSummary.${a}`,"unsafe_key","value-denied"));continue}o.push({field:s,reason:n,evidence:d,publicSafe:!0})}return o}function O(e,t,o){return{ok:!1,reasonCode:e,publicSummary:t,redactionSummary:o}}function P(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function $t(e){return e.length>0&&e.length<=240&&!e.startsWith("-")&&!e.includes("..")&&!e.includes("\\")&&/^[A-Za-z0-9._/-]+$/.test(e)}function G(e,t){return e.length===t.length&&new Set(e).size===e.length&&e.every(o=>t.includes(o))}function Bt(e){return de.test(e.target_ref)?[e.target_ref]:[]}function ke(e){if(!e)return;const t={};for(const[o,a]of Object.entries(e))!/^[A-Za-z0-9_.:-]{1,80}$/.test(o)||te.test(o)||L.test(o)||typeof a=="string"&&L.test(a)||(t[o]=a);return Object.keys(t).length>0?t:void 0}function me(){return E(0,0,0,0,0,0,0)}function E(e,t,o,a,r,s,n){return{iterations:e,childCount:t,succeededChildCount:o,failedChildCount:a,skippedChildCount:r,metadataCompleteCount:s,metadataAbortedCount:n}}function Ut(e){return e.replace(/^docs\/stories\//,"").replace(/\.story\.md$/,"")}function re(e){return e.replace(/^docs\/epics\/epic-/,"").replace(/\.md$/,"")}function W(e){return/^[A-Za-z0-9][A-Za-z0-9_-]*\.\d+[A-Za-z0-9_-]*$/.test(e)&&!L.test(e)&&!q.test(e)}function Ft(e){if(e==="explicit"||e==="origin"||e==="default"||e==="fallback")return e}function Yt(e){if(e==="explicit"||e==="origin"||e==="default"||e==="fallback"||e==="unspecified")return e}function Z(e){return/prompt|commandRef/i.test(e)?"prompt_body":/std(?:out|err)|raw|log|transcript|stack/i.test(e)?"raw_log":/url/i.test(e)?"private_url":/path|cwd|argv|args|shell|command|binary|executable/i.test(e)?"executable_path":/secret|token|password|authorization|api[_-]?key|license/i.test(e)?"secret_or_pii":"unsafe_key"}function N(e,t){return typeof e[t]=="string"?e[t]:void 0}function fe(e){return!!(e&&dt.test(e)&&!L.test(e)&&!q.test(e))}function I(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Vt(e,t){return V(e,`${t}-${Date.now()}-${Re(4).toString("hex")}`)}function Oe(e,t){const o=Date.parse(e);return new Date((Number.isFinite(o)?o:Date.now())+t).toISOString()}function U(e,t,o){return Number.isFinite(e)?Math.max(t,Math.min(o,Math.floor(e))):t}function B(e){return Array.from(new Set(e))}function qt(e,t){const o=new Set,a=[];for(const r of e){const s=t(r);o.has(s)||(o.add(s),a.push(r))}return a}export{_e as DEFAULT_HEADLESS_YOLOOP_LOCAL_CONCURRENCY_CAP,rt as DEFAULT_HEADLESS_YOLOOP_MAX_DURATION_MS,ot as DEFAULT_HEADLESS_YOLOOP_MAX_ITERATIONS,at as MAX_HEADLESS_YOLOOP_LOCAL_CONCURRENCY_CAP,uo as RUN_YOLOOP_DRIVER_STATES,_t as defaultYoloopRootInvoker,po as isCanonicalDelegatedStoryPrompt,mo as runYoloopExecutionPhase};