@ornexus/neocortex 4.60.43 → 4.60.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/sbom.cdx.json +23 -23
- package/install.js +16 -1
- package/install.ps1 +57 -401
- package/install.sh +30 -37
- package/package.json +2 -2
- package/packages/client/dist/commands/invoke.js +39 -39
- package/packages/client/dist/errors/error-messages.js +2 -2
- package/packages/client/dist/evidence/collector.d.ts +2 -0
- package/packages/client/dist/evidence/collector.js +1 -1
- package/packages/client/dist/license/license-client.d.ts +11 -0
- package/packages/client/dist/license/license-client.js +1 -1
- package/packages/client/dist/runner/headless/run-yoloop.d.ts +9 -0
- package/packages/client/dist/runner/headless/run-yoloop.js +5 -3
- package/packages/client/dist/yoloop/index.d.ts +1 -1
- package/packages/client/dist/yoloop/invoke-hooks.js +10 -8
- package/packages/client/dist/yoloop/shared-yoloop-types.d.ts +61 -0
- package/packages/client/dist/yoloop/yoloop-client-state-store.d.ts +23 -0
- package/packages/client/dist/yoloop/yoloop-client-state-store.js +1 -1
- package/packages/shared/dist/invocation/index.js +9 -2
- package/targets-stubs/antigravity/gemini.md +1 -1
- package/targets-stubs/antigravity/install-antigravity.sh +10 -101
- package/targets-stubs/antigravity/skill/SKILL.md +1 -1
- package/targets-stubs/claude-code/neocortex-root.agent.yaml +1 -1
- package/targets-stubs/claude-code/neocortex-root.md +2 -2
- package/targets-stubs/claude-code/neocortex.agent.yaml +1 -1
- package/targets-stubs/claude-code/neocortex.md +2 -2
- package/targets-stubs/codex/AGENTS.md +1 -1
- package/targets-stubs/codex/install-codex.sh +4 -1
- package/targets-stubs/cursor/agent.md +2 -2
- package/targets-stubs/cursor/install-cursor.sh +4 -1
- package/targets-stubs/gemini-cli/agent.md +2 -2
- package/targets-stubs/gemini-cli/install-gemini.sh +4 -1
- package/targets-stubs/grok/install-grok.sh +4 -1
- package/targets-stubs/lib/mcp-merge.js +220 -20
- package/targets-stubs/opencode/neocortex-root.md +1 -1
- package/targets-stubs/vscode/install-vscode.sh +4 -1
- package/targets-stubs/vscode/neocortex.agent.md +2 -2
|
@@ -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
|
|
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
|
|
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
|
|
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};
|
|
@@ -15,6 +15,15 @@ export declare const DEFAULT_HEADLESS_YOLOOP_MAX_ITERATIONS = 20;
|
|
|
15
15
|
export declare const DEFAULT_HEADLESS_YOLOOP_MAX_DURATION_MS: number;
|
|
16
16
|
export declare const DEFAULT_HEADLESS_YOLOOP_LOCAL_CONCURRENCY_CAP = 1;
|
|
17
17
|
export declare const MAX_HEADLESS_YOLOOP_LOCAL_CONCURRENCY_CAP = 10;
|
|
18
|
+
/**
|
|
19
|
+
* Resolve the absent-override default from physical capacity. The explicit CLI
|
|
20
|
+
* option remains authoritative; this resolver is injectable for deterministic
|
|
21
|
+
* Node 18 fallback tests.
|
|
22
|
+
*/
|
|
23
|
+
export declare function resolveDefaultHeadlessYoloopLocalConcurrencyCap(input?: {
|
|
24
|
+
readonly availableParallelism?: number;
|
|
25
|
+
readonly cpuCount?: number;
|
|
26
|
+
}): number;
|
|
18
27
|
export declare const RUN_YOLOOP_DRIVER_STATES: readonly ["start", "lifecycle_evidence", "metadata_parse", "child_story_delegation", "reinvoke", "git_reconciliation", "terminal_git", "complete", "aborted", "backoff"];
|
|
19
28
|
export type RunYoloopDriverState = (typeof RUN_YOLOOP_DRIVER_STATES)[number];
|
|
20
29
|
export interface RunYoloopRootInvokeInput {
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import{createHash as
|
|
1
|
+
import{createHash as Te,randomBytes as we}from"node:crypto";import{spawn as xe}from"node:child_process";import{existsSync as Le}from"node:fs";import*as _e from"node:os";import{dirname as De,join as Ce}from"node:path";import{fileURLToPath as Me}from"node:url";import{AUTONOMOUS_GOVERNANCE_EVIDENCE_TAG as Ne,AUTONOMOUS_GOVERNANCE_REASON_CODES as Ie,autonomousGovernanceMetadata as He,buildAutonomousGovernanceEnvelope as je,readAutonomousGovernanceEnvelopeFromMetadata as ze,recordAutonomousGovernance as Be}from"../../continuity/autonomous-governance.js";import{createDefaultHeadlessAdapterRegistry as Ke}from"./adapters.js";import{loadHeadlessRuntimeDefaults as Ue,resolveHeadlessRuntime as $e}from"./resolver.js";import{DEFAULT_HEADLESS_EXECUTION_BACKOFF_MS as Fe,DEFAULT_HEADLESS_EXECUTION_LEASE_MS as Ye,DEFAULT_HEADLESS_EXECUTION_LIMIT as Ve,DEFAULT_HEADLESS_EXECUTION_MAX_ATTEMPTS as qe,DEFAULT_HEADLESS_EXECUTION_STALE_LEASE_AFTER_MS as We,DEFAULT_HEADLESS_EXECUTION_TIMEOUT_MS as Ge,headlessExecutionEntityId as V,runYoloExecutionPhase as Xe}from"./run-yolo.js";import{HEADLESS_REASON_CODES as p,boundPublicSummary as de,hashPublicValue as L,redaction as _}from"./types.js";import{validatePhasedYoloopPlan as Ze}from"./prepared-story-bundle.js";import{createAnchoredContinuousStoryCommandRunner as Je,createBranchlessContinuousStoryWorkspaceManager as Qe}from"./continuous-story-workspace.js";import{executeEpicGitReconciliation as et,executeEpicTerminalGit as tt}from"./epic-terminal-git-runner.js";import{createCliEpicTerminalGitAdapter as ot}from"./epic-terminal-git-cli-adapter.js";import{acquireGitLifecyclePhysicalIntegrationLock as rt,releaseGitLifecyclePhysicalIntegrationLock as at}from"../../git/git-lifecycle-store.js";import{normalizeContinuousWriteRef as nt}from"../../../../shared/dist/yoloop/wave-decision-receipt.js";const st=20,it=1800*1e3,ce=1,Se=10;function be(e={}){let o=e.availableParallelism;if(o===void 0){const t=_e.availableParallelism;if(typeof t=="function")try{o=t()}catch{o=void 0}}if(!Number.isFinite(o)||(o??0)<1){const t=e.cpuCount??(()=>{try{return _e.cpus().length}catch{return ce}})();o=Number.isFinite(t)&&t>0?t:ce}return $(o??ce,1,Se)}const ho=Object.freeze(["start","lifecycle_evidence","metadata_parse","child_story_delegation","reinvoke","git_reconciliation","terminal_git","complete","aborted","backoff"]),le=/^docs\/epics\/epic-[A-Za-z0-9._-]+\.md$/,dt=/^docs\/stories\/[A-Za-z0-9._-]+\.story\.md$/,ue=/^\*yolo @docs\/stories\/[A-Za-z0-9._-]+\.story\.md(?: branchless-preparation)?$/,ct=/^\*yolo @docs\/stories\/[A-Za-z0-9._-]+\.story\.md branchless-preparation$/,lt=/^(?:\uFEFF)?---(?:\r?\n)/,ut=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$/,q=/(?:[;&|`$<>]|\$\(|\n|\r|\0)/,oe=/(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,D=/(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,pt=new Set(["no_private_prompt_or_history","no_raw_vendor_corpus","no_unrelated_story_context"]);function ge(e){return lt.test(e)||e.includes("@neocortex")||e.includes("*yoloop")||q.test(e)||D.test(e)}function _o(e){return!ge(e)&&ue.test(e)}const mt=new Set(["schemaVersion","contractVersion","kind","commandClass","jobId","operationId","idempotencyKey","targetKind","targetRef","commandRef","epicId","runtime","publicSummary","reasonCode","attempts","metadata","redactionSummary","publicSafe"]),ft=new Set(["runtimeId","modelId","source","reasonCode","publicSafe"]),yt="job-aborted",ht="max-iterations-reached",_t="max-duration-reached",Ct=new Set(["git-lifecycle-integration-backpressure","git-lifecycle-integration-lock-failed","git-lifecycle-integration-lock-release-failed"]);async function It(e,o){const t=De(Me(import.meta.url)),a=Ce(t,"../../commands/invoke.js"),r=Le(a)?a:Ce(t,"../../../dist/commands/invoke.js");return new Promise(s=>{const n=xe(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
|
|
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:t.projectRoot,stdio:["ignore","pipe","pipe","ipc"],windowsHide:!0});let s,c=0,i=!1;const u=setTimeout(()=>{i=!0,n.kill()},t.timeoutMs),f=d=>{c+=d.length,c>32*1024*1024&&(i=!0,n.kill())};n.stdout?.on("data",f),n.stderr?.on("data",f),n.on("message",d=>{if(s||!I(d)||typeof d.success!="boolean"||Buffer.byteLength(JSON.stringify(d))>32*1024*1024){i=!0,n.kill();return}s=d});const m={success:!1,errorCode:"headless-root-invoke-failed",error:"The isolated root metadata invocation did not complete.",exitCode:1};n.on("error",()=>{i=!0}),n.on("close",d=>{clearTimeout(u),r(d===0&&!i&&s?s:m)}),n.send({modulePath:a,options:e},d=>{d&&(i=!0,n.kill())})})}async function yt(e,t=ft){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 lo(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),c=[],i=[],u=e.now(),f=ht({store:e.store,metadata:e.metadata,nowIso:u,maxAttempts:n,queueCap:e.queueCap});c.push(...f.reasonCodes);const m=e.store.recoverStaleHeadlessExecutionAttempts({nowIso:u,staleAfterMs:r,limit:o*2});m.recoveredAttemptIds.length>0&&(c.push(p.EXECUTION_BACKOFF),m.failedAttemptIds.length>0&&c.push(p.EXECUTION_TIMEOUT));const d=e.store.listDueHeadlessExecutionAttempts({nowIso:e.now(),limit:Math.max(o*5,10)}).filter(C=>C.directive_kind==="run_yoloop").slice(0,o);for(const C of d){const A=await _t({store:e.store,projectRoot:e.projectRoot,runnerId:e.runnerId,attempt:C,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??yt,serverUrl:e.serverUrl,idFactory:e.idFactory??Yt,continuousWorkspaceManager:e.continuousWorkspaceManager??qe(),terminalGitAdapter:e.terminalGitAdapter??Xe(e.projectRoot)});i.push(A),c.push(A.reasonCode,...A.workerPoolSummary.reasonCodes)}return{ok:i.every(C=>C.outcome!=="failed")&&f.rejectedCount===0,enqueuedAttemptCount:f.enqueuedCount,dueAttemptCount:d.length,processedAttemptCount:i.filter(C=>C.outcome!=="ignored").length,recoveredAttemptIds:m.recoveredAttemptIds,receipts:i,reasonCodes:B(c.length>0?c:[p.OK]),publicSafe:!0}}function ht(e){let t=0,o=0;const a=[];for(const r of Nt(e.metadata)){if(!I(r)||r.kind!=="run_yoloop")continue;const n=At(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 c=jt(s);if(e.store.hasCompletedHeadlessExecutionDirectiveHash(c)){a.push(p.EXECUTION_COMPLETED);continue}const i=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,i,e.nowIso,{requireExistingJob:!0});if(!u.ok){o+=1,a.push(u.reasonCode);continue}const f=V("attempt",s.idempotencyKey),m=V("exec",s.operationId),d=e.store.enqueueHeadlessExecutionAttempt({attemptId:f,executionId:m,jobId:s.jobId,directiveHash:c,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:Ut(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:c},redactionSummary:s.redactionSummary,relativePaths:[s.targetRef],metadata:xe(i,{schemaVersion:1,contractVersion:"continuity-v1",jobId:s.jobId,operationId:s.operationId,reasonCode:s.reasonCode??p.OK,targetRef:s.targetRef,directiveHash:c})});if(!d.accepted){o+=1,a.push(d.reasonCode??"queue-cap-reached");continue}d.inserted&&(t+=1),a.push(p.OK)}return{enqueuedCount:t,rejectedCount:o,reasonCodes:B(a)}}async function _t(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 Lt(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=It(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:Kt(e.attempt),childStoryIds:[],stateTransitions:["start"]});const c=await Ct({...e,prepared:s.input}),i=Dt(e.attempt,c,e.maxAttempts,e.backoffMs,e.now()),u=i.retry?"backoff":c.status,f=i.retry?"deferred":c.receiptStatus,m=i.retry?mt.has(c.reasonCode)?c.reasonCode:p.EXECUTION_BACKOFF:c.reasonCode,d=i.retry?"Headless run_yoloop execution scheduled bounded retry after transient metadata/runtime outcome.":c.publicSummary;return ue(e.store,e.attempt,{leaseId:o,runnerId:e.runnerId,status:u,receiptStatus:f,reasonCode:m,publicSummary:d,completedAt:e.now(),durationMs:c.durationMs,notBeforeAt:i.notBeforeAt,retryCount:i.retryCount,counts:c.counts,workerPoolSummary:c.workerPoolSummary,hashes:{...c.hashes,directive:e.attempt.directive_hash},redactionSummary:c.redactionSummary,relativePaths:c.relativePaths,childStoryIds:c.childStoryIds,runtimeId:s.input.runtimeId,modelId:s.input.modelId,runtimeSource:s.input.runtimeSource,stateTransitions:c.stateTransitions})}async function Ct(e){const t=Date.now(),o=["start"],a=new Set,r=[],n=[],s={root:w(e.prepared.rootPrompt)},c=[h("rootPrompt","prompt_body",s.root)];let i=0,u=0,f=0,m=0,d=0,C=0,A;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,c.push(v.promptRedaction);const S=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),f+=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")&&(l.backpressurePauseCount+=1);return}T.delete(b.storyId),!a.has(b.storyId)&&(a.add(b.storyId),r.push(b.storyId),n.push(b.targetRef),S.outcome==="failed"?(f+=1,H.set(b.storyId,S.reasonCode||p.EXECUTION_FAILED)):S.outcome==="ignored"?m+=1:u+=1)},J=async()=>{const v=await Promise.race([...y.entries()].map(([b,S])=>S.promise.then(K=>({storyId:b,result:K}))));y.delete(v.storyId),l.completedChildCount+=1,l.pendingChildCount=y.size,ae(v.result)};for(;;){if(i>=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(i,r.length,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,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(i,r.length,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],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,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],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&&(s[`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,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});const b=v.metadata,S=xt(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,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:[...c,...S.redactionSummary],relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});if((S.aborted||S.complete||S.replay||S.outcome&&S.outcome!=="selected"&&S.outcome!=="queue_exhausted")&&D&&y.size>0){await J(),i+=1,o.push("reinvoke");continue}if(S.aborted)return C+=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(i+1,r.length,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],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,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],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,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],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,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],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,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});const K=Pt(b);if(K){o.push("terminal_git");const g=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(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,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});let z,j=!1;try{z=await Ge(K,e.terminalGitAdapter,e.now,A)}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(i+1,r.length,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});if(s[`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,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o})}if(S.complete)return d+=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,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});i+=1,o.push("reinvoke");continue}if(S.complete)return d+=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,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});const Q=Tt(b);if(Q){o.push("git_reconciliation");const g=await We(Q,e.terminalGitAdapter,e.now);if(s[`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,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o})}const _=bt(b,e.prepared.epicId);if(!_.ok)return o.push("backoff"),R({status:"failed",receiptStatus:"failed",reasonCode:_.reasonCode,publicSummary:_.publicSummary,retryable:!1,startedAt:t,counts:E(i+1,r.length,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:[...c,..._.redactionSummary],relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});const Y=_.continuous?void 0:_.prompts.find(g=>a.has(g.storyId));if(Y)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,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:[...c,h("storyId","prompt_body",w(Y.storyId))],relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});if(l.mode=_.mode==="continuous_dag"?"continuous_dag":_.parallelAuthorized?"parallel_wave":"serial",l.serverMaxConcurrency=_.serverMaxConcurrency,_.continuous){D=!0;const g=_.prompts.filter(x=>!a.has(x.storyId)&&!y.has(x.storyId));if(l.pendingChildCount=g.length+y.size,g.length>0){const x=Se({store:e.store,nowIso:e.now(),localCap:e.localConcurrencyCap,serverMaxConcurrency:_.serverMaxConcurrency,parallelAuthorized:!0,continuous:!0,eligibleCount:g.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(i+1,r.length,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});const z=g.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:i})});l.startedChildCount+=z.length,l.peakConcurrency=Math.max(l.peakConcurrency,y.size),l.pendingChildCount=g.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(i+1,r.length,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,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(i+1,r.length,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o})}i+=1,o.push("reinvoke");continue}l.pendingChildCount=_.prompts.length;const F=[..._.prompts];for(;F.length>0;){const g=Se({store:e.store,nowIso:e.now(),localCap:e.localConcurrencyCap,serverMaxConcurrency:_.serverMaxConcurrency,parallelAuthorized:_.parallelAuthorized,continuous:!1,eligibleCount:F.length});if(l.queueCap=g.queueCap,l.availableLeases=g.availableLeases,l.effectiveConcurrency=g.effectiveConcurrency,l.reasonCodes.push(g.reasonCode),g.effectiveConcurrency===0)return l.backpressurePauseCount+=1,l.pendingChildCount=F.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,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],childStoryIds:r,stateTransitions:o});const x=F.splice(0,g.effectiveConcurrency);l.startedChildCount+=x.length,l.peakConcurrency=Math.max(l.peakConcurrency,x.length),l.pendingChildCount=F.length,o.push("child_story_delegation");const z=await Promise.all(x.map(M=>Ie({...e,child:M,iteration:i})));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,c.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}):(f+=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"){f+=1,j??={kind:"failed",reasonCode:ee.reasonCode||p.EXECUTION_FAILED};continue}ee.outcome==="ignored"?m+=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(i+1,r.length,u,f,m,d,C),workerPoolSummary:k(l),hashes:s,redactions:c,relativePaths:[e.prepared.targetRef,...n],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:h(`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=wt({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 c=await Ye({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}),i=c.receipts.find(u=>u.attemptId===n)??c.receipts[0];if(t?.ok&&i&&i.outcome!=="failed"&&i.outcome!=="deferred"){const u=await e.continuousWorkspaceManager.integrate(t.value,{receiptRefs:[`continuity:${i.attemptId}`],nowIso:i.timestamp});if(!u.ok)return{child:e.child,receipt:i,reasonCodes:[...c.reasonCodes,u.reasonCode],commandHash:w(e.child.commandRef),promptRedaction:h(`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:i,reasonCodes:c.reasonCodes,commandHash:w(e.child.commandRef),promptRedaction:h(`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 It(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=St(e.attempt);if(!o.ok)return o;const a=gt(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 St(e){const t=[];e.directive_kind!=="run_yoloop"&&t.push(h("directiveKind","unsafe_key","value-denied")),e.target_kind!=="epic"&&t.push(h("targetKind","prompt_body","value-denied")),(!de.test(e.target_ref)||q.test(e.target_ref)||L.test(e.target_ref))&&t.push(h("targetRef","prompt_body","value-denied"));const o=re(e.target_ref);return e.epic_id&&e.epic_id!==o&&t.push(h("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 gt(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=Bt(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 At(e){const t=[];for(const y of Object.keys(e))(!dt.has(y)||te.test(y))&&t.push(h(y,Z(y),"key-denied"));e.publicSafe!==!0&&t.push(h("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"),c=N(e,"targetKind"),i=N(e,"targetRef"),u=N(e,"commandRef"),f=N(e,"publicSummary"),m=N(e,"epicId");o!=="run_yoloop"&&t.push(h("kind","unsafe_key","value-denied")),a!=="goal-tick"&&a!=="loop-tick"&&t.push(h("commandClass","unsafe_key","value-denied")),fe(r)||t.push(h("jobId","unsafe_key","value-denied")),fe(n)||t.push(h("operationId","unsafe_key","value-denied")),fe(s)||t.push(h("idempotencyKey","unsafe_key","value-denied")),(c!=="epic"||!i||!de.test(i)||L.test(i))&&t.push(h("targetRef","prompt_body","value-denied"));const d=i?`*yoloop @${i}`:void 0;(!u||u!==d||u.includes("@neocortex")||q.test(u)||L.test(u))&&t.push(h("commandRef","prompt_body","value-denied")),m&&i&&m!==re(i)&&t.push(h("epicId","prompt_body","value-denied")),(!f||f.length>240||L.test(f))&&t.push(h("publicSummary","unbounded_text","value-denied")),e.reasonCode!==void 0&&(typeof e.reasonCode!="string"||L.test(e.reasonCode))&&t.push(h("reasonCode","unsafe_key","value-denied"));const C=Mt(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,l=Ht(e.redactionSummary,t);return t.length>0||o!=="run_yoloop"||!a||!r||!n||!s||!i||!u||!f?{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:i,commandRef:u,...m?{epicId:m}:{},...C?{runtime:C}:{},publicSummary:f,...typeof e.reasonCode=="string"?{reasonCode:e.reasonCode}:{},...A?{metadata:A}:{},...l.length>0?{redactionSummary:l}:{},publicSafe:!0}}}function bt(e,t){if(!e)return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop metadata was missing.",[]);const o=kt(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(d=>[String(d.storyId??""),d])):new Map,c=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 u;if(r){const d=Et(r);if(!d.ok)return d;u=d;for(const A of vt(r)){const l=X(A,t,"execution-plan");if(!l.ok)return l;a.push(Ae(l.prompt,s.get(l.prompt.storyId),c,i))}if(a.length===0)for(const A of n){const l=X(`*yolo @docs/stories/${A}.story.md`,t,"execution-plan");if(!l.ok)return l;a.push(Ae(l.prompt,s.get(l.prompt.storyId),c,i))}const C=Ot(e.skillDirectives,a);if(!C.ok)return C}const f=typeof e.nextStoryId=="string"&&W(e.nextStoryId)?e.nextStoryId:void 0;for(const d of r?[]:Array.isArray(e.skillDirectives)?e.skillDirectives:[]){if(!I(d)||d.kind!=="task")continue;const C=P(d.promptTemplates);if(C.length>0){for(const D of C){const T=X(D,t,"task-directive");if(!T.ok)return T;a.push(T.prompt)}continue}const A=typeof d.promptTemplate=="string"?d.promptTemplate:void 0;if(!A)continue;const l=P(d.storyIds).filter(W),y=l.length>0?l:f?[f]:[];if(y.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 y){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&&f){const d=X(`*yolo @docs/stories/${f}.story.md`,t,"next-story");if(!d.ok)return d;a.push(d.prompt)}const m=Ft(a,d=>d.commandRef);if(u?.continuous){if(m.length!==n.length||m.some(d=>d.preparationOnly!==!0||d.source!=="execution-plan"))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless continuous yoloop rejected an ambiguous or non-preparation child prompt.",[h("promptTemplates","prompt_body","operation-denied")])}else if(m.some(d=>d.preparationOnly===!0))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected branchless preparation outside a validated continuous plan.",[h("promptTemplates","prompt_body","operation-denied")]);if(n.length>0){const d=new Set(n);for(const C of m)if(!d.has(C.storyId))return O(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a child prompt outside the server-authorized execution plan.",[h("storyId","prompt_body",w(C.storyId))])}return u?.parallelAuthorized&&!G(m.map(d=>d.storyId),n)?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected a parallel plan whose executable prompts did not match the selected wave.",[]):m.length===0&&!u?.continuous?O(p.YOLOOP_METADATA_INVALID,"Headless yoloop metadata did not include an authorized per-story child prompt.",[]):{ok:!0,prompts:m,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 kt(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 Ot(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 i=[...n?[n]:[],...s];if(r.subagentType!=="neocortex"||i.length===0||i.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.",[h(`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(h(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(h(n,Z(a),"key-denied")),oe(r,n,o)}return}o.push(h(t,"unsafe_key","value-denied"))}}function Et(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.",[h("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:"",S=typeof e.executionBranch=="string"?e.executionBranch:"",K=D.map(_=>typeof _.storyId=="string"?_.storyId:""),Q=D.find(_=>{const Y=typeof _.storyId=="string"?_.storyId:"",F=typeof _.promptTemplate=="string"?_.promptTemplate:"",g=Array.isArray(_.writeSet)?P(_.writeSet):[];return!W(Y)||F!==`*yolo @docs/stories/${Y}.story.md branchless-preparation`||typeof _.dispatchId!="string"||!/^[a-f0-9]{64}$/.test(_.dispatchId)||typeof _.idempotencyKey!="string"||!/^[a-f0-9]{64}$/.test(_.idempotencyKey)||_.dependencyBasis!=="verified"||!Array.isArray(_.dependencies)||P(_.dependencies).length!==_.dependencies.length||!Array.isArray(_.writeSet)||g.length===0||g.length!==_.writeSet.length||!be(_.childExecutionAuthority,{storyId:Y,invocationPrompt:F,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"||!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)||!zt(S)||new Set(K).size!==K.length||K.some(_=>!W(_))||T.some(_=>!K.includes(_))||H.some(_=>!K.includes(_)||T.includes(_))||!G(a,T)||ae.length!==a.length||ae.some((_,Y)=>_!==`*yolo @docs/stories/${a[Y]}.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=Fe(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,c=e.maxParallel,i=I(e.dependencyBasis)?e.dependencyBasis:void 0,u=I(e.readinessBasis)?e.readinessBasis:void 0,f=Array.isArray(e.parallelWaves)?e.parallelWaves:[],m=f.length===1&&I(f[0])?f[0]:void 0;if(o.rootOwnedScheduling!=="parallel_wave_allowed"||!Number.isInteger(s)||typeof s!="number"||s<2||s>a.length||!Number.isInteger(c)||c!==s||!i||i.source!=="state_snapshot"||!G(P(i.storyIds),a)||!u||u.source!=="ready_wave"||!G(P(u.selectedStoryIds),a)||!m||!G(P(m.storyIds),a)||m.maxConcurrency!==s)return O(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan lacked consistent bounded authorization and readiness evidence.",[]);const d=P(m.promptTemplates);if(d.length!==a.length||new Set(d).size!==d.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(y=>I(y)&&G(P(y.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.",[]):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)||!Rt(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 Rt(e,t){return e.length===t.length&&e.every((o,a)=>o===t[a])}function vt(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.",[h("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.",[h("promptTemplate","prompt_body",w(e))]);const a=at.test(e),r=e.replace(/^\*yolo @/,"").replace(/ branchless-preparation$/,""),n=$t(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.",[h("storyId","prompt_body",w(n))]):{ok:!0,prompt:{storyId:n,targetRef:r,commandRef:e,source:o,...a?{preparationOnly:!0}:{}}}}function Pt(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 Tt(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 xt(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:[h("yoloopTerminal","unsafe_key","value-denied")]}:{ok:!0,complete:a,aborted:r,outcome:o,replay:n}}function wt(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:[h("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 Lt(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 Dt(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 Mt(e,t){if(e===void 0)return;if(!I(e)){t.push(h("runtime","unsafe_key","value-denied"));return}for(const n of Object.keys(e))(!ct.has(n)||te.test(n))&&t.push(h(`runtime.${n}`,Z(n),"key-denied"));e.publicSafe!==!0&&t.push(h("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(h("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(h("runtime.modelId","unsafe_key","value-denied")),r!==void 0&&r!=="explicit"&&r!=="origin"&&r!=="default"&&r!=="fallback"&&r!=="unspecified"&&t.push(h("runtime.source","unsafe_key","value-denied")),e.reasonCode!==void 0&&(typeof e.reasonCode!="string"||L.test(e.reasonCode))&&t.push(h("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 Nt(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 jt(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(h(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(h(n,Z(a),"key-denied")),se(r,n,o)}return}o.push(h(t,"unsafe_key","value-denied"))}}function Ht(e,t){if(e===void 0)return[];if(!Array.isArray(e))return t.push(h("redactionSummary","unsafe_key","value-denied")),[];const o=[];for(const[a,r]of e.entries()){if(!I(r)||r.publicSafe!==!0){t.push(h(`redactionSummary.${a}`,"unsafe_key","value-denied"));continue}const n=N(r,"field"),s=N(r,"reason"),c=N(r,"evidence");if(!n||!s||!c||L.test(n)||L.test(s)||L.test(c)){t.push(h(`redactionSummary.${a}`,"unsafe_key","value-denied"));continue}o.push({field:n,reason:s,evidence:c,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 zt(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 Kt(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 $t(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 Bt(e){if(e==="explicit"||e==="origin"||e==="default"||e==="fallback")return e}function Ut(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 Yt(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,io as RUN_YOLOOP_DRIVER_STATES,yt as defaultYoloopRootInvoker,co as isCanonicalDelegatedStoryPrompt,lo as runYoloopExecutionPhase};
|
|
10
|
+
`],{cwd:o.projectRoot,stdio:["ignore","pipe","pipe","ipc"],windowsHide:!0});let d,i=0,c=!1;const y=setTimeout(()=>{c=!0,n.kill()},o.timeoutMs),f=m=>{i+=m.length,i>32*1024*1024&&(c=!0,n.kill())};n.stdout?.on("data",f),n.stderr?.on("data",f),n.on("message",m=>{if(d||!C(m)||typeof m.success!="boolean"||Buffer.byteLength(JSON.stringify(m))>32*1024*1024){c=!0,n.kill();return}d=m});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",m=>{clearTimeout(y),s(m===0&&!c&&d?d:l)}),n.send({modulePath:r,options:e},m=>{m&&(c=!0,n.kill())})})}async function St(e,o=It){const t=Date.now(),a={args:e.args,projectRoot:e.projectRoot,format:"json",platformTarget:"runner",serverUrl:e.serverUrl,strictReadOnly:e.strictReadOnly},r=await o(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()-t,publicSafe:!0}}async function Co(e){const o=e.adapterRegistry??Ke(),t=$(e.limit??Ve,1,10),a=$(e.leaseMs??Ye,1e3,3600*1e3),r=$(e.staleLeaseAfterMs??We,0,1440*60*1e3),s=$(e.maxAttempts??qe,1,10),n=$(e.localConcurrencyCap??be(),1,Se),d=[],i=[],c=e.now(),y=bt({store:e.store,metadata:e.metadata,nowIso:c,maxAttempts:s,queueCap:e.queueCap});d.push(...y.reasonCodes);const f=e.store.recoverStaleHeadlessExecutionAttempts({nowIso:c,staleAfterMs:r,limit:t*2});f.recoveredAttemptIds.length>0&&(d.push(p.EXECUTION_BACKOFF),f.failedAttemptIds.length>0&&d.push(p.EXECUTION_TIMEOUT));const l=e.store.listDueHeadlessExecutionAttempts({nowIso:e.now(),limit:Math.max(t*5,10)}).filter(m=>m.directive_kind==="run_yoloop").slice(0,t);for(const m of l){const g=await gt({store:e.store,projectRoot:e.projectRoot,runnerId:e.runnerId,attempt:m,registry:o,now:e.now,leaseMs:a,timeoutMs:$(e.timeoutMs??Ge,1e3,18e5),backoffMs:$(e.backoffMs??Fe,1e3,36e5),maxAttempts:s,maxIterations:$(e.maxIterations??st,1,100),maxDurationMs:$(e.maxDurationMs??it,1e3,72e5),localConcurrencyCap:n,queueCap:e.queueCap,adapterOptions:e.adapterOptions,runtimeDefaults:e.runtimeDefaults,runtimeFallback:e.runtimeFallback,yoloopInvoker:e.yoloopInvoker??St,serverUrl:e.serverUrl,idFactory:e.idFactory??Xt,continuousWorkspaceManager:e.continuousWorkspaceManager??Qe(),terminalGitAdapter:e.terminalGitAdapter??ot(e.projectRoot)});i.push(g),d.push(g.reasonCode,...g.workerPoolSummary.reasonCodes)}return{ok:i.every(m=>m.outcome!=="failed")&&y.rejectedCount===0,enqueuedAttemptCount:y.enqueuedCount,dueAttemptCount:l.length,processedAttemptCount:i.filter(m=>m.outcome!=="ignored").length,recoveredAttemptIds:f.recoveredAttemptIds,receipts:i,reasonCodes:F(d.length>0?d:[p.OK]),publicSafe:!0}}function bt(e){let o=0,t=0;const a=[];for(const r of Ut(e.metadata)){if(!C(r)||r.kind!=="run_yoloop")continue;const s=Rt(r);if(!s.ok){t+=1,a.push(s.reasonCode);continue}const n=s.directive;if(!e.store.jobExists(n.jobId)){t+=1,a.push(Ie.BYPASS_BLOCKED);continue}const d=$t(n);if(e.store.hasCompletedHeadlessExecutionDirectiveHash(d)){a.push(p.EXECUTION_COMPLETED);continue}const i=je({autonomousKind:"run_yoloop",source:"headless-run-yoloop",targetKind:"epic",targetRef:n.targetRef,epicId:n.epicId??ae(n.targetRef),jobId:n.jobId,operationSeed:n.operationId,commandHash:L(n.commandRef)}),c=Be(e.store,i,e.nowIso,{requireExistingJob:!0});if(!c.ok){t+=1,a.push(c.reasonCode);continue}const y=V("attempt",n.idempotencyKey),f=V("exec",n.operationId),l=e.store.enqueueHeadlessExecutionAttempt({attemptId:y,executionId:f,jobId:n.jobId,directiveHash:d,directiveKind:"run_yoloop",commandClass:n.commandClass,targetKind:"epic",targetRef:n.targetRef,epicId:n.epicId??ae(n.targetRef),runtimeId:n.runtime?.runtimeId,modelId:n.runtime?.modelId,runtimeSource:Gt(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:He(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){t+=1,a.push(l.reasonCode??"queue-cap-reached");continue}l.inserted&&(o+=1),a.push(p.OK)}return{enqueuedCount:o,rejectedCount:t,reasonCodes:F(a)}}async function gt(e){const o=e.now(),t=e.idFactory("lease",e.attempt.attempt_id),a=Pe(o,e.leaseMs);if(!e.store.claimHeadlessExecutionAttempt({attemptId:e.attempt.attempt_id,leaseId:t,runnerId:e.runnerId,claimedAt:o,leaseExpiresAt:a,reasonCode:p.OK}).inserted)return zt(e.attempt,{status:e.attempt.status,receiptStatus:"ignored",reasonCode:"lease-conflict",timestamp:o});if(e.store.hasCompletedHeadlessExecutionDirectiveHash(e.attempt.directive_hash,e.attempt.attempt_id))return me(e.store,e.attempt,{leaseId:t,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:ye(),hashes:{directive:e.attempt.directive_hash},redactionSummary:[],relativePaths:[e.attempt.target_ref],childStoryIds:[],stateTransitions:["start","complete"]});const n=kt(e);if(!n.ok)return me(e.store,e.attempt,{leaseId:t,runnerId:e.runnerId,status:n.status,receiptStatus:n.receiptStatus,reasonCode:n.reasonCode,publicSummary:n.publicSummary,completedAt:e.now(),counts:ye(),hashes:{directive:e.attempt.directive_hash},redactionSummary:n.redactionSummary,relativePaths:Vt(e.attempt),childStoryIds:[],stateTransitions:["start"]});const d=await At({...e,prepared:n.input}),i=Bt(e.attempt,d,e.maxAttempts,e.backoffMs,e.now()),c=i.retry?"backoff":d.status,y=i.retry?"deferred":d.receiptStatus,f=i.retry?Ct.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 me(e.store,e.attempt,{leaseId:t,runnerId:e.runnerId,status:c,receiptStatus:y,reasonCode:f,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 At(e){const o=Date.now(),t=["start"],a=new Set,r=[],s=[],n={root:L(e.prepared.rootPrompt)},d=[_("rootPrompt","prompt_body",n.root)];let i=0,c=0,y=0,f=0,l=0,m=0,g;const u=Oe(e.localConcurrencyCap),h=new Map;let M=!1;const w=new Map,z=new Map,ne=v=>{const A=v.child;n[`child-${A.storyId.replace(/[^A-Za-z0-9_.:-]/g,"-")}`]=v.commandHash,d.push(v.promptRedaction);const S=v.receipt;if(v.terminalFailure){if(v.deferredFailure){w.set(A.storyId,v.terminalFailure),u.backpressurePauseCount+=1;return}w.delete(A.storyId),z.set(A.storyId,v.terminalFailure),a.has(A.storyId)||(a.add(A.storyId),r.push(A.storyId),s.push(A.targetRef),y+=1);return}if(!S||S.outcome==="deferred"){w.set(A.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}w.delete(A.storyId),!a.has(A.storyId)&&(a.add(A.storyId),r.push(A.storyId),s.push(A.targetRef),S.outcome==="failed"?(y+=1,z.set(A.storyId,S.reasonCode||p.EXECUTION_FAILED)):S.outcome==="ignored"?f+=1:c+=1)},X=async()=>{const v=await Promise.race([...h.entries()].map(([A,S])=>S.promise.then(K=>({storyId:A,result:K}))));h.delete(v.storyId),u.completedChildCount+=1,u.pendingChildCount=h.size,ne(v.result)};for(;;){if(i>=e.maxIterations)return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:ht,publicSummary:"Headless yoloop reached the bounded iteration limit before completion metadata.",retryable:!1,startedAt:o,counts:O(i,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(Date.now()-o>e.maxDurationMs)return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:_t,publicSummary:"Headless yoloop reached the bounded duration limit before completion metadata.",retryable:!1,startedAt:o,counts:O(i,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(e.terminalGitAdapter.prepareLifecycleEvidence){t.push("lifecycle_evidence");const b=await e.terminalGitAdapter.prepareLifecycleEvidence({epicId:e.prepared.epicId,nowIso:e.now()});if(!b.ok)return t.push("backoff"),E({status:b.retryEligible?"backoff":"failed",receiptStatus:b.retryEligible?"deferred":"failed",reasonCode:b.reasonCode,publicSummary:"Headless yoloop stopped because physical Git lifecycle evidence could not be produced safely.",retryable:b.retryEligible,startedAt:o,counts:O(i,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});g=b.p205Authority}t.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}`]=L(String(v.durationMs))),!v.success)return t.push("backoff"),E({status:"backoff",receiptStatus:"deferred",reasonCode:p.EXECUTION_FAILED,publicSummary:"Headless yoloop root metadata invocation failed with bounded public evidence.",retryable:!0,startedAt:o,counts:O(i,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});const A=v.metadata,S=Nt(A);if(!S.ok)return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:S.reasonCode,publicSummary:S.publicSummary,retryable:!1,startedAt:o,counts:O(i,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:[...d,...S.redactionSummary],relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});const K=Ht(A);if(S.aborted&&K){for(;h.size>0;)await X();return m+=1,t.push("backoff"),E({status:"backoff",receiptStatus:"deferred",reasonCode:"yoloop-per-run-cap-resumable",publicSummary:"Headless yoloop reached a finite run boundary and scheduled the same queue after cool-down.",retryable:!0,retryNotBeforeAt:K.coolDownUntil,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t})}if((S.aborted||S.complete||S.replay||S.outcome&&S.outcome!=="selected"&&S.outcome!=="queue_exhausted")&&M&&h.size>0){await X(),i+=1,t.push("reinvoke");continue}if(S.aborted)return m+=1,t.push("aborted"),E({status:"failed",receiptStatus:"failed",reasonCode:yt,publicSummary:"Headless yoloop stopped because public metadata reported an aborted loop.",retryable:!1,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(S.outcome&&S.outcome!=="selected"&&S.outcome!=="queue_exhausted")return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:`yoloop-${S.outcome}`,publicSummary:"Headless yoloop stopped on a non-executable graph-first continuation outcome.",retryable:!1,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(S.replay)return t.push("backoff"),E({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:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(S.complete&&M&&w.size>0&&z.size===0)return t.push("backoff"),E({status:"backoff",receiptStatus:"deferred",reasonCode:[...w.values()].sort()[0],publicSummary:"Headless yoloop rejected terminal completion while previously runnable work remained undispatched.",retryable:!0,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(S.complete&&M&&z.size>0)return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:[...z.values()].sort()[0],publicSummary:"Headless yoloop rejected terminal completion because runnable work failed before an accepted dispatch receipt.",retryable:!1,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});const Z=Dt(A);if(Z){t.push("terminal_git");const b=new Date,x=await rt(e.projectRoot,{kind:"continuous",storyId:Z.epicId,sessionId:`${e.runnerId}:${e.attempt.attempt_id}`,idempotencyKey:Z.idempotencyKey,persistent:!1,expiresAt:new Date(b.getTime()+Math.max(e.timeoutMs,e.maxDurationMs)+6e4).toISOString()});if(!x.ok)return t.push("backoff"),E({status:"backoff",receiptStatus:"deferred",reasonCode:x.reasonCode,publicSummary:"Headless yoloop deferred terminal Git while another physical writer retained authority.",retryable:!0,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});let B,j=!1;try{B=await tt(Z,e.terminalGitAdapter,e.now,g)}finally{j=await at(x.path,x.owner).catch(()=>!1)}if(!j)return t.push("backoff"),E({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:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(n[`terminal-git-${i}`]=L(`${B.receipt.idempotencyKey}:${B.receipt.physicalStatus}`),!B.ok){const N=B.receipt.retryEligible;return t.push("backoff"),E({status:N?"backoff":"failed",receiptStatus:N?"deferred":"failed",reasonCode:B.reasonCodes[0]??"epic-terminal-git-failed",publicSummary:"Headless yoloop stopped at the epic terminal Git boundary with public-safe retry evidence.",retryable:N,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t})}if(S.complete)return l+=1,t.push("complete"),E({status:"completed",receiptStatus:"applied",reasonCode:p.EXECUTION_COMPLETED,publicSummary:"Headless yoloop completed only after fresh root-owned physical Git verification.",retryable:!1,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});i+=1,t.push("reinvoke");continue}if(S.complete)return l+=1,t.push("complete"),E({status:"completed",receiptStatus:"applied",reasonCode:p.EXECUTION_COMPLETED,publicSummary:"Headless yoloop completed after public metadata reported yoloopComplete.",retryable:!1,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});const I=Mt(A);if(I){t.push("git_reconciliation");const b=await et(I,e.terminalGitAdapter,e.now);if(n[`git-reconciliation-${i}`]=L(`${I.idempotencyKey}:${b.reasonCodes.join(",")}`),!b.ok)return t.push("backoff"),E({status:"backoff",receiptStatus:"deferred",reasonCode:b.reasonCodes[0]??"git-reconciliation-failed",publicSummary:"Headless yoloop paused at a fail-closed Git reconciliation boundary.",retryable:!0,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t})}const P=vt(A,e.prepared.epicId);if(!P.ok)return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:P.reasonCode,publicSummary:P.publicSummary,retryable:!1,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:[...d,...P.redactionSummary],relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});const ee=P.continuous?void 0:P.prompts.find(b=>a.has(b.storyId));if(ee)return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:p.YOLOOP_ISOLATION_VIOLATION,publicSummary:"Headless yoloop rejected cyclic child story delegation evidence.",retryable:!1,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:[...d,_("storyId","prompt_body",L(ee.storyId))],relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(u.mode=P.mode==="continuous_dag"?"continuous_dag":P.parallelAuthorized?"parallel_wave":"serial",u.serverMaxConcurrency=P.serverMaxConcurrency,P.continuous){M=!0;const b=P.prompts.filter(x=>!a.has(x.storyId)&&!h.has(x.storyId));if(u.pendingChildCount=b.length+h.size,b.length>0){const x=ke({store:e.store,nowIso:e.now(),localCap:e.localConcurrencyCap,serverMaxConcurrency:P.serverMaxConcurrency,parallelAuthorized:!0,continuous:!0,eligibleCount:b.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,t.push("backoff"),E({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:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});const B=b.slice(0,x.effectiveConcurrency);t.push("child_story_delegation");for(const j of B)h.set(j.storyId,{child:j,promise:Ae({...e,child:j,iteration:i})});u.startedChildCount+=B.length,u.peakConcurrency=Math.max(u.peakConcurrency,h.size),u.pendingChildCount=b.length-B.length+h.size}if(h.size>0)await X();else{if(w.size>0)return t.push("backoff"),E({status:"backoff",receiptStatus:"deferred",reasonCode:[...w.values()].sort()[0],publicSummary:"Headless yoloop retained deferred continuous work for a bounded retry.",retryable:!0,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});if(z.size>0)return t.push("backoff"),E({status:"failed",receiptStatus:"failed",reasonCode:[...z.values()].sort()[0],publicSummary:"Headless yoloop completed independent work and stopped on the remaining failed dependency closure.",retryable:!1,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t})}i+=1,t.push("reinvoke");continue}u.pendingChildCount=P.prompts.length;const Y=[...P.prompts];for(;Y.length>0;){const b=ke({store:e.store,nowIso:e.now(),localCap:e.localConcurrencyCap,serverMaxConcurrency:P.serverMaxConcurrency,parallelAuthorized:P.parallelAuthorized,continuous:!1,eligibleCount:Y.length});if(u.queueCap=b.queueCap,u.availableLeases=b.availableLeases,u.effectiveConcurrency=b.effectiveConcurrency,u.reasonCodes.push(b.reasonCode),b.effectiveConcurrency===0)return u.backpressurePauseCount+=1,u.pendingChildCount=Y.length,t.push("backoff"),E({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:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t});const x=Y.splice(0,b.effectiveConcurrency);u.startedChildCount+=x.length,u.peakConcurrency=Math.max(u.peakConcurrency,x.length),u.pendingChildCount=Y.length,t.push("child_story_delegation");const B=await Promise.all(x.map(N=>Ae({...e,child:N,iteration:i})));u.completedChildCount+=B.length;let j;for(const N of B){const se=N.child;n[`child-${se.storyId.replace(/[^A-Za-z0-9_.:-]/g,"-")}`]=N.commandHash,d.push(N.promptRedaction),r.push(se.storyId),s.push(se.targetRef),a.add(se.storyId);const te=N.receipt;if(!te){N.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(te.outcome==="deferred"){j??={kind:"deferred",reasonCode:p.EXECUTION_BACKOFF};continue}if(te.outcome==="failed"){y+=1,j??={kind:"failed",reasonCode:te.reasonCode||p.EXECUTION_FAILED};continue}te.outcome==="ignored"?f+=1:c+=1}if(j){const N=j.kind==="deferred";return E({status:N?"backoff":"failed",receiptStatus:N?"deferred":"failed",reasonCode:j.reasonCode,publicSummary:j.kind==="missing"?"Headless yoloop child story delegation did not produce a public receipt.":N?"Headless yoloop child story delegated bounded backoff to the root attempt.":"Headless yoloop child story execution failed with public receipt evidence.",retryable:N,startedAt:o,counts:O(i+1,r.length,c,y,f,l,m),workerPoolSummary:k(u),hashes:n,redactions:d,relativePaths:[e.prepared.targetRef,...s],childStoryIds:r,stateTransitions:t})}}i+=1,t.push("reinvoke")}}async function Ae(e){const o=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(o&&!o.ok)return{child:e.child,reasonCodes:[o.reasonCode],commandHash:L(e.child.commandRef),promptRedaction:_(`child.${e.child.storyId}`,"prompt_body",L(e.child.commandRef)),terminalFailure:o.reasonCode,deferredFailure:/backpressure|lease-active/.test(o.reasonCode)};const t=e.projectRoot,a=o?.ok?Je(o.value):e.adapterOptions?.commandRunner,r=jt({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=!!o;try{const d=await Xe({store:e.store,projectRoot:t,runnerId:e.runnerId,now:e.now,metadata:{continuityExecutionDirectives:[r]},adapterRegistry:e.registry,adapterOptions:{...e.adapterOptions,cwd:t,env:{...e.adapterOptions?.env,...o?.ok?{NEOCORTEX_BRANCHLESS_PROJECT_ROOT:o.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(o?.ok&&i&&i.outcome!=="failed"&&i.outcome!=="deferred"){const c=await e.continuousWorkspaceManager.integrate(o.value,{receiptRefs:[`continuity:${i.attemptId}`],nowIso:i.timestamp});if(!c.ok)return{child:e.child,receipt:i,reasonCodes:[...d.reasonCodes,c.reasonCode],commandHash:L(e.child.commandRef),promptRedaction:_(`child.${e.child.storyId}`,"prompt_body",L(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:L(e.child.commandRef),promptRedaction:_(`child.${e.child.storyId}`,"prompt_body",L(e.child.commandRef))}}finally{o?.ok&&await e.continuousWorkspaceManager.release(o.value,n)}}function ke(e){const o=e.store.collectSnapshotRows({nowIso:e.nowIso,jobLimit:1,staleLeaseLimit:1,receiptLimit:1,eventLimit:1,snapshotLimit:1}),t=Math.max(1,Math.floor(o.queue.capacity)),a=Math.max(0,Math.floor(o.queue.running)-1),r=e.continuous?Math.max(0,Math.floor(o.queue.available)):Math.max(0,Math.min(Math.max(0,e.localCap-a),Math.floor(o.queue.available))),s=e.parallelAuthorized?Math.max(1,Math.floor(e.serverMaxConcurrency)):1,n=Math.max(0,Math.min(e.eligibleCount,s,e.localCap,t,r));return{queueCap:t,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 Oe(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:U(e.serverMaxConcurrency),localCap:U(e.localCap),queueCap:U(e.queueCap),availableLeases:U(e.availableLeases),effectiveConcurrency:U(e.effectiveConcurrency),peakConcurrency:U(e.peakConcurrency),pendingChildCount:U(e.pendingChildCount),startedChildCount:U(e.startedChildCount),completedChildCount:U(e.completedChildCount),backpressurePauseCount:U(e.backpressurePauseCount),reasonCodes:F(e.reasonCodes.length>0?e.reasonCodes:[p.WORKER_POOL_SERIAL_FALLBACK]).slice(0,10),publicSafe:!0}}function pe(e=be()){return k(Oe(e))}function U(e){return Number.isFinite(e)?Math.max(0,Math.min(1e4,Math.floor(e))):0}function kt(e){const o=ze(e.attempt.metadata_json,{autonomousKind:"run_yoloop",jobId:e.attempt.job_id,targetKind:"epic",targetRef:e.attempt.target_ref});if(!o.ok)return{ok:!1,status:"failed",receiptStatus:"failed",reasonCode:o.reasonCode,publicSummary:o.publicSummary,redactionSummary:o.redactionSummary};const t=Ot(e.attempt);if(!t.ok)return t;const a=Et(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??ae(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 Ot(e){const o=[];e.directive_kind!=="run_yoloop"&&o.push(_("directiveKind","unsafe_key","value-denied")),e.target_kind!=="epic"&&o.push(_("targetKind","prompt_body","value-denied")),(!le.test(e.target_ref)||q.test(e.target_ref)||D.test(e.target_ref))&&o.push(_("targetRef","prompt_body","value-denied"));const t=ae(e.target_ref);return e.epic_id&&e.epic_id!==t&&o.push(_("epicId","prompt_body","value-denied")),o.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:o}:{ok:!0,input:{rootPrompt:`*yoloop @${e.target_ref}`,targetRef:e.target_ref,epicId:t,runtimeId:"fake",publicSafe:!0}}}function Et(e){const o=e.runtimeDefaults!==void 0?e.runtimeDefaults:Ue({projectRoot:e.projectRoot});if(C(o)&&o.ok===!1)return{ok:!1,reasonCode:p.RUNTIME_UNTRUSTED,publicSummary:typeof o.publicSummary=="string"?o.publicSummary:"Headless runtime defaults failed public-safety validation.",redactionSummary:Array.isArray(o.redactionSummary)?o.redactionSummary:[]};const t=Wt(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:t,publicSafe:!0}:void 0,r={registry:e.registry,defaults:o,fallback:e.runtimeFallback};a&&(t==="origin"?r.origin=a:t==="default"?r.projectDefault=a:t==="fallback"?r.fallback=a:r.explicit=a);const s=$e(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 Rt(e){const o=[];for(const h of Object.keys(e))(!mt.has(h)||oe.test(h))&&o.push(_(h,Q(h),"key-denied"));e.publicSafe!==!0&&o.push(_("publicSafe","unsafe_key","value-denied"));const t=H(e,"kind"),a=H(e,"commandClass"),r=H(e,"jobId"),s=H(e,"operationId"),n=H(e,"idempotencyKey"),d=H(e,"targetKind"),i=H(e,"targetRef"),c=H(e,"commandRef"),y=H(e,"publicSummary"),f=H(e,"epicId");t!=="run_yoloop"&&o.push(_("kind","unsafe_key","value-denied")),a!=="goal-tick"&&a!=="loop-tick"&&o.push(_("commandClass","unsafe_key","value-denied")),he(r)||o.push(_("jobId","unsafe_key","value-denied")),he(s)||o.push(_("operationId","unsafe_key","value-denied")),he(n)||o.push(_("idempotencyKey","unsafe_key","value-denied")),(d!=="epic"||!i||!le.test(i)||D.test(i))&&o.push(_("targetRef","prompt_body","value-denied"));const l=i?`*yoloop @${i}`:void 0;(!c||c!==l||c.includes("@neocortex")||q.test(c)||D.test(c))&&o.push(_("commandRef","prompt_body","value-denied")),f&&i&&f!==ae(i)&&o.push(_("epicId","prompt_body","value-denied")),(!y||y.length>240||D.test(y))&&o.push(_("publicSummary","unbounded_text","value-denied")),e.reasonCode!==void 0&&(typeof e.reasonCode!="string"||D.test(e.reasonCode))&&o.push(_("reasonCode","unsafe_key","value-denied"));const m=Kt(e.runtime,o);e.attempts!==void 0&&ie(e.attempts,"attempts",o),e.metadata!==void 0&&ie(e.metadata,"metadata",o);const g=C(e.metadata)?e.metadata:void 0,u=Ft(e.redactionSummary,o);return o.length>0||t!=="run_yoloop"||!a||!r||!s||!n||!i||!c||!y?{ok:!1,reasonCode:o.some(M=>M.reason==="prompt_body")?p.PROMPT_REJECTED:p.DIRECTIVE_REJECTED,redactionSummary:o}:{ok:!0,directive:{kind:"run_yoloop",commandClass:a,jobId:r,operationId:s,idempotencyKey:n,targetKind:"epic",targetRef:i,commandRef:c,...f?{epicId:f}:{},...m?{runtime:m}:{},publicSummary:y,...typeof e.reasonCode=="string"?{reasonCode:e.reasonCode}:{},...g?{metadata:g}:{},...u.length>0?{redactionSummary:u}:{},publicSafe:!0}}}function vt(e,o){if(!e)return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop metadata was missing.",[]);const t=Pt(e);if(!t.ok)return t;const a=[],r=C(e.yoloopExecutionPlan)?e.yoloopExecutionPlan:void 0,s=r?T(r.storyIds).filter(W):[],n=r?.version===3&&C(r.scheduler)&&Array.isArray(r.scheduler.nodes)?new Map(r.scheduler.nodes.filter(C).map(l=>[String(l.storyId??""),l])):new Map,d=r?.version===3&&C(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=wt(r);if(!l.ok)return l;c=l;for(const g of Lt(r)){const u=J(g,o,"execution-plan");if(!u.ok)return u;a.push(Ee(u.prompt,n.get(u.prompt.storyId),d,i))}if(a.length===0)for(const g of s){const u=J(`*yolo @docs/stories/${g}.story.md`,o,"execution-plan");if(!u.ok)return u;a.push(Ee(u.prompt,n.get(u.prompt.storyId),d,i))}const m=Tt(e.skillDirectives,a);if(!m.ok)return m}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(!C(l)||l.kind!=="task")continue;const m=T(l.promptTemplates);if(m.length>0){for(const M of m){const w=J(M,o,"task-directive");if(!w.ok)return w;a.push(w.prompt)}continue}const g=typeof l.promptTemplate=="string"?l.promptTemplate:void 0;if(!g)continue;const u=T(l.storyIds).filter(W),h=u.length>0?u:y?[y]:[];if(h.length===0&&ue.test(g)){const M=J(g,o,"task-directive");if(!M.ok)return M;a.push(M.prompt);continue}for(const M of h){const w=g.includes("{storyId}")?g.replaceAll("{storyId}",M):g,z=J(w,o,"task-directive");if(!z.ok)return z;a.push(z.prompt)}}if(a.length===0&&y){const l=J(`*yolo @docs/stories/${y}.story.md`,o,"next-story");if(!l.ok)return l;a.push(l.prompt)}const f=Jt(a,l=>l.commandRef);if(c?.continuous){if(f.length!==s.length||f.some(l=>l.preparationOnly!==!0||l.source!=="execution-plan"))return R(p.YOLOOP_ISOLATION_VIOLATION,"Headless continuous yoloop rejected an ambiguous or non-preparation child prompt.",[_("promptTemplates","prompt_body","operation-denied")])}else if(f.some(l=>l.preparationOnly===!0))return R(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 m of f)if(!l.has(m.storyId))return R(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a child prompt outside the server-authorized execution plan.",[_("storyId","prompt_body",L(m.storyId))])}return c?.parallelAuthorized&&!G(f.map(l=>l.storyId),s)?R(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected a parallel plan whose executable prompts did not match the selected wave.",[]):f.length===0&&!c?.continuous?R(p.YOLOOP_METADATA_INVALID,"Headless yoloop metadata did not include an authorized per-story child prompt.",[]):{ok:!0,prompts:f,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 Ee(e,o,t,a){if(!o||!t||!a)return e;const r=Array.isArray(o.writeSet)?T(o.writeSet):[],s=Re(o.childExecutionAuthority,{storyId:e.storyId,invocationPrompt:e.commandRef,authorizedWriteSet:r});return{...e,...typeof o.dispatchId=="string"?{dispatchId:o.dispatchId}:{},...typeof o.idempotencyKey=="string"?{idempotencyKey:o.idempotencyKey}:{},graphRevision:t,executionBranch:a,...r.length>0?{writeSet:r}:{},...s?{rootAuthority:s}:{}}}function Pt(e){const o=[];return e.nextStoryId!==void 0&&re(e.nextStoryId,"nextStoryId",o),e.yoloopExecutionPlan!==void 0&&re(e.yoloopExecutionPlan,"yoloopExecutionPlan",o),Array.isArray(e.skillDirectives)&&e.skillDirectives.forEach((t,a)=>{C(t)&&t.kind==="task"&&re(t,`skillDirectives.${a}`,o)}),o.length>0?R(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected unsafe public metadata before child delegation.",o):{ok:!0}}function Tt(e,o){if(!Array.isArray(e))return{ok:!0};const t=new Set(o.map(a=>a.commandRef));for(const[a,r]of e.entries()){if(!C(r)||r.kind!=="task")continue;const s=typeof r.promptTemplate=="string"?r.promptTemplate:void 0,n=T(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=>!t.has(c)))return R(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 re(e,o,t){if(typeof e=="string"){if(/\.allowedDebt\.constraints\.\d+$/.test(o)&&pt.has(e))return;(D.test(e)||/\0/.test(e))&&t.push(_(o,Q(o),"value-denied"));return}if(!(e==null||typeof e=="number"||typeof e=="boolean")){if(Array.isArray(e)){e.forEach((a,r)=>re(a,`${o}.${r}`,t));return}if(C(e)){for(const[a,r]of Object.entries(e)){const s=`${o}.${a}`;!(a==="promptTemplate"||a==="promptTemplates"||a==="invocationPrompt"||a==="childPromptKind"||a==="allowMetaTaskPromptInChild"||a==="authorization")&&oe.test(a)&&t.push(_(s,Q(a),"key-denied")),re(r,s,t)}return}t.push(_(o,"unsafe_key","value-denied"))}}function wt(e){const o=typeof e.mode=="string"?e.mode:"",t=C(e.isolationPolicy)?e.isolationPolicy:void 0,a=T(e.storyIds);if(e.authorization!=="server_authorized")return R(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 R(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan executor was not root-owned.",[]);if(o!=="serial"&&o!=="parallel_wave"&&o!=="continuous_dag"&&o!=="manual")return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan mode was invalid.",[]);const r=e.version===3&&o==="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 R(p.YOLOOP_METADATA_INVALID,"Headless yoloop execution plan story selection was invalid or ambiguous.",[]);if(!t||t.rootOwnsLoop!==!0||t.childPromptKind==="per_story_branchless_preparation_only"&&!r||Object.prototype.hasOwnProperty.call(t,"childExecutionBoundary")&&!r||t.childPromptKind!=="per_story_yolo_only"&&t.childPromptKind!=="per_story_branchless_preparation_only"&&!(t.childPromptKind==="none"&&(o==="serial"&&t.childTaskDelegation==="not_required"||o==="parallel_wave"&&e.executor==="root_agent"&&t.childTaskDelegation==="forbidden"))||t.allowOuterYoloopInChild!==!1||t.allowMetaTaskPromptInChild!==!1)return R(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(!C(h)||typeof h.storyId!="string"||!W(h.storyId)||typeof h.reason!="string")return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop skipped-story evidence was malformed.",[]);if(a.includes(h.storyId))return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop selected a story that server evidence marked skipped.",[])}if(r){const h=C(e.scheduler)?e.scheduler:void 0,M=Array.isArray(h?.nodes)?h.nodes.filter(C):[],w=T(h?.readyStoryIds),z=T(h?.runningStoryIds),ne=T(e.promptTemplates),X=C(e.dependencyBasis)?e.dependencyBasis:void 0,v=C(e.readinessBasis)?e.readinessBasis:void 0,A=typeof h?.graphRevision=="string"?h.graphRevision:"",S=typeof e.executionBranch=="string"?e.executionBranch:"",K=M.map(I=>typeof I.storyId=="string"?I.storyId:""),Z=M.find(I=>{const P=typeof I.storyId=="string"?I.storyId:"",ee=typeof I.promptTemplate=="string"?I.promptTemplate:"",Y=Array.isArray(I.writeSet)?T(I.writeSet):[];return!W(P)||ee!==`*yolo @docs/stories/${P}.story.md branchless-preparation`||typeof I.dispatchId!="string"||!/^[a-f0-9]{64}$/.test(I.dispatchId)||typeof I.idempotencyKey!="string"||!/^[a-f0-9]{64}$/.test(I.idempotencyKey)||I.dependencyBasis!=="verified"||!Array.isArray(I.dependencies)||T(I.dependencies).length!==I.dependencies.length||!Array.isArray(I.writeSet)||Y.length===0||Y.length!==I.writeSet.length||!Re(I.childExecutionAuthority,{storyId:P,invocationPrompt:ee,authorizedWriteSet:Y})});return e.executor!=="root_agent_with_child_tasks"||e.legacyConcurrencyIgnored!==!0||Object.prototype.hasOwnProperty.call(e,"maxConcurrency")||Object.prototype.hasOwnProperty.call(e,"maxParallel")||t?.rootOwnedScheduling!=="continuous_dag_allowed"||t?.childPromptKind!=="per_story_branchless_preparation_only"||t?.childExecutionBoundary!=="filesystem_only"||t?.childTaskDelegation!=="allowed"||t?.maxDepth!==1||t?.childWorkspace!=="branchless_sandbox"||t?.epicCheckout!=="current_checkout"||t?.workspaceLifecycle!=="user_managed"||t?.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(A)||!Yt(S)||new Set(K).size!==K.length||K.some(I=>!W(I))||w.some(I=>!K.includes(I))||z.some(I=>!K.includes(I)||w.includes(I))||!G(a,w)||ne.length!==a.length||ne.some((I,P)=>I!==`*yolo @docs/stories/${a[P]}.story.md branchless-preparation`)||!X||X.source!=="state_snapshot"||!v||v.source!=="ready_wave"||!G(T(v.selectedStoryIds),a)||Z?R(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=Ze(e);return h.ok?{ok:!0,mode:"parallel_wave",serverMaxConcurrency:h.childExecutionConcurrency,parallelAuthorized:!1,continuous:!1}:R(p.YOLOOP_METADATA_INVALID,"Headless yoloop rejected an unsafe phased execution plan.",[])}if(o!=="parallel_wave")return{ok:!0,mode:o,serverMaxConcurrency:1,parallelAuthorized:!1,continuous:!1};const n=e.maxConcurrency,d=e.maxParallel,i=C(e.dependencyBasis)?e.dependencyBasis:void 0,c=C(e.readinessBasis)?e.readinessBasis:void 0,y=Array.isArray(e.parallelWaves)?e.parallelWaves:[],f=y.length===1&&C(y[0])?y[0]:void 0;if(t.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(T(i.storyIds),a)||!c||c.source!=="ready_wave"||!G(T(c.selectedStoryIds),a)||!f||!G(T(f.storyIds),a)||f.maxConcurrency!==n)return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan lacked consistent bounded authorization and readiness evidence.",[]);const l=T(f.promptTemplates);if(l.length!==a.length||new Set(l).size!==l.length)return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel wave prompts were incomplete or ambiguous.",[]);const g=(Array.isArray(f.proofSummaries)?f.proofSummaries:Array.isArray(e.proofSummaries)?e.proofSummaries:[]).find(h=>C(h)&&G(T(h.storyIds),a));return!C(g)||g.dependencyClosure!=="resolved"||g.contractOwnership!=="non_overlapping"||g.validationSurfaces!=="compatible"?R(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan lacked resolved independence proof.",[]):s.find(h=>C(h)&&typeof h.reason=="string"&&/(cycle|unresolved|ambiguous)/i.test(h.reason))?R(p.YOLOOP_METADATA_INVALID,"Headless yoloop parallel plan contained unresolved dependency evidence.",[]):{ok:!0,mode:"parallel_wave",serverMaxConcurrency:n,parallelAuthorized:!0,continuous:!1}}function Re(e,o){if(!C(e)||!C(e.artifact))return;const t=e.artifact,a=Array.isArray(e.authorizedWriteSet)?T(e.authorizedWriteSet):[];if(Object.keys(e).sort().join("\0")!==["artifact","authorizedWriteSet","effectScope","invocationPrompt","kind","lifecycleAuthority","publicSafe","schemaVersion","storyId"].sort().join("\0")||Object.keys(t).sort().join("\0")!==["content","contentBinding","kind","path","schemaVersion"].sort().join("\0")||e.schemaVersion!==1||e.kind!=="branchless_story_preparation"||e.storyId!==o.storyId||e.invocationPrompt!==o.invocationPrompt||!Array.isArray(e.authorizedWriteSet)||a.length!==e.authorizedWriteSet.length||a.some(s=>nt(s)!==s)||!xt(a,o.authorizedWriteSet)||e.effectScope!=="filesystem_only"||e.lifecycleAuthority!=="root_only"||e.publicSafe!==!0||t.schemaVersion!==1||t.kind!=="branchless_root_bound_artifact"||typeof t.path!="string"||!a.includes(t.path)||typeof t.content!="string"||t.content.length===0||t.content.length>4096||typeof t.contentBinding!="string"||!/^[a-f0-9]{64}$/.test(t.contentBinding))return;const r=Te("sha256").update(["branchless-root-bound-artifact-v1",o.storyId,o.invocationPrompt,...a,"filesystem_only","root_only",t.path,t.content].join("\0")).digest("hex");if(t.contentBinding===r)return e}function xt(e,o){return e.length===o.length&&e.every((t,a)=>t===o[a])}function Lt(e){const o=[];o.push(...T(e.promptTemplates));for(const t of Array.isArray(e.serialSteps)?e.serialSteps:[])C(t)&&typeof t.promptTemplate=="string"&&o.push(t.promptTemplate);for(const t of Array.isArray(e.parallelWaves)?e.parallelWaves:[])C(t)&&o.push(...T(t.promptTemplates));return o}function J(e,o,t){if(ge(e))return R(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected an unsafe child prompt shape.",[_("promptTemplate","prompt_body",L(e))]);if(!ue.test(e))return R(p.YOLOOP_METADATA_INVALID,"Headless yoloop child prompt did not match the canonical per-story yolo shape.",[_("promptTemplate","prompt_body",L(e))]);const a=ct.test(e),r=e.replace(/^\*yolo @/,"").replace(/ branchless-preparation$/,""),s=qt(r);return!dt.test(r)||!W(s)||!s.startsWith(`${o}.`)?R(p.YOLOOP_ISOLATION_VIOLATION,"Headless yoloop rejected a child prompt outside the targeted public epic.",[_("storyId","prompt_body",L(s))]):{ok:!0,prompt:{storyId:s,targetRef:r,commandRef:e,source:t,...a?{preparationOnly:!0}:{}}}}function Dt(e){const o=e?.epicTerminalGitDirective;if(!(!C(o)||o.schemaVersion!==1||o.kind!=="epic_terminal_git"||typeof o.epicId!="string"||typeof o.executionBranch!="string"||typeof o.originBranch!="string"||typeof o.expectedExecutionHeadSha!="string"||!Array.isArray(o.storyCheckpointIds)||!C(o.localGates)||o.localGates.passed!==!0||!Array.isArray(o.localGates.receiptRefs)||!C(o.reconcile)||typeof o.idempotencyKey!="string"||o.publicSafe!==!0))return o}function Mt(e){const o=e?.epicGitReconciliationDirective;if(!(!C(o)||o.schemaVersion!==1||o.kind!=="epic_git_reconciliation"||typeof o.epicId!="string"||typeof o.executionBranch!="string"||typeof o.originBranch!="string"||!["start","resume","audit"].includes(String(o.lifecycleBoundary))||typeof o.dryRun!="boolean"||typeof o.idempotencyKey!="string"||o.publicSafe!==!0))return o}function Nt(e){if(!e||!C(e))return{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop root invocation did not return public metadata.",redactionSummary:[]};const o=C(e.yoloopContinuationDecision)?e.yoloopContinuationDecision:void 0,t=typeof o?.outcome=="string"?o.outcome:void 0,a=t==="queue_exhausted"||e.yoloopComplete===!0,r=e.yoloopAborted===!0,s=t==="selected"&&o?.replay===!0;return t&&!["selected","queue_exhausted","blocked","cycle","invalid","no_progress"].includes(t)?{ok:!1,reasonCode:p.YOLOOP_METADATA_INVALID,publicSummary:"Headless yoloop rejected an unknown continuation outcome.",redactionSummary:[]}:t==="queue_exhausted"&&o?.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:t,replay:s}}function Ht(e){if(!e)return;const o=e.abortReason;if(o!=="YOLOOP_PER_RUN_CAP_REACHED"&&o!=="YOLOOP_SESSION_TIMEOUT")return;const t=e.yoloopResumableBoundary,a=/^[A-Za-z0-9._:-]{1,128}$/;if(!(!C(t)||t.schemaVersion!=="YoloopResumableBoundary/1.0"||t.resumable!==!0||t.reason!==o||t.publicSafe!==!0||typeof t.coolDownUntil!="string"||!Number.isFinite(Date.parse(t.coolDownUntil))||!Number.isSafeInteger(t.retryAfterMs)||t.retryAfterMs<0||typeof t.operationId!="string"||!a.test(t.operationId)||!C(t.receipt)||t.receipt.schemaVersion!=="YoloopSessionRolloverReceipt/1.0"||typeof t.receipt.runId!="string"||!a.test(t.receipt.runId)||t.receipt.operationId!==t.operationId||typeof t.receipt.idempotencyKey!="string"||!a.test(t.receipt.idempotencyKey)||typeof t.receipt.payloadHash!="string"||!/^[a-f0-9]{64}$/.test(t.receipt.payloadHash)||t.receipt.coolDownUntil!==t.coolDownUntil||!Number.isSafeInteger(t.receipt.revision)||t.receipt.revision<0||t.receipt.snapshotHash!==null&&(typeof t.receipt.snapshotHash!="string"||!/^[a-f0-9]{64}$/.test(t.receipt.snapshotHash))||t.receipt.status!=="exhausted"||t.receipt.publicSafe!==!0))return{coolDownUntil:t.coolDownUntil}}function jt(e){const o=`${e.rootAttempt.execution_id}:${e.child.graphRevision??"legacy"}:${e.child.storyId}`,t=e.child.dispatchId??V("child-op",`${o}:${e.iteration}`),a=e.child.idempotencyKey??V("child-idem",`${o}:${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:t,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",L(e.child.commandRef))],publicSafe:!0}}function me(e,o,t){const a=ve(t.hashes),r=t.workerPoolSummary??pe(),s=ve({iterations:t.counts.iterations,childCount:t.counts.childCount,succeededChildCount:t.counts.succeededChildCount,failedChildCount:t.counts.failedChildCount,skippedChildCount:t.counts.skippedChildCount,metadataCompleteCount:t.counts.metadataCompleteCount,metadataAbortedCount:t.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:o.attempt_id,executionId:o.execution_id,jobId:o.job_id,directiveHash:o.directive_hash,status:t.status,reasonCode:t.reasonCode,storyIds:t.childStoryIds.slice(0,50),counts:s,hashes:a,...t.reasonCode===Ie.BYPASS_BLOCKED?{governanceEvidence:Ne}:{},reasonCodes:F([t.reasonCode,...r.reasonCodes,...t.stateTransitions]),publicSummary:de(t.publicSummary)};return e.completeHeadlessExecutionAttempt({attemptId:o.attempt_id,executionId:o.execution_id,jobId:o.job_id,leaseId:t.leaseId,runnerId:t.runnerId,status:t.status,completedAt:t.completedAt,durationMs:t.durationMs,reasonCode:t.reasonCode,publicSummary:de(t.publicSummary),notBeforeAt:t.notBeforeAt,retryCount:t.retryCount,counts:s,hashes:a,redactionSummary:t.redactionSummary,relativePaths:F([o.target_ref,...t.relativePaths]),metadata:n}),e.recordHeadlessExecutionReceipt({receiptId:`receipt-${V("headless-yoloop",`${o.attempt_id}-${t.status}`)}`,attemptId:o.attempt_id,executionId:o.execution_id,jobId:o.job_id,status:t.receiptStatus,reasonCode:t.reasonCode,createdAt:t.completedAt,operationId:`${o.execution_id}:${t.status}:receipt`,idempotencyKey:`${o.directive_hash}:${t.status}:receipt`,counts:s,hashes:a,redactionSummary:t.redactionSummary,relativePaths:F([o.target_ref,...t.relativePaths]),metadata:n}),e.recordHeadlessExecutionSummary({eventId:`event-${V("headless-yoloop-summary",`${o.attempt_id}-${t.status}`)}`,attemptId:o.attempt_id,executionId:o.execution_id,jobId:o.job_id,status:t.status,runtimeId:t.runtimeId,modelId:t.modelId,publicSummary:de(t.publicSummary),reasonCode:t.reasonCode,createdAt:t.completedAt,durationMs:t.durationMs,counts:s,hashes:a,redactionSummary:t.redactionSummary,relativePaths:F([o.target_ref,...t.relativePaths]),metadata:n}),{attemptId:o.attempt_id,executionId:o.execution_id,jobId:o.job_id,status:t.status,outcome:t.receiptStatus,reasonCode:t.reasonCode,timestamp:t.completedAt,childStoryIds:t.childStoryIds,aggregateCounts:t.counts,workerPoolSummary:r,redactionSummary:t.redactionSummary,publicSafe:!0}}function zt(e,o){return{attemptId:e.attempt_id,executionId:e.execution_id,jobId:e.job_id,status:o.status,outcome:o.receiptStatus,reasonCode:o.reasonCode,timestamp:o.timestamp,childStoryIds:[],aggregateCounts:ye(),workerPoolSummary:pe(),redactionSummary:[],publicSafe:!0}}function Bt(e,o,t,a,r){if(!o.retryable)return{retry:!1};const s=e.retry_count+1;if(s>=Math.max(1,e.max_attempts||t))return{retry:!1,retryCount:s};const n=Math.min(8,2**Math.max(0,e.retry_count));return{retry:!0,retryCount:s,notBeforeAt:Zt(Pe(r,a*n),o.retryNotBeforeAt)}}function E(e){return{status:e.status,receiptStatus:e.receiptStatus,reasonCode:e.reasonCode,publicSummary:e.publicSummary,retryable:e.retryable,...e.retryNotBeforeAt?{retryNotBeforeAt:e.retryNotBeforeAt}:{},durationMs:Math.max(0,Date.now()-e.startedAt),counts:e.counts,workerPoolSummary:e.workerPoolSummary??pe(),hashes:e.hashes,redactionSummary:e.redactions.slice(0,50),relativePaths:F(e.relativePaths).slice(0,50),childStoryIds:F(e.childStoryIds).slice(0,50),stateTransitions:F(e.stateTransitions)}}function Kt(e,o){if(e===void 0)return;if(!C(e)){o.push(_("runtime","unsafe_key","value-denied"));return}for(const s of Object.keys(e))(!ft.has(s)||oe.test(s))&&o.push(_(`runtime.${s}`,Q(s),"key-denied"));e.publicSafe!==!0&&o.push(_("runtime.publicSafe","unsafe_key","value-denied"));const t=H(e,"runtimeId"),a=H(e,"modelId"),r=H(e,"source");if(t&&(!/^[A-Za-z0-9][A-Za-z0-9._:-]{0,79}$/.test(t)||D.test(t)||q.test(t))&&o.push(_("runtime.runtimeId","unsafe_key","value-denied")),a&&(!/^[A-Za-z0-9][A-Za-z0-9._:+/-]{0,119}$/.test(a)||D.test(a)||q.test(a))&&o.push(_("runtime.modelId","unsafe_key","value-denied")),r!==void 0&&r!=="explicit"&&r!=="origin"&&r!=="default"&&r!=="fallback"&&r!=="unspecified"&&o.push(_("runtime.source","unsafe_key","value-denied")),e.reasonCode!==void 0&&(typeof e.reasonCode!="string"||D.test(e.reasonCode))&&o.push(_("runtime.reasonCode","unsafe_key","value-denied")),e.publicSafe===!0)return{...t?{runtimeId:t}:{},...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 Ut(e){const o=Array.isArray(e)?e:e?[e]:[],t=[];for(const a of o){const r=a.continuityExecutionDirectives;Array.isArray(r)&&t.push(...r)}return t}function $t(e){return L(fe({kind:e.kind,commandClass:e.commandClass,jobId:e.jobId,targetRef:e.targetRef,commandRef:e.commandRef,epicId:e.epicId,runtime:e.runtime}))}function fe(e){return Array.isArray(e)?`[${e.map(fe).join(",")}]`:C(e)?`{${Object.keys(e).sort().map(o=>`${JSON.stringify(o)}:${fe(e[o])}`).join(",")}}`:JSON.stringify(e)}function ie(e,o,t){if(typeof e=="string"){(D.test(e)||q.test(e))&&t.push(_(o,Q(o),"value-denied"));return}if(!(e==null||typeof e=="number"||typeof e=="boolean")){if(Array.isArray(e)){e.forEach((a,r)=>ie(a,`${o}.${r}`,t));return}if(C(e)){for(const[a,r]of Object.entries(e)){const s=`${o}.${a}`;oe.test(a)&&t.push(_(s,Q(a),"key-denied")),ie(r,s,t)}return}t.push(_(o,"unsafe_key","value-denied"))}}function Ft(e,o){if(e===void 0)return[];if(!Array.isArray(e))return o.push(_("redactionSummary","unsafe_key","value-denied")),[];const t=[];for(const[a,r]of e.entries()){if(!C(r)||r.publicSafe!==!0){o.push(_(`redactionSummary.${a}`,"unsafe_key","value-denied"));continue}const s=H(r,"field"),n=H(r,"reason"),d=H(r,"evidence");if(!s||!n||!d||D.test(s)||D.test(n)||D.test(d)){o.push(_(`redactionSummary.${a}`,"unsafe_key","value-denied"));continue}t.push({field:s,reason:n,evidence:d,publicSafe:!0})}return t}function R(e,o,t){return{ok:!1,reasonCode:e,publicSummary:o,redactionSummary:t}}function T(e){return Array.isArray(e)?e.filter(o=>typeof o=="string"):[]}function Yt(e){return e.length>0&&e.length<=240&&!e.startsWith("-")&&!e.includes("..")&&!e.includes("\\")&&/^[A-Za-z0-9._/-]+$/.test(e)}function G(e,o){return e.length===o.length&&new Set(e).size===e.length&&e.every(t=>o.includes(t))}function Vt(e){return le.test(e.target_ref)?[e.target_ref]:[]}function ve(e){if(!e)return;const o={};for(const[t,a]of Object.entries(e))!/^[A-Za-z0-9_.:-]{1,80}$/.test(t)||oe.test(t)||D.test(t)||typeof a=="string"&&D.test(a)||(o[t]=a);return Object.keys(o).length>0?o:void 0}function ye(){return O(0,0,0,0,0,0,0)}function O(e,o,t,a,r,s,n){return{iterations:e,childCount:o,succeededChildCount:t,failedChildCount:a,skippedChildCount:r,metadataCompleteCount:s,metadataAbortedCount:n}}function qt(e){return e.replace(/^docs\/stories\//,"").replace(/\.story\.md$/,"")}function ae(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)&&!D.test(e)&&!q.test(e)}function Wt(e){if(e==="explicit"||e==="origin"||e==="default"||e==="fallback")return e}function Gt(e){if(e==="explicit"||e==="origin"||e==="default"||e==="fallback"||e==="unspecified")return e}function Q(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 H(e,o){return typeof e[o]=="string"?e[o]:void 0}function he(e){return!!(e&&ut.test(e)&&!D.test(e)&&!q.test(e))}function C(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Xt(e,o){return V(e,`${o}-${Date.now()}-${we(4).toString("hex")}`)}function Pe(e,o){const t=Date.parse(e);return new Date((Number.isFinite(t)?t:Date.now())+o).toISOString()}function Zt(e,o){const t=Date.parse(e),a=o?Date.parse(o):Number.NaN;return Number.isFinite(a)?Number.isFinite(t)?a>t?o:e:o:e}function $(e,o,t){return Number.isFinite(e)?Math.max(o,Math.min(t,Math.floor(e))):o}function F(e){return Array.from(new Set(e))}function Jt(e,o){const t=new Set,a=[];for(const r of e){const s=o(r);t.has(s)||(t.add(s),a.push(r))}return a}export{ce as DEFAULT_HEADLESS_YOLOOP_LOCAL_CONCURRENCY_CAP,it as DEFAULT_HEADLESS_YOLOOP_MAX_DURATION_MS,st as DEFAULT_HEADLESS_YOLOOP_MAX_ITERATIONS,Se as MAX_HEADLESS_YOLOOP_LOCAL_CONCURRENCY_CAP,ho as RUN_YOLOOP_DRIVER_STATES,St as defaultYoloopRootInvoker,_o as isCanonicalDelegatedStoryPrompt,be as resolveDefaultHeadlessYoloopLocalConcurrencyCap,Co as runYoloopExecutionPhase};
|
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
export { YoloopClientStateStore, createDefaultCounters, createDefaultState, type ClientYoloopLogger, } from './yoloop-client-state-store.js';
|
|
8
8
|
export { isYoloopTrigger, readYoloopForRequest, persistYoloopFromResponse, maybeRunDiscoveryHook, } from './invoke-hooks.js';
|
|
9
9
|
export type { DiscoveryHookContext, DiscoveryHookResult, DiscoveryHookLogger, } from './discovery-hook.js';
|
|
10
|
-
export type { YoloopPersistedCounters, YoloopPersistedLock, YoloopPersistedSession, YoloopPersistedState, YoloopSessionMode, YoloopStateOperation, YoloopStateUpdate, } from './shared-yoloop-types.js';
|
|
10
|
+
export type { YoloopPersistedCounters, YoloopPersistedLock, YoloopPersistedSession, YoloopPersistedState, YoloopPersistenceCapability, YoloopSessionRolloverReceiptV1, YoloopResumableBoundaryV1, YoloopSessionMode, YoloopStateOperation, YoloopStateUpdate, } from './shared-yoloop-types.js';
|