@ornexus/neocortex 4.60.16 → 4.63.4

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 (69) hide show
  1. package/dist/sbom.cdx.json +29 -29
  2. package/docs/install/installer-diagnostics.md +33 -0
  3. package/install.ps1 +49 -229
  4. package/install.sh +30 -92
  5. package/package.json +5 -2
  6. package/packages/client/dist/adapters/platform-detector.d.ts +7 -6
  7. package/packages/client/dist/adapters/platform-detector.js +1 -1
  8. package/packages/client/dist/agent/refresh-stubs.js +1 -1
  9. package/packages/client/dist/cache/encrypted-cache.d.ts +10 -4
  10. package/packages/client/dist/cache/encrypted-cache.js +1 -1
  11. package/packages/client/dist/cache/in-memory-asset-cache.d.ts +5 -4
  12. package/packages/client/dist/cache/in-memory-asset-cache.js +1 -1
  13. package/packages/client/dist/cache/protected-pi-boundary.d.ts +6 -2
  14. package/packages/client/dist/cache/protected-pi-boundary.js +1 -1
  15. package/packages/client/dist/checkpoint/checkpoint-client-reader.d.ts +31 -30
  16. package/packages/client/dist/checkpoint/checkpoint-client-reader.js +2 -2
  17. package/packages/client/dist/checkpoint/shared-checkpoint-types.d.ts +2 -0
  18. package/packages/client/dist/cli.js +3 -3
  19. package/packages/client/dist/commands/invoke.d.ts +77 -1
  20. package/packages/client/dist/commands/invoke.js +44 -59
  21. package/packages/client/dist/config/resolver-selection.d.ts +12 -31
  22. package/packages/client/dist/config/resolver-selection.js +1 -1
  23. package/packages/client/dist/errors/error-messages.js +1 -1
  24. package/packages/client/dist/evidence/collector.d.ts +18 -0
  25. package/packages/client/dist/evidence/collector.js +1 -0
  26. package/packages/client/dist/evidence/index.d.ts +3 -0
  27. package/packages/client/dist/evidence/index.js +1 -0
  28. package/packages/client/dist/evidence/types.d.ts +59 -0
  29. package/packages/client/dist/evidence/types.js +0 -0
  30. package/packages/client/dist/graph-retrieval/pre-command-hook.d.ts +21 -0
  31. package/packages/client/dist/graph-retrieval/pre-command-hook.js +1 -1
  32. package/packages/client/dist/index.d.ts +10 -11
  33. package/packages/client/dist/index.js +1 -1
  34. package/packages/client/dist/license/license-client.d.ts +17 -0
  35. package/packages/client/dist/license/license-client.js +1 -1
  36. package/packages/client/dist/memory/project-memory-writer.js +13 -13
  37. package/packages/client/dist/memory/shared-project-memory-types.d.ts +1 -1
  38. package/packages/client/dist/memory/shared-project-memory-types.js +2 -2
  39. package/packages/client/dist/resolvers/asset-resolver.d.ts +8 -71
  40. package/packages/client/dist/resolvers/remote-resolver.d.ts +7 -69
  41. package/packages/client/dist/resolvers/remote-resolver.js +1 -1
  42. package/packages/client/dist/runner-cli.js +0 -0
  43. package/packages/client/dist/state/project-state-snapshot.js +1 -1
  44. package/packages/client/dist/telemetry/index.d.ts +1 -1
  45. package/packages/client/dist/telemetry/index.js +1 -1
  46. package/packages/client/dist/telemetry/offline-queue.d.ts +12 -2
  47. package/packages/client/dist/telemetry/offline-queue.js +1 -1
  48. package/packages/client/dist/types/index.d.ts +26 -8
  49. package/packages/client/dist/types/index.js +1 -1
  50. package/packages/client/dist/types/shared-public-execution-contract.d.ts +175 -0
  51. package/packages/client/dist/types/shared-public-execution-contract.js +2 -0
  52. package/targets-stubs/antigravity/gemini.md +1 -1
  53. package/targets-stubs/antigravity/skill/SKILL.md +1 -1
  54. package/targets-stubs/claude-code/neocortex-root.agent.yaml +1 -1
  55. package/targets-stubs/claude-code/neocortex-root.md +2 -2
  56. package/targets-stubs/claude-code/neocortex.agent.yaml +1 -1
  57. package/targets-stubs/claude-code/neocortex.md +2 -2
  58. package/targets-stubs/codex/AGENTS.md +16 -6
  59. package/targets-stubs/codex/README.md +24 -0
  60. package/targets-stubs/codex/install-codex.sh +70 -1
  61. package/targets-stubs/codex/neocortex-local.config.toml +17 -0
  62. package/targets-stubs/codex/neocortex.toml +10 -1
  63. package/targets-stubs/cursor/agent.md +2 -2
  64. package/targets-stubs/gemini-cli/agent.md +2 -2
  65. package/targets-stubs/opencode/neocortex-root.md +4 -4
  66. package/targets-stubs/opencode/neocortex.md +1 -1
  67. package/targets-stubs/vscode/neocortex.agent.md +2 -2
  68. package/packages/client/dist/resolvers/local-resolver.d.ts +0 -26
  69. package/packages/client/dist/resolvers/local-resolver.js +0 -8
