@ornexus/neocortex 4.60.22 → 4.60.23

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.
Files changed (53) hide show
  1. package/dist/sbom.cdx.json +24 -24
  2. package/install.ps1 +1 -1
  3. package/install.sh +1 -1
  4. package/package.json +6 -3
  5. package/packages/client/dist/cli.js +0 -0
  6. package/packages/client/dist/commands/invoke.d.ts +19 -5
  7. package/packages/client/dist/commands/invoke.js +55 -53
  8. package/packages/client/dist/continuity/invoke-hooks.js +1 -1
  9. package/packages/client/dist/fs/atomic-state-replace.d.ts +16 -0
  10. package/packages/client/dist/fs/atomic-state-replace.js +1 -0
  11. package/packages/client/dist/generated/command-registry.generated.d.ts +53 -19
  12. package/packages/client/dist/generated/command-registry.generated.js +1 -1
  13. package/packages/client/dist/graph-retrieval/pre-command-hook.d.ts +11 -0
  14. package/packages/client/dist/graph-retrieval/pre-command-hook.js +1 -1
  15. package/packages/client/dist/graph-retrieval/shared-graph-retrieval-contract.js +1 -1
  16. package/packages/client/dist/invocation/invoke-input.d.ts +9 -0
  17. package/packages/client/dist/invocation/invoke-input.js +1 -0
  18. package/packages/client/dist/migrations/project-identity-capability.d.ts +13 -0
  19. package/packages/client/dist/migrations/project-identity-capability.js +1 -0
  20. package/packages/client/dist/migrations/project-identity.d.ts +41 -0
  21. package/packages/client/dist/migrations/project-identity.js +7 -0
  22. package/packages/client/dist/runner-cli.js +0 -0
  23. package/packages/client/dist/state/invocation-shape.d.ts +9 -0
  24. package/packages/client/dist/state/invocation-shape.js +1 -0
  25. package/packages/client/dist/state/project-state-snapshot.d.ts +9 -3
  26. package/packages/client/dist/state/project-state-snapshot.js +1 -1
  27. package/packages/client/dist/state/structural-dag-projection.d.ts +24 -0
  28. package/packages/client/dist/state/structural-dag-projection.js +1 -0
  29. package/packages/shared/dist/generated/command-registry.generated.js +66 -19
  30. package/packages/shared/dist/generated/invocation-schema.generated.js +16 -4
  31. package/packages/shared/dist/invocation/index.d.ts +6 -2
  32. package/packages/shared/dist/invocation/index.js +5 -0
  33. package/packages/shared/dist/invocation/input-envelope.d.ts +37 -0
  34. package/packages/shared/dist/invocation/input-envelope.js +98 -0
  35. package/packages/shared/dist/invocation/project-identity-migration.d.ts +28 -0
  36. package/packages/shared/dist/invocation/project-identity-migration.js +83 -0
  37. package/packages/shared/dist/invocation/public-diagnostics.d.ts +87 -0
  38. package/packages/shared/dist/invocation/public-diagnostics.js +181 -0
  39. package/packages/shared/dist/invocation/state-projection.d.ts +21 -0
  40. package/packages/shared/dist/invocation/state-projection.js +1 -0
  41. package/packages/shared/dist/invocation/strict-effect-receipt.d.ts +12 -0
  42. package/packages/shared/dist/invocation/strict-effect-receipt.js +43 -0
  43. package/targets-stubs/antigravity/gemini.md +1 -1
  44. package/targets-stubs/antigravity/skill/SKILL.md +1 -1
  45. package/targets-stubs/claude-code/neocortex-root.agent.yaml +1 -1
  46. package/targets-stubs/claude-code/neocortex-root.md +2 -2
  47. package/targets-stubs/claude-code/neocortex.agent.yaml +1 -1
  48. package/targets-stubs/claude-code/neocortex.md +2 -2
  49. package/targets-stubs/codex/AGENTS.md +1 -1
  50. package/targets-stubs/cursor/agent.md +2 -2
  51. package/targets-stubs/gemini-cli/agent.md +2 -2
  52. package/targets-stubs/opencode/neocortex-root.md +1 -1
  53. package/targets-stubs/vscode/neocortex.agent.md +2 -2
@@ -1 +1 @@
1
- import{createHash as T}from"node:crypto";import{existsSync as I,readFileSync as h,statSync as P}from"node:fs";import{join as y}from"node:path";import{DEFAULT_GRAPH_RETRIEVAL_BUDGETS as g,createGraphRetrievalMetadata as b,normalizeGraphRetrievalPath as i,resolveClientCommandContextPolicy as E}from"./shared-graph-retrieval-contract.js";import{admitInvocation as A}from"../../../shared/dist/invocation/index.js";const u="client-pre-command-v1",x="1970-01-01T00:00:00.000Z",R=new Set([".archive","_archive","_archives","archive","archives","archived"]);function S(t){return A(t)}function k(t){const e=S(t);if(e.outcome!=="resolved")return null;const o=E(e.selection.commandId);return o?{policy:o,selection:e.selection}:null}function p(t){return T("sha256").update(t).digest("hex")}function m(t){const e=i(t),o=e.split("/").some(n=>R.has(n.toLowerCase()));return e.length===0||e.startsWith("/")||e.startsWith("..")||e.includes("/../")||o||/(^|\/)\.env(?:$|[./-])/i.test(e)||/(^|\/)(?:credentials?|secrets?|tokens?|private-prompts?|raw-logs?)(?:\.|\/|$)/i.test(e)||/\.(?:sqlite|db|pem|key|p12|pfx|crt|cer|der|bin)$/i.test(e)}function $(t,e){const o=i(e);if(m(o))return null;const n=y(t,o);if(!I(n))return null;const r=P(n);if(!r.isFile()||r.size>96*1024)return null;const s=h(n,"utf8");return{kind:"repo-path",path:o,contentHash:p(s).slice(0,16),mtimeMs:Math.floor(r.mtimeMs)}}function _(t){let e=t;const o=e;return e=e.replace(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi,"[REDACTED_EMAIL]"),e=e.replace(/\b(api[-_ ]?key|license[-_ ]?key|token|password|secret)\b\s*[:=]\s*[^\s`'"\])}]+/gi,"$1=[REDACTED_SECRET]"),e=e.replace(/\b(?:sk|pk|ghp|github_pat|pat)_[A-Za-z0-9_\-]{16,}\b/g,"[REDACTED_TOKEN]"),e=e.replace(/\b[A-Za-z0-9+/]{32,}={0,2}\b/g,"[REDACTED_TOKEN]"),e=e.replace(/<!--\s*(?:server|private|proprietary)[\s\S]*?-->/gi,"[REDACTED_PRIVATE_PROMPT]"),e=e.replace(/\b(?:private|proprietary|protected)\s+(?:prompt|workflow|step\s*body|orchestration)\b[^.!?\n]*/gi,"[REDACTED_PRIVATE_PROMPT]"),{text:e,redacted:e!==o}}function w(t,e=g.maxSnippetChars){const o=t.split(/\r?\n/).map(r=>r.trim()).filter(r=>r.length>0&&!r.startsWith("---")&&!r.startsWith("<!--")).slice(0,8).join(" "),n=_(o);return{summary:n.text.slice(0,e),redacted:n.redacted}}function D(t,e){const o=$(t,e.path);if(!o)return null;const n=h(y(t,o.path),"utf8"),r=w(n,e.maxSnippetChars);return{nodeType:e.nodeType,stableId:e.stableId,source:o,confidence:r.redacted?Math.min(e.confidence,.72):e.confidence,reasonCode:e.reasonCode,budgetCost:e.budgetCost,summary:r.summary,warnings:r.redacted?["redacted_sensitive_content"]:void 0,score:e.score}}function G(t){const e=`Public command ${t.commandId}; graphRetrieval profile ${t.retrievalProfile}; context is auxiliary, redacted, budgeted and non-authoritative.`;return{nodeType:"Command",stableId:`command:${t.commandId}`,source:{kind:"command",path:t.commandId,contentHash:p(e).slice(0,16)},confidence:.88,reasonCode:"command_surface_match",budgetCost:1,summary:e.slice(0,t.retrievalBudget.maxSnippetChars),score:90}}function M(t){const e=t.uiUxReview?.architectureDir;return e?[...t.positionals,e]:t.positionals}function C(t){return t.find(o=>/^@?docs\/stories\/[A-Za-z0-9._-]+\.story\.md$/u.test(o))?.replace(/^@/u,"")??null}function z(t){return t.find(o=>/^@?docs\/epics\/[A-Za-z0-9._-]+\.md$/u.test(o))?.replace(/^@/u,"")??null}function B(t){const n=C(t)?.split("/").pop()?.replace(/\.story\.md$/,"")?.match(/^(P\d+)\./i)?.[1];if(n)return n.toUpperCase();const r=t.map(s=>s.match(/^@?(?:docs\/epics\/epic-)?(P\d+)(?:\.md)?$/iu)?.[1]).find(s=>!!s);return r?r.toUpperCase():null}function H(t){return t.map(e=>e.match(/^@?((?:docs|core)\/[A-Za-z0-9_./-]+\.md)$/u)?.[1]).filter(e=>!!e).map(e=>i(e)).filter(e=>!m(e))}function N(t){return t.startsWith("docs/stories/")?{nodeType:"Story",reasonCode:"story_scope_match"}:t.startsWith("docs/epics/")?{nodeType:"Epic",reasonCode:"epic_scope_match"}:t.includes("security")||t.includes("policy")||t.includes("standard")?{nodeType:"Guardrail",reasonCode:"guardrail_match"}:{nodeType:"Doc",reasonCode:"architecture_reference"}}function c(t,e){const o=i(e.path);if(m(o))return;t.some(r=>r.nodeType===e.nodeType&&i(r.path)===o)||t.push({...e,path:o})}function O(t,e,o){const n=C(e);if(n){const a=n.split("/").pop()?.replace(/\.story\.md$/,"")??n;c(t,{path:n,nodeType:"Story",stableId:a,reasonCode:"story_scope_match",confidence:.96,budgetCost:3,score:96,maxSnippetChars:o})}const r=z(e),s=B(e);if(r){const a=r.split("/").pop()?.replace(/\.md$/,"")??r;c(t,{path:r,nodeType:"Epic",stableId:a,reasonCode:"epic_scope_match",confidence:.92,budgetCost:3,score:92,maxSnippetChars:o})}else s&&c(t,{path:`docs/epics/epic-${s}.md`,nodeType:"Epic",stableId:s,reasonCode:"epic_scope_match",confidence:.9,budgetCost:3,score:90,maxSnippetChars:o});for(const a of H(e)){const d=a.split("/").pop()?.replace(/\.md$/,"").replace(/\.story$/,"")??a,l=N(a);c(t,{path:a,stableId:d,...l,confidence:.84,budgetCost:3,score:82,maxSnippetChars:o})}}function Z(t,e,o){const n=t.retrievalBudget.maxSnippetChars,r=[];return c(r,{path:"NEOCORTEX.md",nodeType:"CanonicalMemory",stableId:"canonical-memory",reasonCode:"canonical_memory_seed",confidence:.92,budgetCost:4,score:100,maxSnippetChars:n}),c(r,{path:"AGENTS.md",nodeType:"PlatformMemory",stableId:"platform-memory:agents",reasonCode:"platform_memory_reference",confidence:.7,budgetCost:2,score:66,maxSnippetChars:n}),c(r,{path:"package.json",nodeType:"Package",stableId:"root-package",reasonCode:"package_surface_match",confidence:.78,budgetCost:2,score:72,maxSnippetChars:n}),(t.retrievalProfile!=="utility"||t.commandId==="ui-ux-review")&&c(r,{path:"docs/arquitetura-software/deterministic-graph-retrieval.md",nodeType:"Doc",stableId:"deterministic-graph-retrieval",reasonCode:"architecture_reference",confidence:.9,budgetCost:4,score:84,maxSnippetChars:n}),O(r,M(e),n),(["story-execution","diagnostic","research","review","qa","recovery","planning"].includes(t.retrievalProfile)||t.commandId==="tech-debt")&&c(r,{path:".neocortex/tech-debt-registry.json",nodeType:"Debt",stableId:"tech-debt-registry",reasonCode:"debt_area_match",confidence:.74,budgetCost:3,score:76,maxSnippetChars:n}),["story-execution","diagnostic","research","review","qa","recovery","planning","architecture"].includes(t.retrievalProfile)&&c(r,{path:"core/standards/spec-driven-development.md",nodeType:"Guardrail",stableId:"spec-driven-development",reasonCode:"guardrail_match",confidence:.82,budgetCost:3,score:78,maxSnippetChars:n}),t.retrievalProfile==="security"&&c(r,{path:"docs/architecture/solyd-security-system-contract.md",nodeType:"Guardrail",stableId:"solyd-security-system-contract",reasonCode:"guardrail_match",confidence:.86,budgetCost:3,score:84,maxSnippetChars:n}),t.retrievalProfile==="continuity"&&(c(r,{path:"core/standards/enterprise-continuity-plane.md",nodeType:"Guardrail",stableId:"enterprise-continuity-plane",reasonCode:"guardrail_match",confidence:.86,budgetCost:3,score:84,maxSnippetChars:n}),c(r,{path:"docs/runbooks/enterprise-continuity-runner.md",nodeType:"Doc",stableId:"enterprise-continuity-runner",reasonCode:"architecture_reference",confidence:.78,budgetCost:3,score:72,maxSnippetChars:n})),["utility","continuity","recovery"].includes(t.retrievalProfile)&&c(r,{path:".neocortex/state.json",nodeType:"State",stableId:"project-state",reasonCode:"state_status_match",confidence:.68,budgetCost:3,score:70,maxSnippetChars:n}),[G(t),...r.map(s=>D(o,s)).filter(s=>s!==null)]}function j(t){let e=[...t.items],o=t;const n=Math.min(t.budget.maxPayloadBytes,g.maxPayloadBytes);for(;Buffer.byteLength(JSON.stringify(o),"utf8")>n&&e.length>0;){const r=e.pop(),s=b({retrievalId:t.retrievalId,query:t.query,items:e,generatedAt:t.generatedAt,warnings:t.warnings,budgets:t.budget});o={...s,skipped:r?[...s.skipped,{stableId:r.stableId,source:r.source,reasonCode:"budget_exceeded"}]:s.skipped,contractVersion:u,command:t.command}}return o}async function W(t){const e=k(t.args);if(!e)return{applied:!1,reason:"command_not_allowlisted"};const{policy:o,selection:n}=e,r=o.commandId;try{const s=Z(o,n,t.projectRoot);if(s.length===0)return{applied:!1,reason:"no_items",command:r,profile:o.retrievalProfile};const a=_(n.positionals.join(" ").slice(0,240)).text,d=p(`${u}:${r}:${a}:${s.map(f=>`${f.source.path}:${f.source.contentHash??""}`).sort().join("|")}`).slice(0,24),l=b({retrievalId:d,query:a,items:s,generatedAt:t.nowIso??x,budgets:o.retrievalBudget}),v=j({...l,contractVersion:u,command:r});return{applied:!0,reason:"applied",command:r,profile:o.retrievalProfile,metadata:v}}catch(s){const a=s instanceof Error?s.message:String(s);return t.logger?.warn?.(`[neocortex] graph retrieval hook failed: ${a}. Proceeding without enrichment.`),{applied:!1,reason:"hook_error",command:r,profile:o.retrievalProfile,warning:a}}}export{S as admitGraphInvocation,W as runGraphRetrievalHook};
1
+ import{createHash as v}from"node:crypto";import{existsSync as T,readFileSync as I,statSync as E}from"node:fs";import{join as h}from"node:path";import{DEFAULT_GRAPH_RETRIEVAL_BUDGETS as y,createGraphRetrievalMetadata as g,normalizeGraphRetrievalPath as i,resolveClientCommandContextPolicy as P}from"./shared-graph-retrieval-contract.js";import{admitInvocation as A}from"../../../shared/dist/invocation/index.js";const u="client-pre-command-v1",x="1970-01-01T00:00:00.000Z",R=new Set([".archive","_archive","_archives","archive","archives","archived"]),S=Object.freeze({exists:T,stat:E,readText:e=>I(e,"utf8")});function k(e){return A(e)}function $(e){const t=k(e);if(t.outcome!=="resolved")return null;const o=P(t.selection.commandId);return o?{policy:o,selection:t.selection}:null}function p(e){return v("sha256").update(e).digest("hex")}function m(e){const t=i(e),o=t.split("/").some(s=>R.has(s.toLowerCase()));return t.length===0||t.startsWith("/")||t.startsWith("..")||t.includes("/../")||o||/(^|\/)\.env(?:$|[./-])/i.test(t)||/(^|\/)(?:credentials?|secrets?|tokens?|private-prompts?|raw-logs?)(?:\.|\/|$)/i.test(t)||/\.(?:sqlite|db|pem|key|p12|pfx|crt|cer|der|bin)$/i.test(t)}function D(e,t,o){const s=i(t);if(m(s))return null;const r=h(e,s);if(!o.exists(r))return null;const n=o.stat(r);if(!n.isFile()||n.size>96*1024)return null;const a=o.readText(r);return{kind:"repo-path",path:s,contentHash:p(a).slice(0,16),mtimeMs:Math.floor(n.mtimeMs)}}function b(e){let t=e;const o=t;return t=t.replace(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/gi,"[REDACTED_EMAIL]"),t=t.replace(/\b(api[-_ ]?key|license[-_ ]?key|token|password|secret)\b\s*[:=]\s*[^\s`'"\])}]+/gi,"$1=[REDACTED_SECRET]"),t=t.replace(/\b(?:sk|pk|ghp|github_pat|pat)_[A-Za-z0-9_\-]{16,}\b/g,"[REDACTED_TOKEN]"),t=t.replace(/\b[A-Za-z0-9+/]{32,}={0,2}\b/g,"[REDACTED_TOKEN]"),t=t.replace(/<!--\s*(?:server|private|proprietary)[\s\S]*?-->/gi,"[REDACTED_PRIVATE_PROMPT]"),t=t.replace(/\b(?:private|proprietary|protected)\s+(?:prompt|workflow|step\s*body|orchestration)\b[^.!?\n]*/gi,"[REDACTED_PRIVATE_PROMPT]"),{text:t,redacted:t!==o}}function w(e,t=y.maxSnippetChars){const o=e.split(/\r?\n/).map(r=>r.trim()).filter(r=>r.length>0&&!r.startsWith("---")&&!r.startsWith("<!--")).slice(0,8).join(" "),s=b(o);return{summary:s.text.slice(0,t),redacted:s.redacted}}function G(e,t,o){const s=D(e,t.path,o);if(!s)return null;const r=o.readText(h(e,s.path)),n=w(r,t.maxSnippetChars);return{nodeType:t.nodeType,stableId:t.stableId,source:s,confidence:n.redacted?Math.min(t.confidence,.72):t.confidence,reasonCode:t.reasonCode,budgetCost:t.budgetCost,summary:n.summary,warnings:n.redacted?["redacted_sensitive_content"]:void 0,score:t.score}}function M(e){const t=`Public command ${e.commandId}; graphRetrieval profile ${e.retrievalProfile}; context is auxiliary, redacted, budgeted and non-authoritative.`;return{nodeType:"Command",stableId:`command:${e.commandId}`,source:{kind:"command",path:e.commandId,contentHash:p(t).slice(0,16)},confidence:.88,reasonCode:"command_surface_match",budgetCost:1,summary:t.slice(0,e.retrievalBudget.maxSnippetChars),score:90}}function z(e){const t=e.uiUxReview?.architectureDir;return t?[...e.positionals,t]:e.positionals}function _(e){return e.find(o=>/^@?docs\/stories\/[A-Za-z0-9._-]+\.story\.md$/u.test(o))?.replace(/^@/u,"")??null}function B(e){return e.find(o=>/^@?docs\/epics\/[A-Za-z0-9._-]+\.md$/u.test(o))?.replace(/^@/u,"")??null}function O(e){const s=_(e)?.split("/").pop()?.replace(/\.story\.md$/,"")?.match(/^(P\d+)\./i)?.[1];if(s)return s.toUpperCase();const r=e.map(n=>n.match(/^@?(?:docs\/epics\/epic-)?(P\d+)(?:\.md)?$/iu)?.[1]).find(n=>!!n);return r?r.toUpperCase():null}function j(e){return e.map(t=>t.match(/^@?((?:docs|core)\/[A-Za-z0-9_./-]+\.md)$/u)?.[1]).filter(t=>!!t).map(t=>i(t)).filter(t=>!m(t))}function H(e){return e.startsWith("docs/stories/")?{nodeType:"Story",reasonCode:"story_scope_match"}:e.startsWith("docs/epics/")?{nodeType:"Epic",reasonCode:"epic_scope_match"}:e.includes("security")||e.includes("policy")||e.includes("standard")?{nodeType:"Guardrail",reasonCode:"guardrail_match"}:{nodeType:"Doc",reasonCode:"architecture_reference"}}function c(e,t){const o=i(t.path);if(m(o))return;e.some(r=>r.nodeType===t.nodeType&&i(r.path)===o)||e.push({...t,path:o})}function L(e,t,o){const s=_(t);if(s){const a=s.split("/").pop()?.replace(/\.story\.md$/,"")??s;c(e,{path:s,nodeType:"Story",stableId:a,reasonCode:"story_scope_match",confidence:.96,budgetCost:3,score:96,maxSnippetChars:o})}const r=B(t),n=O(t);if(r){const a=r.split("/").pop()?.replace(/\.md$/,"")??r;c(e,{path:r,nodeType:"Epic",stableId:a,reasonCode:"epic_scope_match",confidence:.92,budgetCost:3,score:92,maxSnippetChars:o})}else n&&c(e,{path:`docs/epics/epic-${n}.md`,nodeType:"Epic",stableId:n,reasonCode:"epic_scope_match",confidence:.9,budgetCost:3,score:90,maxSnippetChars:o});for(const a of j(t)){const d=a.split("/").pop()?.replace(/\.md$/,"").replace(/\.story$/,"")??a,l=H(a);c(e,{path:a,stableId:d,...l,confidence:.84,budgetCost:3,score:82,maxSnippetChars:o})}}function N(e,t,o,s){const r=e.retrievalBudget.maxSnippetChars,n=[];return c(n,{path:"NEOCORTEX.md",nodeType:"CanonicalMemory",stableId:"canonical-memory",reasonCode:"canonical_memory_seed",confidence:.92,budgetCost:4,score:100,maxSnippetChars:r}),c(n,{path:"AGENTS.md",nodeType:"PlatformMemory",stableId:"platform-memory:agents",reasonCode:"platform_memory_reference",confidence:.7,budgetCost:2,score:66,maxSnippetChars:r}),c(n,{path:"package.json",nodeType:"Package",stableId:"root-package",reasonCode:"package_surface_match",confidence:.78,budgetCost:2,score:72,maxSnippetChars:r}),(e.retrievalProfile!=="utility"||e.commandId==="ui-ux-review")&&c(n,{path:"docs/arquitetura-software/deterministic-graph-retrieval.md",nodeType:"Doc",stableId:"deterministic-graph-retrieval",reasonCode:"architecture_reference",confidence:.9,budgetCost:4,score:84,maxSnippetChars:r}),L(n,z(t),r),(["story-execution","diagnostic","research","review","qa","recovery","planning"].includes(e.retrievalProfile)||e.commandId==="tech-debt")&&c(n,{path:".neocortex/tech-debt-registry.json",nodeType:"Debt",stableId:"tech-debt-registry",reasonCode:"debt_area_match",confidence:.74,budgetCost:3,score:76,maxSnippetChars:r}),["story-execution","diagnostic","research","review","qa","recovery","planning","architecture"].includes(e.retrievalProfile)&&c(n,{path:"core/standards/spec-driven-development.md",nodeType:"Guardrail",stableId:"spec-driven-development",reasonCode:"guardrail_match",confidence:.82,budgetCost:3,score:78,maxSnippetChars:r}),e.retrievalProfile==="security"&&c(n,{path:"docs/architecture/solyd-security-system-contract.md",nodeType:"Guardrail",stableId:"solyd-security-system-contract",reasonCode:"guardrail_match",confidence:.86,budgetCost:3,score:84,maxSnippetChars:r}),e.retrievalProfile==="continuity"&&(c(n,{path:"core/standards/enterprise-continuity-plane.md",nodeType:"Guardrail",stableId:"enterprise-continuity-plane",reasonCode:"guardrail_match",confidence:.86,budgetCost:3,score:84,maxSnippetChars:r}),c(n,{path:"docs/runbooks/enterprise-continuity-runner.md",nodeType:"Doc",stableId:"enterprise-continuity-runner",reasonCode:"architecture_reference",confidence:.78,budgetCost:3,score:72,maxSnippetChars:r})),["utility","continuity","recovery"].includes(e.retrievalProfile)&&c(n,{path:".neocortex/state.json",nodeType:"State",stableId:"project-state",reasonCode:"state_status_match",confidence:.68,budgetCost:3,score:70,maxSnippetChars:r}),[M(e),...n.map(a=>G(o,a,s)).filter(a=>a!==null)]}function Z(e){let t=[...e.items],o=e;const s=Math.min(e.budget.maxPayloadBytes,y.maxPayloadBytes);for(;Buffer.byteLength(JSON.stringify(o),"utf8")>s&&t.length>0;){const r=t.pop(),n=g({retrievalId:e.retrievalId,query:e.query,items:t,generatedAt:e.generatedAt,warnings:e.warnings,budgets:e.budget});o={...n,skipped:r?[...n.skipped,{stableId:r.stableId,source:r.source,reasonCode:"budget_exceeded"}]:n.skipped,contractVersion:u,command:e.command}}return o}async function K(e){const t=$(e.args);if(!t)return{applied:!1,reason:"command_not_allowlisted"};const{policy:o,selection:s}=t,r=o.commandId;try{const n=N(o,s,e.projectRoot,e.fileReader??S);if(n.length===0)return{applied:!1,reason:"no_items",command:r,profile:o.retrievalProfile};const a=b(s.positionals.join(" ").slice(0,240)).text,d=p(`${u}:${r}:${a}:${n.map(f=>`${f.source.path}:${f.source.contentHash??""}`).sort().join("|")}`).slice(0,24),l=g({retrievalId:d,query:a,items:n,generatedAt:e.nowIso??x,budgets:o.retrievalBudget}),C=Z({...l,contractVersion:u,command:r});return{applied:!0,reason:"applied",command:r,profile:o.retrievalProfile,metadata:C}}catch(n){const a=n instanceof Error?n.message:String(n);return e.logger?.warn?.(`[neocortex] graph retrieval hook failed: ${a}. Proceeding without enrichment.`),{applied:!1,reason:"hook_error",command:r,profile:o.retrievalProfile,warning:a}}}export{k as admitGraphInvocation,K as runGraphRetrievalHook};
@@ -1 +1 @@
1
- const L=1,O="client-pre-command-v1",N=["utility","planning","architecture","diagnostic","research","story-execution","review","qa","security","continuity","recovery"],P={maxItems:24,maxEdges:64,maxPayloadBytes:12288,maxSnippetChars:480,maxLabelChars:160,maxTotalCost:100},i=e=>Object.freeze({...e}),v=Object.freeze({utility:i({maxItems:4,maxEdges:8,maxPayloadBytes:4*1024,maxSnippetChars:280,maxLabelChars:96,maxTotalCost:40}),planning:i({maxItems:12,maxEdges:48,maxPayloadBytes:8*1024,maxSnippetChars:360,maxLabelChars:128,maxTotalCost:70}),architecture:i({maxItems:10,maxEdges:48,maxPayloadBytes:8*1024,maxSnippetChars:360,maxLabelChars:128,maxTotalCost:65}),diagnostic:i({maxItems:10,maxEdges:32,maxPayloadBytes:8*1024,maxSnippetChars:360,maxLabelChars:128,maxTotalCost:60}),research:i({maxItems:10,maxEdges:32,maxPayloadBytes:8*1024,maxSnippetChars:360,maxLabelChars:128,maxTotalCost:60}),"story-execution":i({maxItems:6,maxEdges:32,maxPayloadBytes:8*1024,maxSnippetChars:320,maxLabelChars:128,maxTotalCost:50}),review:i({maxItems:8,maxEdges:32,maxPayloadBytes:8*1024,maxSnippetChars:320,maxLabelChars:128,maxTotalCost:55}),qa:i({maxItems:6,maxEdges:24,maxPayloadBytes:8*1024,maxSnippetChars:320,maxLabelChars:128,maxTotalCost:50}),security:i({maxItems:8,maxEdges:24,maxPayloadBytes:8*1024,maxSnippetChars:320,maxLabelChars:128,maxTotalCost:55}),continuity:i({maxItems:6,maxEdges:16,maxPayloadBytes:4*1024,maxSnippetChars:280,maxLabelChars:96,maxTotalCost:45}),recovery:i({maxItems:8,maxEdges:32,maxPayloadBytes:8*1024,maxSnippetChars:320,maxLabelChars:128,maxTotalCost:55})}),u=e=>Object.freeze({commandId:e.commandId,...e.number===void 0?{}:{number:e.number},aliases:Object.freeze([...e.aliases??[]]),retrievalProfile:e.retrievalProfile,retrievalBudget:v[e.retrievalProfile]}),C=[{commandId:"status",number:1,aliases:["st"],retrievalProfile:"utility"},{commandId:"init",number:2,aliases:["inicializar"],retrievalProfile:"utility"},{commandId:"arch-plan",number:3,aliases:["arquitetura","architecture","arch"],retrievalProfile:"architecture"},{commandId:"arch-prd",number:4,aliases:["prd","product-requirements"],retrievalProfile:"architecture"},{commandId:"arch-architecture",number:5,aliases:["arch-doc","tech-architecture"],retrievalProfile:"architecture"},{commandId:"arch-api-contracts",number:6,aliases:["api-contracts","api-contract"],retrievalProfile:"architecture"},{commandId:"arch-api-integrations",number:7,aliases:["api-integrations","api-int"],retrievalProfile:"architecture"},{commandId:"arch-database",number:8,aliases:["database-schema","db-schema","db"],retrievalProfile:"architecture"},{commandId:"arch-security",number:9,aliases:["cyber-security","security","sec"],retrievalProfile:"architecture"},{commandId:"arch-design-system",number:10,aliases:["design-system","ds","atomic-design"],retrievalProfile:"architecture"},{commandId:"arch-ux-design",number:11,aliases:["ux-design","ux","wireframes","wireframe","user-flows"],retrievalProfile:"architecture"},{commandId:"arch-performance",number:12,aliases:["performance","perf","capacity-planning","capacity","arch-perf","performance-strategy"],retrievalProfile:"architecture"},{commandId:"arch-testing",number:13,aliases:["testing-strategy","test-plan","test-strategy","arch-test"],retrievalProfile:"architecture"},{commandId:"arch-infrastructure",number:14,aliases:["infrastructure","infra","deploy-plan","deployment","arch-infra","arch-deploy"],retrievalProfile:"architecture"},{commandId:"arch-review",number:15,aliases:["review-consolidation","consolidation","architecture-review","arch-consolidation"],retrievalProfile:"architecture"},{commandId:"arch-fitness-functions",number:16,aliases:["fitness","fitness-functions","archfit","arch-fit","fit-funcs"],retrievalProfile:"architecture"},{commandId:"create-epic",number:17,aliases:["criar-epic","planejamento"],retrievalProfile:"planning"},{commandId:"idea-diagnose",number:18,aliases:["idea-diag"],retrievalProfile:"planning"},{commandId:"idea-research",number:19,aliases:["idea-pesq"],retrievalProfile:"planning"},{commandId:"generate-epic",number:20,aliases:["gerar-epic"],retrievalProfile:"planning"},{commandId:"exec",number:21,aliases:["executar","pipeline"],retrievalProfile:"story-execution"},{commandId:"yolo",number:22,retrievalProfile:"story-execution"},{commandId:"epic",number:23,aliases:["parallel-epic"],retrievalProfile:"story-execution"},{commandId:"setup-branch",number:24,aliases:["setup","branch"],retrievalProfile:"story-execution"},{commandId:"diagnose",number:25,aliases:["diag","diagnostico","c02"],retrievalProfile:"diagnostic"},{commandId:"research",number:26,aliases:["pesquisar","pesq","research-fix","c03"],retrievalProfile:"research"},{commandId:"write-spec",number:27,aliases:["spec","especificacao","c04"],retrievalProfile:"story-execution"},{commandId:"create-tasks",number:28,aliases:["tasks","tarefas","c05"],retrievalProfile:"story-execution"},{commandId:"implement",number:29,aliases:["impl","implementar","c06"],retrievalProfile:"story-execution"},{commandId:"commit",number:30,aliases:["push","commit-push","commit_push","cp","c07"],retrievalProfile:"story-execution"},{commandId:"sync",number:31,aliases:["sincronizar","c08"],retrievalProfile:"story-execution"},{commandId:"create-pr",number:32,aliases:["pr","c09"],retrievalProfile:"story-execution"},{commandId:"review",number:33,aliases:["revisar","c11"],retrievalProfile:"review"},{commandId:"merge",number:34,aliases:["mesclar","c12"],retrievalProfile:"story-execution"},{commandId:"fix-blocked",number:35,aliases:["fix","corrigir"],retrievalProfile:"recovery"},{commandId:"finalize-epic",number:36,aliases:["finalizar"],retrievalProfile:"recovery"},{commandId:"resolve-conflicts",number:37,aliases:["conflitos"],retrievalProfile:"recovery"},{commandId:"update-memory",number:38,aliases:["memoria"],retrievalProfile:"recovery"},{commandId:"refactor",number:39,aliases:["refactoring","refact","refac","rf","cleanup-code","code-cleanup","code-quality","improve-code","modernize","modernization","legacy","legacy-code","debt-pay","pay-debt","debt-reduction","smell-fix","fix-smells","code-smells","strangler","strangler-fig"],retrievalProfile:"recovery"},{commandId:"cleanup",number:40,aliases:["limpar","limpeza"],retrievalProfile:"utility"},{commandId:"audit",number:41,aliases:["auditar","auditoria"],retrievalProfile:"utility"},{commandId:"tech-debt",number:42,aliases:["debt","debts","debt-list","tech-debts","td"],retrievalProfile:"utility"},{commandId:"menu",number:43,aliases:["help","ajuda","?","commands","cmds"],retrievalProfile:"utility"},{commandId:"plans",number:44,aliases:["planos","pricing"],retrievalProfile:"utility"},{commandId:"billing",number:45,aliases:["bill","subscription","sub"],retrievalProfile:"utility"},{commandId:"subscribe",number:46,aliases:["upgrade","checkout"],retrievalProfile:"utility"},{commandId:"qa-scan",number:47,aliases:["qa","qa-test","visual-qa","e2e-scan","troubleshoot","debug-ui","scan","a11y","accessibility","wcag"],retrievalProfile:"qa"},{commandId:"yoloop",number:48,aliases:["auto-yolo","epic-runner","story-runner","loop-yolo","auto-epic"],retrievalProfile:"utility"},{commandId:"migrate-state",number:49,aliases:["migrate","state-migrate","schema-migrate"],retrievalProfile:"utility"},{commandId:"policy-audit",number:50,aliases:["policy","audit-policy","policy-history","policies"],retrievalProfile:"utility"},{commandId:"mutation-test",number:51,aliases:["mutation","stryker","kill-mutants"],retrievalProfile:"qa"},{commandId:"sync-openapi",number:52,aliases:["openapi-sync","api-sync","spec-sync","regen-openapi"],retrievalProfile:"utility"},{commandId:"generate-pacts",number:53,aliases:["pacts","gen-pacts","regen-pacts","create-pacts"],retrievalProfile:"utility"},{commandId:"verify-pacts",number:54,aliases:["verify-pact","pact-verify","check-pacts","pact-check"],retrievalProfile:"utility"},{commandId:"property-test",number:55,aliases:["property","pbt","proptest","property-tests","invariant-test"],retrievalProfile:"qa"},{commandId:"chaos-plan",number:56,aliases:["chaos","gameday","resilience-test"],retrievalProfile:"utility"},{commandId:"ui-ux-review",number:57,aliases:["ux-review","design-review","visual-review","product-polish"],retrievalProfile:"utility"},{commandId:"solyd-system",number:58,aliases:["security-system","authorized-security","sec-system"],retrievalProfile:"security"},{commandId:"goal",number:59,aliases:["goals","durable-goal","continuity-goal"],retrievalProfile:"continuity"},{commandId:"loop",number:60,aliases:["loops","durable-loop","continuity-loop"],retrievalProfile:"continuity"},{commandId:"jobs",number:61,aliases:["job","continuity-jobs"],retrievalProfile:"continuity"},{commandId:"runner",number:62,aliases:["neocortex-runner","continuity-runner"],retrievalProfile:"continuity"}],g=[{commandId:"diagnose-inline",retrievalProfile:"diagnostic"},{commandId:"research-inline",retrievalProfile:"research"},{commandId:"yolo-inline",retrievalProfile:"story-execution"},{commandId:"goal-tick",retrievalProfile:"continuity"},{commandId:"loop-tick",retrievalProfile:"continuity"}],l=Object.freeze(C.map(u)),p=Object.freeze(g.map(u)),f=Object.freeze([...l,...p]),m=Object.freeze(Object.fromEntries(f.map(e=>[e.commandId,e]))),E=Object.freeze(Object.fromEntries(l.filter(e=>e.number!==void 0).map(e=>[e.number,e]))),_=Object.freeze(Object.fromEntries(l.flatMap(e=>e.aliases.map(a=>[y(a),e.commandId]))));function y(e){return e.trim().toLowerCase().replace(/^\*/,"")}function T(e){return e.trim().split(/\s+/,1)[0]??""}function R(){return l}function S(){return p}function A(){return f}function M(e){const a=T(e);if(!a)return m.menu??null;const t=y(a);return/^\d+$/.test(t)?E[Number.parseInt(t,10)]??null:m[t]??m[_[t]??""]??null}const b={CanonicalMemory:0,Guardrail:1,Debt:2,State:3,Story:4,Epic:5,Command:6,Doc:7,Package:8,Api:9,Route:10,DbSchema:11,Flag:12,BusinessRule:13,Risk:14,PlatformMemory:15};function d(e){return e.replace(/\\/g,"/").replace(/\/+/g,"/").replace(/^\.\//,"")}function I(e){return[e.nodeType,`${e.source.kind}:${d(e.source.path).toLowerCase()}`,e.stableId.toLowerCase()].join("|")}function x(e){return e.score??0}function h(e,a){const t=x(a)-x(e);if(t!==0)return t;const o=a.confidence-e.confidence;if(o!==0)return o;const s=e.budgetCost-a.budgetCost;if(s!==0)return s;const n=b[e.nodeType]-b[a.nodeType];if(n!==0)return n;const r=d(e.source.path).localeCompare(d(a.source.path),"en-US");return r!==0?r:e.stableId.localeCompare(a.stableId,"en-US")}function D(e){const a={...P,...e.budgets},t=new Map;for(const r of e.items){const c=t.get(I(r));(!c||h(r,c)<0)&&t.set(I(r),r)}const o=[],s=[];let n=0;for(const r of[...t.values()].sort(h)){const c=n+Math.max(1,r.budgetCost);if(o.length>=a.maxItems||c>a.maxTotalCost){s.push({stableId:r.stableId,source:r.source,reasonCode:"budget_exceeded"});continue}o.push(r),n=c}return{schemaVersion:1,retrievalId:e.retrievalId,query:e.query,budget:{...a,totalCost:n},items:o,skipped:s,warnings:e.warnings??[],generatedAt:e.generatedAt}}export{f as CLIENT_COMMAND_CONTEXT_POLICIES,_ as CLIENT_COMMAND_CONTEXT_POLICY_ALIAS_MAP,m as CLIENT_COMMAND_CONTEXT_POLICY_BY_ID,E as CLIENT_COMMAND_CONTEXT_POLICY_BY_NUMBER,v as CLIENT_GRAPH_RETRIEVAL_PROFILE_BUDGETS,p as CLIENT_INTERNAL_COMMAND_CONTEXT_POLICIES,l as CLIENT_PUBLIC_COMMAND_CONTEXT_POLICIES,N as COMMAND_CONTEXT_RETRIEVAL_PROFILES,P as DEFAULT_GRAPH_RETRIEVAL_BUDGETS,O as GRAPH_RETRIEVAL_CLIENT_CONTRACT_VERSION,L as GRAPH_RETRIEVAL_SCHEMA_VERSION,h as compareGraphRetrievalItems,D as createGraphRetrievalMetadata,A as listClientCommandContextPolicies,S as listClientInternalCommandContextPolicies,R as listClientPublicCommandContextPolicies,y as normalizeCommandToken,d as normalizeGraphRetrievalPath,M as resolveClientCommandContextPolicy};
1
+ const L=1,O="client-pre-command-v1",N=["utility","planning","architecture","diagnostic","research","story-execution","review","qa","security","continuity","recovery"],h={maxItems:24,maxEdges:64,maxPayloadBytes:12288,maxSnippetChars:480,maxLabelChars:160,maxTotalCost:100},i=e=>Object.freeze({...e}),v=Object.freeze({utility:i({maxItems:4,maxEdges:8,maxPayloadBytes:4*1024,maxSnippetChars:280,maxLabelChars:96,maxTotalCost:40}),planning:i({maxItems:12,maxEdges:48,maxPayloadBytes:8*1024,maxSnippetChars:360,maxLabelChars:128,maxTotalCost:70}),architecture:i({maxItems:10,maxEdges:48,maxPayloadBytes:8*1024,maxSnippetChars:360,maxLabelChars:128,maxTotalCost:65}),diagnostic:i({maxItems:10,maxEdges:32,maxPayloadBytes:8*1024,maxSnippetChars:360,maxLabelChars:128,maxTotalCost:60}),research:i({maxItems:10,maxEdges:32,maxPayloadBytes:8*1024,maxSnippetChars:360,maxLabelChars:128,maxTotalCost:60}),"story-execution":i({maxItems:6,maxEdges:32,maxPayloadBytes:8*1024,maxSnippetChars:320,maxLabelChars:128,maxTotalCost:50}),review:i({maxItems:8,maxEdges:32,maxPayloadBytes:8*1024,maxSnippetChars:320,maxLabelChars:128,maxTotalCost:55}),qa:i({maxItems:6,maxEdges:24,maxPayloadBytes:8*1024,maxSnippetChars:320,maxLabelChars:128,maxTotalCost:50}),security:i({maxItems:8,maxEdges:24,maxPayloadBytes:8*1024,maxSnippetChars:320,maxLabelChars:128,maxTotalCost:55}),continuity:i({maxItems:6,maxEdges:16,maxPayloadBytes:4*1024,maxSnippetChars:280,maxLabelChars:96,maxTotalCost:45}),recovery:i({maxItems:8,maxEdges:32,maxPayloadBytes:8*1024,maxSnippetChars:320,maxLabelChars:128,maxTotalCost:55})}),u=e=>Object.freeze({commandId:e.commandId,...e.number===void 0?{}:{number:e.number},aliases:Object.freeze([...e.aliases??[]]),retrievalProfile:e.retrievalProfile,retrievalBudget:v[e.retrievalProfile]}),C=[{commandId:"status",number:1,aliases:["st"],retrievalProfile:"utility"},{commandId:"init",number:2,aliases:["inicializar"],retrievalProfile:"utility"},{commandId:"arch-plan",number:3,aliases:["arquitetura","architecture","arch"],retrievalProfile:"architecture"},{commandId:"arch-prd",number:4,aliases:["prd","product-requirements"],retrievalProfile:"architecture"},{commandId:"arch-architecture",number:5,aliases:["arch-doc","tech-architecture"],retrievalProfile:"architecture"},{commandId:"arch-api-contracts",number:6,aliases:["api-contracts","api-contract"],retrievalProfile:"architecture"},{commandId:"arch-api-integrations",number:7,aliases:["api-integrations","api-int"],retrievalProfile:"architecture"},{commandId:"arch-database",number:8,aliases:["database-schema","db-schema","db"],retrievalProfile:"architecture"},{commandId:"arch-security",number:9,aliases:["cyber-security","security","sec"],retrievalProfile:"architecture"},{commandId:"arch-design-system",number:10,aliases:["design-system","ds","atomic-design"],retrievalProfile:"architecture"},{commandId:"arch-ux-design",number:11,aliases:["ux-design","ux","wireframes","wireframe","user-flows"],retrievalProfile:"architecture"},{commandId:"arch-performance",number:12,aliases:["performance","perf","capacity-planning","capacity","arch-perf","performance-strategy"],retrievalProfile:"architecture"},{commandId:"arch-testing",number:13,aliases:["testing-strategy","test-plan","test-strategy","arch-test"],retrievalProfile:"architecture"},{commandId:"arch-infrastructure",number:14,aliases:["infrastructure","infra","deploy-plan","deployment","arch-infra","arch-deploy"],retrievalProfile:"architecture"},{commandId:"arch-review",number:15,aliases:["review-consolidation","consolidation","architecture-review","arch-consolidation"],retrievalProfile:"architecture"},{commandId:"arch-fitness-functions",number:16,aliases:["fitness","fitness-functions","archfit","arch-fit","fit-funcs"],retrievalProfile:"architecture"},{commandId:"create-epic",number:17,aliases:["criar-epic","planejamento"],retrievalProfile:"planning"},{commandId:"idea-diagnose",number:18,aliases:["idea-diag"],retrievalProfile:"planning"},{commandId:"idea-research",number:19,aliases:["idea-pesq"],retrievalProfile:"planning"},{commandId:"generate-epic",number:20,aliases:["gerar-epic"],retrievalProfile:"planning"},{commandId:"exec",number:21,aliases:["executar","pipeline"],retrievalProfile:"story-execution"},{commandId:"yolo",number:22,retrievalProfile:"story-execution"},{commandId:"epic",number:23,aliases:["parallel-epic"],retrievalProfile:"story-execution"},{commandId:"setup-branch",number:24,aliases:["setup","branch"],retrievalProfile:"story-execution"},{commandId:"diagnose",number:25,aliases:["diag","diagnostico","c02"],retrievalProfile:"diagnostic"},{commandId:"research",number:26,aliases:["pesquisar","pesq","research-fix","c03"],retrievalProfile:"research"},{commandId:"write-spec",number:27,aliases:["spec","especificacao","c04"],retrievalProfile:"story-execution"},{commandId:"create-tasks",number:28,aliases:["tasks","tarefas","c05"],retrievalProfile:"story-execution"},{commandId:"implement",number:29,aliases:["impl","implementar","c06"],retrievalProfile:"story-execution"},{commandId:"commit",number:30,aliases:["push","commit-push","commit_push","cp","c07"],retrievalProfile:"story-execution"},{commandId:"sync",number:31,aliases:["sincronizar","c08"],retrievalProfile:"story-execution"},{commandId:"create-pr",number:32,aliases:["pr","c09"],retrievalProfile:"story-execution"},{commandId:"review",number:33,aliases:["revisar","c11"],retrievalProfile:"review"},{commandId:"merge",number:34,aliases:["mesclar","c12"],retrievalProfile:"story-execution"},{commandId:"fix-blocked",number:35,aliases:["fix","corrigir"],retrievalProfile:"recovery"},{commandId:"finalize-epic",number:36,aliases:["finalizar"],retrievalProfile:"recovery"},{commandId:"resolve-conflicts",number:37,aliases:["conflitos"],retrievalProfile:"recovery"},{commandId:"update-memory",number:38,aliases:["memoria"],retrievalProfile:"recovery"},{commandId:"refactor",number:39,aliases:["refactoring","refact","refac","rf","cleanup-code","code-cleanup","code-quality","improve-code","modernize","modernization","legacy","legacy-code","debt-pay","pay-debt","debt-reduction","smell-fix","fix-smells","code-smells","strangler","strangler-fig"],retrievalProfile:"recovery"},{commandId:"cleanup",number:40,aliases:["limpar","limpeza"],retrievalProfile:"utility"},{commandId:"audit",number:41,aliases:["auditar","auditoria"],retrievalProfile:"utility"},{commandId:"tech-debt",number:42,aliases:["debt","debts","debt-list","tech-debts","td"],retrievalProfile:"utility"},{commandId:"menu",number:43,aliases:["help","ajuda","?","commands","cmds"],retrievalProfile:"utility"},{commandId:"plans",number:44,aliases:["planos","pricing"],retrievalProfile:"utility"},{commandId:"billing",number:45,aliases:["bill","subscription","sub"],retrievalProfile:"utility"},{commandId:"subscribe",number:46,aliases:["upgrade","checkout"],retrievalProfile:"utility"},{commandId:"qa-scan",number:47,aliases:["qa","qa-test","visual-qa","e2e-scan","troubleshoot","debug-ui","scan","a11y","accessibility","wcag"],retrievalProfile:"qa"},{commandId:"yoloop",number:48,aliases:["auto-yolo","epic-runner","story-runner","loop-yolo","auto-epic"],retrievalProfile:"utility"},{commandId:"migrate-state",number:49,aliases:["migrate","state-migrate","schema-migrate"],retrievalProfile:"utility"},{commandId:"policy-audit",number:50,aliases:["policy","audit-policy","policy-history","policies"],retrievalProfile:"utility"},{commandId:"mutation-test",number:51,aliases:["mutation","stryker","kill-mutants"],retrievalProfile:"qa"},{commandId:"sync-openapi",number:52,aliases:["openapi-sync","api-sync","spec-sync","regen-openapi"],retrievalProfile:"utility"},{commandId:"generate-pacts",number:53,aliases:["pacts","gen-pacts","regen-pacts","create-pacts"],retrievalProfile:"utility"},{commandId:"verify-pacts",number:54,aliases:["verify-pact","pact-verify","check-pacts","pact-check"],retrievalProfile:"utility"},{commandId:"property-test",number:55,aliases:["property","pbt","proptest","property-tests","invariant-test"],retrievalProfile:"qa"},{commandId:"chaos-plan",number:56,aliases:["chaos","gameday","resilience-test"],retrievalProfile:"utility"},{commandId:"ui-ux-review",number:57,aliases:["ux-review","design-review","visual-review","product-polish"],retrievalProfile:"utility"},{commandId:"solyd-system",number:58,aliases:["security-system","authorized-security","sec-system"],retrievalProfile:"security"},{commandId:"goal",number:59,aliases:["goals","durable-goal","continuity-goal"],retrievalProfile:"continuity"},{commandId:"loop",number:60,aliases:["loops","durable-loop","continuity-loop"],retrievalProfile:"continuity"},{commandId:"jobs",number:61,aliases:["job","continuity-jobs"],retrievalProfile:"continuity"},{commandId:"runner",number:62,aliases:["neocortex-runner","continuity-runner"],retrievalProfile:"continuity"},{commandId:"migrate-project-id",number:63,retrievalProfile:"recovery"}],g=[{commandId:"diagnose-inline",retrievalProfile:"diagnostic"},{commandId:"research-inline",retrievalProfile:"research"},{commandId:"yolo-inline",retrievalProfile:"story-execution"},{commandId:"goal-tick",retrievalProfile:"continuity"},{commandId:"loop-tick",retrievalProfile:"continuity"}],l=Object.freeze(C.map(u)),p=Object.freeze(g.map(u)),f=Object.freeze([...l,...p]),m=Object.freeze(Object.fromEntries(f.map(e=>[e.commandId,e]))),E=Object.freeze(Object.fromEntries(l.filter(e=>e.number!==void 0).map(e=>[e.number,e]))),_=Object.freeze(Object.fromEntries(l.flatMap(e=>e.aliases.map(a=>[y(a),e.commandId]))));function y(e){return e.trim().toLowerCase().replace(/^\*/,"")}function T(e){return e.trim().split(/\s+/,1)[0]??""}function R(){return l}function S(){return p}function A(){return f}function M(e){const a=T(e);if(!a)return m.menu??null;const t=y(a);return/^\d+$/.test(t)?E[Number.parseInt(t,10)]??null:m[t]??m[_[t]??""]??null}const b={CanonicalMemory:0,Guardrail:1,Debt:2,State:3,Story:4,Epic:5,Command:6,Doc:7,Package:8,Api:9,Route:10,DbSchema:11,Flag:12,BusinessRule:13,Risk:14,PlatformMemory:15};function d(e){return e.replace(/\\/g,"/").replace(/\/+/g,"/").replace(/^\.\//,"")}function I(e){return[e.nodeType,`${e.source.kind}:${d(e.source.path).toLowerCase()}`,e.stableId.toLowerCase()].join("|")}function x(e){return e.score??0}function P(e,a){const t=x(a)-x(e);if(t!==0)return t;const o=a.confidence-e.confidence;if(o!==0)return o;const s=e.budgetCost-a.budgetCost;if(s!==0)return s;const n=b[e.nodeType]-b[a.nodeType];if(n!==0)return n;const r=d(e.source.path).localeCompare(d(a.source.path),"en-US");return r!==0?r:e.stableId.localeCompare(a.stableId,"en-US")}function D(e){const a={...h,...e.budgets},t=new Map;for(const r of e.items){const c=t.get(I(r));(!c||P(r,c)<0)&&t.set(I(r),r)}const o=[],s=[];let n=0;for(const r of[...t.values()].sort(P)){const c=n+Math.max(1,r.budgetCost);if(o.length>=a.maxItems||c>a.maxTotalCost){s.push({stableId:r.stableId,source:r.source,reasonCode:"budget_exceeded"});continue}o.push(r),n=c}return{schemaVersion:1,retrievalId:e.retrievalId,query:e.query,budget:{...a,totalCost:n},items:o,skipped:s,warnings:e.warnings??[],generatedAt:e.generatedAt}}export{f as CLIENT_COMMAND_CONTEXT_POLICIES,_ as CLIENT_COMMAND_CONTEXT_POLICY_ALIAS_MAP,m as CLIENT_COMMAND_CONTEXT_POLICY_BY_ID,E as CLIENT_COMMAND_CONTEXT_POLICY_BY_NUMBER,v as CLIENT_GRAPH_RETRIEVAL_PROFILE_BUDGETS,p as CLIENT_INTERNAL_COMMAND_CONTEXT_POLICIES,l as CLIENT_PUBLIC_COMMAND_CONTEXT_POLICIES,N as COMMAND_CONTEXT_RETRIEVAL_PROFILES,h as DEFAULT_GRAPH_RETRIEVAL_BUDGETS,O as GRAPH_RETRIEVAL_CLIENT_CONTRACT_VERSION,L as GRAPH_RETRIEVAL_SCHEMA_VERSION,P as compareGraphRetrievalItems,D as createGraphRetrievalMetadata,A as listClientCommandContextPolicies,S as listClientInternalCommandContextPolicies,R as listClientPublicCommandContextPolicies,y as normalizeCommandToken,d as normalizeGraphRetrievalPath,M as resolveClientCommandContextPolicy};
@@ -0,0 +1,9 @@
1
+ import { type InvokeInputEnvelopeV2, type InvokeInputSourceV2 } from '../../../shared/dist/invocation/index.js';
2
+ export declare class InvokeInputDecodeError extends Error {
3
+ readonly source: InvokeInputSourceV2;
4
+ readonly code = "INVOCATION_MALFORMED_INPUT";
5
+ readonly reason = "invalid-utf8";
6
+ constructor(source: InvokeInputSourceV2);
7
+ }
8
+ export declare function decodeExplicitInvokeInput(source: InvokeInputSourceV2, value: string | Uint8Array): string;
9
+ export declare function buildInvokeInputEnvelope(source: InvokeInputSourceV2, value: string | Uint8Array): InvokeInputEnvelopeV2;
@@ -0,0 +1 @@
1
+ import{createInvokeInputEnvelopeV2 as n}from"../../../shared/dist/invocation/index.js";class o extends Error{source;code="INVOCATION_MALFORMED_INPUT";reason="invalid-utf8";constructor(e){super(`${e} must contain valid UTF-8 text. Use --args-file or --stdin with an unmodified UTF-8 document.`),this.source=e,this.name="InvokeInputDecodeError"}}function r(t,e){if(typeof e=="string")return e;try{return new TextDecoder("utf-8",{fatal:!0}).decode(e)}catch{throw new o(t)}}function c(t,e){return n(t,r(t,e))}export{o as InvokeInputDecodeError,c as buildInvokeInputEnvelope,r as decodeExplicitInvokeInput};
@@ -0,0 +1,13 @@
1
+ export type ProjectIdentityCapabilityReason = 'supported' | 'fetch-unavailable' | 'request-failed' | 'http-rejected' | 'response-too-large' | 'response-invalid' | 'capability-missing';
2
+ export interface ProjectIdentityCapabilityProbe {
3
+ readonly supported: boolean;
4
+ readonly reason: ProjectIdentityCapabilityReason;
5
+ readonly publicSafe: true;
6
+ }
7
+ type FetchLike = (input: string, init?: RequestInit) => Promise<Pick<Response, 'ok' | 'text'>>;
8
+ /**
9
+ * Fail-closed, non-mutating rollout probe. An older server cannot cause the
10
+ * client to persist a local project ID that has no remote floor authority.
11
+ */
12
+ export declare function probeProjectIdentityMigrationCapability(serverUrl: string, fetcher?: FetchLike | undefined): Promise<ProjectIdentityCapabilityProbe>;
13
+ export {};
@@ -0,0 +1 @@
1
+ import{PROJECT_IDENTITY_MIGRATION_CAPABILITY as u}from"../../../shared/dist/invocation/index.js";const l=16*1024;async function f(p,t=globalThis.fetch){if(!t)return{supported:!1,reason:"fetch-unavailable",publicSafe:!0};const a=new AbortController,s=setTimeout(()=>a.abort(),5e3);s.unref?.();try{const o=await t(`${p.replace(/\/+$/,"")}/api/v1/config`,{method:"GET",headers:{accept:"application/json"},signal:a.signal});if(!o.ok)return{supported:!1,reason:"http-rejected",publicSafe:!0};const i=await o.text();if(Buffer.byteLength(i,"utf8")>l)return{supported:!1,reason:"response-too-large",publicSafe:!0};let e;try{e=JSON.parse(i)}catch{return{supported:!1,reason:"response-invalid",publicSafe:!0}}if(!e||typeof e!="object"||Array.isArray(e))return{supported:!1,reason:"response-invalid",publicSafe:!0};const r=e.capabilities;return!Array.isArray(r)||r.some(n=>typeof n!="string"||n.length>80)?{supported:!1,reason:"response-invalid",publicSafe:!0}:r.includes(u)?{supported:!0,reason:"supported",publicSafe:!0}:{supported:!1,reason:"capability-missing",publicSafe:!0}}catch{return{supported:!1,reason:"request-failed",publicSafe:!0}}finally{clearTimeout(s)}}export{f as probeProjectIdentityMigrationCapability};
@@ -0,0 +1,41 @@
1
+ import { type ProjectIdentityMigrationReceiptV1, type ProjectIdentityMigrationRequestV1 } from '../../../shared/dist/invocation/index.js';
2
+ declare const MIGRATION_SCHEMA_VERSION: 1;
3
+ export type ProjectIdentityMigrationPhase = 'prepared' | 'remote-acknowledged' | 'finalized';
4
+ export interface ProjectIdentityMigrationDocumentV1 {
5
+ readonly schemaVersion: typeof MIGRATION_SCHEMA_VERSION;
6
+ readonly operationId: string;
7
+ readonly projectId: string;
8
+ readonly phase: ProjectIdentityMigrationPhase;
9
+ readonly legacyEpicFloor: number;
10
+ readonly originalStateExists: boolean;
11
+ readonly originalStateDigest: string;
12
+ readonly preparedStateDigest: string;
13
+ readonly backupPath: string | null;
14
+ readonly createdAt: string;
15
+ readonly updatedAt: string;
16
+ readonly receipt?: ProjectIdentityMigrationReceiptV1;
17
+ }
18
+ export interface PreparedProjectIdentityMigration {
19
+ readonly changed: boolean;
20
+ readonly document: ProjectIdentityMigrationDocumentV1;
21
+ readonly request: ProjectIdentityMigrationRequestV1;
22
+ }
23
+ export declare class ProjectIdentityMigrationError extends Error {
24
+ readonly code: string;
25
+ constructor(code: string, message?: string);
26
+ }
27
+ export declare function prepareProjectIdentityMigration(projectRoot: string): PreparedProjectIdentityMigration;
28
+ export declare function finalizeProjectIdentityMigration(projectRoot: string, receipt: ProjectIdentityMigrationReceiptV1): ProjectIdentityMigrationDocumentV1;
29
+ /** Persist the authenticated ACK before local finalization so a crash is reconcilable. */
30
+ export declare function acknowledgeProjectIdentityMigration(projectRoot: string, receipt: ProjectIdentityMigrationReceiptV1): ProjectIdentityMigrationDocumentV1;
31
+ export declare function rollbackPreparedProjectIdentityMigration(projectRoot: string): void;
32
+ /**
33
+ * Read-only admission check used to prevent create-epic from observing the
34
+ * locally prepared project ID before its remote floor has been acknowledged.
35
+ */
36
+ export declare function readProjectIdentityMigrationPhase(projectRoot: string): ProjectIdentityMigrationPhase | null;
37
+ export declare function projectIdentityMigrationRelativePaths(projectRoot: string): {
38
+ readonly state: string;
39
+ readonly migration: string;
40
+ };
41
+ export {};
@@ -0,0 +1,7 @@
1
+ import{createHash as z,randomUUID as m}from"node:crypto";import{existsSync as I,linkSync as q,lstatSync as R,mkdirSync as Q,readFileSync as T,realpathSync as W,statSync as X,unlinkSync as O}from"node:fs";import{dirname as E,join as a,relative as F,resolve as Z}from"node:path";import{assertProjectIdentityMigrationReceiptV1 as j,PROJECT_ID_PATTERN as K}from"../../../shared/dist/invocation/index.js";import{atomicReplaceUtf8 as l,durableCreateUtf8 as U,fsyncDirectoryBestEffort as u,recoverAtomicReplaceUtf8 as $}from"../fs/atomic-state-replace.js";const Et=1,_=a(".neocortex","state.json"),f=a(".neocortex","project-identity-migration.json"),tt=a(".neocortex","project-identity-migration.lock"),et=/^\.neocortex[\\/]state\.json\.project-identity-backup-(?:\d{8}T\d{9}Z-)?mig_[a-f0-9]{32}$/;class n extends Error{code;constructor(r,t=r){super(t),this.code=r,this.name="ProjectIdentityMigrationError"}}const p=o=>z("sha256").update(o).digest("hex");function rt(){return`prj_${m().replaceAll("-","")}`}function ot(){return`mig_${m().replaceAll("-","")}`}function nt(o){return o.toISOString().replace(/[-:.]/g,"")}function g(o){const r=Z(o);let t;try{t=W(r)}catch{throw new n("PROJECT_IDENTITY_ROOT_INVALID")}if(!X(t).isDirectory())throw new n("PROJECT_IDENTITY_ROOT_INVALID");const e=a(t,".neocortex");if(I(e)&&R(e).isSymbolicLink())throw new n("PROJECT_IDENTITY_SYMLINK_REJECTED");const i=a(t,_);if(I(i)){const s=R(i);if(s.isSymbolicLink()||!s.isFile())throw new n("PROJECT_IDENTITY_SYMLINK_REJECTED")}const c=a(t,f);if(I(c)){const s=R(c);if(s.isSymbolicLink()||!s.isFile())throw new n("PROJECT_IDENTITY_SYMLINK_REJECTED")}return t}function A(o,r){const t=a(o,tt);Q(E(t),{recursive:!0,mode:448});const e=()=>{const i=`${t}.${process.pid}.${m()}.owner`;U(i,`${process.pid}
2
+ `);try{q(i,t),u(E(t))}finally{try{O(i)}catch{}u(E(t))}};try{e()}catch(i){if(i.code!=="EEXIST")throw new n("PROJECT_IDENTITY_MIGRATION_LOCKED");const c=R(t);if(c.isSymbolicLink()||!c.isFile())throw new n("PROJECT_IDENTITY_SYMLINK_REJECTED");const s=T(t,"utf8");if(!/^[1-9][0-9]*\n$/.test(s)||s.length>24)throw new n("PROJECT_IDENTITY_MIGRATION_LOCK_CORRUPT");const d=Number(s.trim());let N=!0;try{process.kill(d,0)}catch(h){N=h.code!=="ESRCH"}if(N)throw new n("PROJECT_IDENTITY_MIGRATION_LOCKED");try{O(t),u(E(t)),e()}catch{throw new n("PROJECT_IDENTITY_MIGRATION_LOCKED")}}try{return r()}finally{try{O(t),u(E(t))}catch{}}}function v(o){let r;try{r=JSON.parse(o)}catch{throw new n("PROJECT_IDENTITY_STATE_CORRUPT")}if(!r||typeof r!="object"||Array.isArray(r))throw new n("PROJECT_IDENTITY_STATE_CORRUPT");return r}function y(o){const r=a(o,f);try{$(r),$(a(o,_))}catch{throw new n("PROJECT_IDENTITY_ATOMIC_RECOVERY_FAILED")}if(!I(r))return null;let t;try{t=JSON.parse(T(r,"utf8"))}catch{throw new n("PROJECT_IDENTITY_MIGRATION_STATE_CORRUPT")}if(!t||typeof t!="object"||Array.isArray(t))throw new n("PROJECT_IDENTITY_MIGRATION_STATE_CORRUPT");const e=t;if(e.schemaVersion!==1||typeof e.operationId!="string"||!/^mig_[a-f0-9]{32}$/.test(e.operationId)||typeof e.projectId!="string"||!K.test(e.projectId)||!["prepared","remote-acknowledged","finalized"].includes(String(e.phase))||!Number.isSafeInteger(e.legacyEpicFloor)||(e.legacyEpicFloor??-1)<0||typeof e.originalStateExists!="boolean"||typeof e.originalStateDigest!="string"||!/^[a-f0-9]{64}$/.test(e.originalStateDigest)||typeof e.preparedStateDigest!="string"||!/^[a-f0-9]{64}$/.test(e.preparedStateDigest)||e.backupPath!==null&&(typeof e.backupPath!="string"||!et.test(e.backupPath))||typeof e.createdAt!="string"||typeof e.updatedAt!="string")throw new n("PROJECT_IDENTITY_MIGRATION_STATE_CORRUPT");e.receipt!==void 0&&j(e.receipt);const i=e.phase==="remote-acknowledged"||e.phase==="finalized";if(e.phase==="prepared"&&e.receipt!==void 0||i&&e.receipt===void 0||e.receipt!==void 0&&(e.receipt.operationId!==e.operationId||e.receipt.projectId!==e.projectId||e.receipt.acceptedLegacyFloor<e.legacyEpicFloor))throw new n("PROJECT_IDENTITY_MIGRATION_STATE_CORRUPT");return e}function it(o){const r=[];o.epics&&typeof o.epics=="object"&&!Array.isArray(o.epics)&&r.push(...Object.keys(o.epics));const t=o.epic_id_ledger;if(t&&typeof t=="object"&&!Array.isArray(t)){const e=t.reserved_ids;Array.isArray(e)&&r.push(...e.filter(i=>typeof i=="string"))}return r.reduce((e,i)=>{const c=i.match(/^P?(\d+)$/i);if(!c)return e;const s=Number(c[1]);return Number.isSafeInteger(s)?Math.max(e,s):e},0)}function J(o){return{version:1,operationId:o.operationId,projectId:o.projectId,localStateDigest:o.preparedStateDigest,legacyEpicFloor:o.legacyEpicFloor,phase:"seed"}}function B(o,r){const t=v(o),e=t.config&&typeof t.config=="object"&&!Array.isArray(t.config)?"config":t.project&&typeof t.project=="object"&&!Array.isArray(t.project)?"project":"config",i=t[e]??{};return t[e]={...i,project_id:r},t.schema_version===void 0&&(t.schema_version=1),(!t.stories||typeof t.stories!="object"||Array.isArray(t.stories))&&(t.stories={}),(!t.epics||typeof t.epics!="object"||Array.isArray(t.epics))&&(t.epics={}),{raw:`${JSON.stringify(t,null,2)}
3
+ `,state:t}}function V(){return`${JSON.stringify({schema_version:1,config:{project_name:"neocortex-project",default_branch:"main",language:"pt-BR"},stories:{},epics:{}},null,2)}
4
+ `}function ct(o,r){if(!r.originalStateExists)return;if(!r.backupPath)throw new n("PROJECT_IDENTITY_MIGRATION_BACKUP_MISSING");const t=a(o,r.backupPath);if(!I(t))throw new n("PROJECT_IDENTITY_MIGRATION_BACKUP_MISSING");const e=R(t);if(e.isSymbolicLink()||!e.isFile())throw new n("PROJECT_IDENTITY_SYMLINK_REJECTED");if(p(T(t))!==r.originalStateDigest)throw new n("PROJECT_IDENTITY_MIGRATION_BACKUP_CORRUPT")}function ft(o){const r=g(o);return A(r,()=>{const t=y(r);if(t){const P=a(r,_);ct(r,t);const w=I(P),L=w?p(T(P)):null;if(L===t.preparedStateDigest)return{changed:!1,document:t,request:J(t)};if(!(t.phase==="prepared"&&(w&&L===t.originalStateDigest||!w&&!t.originalStateExists)))throw new n("PROJECT_IDENTITY_MIGRATION_STATE_DRIFT");const H=w?T(P,"utf8"):V(),x=B(H,t.projectId).raw;if(p(x)!==t.preparedStateDigest)throw new n("PROJECT_IDENTITY_MIGRATION_STATE_DRIFT");return l(P,x),{changed:!0,document:t,request:J(t)}}const e=a(r,_),i=I(e),c=i?T(e,"utf8"):V(),s=v(c),d=s.config&&typeof s.config=="object"&&!Array.isArray(s.config)?"config":s.project&&typeof s.project=="object"&&!Array.isArray(s.project)?"project":"config",h=(s[d]??{}).project_id,M=typeof h=="string"&&K.test(h)?h:rt(),Y=B(c,M),S=Y.raw,b=ot(),k=new Date,D=i?a(".neocortex",`state.json.project-identity-backup-${nt(k)}-${b}`):null;D&&U(a(r,D),c);const G=k.toISOString(),C={schemaVersion:1,operationId:b,projectId:M,phase:"prepared",legacyEpicFloor:it(Y.state),originalStateExists:i,originalStateDigest:p(c),preparedStateDigest:p(S),backupPath:D,createdAt:G,updatedAt:G};return l(a(r,f),`${JSON.stringify(C,null,2)}
5
+ `),l(e,S),{changed:S!==c,document:C,request:J(C)}})}function dt(o,r){j(r);const t=g(o);return A(t,()=>{const e=y(t);if(!e)throw new n("PROJECT_IDENTITY_MIGRATION_NOT_PREPARED");if(e.operationId!==r.operationId||e.projectId!==r.projectId)throw new n("PROJECT_IDENTITY_MIGRATION_RECEIPT_CONFLICT");const i=a(t,_);if(!I(i)||p(T(i))!==e.preparedStateDigest)throw new n("PROJECT_IDENTITY_MIGRATION_STATE_DRIFT");if(e.phase==="prepared"||!e.receipt||e.receipt.receiptDigest!==r.receiptDigest)throw new n("PROJECT_IDENTITY_MIGRATION_ACK_REQUIRED");if(e.phase==="finalized")return e;const c={...e,phase:"finalized",updatedAt:new Date().toISOString(),receipt:r};return l(a(t,f),`${JSON.stringify(c,null,2)}
6
+ `),c})}function Rt(o,r){j(r);const t=g(o);return A(t,()=>{const e=y(t);if(!e)throw new n("PROJECT_IDENTITY_MIGRATION_NOT_PREPARED");if(e.operationId!==r.operationId||e.projectId!==r.projectId)throw new n("PROJECT_IDENTITY_MIGRATION_RECEIPT_CONFLICT");const i=a(t,_);if(!I(i)||p(T(i))!==e.preparedStateDigest)throw new n("PROJECT_IDENTITY_MIGRATION_STATE_DRIFT");if(e.receipt&&e.receipt.receiptDigest!==r.receiptDigest)throw new n("PROJECT_IDENTITY_MIGRATION_RECEIPT_CONFLICT");if(e.phase==="remote-acknowledged"||e.phase==="finalized")return e;const c={...e,phase:"remote-acknowledged",updatedAt:new Date().toISOString(),receipt:r};return l(a(t,f),`${JSON.stringify(c,null,2)}
7
+ `),c})}function lt(o){const r=g(o);A(r,()=>{const t=y(r);if(!t)return;if(t.phase!=="prepared"||t.receipt)throw new n("PROJECT_IDENTITY_MIGRATION_ROLLBACK_AFTER_ACK_DENIED");const e=a(r,_);if(!I(e)||p(T(e))!==t.preparedStateDigest)throw new n("PROJECT_IDENTITY_MIGRATION_STATE_DRIFT");if(t.originalStateExists){if(!t.backupPath)throw new n("PROJECT_IDENTITY_MIGRATION_BACKUP_MISSING");const c=a(r,t.backupPath);if(!I(c))throw new n("PROJECT_IDENTITY_MIGRATION_BACKUP_MISSING");const s=R(c);if(s.isSymbolicLink()||!s.isFile())throw new n("PROJECT_IDENTITY_SYMLINK_REJECTED");const d=T(c,"utf8");if(p(d)!==t.originalStateDigest)throw new n("PROJECT_IDENTITY_MIGRATION_BACKUP_CORRUPT");l(e,d)}else O(e),u(E(e));const i=a(r,f);O(i),u(E(i))})}function ut(o){const r=g(o);return y(r)?.phase??null}function gt(o){const r=g(o);return{state:F(r,a(r,_)),migration:F(r,a(r,f))}}export{n as ProjectIdentityMigrationError,Rt as acknowledgeProjectIdentityMigration,dt as finalizeProjectIdentityMigration,ft as prepareProjectIdentityMigration,gt as projectIdentityMigrationRelativePaths,ut as readProjectIdentityMigrationPhase,lt as rollbackPreparedProjectIdentityMigration};
File without changes
@@ -0,0 +1,9 @@
1
+ import type { InvocationShapeV2 } from '../../../shared/dist/invocation/index.js';
2
+ export interface InvocationShapeEvidence {
3
+ readonly commandId: string;
4
+ readonly targetStoryId?: string | null;
5
+ readonly explicitYoloopEpicId?: string | null;
6
+ readonly sessionYoloopEpicId?: string | null;
7
+ }
8
+ /** Pure classification; state projection consumes this before selecting data. */
9
+ export declare function classifyInvocationShapeV2(evidence: InvocationShapeEvidence): InvocationShapeV2 | null;
@@ -0,0 +1 @@
1
+ function l(o){return o.commandId==="yolo"||o.commandId==="yolo-inline"?o.targetStoryId?"yolo-story":"yolo-inline":o.commandId!=="yoloop"?null:o.explicitYoloopEpicId?"yoloop-target":o.sessionYoloopEpicId?"yoloop-session":"yoloop-discovery"}export{l as classifyInvocationShapeV2};
@@ -5,6 +5,7 @@
5
5
  * Pure request-scoped projection helpers for invoke state snapshots.
6
6
  */
7
7
  import type { StateSnapshot } from '../commands/invoke.js';
8
+ import type { StateProjectionResultV2 } from '../../../shared/dist/invocation/index.js';
8
9
  /**
9
10
  * P198.04 -- deterministic post-assembly state degradation.
10
11
  *
@@ -17,8 +18,13 @@ export declare function degradeStateSnapshotForPayloadLimit(snapshot: StateSnaps
17
18
  /**
18
19
  * Return a request-scoped state snapshot for invoke commands.
19
20
  *
20
- * The function is intentionally pure. If a structural-required target cannot be
21
- * proven from the already-sanitized snapshot, it returns a full scoped snapshot
22
- * instead of sending an ambiguous partial projection.
21
+ * The function is intentionally pure. Structural uncertainty fails closed;
22
+ * callers must surface the public code instead of sending a full-state fallback.
23
23
  */
24
24
  export declare function projectStateSnapshotForInvoke(args: string, snapshot: StateSnapshot): StateSnapshot;
25
+ /**
26
+ * Versioned result contract for the five structural YOLO/yoloop shapes.
27
+ * Other command families retain their existing projection policy and return
28
+ * null because they are outside StateProjectionV2's closed shape union.
29
+ */
30
+ export declare function projectStateSnapshotResultV2ForInvoke(args: string, snapshot: StateSnapshot): StateProjectionResultV2<StateSnapshot> | null;
@@ -1 +1 @@
1
- const le=12,pe=16,h=["active","archived","rolled-back","synthetic","orphan"],n=(r,e,t={})=>({commandId:r,stateProjectionPolicy:e,...t}),P=Object.freeze({status:n("status","full"),init:n("init","epic-targeted"),"arch-plan":n("arch-plan","full"),"arch-prd":n("arch-prd","full"),"arch-architecture":n("arch-architecture","epic-targeted"),"arch-api-contracts":n("arch-api-contracts","epic-targeted"),"arch-api-integrations":n("arch-api-integrations","epic-targeted"),"arch-database":n("arch-database","epic-targeted"),"arch-security":n("arch-security","epic-targeted"),"arch-design-system":n("arch-design-system","epic-targeted"),"arch-ux-design":n("arch-ux-design","epic-targeted"),"arch-performance":n("arch-performance","epic-targeted"),"arch-testing":n("arch-testing","epic-targeted"),"arch-infrastructure":n("arch-infrastructure","epic-targeted"),"arch-review":n("arch-review","epic-targeted"),"arch-fitness-functions":n("arch-fitness-functions","epic-targeted"),"create-epic":n("create-epic","epic-summary"),"idea-diagnose":n("idea-diagnose","full"),"idea-research":n("idea-research","epic-targeted"),"generate-epic":n("generate-epic","epic-targeted"),exec:n("exec","story-targeted",{structuralRequired:!0}),yolo:n("yolo","story-targeted",{structuralRequired:!0}),"yolo-inline":n("yolo-inline","story-targeted",{structuralRequired:!0}),epic:n("epic","epic-targeted",{structuralRequired:!0}),"setup-branch":n("setup-branch","story-targeted",{structuralRequired:!0}),diagnose:n("diagnose","adaptive-targeted"),"diagnose-inline":n("diagnose-inline","full"),research:n("research","adaptive-targeted"),"research-inline":n("research-inline","full"),"write-spec":n("write-spec","story-targeted",{structuralRequired:!0}),"create-tasks":n("create-tasks","story-targeted",{structuralRequired:!0}),implement:n("implement","story-targeted",{structuralRequired:!0}),commit:n("commit","story-targeted",{structuralRequired:!0}),"commit-push":n("commit","story-targeted",{structuralRequired:!0}),sync:n("sync","story-targeted",{structuralRequired:!0}),"sync-main":n("sync","story-targeted",{structuralRequired:!0}),"create-pr":n("create-pr","story-targeted",{structuralRequired:!0}),review:n("review","story-targeted"),"review-pr":n("review","story-targeted"),merge:n("merge","story-targeted",{structuralRequired:!0}),"merge-pr":n("merge","story-targeted",{structuralRequired:!0}),"fix-blocked":n("fix-blocked","story-targeted"),"finalize-epic":n("finalize-epic","epic-targeted"),"resolve-conflicts":n("resolve-conflicts","story-targeted"),"update-memory":n("update-memory","full"),"update-project-memory":n("update-memory","story-targeted",{structuralRequired:!0}),refactor:n("refactor","adaptive-targeted"),"refactor-suggest":n("refactor","story-targeted",{structuralRequired:!0}),cleanup:n("cleanup","full"),audit:n("audit","full"),"tech-debt":n("tech-debt","full"),menu:n("menu","full"),plans:n("plans","full"),billing:n("billing","full"),subscribe:n("subscribe","full"),"qa-scan":n("qa-scan","full"),yoloop:n("yoloop","yoloop-targeted",{structuralRequired:!0}),"migrate-state":n("migrate-state","full"),"policy-audit":n("policy-audit","full"),"mutation-test":n("mutation-test","full"),"sync-openapi":n("sync-openapi","full"),"generate-pacts":n("generate-pacts","full"),"verify-pacts":n("verify-pacts","full"),"property-test":n("property-test","full"),"property-tests":n("property-test","story-targeted",{structuralRequired:!0}),"chaos-plan":n("chaos-plan","full"),"ui-ux-review":n("ui-ux-review","adaptive-targeted"),"solyd-system":n("solyd-system","adaptive-targeted"),goal:n("goal","continuity-scoped"),loop:n("loop","continuity-scoped"),jobs:n("jobs","continuity-scoped"),runner:n("runner","continuity-scoped"),"goal-tick":n("goal-tick","continuity-scoped"),"loop-tick":n("loop-tick","continuity-scoped"),"validate-tests":n("validate-tests","story-targeted",{structuralRequired:!0}),"qa-gate":n("qa-gate","story-targeted",{structuralRequired:!0})}),L=Object.freeze({st:"status",inicializar:"init",arquitetura:"arch-plan",architecture:"arch-plan",arch:"arch-plan",prd:"arch-prd","product-requirements":"arch-prd","arch-doc":"arch-architecture","tech-architecture":"arch-architecture","api-contracts":"arch-api-contracts","api-contract":"arch-api-contracts","api-integrations":"arch-api-integrations","api-int":"arch-api-integrations","database-schema":"arch-database","db-schema":"arch-database",db:"arch-database","cyber-security":"arch-security",security:"arch-security",sec:"arch-security","design-system":"arch-design-system",ds:"arch-design-system","atomic-design":"arch-design-system","ux-design":"arch-ux-design",ux:"arch-ux-design",wireframes:"arch-ux-design",wireframe:"arch-ux-design","user-flows":"arch-ux-design",performance:"arch-performance",perf:"arch-performance","capacity-planning":"arch-performance",capacity:"arch-performance","arch-perf":"arch-performance","performance-strategy":"arch-performance","testing-strategy":"arch-testing","test-plan":"arch-testing","test-strategy":"arch-testing","arch-test":"arch-testing",infrastructure:"arch-infrastructure",infra:"arch-infrastructure","deploy-plan":"arch-infrastructure",deployment:"arch-infrastructure","arch-infra":"arch-infrastructure","arch-deploy":"arch-infrastructure","review-consolidation":"arch-review",consolidation:"arch-review","architecture-review":"arch-review","arch-consolidation":"arch-review",fitness:"arch-fitness-functions","fitness-functions":"arch-fitness-functions",archfit:"arch-fitness-functions","arch-fit":"arch-fitness-functions","fit-funcs":"arch-fitness-functions","criar-epic":"create-epic",planejamento:"create-epic","idea-diag":"idea-diagnose","idea-pesq":"idea-research","gerar-epic":"generate-epic",executar:"exec",pipeline:"exec","parallel-epic":"epic",setup:"setup-branch",branch:"setup-branch",diag:"diagnose",diagnostico:"diagnose",c02:"diagnose",pesquisar:"research",pesq:"research","research-fix":"research",c03:"research",spec:"write-spec",especificacao:"write-spec",c04:"write-spec",tasks:"create-tasks",tarefas:"create-tasks",c05:"create-tasks",impl:"implement",implementar:"implement",c06:"implement",push:"commit",commit_push:"commit",cp:"commit",c07:"commit",sincronizar:"sync",c08:"sync",pr:"create-pr",c09:"create-pr",revisar:"review",c11:"review",mesclar:"merge",c12:"merge",fix:"fix-blocked",corrigir:"fix-blocked",finalizar:"finalize-epic",conflitos:"resolve-conflicts",memoria:"update-memory",refactoring:"refactor",refact:"refactor",refac:"refactor",rf:"refactor","cleanup-code":"refactor","code-cleanup":"refactor","code-quality":"refactor","improve-code":"refactor",modernize:"refactor",modernization:"refactor",legacy:"refactor","legacy-code":"refactor","debt-pay":"refactor","pay-debt":"refactor","debt-reduction":"refactor","smell-fix":"refactor","fix-smells":"refactor","code-smells":"refactor",strangler:"refactor","strangler-fig":"refactor",limpar:"cleanup",limpeza:"cleanup",auditar:"audit",auditoria:"audit",debt:"tech-debt",debts:"tech-debt","debt-list":"tech-debt","tech-debts":"tech-debt",td:"tech-debt",help:"menu",ajuda:"menu","?":"menu",commands:"menu",cmds:"menu",planos:"plans",pricing:"plans",bill:"billing",subscription:"billing",sub:"billing",upgrade:"subscribe",checkout:"subscribe",qa:"qa-scan","qa-test":"qa-scan","visual-qa":"qa-scan","e2e-scan":"qa-scan",troubleshoot:"qa-scan","debug-ui":"qa-scan",scan:"qa-scan",a11y:"qa-scan",accessibility:"qa-scan",wcag:"qa-scan","auto-yolo":"yoloop","epic-runner":"yoloop","story-runner":"yoloop","loop-yolo":"yoloop","auto-epic":"yoloop",migrate:"migrate-state","state-migrate":"migrate-state","schema-migrate":"migrate-state",policy:"policy-audit","audit-policy":"policy-audit","policy-history":"policy-audit",policies:"policy-audit",mutation:"mutation-test",stryker:"mutation-test","kill-mutants":"mutation-test","openapi-sync":"sync-openapi","api-sync":"sync-openapi","spec-sync":"sync-openapi","regen-openapi":"sync-openapi",pacts:"generate-pacts","gen-pacts":"generate-pacts","regen-pacts":"generate-pacts","create-pacts":"generate-pacts","verify-pact":"verify-pacts","pact-verify":"verify-pacts","check-pacts":"verify-pacts","pact-check":"verify-pacts",property:"property-test",pbt:"property-test",proptest:"property-test","invariant-test":"property-test",chaos:"chaos-plan",gameday:"chaos-plan","resilience-test":"chaos-plan","ux-review":"ui-ux-review","design-review":"ui-ux-review","visual-review":"ui-ux-review","product-polish":"ui-ux-review","security-system":"solyd-system","authorized-security":"solyd-system","sec-system":"solyd-system",goals:"goal","durable-goal":"goal","continuity-goal":"goal",loops:"loop","durable-loop":"loop","continuity-loop":"loop",job:"jobs","continuity-jobs":"jobs","neocortex-runner":"runner","continuity-runner":"runner"}),N=Object.freeze({1:"status",2:"init",3:"arch-plan",4:"arch-prd",5:"arch-architecture",6:"arch-api-contracts",7:"arch-api-integrations",8:"arch-database",9:"arch-security",10:"arch-design-system",11:"arch-ux-design",12:"arch-performance",13:"arch-testing",14:"arch-infrastructure",15:"arch-review",16:"arch-fitness-functions",17:"create-epic",18:"idea-diagnose",19:"idea-research",20:"generate-epic",21:"exec",22:"yolo",23:"epic",24:"setup-branch",25:"diagnose",26:"research",27:"write-spec",28:"create-tasks",29:"implement",30:"commit",31:"sync",32:"create-pr",33:"review",34:"merge",35:"fix-blocked",36:"finalize-epic",37:"resolve-conflicts",38:"update-memory",39:"refactor",40:"cleanup",41:"audit",42:"tech-debt",43:"menu",44:"plans",45:"billing",46:"subscribe",47:"qa-scan",48:"yoloop",49:"migrate-state",50:"policy-audit",51:"mutation-test",52:"sync-openapi",53:"generate-pacts",54:"verify-pacts",55:"property-test",56:"chaos-plan",57:"ui-ux-review",58:"solyd-system",59:"goal",60:"loop",61:"jobs",62:"runner"});function a(r,e=120){if(typeof r!="string")return;const t=r.trim();if(t)return t.replace(/[^a-z0-9_.:-]+/gi,"_").slice(0,e)}function j(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}function g(...r){const e=new Set,t=[];for(const i of r)for(const c of i??[]){const o=a(c,80);if(!(!o||e.has(o))&&(e.add(o),t.push(o),t.length>=16))return t}return t}function F(r){return r.trim().replace(/^@?\*/,"").replace(/^@/,"").toLowerCase()}function $(r){return r.trim().split(/\s+/,1)[0]??""}function D(r){const e=$(r);if(!e)return P.menu;const t=F(e),i=N[t]??L[t]??t;return P[i]??null}function Y(r,e,t,i="full-compatible",c=["full-state"]){return{kind:"full",commandId:t?.commandId??null,stateProjectionPolicy:t?.stateProjectionPolicy??null,projectionMode:i,trigger:r,targetEpicId:null,targetStoryId:null,includedStoryCount:Object.keys(e.stories).length,includedEpicCount:Object.keys(e.epics).length,omittedStoryCount:0,omittedEpicCount:0,reason:"full-state",reasonCodes:g(c)}}function y(r,e,t,i="full-compatible",c=["full-state"]){const o=Y(r,e,t,i,c);return b({...e,scope:o},e,o)}function Z(r){const[e]=r.trim().split(/\s+/,1);return e?/^[A-Z]?\d+(?:\.\d+)+$/i.test(e.replace(/^@/,""))||/(?:^|\/)[A-Z]?\d+(?:\.\d+)+\.story\.md$/i.test(e.replace(/^@/,"")):!1}function x(r){const e=r.match(/(?:^|[/@\s])([A-Z]?\d+(?:\.\d+)+)\.story\.md\b/i);return e?.[1]?e[1]:r.match(/(?:^|\s|@)([A-Z]?\d+(?:\.\d+)+)(?=$|\s)/i)?.[1]??null}function G(r){const e=r.trim(),t=e.search(/\s/);return t===-1?"":e.slice(t).trim()}function w(r){return G(r).split(/\s+/).map(e=>e.replace(/^@/,"").replace(/^['"]|['"]$/g,"")).filter(e=>e.length>0&&!e.startsWith("-"))}function fe(r){return w(r)[0]??null}function R(r,e){const i=r.replace(/^@/,"").replace(/^epic-/i,"").replace(/\.md$/i,""),c=[i,i.toUpperCase(),/^p\d+$/i.test(i)?`P${i.replace(/^p/i,"")}`:null,/^\d+$/.test(i)?`P${i}`:null].filter(o=>typeof o=="string"&&o.length>0);for(const o of c)if(e.epics[o])return o;return null}function U(r,e){const t=r.match(/(?:^|[/@\s])epic-(P?\d+)\.md\b/i);return t?.[1]?R(t[1],e):null}function k(r,e){const t=U(r,e);if(t)return t;for(const i of w(r)){if(/^[A-Z]?\d+(?:\.\d+)+$/i.test(i))continue;const c=R(i,e);if(c)return c}return null}function B(r,e){const t=k(r,e);if(t)return t;const i=e.yoloop,c=i?.state?.currentSession?.currentEpicId;if(typeof c=="string"&&e.epics[c])return c;const o=i?.lock?.currentEpicId??i?.lock?.epicId;return typeof o=="string"&&e.epics[o]?o:null}function I(r,e){if(typeof r.epic_id=="string"&&r.epic_id.length>0)return r.epic_id;const t=e.split(".").slice(0,-1).join(".");return t.length>0?t:null}function E(r){return typeof r=="string"&&["done","completed","merged","cancelled","canceled","abandoned"].includes(r.toLowerCase())}function S(r,e,t){if(t.has(r))return;const i=e.stories[r];if(!i)return;t.add(r);const c=i.depends_on;if(Array.isArray(c))for(const o of c)typeof o=="string"&&S(o,e,t)}function J(r,e,t){const i=new Set;S(r,t,i);const c=e.stories;if(Array.isArray(c))for(const s of c)typeof s=="string"&&t.stories[s]&&i.add(s);const o={};for(const s of i){const u=t.stories[s];u&&(o[s]=u)}return o}function C(r,e,t=[]){const i={};for(const c of t)e.epics[c]&&(i[c]=e.epics[c]);for(const[c,o]of Object.entries(r)){const s=I(o,c);s&&e.epics[s]&&(i[s]=e.epics[s])}return i}function A(r,e,t){if(t.has(r))return;const i=e.epics[r];if(!i)return;t.add(r);const c=i.depends_on;if(Array.isArray(c))for(const o of c)typeof o=="string"&&o.length>0&&A(o,e,t)}function K(r,e,t){const i=new Set;return A(r,t,i),C(e,t,[...i])}function W(r,e){const t=new Set,i=r.stories;if(Array.isArray(i))for(const o of i){if(typeof o!="string")continue;const s=e.stories[o];if(s){if(E(s.status)){t.add(o);continue}S(o,e,t)}}const c={};for(const o of t){const s=e.stories[o];s&&(c[o]=s)}return c}function V(r,e){const t=new Set,i=r.stories;if(Array.isArray(i))for(const o of i)typeof o=="string"&&S(o,e,t);const c={};for(const o of t){const s=e.stories[o];s&&(c[o]=s)}return c}function H(r){const e={};for(const[t,i]of Object.entries(r.epics))e[t]={id:a(i.id)??t,...a(i.status)?{status:a(i.status)}:{},...h.includes(i.lifecycle_classification)?{lifecycle_classification:i.lifecycle_classification}:{},...typeof i.total_stories=="number"&&Number.isFinite(i.total_stories)?{total_stories:i.total_stories}:{},...typeof i.completed_stories=="number"&&Number.isFinite(i.completed_stories)?{completed_stories:i.completed_stories}:{}};return e}function T(r){const e={};for(const t of Object.values(r)){const i=a(t.status,40)??"unknown";e[i]=(e[i]??0)+1}return e}function Q(r){const e=Object.fromEntries(h.map(t=>[t,0]));for(const t of Object.values(r)){const i=h.includes(t.lifecycle_classification)?t.lifecycle_classification:"active";e[i]=(e[i]??0)+1}return e}function q(r,e){if(!e)return!0;const t=r.epics[e];return t?!h.includes(t.lifecycle_classification)||t.lifecycle_classification==="active":!0}function M(r){for(const e of["last_updated","updated_at","completed_at","created_at","discovered_at"]){const t=r[e];if(typeof t!="string")continue;const i=Date.parse(t);if(Number.isFinite(i))return i}return 0}function X(r){return Object.entries(r.stories).map(([e,t])=>({id:e,story:t,timestamp:M(t)})).sort((e,t)=>t.timestamp-e.timestamp||e.id.localeCompare(t.id)).slice(0,12).map(({id:e,story:t})=>({id:e,...a(t.epic_id)?{epicId:a(t.epic_id)}:{},...a(t.status,40)?{status:a(t.status,40)}:{},...a(t.last_step??t.lastStep)?{lastStep:a(t.last_step??t.lastStep)}:{},...a(t.last_updated??t.updated_at??t.completed_at??t.created_at)?{lastUpdated:a(t.last_updated??t.updated_at??t.completed_at??t.created_at)}:{}}))}function ee(r){const e=r.current_session;if(!e)return;const t={activeEpicId:a(e.active_epic_id)??null,activeStoryId:a(e.active_story_id)??null,activeStepId:a(e.active_step_id)??null,sessionId:a(e.session_id)??null,startedAt:a(e.started_at)??null};return Object.values(t).some(i=>i!=null)?t:void 0}function te(r){const e=r.yoloop;if(!j(e))return;const t=j(e.state)?e.state:void 0,i=j(t?.currentSession)?t.currentSession:void 0,c=j(e.lock)?e.lock:void 0,o={...typeof e.active=="boolean"?{active:e.active}:{},currentEpicId:a(i?.currentEpicId??e.currentEpicId)??null,currentStoryId:a(i?.currentStoryId??e.currentStoryId)??null,sessionId:a(i?.sessionId??e.sessionId)??null,lockEpicId:a(c?.currentEpicId??c?.epicId)??null};return Object.keys(o).length>0?o:void 0}function re(r){const e=r.continuity;if(!j(e))return;const t=Array.isArray(e.reasonCodes)?e.reasonCodes.filter(i=>typeof i=="string"):void 0;return{present:!0,activeJobId:a(e.activeJobId??e.jobId)??null,activeGoalId:a(e.activeGoalId??e.goalId)??null,activeLoopId:a(e.activeLoopId??e.loopId)??null,...t&&t.length>0?{reasonCodes:g(t)}:{}}}function ie(r,e,t){const i=a(e?.activeStoryId),c=a(e?.activeEpicId),o=a(e?.activeStepId),s=i&&r.stories[i]?I(r.stories[i],i):null;if((i||c||o)&&q(r,c??s))return{epicId:c??null,storyId:i??null,stepId:o??null};const u=a(t?.currentStoryId),l=a(t?.currentEpicId??t?.lockEpicId);if((u||l)&&q(r,l))return{epicId:l??null,storyId:u??null,stepId:null};const d=Object.entries(r.stories).map(([p,f])=>({id:p,story:f,timestamp:M(f)})).filter(({id:p,story:f})=>!E(f.status)&&q(r,I(f,p))).sort((p,f)=>f.timestamp-p.timestamp||p.id.localeCompare(f.id))[0];return d?{epicId:I(d.story,d.id),storyId:d.id,stepId:a(d.story.last_step??d.story.lastStep)??null}:{epicId:null,storyId:null,stepId:null}}function ce(r,e){const t=T(r.stories),i=T(r.epics),c=Q(r.epics),o=Object.values(r.epics).filter(m=>(h.includes(m.lifecycle_classification)?m.lifecycle_classification:"active")==="active"&&!E(m.status)).length,s=ee(r),u=te(r),l=re(r),d=ie(r,s,u),p=X(r),f=g(e.reasonCodes,["state-summary-attached","state-summary-bounded",`projection-${e.projectionMode??e.kind}`,e.stateProjectionPolicy?`policy-${e.stateProjectionPolicy}`:"policy-unknown",p.length>=12?"recent-stories-capped":"recent-stories-bounded",d.storyId||d.epicId?"active-ref-derived":"active-ref-empty",u?"yoloop-session-present":"yoloop-session-absent",l?"continuity-session-present":"continuity-session-absent"]);return{schemaVersion:1,totals:{stories:Object.keys(r.stories).length,epics:Object.keys(r.epics).length,storyStatus:t,epicStatus:i,epicLifecycle:c,activeEpics:o,blockedStories:t.blocked??0},active:d,blockedCount:t.blocked??0,recentStories:p,...s?{currentSession:s}:{},...u?{currentYoloopSession:u}:{},...l?{currentContinuitySession:l}:{},projection:{commandId:e.commandId??null,stateProjectionPolicy:e.stateProjectionPolicy??null,projectionMode:e.projectionMode,scopeKind:e.kind,includedStoryCount:e.includedStoryCount,includedEpicCount:e.includedEpicCount??Object.keys(r.epics).length,omittedStoryCount:e.omittedStoryCount,omittedEpicCount:e.omittedEpicCount,reason:e.reason},reasonCodes:f,publicSafe:!0}}function b(r,e,t){return{...r,stateSummary:ce(e,t)}}function oe(r,e,t){const i={};for(const o of Object.keys(e.epics))i[o]={id:o};const c={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:"summary-only",trigger:r,targetEpicId:null,targetStoryId:null,includedStoryCount:0,includedEpicCount:Object.keys(i).length,omittedStoryCount:Object.keys(e.stories).length,omittedEpicCount:0,reason:"epic-summary",reasonCodes:["epic-summary","stories-omitted","epic-stubs-only"]};return b({...e,stories:{},epics:i,scope:c},e,c)}function v(r,e,t,i=["summary-only","stories-omitted"]){const c=H(e),o={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:"summary-only",trigger:r,targetEpicId:null,targetStoryId:null,includedStoryCount:0,includedEpicCount:Object.keys(c).length,omittedStoryCount:Object.keys(e.stories).length,omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(c).length),reason:"summary-only",reasonCodes:g(i)};return b({...e,stories:{},epics:c,scope:o},e,o)}function O(r,e,t,i,c,o){const s=e.stories[i];if(!s)return y(r,e,t,c,[...o,"target-story-missing-full-state"]);const u=I(s,i);if(!u)return y(r,e,t,c,[...o,"target-epic-unresolved-full-state"]);const l=e.epics[u];if(!l)return y(r,e,t,c,[...o,"target-epic-missing-full-state"]);const d=J(i,l,e),p=C(d,e);if(!d[i]||!p[u])return y(r,e,t,c,[...o,"target-projection-incomplete-full-state"]);const f={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:c,trigger:r,targetEpicId:u,targetStoryId:i,includedStoryCount:Object.keys(d).length,includedEpicCount:Object.keys(p).length,omittedStoryCount:Math.max(0,Object.keys(e.stories).length-Object.keys(d).length),omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(p).length),reason:"targeted-invocation",reasonCodes:g(o)};return b({...e,stories:d,epics:p,scope:f},e,f)}function z(r,e,t,i,c,o){const s=e.epics[i];if(!s)return y(r,e,t,c,[...o,"target-epic-missing-full-state"]);const u=V(s,e),l=C(u,e,[i]);if(!l[i])return y(r,e,t,c,[...o,"target-epic-projection-incomplete-full-state"]);const d={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:c,trigger:r,targetEpicId:i,targetStoryId:null,includedStoryCount:Object.keys(u).length,includedEpicCount:Object.keys(l).length,omittedStoryCount:Math.max(0,Object.keys(e.stories).length-Object.keys(u).length),omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(l).length),reason:"targeted-invocation",reasonCodes:g(o)};return b({...e,stories:u,epics:l,scope:d},e,d)}function ne(r,e,t){const i=B(r,e);if(!i)return y(r,e,t,"structural-required",["yoloop-target-missing-full-state"]);const c=e.epics[i];if(!c)return y(r,e,t,"structural-required",["yoloop-target-epic-missing-full-state"]);const o=W(c,e),s=K(i,o,e);if(!s[i])return y(r,e,t,"structural-required",["yoloop-projection-incomplete-full-state"]);const u={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:"structural-required",trigger:r,targetEpicId:i,targetStoryId:null,includedStoryCount:Object.keys(o).length,includedEpicCount:Object.keys(s).length,omittedStoryCount:Math.max(0,Object.keys(e.stories).length-Object.keys(o).length),omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(s).length),reason:"targeted-invocation",reasonCodes:["structural-required","yoloop-targeted"]};return b({...e,stories:o,epics:s,scope:u},e,u)}function se(r,e){const t={};for(const[i,c]of Object.entries(r.epics)){const o=Array.isArray(c.stories)?c.stories.filter(s=>typeof s=="string"&&e.has(s)):[];t[i]={id:a(c.id)??i,...a(c.status,40)?{status:a(c.status,40)}:{},...typeof c.total_stories=="number"&&Number.isFinite(c.total_stories)?{total_stories:c.total_stories}:{},...typeof c.completed_stories=="number"&&Number.isFinite(c.completed_stories)?{completed_stories:c.completed_stories}:{},...o.length>0?{stories:o}:{},...o.length>0&&Array.isArray(c.depends_on)?{depends_on:c.depends_on.filter(s=>typeof s=="string"&&s.length>0)}:{},...o.length>0&&(c.branch_mode==="epic"||c.branch_mode==="story")?{branch_mode:c.branch_mode}:{},...o.length>0&&typeof c.execution_branch=="string"?{execution_branch:c.execution_branch}:{},...o.length>0&&typeof c.origin_branch=="string"?{origin_branch:c.origin_branch}:{},...o.length>0&&(c.branch_lease===null||typeof c.branch_lease=="object")?{branch_lease:c.branch_lease}:{}}}return t}function ae(r){return r.stateSummary?.totals.stories??(r.scope?.includedStoryCount??Object.keys(r.stories).length)+(r.scope?.omittedStoryCount??0)}function ue(r){return r.stateSummary?.totals.epics??(r.scope?.includedEpicCount??Object.keys(r.epics).length)+(r.scope?.omittedEpicCount??0)}function de(r,e){if(r.stateSummary)return{...r.stateSummary,projection:{...r.stateSummary.projection,scopeKind:"projected",projectionMode:e.projectionMode,includedStoryCount:e.includedStoryCount,includedEpicCount:e.includedEpicCount??r.stateSummary.projection.includedEpicCount,omittedStoryCount:e.omittedStoryCount,omittedEpicCount:e.omittedEpicCount,reason:"body-size"},reasonCodes:g(r.stateSummary.reasonCodes,["payload-size-guardrail","state-summary-preserved","nonessential-state-degraded"])}}function ye(r){const e=r.scope,t=new Set;if(e?.projectionMode==="structural-required")for(const m of Object.keys(r.stories))t.add(m);else e?.targetStoryId&&S(e.targetStoryId,r,t);const i={};for(const m of t){const _=r.stories[m];_&&(i[m]=_)}const c=se(r,t),o=Object.keys(i).length,s=Object.keys(c).length,u=Math.max(0,ae(r)-o),l=Math.max(0,ue(r)-s),d=e?.projectionMode==="structural-required"?"structural-required":"summary-only",p={kind:"projected",commandId:e?.commandId??null,stateProjectionPolicy:e?.stateProjectionPolicy??null,projectionMode:d,...e?.trigger?{trigger:e.trigger}:{},targetEpicId:e?.targetEpicId??null,targetStoryId:e?.targetStoryId??null,includedStoryCount:o,includedEpicCount:s,omittedStoryCount:u,omittedEpicCount:l,reason:"body-size",reasonCodes:g(e?.reasonCodes,["payload-size-guardrail",t.size>0?"structural-targets-preserved":"stories-omitted","epics-stubbed","state-summary-preserved"])},f=de(r,p);return{...r,stories:i,epics:c,scope:p,...f?{stateSummary:f}:{}}}function me(r,e){const t=r.trim();try{const i=D(t);if(!i){if(Z(t)){const o=n("story-reference","story-targeted"),s=x(t);if(s)return O(t,e,o,s,"targeted-story",["story-reference-targeted"])}return y(t,e,null,"full-compatible",["unknown-command-full-state"])}if(i.stateProjectionPolicy==="epic-summary")return oe(t,e,i);if(i.stateProjectionPolicy==="yoloop-targeted")return ne(t,e,i);const c=x(t);if(i.stateProjectionPolicy==="story-targeted")return c?O(t,e,i,c,i.structuralRequired?"structural-required":"targeted-story",[i.structuralRequired?"structural-required":"targeted-story"]):i.structuralRequired?y(t,e,i,"structural-required",["structural-target-missing-full-state"]):v(t,e,i,["story-target-missing-summary-only"]);if(i.stateProjectionPolicy==="adaptive-targeted"){if(c&&e.stories[c])return O(t,e,i,c,"targeted-story",["adaptive-story-targeted"]);const o=k(t,e);return o?z(t,e,i,o,"targeted-epic",["adaptive-epic-targeted"]):v(t,e,i,["adaptive-summary-only","target-unresolved-summary-only"])}if(i.stateProjectionPolicy==="epic-targeted"){const o=k(t,e);return o?z(t,e,i,o,i.structuralRequired?"structural-required":"targeted-epic",[i.structuralRequired?"structural-required":"targeted-epic"]):i.structuralRequired?y(t,e,i,"structural-required",["structural-epic-target-missing-full-state"]):v(t,e,i,["epic-target-missing-summary-only"])}return i.stateProjectionPolicy==="continuity-scoped"?v(t,e,i,["continuity-scoped-summary-only"]):v(t,e,i,["policy-full-summary-only"])}catch{return y(t,e,null,"full-compatible",["projection-error-full-state"])}}export{ye as degradeStateSnapshotForPayloadLimit,me as projectStateSnapshotForInvoke};
1
+ import{analyzeDependencyDag as I,StructuralDagError as f}from"./structural-dag-projection.js";import{classifyInvocationShapeV2 as E}from"./invocation-shape.js";const P=12,$=16,_=["active","archived","rolled-back","synthetic","orphan"],n=(i,e,t={})=>({commandId:i,stateProjectionPolicy:e,...t}),A=Object.freeze({status:n("status","full"),init:n("init","epic-targeted"),"arch-plan":n("arch-plan","full"),"arch-prd":n("arch-prd","full"),"arch-architecture":n("arch-architecture","epic-targeted"),"arch-api-contracts":n("arch-api-contracts","epic-targeted"),"arch-api-integrations":n("arch-api-integrations","epic-targeted"),"arch-database":n("arch-database","epic-targeted"),"arch-security":n("arch-security","epic-targeted"),"arch-design-system":n("arch-design-system","epic-targeted"),"arch-ux-design":n("arch-ux-design","epic-targeted"),"arch-performance":n("arch-performance","epic-targeted"),"arch-testing":n("arch-testing","epic-targeted"),"arch-infrastructure":n("arch-infrastructure","epic-targeted"),"arch-review":n("arch-review","epic-targeted"),"arch-fitness-functions":n("arch-fitness-functions","epic-targeted"),"create-epic":n("create-epic","epic-summary"),"idea-diagnose":n("idea-diagnose","full"),"idea-research":n("idea-research","epic-targeted"),"generate-epic":n("generate-epic","epic-targeted"),exec:n("exec","story-targeted",{structuralRequired:!0}),yolo:n("yolo","story-targeted",{structuralRequired:!0}),"yolo-inline":n("yolo-inline","story-targeted",{structuralRequired:!0}),epic:n("epic","epic-targeted",{structuralRequired:!0}),"setup-branch":n("setup-branch","story-targeted",{structuralRequired:!0}),diagnose:n("diagnose","adaptive-targeted"),"diagnose-inline":n("diagnose-inline","full"),research:n("research","adaptive-targeted"),"research-inline":n("research-inline","full"),"write-spec":n("write-spec","story-targeted",{structuralRequired:!0}),"create-tasks":n("create-tasks","story-targeted",{structuralRequired:!0}),implement:n("implement","story-targeted",{structuralRequired:!0}),commit:n("commit","story-targeted",{structuralRequired:!0}),"commit-push":n("commit","story-targeted",{structuralRequired:!0}),sync:n("sync","story-targeted",{structuralRequired:!0}),"sync-main":n("sync","story-targeted",{structuralRequired:!0}),"create-pr":n("create-pr","story-targeted",{structuralRequired:!0}),review:n("review","story-targeted"),"review-pr":n("review","story-targeted"),merge:n("merge","story-targeted",{structuralRequired:!0}),"merge-pr":n("merge","story-targeted",{structuralRequired:!0}),"fix-blocked":n("fix-blocked","story-targeted"),"finalize-epic":n("finalize-epic","epic-targeted"),"resolve-conflicts":n("resolve-conflicts","story-targeted"),"update-memory":n("update-memory","full"),"update-project-memory":n("update-memory","story-targeted",{structuralRequired:!0}),refactor:n("refactor","adaptive-targeted"),"refactor-suggest":n("refactor","story-targeted",{structuralRequired:!0}),cleanup:n("cleanup","full"),audit:n("audit","full"),"tech-debt":n("tech-debt","full"),menu:n("menu","full"),plans:n("plans","full"),billing:n("billing","full"),subscribe:n("subscribe","full"),"qa-scan":n("qa-scan","full"),yoloop:n("yoloop","yoloop-targeted",{structuralRequired:!0}),"migrate-state":n("migrate-state","full"),"migrate-project-id":n("migrate-project-id","full"),"policy-audit":n("policy-audit","full"),"mutation-test":n("mutation-test","full"),"sync-openapi":n("sync-openapi","full"),"generate-pacts":n("generate-pacts","full"),"verify-pacts":n("verify-pacts","full"),"property-test":n("property-test","full"),"property-tests":n("property-test","story-targeted",{structuralRequired:!0}),"chaos-plan":n("chaos-plan","full"),"ui-ux-review":n("ui-ux-review","adaptive-targeted"),"solyd-system":n("solyd-system","adaptive-targeted"),goal:n("goal","continuity-scoped"),loop:n("loop","continuity-scoped"),jobs:n("jobs","continuity-scoped"),runner:n("runner","continuity-scoped"),"goal-tick":n("goal-tick","continuity-scoped"),"loop-tick":n("loop-tick","continuity-scoped"),"validate-tests":n("validate-tests","story-targeted",{structuralRequired:!0}),"qa-gate":n("qa-gate","story-targeted",{structuralRequired:!0})}),Y=Object.freeze({st:"status",inicializar:"init",arquitetura:"arch-plan",architecture:"arch-plan",arch:"arch-plan",prd:"arch-prd","product-requirements":"arch-prd","arch-doc":"arch-architecture","tech-architecture":"arch-architecture","api-contracts":"arch-api-contracts","api-contract":"arch-api-contracts","api-integrations":"arch-api-integrations","api-int":"arch-api-integrations","database-schema":"arch-database","db-schema":"arch-database",db:"arch-database","cyber-security":"arch-security",security:"arch-security",sec:"arch-security","design-system":"arch-design-system",ds:"arch-design-system","atomic-design":"arch-design-system","ux-design":"arch-ux-design",ux:"arch-ux-design",wireframes:"arch-ux-design",wireframe:"arch-ux-design","user-flows":"arch-ux-design",performance:"arch-performance",perf:"arch-performance","capacity-planning":"arch-performance",capacity:"arch-performance","arch-perf":"arch-performance","performance-strategy":"arch-performance","testing-strategy":"arch-testing","test-plan":"arch-testing","test-strategy":"arch-testing","arch-test":"arch-testing",infrastructure:"arch-infrastructure",infra:"arch-infrastructure","deploy-plan":"arch-infrastructure",deployment:"arch-infrastructure","arch-infra":"arch-infrastructure","arch-deploy":"arch-infrastructure","review-consolidation":"arch-review",consolidation:"arch-review","architecture-review":"arch-review","arch-consolidation":"arch-review",fitness:"arch-fitness-functions","fitness-functions":"arch-fitness-functions",archfit:"arch-fitness-functions","arch-fit":"arch-fitness-functions","fit-funcs":"arch-fitness-functions","criar-epic":"create-epic",planejamento:"create-epic","idea-diag":"idea-diagnose","idea-pesq":"idea-research","gerar-epic":"generate-epic",executar:"exec",pipeline:"exec","parallel-epic":"epic",setup:"setup-branch",branch:"setup-branch",diag:"diagnose",diagnostico:"diagnose",c02:"diagnose",pesquisar:"research",pesq:"research","research-fix":"research",c03:"research",spec:"write-spec",especificacao:"write-spec",c04:"write-spec",tasks:"create-tasks",tarefas:"create-tasks",c05:"create-tasks",impl:"implement",implementar:"implement",c06:"implement",push:"commit",commit_push:"commit",cp:"commit",c07:"commit",sincronizar:"sync",c08:"sync",pr:"create-pr",c09:"create-pr",revisar:"review",c11:"review",mesclar:"merge",c12:"merge",fix:"fix-blocked",corrigir:"fix-blocked",finalizar:"finalize-epic",conflitos:"resolve-conflicts",memoria:"update-memory",refactoring:"refactor",refact:"refactor",refac:"refactor",rf:"refactor","cleanup-code":"refactor","code-cleanup":"refactor","code-quality":"refactor","improve-code":"refactor",modernize:"refactor",modernization:"refactor",legacy:"refactor","legacy-code":"refactor","debt-pay":"refactor","pay-debt":"refactor","debt-reduction":"refactor","smell-fix":"refactor","fix-smells":"refactor","code-smells":"refactor",strangler:"refactor","strangler-fig":"refactor",limpar:"cleanup",limpeza:"cleanup",auditar:"audit",auditoria:"audit",debt:"tech-debt",debts:"tech-debt","debt-list":"tech-debt","tech-debts":"tech-debt",td:"tech-debt",help:"menu",ajuda:"menu","?":"menu",commands:"menu",cmds:"menu",planos:"plans",pricing:"plans",bill:"billing",subscription:"billing",sub:"billing",upgrade:"subscribe",checkout:"subscribe",qa:"qa-scan","qa-test":"qa-scan","visual-qa":"qa-scan","e2e-scan":"qa-scan",troubleshoot:"qa-scan","debug-ui":"qa-scan",scan:"qa-scan",a11y:"qa-scan",accessibility:"qa-scan",wcag:"qa-scan","auto-yolo":"yoloop","epic-runner":"yoloop","story-runner":"yoloop","loop-yolo":"yoloop","auto-epic":"yoloop",migrate:"migrate-state","state-migrate":"migrate-state","schema-migrate":"migrate-state",policy:"policy-audit","audit-policy":"policy-audit","policy-history":"policy-audit",policies:"policy-audit",mutation:"mutation-test",stryker:"mutation-test","kill-mutants":"mutation-test","openapi-sync":"sync-openapi","api-sync":"sync-openapi","spec-sync":"sync-openapi","regen-openapi":"sync-openapi",pacts:"generate-pacts","gen-pacts":"generate-pacts","regen-pacts":"generate-pacts","create-pacts":"generate-pacts","verify-pact":"verify-pacts","pact-verify":"verify-pacts","check-pacts":"verify-pacts","pact-check":"verify-pacts",property:"property-test",pbt:"property-test",proptest:"property-test","invariant-test":"property-test",chaos:"chaos-plan",gameday:"chaos-plan","resilience-test":"chaos-plan","ux-review":"ui-ux-review","design-review":"ui-ux-review","visual-review":"ui-ux-review","product-polish":"ui-ux-review","security-system":"solyd-system","authorized-security":"solyd-system","sec-system":"solyd-system",goals:"goal","durable-goal":"goal","continuity-goal":"goal",loops:"loop","durable-loop":"loop","continuity-loop":"loop",job:"jobs","continuity-jobs":"jobs","neocortex-runner":"runner","continuity-runner":"runner"}),K=Object.freeze({1:"status",2:"init",3:"arch-plan",4:"arch-prd",5:"arch-architecture",6:"arch-api-contracts",7:"arch-api-integrations",8:"arch-database",9:"arch-security",10:"arch-design-system",11:"arch-ux-design",12:"arch-performance",13:"arch-testing",14:"arch-infrastructure",15:"arch-review",16:"arch-fitness-functions",17:"create-epic",18:"idea-diagnose",19:"idea-research",20:"generate-epic",21:"exec",22:"yolo",23:"epic",24:"setup-branch",25:"diagnose",26:"research",27:"write-spec",28:"create-tasks",29:"implement",30:"commit",31:"sync",32:"create-pr",33:"review",34:"merge",35:"fix-blocked",36:"finalize-epic",37:"resolve-conflicts",38:"update-memory",39:"refactor",40:"cleanup",41:"audit",42:"tech-debt",43:"menu",44:"plans",45:"billing",46:"subscribe",47:"qa-scan",48:"yoloop",49:"migrate-state",50:"policy-audit",51:"mutation-test",52:"sync-openapi",53:"generate-pacts",54:"verify-pacts",55:"property-test",56:"chaos-plan",57:"ui-ux-review",58:"solyd-system",59:"goal",60:"loop",61:"jobs",62:"runner"});function a(i,e=120){if(typeof i!="string")return;const t=i.trim();if(t)return t.replace(/[^a-z0-9_.:-]+/gi,"_").slice(0,e)}function C(i){return i!==null&&typeof i=="object"&&!Array.isArray(i)}function m(...i){const e=new Set,t=[];for(const r of i)for(const o of r??[]){const c=a(o,80);if(!(!c||e.has(c))&&(e.add(c),t.push(c),t.length>=$))return t}return t}function V(i){return i.trim().replace(/^@?\*/,"").replace(/^@/,"").toLowerCase()}function Z(i){return i.trim().split(/\s+/,1)[0]??""}function q(i){const e=Z(i);if(!e)return A.menu;const t=V(e),r=K[t]??Y[t]??t;return A[r]??null}function B(i,e,t,r="full-compatible",o=["full-state"]){return{kind:"full",commandId:t?.commandId??null,stateProjectionPolicy:t?.stateProjectionPolicy??null,projectionMode:r,trigger:i,targetEpicId:null,targetStoryId:null,includedStoryCount:Object.keys(e.stories).length,includedEpicCount:Object.keys(e.epics).length,omittedStoryCount:0,omittedEpicCount:0,reason:"full-state",reasonCodes:m(o)}}function Ee(i,e,t,r="full-compatible",o=["full-state"]){const c=B(i,e,t,r,o);return h({...e,scope:c},e,c)}function J(i){const[e]=i.trim().split(/\s+/,1);return e?/^[A-Z]?\d+(?:\.\d+)+$/i.test(e.replace(/^@/,""))||/(?:^|\/)[A-Z]?\d+(?:\.\d+)+\.story\.md$/i.test(e.replace(/^@/,"")):!1}function x(i){const e=i.match(/(?:^|[/@\s])([A-Z]?\d+(?:\.\d+)+)\.story\.md\b/i);return e?.[1]?e[1]:i.match(/(?:^|\s|@)([A-Z]?\d+(?:\.\d+)+)(?=$|\s)/i)?.[1]??null}function W(i){const e=i.trim(),t=e.search(/\s/);return t===-1?"":e.slice(t).trim()}function O(i){return W(i).split(/\s+/).map(e=>e.replace(/^@/,"").replace(/^['"]|['"]$/g,"")).filter(e=>e.length>0&&!e.startsWith("-"))}function Oe(i){return O(i)[0]??null}function N(i,e){const r=i.replace(/^@/,"").replace(/^epic-/i,"").replace(/\.md$/i,""),o=[r,r.toUpperCase(),/^p\d+$/i.test(r)?`P${r.replace(/^p/i,"")}`:null,/^\d+$/.test(r)?`P${r}`:null].filter(c=>typeof c=="string"&&c.length>0);for(const c of o)if(e.epics[c])return c;return null}function H(i,e){const t=i.match(/(?:^|[/@\s])epic-(P?\d+)\.md\b/i);return t?.[1]?N(t[1],e):null}function k(i,e){const t=H(i,e);if(t)return t;for(const r of O(i)){if(/^[A-Z]?\d+(?:\.\d+)+$/i.test(r))continue;const o=N(r,e);if(o)return o}return null}function Q(i,e){const t=k(i,e);if(t)return t;const r=e.yoloop,o=r?.state?.currentSession?.currentEpicId;if(typeof o=="string"&&e.epics[o])return o;const c=r?.lock?.currentEpicId??r?.lock?.epicId;return typeof c=="string"&&e.epics[c]?c:null}function X(i){const e=i.match(/(?:^|[/@\s])epic-(P?\d+)\.md\b/i)?.[1];if(e)return/^P/i.test(e)?e.toUpperCase():`P${e}`;for(const t of O(i)){if(/^P\d+$/i.test(t))return t.toUpperCase();if(/^\d+$/.test(t))return`P${t}`}return null}function b(i,e){if(typeof i.epic_id=="string"&&i.epic_id.length>0)return i.epic_id;const t=e.split(".").slice(0,-1).join(".");return t.length>0?t:null}function U(i){return typeof i=="string"&&["done","completed","merged","cancelled","canceled","abandoned"].includes(i.toLowerCase())}function v(i,e,t){if(t.has(i))return;const r=e.stories[i];if(!r)return;t.add(i);const o=r.depends_on;if(Array.isArray(o))for(const c of o)typeof c=="string"&&v(c,e,t)}function ee(i,e){const t=I(e.stories,[i]),r={};for(const o of t.orderedIds){const c=e.stories[o];c&&(r[o]=c)}return r}function M(i,e,t=[]){const r={};for(const o of t)e.epics[o]&&(r[o]=e.epics[o]);for(const[o,c]of Object.entries(i)){const s=b(c,o);s&&e.epics[s]&&(r[s]=e.epics[s])}return r}function te(i,e,t){if(t.has(i))return;const r=e.epics[i];if(!r)return;t.add(i);const o=r.depends_on;if(Array.isArray(o))for(const c of o)typeof c=="string"&&c.length>0&&te(c,e,t)}function re(i,e,t){const r=I(t.epics,[i]),o=new Set(r.orderedIds);for(const[s,d]of Object.entries(e)){const u=b(d,s);u&&t.epics[u]&&o.add(u)}const c={};for(const s of[...o].sort((d,u)=>d.localeCompare(u,"en"))){const d=t.epics[s];d&&(c[s]=s===i?d:L(s,d))}return c}function ie(i,e,t){const r=e.stories;if(!Array.isArray(r)||r.some(s=>typeof s!="string"||s.length===0))throw new f("STRUCTURAL_DEPENDENCY_MISSING",{nodes:0,edges:0,malformedStoryMemberships:1});const o=I(t.stories,r),c={};for(const s of o.orderedIds){const d=t.stories[s];d&&(c[s]=b(d,s)===i?d:D(s,d))}return c}function D(i,e){const t=Array.isArray(e.depends_on)?[...new Set(e.depends_on.filter(r=>typeof r=="string"&&r.length>0))].sort((r,o)=>r.localeCompare(o,"en")):[];return{id:a(e.id)??i,...a(e.epic_id)?{epic_id:a(e.epic_id)}:{},...a(e.status,40)?{status:a(e.status,40)}:{},depends_on:t}}function L(i,e){const t=Array.isArray(e.stories)?[...new Set(e.stories.filter(o=>typeof o=="string"&&o.length>0))].sort((o,c)=>o.localeCompare(c,"en")):[],r=Array.isArray(e.depends_on)?[...new Set(e.depends_on.filter(o=>typeof o=="string"&&o.length>0))].sort((o,c)=>o.localeCompare(c,"en")):[];return{id:a(e.id)??i,...a(e.status,40)?{status:a(e.status,40)}:{},...a(e.lifecycle_classification,40)?{lifecycle_classification:a(e.lifecycle_classification,40)}:{},stories:t,depends_on:r}}function oe(i,e,t){const r=I(e.stories),o=I(e.epics),c=Object.fromEntries(r.orderedIds.map(u=>[u,D(u,e.stories[u])])),s=Object.fromEntries(o.orderedIds.map(u=>[u,L(u,e.epics[u])])),d={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:"yoloop-discovery",trigger:i,targetEpicId:null,targetStoryId:null,includedStoryCount:r.orderedIds.length,includedEpicCount:o.orderedIds.length,omittedStoryCount:0,omittedEpicCount:0,reason:"targeted-invocation",reasonCodes:m(["structural-required","yoloop-discovery",`structural-edges-${r.edgeCount+o.edgeCount}`,"content-fields-omitted"])};return h({...e,stories:c,epics:s,scope:d},e,d)}function ce(i,e){const t=new Set,r=i.stories;if(Array.isArray(r))for(const c of r)typeof c=="string"&&v(c,e,t);const o={};for(const c of t){const s=e.stories[c];s&&(o[c]=s)}return o}function ne(i){const e={};for(const[t,r]of Object.entries(i.epics))e[t]={id:a(r.id)??t,...a(r.status)?{status:a(r.status)}:{},..._.includes(r.lifecycle_classification)?{lifecycle_classification:r.lifecycle_classification}:{},...typeof r.total_stories=="number"&&Number.isFinite(r.total_stories)?{total_stories:r.total_stories}:{},...typeof r.completed_stories=="number"&&Number.isFinite(r.completed_stories)?{completed_stories:r.completed_stories}:{}};return e}function F(i){const e={};for(const t of Object.values(i)){const r=a(t.status,40)??"unknown";e[r]=(e[r]??0)+1}return e}function se(i){const e=Object.fromEntries(_.map(t=>[t,0]));for(const t of Object.values(i)){const r=_.includes(t.lifecycle_classification)?t.lifecycle_classification:"active";e[r]=(e[r]??0)+1}return e}function T(i,e){if(!e)return!0;const t=i.epics[e];return t?!_.includes(t.lifecycle_classification)||t.lifecycle_classification==="active":!0}function z(i){for(const e of["last_updated","updated_at","completed_at","created_at","discovered_at"]){const t=i[e];if(typeof t!="string")continue;const r=Date.parse(t);if(Number.isFinite(r))return r}return 0}function ae(i){return Object.entries(i.stories).map(([e,t])=>({id:e,story:t,timestamp:z(t)})).sort((e,t)=>t.timestamp-e.timestamp||e.id.localeCompare(t.id)).slice(0,P).map(({id:e,story:t})=>({id:e,...a(t.epic_id)?{epicId:a(t.epic_id)}:{},...a(t.status,40)?{status:a(t.status,40)}:{},...a(t.last_step??t.lastStep)?{lastStep:a(t.last_step??t.lastStep)}:{},...a(t.last_updated??t.updated_at??t.completed_at??t.created_at)?{lastUpdated:a(t.last_updated??t.updated_at??t.completed_at??t.created_at)}:{}}))}function de(i){const e=i.current_session;if(!e)return;const t={activeEpicId:a(e.active_epic_id)??null,activeStoryId:a(e.active_story_id)??null,activeStepId:a(e.active_step_id)??null,sessionId:a(e.session_id)??null,startedAt:a(e.started_at)??null};return Object.values(t).some(r=>r!=null)?t:void 0}function ue(i){const e=i.yoloop;if(!C(e))return;const t=C(e.state)?e.state:void 0,r=C(t?.currentSession)?t.currentSession:void 0,o=C(e.lock)?e.lock:void 0,c={...typeof e.active=="boolean"?{active:e.active}:{},currentEpicId:a(r?.currentEpicId??e.currentEpicId)??null,currentStoryId:a(r?.currentStoryId??e.currentStoryId)??null,sessionId:a(r?.sessionId??e.sessionId)??null,lockEpicId:a(o?.currentEpicId??o?.epicId)??null};return Object.keys(c).length>0?c:void 0}function le(i){const e=i.continuity;if(!C(e))return;const t=Array.isArray(e.reasonCodes)?e.reasonCodes.filter(r=>typeof r=="string"):void 0;return{present:!0,activeJobId:a(e.activeJobId??e.jobId)??null,activeGoalId:a(e.activeGoalId??e.goalId)??null,activeLoopId:a(e.activeLoopId??e.loopId)??null,...t&&t.length>0?{reasonCodes:m(t)}:{}}}function pe(i,e,t){const r=a(e?.activeStoryId),o=a(e?.activeEpicId),c=a(e?.activeStepId),s=r&&i.stories[r]?b(i.stories[r],r):null;if((r||o||c)&&T(i,o??s))return{epicId:o??null,storyId:r??null,stepId:c??null};const d=a(t?.currentStoryId),u=a(t?.currentEpicId??t?.lockEpicId);if((d||u)&&T(i,u))return{epicId:u??null,storyId:d??null,stepId:null};const l=Object.entries(i.stories).map(([p,y])=>({id:p,story:y,timestamp:z(y)})).filter(({id:p,story:y})=>!U(y.status)&&T(i,b(y,p))).sort((p,y)=>y.timestamp-p.timestamp||p.id.localeCompare(y.id))[0];return l?{epicId:b(l.story,l.id),storyId:l.id,stepId:a(l.story.last_step??l.story.lastStep)??null}:{epicId:null,storyId:null,stepId:null}}function ye(i,e){const t=F(i.stories),r=F(i.epics),o=se(i.epics),c=Object.values(i.epics).filter(j=>(_.includes(j.lifecycle_classification)?j.lifecycle_classification:"active")==="active"&&!U(j.status)).length,s=de(i),d=ue(i),u=le(i),l=pe(i,s,d),p=ae(i),y=m(e.reasonCodes,["state-summary-attached","state-summary-bounded",`projection-${e.projectionMode??e.kind}`,e.stateProjectionPolicy?`policy-${e.stateProjectionPolicy}`:"policy-unknown",p.length>=P?"recent-stories-capped":"recent-stories-bounded",l.storyId||l.epicId?"active-ref-derived":"active-ref-empty",d?"yoloop-session-present":"yoloop-session-absent",u?"continuity-session-present":"continuity-session-absent"]);return{schemaVersion:1,totals:{stories:Object.keys(i.stories).length,epics:Object.keys(i.epics).length,storyStatus:t,epicStatus:r,epicLifecycle:o,activeEpics:c,blockedStories:t.blocked??0},active:l,blockedCount:t.blocked??0,recentStories:p,...s?{currentSession:s}:{},...d?{currentYoloopSession:d}:{},...u?{currentContinuitySession:u}:{},projection:{commandId:e.commandId??null,stateProjectionPolicy:e.stateProjectionPolicy??null,projectionMode:e.projectionMode,scopeKind:e.kind,includedStoryCount:e.includedStoryCount,includedEpicCount:e.includedEpicCount??Object.keys(i.epics).length,omittedStoryCount:e.omittedStoryCount,omittedEpicCount:e.omittedEpicCount,reason:e.reason},reasonCodes:y,publicSafe:!0}}function h(i,e,t){return{...i,stateSummary:ye(e,t)}}function fe(i,e,t){const r={};for(const c of Object.keys(e.epics))r[c]={id:c};const o={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:"summary-only",trigger:i,targetEpicId:null,targetStoryId:null,includedStoryCount:0,includedEpicCount:Object.keys(r).length,omittedStoryCount:Object.keys(e.stories).length,omittedEpicCount:0,reason:"epic-summary",reasonCodes:["epic-summary","stories-omitted","epic-stubs-only"]};return h({...e,stories:{},epics:r,scope:o},e,o)}function g(i,e,t,r=["summary-only","stories-omitted"],o="summary-only"){const c=ne(e),s={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:o,trigger:i,targetEpicId:null,targetStoryId:null,includedStoryCount:0,includedEpicCount:Object.keys(c).length,omittedStoryCount:Object.keys(e.stories).length,omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(c).length),reason:"summary-only",reasonCodes:m(r)};return h({...e,stories:{},epics:c,scope:s},e,s)}function w(i,e,t,r,o,c){const s=e.stories[r];if(!s)throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"story"});const d=b(s,r);if(!d)throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});if(!e.epics[d])throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});const l=ee(r,e),p=M(l,e);if(!l[r]||!p[d])throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(l).length,epics:Object.keys(p).length,targetKind:"story"});const y={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:o,trigger:i,targetEpicId:d,targetStoryId:r,includedStoryCount:Object.keys(l).length,includedEpicCount:Object.keys(p).length,omittedStoryCount:Math.max(0,Object.keys(e.stories).length-Object.keys(l).length),omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(p).length),reason:"targeted-invocation",reasonCodes:m(c)};return h({...e,stories:l,epics:p,scope:y},e,y)}function G(i,e,t,r,o,c){const s=e.epics[r];if(!s)throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});const d=ce(s,e),u=M(d,e,[r]);if(!u[r])throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(d).length,epics:Object.keys(u).length,targetKind:"epic"});const l={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:o,trigger:i,targetEpicId:r,targetStoryId:null,includedStoryCount:Object.keys(d).length,includedEpicCount:Object.keys(u).length,omittedStoryCount:Math.max(0,Object.keys(e.stories).length-Object.keys(d).length),omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(u).length),reason:"targeted-invocation",reasonCodes:m(c)};return h({...e,stories:d,epics:u,scope:l},e,l)}function me(i,e,t){const r=X(i),o=k(i,e);if(r&&!o)throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});const c=Q(i,e),s=E({commandId:t.commandId,explicitYoloopEpicId:o,sessionYoloopEpicId:o?null:c});if(s==="yoloop-discovery")return oe(i,e,t);if(!c||s!=="yoloop-target"&&s!=="yoloop-session")throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});const d=e.epics[c];if(!d)throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"});const u=ie(c,d,e),l=re(c,u,e);if(!l[c])throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(u).length,epics:Object.keys(l).length,targetKind:"epic"});const p=s,y={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:p,trigger:i,targetEpicId:c,targetStoryId:null,includedStoryCount:Object.keys(u).length,includedEpicCount:Object.keys(l).length,omittedStoryCount:Math.max(0,Object.keys(e.stories).length-Object.keys(u).length),omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(l).length),reason:"targeted-invocation",reasonCodes:["structural-required",p,"yoloop-targeted"]};return h({...e,stories:u,epics:l,scope:y},e,y)}function ge(i,e){const t={};for(const[r,o]of Object.entries(i.epics)){const c=Array.isArray(o.stories)?o.stories.filter(s=>typeof s=="string"&&e.has(s)):[];t[r]={id:a(o.id)??r,...a(o.status,40)?{status:a(o.status,40)}:{},...typeof o.total_stories=="number"&&Number.isFinite(o.total_stories)?{total_stories:o.total_stories}:{},...typeof o.completed_stories=="number"&&Number.isFinite(o.completed_stories)?{completed_stories:o.completed_stories}:{},...c.length>0?{stories:c}:{},...c.length>0&&Array.isArray(o.depends_on)?{depends_on:o.depends_on.filter(s=>typeof s=="string"&&s.length>0)}:{},...c.length>0&&(o.branch_mode==="epic"||o.branch_mode==="story")?{branch_mode:o.branch_mode}:{},...c.length>0&&typeof o.execution_branch=="string"?{execution_branch:o.execution_branch}:{},...c.length>0&&typeof o.origin_branch=="string"?{origin_branch:o.origin_branch}:{},...c.length>0&&(o.branch_lease===null||typeof o.branch_lease=="object")?{branch_lease:o.branch_lease}:{}}}return t}function be(i){return i.stateSummary?.totals.stories??(i.scope?.includedStoryCount??Object.keys(i.stories).length)+(i.scope?.omittedStoryCount??0)}function he(i){return i.stateSummary?.totals.epics??(i.scope?.includedEpicCount??Object.keys(i.epics).length)+(i.scope?.omittedEpicCount??0)}function je(i,e){if(i.stateSummary)return{...i.stateSummary,projection:{...i.stateSummary.projection,scopeKind:"projected",projectionMode:e.projectionMode,includedStoryCount:e.includedStoryCount,includedEpicCount:e.includedEpicCount??i.stateSummary.projection.includedEpicCount,omittedStoryCount:e.omittedStoryCount,omittedEpicCount:e.omittedEpicCount,reason:"body-size"},reasonCodes:m(i.stateSummary.reasonCodes,["payload-size-guardrail","state-summary-preserved","nonessential-state-degraded"])}}function ve(i){const e=i.scope,t=new Set,r=e?.projectionMode==="structural-required"||e?.projectionMode==="yolo-story"||e?.projectionMode==="yoloop-target"||e?.projectionMode==="yoloop-session"||e?.projectionMode==="yoloop-discovery";if(r)for(const S of Object.keys(i.stories))t.add(S);else e?.targetStoryId&&v(e.targetStoryId,i,t);const o={};for(const S of t){const R=i.stories[S];R&&(o[S]=R)}const c=ge(i,t),s=Object.keys(o).length,d=Object.keys(c).length,u=Math.max(0,be(i)-s),l=Math.max(0,he(i)-d),p=r?e?.projectionMode??"structural-required":e?.projectionMode==="yolo-story"?"yolo-story":"summary-only",y={kind:"projected",commandId:e?.commandId??null,stateProjectionPolicy:e?.stateProjectionPolicy??null,projectionMode:p,...e?.trigger?{trigger:e.trigger}:{},targetEpicId:e?.targetEpicId??null,targetStoryId:e?.targetStoryId??null,includedStoryCount:s,includedEpicCount:d,omittedStoryCount:u,omittedEpicCount:l,reason:"body-size",reasonCodes:m(e?.reasonCodes,["payload-size-guardrail",t.size>0?"structural-targets-preserved":"stories-omitted","epics-stubbed","state-summary-preserved"])},j=je(i,y);return{...i,stories:o,epics:c,scope:y,...j?{stateSummary:j}:{}}}function Se(i,e){const t=i.trim(),r=q(t);try{if(!r){if(J(t)){const c=n("story-reference","story-targeted"),s=x(t);if(s)return w(t,e,c,s,"targeted-story",["story-reference-targeted"])}return g(t,e,n("unknown","adaptive-targeted"),["unknown-command-summary-only"])}if(r.stateProjectionPolicy==="epic-summary")return fe(t,e,r);if(r.stateProjectionPolicy==="yoloop-targeted")return me(t,e,r);const o=x(t);if(r.stateProjectionPolicy==="story-targeted"){if(o){const s=E({commandId:r.commandId,targetStoryId:o})==="yolo-story";return w(t,e,r,o,s?"yolo-story":r.structuralRequired?"structural-required":"targeted-story",[s?"yolo-story":r.structuralRequired?"structural-required":"targeted-story"])}if(r.commandId==="yolo"||r.commandId==="yolo-inline"){const c=E({commandId:r.commandId});return g(t,e,r,["yolo-inline","stories-omitted","historical-content-omitted"],c??"yolo-inline")}return r.structuralRequired?(()=>{throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"story"})})():g(t,e,r,["story-target-missing-summary-only"])}if(r.stateProjectionPolicy==="adaptive-targeted"){if(o&&e.stories[o])return w(t,e,r,o,"targeted-story",["adaptive-story-targeted"]);const c=k(t,e);return c?G(t,e,r,c,"targeted-epic",["adaptive-epic-targeted"]):g(t,e,r,["adaptive-summary-only","target-unresolved-summary-only"])}if(r.stateProjectionPolicy==="epic-targeted"){const c=k(t,e);return c?G(t,e,r,c,r.structuralRequired?"structural-required":"targeted-epic",[r.structuralRequired?"structural-required":"targeted-epic"]):r.structuralRequired?(()=>{throw new f("STRUCTURAL_TARGET_NOT_FOUND",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,targetKind:"epic"})})():g(t,e,r,["epic-target-missing-summary-only"])}return r.stateProjectionPolicy==="continuity-scoped"?g(t,e,r,["continuity-scoped-summary-only"]):g(t,e,r,["policy-full-summary-only"])}catch(o){if(o instanceof f)throw o;if(r?.structuralRequired)throw new f("STRUCTURAL_DEPENDENCY_MISSING",{stories:Object.keys(e.stories).length,epics:Object.keys(e.epics).length,projectionErrors:1});return g(t,e,r??n("unknown","adaptive-targeted"),["projection-error-summary-only"])}}const Ie=new Set(["yolo-story","yolo-inline","yoloop-target","yoloop-session","yoloop-discovery"]);function _e(i){let e=0;for(const t of[i.stories,i.epics])for(const r of Object.values(t))Array.isArray(r.depends_on)&&(e+=r.depends_on.filter(o=>typeof o=="string").length);return e}function Te(i,e){const t=q(i.trim());if(!t||!["yolo","yolo-inline","yoloop"].includes(t.commandId))return null;try{const r=Se(i,e),o=r.scope?.projectionMode;if(!o||!Ie.has(o))throw new f("STRUCTURAL_DEPENDENCY_MISSING",{stories:Object.keys(r.stories).length,epics:Object.keys(r.epics).length,projectionShapeErrors:1});return Object.freeze({ok:!0,version:2,shape:o,snapshot:r,included:{epics:r.scope?.includedEpicCount??Object.keys(r.epics).length,stories:r.scope?.includedStoryCount??Object.keys(r.stories).length,edges:_e(r)},omitted:{epics:r.scope?.omittedEpicCount??0,stories:r.scope?.omittedStoryCount??0},cycleCount:0})}catch(r){if(!(r instanceof f))throw r;return Object.freeze({ok:!1,code:r.code,publicDetails:r.publicDetails})}}export{ve as degradeStateSnapshotForPayloadLimit,Se as projectStateSnapshotForInvoke,Te as projectStateSnapshotResultV2ForInvoke};
@@ -0,0 +1,24 @@
1
+ export type StructuralDagErrorCode = 'STRUCTURAL_TARGET_NOT_FOUND' | 'STRUCTURAL_DEPENDENCY_MISSING' | 'STRUCTURAL_DEPENDENCY_CYCLE' | 'STRUCTURAL_CONTEXT_TOO_LARGE';
2
+ export declare class StructuralDagError extends Error {
3
+ readonly code: StructuralDagErrorCode;
4
+ readonly publicDetails: Readonly<Record<string, number | string>>;
5
+ constructor(code: StructuralDagErrorCode, publicDetails: Readonly<Record<string, number | string>>);
6
+ }
7
+ export interface DependencyDagAnalysis {
8
+ readonly orderedIds: readonly string[];
9
+ readonly edgeCount: number;
10
+ readonly structuralBytes: number;
11
+ readonly maxDepth: number;
12
+ }
13
+ export interface DependencyDagBudgets {
14
+ readonly maxNodes?: number;
15
+ readonly maxEdges?: number;
16
+ readonly maxDepth?: number;
17
+ readonly maxBytes?: number;
18
+ }
19
+ /**
20
+ * Deterministic three-colour traversal used by YOLO and yoloop projections.
21
+ * Public diagnostics expose counts only; node names can contain customer data
22
+ * and must not escape through errors or telemetry.
23
+ */
24
+ export declare function analyzeDependencyDag(nodes: Readonly<Record<string, Record<string, unknown>>>, roots?: readonly string[], budgets?: DependencyDagBudgets): DependencyDagAnalysis;
@@ -0,0 +1 @@
1
+ class c extends Error{code;publicDetails;constructor(t,o){super(t),this.code=t,this.publicDetails=o,this.name="StructuralDagError"}}const g=1e4,m=5e4,U=1024,h=192*1024;function w(s){if(s.depends_on===void 0)return[];if(!Array.isArray(s.depends_on)||s.depends_on.some(t=>typeof t!="string"||t.length===0))throw new c("STRUCTURAL_DEPENDENCY_MISSING",{nodes:0,edges:0,malformedDependencies:1});return[...new Set(s.depends_on)].sort((t,o)=>t.localeCompare(o,"en"))}function L(s,t,o={}){const a=o.maxNodes??g,E=o.maxEdges??m,D=o.maxDepth??U,f=o.maxBytes??h,T=new Map,p=[];let n=0,r=0,_=0,i=0;const l=(e,d)=>{const u=T.get(e)??0;if(u===2)return;if(u===1)throw new c("STRUCTURAL_DEPENDENCY_CYCLE",{nodes:r,edges:n,cycles:1});const A=s[e];if(!A)throw new c("STRUCTURAL_DEPENDENCY_MISSING",{nodes:r,edges:n,missingDependencies:1});if(d>D)throw new c("STRUCTURAL_CONTEXT_TOO_LARGE",{nodes:r,edges:n,maxDepth:D,observedDepth:d});T.set(e,1),r+=1,i=Math.max(i,d);const C=w(A);if(_+=Buffer.byteLength(JSON.stringify({id:e,depends_on:C}),"utf8"),r>a)throw new c("STRUCTURAL_CONTEXT_TOO_LARGE",{nodes:r,edges:n,maxNodes:a,maxEdges:E});if(_>f)throw new c("STRUCTURAL_CONTEXT_TOO_LARGE",{nodes:r,edges:n,structuralBytes:_,maxBytes:f});for(const S of C){if(n+=1,n>E)throw new c("STRUCTURAL_CONTEXT_TOO_LARGE",{nodes:r,edges:n,maxNodes:a,maxEdges:E});l(S,d+1)}T.set(e,2),p.push(e)},R=t===void 0?Object.keys(s).sort((e,d)=>e.localeCompare(d,"en")):[...new Set(t)].sort((e,d)=>e.localeCompare(d,"en"));for(const e of R)l(e,1);return Object.freeze({orderedIds:Object.freeze(p),edgeCount:n,structuralBytes:_,maxDepth:i})}export{c as StructuralDagError,L as analyzeDependencyDag};