@@ -1,20 +1,20 @@
1
- import{existsSync as y,lstatSync as C,mkdirSync as $,copyFileSync as v,readdirSync as W,readFileSync as k,readlinkSync as F,renameSync as z,rmSync as T,statSync as de,symlinkSync as N,unlinkSync as G,writeFileSync as j}from"node:fs";import{platform as A}from"node:os";import{dirname as x,join as p,relative as ue}from"node:path";import{CANONICAL_PROJECT_MEMORY_SOURCE as b,getProjectMemoryTarget as I,renderArchitectureReferenceTable as le}from"./shared-project-memory-types.js";function me(){return{readFile(e){try{return k(e,"utf8")}catch{return}},writeFileAtomic(e,t){$(x(e),{recursive:!0});const r=`${e}.tmp-${process.pid}-${Date.now()}`,n=y(e)?`${e}.bak-${Date.now()}`:void 0;try{return j(r,t,"utf8"),n!==void 0&&v(e,n),z(r,e),{backupPath:n}}catch(o){if(T(r,{force:!0}),n!==void 0&&y(n))try{v(n,e)}catch{}throw o}},join(...e){return p(...e)}}}function O(e){return`<!-- ${e.ownedBlockName}-START -->`}function _(e){return`<!-- ${e.ownedBlockName}-END -->`}function g(e){const t=new Set,r=[];for(const n of e){const o=n.trim().replace(/\s+/g," ");o.length===0||t.has(o.toLowerCase())||(t.add(o.toLowerCase()),r.push(o))}return r}function fe(e){const t=new Set,r=[];for(const n of e)t.has(n.path)||(t.add(n.path),r.push(n));return r}function pe(e){switch(e.templateKind){case"neocortex-md":return"# NEOCORTEX.md Project Memory";case"claude-md":return"# CLAUDE.md Project Memory";case"agents-md":return"# AGENTS.md Project Instructions";case"gemini-md":return"# GEMINI.md Project Memory";case"copilot-instructions":return"# GitHub Copilot Repository Instructions";case"cursor-rule":return`---
1
+ import{existsSync as y,lstatSync as E,mkdirSync as S,copyFileSync as v,readdirSync as W,readFileSync as k,readlinkSync as F,renameSync as z,rmSync as $,statSync as de,symlinkSync as M,unlinkSync as G,writeFileSync as A}from"node:fs";import{platform as j}from"node:os";import{dirname as T,join as p,relative as le}from"node:path";import{CANONICAL_PROJECT_MEMORY_SOURCE as b,getProjectMemoryTarget as I,renderArchitectureReferenceTable as ue}from"./shared-project-memory-types.js";function me(){return{readFile(e){try{return k(e,"utf8")}catch{return}},writeFileAtomic(e,t){S(T(e),{recursive:!0});const r=`${e}.tmp-${process.pid}-${Date.now()}`,n=y(e)?`${e}.bak-${Date.now()}`:void 0;try{return A(r,t,"utf8"),n!==void 0&&v(e,n),z(r,e),{backupPath:n}}catch(o){if($(r,{force:!0}),n!==void 0&&y(n))try{v(n,e)}catch{}throw o}},join(...e){return p(...e)}}}function O(e){return`<!-- ${e.ownedBlockName}-START -->`}function _(e){return`<!-- ${e.ownedBlockName}-END -->`}function g(e){const t=new Set,r=[];for(const n of e){const o=n.trim().replace(/\s+/g," ");o.length===0||t.has(o.toLowerCase())||(t.add(o.toLowerCase()),r.push(o))}return r}function fe(e){const t=new Set,r=[];for(const n of e)t.has(n.path)||(t.add(n.path),r.push(n));return r}function pe(e){switch(e.templateKind){case"neocortex-md":return"# NEOCORTEX.md Project Memory";case"claude-md":return"# CLAUDE.md Project Memory";case"agents-md":return"# AGENTS.md Project Instructions";case"gemini-md":return"# GEMINI.md Project Memory";case"copilot-instructions":return"# GitHub Copilot Repository Instructions";case"cursor-rule":return`---
2
2
  description: Neocortex project memory
3
3
  alwaysApply: true
4
4
  ---
5
5
 
6
- # Cursor Project Memory`}}const ye=["Keep always-loaded memory compact: laws, active context, and references only.","Preserve human-authored instructions outside this owned block.","Prefer repository SSoT docs over duplicating architecture details here."],be=["Consult `docs/architecture/` before changes that affect architecture, contracts, data, security, performance, UX, or infrastructure.","Reference architecture documents by repository path, such as `docs/architecture/architecture.md`, before changing related implementation.","Summarize decisions and trade-offs in NEOCORTEX.md; do not paste complete architecture documents into memory.","Update memory for durable cross-layer changes across skills/agents, frontend, backend, API, DB, schemas, envs, DevOps, cyber security, testing/QA, observability, product, docs, and platform contracts.","Prioritize compact summaries of durable decisions, public contracts, operational risks, debts, command behavior, and repository paths; skip transient logs, raw payloads, secrets, private prompts, long documents, and duplicated canonical sources.","Keep platform memory files symlink-backed or include-backed to NEOCORTEX.md when supported."],We=["skills-agents","frontend","backend","api","db","schemas","envs","devops","cyber-security","testing-qa","observability","product-business","docs-architecture","platform-memory","command-behavior","generic"],he=360,X={feature:"Features",rule:"Rules/Policies",flag:"Flags",route:"Routes",api:"APIs/Contracts","db-schema":"DB/Schema",architecture:"Architecture",debt:"Debts",decision:"Decisions",generic:"General Updates"},ge=/\b(private|proprietary|server[- ]only|system)\s+prompt\b|\b(api[-_ ]?key|license[-_ ]?key|password|authorization|bearer|token|secret)\s*[:=]|\b(ghp_[A-Za-z0-9_]+|sk-[A-Za-z0-9_-]+|xox[baprs]-[A-Za-z0-9-]+)\b|\b(customer|cliente)\s+(payload|record|email|phone)\b|\b(customer|cliente)\s+(data|dados)\s+(payload|record|email|phone)\b|\b(customer|cliente)\s+(data|dados)\s*[:=]|\braw\s+payload\b/i;function ke(e){const t=e.toLowerCase();return/\b(project memory|canonical memory|memory heuristic|neocortex\.md|\*update-memory)\b/.test(t)?"decision":/\b(feature|capability|funcionalidade|release)\b/.test(t)?"feature":/\b(rule|policy|guardrail|regra|lei|must|never)\b/.test(t)?"rule":/\b(flag|feature[- ]?flag|toggle|env var|environment variable)\b/.test(t)?"flag":/\b(api|contract|schema contract|graphql|rest|rpc|webhook)\b/.test(t)?"api":/\b(db|database|schema|migration|table|column|prisma|sql)\b/.test(t)?"db-schema":/\b(decision|decisão|decisao|accepted|rejected|trade[- ]?off)\b/.test(t)?"decision":/\b(route|endpoint route|url path|pathname)\b|\/(api|admin|portal|v\d+)\//.test(t)?"route":/\b(architecture|arquitetura|adr|topology|infra|boundary)\b/.test(t)?"architecture":/\b(debt|follow[- ]?up|todo|tech[- ]?debt|dívida|divida)\b/.test(t)?"debt":"generic"}function we(e){const t=e.toLowerCase();return/\b(neocortex\.md|project memory|canonical memory|memory wrapper|symlink|owned block|memory heuristic)\b/.test(t)?"platform-memory":/\b(command|cli|\*update-memory|\*create-epic|\*arch-plan|workflow behavior)\b/.test(t)?"command-behavior":/\b(skill|agent|subagent|orchestrator|opencode|codex|claude|gemini|cursor)\b/.test(t)?"skills-agents":/\b(frontend|ui|ux|react|component|design[- ]?system|css|accessibility|a11y)\b/.test(t)?"frontend":/\b(backend|server|service|worker|job|queue)\b/.test(t)?"backend":/\b(api|endpoint|rest|graphql|rpc|webhook|contract)\b/.test(t)?"api":/\b(db|database|table|column|migration|sql|prisma)\b/.test(t)?"db":/\b(schema|schemas|zod|json schema|protobuf|openapi)\b/.test(t)?"schemas":/\b(env|environment|\.env\.example|config|configuration|feature[- ]?flag)\b/.test(t)?"envs":/\b(devops|deploy|deployment|ci|cd|docker|container|kubernetes|infra|terraform|rollback)\b/.test(t)?"devops":/\b(security|cyber|auth|authorization|permission|compliance|vulnerability|secret|token redaction)\b/.test(t)?"cyber-security":/\b(test|testing|qa|e2e|unit|integration|snapshot|property[- ]?based|flaky)\b/.test(t)?"testing-qa":/\b(observability|metric|metrics|log|logging|trace|tracing|alert|monitoring|slo)\b/.test(t)?"observability":/\b(product|business|user journey|onboarding|pricing|tenant|customer-facing)\b/.test(t)?"product-business":/\b(docs|documentation|architecture|arquitetura|adr|runbook|decision record)\b/.test(t)?"docs-architecture":"generic"}function K(e){const t=e.trim().replace(/\s+/g," ");if(Buffer.byteLength(t,"utf8")<=he)return t;const r=t.match(/(?:^|\s)([\w.-]+(?:\/[\w.@-]+)+(?:\.[A-Za-z0-9]+)?)/)?.[1],n=t.slice(0,220).replace(/\s+\S*$/,"").trim();return r?`${n}\u2026 See ${r} for details.`:`${n}\u2026 Details omitted from always-loaded memory; keep source content in repository docs.`}function Ee(e){f(e);const t=ke(e),r=we(e);return{kind:t,layer:r,sectionTitle:X[t],summary:K(e),reasonCode:`memory_update_${t.replace("-","_")}`}}function H(e){const t=new Set,r=[];for(const n of e){const o=Ee(n),i=`${o.kind}:${o.summary.toLowerCase()}`;t.has(i)||(t.add(i),r.push(o))}return r}function f(e){if(ge.test(e))throw new Error("Project memory input violates IP boundary guardrails.")}function Y(e,t){const r=(e??"").split(`
6
+ # Cursor Project Memory`}}const ye=["Keep always-loaded memory compact: laws, active context, and references only.","Preserve human-authored instructions outside this owned block.","Prefer repository SSoT docs over duplicating architecture details here."],be=["Consult `docs/architecture/` before changes that affect architecture, contracts, data, security, performance, UX, or infrastructure.","Reference architecture documents by repository path, such as `docs/architecture/architecture.md`, before changing related implementation.","Summarize decisions and trade-offs in NEOCORTEX.md; do not paste complete architecture documents into memory.","Update memory for durable cross-layer changes across skills/agents, frontend, backend, API, DB, schemas, envs, DevOps, cyber security, testing/QA, observability, product, docs, and platform contracts.","Prioritize compact summaries of durable decisions, public contracts, operational risks, debts, command behavior, and repository paths; skip transient logs, raw payloads, secrets, private prompts, long documents, and duplicated canonical sources.","Keep platform memory files symlink-backed or include-backed to NEOCORTEX.md when supported."],We=["skills-agents","frontend","backend","api","db","schemas","envs","devops","cyber-security","testing-qa","observability","product-business","docs-architecture","platform-memory","command-behavior","generic"],he=360,X={feature:"Features",rule:"Rules/Policies",flag:"Flags",route:"Routes",api:"APIs/Contracts","db-schema":"DB/Schema",architecture:"Architecture",debt:"Debts",decision:"Decisions",generic:"General Updates"},ge=/\b(private|proprietary|server[- ]only|system)\s+prompt\b|\b(api[-_ ]?key|license[-_ ]?key|password|authorization|bearer|token|secret)\s*[:=]|\b(ghp_[A-Za-z0-9_]+|sk-[A-Za-z0-9_-]+|xox[baprs]-[A-Za-z0-9-]+)\b|\b(customer|cliente)\s+(payload|record|email|phone)\b|\b(customer|cliente)\s+(data|dados)\s+(payload|record|email|phone)\b|\b(customer|cliente)\s+(data|dados)\s*[:=]|\braw\s+payload\b/i;function ke(e){const t=e.toLowerCase();return/\b(project memory|canonical memory|memory heuristic|neocortex\.md|\*update-memory)\b/.test(t)?"decision":/\b(feature|capability|funcionalidade|release)\b/.test(t)?"feature":/\b(rule|policy|guardrail|regra|lei|must|never)\b/.test(t)?"rule":/\b(flag|feature[- ]?flag|toggle|env var|environment variable)\b/.test(t)?"flag":/\b(api|contract|schema contract|graphql|rest|rpc|webhook)\b/.test(t)?"api":/\b(db|database|schema|migration|table|column|prisma|sql)\b/.test(t)?"db-schema":/\b(decision|decisão|decisao|accepted|rejected|trade[- ]?off)\b/.test(t)?"decision":/\b(route|endpoint route|url path|pathname)\b|\/(api|admin|portal|v\d+)\//.test(t)?"route":/\b(architecture|arquitetura|adr|topology|infra|boundary)\b/.test(t)?"architecture":/\b(debt|follow[- ]?up|todo|tech[- ]?debt|dívida|divida)\b/.test(t)?"debt":"generic"}function we(e){const t=e.toLowerCase();return/\b(neocortex\.md|project memory|canonical memory|memory wrapper|symlink|owned block|memory heuristic)\b/.test(t)?"platform-memory":/\b(command|cli|\*update-memory|\*create-epic|\*arch-plan|workflow behavior)\b/.test(t)?"command-behavior":/\b(skill|agent|subagent|orchestrator|opencode|codex|claude|gemini|cursor)\b/.test(t)?"skills-agents":/\b(frontend|ui|ux|react|component|design[- ]?system|css|accessibility|a11y)\b/.test(t)?"frontend":/\b(backend|server|service|worker|job|queue)\b/.test(t)?"backend":/\b(api|endpoint|rest|graphql|rpc|webhook|contract)\b/.test(t)?"api":/\b(db|database|table|column|migration|sql|prisma)\b/.test(t)?"db":/\b(schema|schemas|zod|json schema|protobuf|openapi)\b/.test(t)?"schemas":/\b(env|environment|\.env\.example|config|configuration|feature[- ]?flag)\b/.test(t)?"envs":/\b(devops|deploy|deployment|ci|cd|docker|container|kubernetes|infra|terraform|rollback)\b/.test(t)?"devops":/\b(security|cyber|auth|authorization|permission|compliance|vulnerability|secret|token redaction)\b/.test(t)?"cyber-security":/\b(test|testing|qa|e2e|unit|integration|snapshot|property[- ]?based|flaky)\b/.test(t)?"testing-qa":/\b(observability|metric|metrics|log|logging|trace|tracing|alert|monitoring|slo)\b/.test(t)?"observability":/\b(product|business|user journey|onboarding|pricing|tenant|customer-facing)\b/.test(t)?"product-business":/\b(docs|documentation|architecture|arquitetura|adr|runbook|decision record)\b/.test(t)?"docs-architecture":"generic"}function K(e){const t=e.trim().replace(/\s+/g," ");if(Buffer.byteLength(t,"utf8")<=he)return t;const r=t.match(/(?:^|\s)([\w.-]+(?:\/[\w.@-]+)+(?:\.[A-Za-z0-9]+)?)/)?.[1],n=t.slice(0,220).replace(/\s+\S*$/,"").trim();return r?`${n}\u2026 See ${r} for details.`:`${n}\u2026 Details omitted from always-loaded memory; keep source content in repository docs.`}function Ce(e){f(e);const t=ke(e),r=we(e);return{kind:t,layer:r,sectionTitle:X[t],summary:K(e),reasonCode:`memory_update_${t.replace("-","_")}`}}function H(e){const t=new Set,r=[];for(const n of e){const o=Ce(n),i=`${o.kind}:${o.summary.toLowerCase()}`;t.has(i)||(t.add(i),r.push(o))}return r}function f(e){if(ge.test(e))throw new Error("Project memory input violates IP boundary guardrails.")}function Y(e,t){const r=(e??"").split(`
7
7
  `),n=t.split(`
8
- `),o=[],i=Math.max(r.length,n.length);for(let d=0;d<i;d++){const a=r[d],u=n[d];if(a!==u&&(a!==void 0&&o.push(`- ${a}`),u!==void 0&&o.push(`+ ${u}`),o.length>=80)){o.push("\u2026 diff truncated; inspect repository diff for full context.");break}}const s=o.join(`
9
- `);return f(s),s}function L(e){f(e.path),f(e.title),f(e.purpose),f(e.suggestedUsage)}function Ce(e,t,r){e.forEach(f),t.forEach(L),r?.universalLaws?.forEach(f),r?.businessContext?.forEach(f),r?.activeContext?.forEach(f),r?.repositoryMap?.forEach(f),r?.environmentPractices?.forEach(f),r?.platformMemoryContract?.forEach(f),r?.maintenanceRules?.forEach(f),r?.heuristics?.forEach(f),r?.importantReferences?.forEach(L),r?.architectureReferences?.forEach(L)}function J(e){return[pe(e),"","This file contains compact, always-loaded project memory. Keep detailed architecture in referenced docs.",""].join(`
10
- `)}function Z(e,t,r,n){Ce(t,r,n);const o=g([...ye,...n?.universalLaws??[]]),i=g([...n?.activeContext??[],...t.map(K)]),s=H(t),d=g(n?.businessContext??["Product/business context was not explicitly documented during bootstrap; treat conclusions as repository-inferred until a human updates this section."]),a=g(n?.repositoryMap??["Source, tests, package/build files, docs, CI, and runtime manifests are the permitted bootstrap sources for repository orientation."]),u=g(n?.environmentPractices??["Use `.env.example` for configuration shape only; do not read real environment files or credential-bearing files into always-loaded memory."]),c=g(n?.platformMemoryContract??["Semantic platform memory file must resolve to NEOCORTEX.md through a symlink; do not replace it with an unrelated wrapper or copied frontmatter.","Platform wrapper/frontmatter must be preserved via split/include/managed block while the semantic memory payload remains symlink-backed by NEOCORTEX.md."]),l=g(n?.maintenanceRules??["Keep NEOCORTEX.md deterministic, compact, objective, and direct; store only summaries, indexes, and links to detailed docs.","Do not copy protected prompt bodies, proprietary wrappers, server-side internals, customer data, license keys, or long document bodies into always-loaded memory."]),h=fe([...n?.importantReferences??[],...n?.architectureReferences??[],...r]),R=g([...be,...n?.heuristics??[]]),w=o.map(m=>`- ${m}`),S=i.length>0?i.map(m=>`- ${m}`):["- No active project notes recorded."],ie=h.length>0?le(h):"No architecture references discovered.",ae=s.length>0?Object.entries(X).flatMap(([m,ce])=>{const U=s.filter(E=>E.kind===m);return U.length>0?[`### ${ce}`,...U.map(E=>`- [${E.reasonCode}] ${E.summary} (layer: ${E.layer})`)]:[]}):["- No durable change feedback recorded."];return[O(e),"## Universal Project Laws",...w,"","## Business/Product Context",...d.map(m=>`- ${m}`),"","## Active Context",...S,"","## Durable Change Feedback",...ae,"","## Architecture References",ie,"","## Repository Map",...a.map(m=>`- ${m}`),"","## Environment/Container/Production/Security/Dev Practices",...u.map(m=>`- ${m}`),"","## Platform Memory Contract",...c.map(m=>`- ${m}`),`- NEOCORTEX.md is the canonical project memory source for every platform target; run \`${e.bidirectionalReference.feedbackTrigger}\` when durable context discovered in a platform wrapper should be fed back into canonical memory.`,"","## Maintenance Rules",...l.map(m=>`- ${m}`),"","## Architecture Heuristics",...R.map(m=>`- ${m}`),_(e)].join(`
11
- `)}const Q=["docs/architecture","docs/arquitetura-software"],Pe=["README.md","readme.md","architecture.md","docs/architecture.md"],Re=["package.json","pnpm-lock.yaml","package-lock.json","yarn.lock","tsconfig.json","vite.config.ts","turbo.json"],Se=["Dockerfile","docker-compose.yml","compose.yml",".env.example","fly.toml"],$e=["AGENTS.md","CLAUDE.md","GEMINI.md",".opencode/AGENTS.md",".cursor/rules/neocortex.mdc"];function V(e,t,r=24e3){const n=p(e,t);try{if(!y(n)||C(n).isDirectory())return;const o=k(n,"utf8");return o.length<=r?o:o.slice(0,r)}catch{return}}function D(e,t){$(x(e),{recursive:!0});const r=`${e}.tmp-${process.pid}-${Date.now()}`,n=y(e)?`${e}.bak-${Date.now()}`:void 0;try{return j(r,t,"utf8"),n!==void 0&&v(e,n),z(r,e),n}catch(o){if(T(r,{force:!0}),n!==void 0&&y(n))try{v(n,e)}catch{}throw o}}function q(e){return Array.from(new Set(H(e).map(t=>t.reasonCode)))}function P(e,t){try{return y(p(e,t))}catch{return!1}}function ve(e,t){try{return W(p(e,t),{withFileTypes:!0}).filter(r=>!r.name.startsWith(".")&&!r.name.toLowerCase().includes("secret")).sort((r,n)=>r.name.localeCompare(n.name)).slice(0,8).map(r=>`${t}/${r.name}${r.isDirectory()?"/":""}`)}catch{return[]}}function ee(e,t,r=16){try{const n=W(p(e,t),{withFileTypes:!0}).filter(i=>!i.name.startsWith(".")&&!i.name.startsWith("_")).sort((i,s)=>i.name.localeCompare(s.name)),o=[];for(const i of n){const s=`${t}/${i.name}`;if(i.isDirectory()?o.push(...ee(e,s,r-o.length)):/\.(md|markdown)$/i.test(i.name)&&o.push(s),o.length>=r)break}return o}catch{return[]}}function Te(e,t){const r=t.match(/^#\s+(.+?)\s*$/m)?.[1]?.trim();return r?r.replace(/[`*_#]/g,""):e.split("/").pop()?.replace(/\.(md|markdown)$/i,"").replace(/[-_]+/g," ")??e}function xe(e,t){const r=/\b(stale|deprecated|outdated|incerto|uncertain)\b/i.test(`${e}
12
- ${t.slice(0,2e3)}`),n=t.replace(/^---[\s\S]*?---\s*/,"").split(/\n{2,}/).map(i=>i.replace(/^#+\s+.+$/gm,"").replace(/[`*_>#]/g,"").replace(/\s+/g," ").trim()).find(i=>i.length>0&&!i.startsWith("|"));return`${r?"[stale/uncertain evidence] ":""}${(n??"Architecture reference for this project.").slice(0,180)}`}function Oe(e){const t=e.toLowerCase();return/deploy|infra|docker|production|runbook/.test(t)?"Use before changing deployment, runtime, containers, or production operations.":/security|auth|compliance/.test(t)?"Use before changing auth, compliance, or security-sensitive behavior.":/api|contract|state|schema/.test(t)?"Use before changing contracts, APIs, schemas, or persisted state.":"Use before implementation in this area; verify freshness when marked stale or uncertain."}function te(e){const t=Re.filter(c=>P(e,c)),r=Se.filter(c=>P(e,c)),n=$e.filter(c=>P(e,c)),o=["packages","src","apps","tests","__tests__"].filter(c=>P(e,c)),s=[...Q.flatMap(c=>ee(e,c)),...Pe.filter(c=>P(e,c))].slice(0,24).flatMap(c=>{const l=V(e,c,48e3);return l?[{path:c,title:Te(c,l),purpose:xe(c,l),suggestedUsage:Oe(c),source:Q.some(h=>c.startsWith(`${h}/`))?"architecture-root":"fallback-file"}]:[]}),d=V(e,"package.json"),a=d?.match(/"name"\s*:\s*"([^"]+)"/)?.[1],u=[...d?.matchAll(/"(test|build|lint|typecheck|dev)"\s*:/g)??[]].map(c=>c[1]);return{universalLaws:["Bootstrap canonical memory before creating or repairing platform memory wrappers when NEOCORTEX.md is absent.","Use only permitted repository sources for bootstrap: package/build files, architecture docs, README/deploy docs, .env.example, runtime manifests, CI, source/test layout, and platform memory wrappers."],businessContext:[a?`Repository package name: ${a}.`:"Repository product name was not declared in package metadata.","Business/product conclusions are bootstrap-inferred and must be refined from canonical docs or human input."],activeContext:[`Bootstrap scanned ${t.length} package/build files, ${s.length} architecture/readme docs, ${r.length} runtime/config templates, and ${n.length} platform memory wrappers.`,u.length>0?`Detected quality scripts: ${u.sort().join(", ")}.`:"No standard quality scripts were detected in package metadata."],repositoryMap:[t.length>0?`Package/build files: ${t.join(", ")}.`:"No package/build files detected in permitted bootstrap set.",o.length>0?`Source/test roots: ${o.flatMap(c=>ve(e,c)).slice(0,16).join(", ")}.`:"Source/test roots were not detected in standard locations.",n.length>0?`Platform memory/wrappers: ${n.join(", ")}.`:"No platform memory wrappers detected before bootstrap."],environmentPractices:[r.length>0?`Runtime/config templates: ${r.join(", ")}.`:"No Docker/compose/.env.example/runtime manifest detected in permitted bootstrap set.","Read `.env.example` only for configuration shape; never ingest real .env files, credentials, customer data, or license keys into memory.","Run repository quality scripts before commit and keep CI/deploy evidence referenced by path or URL rather than copied verbatim."],platformMemoryContract:["Semantic platform memory file must resolve to NEOCORTEX.md through a symlink; do not replace it with an unrelated wrapper or copied frontmatter.","Preserve wrappers/frontmatter via split/include/managed block while the semantic memory payload remains symlink-backed by NEOCORTEX.md."],maintenanceRules:["Generated memory must be deterministic, objective, direct, compact, and inside the target always-loaded context budget.","Cite long architecture docs by path with usage guidance; mark stale or uncertain docs when repository evidence indicates that status.","Do not copy protected prompt bodies, proprietary wrappers, server internals, secrets, customer data, license keys, or complete long documents."],architectureReferences:s,heuristics:["Before processing a story, consult the cited Architecture References whose path or suggested usage intersects the change.","When a referenced doc is marked stale/uncertain, validate against current package/runtime/source evidence before relying on it."]}}function B(e,t,r){const n=O(t),o=_(t),i=e.indexOf(n),s=e.indexOf(o);if(i>=0&&s>=i){const a=s+o.length;return`${e.slice(0,i)}${r}${e.slice(a)}`}const d=e.endsWith(`
8
+ `),o=[],i=Math.max(r.length,n.length);for(let d=0;d<i;d++){const a=r[d],l=n[d];if(a!==l&&(a!==void 0&&o.push(`- ${a}`),l!==void 0&&o.push(`+ ${l}`),o.length>=80)){o.push("\u2026 diff truncated; inspect repository diff for full context.");break}}const s=o.join(`
9
+ `);return f(s),s}function L(e){f(e.path),f(e.title),f(e.purpose),f(e.suggestedUsage)}function Ee(e,t,r){e.forEach(f),t.forEach(L),r?.universalLaws?.forEach(f),r?.businessContext?.forEach(f),r?.activeContext?.forEach(f),r?.repositoryMap?.forEach(f),r?.environmentPractices?.forEach(f),r?.platformMemoryContract?.forEach(f),r?.maintenanceRules?.forEach(f),r?.heuristics?.forEach(f),r?.importantReferences?.forEach(L),r?.architectureReferences?.forEach(L)}function J(e){return[pe(e),"","This file contains compact, always-loaded project memory. Keep detailed architecture in referenced docs.",""].join(`
10
+ `)}function Z(e,t,r,n){Ee(t,r,n);const o=g([...ye,...n?.universalLaws??[]]),i=g([...n?.activeContext??[],...t.map(K)]),s=H(t),d=g(n?.businessContext??["Product/business context was not explicitly documented during bootstrap; treat conclusions as repository-inferred until a human updates this section."]),a=g(n?.repositoryMap??["Source, tests, package/build files, docs, CI, and runtime manifests are the permitted bootstrap sources for repository orientation."]),l=g(n?.environmentPractices??["Use `.env.example` for configuration shape only; do not read real environment files or credential-bearing files into always-loaded memory."]),c=g(n?.platformMemoryContract??["Semantic platform memory file must resolve to NEOCORTEX.md through a symlink; do not replace it with an unrelated wrapper or copied frontmatter.","Platform wrapper/frontmatter must be preserved via split/include/managed block while the semantic memory payload remains symlink-backed by NEOCORTEX.md.","Codex Neocortex commands must run from a trusted local Codex profile/session with access to local activation state; if sandboxing blocks auth, retry with the explicit local profile or Full Access/trusted-local mode instead of copying activation material into prompts or files."]),u=g(n?.maintenanceRules??["Keep NEOCORTEX.md deterministic, compact, objective, and direct; store only summaries, indexes, and links to detailed docs.","Do not copy protected prompt bodies, proprietary wrappers, server-side internals, customer data, license keys, or long document bodies into always-loaded memory."]),h=fe([...n?.importantReferences??[],...n?.architectureReferences??[],...r]),R=g([...be,...n?.heuristics??[]]),w=o.map(m=>`- ${m}`),P=i.length>0?i.map(m=>`- ${m}`):["- No active project notes recorded."],ie=h.length>0?ue(h):"No architecture references discovered.",ae=s.length>0?Object.entries(X).flatMap(([m,ce])=>{const U=s.filter(C=>C.kind===m);return U.length>0?[`### ${ce}`,...U.map(C=>`- [${C.reasonCode}] ${C.summary} (layer: ${C.layer})`)]:[]}):["- No durable change feedback recorded."];return[O(e),"## Universal Project Laws",...w,"","## Business/Product Context",...d.map(m=>`- ${m}`),"","## Active Context",...P,"","## Durable Change Feedback",...ae,"","## Architecture References",ie,"","## Repository Map",...a.map(m=>`- ${m}`),"","## Environment/Container/Production/Security/Dev Practices",...l.map(m=>`- ${m}`),"","## Platform Memory Contract",...c.map(m=>`- ${m}`),`- NEOCORTEX.md is the canonical project memory source for every platform target; run \`${e.bidirectionalReference.feedbackTrigger}\` when durable context discovered in a platform wrapper should be fed back into canonical memory.`,"","## Maintenance Rules",...u.map(m=>`- ${m}`),"","## Architecture Heuristics",...R.map(m=>`- ${m}`),_(e)].join(`
11
+ `)}const Q=["docs/architecture","docs/arquitetura-software"],xe=["README.md","readme.md","architecture.md","docs/architecture.md"],Re=["package.json","pnpm-lock.yaml","package-lock.json","yarn.lock","tsconfig.json","vite.config.ts","turbo.json"],Pe=["Dockerfile","docker-compose.yml","compose.yml",".env.example","fly.toml"],Se=["AGENTS.md","CLAUDE.md","GEMINI.md",".opencode/AGENTS.md",".cursor/rules/neocortex.mdc"];function V(e,t,r=24e3){const n=p(e,t);try{if(!y(n)||E(n).isDirectory())return;const o=k(n,"utf8");return o.length<=r?o:o.slice(0,r)}catch{return}}function D(e,t){S(T(e),{recursive:!0});const r=`${e}.tmp-${process.pid}-${Date.now()}`,n=y(e)?`${e}.bak-${Date.now()}`:void 0;try{return A(r,t,"utf8"),n!==void 0&&v(e,n),z(r,e),n}catch(o){if($(r,{force:!0}),n!==void 0&&y(n))try{v(n,e)}catch{}throw o}}function q(e){return Array.from(new Set(H(e).map(t=>t.reasonCode)))}function x(e,t){try{return y(p(e,t))}catch{return!1}}function ve(e,t){try{return W(p(e,t),{withFileTypes:!0}).filter(r=>!r.name.startsWith(".")&&!r.name.toLowerCase().includes("secret")).sort((r,n)=>r.name.localeCompare(n.name)).slice(0,8).map(r=>`${t}/${r.name}${r.isDirectory()?"/":""}`)}catch{return[]}}function ee(e,t,r=16){try{const n=W(p(e,t),{withFileTypes:!0}).filter(i=>!i.name.startsWith(".")&&!i.name.startsWith("_")).sort((i,s)=>i.name.localeCompare(s.name)),o=[];for(const i of n){const s=`${t}/${i.name}`;if(i.isDirectory()?o.push(...ee(e,s,r-o.length)):/\.(md|markdown)$/i.test(i.name)&&o.push(s),o.length>=r)break}return o}catch{return[]}}function $e(e,t){const r=t.match(/^#\s+(.+?)\s*$/m)?.[1]?.trim();return r?r.replace(/[`*_#]/g,""):e.split("/").pop()?.replace(/\.(md|markdown)$/i,"").replace(/[-_]+/g," ")??e}function Te(e,t){const r=/\b(stale|deprecated|outdated|incerto|uncertain)\b/i.test(`${e}
12
+ ${t.slice(0,2e3)}`),n=t.replace(/^---[\s\S]*?---\s*/,"").split(/\n{2,}/).map(i=>i.replace(/^#+\s+.+$/gm,"").replace(/[`*_>#]/g,"").replace(/\s+/g," ").trim()).find(i=>i.length>0&&!i.startsWith("|"));return`${r?"[stale/uncertain evidence] ":""}${(n??"Architecture reference for this project.").slice(0,180)}`}function Oe(e){const t=e.toLowerCase();return/deploy|infra|docker|production|runbook/.test(t)?"Use before changing deployment, runtime, containers, or production operations.":/security|auth|compliance/.test(t)?"Use before changing auth, compliance, or security-sensitive behavior.":/api|contract|state|schema/.test(t)?"Use before changing contracts, APIs, schemas, or persisted state.":"Use before implementation in this area; verify freshness when marked stale or uncertain."}function te(e){const t=Re.filter(c=>x(e,c)),r=Pe.filter(c=>x(e,c)),n=Se.filter(c=>x(e,c)),o=["packages","src","apps","tests","__tests__"].filter(c=>x(e,c)),s=[...Q.flatMap(c=>ee(e,c)),...xe.filter(c=>x(e,c))].slice(0,24).flatMap(c=>{const u=V(e,c,48e3);return u?[{path:c,title:$e(c,u),purpose:Te(c,u),suggestedUsage:Oe(c),source:Q.some(h=>c.startsWith(`${h}/`))?"architecture-root":"fallback-file"}]:[]}),d=V(e,"package.json"),a=d?.match(/"name"\s*:\s*"([^"]+)"/)?.[1],l=[...d?.matchAll(/"(test|build|lint|typecheck|dev)"\s*:/g)??[]].map(c=>c[1]);return{universalLaws:["Bootstrap canonical memory before creating or repairing platform memory wrappers when NEOCORTEX.md is absent.","Use only permitted repository sources for bootstrap: package/build files, architecture docs, README/deploy docs, .env.example, runtime manifests, CI, source/test layout, and platform memory wrappers."],businessContext:[a?`Repository package name: ${a}.`:"Repository product name was not declared in package metadata.","Business/product conclusions are bootstrap-inferred and must be refined from canonical docs or human input."],activeContext:[`Bootstrap scanned ${t.length} package/build files, ${s.length} architecture/readme docs, ${r.length} runtime/config templates, and ${n.length} platform memory wrappers.`,l.length>0?`Detected quality scripts: ${l.sort().join(", ")}.`:"No standard quality scripts were detected in package metadata."],repositoryMap:[t.length>0?`Package/build files: ${t.join(", ")}.`:"No package/build files detected in permitted bootstrap set.",o.length>0?`Source/test roots: ${o.flatMap(c=>ve(e,c)).slice(0,16).join(", ")}.`:"Source/test roots were not detected in standard locations.",n.length>0?`Platform memory/wrappers: ${n.join(", ")}.`:"No platform memory wrappers detected before bootstrap."],environmentPractices:[r.length>0?`Runtime/config templates: ${r.join(", ")}.`:"No Docker/compose/.env.example/runtime manifest detected in permitted bootstrap set.","Read `.env.example` only for configuration shape; never ingest real .env files, credentials, customer data, or license keys into memory.","Run repository quality scripts before commit and keep CI/deploy evidence referenced by path or URL rather than copied verbatim."],platformMemoryContract:["Semantic platform memory file must resolve to NEOCORTEX.md through a symlink; do not replace it with an unrelated wrapper or copied frontmatter.","Preserve wrappers/frontmatter via split/include/managed block while the semantic memory payload remains symlink-backed by NEOCORTEX.md.","Codex Neocortex commands must run from a trusted local Codex profile/session with access to local activation state; if sandboxing blocks auth, retry with the explicit local profile or Full Access/trusted-local mode instead of copying activation material into prompts or files."],maintenanceRules:["Generated memory must be deterministic, objective, direct, compact, and inside the target always-loaded context budget.","Cite long architecture docs by path with usage guidance; mark stale or uncertain docs when repository evidence indicates that status.","Do not copy protected prompt bodies, proprietary wrappers, server internals, secrets, customer data, license keys, or complete long documents."],architectureReferences:s,heuristics:["Before processing a story, consult the cited Architecture References whose path or suggested usage intersects the change.","When a referenced doc is marked stale/uncertain, validate against current package/runtime/source evidence before relying on it."]}}function B(e,t,r){const n=O(t),o=_(t),i=e.indexOf(n),s=e.indexOf(o);if(i>=0&&s>=i){const a=s+o.length;return`${e.slice(0,i)}${r}${e.slice(a)}`}const d=e.endsWith(`
13
13
  `)?`
14
14
  `:`
15
15
 
16
16
  `;return`${e}${d}${r}
17
- `}function Me(e){return e.endsWith(".mdc")?`---
17
+ `}function Ne(e){return e.endsWith(".mdc")?`---
18
18
  description: Neocortex project memory
19
19
  alwaysApply: true
20
20
  ---
@@ -28,9 +28,9 @@ name: neocortex
28
28
  description: Neocortex project memory wrapper
29
29
  ---
30
30
 
31
- `:""}function re(e,t){const r=x(p(e,t)),n=p(e,b),o=ue(r,n);return o.length>0?o:b}function M(e,t){return!!(e.targetId==="canonical"||e.requiresWrapperPreservation||e.linkRequirement.requiresWrapperPreservation||e.linkRequirement.wrapperAllowed||t==="AGENTS.md"||t.includes("/agents/")||t.includes("/skills/")||t.endsWith(".toml")||t.endsWith(".mdc")||t.endsWith(".agent.md")||t.endsWith(".instructions.md"))}function Ne(e){return e.linkRequirement.symlinkBacked&&e.linkRequirement.semanticFileRequired}function ne(e,t,r,n){if(n!==void 0)return n;const o=Ne(t);if(!o)return{os:A(),supported:!1,permission:"unknown",filesystem:"unknown",targetPolicy:t.linkRequirement.policy,targetPolicyAllowsSymlink:o,requiresWrapperPreservation:M(t,r),reason:`target policy ${t.linkRequirement.policy} does not allow semantic symlink orchestration`};const i=p(e,".neocortex","tmp"),s=p(i,`symlink-capability-source-${process.pid}-${Date.now()}`),d=p(i,`symlink-capability-link-${process.pid}-${Date.now()}`);try{$(i,{recursive:!0}),j(s,"probe","utf8"),N(s,d);const a=C(d).isSymbolicLink()&&de(d).isFile();return{os:A(),supported:a,permission:a?"ok":"unknown",filesystem:a?"supports-symlink":"no-symlink-support",targetPolicy:t.linkRequirement.policy,targetPolicyAllowsSymlink:o,requiresWrapperPreservation:M(t,r),reason:a?void 0:"filesystem probe did not create a resolvable symbolic link"}}catch(a){const u=a instanceof Error?a.message:String(a),c=/EPERM|EACCES|operation not permitted|permission/i.test(u);return{os:A(),supported:!1,permission:c?"denied":"unknown",filesystem:"no-symlink-support",targetPolicy:t.linkRequirement.policy,targetPolicyAllowsSymlink:o,requiresWrapperPreservation:M(t,r),reason:u}}finally{T(d,{force:!0}),T(s,{force:!0})}}function je(e,t,r,n){const o=re(n,t),i=r??`${Me(t)}# ${e.platformName} Neocortex Memory Wrapper
31
+ `:""}function re(e,t){const r=T(p(e,t)),n=p(e,b),o=le(r,n);return o.length>0?o:b}function N(e,t){return!!(e.targetId==="canonical"||e.requiresWrapperPreservation||e.linkRequirement.requiresWrapperPreservation||e.linkRequirement.wrapperAllowed||t==="AGENTS.md"||t.includes("/agents/")||t.includes("/skills/")||t.endsWith(".toml")||t.endsWith(".mdc")||t.endsWith(".agent.md")||t.endsWith(".instructions.md"))}function Me(e){return e.linkRequirement.symlinkBacked&&e.linkRequirement.semanticFileRequired}function ne(e,t,r,n){if(n!==void 0)return n;const o=Me(t);if(!o)return{os:j(),supported:!1,permission:"unknown",filesystem:"unknown",targetPolicy:t.linkRequirement.policy,targetPolicyAllowsSymlink:o,requiresWrapperPreservation:N(t,r),reason:`target policy ${t.linkRequirement.policy} does not allow semantic symlink orchestration`};const i=p(e,".neocortex","tmp"),s=p(i,`symlink-capability-source-${process.pid}-${Date.now()}`),d=p(i,`symlink-capability-link-${process.pid}-${Date.now()}`);try{S(i,{recursive:!0}),A(s,"probe","utf8"),M(s,d);const a=E(d).isSymbolicLink()&&de(d).isFile();return{os:j(),supported:a,permission:a?"ok":"unknown",filesystem:a?"supports-symlink":"no-symlink-support",targetPolicy:t.linkRequirement.policy,targetPolicyAllowsSymlink:o,requiresWrapperPreservation:N(t,r),reason:a?void 0:"filesystem probe did not create a resolvable symbolic link"}}catch(a){const l=a instanceof Error?a.message:String(a),c=/EPERM|EACCES|operation not permitted|permission/i.test(l);return{os:j(),supported:!1,permission:c?"denied":"unknown",filesystem:"no-symlink-support",targetPolicy:t.linkRequirement.policy,targetPolicyAllowsSymlink:o,requiresWrapperPreservation:N(t,r),reason:l}}finally{$(d,{force:!0}),$(s,{force:!0})}}function Ae(e,t,r,n){const o=re(n,t),i=r??`${Ne(t)}# ${e.platformName} Neocortex Memory Wrapper
32
32
 
33
- `,s=[O(e),"## Canonical Project Memory Source","",`This platform wrapper preserves host-specific frontmatter/instructions while resolving project memory to \`${o}\`.`,"",`- Canonical source: \`${b}\``,`- Symlink-backed/source-of-truth file: \`${o}\``,`- Feedback loop: read \`${o}\` for shared context and run \`${e.bidirectionalReference.feedbackTrigger}\` when durable platform findings should update \`${b}\`.`,"- Human-authored content outside this managed block is preserved byte-for-byte.",_(e)].join(`
34
- `);return B(i,e,s)}function oe(e,t,r,n,o,i=!1){const s=p(e,t),a=`${["[NEOCORTEX COMPATIBILITY REMEDIATION]","Materialized project memory fallback because semantic symlink orchestration failed.","This is not product mode; repair host permissions/filesystem support and restore the symlink to NEOCORTEX.md.","WARNING: materialized fallback is remediation debt, not a silent mode; run *update-memory for durable context and repair this file back to canonical NEOCORTEX.md resolution.",`Fallback reason: ${o}`,""].join(`
35
- `)}${r}`,c=(y(s)?k(s,"utf8"):void 0)!==a;return c&&!i&&(y(s)&&C(s).isSymbolicLink()&&G(s),D(s,a)),{filePath:s,relativeFile:t,changed:c,content:a,mode:"compatibility-materialized-fallback",canonicalSource:b,symlinkCapability:n,fallbackReason:o,remediationDebt:`Repair ${t} so it is a symlink to ${b}; fallback is compatibility remediation only.`}}function Ae(e,t,r,n,o,i=!1){const s=p(e,t),d=re(e,t);$(x(s),{recursive:!0});const a=ne(e,r,t,o);if(!a.supported)return oe(e,t,n,a,a.reason??"symlink capability detection reported unsupported host",i);if(i){let c=!0;try{c=!(y(s)&&C(s).isSymbolicLink()&&F(s)===d)}catch{c=!0}return{filePath:s,relativeFile:t,changed:c,content:n,mode:"semantic-symlink",canonicalSource:b,symlinkCapability:a}}let u=!1;try{return y(s)?C(s).isSymbolicLink()&&F(s)===d?u=!1:(G(s),N(d,s),u=!0):(N(d,s),u=!0),{filePath:s,relativeFile:t,changed:u,content:k(s,"utf8"),mode:"semantic-symlink",canonicalSource:b,symlinkCapability:a}}catch(c){const l=c instanceof Error?c.message:String(c);return oe(e,t,n,{...a,supported:!1,permission:/EPERM|EACCES|operation not permitted|permission/i.test(l)?"denied":a.permission,filesystem:"no-symlink-support",reason:l},l,i)}}function Ie(e,t,r,n,o){const i=a=>a.split(`
36
- `).length<=e.budget.maxLines&&Buffer.byteLength(a,"utf8")<=e.budget.maxBytes;if(i(t))return t;const s=Z(e,r.slice(0,8),n.slice(0,12),o),d=B(t.includes(O(e))?t:J(e),e,s);return i(d)?d:d.slice(0,e.budget.maxBytes)}function se(e,t,r=[],n=[],o){const i=t??J(e),s=Z(e,r,n,o),d=B(i,e,s);return Ie(e,d,r,n,o)}function _e(e){const t=I(e.targetId),r=e.fs??me(),n=r.join(e.projectRoot,t.primaryFile);if(t.targetId!=="canonical"&&e.fs===void 0){const a=Le(e).files.find(u=>u.relativeFile===t.primaryFile);if(a===void 0)throw new Error(`Primary project memory file was not written for ${t.targetId}.`);return{filePath:a.filePath,changed:a.changed,content:a.content}}const o=r.readFile(n),i=e.bootstrapArchitecture??(e.fs===void 0&&t.targetId==="canonical"&&o===void 0?te(e.projectRoot):void 0),s=se(t,o,e.memoryNotes,e.architectureReferences,i);if(o===s)return{filePath:n,changed:!1,content:s};const d=e.dryRun?void 0:r.writeFileAtomic(n,s);return{filePath:n,changed:!0,content:s,safeDiff:Y(o,s),backupPath:d?.backupPath,reasonCodes:q(e.memoryNotes??[])}}function Fe(e){return _e({...e,targetId:"canonical"})}function Le(e){if(e.fs!==void 0)throw new Error("writeProjectMemoryTargetFiles requires the node filesystem to manage symlinks safely.");const t=I(e.targetId),r=I("canonical"),n=p(e.projectRoot,b),o=y(n)?k(n,"utf8"):void 0,i=e.bootstrapArchitecture??(o===void 0?te(e.projectRoot):void 0),s=se(r,o,e.memoryNotes,e.architectureReferences,i),d=!y(n)||k(n,"utf8")!==s;let a;if(d&&!e.dryRun&&(a=D(n,s)),t.targetId==="canonical")return{targetId:t.targetId,canonicalFilePath:n,changed:d,files:[{filePath:n,relativeFile:b,changed:d,content:s,mode:"canonical",canonicalSource:b,safeDiff:Y(o,s),backupPath:a,reasonCodes:q(e.memoryNotes??[])}]};const c=Array.from(new Set([t.primaryFile,...t.secondaryFiles])).map(l=>{if(!M(t,l))return Ae(e.projectRoot,l,t,s,e.symlinkCapability,e.dryRun);const h=p(e.projectRoot,l),R=y(h)?k(h,"utf8"):void 0,w=je(t,l,R,e.projectRoot),S=R!==w;return S&&!e.dryRun&&D(h,w),{filePath:h,relativeFile:l,changed:S,content:w,mode:"managed-wrapper",canonicalSource:b,symlinkCapability:ne(e.projectRoot,t,l,e.symlinkCapability),reasonCodes:q(e.memoryNotes??[])}});return{targetId:t.targetId,canonicalFilePath:n,files:c,changed:d||c.some(l=>l.changed)}}export{We as PROJECT_MEMORY_LAYER_CATEGORIES,te as bootstrapArchitectureMemory,se as buildProjectMemoryContent,Ee as classifyProjectMemoryUpdate,me as createNodeProjectMemoryFs,Y as createSafeProjectMemoryDiff,Fe as writeCanonicalProjectMemory,_e as writeProjectMemory,Le as writeProjectMemoryTargetFiles};
33
+ `,s=e.targetId==="codex"?["","## Codex Local Activation Access","","- Run Neocortex commands from a trusted local Codex profile/session with access to local activation state (normally `~/.neocortex`) and network.","- If Codex sandboxing blocks auth, retry with `codex --profile neocortex-local` or Codex App **Full Access** / trusted-local mode; never paste credentials, secrets, raw auth logs or activation material into prompts or project files."]:[],d=[O(e),"## Canonical Project Memory Source","",`This platform wrapper preserves host-specific frontmatter/instructions while resolving project memory to \`${o}\`.`,"",`- Canonical source: \`${b}\``,`- Symlink-backed/source-of-truth file: \`${o}\``,`- Feedback loop: read \`${o}\` for shared context and run \`${e.bidirectionalReference.feedbackTrigger}\` when durable platform findings should update \`${b}\`.`,"- Human-authored content outside this managed block is preserved byte-for-byte.",...s,_(e)].join(`
34
+ `);return B(i,e,d)}function oe(e,t,r,n,o,i=!1){const s=p(e,t),a=`${["[NEOCORTEX COMPATIBILITY REMEDIATION]","Materialized project memory fallback because semantic symlink orchestration failed.","This is not product mode; repair host permissions/filesystem support and restore the symlink to NEOCORTEX.md.","WARNING: materialized fallback is remediation debt, not a silent mode; run *update-memory for durable context and repair this file back to canonical NEOCORTEX.md resolution.",`Fallback reason: ${o}`,""].join(`
35
+ `)}${r}`,c=(y(s)?k(s,"utf8"):void 0)!==a;return c&&!i&&(y(s)&&E(s).isSymbolicLink()&&G(s),D(s,a)),{filePath:s,relativeFile:t,changed:c,content:a,mode:"compatibility-materialized-fallback",canonicalSource:b,symlinkCapability:n,fallbackReason:o,remediationDebt:`Repair ${t} so it is a symlink to ${b}; fallback is compatibility remediation only.`}}function je(e,t,r,n,o,i=!1){const s=p(e,t),d=re(e,t);S(T(s),{recursive:!0});const a=ne(e,r,t,o);if(!a.supported)return oe(e,t,n,a,a.reason??"symlink capability detection reported unsupported host",i);if(i){let c=!0;try{c=!(y(s)&&E(s).isSymbolicLink()&&F(s)===d)}catch{c=!0}return{filePath:s,relativeFile:t,changed:c,content:n,mode:"semantic-symlink",canonicalSource:b,symlinkCapability:a}}let l=!1;try{return y(s)?E(s).isSymbolicLink()&&F(s)===d?l=!1:(G(s),M(d,s),l=!0):(M(d,s),l=!0),{filePath:s,relativeFile:t,changed:l,content:k(s,"utf8"),mode:"semantic-symlink",canonicalSource:b,symlinkCapability:a}}catch(c){const u=c instanceof Error?c.message:String(c);return oe(e,t,n,{...a,supported:!1,permission:/EPERM|EACCES|operation not permitted|permission/i.test(u)?"denied":a.permission,filesystem:"no-symlink-support",reason:u},u,i)}}function Ie(e,t,r,n,o){const i=a=>a.split(`
36
+ `).length<=e.budget.maxLines&&Buffer.byteLength(a,"utf8")<=e.budget.maxBytes;if(i(t))return t;const s=Z(e,r.slice(0,8),n.slice(0,12),o),d=B(t.includes(O(e))?t:J(e),e,s);return i(d)?d:d.slice(0,e.budget.maxBytes)}function se(e,t,r=[],n=[],o){const i=t??J(e),s=Z(e,r,n,o),d=B(i,e,s);return Ie(e,d,r,n,o)}function _e(e){const t=I(e.targetId),r=e.fs??me(),n=r.join(e.projectRoot,t.primaryFile);if(t.targetId!=="canonical"&&e.fs===void 0){const a=Le(e).files.find(l=>l.relativeFile===t.primaryFile);if(a===void 0)throw new Error(`Primary project memory file was not written for ${t.targetId}.`);return{filePath:a.filePath,changed:a.changed,content:a.content}}const o=r.readFile(n),i=e.bootstrapArchitecture??(e.fs===void 0&&t.targetId==="canonical"&&o===void 0?te(e.projectRoot):void 0),s=se(t,o,e.memoryNotes,e.architectureReferences,i);if(o===s)return{filePath:n,changed:!1,content:s};const d=e.dryRun?void 0:r.writeFileAtomic(n,s);return{filePath:n,changed:!0,content:s,safeDiff:Y(o,s),backupPath:d?.backupPath,reasonCodes:q(e.memoryNotes??[])}}function Fe(e){return _e({...e,targetId:"canonical"})}function Le(e){if(e.fs!==void 0)throw new Error("writeProjectMemoryTargetFiles requires the node filesystem to manage symlinks safely.");const t=I(e.targetId),r=I("canonical"),n=p(e.projectRoot,b),o=y(n)?k(n,"utf8"):void 0,i=e.bootstrapArchitecture??(o===void 0?te(e.projectRoot):void 0),s=se(r,o,e.memoryNotes,e.architectureReferences,i),d=!y(n)||k(n,"utf8")!==s;let a;if(d&&!e.dryRun&&(a=D(n,s)),t.targetId==="canonical")return{targetId:t.targetId,canonicalFilePath:n,changed:d,files:[{filePath:n,relativeFile:b,changed:d,content:s,mode:"canonical",canonicalSource:b,safeDiff:Y(o,s),backupPath:a,reasonCodes:q(e.memoryNotes??[])}]};const c=Array.from(new Set([t.primaryFile,...t.secondaryFiles])).map(u=>{if(!N(t,u))return je(e.projectRoot,u,t,s,e.symlinkCapability,e.dryRun);const h=p(e.projectRoot,u),R=y(h)?k(h,"utf8"):void 0,w=Ae(t,u,R,e.projectRoot),P=R!==w;return P&&!e.dryRun&&D(h,w),{filePath:h,relativeFile:u,changed:P,content:w,mode:"managed-wrapper",canonicalSource:b,symlinkCapability:ne(e.projectRoot,t,u,e.symlinkCapability),reasonCodes:q(e.memoryNotes??[])}});return{targetId:t.targetId,canonicalFilePath:n,files:c,changed:d||c.some(u=>u.changed)}}export{We as PROJECT_MEMORY_LAYER_CATEGORIES,te as bootstrapArchitectureMemory,se as buildProjectMemoryContent,Ce as classifyProjectMemoryUpdate,me as createNodeProjectMemoryFs,Y as createSafeProjectMemoryDiff,Fe as writeCanonicalProjectMemory,_e as writeProjectMemory,Le as writeProjectMemoryTargetFiles};
@@ -145,7 +145,7 @@ export declare const PROJECT_MEMORY_TARGETS: {
145
145
  };
146
146
  readonly bidirectionalReference: ProjectMemoryBidirectionalReference;
147
147
  readonly requiresWrapperPreservation: true;
148
- readonly notes: "Codex root instructions. Uppercase AGENTS.md is required on case-sensitive filesystems.";
148
+ readonly notes: "Codex root instructions. Uppercase AGENTS.md is required on case-sensitive filesystems. Neocortex invocations require trusted local activation access; use the explicit local profile or Full Access/trusted-local mode when sandboxing blocks auth.";
149
149
  };
150
150
  readonly 'gemini-cli': {
151
151
  readonly targetId: "gemini-cli";
@@ -1,2 +1,2 @@
1
- const e="NEOCORTEX.md",r={canonicalSource:e,semanticFileRequired:!0,symlinkBacked:!0,wrapperAllowed:!1,includeFallbackAllowed:!1,requiresWrapperPreservation:!1,fallbackIsCompatibilityRemediation:!0,policy:"mandatory-semantic-symlink",notes:"Semantic platform memory file must resolve to NEOCORTEX.md through a symlink; do not replace it with an unrelated wrapper or copied frontmatter."},c={canonicalSource:e,semanticFileRequired:!0,symlinkBacked:!0,wrapperAllowed:!0,includeFallbackAllowed:!1,requiresWrapperPreservation:!0,fallbackIsCompatibilityRemediation:!0,policy:"symlink-backed-wrapper",notes:"Platform wrapper/frontmatter is allowed only when the semantic memory payload remains symlink-backed by NEOCORTEX.md."},a={canonicalSource:e,semanticFileRequired:!0,symlinkBacked:!0,wrapperAllowed:!0,includeFallbackAllowed:!0,requiresWrapperPreservation:!0,fallbackIsCompatibilityRemediation:!0,policy:"safe-include-fallback",notes:"Use a safe include/import only for platforms that cannot consume symlinks directly; the include must resolve back to NEOCORTEX.md."};function t(o){return{canonicalSource:e,resolvesVia:o.policy,feedbackTrigger:"*update-memory",guidance:"Treat NEOCORTEX.md as canonical project memory; consult it before platform-specific memory, and run *update-memory when durable project context changes should flow back to the canonical source."}}const l=["claude-code","codex","gemini-cli","antigravity","vscode","cursor","opencode","openclaw","kimi","github-copilot-cli"],s={canonical:{targetId:"canonical",platformName:"Neocortex Canonical Memory",canonicalSource:e,primaryFile:e,secondaryFiles:["AGENTS.md","CLAUDE.md","GEMINI.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"neocortex-md",budget:{maxLines:220,maxBytes:18e3},linkRequirement:r,bidirectionalReference:t(r),requiresWrapperPreservation:!1,notes:"Canonical compact project memory source for platform symlinks and wrappers. Store only summaries, indexes, and links to architecture docs here."},"claude-code":{targetId:"claude-code",platformName:"Claude Code",canonicalSource:e,primaryFile:"CLAUDE.md",secondaryFiles:[".claude/agents/neocortex.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"claude-md",budget:{maxLines:320,maxBytes:28e3},linkRequirement:r,bidirectionalReference:t(r),requiresWrapperPreservation:!1,notes:"Claude Code project memory. Resolve to NEOCORTEX.md; keep root content concise and link deeper docs with @path references."},codex:{targetId:"codex",platformName:"Codex CLI",canonicalSource:e,primaryFile:"AGENTS.md",secondaryFiles:[".codex/agents/neocortex.toml"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"agents-md",budget:{maxLines:220,maxBytes:18e3},linkRequirement:r,bidirectionalReference:t(r),requiresWrapperPreservation:!0,notes:"Codex root instructions. Uppercase AGENTS.md is required on case-sensitive filesystems."},"gemini-cli":{targetId:"gemini-cli",platformName:"Gemini CLI",canonicalSource:e,primaryFile:"GEMINI.md",secondaryFiles:[".gemini/agents/neocortex.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"gemini-md",budget:{maxLines:260,maxBytes:22e3},linkRequirement:r,bidirectionalReference:t(r),requiresWrapperPreservation:!1,notes:"Gemini CLI context file. Prefer shallow @file.md imports for detailed architecture docs."},antigravity:{targetId:"antigravity",platformName:"Antigravity",canonicalSource:e,primaryFile:"GEMINI.md",secondaryFiles:[".gemini/agents/neocortex.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"gemini-md",budget:{maxLines:260,maxBytes:22e3},linkRequirement:r,bidirectionalReference:t(r),requiresWrapperPreservation:!1,notes:"Antigravity currently shares GEMINI.md behavior with the Gemini target stubs."},vscode:{targetId:"vscode",platformName:"VS Code / GitHub Copilot",canonicalSource:e,primaryFile:".github/copilot-instructions.md",secondaryFiles:[".github/instructions/neocortex.instructions.md",".github/agents/neocortex.agent.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"copilot-instructions",budget:{maxLines:180,maxBytes:14e3},linkRequirement:c,bidirectionalReference:t(c),requiresWrapperPreservation:!0,notes:"VS Code and GitHub Copilot always-on repository instructions."},cursor:{targetId:"cursor",platformName:"Cursor",canonicalSource:e,primaryFile:".cursor/rules/neocortex.mdc",secondaryFiles:["AGENTS.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"cursor-rule",budget:{maxLines:180,maxBytes:14e3},linkRequirement:c,bidirectionalReference:t(c),requiresWrapperPreservation:!0,notes:"Cursor rule memory. Use AGENTS.md as compatibility fallback when Cursor rules are absent."},opencode:{targetId:"opencode",platformName:"OpenCode",canonicalSource:e,primaryFile:"AGENTS.md",secondaryFiles:[".opencode/AGENTS.md",".opencode/agents/neocortex-root.md",".opencode/agents/neocortex.md",".agent/skills/neocortex/SKILL.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"agents-md",budget:{maxLines:220,maxBytes:18e3},linkRequirement:r,bidirectionalReference:t(r),requiresWrapperPreservation:!0,notes:"OpenCode agent memory. It consumes AGENTS.md-compatible instructions and must resolve to canonical NEOCORTEX.md."},openclaw:{targetId:"openclaw",platformName:"OpenClaw",canonicalSource:e,primaryFile:".openclaw/skills/neocortex/SKILL.md",secondaryFiles:["~/.openclaw/skills/neocortex/SKILL.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"agents-md",budget:{maxLines:220,maxBytes:18e3},linkRequirement:a,bidirectionalReference:t(a),requiresWrapperPreservation:!0,notes:"OpenClaw Skill thin-client memory entrypoint. Use the project Skill path when --create-project is requested; do not mutate ~/.openclaw/openclaw.json, and keep memory content public-safe."},kimi:{targetId:"kimi",platformName:"Kimi",canonicalSource:e,primaryFile:"KIMI.md",secondaryFiles:["AGENTS.md",".kimi/skills/neocortex/SKILL.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"agents-md",budget:{maxLines:220,maxBytes:18e3},linkRequirement:a,bidirectionalReference:t(a),requiresWrapperPreservation:!0,notes:"Kimi memory entrypoint. Prefer a symlink to NEOCORTEX.md; use a compact include only if the host cannot follow symlinks."},"github-copilot-cli":{targetId:"github-copilot-cli",platformName:"GitHub Copilot CLI / gh alias",canonicalSource:e,primaryFile:".github/copilot-instructions.md",secondaryFiles:["AGENTS.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"copilot-instructions",budget:{maxLines:180,maxBytes:14e3},linkRequirement:a,bidirectionalReference:t(a),requiresWrapperPreservation:!0,notes:"GitHub Copilot CLI or gh alias instructions. Resolve compact memory back to NEOCORTEX.md without copying private prompt bodies."}};function d(o){return s[o]}function p(o){return o==="canonical"||l.includes(o)}function u(){return l.map(o=>s[o])}function y(o){const n=i=>i.replace(/\|/g,"\\|").replace(/\n/g," ");return["| Path | Title | Purpose | Suggested Usage |","| --- | --- | --- | --- |",...o.map(i=>`| ${n(i.path)} | ${n(i.title)} | ${n(i.purpose)} | ${n(i.suggestedUsage)} |`)].join(`
2
- `)}export{e as CANONICAL_PROJECT_MEMORY_SOURCE,s as PROJECT_MEMORY_TARGETS,l as PROJECT_MEMORY_TARGET_IDS,d as getProjectMemoryTarget,p as isProjectMemoryTargetId,u as listProjectMemoryTargets,y as renderArchitectureReferenceTable};
1
+ const e="NEOCORTEX.md",r={canonicalSource:e,semanticFileRequired:!0,symlinkBacked:!0,wrapperAllowed:!1,includeFallbackAllowed:!1,requiresWrapperPreservation:!1,fallbackIsCompatibilityRemediation:!0,policy:"mandatory-semantic-symlink",notes:"Semantic platform memory file must resolve to NEOCORTEX.md through a symlink; do not replace it with an unrelated wrapper or copied frontmatter."},c={canonicalSource:e,semanticFileRequired:!0,symlinkBacked:!0,wrapperAllowed:!0,includeFallbackAllowed:!1,requiresWrapperPreservation:!0,fallbackIsCompatibilityRemediation:!0,policy:"symlink-backed-wrapper",notes:"Platform wrapper/frontmatter is allowed only when the semantic memory payload remains symlink-backed by NEOCORTEX.md."},a={canonicalSource:e,semanticFileRequired:!0,symlinkBacked:!0,wrapperAllowed:!0,includeFallbackAllowed:!0,requiresWrapperPreservation:!0,fallbackIsCompatibilityRemediation:!0,policy:"safe-include-fallback",notes:"Use a safe include/import only for platforms that cannot consume symlinks directly; the include must resolve back to NEOCORTEX.md."};function t(o){return{canonicalSource:e,resolvesVia:o.policy,feedbackTrigger:"*update-memory",guidance:"Treat NEOCORTEX.md as canonical project memory; consult it before platform-specific memory, and run *update-memory when durable project context changes should flow back to the canonical source."}}const l=["claude-code","codex","gemini-cli","antigravity","vscode","cursor","opencode","openclaw","kimi","github-copilot-cli"],s={canonical:{targetId:"canonical",platformName:"Neocortex Canonical Memory",canonicalSource:e,primaryFile:e,secondaryFiles:["AGENTS.md","CLAUDE.md","GEMINI.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"neocortex-md",budget:{maxLines:220,maxBytes:18e3},linkRequirement:r,bidirectionalReference:t(r),requiresWrapperPreservation:!1,notes:"Canonical compact project memory source for platform symlinks and wrappers. Store only summaries, indexes, and links to architecture docs here."},"claude-code":{targetId:"claude-code",platformName:"Claude Code",canonicalSource:e,primaryFile:"CLAUDE.md",secondaryFiles:[".claude/agents/neocortex.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"claude-md",budget:{maxLines:320,maxBytes:28e3},linkRequirement:r,bidirectionalReference:t(r),requiresWrapperPreservation:!1,notes:"Claude Code project memory. Resolve to NEOCORTEX.md; keep root content concise and link deeper docs with @path references."},codex:{targetId:"codex",platformName:"Codex CLI",canonicalSource:e,primaryFile:"AGENTS.md",secondaryFiles:[".codex/agents/neocortex.toml"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"agents-md",budget:{maxLines:220,maxBytes:18e3},linkRequirement:r,bidirectionalReference:t(r),requiresWrapperPreservation:!0,notes:"Codex root instructions. Uppercase AGENTS.md is required on case-sensitive filesystems. Neocortex invocations require trusted local activation access; use the explicit local profile or Full Access/trusted-local mode when sandboxing blocks auth."},"gemini-cli":{targetId:"gemini-cli",platformName:"Gemini CLI",canonicalSource:e,primaryFile:"GEMINI.md",secondaryFiles:[".gemini/agents/neocortex.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"gemini-md",budget:{maxLines:260,maxBytes:22e3},linkRequirement:r,bidirectionalReference:t(r),requiresWrapperPreservation:!1,notes:"Gemini CLI context file. Prefer shallow @file.md imports for detailed architecture docs."},antigravity:{targetId:"antigravity",platformName:"Antigravity",canonicalSource:e,primaryFile:"GEMINI.md",secondaryFiles:[".gemini/agents/neocortex.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"gemini-md",budget:{maxLines:260,maxBytes:22e3},linkRequirement:r,bidirectionalReference:t(r),requiresWrapperPreservation:!1,notes:"Antigravity currently shares GEMINI.md behavior with the Gemini target stubs."},vscode:{targetId:"vscode",platformName:"VS Code / GitHub Copilot",canonicalSource:e,primaryFile:".github/copilot-instructions.md",secondaryFiles:[".github/instructions/neocortex.instructions.md",".github/agents/neocortex.agent.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"copilot-instructions",budget:{maxLines:180,maxBytes:14e3},linkRequirement:c,bidirectionalReference:t(c),requiresWrapperPreservation:!0,notes:"VS Code and GitHub Copilot always-on repository instructions."},cursor:{targetId:"cursor",platformName:"Cursor",canonicalSource:e,primaryFile:".cursor/rules/neocortex.mdc",secondaryFiles:["AGENTS.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"cursor-rule",budget:{maxLines:180,maxBytes:14e3},linkRequirement:c,bidirectionalReference:t(c),requiresWrapperPreservation:!0,notes:"Cursor rule memory. Use AGENTS.md as compatibility fallback when Cursor rules are absent."},opencode:{targetId:"opencode",platformName:"OpenCode",canonicalSource:e,primaryFile:"AGENTS.md",secondaryFiles:[".opencode/AGENTS.md",".opencode/agents/neocortex-root.md",".opencode/agents/neocortex.md",".agent/skills/neocortex/SKILL.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"agents-md",budget:{maxLines:220,maxBytes:18e3},linkRequirement:r,bidirectionalReference:t(r),requiresWrapperPreservation:!0,notes:"OpenCode agent memory. It consumes AGENTS.md-compatible instructions and must resolve to canonical NEOCORTEX.md."},openclaw:{targetId:"openclaw",platformName:"OpenClaw",canonicalSource:e,primaryFile:".openclaw/skills/neocortex/SKILL.md",secondaryFiles:["~/.openclaw/skills/neocortex/SKILL.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"agents-md",budget:{maxLines:220,maxBytes:18e3},linkRequirement:a,bidirectionalReference:t(a),requiresWrapperPreservation:!0,notes:"OpenClaw Skill thin-client memory entrypoint. Use the project Skill path when --create-project is requested; do not mutate ~/.openclaw/openclaw.json, and keep memory content public-safe."},kimi:{targetId:"kimi",platformName:"Kimi",canonicalSource:e,primaryFile:"KIMI.md",secondaryFiles:["AGENTS.md",".kimi/skills/neocortex/SKILL.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"agents-md",budget:{maxLines:220,maxBytes:18e3},linkRequirement:a,bidirectionalReference:t(a),requiresWrapperPreservation:!0,notes:"Kimi memory entrypoint. Prefer a symlink to NEOCORTEX.md; use a compact include only if the host cannot follow symlinks."},"github-copilot-cli":{targetId:"github-copilot-cli",platformName:"GitHub Copilot CLI / gh alias",canonicalSource:e,primaryFile:".github/copilot-instructions.md",secondaryFiles:["AGENTS.md"],ownedBlockName:"NEOCORTEX-MEMORY",templateKind:"copilot-instructions",budget:{maxLines:180,maxBytes:14e3},linkRequirement:a,bidirectionalReference:t(a),requiresWrapperPreservation:!0,notes:"GitHub Copilot CLI or gh alias instructions. Resolve compact memory back to NEOCORTEX.md without copying private prompt bodies."}};function d(o){return s[o]}function u(o){return o==="canonical"||l.includes(o)}function p(){return l.map(o=>s[o])}function y(o){const n=i=>i.replace(/\|/g,"\\|").replace(/\n/g," ");return["| Path | Title | Purpose | Suggested Usage |","| --- | --- | --- | --- |",...o.map(i=>`| ${n(i.path)} | ${n(i.title)} | ${n(i.purpose)} | ${n(i.suggestedUsage)} |`)].join(`
2
+ `)}export{e as CANONICAL_PROJECT_MEMORY_SOURCE,s as PROJECT_MEMORY_TARGETS,l as PROJECT_MEMORY_TARGET_IDS,d as getProjectMemoryTarget,u as isProjectMemoryTargetId,p as listProjectMemoryTargets,y as renderArchitectureReferenceTable};
@@ -2,78 +2,15 @@
2
2
  * @license FSL-1.1
3
3
  * Copyright (c) 2026 OrNexus AI
4
4
  *
5
- * This file is part of Neocortex CLI, licensed under the
6
- * Functional Source License, Version 1.1 (FSL-1.1).
7
- *
8
- * Change Date: February 20, 2029
9
- * Change License: MIT
10
- *
11
- * See the LICENSE file in the project root for full license text.
12
- */
13
- /**
14
- * @neocortex/client - AssetResolver Interface
15
- *
16
- * Strategy pattern interface for resolving pipeline assets.
17
- * Implementations: LocalResolver (filesystem) and RemoteResolver (HTTP API).
18
- */
19
- import type { AssembledPrompt, PipelineContext, ResolverMode, SkillContent, StandardContent, StepContent, StepRegistry } from '../types/index.js';
20
- /**
21
- * AssetResolver - Core interface for the thin client abstraction layer.
22
- *
23
- * Enables the CLI to resolve pipeline assets (steps, skills, standards)
24
- * from either local filesystem or remote server, transparently.
5
+ * Production resolver contract. Only public capability metadata is resolvable;
6
+ * protected asset and assembled prompt methods intentionally do not exist.
25
7
  */
26
- export interface AssetResolver {
27
- /** The mode this resolver operates in */
28
- readonly mode: ResolverMode;
29
- /**
30
- * Resolve a pipeline step by its ID.
31
- *
32
- * @param stepId - Step identifier (e.g., "step-c-01-setup-branch")
33
- * @param context - Current pipeline context for variable substitution
34
- * @returns Resolved step content with parsed frontmatter
35
- */
36
- resolveStep(stepId: string, context: PipelineContext): Promise<StepContent>;
37
- /**
38
- * Resolve a skill by its ID.
39
- *
40
- * @param skillId - Skill identifier (e.g., "tdd-guardian")
41
- * @param context - Current pipeline context
42
- * @returns Resolved skill content with metadata
43
- */
44
- resolveSkill(skillId: string, context: PipelineContext): Promise<SkillContent>;
45
- /**
46
- * Resolve a standard by its ID.
47
- *
48
- * @param standardId - Standard identifier (e.g., "testing/tdd-practices")
49
- * @returns Resolved standard content
50
- */
51
- resolveStandard(standardId: string): Promise<StandardContent>;
52
- /**
53
- * Resolve the step registry (step-registry.json).
54
- *
55
- * @returns Parsed step registry with all step definitions
56
- */
57
- resolveRegistry(): Promise<StepRegistry>;
58
- /**
59
- * Assemble a complete prompt for a step.
60
- *
61
- * Combines step content, required skills, and standards with
62
- * variable substitution from the pipeline context.
63
- *
64
- * @param stepId - Step to assemble prompt for
65
- * @param context - Current pipeline context
66
- * @returns Fully assembled prompt ready for execution
67
- */
68
- assemblePrompt(stepId: string, context: PipelineContext): Promise<AssembledPrompt>;
69
- /**
70
- * Check if this resolver is available and properly configured.
71
- *
72
- * @returns true if resolver can serve requests
73
- */
8
+ import type { PublicCapabilityRegistry, ResolverMode } from '../types/index.js';
9
+ export interface PublicCapabilityResolver {
10
+ readonly mode: ResolverMode.REMOTE;
11
+ resolveRegistry(): Promise<PublicCapabilityRegistry>;
74
12
  isAvailable(): Promise<boolean>;
75
- /**
76
- * Release any resources held by this resolver.
77
- */
78
13
  dispose(): Promise<void>;
79
14
  }
15
+ /** @deprecated Use PublicCapabilityResolver. Kept as a type-only alias. */
16
+ export type AssetResolver = PublicCapabilityResolver;
@@ -2,90 +2,28 @@
2
2
  * @license FSL-1.1
3
3
  * Copyright (c) 2026 OrNexus AI
4
4
  *
5
- * This file is part of Neocortex CLI, licensed under the
6
- * Functional Source License, Version 1.1 (FSL-1.1).
7
- *
8
- * Change Date: February 20, 2029
9
- * Change License: MIT
10
- *
11
- * See the LICENSE file in the project root for full license text.
12
- */
13
- /**
14
- * @neocortex/client - RemoteResolver
15
- *
16
- * Resolves pipeline assets from the IP Protection Server via HTTP API.
17
- * Used in production mode when core/ directory is not available locally.
18
- * Supports retry with exponential backoff, timeouts, and cache fallback.
5
+ * Production metadata-only resolver. Protected step, skill, standard and prompt
6
+ * bodies are neither requested nor represented by this module.
19
7
  */
20
- import type { AssetResolver } from './asset-resolver.js';
21
- import { ResolverMode, type AssembledPrompt, type PipelineContext, type RemoteResolverOptions, type SkillContent, type StandardContent, type StepContent, type StepRegistry } from '../types/index.js';
8
+ import type { PublicCapabilityResolver } from './asset-resolver.js';
9
+ import { ResolverMode, type PublicCapabilityRegistry, type RemoteResolverOptions } from '../types/index.js';
22
10
  export declare class RemoteResolverError extends Error {
23
11
  readonly statusCode?: number | undefined;
24
12
  readonly endpoint?: string | undefined;
25
13
  constructor(message: string, statusCode?: number | undefined, endpoint?: string | undefined);
26
14
  }
27
- export declare class RemoteResolver implements AssetResolver {
15
+ export declare function validatePublicCapabilityRegistry(value: unknown): value is PublicCapabilityRegistry;
16
+ export declare class RemoteResolver implements PublicCapabilityResolver {
28
17
  readonly mode = ResolverMode.REMOTE;
29
18
  private readonly serverUrl;
30
- private readonly licenseKey;
31
19
  private readonly timeout;
32
20
  private readonly retryCount;
33
- /**
34
- * Persistent cache -- used for registry only.
35
- * P70.06: NEVER used for step/skill/standard content (those live in
36
- * `assetCache` and only in process memory).
37
- */
38
21
  private readonly cache;
39
- /**
40
- * In-memory LRU cache for asset content (Epic P70.06).
41
- * Volatile: discarded on process exit. Never persisted to disk.
42
- */
43
- private readonly assetCache;
44
22
  private readonly licenseClient;
45
23
  constructor(options: RemoteResolverOptions);
46
- resolveStep(stepId: string, _context: PipelineContext): Promise<StepContent>;
47
- resolveSkill(skillId: string, _context: PipelineContext): Promise<SkillContent>;
48
- resolveStandard(standardId: string): Promise<StandardContent>;
49
- resolveRegistry(): Promise<StepRegistry>;
50
- assemblePrompt(stepId: string, context: PipelineContext): Promise<AssembledPrompt>;
24
+ resolveRegistry(): Promise<PublicCapabilityRegistry>;
51
25
  isAvailable(): Promise<boolean>;
52
26
  dispose(): Promise<void>;
53
- /**
54
- * Build authorization headers for API requests.
55
- * When a LicenseClient is available, uses JWT token from it.
56
- * Story 31.04: NEVER sends raw license key as Bearer token.
57
- * If JWT is unavailable, omits Authorization header entirely.
58
- * Server will return 401, which fetchWithRetry handles via forceRefresh.
59
- */
60
27
  private buildHeaders;
61
- /**
62
- * Execute HTTP request with retry and exponential backoff.
63
- * Handles 401 specially: if a licenseClient is available, attempts
64
- * forceRefresh() and retries once with the new token.
65
- */
66
28
  private fetchWithRetry;
67
- /**
68
- * Fetch with persistent cache fallback: try HTTP first, fall back to cache
69
- * on failure. On successful HTTP response, update the cache.
70
- *
71
- * P70.06: ONLY the registry uses this path. Asset content (step/skill/
72
- * standard) uses {@link fetchWithInMemoryCache} so it never touches disk.
73
- */
74
- private fetchWithCacheFallback;
75
- /**
76
- * P70.06: fetch with VOLATILE in-memory cache fallback.
77
- *
78
- * Identical structure to {@link fetchWithCacheFallback} but the backing
79
- * store is {@link InMemoryAssetCache} -- entries live only in the running
80
- * process memory, never written to disk.
81
- *
82
- * When the server is unreachable and the in-memory cache is empty (e.g.
83
- * first invocation of a fresh CLI process), the original error is
84
- * re-thrown instead of silently degrading to a stale disk cache.
85
- */
86
- private fetchWithInMemoryCache;
87
- /**
88
- * Sleep for the specified duration.
89
- */
90
- private sleep;
91
29
  }
@@ -1 +1 @@
1
- import{ResolverMode as y,NoOpCache as d}from"../types/index.js";import{InMemoryAssetCache as m}from"../cache/in-memory-asset-cache.js";const C=3e4,f=3,w=1e3,p=1e4;class o extends Error{statusCode;endpoint;constructor(t,e,s){super(t),this.statusCode=e,this.endpoint=s,this.name="RemoteResolverError"}}class ${mode=y.REMOTE;serverUrl;licenseKey;timeout;retryCount;cache;assetCache;licenseClient;constructor(t){this.serverUrl=t.serverUrl.replace(/\/+$/,""),this.licenseKey=t.licenseKey,this.timeout=t.timeout??C,this.retryCount=t.retryCount??f,this.cache=t.cacheProvider??new d,this.licenseClient=t.licenseClient??null,this.assetCache=new m}async resolveStep(t,e){const s=`step:${t}`;return this.fetchWithInMemoryCache(s,{method:"GET",path:`/api/v1/steps/${encodeURIComponent(t)}`})}async resolveSkill(t,e){const s=`skill:${t}`;return this.fetchWithInMemoryCache(s,{method:"GET",path:`/api/v1/skills/${encodeURIComponent(t)}`})}async resolveStandard(t){const e=`standard:${t}`;return this.fetchWithInMemoryCache(e,{method:"GET",path:`/api/v1/standards/${encodeURIComponent(t)}`})}async resolveRegistry(){return this.fetchWithCacheFallback("registry",{method:"GET",path:"/api/v1/registry"})}async assemblePrompt(t,e){return this.fetchWithRetry({method:"POST",path:"/api/v1/prompts/assemble",body:{stepId:t,context:e}})}async isAvailable(){try{const t=new AbortController,e=setTimeout(()=>t.abort(),5e3),s=await fetch(`${this.serverUrl}/api/v1/health`,{method:"GET",headers:await this.buildHeaders(),signal:t.signal});return clearTimeout(e),s.ok}catch{return!1}}async dispose(){await this.cache.clear(),await this.assetCache.clear()}async buildHeaders(){const t={"Content-Type":"application/json","X-Client-Version":"0.1.0"};if(this.licenseClient){const e=await this.licenseClient.getToken();e&&(t.Authorization=`Bearer ${e}`)}return t}async fetchWithRetry(t){let e,s=!1;for(let n=0;n<=this.retryCount;n++)try{const a=new AbortController,c=setTimeout(()=>a.abort(),this.timeout),i=`${this.serverUrl}${t.path}`,h={method:t.method,headers:await this.buildHeaders(),signal:a.signal};t.body&&(h.body=JSON.stringify(t.body));const r=await fetch(i,h);if(clearTimeout(c),!r.ok){const l=await r.text().catch(()=>"Unknown error");if(r.status===401&&!s&&this.licenseClient){if(s=!0,await this.licenseClient.forceRefresh()){n--;continue}throw new o(`API error: ${r.status} ${r.statusText} - ${l}`,r.status,t.path)}throw r.status>=400&&r.status<500&&r.status!==429?new o(`API error: ${r.status} ${r.statusText} - ${l}`,r.status,t.path):new o(`Server error: ${r.status} ${r.statusText}`,r.status,t.path)}return await r.json()}catch(a){if(e=a instanceof Error?a:new Error(String(a)),a instanceof o&&a.statusCode&&a.statusCode>=400&&a.statusCode<500&&a.statusCode!==429)throw a;if(n<this.retryCount){const c=Math.min(w*Math.pow(2,n),p),i=Math.random()*c*.25;await this.sleep(c+i)}}throw e??new o("All retry attempts failed",void 0,t.path)}async fetchWithCacheFallback(t,e){try{const s=await this.fetchWithRetry(e);return this.cache.set(t,JSON.stringify(s)).catch(()=>{}),s}catch(s){const n=await this.cache.get(t);if(n!==null)try{return JSON.parse(n)}catch{}throw s}}async fetchWithInMemoryCache(t,e){try{const s=await this.fetchWithRetry(e);return this.assetCache.set(t,JSON.stringify(s)).catch(()=>{}),s}catch(s){const n=await this.assetCache.get(t);if(n!==null)try{return JSON.parse(n)}catch{}throw s}}sleep(t){return new Promise(e=>setTimeout(e,t))}}export{$ as RemoteResolver,o as RemoteResolverError};
1
+ import{NoOpCache as p,PUBLIC_EXECUTION_MIN_SECURE_CLIENT_VERSION as C,PUBLIC_EXECUTION_SCHEMA_HEADER as b,PUBLIC_EXECUTION_SCHEMA_VERSION as E,ResolverMode as d}from"../types/index.js";const m=3e4,g=3,w=1e3,A=1e4,h="public-capability-registry-v1",R=64;class n extends Error{statusCode;endpoint;constructor(t,s,i){super(t),this.statusCode=s,this.endpoint=i,this.name="RemoteResolverError"}}function c(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function l(e,t){const s=Object.keys(e).sort(),i=[...t].sort();return s.length===t.length&&s.every((o,a)=>o===i[a])}function u(e){return!c(e)||!l(e,["schema_version","capabilities","version","cache_control"])||e.schema_version!==1||typeof e.version!="string"||!/^[A-Za-z0-9._:-]{1,64}$/.test(e.version)||!Array.isArray(e.capabilities)||e.capabilities.length>R||!c(e.cache_control)||!l(e.cache_control,["ttl_seconds","etag"])||!Number.isInteger(e.cache_control.ttl_seconds)||Number(e.cache_control.ttl_seconds)<0||Number(e.cache_control.ttl_seconds)>86400||typeof e.cache_control.etag!="string"||!/^(?:[A-Za-z0-9._:-]{1,128}|(?:W\/)?"[a-f0-9]{64}")$/.test(e.cache_control.etag)?!1:e.capabilities.every(t=>!c(t)||!l(t,["token","availability","tier"])?!1:typeof t.token=="string"&&/^[A-Za-z0-9._:-]{1,128}$/.test(t.token)&&t.availability==="supported"&&(t.tier==="free"||t.tier==="pro"||t.tier==="enterprise"))}class I{mode=d.REMOTE;serverUrl;timeout;retryCount;cache;licenseClient;constructor(t){this.serverUrl=t.serverUrl.replace(/\/+$/,""),this.timeout=t.timeout??m,this.retryCount=t.retryCount??g,this.cache=t.cacheProvider??new p,this.licenseClient=t.licenseClient??null}async resolveRegistry(){try{const t=await this.fetchWithRetry({method:"GET",path:"/api/v1/registry"});if(!u(t))throw new n("Public capability registry rejected.",502,"/api/v1/registry");return this.cache.set(h,JSON.stringify(t)).catch(()=>{}),t}catch(t){const s=await this.cache.get(h);if(s)try{const i=JSON.parse(s);if(u(i))return i}catch{}throw t}}async isAvailable(){const t=new AbortController,s=setTimeout(()=>t.abort(),5e3);try{return(await fetch(`${this.serverUrl}/api/v1/health`,{method:"GET",headers:await this.buildHeaders(),signal:t.signal})).ok}catch{return!1}finally{clearTimeout(s)}}async dispose(){await this.cache.clear()}async buildHeaders(){const t={"Content-Type":"application/json","X-Client-Version":C,[b]:String(E)},s=await this.licenseClient?.getToken();return s&&(t.Authorization=`Bearer ${s}`),t}async fetchWithRetry(t){let s,i=!1;for(let o=0;o<=this.retryCount;o+=1){const a=new AbortController,f=setTimeout(()=>a.abort(),this.timeout);try{const r=await fetch(`${this.serverUrl}${t.path}`,{method:t.method,headers:await this.buildHeaders(),signal:a.signal});if(!r.ok){if(r.status===401&&!i&&this.licenseClient&&(i=!0,await this.licenseClient.forceRefresh())){o-=1;continue}throw new n(r.status>=500||r.status===429?`Public capability service unavailable (${r.status}).`:`Public capability request rejected (${r.status}).`,r.status,t.path)}return await r.json()}catch(r){if(s=r instanceof Error?r:new Error("Public capability request failed."),r instanceof n&&r.statusCode&&r.statusCode>=400&&r.statusCode<500&&r.statusCode!==429)throw r;if(o<this.retryCount){const y=Math.min(w*2**o,A);await new Promise(_=>setTimeout(_,y))}}finally{clearTimeout(f)}}throw s??new n("Public capability request failed.",void 0,t.path)}}export{I as RemoteResolver,n as RemoteResolverError,u as validatePublicCapabilityRegistry};
File without changes
@@ -1 +1 @@
1
- const ae=12,ue=16,n=(r,e,t={})=>({commandId:r,stateProjectionPolicy:e,...t}),_=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})}),M=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"}),z=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 b(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}function f(...r){const e=new Set,t=[];for(const i of r)for(const o of i??[]){const c=a(o,80);if(!(!c||e.has(c))&&(e.add(c),t.push(c),t.length>=16))return t}return t}function N(r){return r.trim().replace(/^@?\*/,"").replace(/^@/,"").toLowerCase()}function F(r){return r.trim().split(/\s+/,1)[0]??""}function L(r){const e=F(r);if(!e)return _.menu;const t=N(e),i=z[t]??M[t]??t;return _[i]??null}function $(r,e,t,i="full-compatible",o=["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:f(o)}}function y(r,e,t,i="full-compatible",o=["full-state"]){const c=$(r,e,t,i,o);return m({...e,scope:c},e,c)}function D(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 q(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 Y(r){const e=r.trim(),t=e.search(/\s/);return t===-1?"":e.slice(t).trim()}function O(r){return Y(r).split(/\s+/).map(e=>e.replace(/^@/,"").replace(/^['"]|['"]$/g,"")).filter(e=>e.length>0&&!e.startsWith("-"))}function de(r){return O(r)[0]??null}function P(r,e){const i=r.replace(/^@/,"").replace(/^epic-/i,"").replace(/\.md$/i,""),o=[i,i.toUpperCase(),/^p\d+$/i.test(i)?`P${i.replace(/^p/i,"")}`:null,/^\d+$/.test(i)?`P${i}`:null].filter(c=>typeof c=="string"&&c.length>0);for(const c of o)if(e.epics[c])return c;return null}function Z(r,e){const t=r.match(/(?:^|[/@\s])epic-(P?\d+)\.md\b/i);return t?.[1]?P(t[1],e):null}function S(r,e){const t=Z(r,e);if(t)return t;for(const i of O(r)){if(/^[A-Z]?\d+(?:\.\d+)+$/i.test(i))continue;const o=P(i,e);if(o)return o}return null}function G(r,e){const t=S(r,e);if(t)return t;const i=e.yoloop,o=i?.state?.currentSession?.currentEpicId;if(typeof o=="string"&&e.epics[o])return o;const c=i?.lock?.currentEpicId??i?.lock?.epicId;return typeof c=="string"&&e.epics[c]?c:null}function k(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 x(r){return typeof r=="string"&&["done","completed","merged","cancelled","canceled","abandoned"].includes(r.toLowerCase())}function h(r,e,t){if(t.has(r))return;const i=e.stories[r];if(!i)return;t.add(r);const o=i.depends_on;if(Array.isArray(o))for(const c of o)typeof c=="string"&&h(c,e,t)}function U(r,e,t){const i=new Set;h(r,t,i);const o=e.stories;if(Array.isArray(o))for(const s of o)typeof s=="string"&&t.stories[s]&&i.add(s);const c={};for(const s of i){const u=t.stories[s];u&&(c[s]=u)}return c}function v(r,e,t=[]){const i={};for(const o of t)e.epics[o]&&(i[o]=e.epics[o]);for(const[o,c]of Object.entries(r)){const s=k(c,o);s&&e.epics[s]&&(i[s]=e.epics[s])}return i}function w(r,e,t){if(t.has(r))return;const i=e.epics[r];if(!i)return;t.add(r);const o=i.depends_on;if(Array.isArray(o))for(const c of o)typeof c=="string"&&c.length>0&&w(c,e,t)}function B(r,e,t){const i=new Set;return w(r,t,i),v(e,t,[...i])}function J(r,e){const t=new Set,i=r.stories;if(Array.isArray(i))for(const c of i){if(typeof c!="string")continue;const s=e.stories[c];if(s){if(x(s.status)){t.add(c);continue}h(c,e,t)}}const o={};for(const c of t){const s=e.stories[c];s&&(o[c]=s)}return o}function K(r,e){const t=new Set,i=r.stories;if(Array.isArray(i))for(const c of i)typeof c=="string"&&h(c,e,t);const o={};for(const c of t){const s=e.stories[c];s&&(o[c]=s)}return o}function W(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)}:{},...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 R(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 A(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 V(r){return Object.entries(r.stories).map(([e,t])=>({id:e,story:t,timestamp:A(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 H(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 Q(r){const e=r.yoloop;if(!b(e))return;const t=b(e.state)?e.state:void 0,i=b(t?.currentSession)?t.currentSession:void 0,o=b(e.lock)?e.lock:void 0,c={...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(o?.currentEpicId??o?.epicId)??null};return Object.keys(c).length>0?c:void 0}function X(r){const e=r.continuity;if(!b(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:f(t)}:{}}}function ee(r,e,t){const i=a(e?.activeStoryId),o=a(e?.activeEpicId),c=a(e?.activeStepId);if(i||o||c)return{epicId:o??null,storyId:i??null,stepId:c??null};const s=a(t?.currentStoryId),u=a(t?.currentEpicId??t?.lockEpicId);if(s||u)return{epicId:u??null,storyId:s??null,stepId:null};const d=Object.entries(r.stories).map(([l,p])=>({id:l,story:p,timestamp:A(p)})).filter(({story:l})=>!x(l.status)).sort((l,p)=>p.timestamp-l.timestamp||l.id.localeCompare(p.id))[0];return d?{epicId:k(d.story,d.id),storyId:d.id,stepId:a(d.story.last_step??d.story.lastStep)??null}:{epicId:null,storyId:null,stepId:null}}function te(r,e){const t=R(r.stories),i=R(r.epics),o=H(r),c=Q(r),s=X(r),u=ee(r,o,c),d=V(r),l=f(e.reasonCodes,["state-summary-attached","state-summary-bounded",`projection-${e.projectionMode??e.kind}`,e.stateProjectionPolicy?`policy-${e.stateProjectionPolicy}`:"policy-unknown",d.length>=12?"recent-stories-capped":"recent-stories-bounded",u.storyId||u.epicId?"active-ref-derived":"active-ref-empty",c?"yoloop-session-present":"yoloop-session-absent",s?"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,blockedStories:t.blocked??0},active:u,blockedCount:t.blocked??0,recentStories:d,...o?{currentSession:o}:{},...c?{currentYoloopSession:c}:{},...s?{currentContinuitySession:s}:{},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:l,publicSafe:!0}}function m(r,e,t){return{...r,stateSummary:te(e,t)}}function re(r,e,t){const i={};for(const c of Object.keys(e.epics))i[c]={id:c};const o={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 m({...e,stories:{},epics:i,scope:o},e,o)}function j(r,e,t,i=["summary-only","stories-omitted"]){const o=W(e),c={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:"summary-only",trigger:r,targetEpicId:null,targetStoryId:null,includedStoryCount:0,includedEpicCount:Object.keys(o).length,omittedStoryCount:Object.keys(e.stories).length,omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(o).length),reason:"summary-only",reasonCodes:f(i)};return m({...e,stories:{},epics:o,scope:c},e,c)}function E(r,e,t,i,o,c){const s=e.stories[i];if(!s)return y(r,e,t,o,[...c,"target-story-missing-full-state"]);const u=k(s,i);if(!u)return y(r,e,t,o,[...c,"target-epic-unresolved-full-state"]);const d=e.epics[u];if(!d)return y(r,e,t,o,[...c,"target-epic-missing-full-state"]);const l=U(i,d,e),p=v(l,e);if(!l[i]||!p[u])return y(r,e,t,o,[...c,"target-projection-incomplete-full-state"]);const g={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:o,trigger:r,targetEpicId:u,targetStoryId:i,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:f(c)};return m({...e,stories:l,epics:p,scope:g},e,g)}function T(r,e,t,i,o,c){const s=e.epics[i];if(!s)return y(r,e,t,o,[...c,"target-epic-missing-full-state"]);const u=K(s,e),d=v(u,e,[i]);if(!d[i])return y(r,e,t,o,[...c,"target-epic-projection-incomplete-full-state"]);const l={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:o,trigger:r,targetEpicId:i,targetStoryId:null,includedStoryCount:Object.keys(u).length,includedEpicCount:Object.keys(d).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(d).length),reason:"targeted-invocation",reasonCodes:f(c)};return m({...e,stories:u,epics:d,scope:l},e,l)}function ie(r,e,t){const i=G(r,e);if(!i)return y(r,e,t,"structural-required",["yoloop-target-missing-full-state"]);const o=e.epics[i];if(!o)return y(r,e,t,"structural-required",["yoloop-target-epic-missing-full-state"]);const c=J(o,e),s=B(i,c,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(c).length,includedEpicCount:Object.keys(s).length,omittedStoryCount:Math.max(0,Object.keys(e.stories).length-Object.keys(c).length),omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(s).length),reason:"targeted-invocation",reasonCodes:["structural-required","yoloop-targeted"]};return m({...e,stories:c,epics:s,scope:u},e,u)}function ce(r,e){const t={};for(const[i,o]of Object.entries(r.epics)){const c=Array.isArray(o.stories)?o.stories.filter(s=>typeof s=="string"&&e.has(s)):[];t[i]={id:a(o.id)??i,...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}:{}}}return t}function oe(r){return r.stateSummary?.totals.stories??(r.scope?.includedStoryCount??Object.keys(r.stories).length)+(r.scope?.omittedStoryCount??0)}function ne(r){return r.stateSummary?.totals.epics??(r.scope?.includedEpicCount??Object.keys(r.epics).length)+(r.scope?.omittedEpicCount??0)}function se(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:f(r.stateSummary.reasonCodes,["payload-size-guardrail","state-summary-preserved","nonessential-state-degraded"])}}function le(r){const e=r.scope,t=new Set;if(e?.projectionMode==="structural-required")for(const I of Object.keys(r.stories))t.add(I);else e?.targetStoryId&&h(e.targetStoryId,r,t);const i={};for(const I of t){const C=r.stories[I];C&&(i[I]=C)}const o=ce(r,t),c=Object.keys(i).length,s=Object.keys(o).length,u=Math.max(0,oe(r)-c),d=Math.max(0,ne(r)-s),l=e?.projectionMode==="structural-required"?"structural-required":"summary-only",p={kind:"projected",commandId:e?.commandId??null,stateProjectionPolicy:e?.stateProjectionPolicy??null,projectionMode:l,...e?.trigger?{trigger:e.trigger}:{},targetEpicId:e?.targetEpicId??null,targetStoryId:e?.targetStoryId??null,includedStoryCount:c,includedEpicCount:s,omittedStoryCount:u,omittedEpicCount:d,reason:"body-size",reasonCodes:f(e?.reasonCodes,["payload-size-guardrail",t.size>0?"structural-targets-preserved":"stories-omitted","epics-stubbed","state-summary-preserved"])},g=se(r,p);return{...r,stories:i,epics:o,scope:p,...g?{stateSummary:g}:{}}}function pe(r,e){const t=r.trim();try{const i=L(t);if(!i){if(D(t)){const c=n("story-reference","story-targeted"),s=q(t);if(s)return E(t,e,c,s,"targeted-story",["story-reference-targeted"])}return y(t,e,null,"full-compatible",["unknown-command-full-state"])}if(i.stateProjectionPolicy==="epic-summary")return re(t,e,i);if(i.stateProjectionPolicy==="yoloop-targeted")return ie(t,e,i);const o=q(t);if(i.stateProjectionPolicy==="story-targeted")return o?E(t,e,i,o,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"]):j(t,e,i,["story-target-missing-summary-only"]);if(i.stateProjectionPolicy==="adaptive-targeted"){if(o&&e.stories[o])return E(t,e,i,o,"targeted-story",["adaptive-story-targeted"]);const c=S(t,e);return c?T(t,e,i,c,"targeted-epic",["adaptive-epic-targeted"]):j(t,e,i,["adaptive-summary-only","target-unresolved-summary-only"])}if(i.stateProjectionPolicy==="epic-targeted"){const c=S(t,e);return c?T(t,e,i,c,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"]):j(t,e,i,["epic-target-missing-summary-only"])}return i.stateProjectionPolicy==="continuity-scoped"?j(t,e,i,["continuity-scoped-summary-only"]):j(t,e,i,["policy-full-summary-only"])}catch{return y(t,e,null,"full-compatible",["projection-error-full-state"])}}export{le as degradeStateSnapshotForPayloadLimit,pe as projectStateSnapshotForInvoke};
1
+ const ae=12,ue=16,n=(r,e,t={})=>({commandId:r,stateProjectionPolicy:e,...t}),_=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,targetOptional:!0}),"commit-push":n("commit","story-targeted",{structuralRequired:!0,targetOptional:!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})}),M=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"}),z=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 h(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}function f(...r){const e=new Set,t=[];for(const i of r)for(const o of i??[]){const c=a(o,80);if(!(!c||e.has(c))&&(e.add(c),t.push(c),t.length>=16))return t}return t}function N(r){return r.trim().replace(/^@?\*/,"").replace(/^@/,"").toLowerCase()}function F(r){return r.trim().split(/\s+/,1)[0]??""}function L(r){const e=F(r);if(!e)return _.menu;const t=N(e),i=z[t]??M[t]??t;return _[i]??null}function $(r,e,t,i="full-compatible",o=["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:f(o)}}function y(r,e,t,i="full-compatible",o=["full-state"]){const c=$(r,e,t,i,o);return m({...e,scope:c},e,c)}function D(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 q(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 Y(r){const e=r.trim(),t=e.search(/\s/);return t===-1?"":e.slice(t).trim()}function O(r){return Y(r).split(/\s+/).map(e=>e.replace(/^@/,"").replace(/^['"]|['"]$/g,"")).filter(e=>e.length>0&&!e.startsWith("-"))}function de(r){return O(r)[0]??null}function P(r,e){const i=r.replace(/^@/,"").replace(/^epic-/i,"").replace(/\.md$/i,""),o=[i,i.toUpperCase(),/^p\d+$/i.test(i)?`P${i.replace(/^p/i,"")}`:null,/^\d+$/.test(i)?`P${i}`:null].filter(c=>typeof c=="string"&&c.length>0);for(const c of o)if(e.epics[c])return c;return null}function Z(r,e){const t=r.match(/(?:^|[/@\s])epic-(P?\d+)\.md\b/i);return t?.[1]?P(t[1],e):null}function S(r,e){const t=Z(r,e);if(t)return t;for(const i of O(r)){if(/^[A-Z]?\d+(?:\.\d+)+$/i.test(i))continue;const o=P(i,e);if(o)return o}return null}function G(r,e){const t=S(r,e);if(t)return t;const i=e.yoloop,o=i?.state?.currentSession?.currentEpicId;if(typeof o=="string"&&e.epics[o])return o;const c=i?.lock?.currentEpicId??i?.lock?.epicId;return typeof c=="string"&&e.epics[c]?c:null}function k(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 x(r){return typeof r=="string"&&["done","completed","merged","cancelled","canceled","abandoned"].includes(r.toLowerCase())}function j(r,e,t){if(t.has(r))return;const i=e.stories[r];if(!i)return;t.add(r);const o=i.depends_on;if(Array.isArray(o))for(const c of o)typeof c=="string"&&j(c,e,t)}function U(r,e,t){const i=new Set;j(r,t,i);const o=e.stories;if(Array.isArray(o))for(const s of o)typeof s=="string"&&t.stories[s]&&i.add(s);const c={};for(const s of i){const u=t.stories[s];u&&(c[s]=u)}return c}function v(r,e,t=[]){const i={};for(const o of t)e.epics[o]&&(i[o]=e.epics[o]);for(const[o,c]of Object.entries(r)){const s=k(c,o);s&&e.epics[s]&&(i[s]=e.epics[s])}return i}function w(r,e,t){if(t.has(r))return;const i=e.epics[r];if(!i)return;t.add(r);const o=i.depends_on;if(Array.isArray(o))for(const c of o)typeof c=="string"&&c.length>0&&w(c,e,t)}function B(r,e,t){const i=new Set;return w(r,t,i),v(e,t,[...i])}function J(r,e){const t=new Set,i=r.stories;if(Array.isArray(i))for(const c of i){if(typeof c!="string")continue;const s=e.stories[c];if(s){if(x(s.status)){t.add(c);continue}j(c,e,t)}}const o={};for(const c of t){const s=e.stories[c];s&&(o[c]=s)}return o}function K(r,e){const t=new Set,i=r.stories;if(Array.isArray(i))for(const c of i)typeof c=="string"&&j(c,e,t);const o={};for(const c of t){const s=e.stories[c];s&&(o[c]=s)}return o}function W(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)}:{},...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 R(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 A(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 V(r){return Object.entries(r.stories).map(([e,t])=>({id:e,story:t,timestamp:A(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 H(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 Q(r){const e=r.yoloop;if(!h(e))return;const t=h(e.state)?e.state:void 0,i=h(t?.currentSession)?t.currentSession:void 0,o=h(e.lock)?e.lock:void 0,c={...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(o?.currentEpicId??o?.epicId)??null};return Object.keys(c).length>0?c:void 0}function X(r){const e=r.continuity;if(!h(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:f(t)}:{}}}function ee(r,e,t){const i=a(e?.activeStoryId),o=a(e?.activeEpicId),c=a(e?.activeStepId);if(i||o||c)return{epicId:o??null,storyId:i??null,stepId:c??null};const s=a(t?.currentStoryId),u=a(t?.currentEpicId??t?.lockEpicId);if(s||u)return{epicId:u??null,storyId:s??null,stepId:null};const d=Object.entries(r.stories).map(([l,p])=>({id:l,story:p,timestamp:A(p)})).filter(({story:l})=>!x(l.status)).sort((l,p)=>p.timestamp-l.timestamp||l.id.localeCompare(p.id))[0];return d?{epicId:k(d.story,d.id),storyId:d.id,stepId:a(d.story.last_step??d.story.lastStep)??null}:{epicId:null,storyId:null,stepId:null}}function te(r,e){const t=R(r.stories),i=R(r.epics),o=H(r),c=Q(r),s=X(r),u=ee(r,o,c),d=V(r),l=f(e.reasonCodes,["state-summary-attached","state-summary-bounded",`projection-${e.projectionMode??e.kind}`,e.stateProjectionPolicy?`policy-${e.stateProjectionPolicy}`:"policy-unknown",d.length>=12?"recent-stories-capped":"recent-stories-bounded",u.storyId||u.epicId?"active-ref-derived":"active-ref-empty",c?"yoloop-session-present":"yoloop-session-absent",s?"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,blockedStories:t.blocked??0},active:u,blockedCount:t.blocked??0,recentStories:d,...o?{currentSession:o}:{},...c?{currentYoloopSession:c}:{},...s?{currentContinuitySession:s}:{},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:l,publicSafe:!0}}function m(r,e,t){return{...r,stateSummary:te(e,t)}}function re(r,e,t){const i={};for(const c of Object.keys(e.epics))i[c]={id:c};const o={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 m({...e,stories:{},epics:i,scope:o},e,o)}function g(r,e,t,i=["summary-only","stories-omitted"]){const o=W(e),c={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:"summary-only",trigger:r,targetEpicId:null,targetStoryId:null,includedStoryCount:0,includedEpicCount:Object.keys(o).length,omittedStoryCount:Object.keys(e.stories).length,omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(o).length),reason:"summary-only",reasonCodes:f(i)};return m({...e,stories:{},epics:o,scope:c},e,c)}function E(r,e,t,i,o,c){const s=e.stories[i];if(!s)return y(r,e,t,o,[...c,"target-story-missing-full-state"]);const u=k(s,i);if(!u)return y(r,e,t,o,[...c,"target-epic-unresolved-full-state"]);const d=e.epics[u];if(!d)return y(r,e,t,o,[...c,"target-epic-missing-full-state"]);const l=U(i,d,e),p=v(l,e);if(!l[i]||!p[u])return y(r,e,t,o,[...c,"target-projection-incomplete-full-state"]);const b={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:o,trigger:r,targetEpicId:u,targetStoryId:i,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:f(c)};return m({...e,stories:l,epics:p,scope:b},e,b)}function T(r,e,t,i,o,c){const s=e.epics[i];if(!s)return y(r,e,t,o,[...c,"target-epic-missing-full-state"]);const u=K(s,e),d=v(u,e,[i]);if(!d[i])return y(r,e,t,o,[...c,"target-epic-projection-incomplete-full-state"]);const l={kind:"projected",commandId:t.commandId,stateProjectionPolicy:t.stateProjectionPolicy,projectionMode:o,trigger:r,targetEpicId:i,targetStoryId:null,includedStoryCount:Object.keys(u).length,includedEpicCount:Object.keys(d).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(d).length),reason:"targeted-invocation",reasonCodes:f(c)};return m({...e,stories:u,epics:d,scope:l},e,l)}function ie(r,e,t){const i=G(r,e);if(!i)return y(r,e,t,"structural-required",["yoloop-target-missing-full-state"]);const o=e.epics[i];if(!o)return y(r,e,t,"structural-required",["yoloop-target-epic-missing-full-state"]);const c=J(o,e),s=B(i,c,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(c).length,includedEpicCount:Object.keys(s).length,omittedStoryCount:Math.max(0,Object.keys(e.stories).length-Object.keys(c).length),omittedEpicCount:Math.max(0,Object.keys(e.epics).length-Object.keys(s).length),reason:"targeted-invocation",reasonCodes:["structural-required","yoloop-targeted"]};return m({...e,stories:c,epics:s,scope:u},e,u)}function ce(r,e){const t={};for(const[i,o]of Object.entries(r.epics)){const c=Array.isArray(o.stories)?o.stories.filter(s=>typeof s=="string"&&e.has(s)):[];t[i]={id:a(o.id)??i,...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}:{}}}return t}function oe(r){return r.stateSummary?.totals.stories??(r.scope?.includedStoryCount??Object.keys(r.stories).length)+(r.scope?.omittedStoryCount??0)}function ne(r){return r.stateSummary?.totals.epics??(r.scope?.includedEpicCount??Object.keys(r.epics).length)+(r.scope?.omittedEpicCount??0)}function se(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:f(r.stateSummary.reasonCodes,["payload-size-guardrail","state-summary-preserved","nonessential-state-degraded"])}}function le(r){const e=r.scope,t=new Set;if(e?.projectionMode==="structural-required")for(const I of Object.keys(r.stories))t.add(I);else e?.targetStoryId&&j(e.targetStoryId,r,t);const i={};for(const I of t){const C=r.stories[I];C&&(i[I]=C)}const o=ce(r,t),c=Object.keys(i).length,s=Object.keys(o).length,u=Math.max(0,oe(r)-c),d=Math.max(0,ne(r)-s),l=e?.projectionMode==="structural-required"?"structural-required":"summary-only",p={kind:"projected",commandId:e?.commandId??null,stateProjectionPolicy:e?.stateProjectionPolicy??null,projectionMode:l,...e?.trigger?{trigger:e.trigger}:{},targetEpicId:e?.targetEpicId??null,targetStoryId:e?.targetStoryId??null,includedStoryCount:c,includedEpicCount:s,omittedStoryCount:u,omittedEpicCount:d,reason:"body-size",reasonCodes:f(e?.reasonCodes,["payload-size-guardrail",t.size>0?"structural-targets-preserved":"stories-omitted","epics-stubbed","state-summary-preserved"])},b=se(r,p);return{...r,stories:i,epics:o,scope:p,...b?{stateSummary:b}:{}}}function pe(r,e){const t=r.trim();try{const i=L(t);if(!i){if(D(t)){const c=n("story-reference","story-targeted"),s=q(t);if(s)return E(t,e,c,s,"targeted-story",["story-reference-targeted"])}return y(t,e,null,"full-compatible",["unknown-command-full-state"])}if(i.stateProjectionPolicy==="epic-summary")return re(t,e,i);if(i.stateProjectionPolicy==="yoloop-targeted")return ie(t,e,i);const o=q(t);if(i.stateProjectionPolicy==="story-targeted")return o?E(t,e,i,o,i.structuralRequired?"structural-required":"targeted-story",[i.structuralRequired?"structural-required":"targeted-story"]):i.targetOptional?g(t,e,i,["optional-story-target-missing-summary-only"]):i.structuralRequired?y(t,e,i,"structural-required",["structural-target-missing-full-state"]):g(t,e,i,["story-target-missing-summary-only"]);if(i.stateProjectionPolicy==="adaptive-targeted"){if(o&&e.stories[o])return E(t,e,i,o,"targeted-story",["adaptive-story-targeted"]);const c=S(t,e);return c?T(t,e,i,c,"targeted-epic",["adaptive-epic-targeted"]):g(t,e,i,["adaptive-summary-only","target-unresolved-summary-only"])}if(i.stateProjectionPolicy==="epic-targeted"){const c=S(t,e);return c?T(t,e,i,c,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"]):g(t,e,i,["epic-target-missing-summary-only"])}return i.stateProjectionPolicy==="continuity-scoped"?g(t,e,i,["continuity-scoped-summary-only"]):g(t,e,i,["policy-full-summary-only"])}catch{return y(t,e,null,"full-compatible",["projection-error-full-state"])}}export{le as degradeStateSnapshotForPayloadLimit,pe as projectStateSnapshotForInvoke};
@@ -2,4 +2,4 @@
2
2
  * @license FSL-1.1
3
3
  * Copyright (c) 2026 OrNexus AI
4
4
  */
5
- export { OfflineTelemetryQueue, type TelemetryEvent, type QueueConfig, type QueueStats, type FlushResult } from './offline-queue.js';
5
+ export { OfflineTelemetryQueue, validateTelemetryEvent, type TelemetryEvent, type QueueConfig, type QueueStats, type FlushResult, } from './offline-queue.js';
@@ -1 +1 @@
1
- import{OfflineTelemetryQueue as r}from"./offline-queue.js";export{r as OfflineTelemetryQueue};
1
+ import{OfflineTelemetryQueue as l,validateTelemetryEvent as r}from"./offline-queue.js";export{l as OfflineTelemetryQueue,r as validateTelemetryEvent};