@ornexus/neocortex 4.60.16

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 (235) hide show
  1. package/LICENSE +56 -0
  2. package/LICENSE-COMMERCIAL.md +70 -0
  3. package/README.md +58 -0
  4. package/dist/sbom.cdx.json +11159 -0
  5. package/docs/install/coderabbit-manual-setup.md +86 -0
  6. package/docs/install/installer-diagnostics.md +107 -0
  7. package/docs/install/linux-global-install.md +97 -0
  8. package/install.js +572 -0
  9. package/install.ps1 +2214 -0
  10. package/install.sh +2013 -0
  11. package/package.json +132 -0
  12. package/packages/client/dist/adapters/adapter-registry.d.ts +61 -0
  13. package/packages/client/dist/adapters/adapter-registry.js +1 -0
  14. package/packages/client/dist/adapters/antigravity-adapter.d.ts +18 -0
  15. package/packages/client/dist/adapters/antigravity-adapter.js +2 -0
  16. package/packages/client/dist/adapters/claude-code-adapter.d.ts +19 -0
  17. package/packages/client/dist/adapters/claude-code-adapter.js +3 -0
  18. package/packages/client/dist/adapters/codex-adapter.d.ts +19 -0
  19. package/packages/client/dist/adapters/codex-adapter.js +2 -0
  20. package/packages/client/dist/adapters/cursor-adapter.d.ts +19 -0
  21. package/packages/client/dist/adapters/cursor-adapter.js +4 -0
  22. package/packages/client/dist/adapters/gemini-adapter.d.ts +18 -0
  23. package/packages/client/dist/adapters/gemini-adapter.js +2 -0
  24. package/packages/client/dist/adapters/index.d.ts +19 -0
  25. package/packages/client/dist/adapters/index.js +1 -0
  26. package/packages/client/dist/adapters/platform-detector.d.ts +48 -0
  27. package/packages/client/dist/adapters/platform-detector.js +1 -0
  28. package/packages/client/dist/adapters/target-adapter.d.ts +70 -0
  29. package/packages/client/dist/adapters/target-adapter.js +0 -0
  30. package/packages/client/dist/adapters/vscode-adapter.d.ts +19 -0
  31. package/packages/client/dist/adapters/vscode-adapter.js +2 -0
  32. package/packages/client/dist/agent/refresh-stubs.d.ts +90 -0
  33. package/packages/client/dist/agent/refresh-stubs.js +2 -0
  34. package/packages/client/dist/agent/update-agent-yaml.d.ts +26 -0
  35. package/packages/client/dist/agent/update-agent-yaml.js +1 -0
  36. package/packages/client/dist/agent/update-description.d.ts +45 -0
  37. package/packages/client/dist/agent/update-description.js +1 -0
  38. package/packages/client/dist/cache/crypto-utils.d.ts +30 -0
  39. package/packages/client/dist/cache/crypto-utils.js +1 -0
  40. package/packages/client/dist/cache/encrypted-cache.d.ts +30 -0
  41. package/packages/client/dist/cache/encrypted-cache.js +1 -0
  42. package/packages/client/dist/cache/in-memory-asset-cache.d.ts +62 -0
  43. package/packages/client/dist/cache/in-memory-asset-cache.js +1 -0
  44. package/packages/client/dist/cache/index.d.ts +13 -0
  45. package/packages/client/dist/cache/index.js +1 -0
  46. package/packages/client/dist/cache/protected-pi-boundary.d.ts +19 -0
  47. package/packages/client/dist/cache/protected-pi-boundary.js +1 -0
  48. package/packages/client/dist/checkpoint/checkpoint-client-reader.d.ts +45 -0
  49. package/packages/client/dist/checkpoint/checkpoint-client-reader.js +2 -0
  50. package/packages/client/dist/checkpoint/index.d.ts +12 -0
  51. package/packages/client/dist/checkpoint/index.js +1 -0
  52. package/packages/client/dist/checkpoint/shared-checkpoint-types.d.ts +85 -0
  53. package/packages/client/dist/checkpoint/shared-checkpoint-types.js +1 -0
  54. package/packages/client/dist/cli.d.ts +14 -0
  55. package/packages/client/dist/cli.js +81 -0
  56. package/packages/client/dist/commands/activate.d.ts +55 -0
  57. package/packages/client/dist/commands/activate.js +8 -0
  58. package/packages/client/dist/commands/cache-status.d.ts +39 -0
  59. package/packages/client/dist/commands/cache-status.js +2 -0
  60. package/packages/client/dist/commands/invoke.d.ts +546 -0
  61. package/packages/client/dist/commands/invoke.js +140 -0
  62. package/packages/client/dist/commands/refresh-memory.d.ts +11 -0
  63. package/packages/client/dist/commands/refresh-memory.js +1 -0
  64. package/packages/client/dist/config/resolver-selection.d.ts +40 -0
  65. package/packages/client/dist/config/resolver-selection.js +1 -0
  66. package/packages/client/dist/config/secure-config.d.ts +78 -0
  67. package/packages/client/dist/config/secure-config.js +12 -0
  68. package/packages/client/dist/constants.d.ts +25 -0
  69. package/packages/client/dist/constants.js +1 -0
  70. package/packages/client/dist/context/context-collector.d.ts +28 -0
  71. package/packages/client/dist/context/context-collector.js +2 -0
  72. package/packages/client/dist/context/context-sanitizer.d.ts +28 -0
  73. package/packages/client/dist/context/context-sanitizer.js +1 -0
  74. package/packages/client/dist/continuity/autonomous-governance.d.ts +84 -0
  75. package/packages/client/dist/continuity/autonomous-governance.js +1 -0
  76. package/packages/client/dist/continuity/continuity-client-state-store.d.ts +302 -0
  77. package/packages/client/dist/continuity/continuity-client-state-store.js +1 -0
  78. package/packages/client/dist/continuity/invoke-hooks.d.ts +19 -0
  79. package/packages/client/dist/continuity/invoke-hooks.js +1 -0
  80. package/packages/client/dist/continuity/migrations/001-initial-schema.d.ts +11 -0
  81. package/packages/client/dist/continuity/migrations/001-initial-schema.js +263 -0
  82. package/packages/client/dist/continuity/migrations/002-processing-output-summary-indexes.d.ts +11 -0
  83. package/packages/client/dist/continuity/migrations/002-processing-output-summary-indexes.js +7 -0
  84. package/packages/client/dist/continuity/migrations/003-headless-execution-attempts.d.ts +11 -0
  85. package/packages/client/dist/continuity/migrations/003-headless-execution-attempts.js +62 -0
  86. package/packages/client/dist/continuity/migrations/004-outbox-delivery-state.d.ts +11 -0
  87. package/packages/client/dist/continuity/migrations/004-outbox-delivery-state.js +19 -0
  88. package/packages/client/dist/continuity/migrations/005-bounded-headless-queue.d.ts +11 -0
  89. package/packages/client/dist/continuity/migrations/005-bounded-headless-queue.js +35 -0
  90. package/packages/client/dist/continuity/outbox.d.ts +83 -0
  91. package/packages/client/dist/continuity/outbox.js +1 -0
  92. package/packages/client/dist/continuity/runner-bootstrap-policy.d.ts +50 -0
  93. package/packages/client/dist/continuity/runner-bootstrap-policy.js +1 -0
  94. package/packages/client/dist/continuity/sqlite-store.d.ts +926 -0
  95. package/packages/client/dist/continuity/sqlite-store.js +619 -0
  96. package/packages/client/dist/errors/error-messages.d.ts +40 -0
  97. package/packages/client/dist/errors/error-messages.js +2 -0
  98. package/packages/client/dist/graph-retrieval/pre-command-hook.d.ts +34 -0
  99. package/packages/client/dist/graph-retrieval/pre-command-hook.js +1 -0
  100. package/packages/client/dist/graph-retrieval/shared-graph-retrieval-contract.d.ts +99 -0
  101. package/packages/client/dist/graph-retrieval/shared-graph-retrieval-contract.js +1 -0
  102. package/packages/client/dist/i18n/first-run.d.ts +23 -0
  103. package/packages/client/dist/i18n/first-run.js +2 -0
  104. package/packages/client/dist/index.d.ts +56 -0
  105. package/packages/client/dist/index.js +1 -0
  106. package/packages/client/dist/license/index.d.ts +5 -0
  107. package/packages/client/dist/license/index.js +1 -0
  108. package/packages/client/dist/license/license-client.d.ts +79 -0
  109. package/packages/client/dist/license/license-client.js +1 -0
  110. package/packages/client/dist/machine/fingerprint.d.ts +34 -0
  111. package/packages/client/dist/machine/fingerprint.js +2 -0
  112. package/packages/client/dist/machine/index.d.ts +5 -0
  113. package/packages/client/dist/machine/index.js +1 -0
  114. package/packages/client/dist/memory/project-memory-writer.d.ts +74 -0
  115. package/packages/client/dist/memory/project-memory-writer.js +36 -0
  116. package/packages/client/dist/memory/shared-project-memory-types.d.ts +370 -0
  117. package/packages/client/dist/memory/shared-project-memory-types.js +2 -0
  118. package/packages/client/dist/policy/architecture-policy.d.ts +40 -0
  119. package/packages/client/dist/policy/architecture-policy.js +2 -0
  120. package/packages/client/dist/policy/index.d.ts +8 -0
  121. package/packages/client/dist/policy/index.js +1 -0
  122. package/packages/client/dist/policy/shared-policy-types.d.ts +89 -0
  123. package/packages/client/dist/policy/shared-policy-types.js +0 -0
  124. package/packages/client/dist/resilience/circuit-breaker.d.ts +70 -0
  125. package/packages/client/dist/resilience/circuit-breaker.js +1 -0
  126. package/packages/client/dist/resilience/degradation-manager.d.ts +67 -0
  127. package/packages/client/dist/resilience/degradation-manager.js +1 -0
  128. package/packages/client/dist/resilience/freshness-indicator.d.ts +59 -0
  129. package/packages/client/dist/resilience/freshness-indicator.js +1 -0
  130. package/packages/client/dist/resilience/index.d.ts +8 -0
  131. package/packages/client/dist/resilience/index.js +1 -0
  132. package/packages/client/dist/resilience/recovery-detector.d.ts +59 -0
  133. package/packages/client/dist/resilience/recovery-detector.js +1 -0
  134. package/packages/client/dist/resolvers/asset-resolver.d.ts +79 -0
  135. package/packages/client/dist/resolvers/asset-resolver.js +0 -0
  136. package/packages/client/dist/resolvers/local-resolver.d.ts +26 -0
  137. package/packages/client/dist/resolvers/local-resolver.js +8 -0
  138. package/packages/client/dist/resolvers/remote-resolver.d.ts +91 -0
  139. package/packages/client/dist/resolvers/remote-resolver.js +1 -0
  140. package/packages/client/dist/runner/binary.d.ts +115 -0
  141. package/packages/client/dist/runner/binary.js +1 -0
  142. package/packages/client/dist/runner/cli.d.ts +168 -0
  143. package/packages/client/dist/runner/cli.js +70 -0
  144. package/packages/client/dist/runner/headless/adapters.d.ts +20 -0
  145. package/packages/client/dist/runner/headless/adapters.js +1 -0
  146. package/packages/client/dist/runner/headless/claude-code-adapter.d.ts +8 -0
  147. package/packages/client/dist/runner/headless/claude-code-adapter.js +1 -0
  148. package/packages/client/dist/runner/headless/fake-adapter.d.ts +8 -0
  149. package/packages/client/dist/runner/headless/fake-adapter.js +1 -0
  150. package/packages/client/dist/runner/headless/opencode-adapter.d.ts +15 -0
  151. package/packages/client/dist/runner/headless/opencode-adapter.js +2 -0
  152. package/packages/client/dist/runner/headless/resolver.d.ts +68 -0
  153. package/packages/client/dist/runner/headless/resolver.js +1 -0
  154. package/packages/client/dist/runner/headless/run-yolo.d.ts +59 -0
  155. package/packages/client/dist/runner/headless/run-yolo.js +1 -0
  156. package/packages/client/dist/runner/headless/run-yoloop.d.ts +113 -0
  157. package/packages/client/dist/runner/headless/run-yoloop.js +1 -0
  158. package/packages/client/dist/runner/headless/types.d.ts +194 -0
  159. package/packages/client/dist/runner/headless/types.js +2 -0
  160. package/packages/client/dist/runner/local-console.d.ts +83 -0
  161. package/packages/client/dist/runner/local-console.js +13 -0
  162. package/packages/client/dist/runner/portal-sync-worker.d.ts +184 -0
  163. package/packages/client/dist/runner/portal-sync-worker.js +1 -0
  164. package/packages/client/dist/runner/project-identity.d.ts +19 -0
  165. package/packages/client/dist/runner/project-identity.js +1 -0
  166. package/packages/client/dist/runner/scheduler.d.ts +186 -0
  167. package/packages/client/dist/runner/scheduler.js +7 -0
  168. package/packages/client/dist/runner-cli.d.ts +9 -0
  169. package/packages/client/dist/runner-cli.js +3 -0
  170. package/packages/client/dist/state/project-state-snapshot.d.ts +24 -0
  171. package/packages/client/dist/state/project-state-snapshot.js +1 -0
  172. package/packages/client/dist/state/state-json-repair.d.ts +74 -0
  173. package/packages/client/dist/state/state-json-repair.js +3 -0
  174. package/packages/client/dist/telemetry/index.d.ts +5 -0
  175. package/packages/client/dist/telemetry/index.js +1 -0
  176. package/packages/client/dist/telemetry/offline-queue.d.ts +57 -0
  177. package/packages/client/dist/telemetry/offline-queue.js +1 -0
  178. package/packages/client/dist/tier/index.d.ts +5 -0
  179. package/packages/client/dist/tier/index.js +1 -0
  180. package/packages/client/dist/tier/tier-aware-client.d.ts +105 -0
  181. package/packages/client/dist/tier/tier-aware-client.js +1 -0
  182. package/packages/client/dist/types/index.d.ts +140 -0
  183. package/packages/client/dist/types/index.js +1 -0
  184. package/packages/client/dist/yoloop/discovery-hook.d.ts +85 -0
  185. package/packages/client/dist/yoloop/discovery-hook.js +2 -0
  186. package/packages/client/dist/yoloop/index.d.ts +10 -0
  187. package/packages/client/dist/yoloop/index.js +1 -0
  188. package/packages/client/dist/yoloop/invoke-hooks.d.ts +127 -0
  189. package/packages/client/dist/yoloop/invoke-hooks.js +5 -0
  190. package/packages/client/dist/yoloop/shared-discover-epics.d.ts +289 -0
  191. package/packages/client/dist/yoloop/shared-discover-epics.js +1 -0
  192. package/packages/client/dist/yoloop/shared-yoloop-types.d.ts +172 -0
  193. package/packages/client/dist/yoloop/shared-yoloop-types.js +1 -0
  194. package/packages/client/dist/yoloop/yoloop-client-state-store.d.ts +124 -0
  195. package/packages/client/dist/yoloop/yoloop-client-state-store.js +1 -0
  196. package/postinstall.js +754 -0
  197. package/targets-stubs/antigravity/README.md +36 -0
  198. package/targets-stubs/antigravity/gemini.md +29 -0
  199. package/targets-stubs/antigravity/install-antigravity.sh +153 -0
  200. package/targets-stubs/antigravity/mcp-config.json +30 -0
  201. package/targets-stubs/antigravity/skill/SKILL.md +166 -0
  202. package/targets-stubs/claude-code/.mcp.json +32 -0
  203. package/targets-stubs/claude-code/README.md +20 -0
  204. package/targets-stubs/claude-code/neocortex-root.agent.yaml +42 -0
  205. package/targets-stubs/claude-code/neocortex-root.md +317 -0
  206. package/targets-stubs/claude-code/neocortex.agent.yaml +42 -0
  207. package/targets-stubs/claude-code/neocortex.md +385 -0
  208. package/targets-stubs/codex/AGENTS.md +250 -0
  209. package/targets-stubs/codex/README.md +47 -0
  210. package/targets-stubs/codex/config-mcp.toml +22 -0
  211. package/targets-stubs/codex/install-codex.sh +63 -0
  212. package/targets-stubs/codex/neocortex.toml +33 -0
  213. package/targets-stubs/cursor/README.md +33 -0
  214. package/targets-stubs/cursor/agent.md +211 -0
  215. package/targets-stubs/cursor/install-cursor.sh +50 -0
  216. package/targets-stubs/cursor/mcp.json +30 -0
  217. package/targets-stubs/gemini-cli/README.md +34 -0
  218. package/targets-stubs/gemini-cli/agent.md +241 -0
  219. package/targets-stubs/gemini-cli/agents/neocortex.md +60 -0
  220. package/targets-stubs/gemini-cli/gemini.md +46 -0
  221. package/targets-stubs/gemini-cli/install-gemini.sh +70 -0
  222. package/targets-stubs/gemini-cli/settings-mcp.json +30 -0
  223. package/targets-stubs/kimi/mcp.json +33 -0
  224. package/targets-stubs/kimi/neocortex.md +60 -0
  225. package/targets-stubs/lib/mcp-merge.js +189 -0
  226. package/targets-stubs/openclaw/README.md +12 -0
  227. package/targets-stubs/openclaw/SKILL.md +92 -0
  228. package/targets-stubs/opencode/neocortex-root.md +267 -0
  229. package/targets-stubs/opencode/neocortex.md +65 -0
  230. package/targets-stubs/opencode/opencode-mcp.json +35 -0
  231. package/targets-stubs/vscode/README.md +34 -0
  232. package/targets-stubs/vscode/copilot-instructions.md +47 -0
  233. package/targets-stubs/vscode/install-vscode.sh +72 -0
  234. package/targets-stubs/vscode/mcp.json +36 -0
  235. package/targets-stubs/vscode/neocortex.agent.md +252 -0
@@ -0,0 +1,36 @@
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`---
2
+ description: Neocortex project memory
3
+ alwaysApply: true
4
+ ---
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(`
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(`
13
+ `)?`
14
+ `:`
15
+
16
+ `;return`${e}${d}${r}
17
+ `}function Me(e){return e.endsWith(".mdc")?`---
18
+ description: Neocortex project memory
19
+ alwaysApply: true
20
+ ---
21
+
22
+ `:e.endsWith(".toml")?`[agent]
23
+ name = "neocortex"
24
+ description = "Neocortex project memory wrapper"
25
+
26
+ `:e.endsWith(".agent.md")?`---
27
+ name: neocortex
28
+ description: Neocortex project memory wrapper
29
+ ---
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
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};
@@ -0,0 +1,370 @@
1
+ /**
2
+ * P130.06: Client-side SSoT-Shadow mirror for project memory targets.
3
+ *
4
+ * The published client tarball must not import the workspace-only shared package
5
+ * at runtime. Keep this file in sync with `packages/shared/src/project-memory-*`
6
+ * and enforce drift through the P130.06 release tests.
7
+ */
8
+ export type ProjectMemoryTargetId = 'canonical' | 'claude-code' | 'codex' | 'gemini-cli' | 'antigravity' | 'vscode' | 'cursor' | 'opencode' | 'openclaw' | 'kimi' | 'github-copilot-cli';
9
+ export type ProjectMemoryTemplateKind = 'neocortex-md' | 'claude-md' | 'agents-md' | 'gemini-md' | 'copilot-instructions' | 'cursor-rule';
10
+ export interface ProjectMemoryBudget {
11
+ readonly maxLines: number;
12
+ readonly maxBytes: number;
13
+ }
14
+ export type ProjectMemoryLinkPolicy = 'mandatory-semantic-symlink' | 'symlink-backed-wrapper' | 'safe-include-fallback';
15
+ export interface ProjectMemoryLinkRequirement {
16
+ readonly canonicalSource: typeof CANONICAL_PROJECT_MEMORY_SOURCE;
17
+ readonly semanticFileRequired: boolean;
18
+ readonly symlinkBacked: boolean;
19
+ readonly wrapperAllowed: boolean;
20
+ readonly includeFallbackAllowed: boolean;
21
+ readonly requiresWrapperPreservation: boolean;
22
+ readonly fallbackIsCompatibilityRemediation: boolean;
23
+ readonly policy: ProjectMemoryLinkPolicy;
24
+ readonly notes: string;
25
+ }
26
+ export interface ProjectMemoryTarget {
27
+ readonly targetId: ProjectMemoryTargetId;
28
+ readonly platformName: string;
29
+ readonly canonicalSource: typeof CANONICAL_PROJECT_MEMORY_SOURCE;
30
+ readonly primaryFile: string;
31
+ readonly secondaryFiles: readonly string[];
32
+ readonly ownedBlockName: string;
33
+ readonly templateKind: ProjectMemoryTemplateKind;
34
+ readonly budget: ProjectMemoryBudget;
35
+ readonly linkRequirement: ProjectMemoryLinkRequirement;
36
+ readonly bidirectionalReference: ProjectMemoryBidirectionalReference;
37
+ readonly requiresWrapperPreservation: boolean;
38
+ readonly notes: string;
39
+ }
40
+ export interface ProjectMemoryBidirectionalReference {
41
+ readonly canonicalSource: typeof CANONICAL_PROJECT_MEMORY_SOURCE;
42
+ readonly resolvesVia: ProjectMemoryLinkPolicy;
43
+ readonly feedbackTrigger: '*update-memory';
44
+ readonly guidance: string;
45
+ }
46
+ export type ArchitectureReferenceSource = 'architecture-root' | 'fallback-file';
47
+ export interface ArchitectureReference {
48
+ readonly path: string;
49
+ readonly title: string;
50
+ readonly purpose: string;
51
+ readonly suggestedUsage: string;
52
+ readonly source: ArchitectureReferenceSource;
53
+ }
54
+ export interface BootstrapArchitectureMemory {
55
+ readonly universalLaws?: readonly string[];
56
+ readonly businessContext?: readonly string[];
57
+ readonly activeContext?: readonly string[];
58
+ readonly repositoryMap?: readonly string[];
59
+ readonly environmentPractices?: readonly string[];
60
+ readonly platformMemoryContract?: readonly string[];
61
+ readonly maintenanceRules?: readonly string[];
62
+ readonly importantReferences?: readonly ArchitectureReference[];
63
+ readonly architectureReferences?: readonly ArchitectureReference[];
64
+ readonly heuristics?: readonly string[];
65
+ }
66
+ export declare const CANONICAL_PROJECT_MEMORY_SOURCE: "NEOCORTEX.md";
67
+ export declare const PROJECT_MEMORY_TARGET_IDS: readonly ["claude-code", "codex", "gemini-cli", "antigravity", "vscode", "cursor", "opencode", "openclaw", "kimi", "github-copilot-cli"];
68
+ export declare const PROJECT_MEMORY_TARGETS: {
69
+ readonly canonical: {
70
+ readonly targetId: "canonical";
71
+ readonly platformName: "Neocortex Canonical Memory";
72
+ readonly canonicalSource: "NEOCORTEX.md";
73
+ readonly primaryFile: "NEOCORTEX.md";
74
+ readonly secondaryFiles: readonly ["AGENTS.md", "CLAUDE.md", "GEMINI.md"];
75
+ readonly ownedBlockName: "NEOCORTEX-MEMORY";
76
+ readonly templateKind: "neocortex-md";
77
+ readonly budget: {
78
+ readonly maxLines: 220;
79
+ readonly maxBytes: 18000;
80
+ };
81
+ readonly linkRequirement: {
82
+ readonly canonicalSource: "NEOCORTEX.md";
83
+ readonly semanticFileRequired: true;
84
+ readonly symlinkBacked: true;
85
+ readonly wrapperAllowed: false;
86
+ readonly includeFallbackAllowed: false;
87
+ readonly requiresWrapperPreservation: false;
88
+ readonly fallbackIsCompatibilityRemediation: true;
89
+ readonly policy: "mandatory-semantic-symlink";
90
+ readonly notes: "Semantic platform memory file must resolve to NEOCORTEX.md through a symlink; do not replace it with an unrelated wrapper or copied frontmatter.";
91
+ };
92
+ readonly bidirectionalReference: ProjectMemoryBidirectionalReference;
93
+ readonly requiresWrapperPreservation: false;
94
+ readonly notes: "Canonical compact project memory source for platform symlinks and wrappers. Store only summaries, indexes, and links to architecture docs here.";
95
+ };
96
+ readonly 'claude-code': {
97
+ readonly targetId: "claude-code";
98
+ readonly platformName: "Claude Code";
99
+ readonly canonicalSource: "NEOCORTEX.md";
100
+ readonly primaryFile: "CLAUDE.md";
101
+ readonly secondaryFiles: readonly [".claude/agents/neocortex.md"];
102
+ readonly ownedBlockName: "NEOCORTEX-MEMORY";
103
+ readonly templateKind: "claude-md";
104
+ readonly budget: {
105
+ readonly maxLines: 320;
106
+ readonly maxBytes: 28000;
107
+ };
108
+ readonly linkRequirement: {
109
+ readonly canonicalSource: "NEOCORTEX.md";
110
+ readonly semanticFileRequired: true;
111
+ readonly symlinkBacked: true;
112
+ readonly wrapperAllowed: false;
113
+ readonly includeFallbackAllowed: false;
114
+ readonly requiresWrapperPreservation: false;
115
+ readonly fallbackIsCompatibilityRemediation: true;
116
+ readonly policy: "mandatory-semantic-symlink";
117
+ readonly notes: "Semantic platform memory file must resolve to NEOCORTEX.md through a symlink; do not replace it with an unrelated wrapper or copied frontmatter.";
118
+ };
119
+ readonly bidirectionalReference: ProjectMemoryBidirectionalReference;
120
+ readonly requiresWrapperPreservation: false;
121
+ readonly notes: "Claude Code project memory. Resolve to NEOCORTEX.md; keep root content concise and link deeper docs with @path references.";
122
+ };
123
+ readonly codex: {
124
+ readonly targetId: "codex";
125
+ readonly platformName: "Codex CLI";
126
+ readonly canonicalSource: "NEOCORTEX.md";
127
+ readonly primaryFile: "AGENTS.md";
128
+ readonly secondaryFiles: readonly [".codex/agents/neocortex.toml"];
129
+ readonly ownedBlockName: "NEOCORTEX-MEMORY";
130
+ readonly templateKind: "agents-md";
131
+ readonly budget: {
132
+ readonly maxLines: 220;
133
+ readonly maxBytes: 18000;
134
+ };
135
+ readonly linkRequirement: {
136
+ readonly canonicalSource: "NEOCORTEX.md";
137
+ readonly semanticFileRequired: true;
138
+ readonly symlinkBacked: true;
139
+ readonly wrapperAllowed: false;
140
+ readonly includeFallbackAllowed: false;
141
+ readonly requiresWrapperPreservation: false;
142
+ readonly fallbackIsCompatibilityRemediation: true;
143
+ readonly policy: "mandatory-semantic-symlink";
144
+ readonly notes: "Semantic platform memory file must resolve to NEOCORTEX.md through a symlink; do not replace it with an unrelated wrapper or copied frontmatter.";
145
+ };
146
+ readonly bidirectionalReference: ProjectMemoryBidirectionalReference;
147
+ readonly requiresWrapperPreservation: true;
148
+ readonly notes: "Codex root instructions. Uppercase AGENTS.md is required on case-sensitive filesystems.";
149
+ };
150
+ readonly 'gemini-cli': {
151
+ readonly targetId: "gemini-cli";
152
+ readonly platformName: "Gemini CLI";
153
+ readonly canonicalSource: "NEOCORTEX.md";
154
+ readonly primaryFile: "GEMINI.md";
155
+ readonly secondaryFiles: readonly [".gemini/agents/neocortex.md"];
156
+ readonly ownedBlockName: "NEOCORTEX-MEMORY";
157
+ readonly templateKind: "gemini-md";
158
+ readonly budget: {
159
+ readonly maxLines: 260;
160
+ readonly maxBytes: 22000;
161
+ };
162
+ readonly linkRequirement: {
163
+ readonly canonicalSource: "NEOCORTEX.md";
164
+ readonly semanticFileRequired: true;
165
+ readonly symlinkBacked: true;
166
+ readonly wrapperAllowed: false;
167
+ readonly includeFallbackAllowed: false;
168
+ readonly requiresWrapperPreservation: false;
169
+ readonly fallbackIsCompatibilityRemediation: true;
170
+ readonly policy: "mandatory-semantic-symlink";
171
+ readonly notes: "Semantic platform memory file must resolve to NEOCORTEX.md through a symlink; do not replace it with an unrelated wrapper or copied frontmatter.";
172
+ };
173
+ readonly bidirectionalReference: ProjectMemoryBidirectionalReference;
174
+ readonly requiresWrapperPreservation: false;
175
+ readonly notes: "Gemini CLI context file. Prefer shallow @file.md imports for detailed architecture docs.";
176
+ };
177
+ readonly antigravity: {
178
+ readonly targetId: "antigravity";
179
+ readonly platformName: "Antigravity";
180
+ readonly canonicalSource: "NEOCORTEX.md";
181
+ readonly primaryFile: "GEMINI.md";
182
+ readonly secondaryFiles: readonly [".gemini/agents/neocortex.md"];
183
+ readonly ownedBlockName: "NEOCORTEX-MEMORY";
184
+ readonly templateKind: "gemini-md";
185
+ readonly budget: {
186
+ readonly maxLines: 260;
187
+ readonly maxBytes: 22000;
188
+ };
189
+ readonly linkRequirement: {
190
+ readonly canonicalSource: "NEOCORTEX.md";
191
+ readonly semanticFileRequired: true;
192
+ readonly symlinkBacked: true;
193
+ readonly wrapperAllowed: false;
194
+ readonly includeFallbackAllowed: false;
195
+ readonly requiresWrapperPreservation: false;
196
+ readonly fallbackIsCompatibilityRemediation: true;
197
+ readonly policy: "mandatory-semantic-symlink";
198
+ readonly notes: "Semantic platform memory file must resolve to NEOCORTEX.md through a symlink; do not replace it with an unrelated wrapper or copied frontmatter.";
199
+ };
200
+ readonly bidirectionalReference: ProjectMemoryBidirectionalReference;
201
+ readonly requiresWrapperPreservation: false;
202
+ readonly notes: "Antigravity currently shares GEMINI.md behavior with the Gemini target stubs.";
203
+ };
204
+ readonly vscode: {
205
+ readonly targetId: "vscode";
206
+ readonly platformName: "VS Code / GitHub Copilot";
207
+ readonly canonicalSource: "NEOCORTEX.md";
208
+ readonly primaryFile: ".github/copilot-instructions.md";
209
+ readonly secondaryFiles: readonly [".github/instructions/neocortex.instructions.md", ".github/agents/neocortex.agent.md"];
210
+ readonly ownedBlockName: "NEOCORTEX-MEMORY";
211
+ readonly templateKind: "copilot-instructions";
212
+ readonly budget: {
213
+ readonly maxLines: 180;
214
+ readonly maxBytes: 14000;
215
+ };
216
+ readonly linkRequirement: {
217
+ readonly canonicalSource: "NEOCORTEX.md";
218
+ readonly semanticFileRequired: true;
219
+ readonly symlinkBacked: true;
220
+ readonly wrapperAllowed: true;
221
+ readonly includeFallbackAllowed: false;
222
+ readonly requiresWrapperPreservation: true;
223
+ readonly fallbackIsCompatibilityRemediation: true;
224
+ readonly policy: "symlink-backed-wrapper";
225
+ readonly notes: "Platform wrapper/frontmatter is allowed only when the semantic memory payload remains symlink-backed by NEOCORTEX.md.";
226
+ };
227
+ readonly bidirectionalReference: ProjectMemoryBidirectionalReference;
228
+ readonly requiresWrapperPreservation: true;
229
+ readonly notes: "VS Code and GitHub Copilot always-on repository instructions.";
230
+ };
231
+ readonly cursor: {
232
+ readonly targetId: "cursor";
233
+ readonly platformName: "Cursor";
234
+ readonly canonicalSource: "NEOCORTEX.md";
235
+ readonly primaryFile: ".cursor/rules/neocortex.mdc";
236
+ readonly secondaryFiles: readonly ["AGENTS.md"];
237
+ readonly ownedBlockName: "NEOCORTEX-MEMORY";
238
+ readonly templateKind: "cursor-rule";
239
+ readonly budget: {
240
+ readonly maxLines: 180;
241
+ readonly maxBytes: 14000;
242
+ };
243
+ readonly linkRequirement: {
244
+ readonly canonicalSource: "NEOCORTEX.md";
245
+ readonly semanticFileRequired: true;
246
+ readonly symlinkBacked: true;
247
+ readonly wrapperAllowed: true;
248
+ readonly includeFallbackAllowed: false;
249
+ readonly requiresWrapperPreservation: true;
250
+ readonly fallbackIsCompatibilityRemediation: true;
251
+ readonly policy: "symlink-backed-wrapper";
252
+ readonly notes: "Platform wrapper/frontmatter is allowed only when the semantic memory payload remains symlink-backed by NEOCORTEX.md.";
253
+ };
254
+ readonly bidirectionalReference: ProjectMemoryBidirectionalReference;
255
+ readonly requiresWrapperPreservation: true;
256
+ readonly notes: "Cursor rule memory. Use AGENTS.md as compatibility fallback when Cursor rules are absent.";
257
+ };
258
+ readonly opencode: {
259
+ readonly targetId: "opencode";
260
+ readonly platformName: "OpenCode";
261
+ readonly canonicalSource: "NEOCORTEX.md";
262
+ readonly primaryFile: "AGENTS.md";
263
+ readonly secondaryFiles: readonly [".opencode/AGENTS.md", ".opencode/agents/neocortex-root.md", ".opencode/agents/neocortex.md", ".agent/skills/neocortex/SKILL.md"];
264
+ readonly ownedBlockName: "NEOCORTEX-MEMORY";
265
+ readonly templateKind: "agents-md";
266
+ readonly budget: {
267
+ readonly maxLines: 220;
268
+ readonly maxBytes: 18000;
269
+ };
270
+ readonly linkRequirement: {
271
+ readonly canonicalSource: "NEOCORTEX.md";
272
+ readonly semanticFileRequired: true;
273
+ readonly symlinkBacked: true;
274
+ readonly wrapperAllowed: false;
275
+ readonly includeFallbackAllowed: false;
276
+ readonly requiresWrapperPreservation: false;
277
+ readonly fallbackIsCompatibilityRemediation: true;
278
+ readonly policy: "mandatory-semantic-symlink";
279
+ readonly notes: "Semantic platform memory file must resolve to NEOCORTEX.md through a symlink; do not replace it with an unrelated wrapper or copied frontmatter.";
280
+ };
281
+ readonly bidirectionalReference: ProjectMemoryBidirectionalReference;
282
+ readonly requiresWrapperPreservation: true;
283
+ readonly notes: "OpenCode agent memory. It consumes AGENTS.md-compatible instructions and must resolve to canonical NEOCORTEX.md.";
284
+ };
285
+ readonly openclaw: {
286
+ readonly targetId: "openclaw";
287
+ readonly platformName: "OpenClaw";
288
+ readonly canonicalSource: "NEOCORTEX.md";
289
+ readonly primaryFile: ".openclaw/skills/neocortex/SKILL.md";
290
+ readonly secondaryFiles: readonly ["~/.openclaw/skills/neocortex/SKILL.md"];
291
+ readonly ownedBlockName: "NEOCORTEX-MEMORY";
292
+ readonly templateKind: "agents-md";
293
+ readonly budget: {
294
+ readonly maxLines: 220;
295
+ readonly maxBytes: 18000;
296
+ };
297
+ readonly linkRequirement: {
298
+ readonly canonicalSource: "NEOCORTEX.md";
299
+ readonly semanticFileRequired: true;
300
+ readonly symlinkBacked: true;
301
+ readonly wrapperAllowed: true;
302
+ readonly includeFallbackAllowed: true;
303
+ readonly requiresWrapperPreservation: true;
304
+ readonly fallbackIsCompatibilityRemediation: true;
305
+ readonly policy: "safe-include-fallback";
306
+ readonly notes: "Use a safe include/import only for platforms that cannot consume symlinks directly; the include must resolve back to NEOCORTEX.md.";
307
+ };
308
+ readonly bidirectionalReference: ProjectMemoryBidirectionalReference;
309
+ readonly requiresWrapperPreservation: true;
310
+ readonly 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.";
311
+ };
312
+ readonly kimi: {
313
+ readonly targetId: "kimi";
314
+ readonly platformName: "Kimi";
315
+ readonly canonicalSource: "NEOCORTEX.md";
316
+ readonly primaryFile: "KIMI.md";
317
+ readonly secondaryFiles: readonly ["AGENTS.md", ".kimi/skills/neocortex/SKILL.md"];
318
+ readonly ownedBlockName: "NEOCORTEX-MEMORY";
319
+ readonly templateKind: "agents-md";
320
+ readonly budget: {
321
+ readonly maxLines: 220;
322
+ readonly maxBytes: 18000;
323
+ };
324
+ readonly linkRequirement: {
325
+ readonly canonicalSource: "NEOCORTEX.md";
326
+ readonly semanticFileRequired: true;
327
+ readonly symlinkBacked: true;
328
+ readonly wrapperAllowed: true;
329
+ readonly includeFallbackAllowed: true;
330
+ readonly requiresWrapperPreservation: true;
331
+ readonly fallbackIsCompatibilityRemediation: true;
332
+ readonly policy: "safe-include-fallback";
333
+ readonly notes: "Use a safe include/import only for platforms that cannot consume symlinks directly; the include must resolve back to NEOCORTEX.md.";
334
+ };
335
+ readonly bidirectionalReference: ProjectMemoryBidirectionalReference;
336
+ readonly requiresWrapperPreservation: true;
337
+ readonly notes: "Kimi memory entrypoint. Prefer a symlink to NEOCORTEX.md; use a compact include only if the host cannot follow symlinks.";
338
+ };
339
+ readonly 'github-copilot-cli': {
340
+ readonly targetId: "github-copilot-cli";
341
+ readonly platformName: "GitHub Copilot CLI / gh alias";
342
+ readonly canonicalSource: "NEOCORTEX.md";
343
+ readonly primaryFile: ".github/copilot-instructions.md";
344
+ readonly secondaryFiles: readonly ["AGENTS.md"];
345
+ readonly ownedBlockName: "NEOCORTEX-MEMORY";
346
+ readonly templateKind: "copilot-instructions";
347
+ readonly budget: {
348
+ readonly maxLines: 180;
349
+ readonly maxBytes: 14000;
350
+ };
351
+ readonly linkRequirement: {
352
+ readonly canonicalSource: "NEOCORTEX.md";
353
+ readonly semanticFileRequired: true;
354
+ readonly symlinkBacked: true;
355
+ readonly wrapperAllowed: true;
356
+ readonly includeFallbackAllowed: true;
357
+ readonly requiresWrapperPreservation: true;
358
+ readonly fallbackIsCompatibilityRemediation: true;
359
+ readonly policy: "safe-include-fallback";
360
+ readonly notes: "Use a safe include/import only for platforms that cannot consume symlinks directly; the include must resolve back to NEOCORTEX.md.";
361
+ };
362
+ readonly bidirectionalReference: ProjectMemoryBidirectionalReference;
363
+ readonly requiresWrapperPreservation: true;
364
+ readonly notes: "GitHub Copilot CLI or gh alias instructions. Resolve compact memory back to NEOCORTEX.md without copying private prompt bodies.";
365
+ };
366
+ };
367
+ export declare function getProjectMemoryTarget(targetId: ProjectMemoryTargetId): ProjectMemoryTarget;
368
+ export declare function isProjectMemoryTargetId(value: string): value is ProjectMemoryTargetId;
369
+ export declare function listProjectMemoryTargets(): readonly ProjectMemoryTarget[];
370
+ export declare function renderArchitectureReferenceTable(references: readonly ArchitectureReference[]): string;
@@ -0,0 +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};
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
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
+ import type { ArchitecturePolicy, ArchitecturePolicyValidationResult } from './shared-policy-types.js';
14
+ /**
15
+ * Relative path from project root to consumer policy file.
16
+ * Consumer copies `architecture-policy.template.json` (from repo root) to
17
+ * this path and edits.
18
+ */
19
+ export declare const POLICY_FILE_PATH = ".neocortex/architecture-policy.json";
20
+ /**
21
+ * Pure function validator. Zero I/O. Deterministic.
22
+ *
23
+ * Returns `ArchitecturePolicyValidationResult` with:
24
+ * - `valid: true` iff all required fields correct and no hard errors
25
+ * - `errors`: hard failures (schema version mismatch, bad mode, type errors)
26
+ * - `warnings`: soft issues (unknown optional fields -- forward-compat)
27
+ */
28
+ export declare function validatePolicy(candidate: unknown): ArchitecturePolicyValidationResult;
29
+ /**
30
+ * Async reader. NEVER throws.
31
+ *
32
+ * Returns `undefined` when:
33
+ * - file does not exist (ENOENT; silent, expected default)
34
+ * - permission denied (EACCES; warns stderr)
35
+ * - malformed JSON (warns stderr with path)
36
+ * - schema invalid (warns stderr with error list)
37
+ *
38
+ * Returns typed `ArchitecturePolicy` on full success.
39
+ */
40
+ export declare function readArchitecturePolicy(projectRoot: string): Promise<ArchitecturePolicy | undefined>;
@@ -0,0 +1,2 @@
1
+ import{readFile as u}from"node:fs/promises";import{join as d}from"node:path";const p=".neocortex/architecture-policy.json",f=Object.freeze(["interactive","yoloop_friendly","fully_automated"]),y=Object.freeze(["aws","gcp","oci","azure","any"]),_=Object.freeze(["REST","GraphQL","tRPC"]),g=Object.freeze(["sync","async","hybrid"]),m=Object.freeze(["mobile-first","desktop-first","responsive"]),O=Object.freeze(["conservative","balanced","aggressive"]),b=Object.freeze(["TDD","test-after","BDD"]),h=new Set(["primary_persona","cloud_provider","api_style","integration_style","ui_priority","refactor_aggressiveness","test_workflow"]);function v(n){const r=[],o=[];if(typeof n!="object"||n===null||Array.isArray(n))return{valid:!1,errors:Object.freeze(["Policy must be a plain object"]),warnings:Object.freeze([])};const t=n;if(t.schema_version!==1&&r.push(`schema_version must be 1, got ${JSON.stringify(t.schema_version)}`),(typeof t.mode!="string"||!f.includes(t.mode))&&r.push(`mode must be one of [${f.join(", ")}], got ${JSON.stringify(t.mode)}`),t.defaults!==void 0&&t.defaults!==null)if(typeof t.defaults!="object"||Array.isArray(t.defaults))r.push("defaults must be an object");else{const e=t.defaults;for(const c of Object.keys(e))h.has(c)||o.push(`defaults.${c}: unknown field (ignored)`);e.primary_persona!==void 0&&e.primary_persona!==null&&typeof e.primary_persona!="string"&&r.push("defaults.primary_persona must be string or null"),i(e,"cloud_provider",y,r),i(e,"api_style",_,r),i(e,"integration_style",g,r),i(e,"ui_priority",m,r),i(e,"refactor_aggressiveness",O,r),i(e,"test_workflow",b,r)}return t.preserved_interactions!==void 0&&t.preserved_interactions!==null&&(!Array.isArray(t.preserved_interactions)||!t.preserved_interactions.every(e=>typeof e=="string"))&&r.push("preserved_interactions must be array of strings"),{valid:r.length===0,errors:Object.freeze(r),warnings:Object.freeze(o)}}async function A(n){const r=d(n,p);let o;try{o=await u(r,"utf8")}catch(s){if(s.code==="ENOENT")return;const l=s.message??String(s);console.warn(`[Neocortex] architecture-policy read failed (${r}): ${l}`);return}const t=o.replace(/^/,"").replace(/\r\n/g,`
2
+ `);let e;try{e=JSON.parse(t)}catch(s){const a=s.message??String(s);console.warn(`[Neocortex] architecture-policy malformed JSON (${r}): ${a}. Proceeding without policy.`);return}const c=v(e);if(!c.valid){console.warn(`[Neocortex] architecture-policy schema invalid (${r}): ${c.errors.join("; ")}. Proceeding without policy.`);return}return e}function i(n,r,o,t){const e=n[r];e!=null&&(typeof e!="string"||!o.includes(e))&&t.push(`defaults.${r} must be one of [${o.join(", ")}] or null, got ${JSON.stringify(e)}`)}export{p as POLICY_FILE_PATH,A as readArchitecturePolicy,v as validatePolicy};
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license FSL-1.1
3
+ * Copyright (c) 2026 OrNexus AI
4
+ *
5
+ * Barrel export for Epic P107.02 policy reader module.
6
+ */
7
+ export { readArchitecturePolicy, validatePolicy, POLICY_FILE_PATH, } from './architecture-policy.js';
8
+ export type { ArchitecturePolicy, ArchitectureDefaults, ArchitecturePolicyValidationResult, PolicyMode, } from './shared-policy-types.js';
@@ -0,0 +1 @@
1
+ import{readArchitecturePolicy as c,validatePolicy as i,POLICY_FILE_PATH as o}from"./architecture-policy.js";export{o as POLICY_FILE_PATH,c as readArchitecturePolicy,i as validatePolicy};
@@ -0,0 +1,89 @@
1
+ /**
2
+ * P119.02: Inlined byte-identical types from
3
+ * `@neocortex/shared/types/architecture-policy`.
4
+ *
5
+ * SSoT-Shadow pattern (P92.01 server precedent extended by P117.01 to client
6
+ * checkpoint dist + P117.07 to client yoloop dist). Client tarball is published
7
+ * standalone via `@ornexus/neocortex` and does NOT include `@neocortex/shared`
8
+ * as a runtime dependency (workspace package, excluded from tarball per
9
+ * `.npmignore` + `tsconfig.build.json`). Any non-erased import of
10
+ * `@neocortex/shared` in `packages/client/dist/**` causes runtime
11
+ * `ERR_MODULE_NOT_FOUND` on globally installed `@ornexus/neocortex`.
12
+ *
13
+ * Pre-P119.02, three files leaked `import type` statements from
14
+ * `@neocortex/shared` in the published v4.19.1 tarball:
15
+ * - dist/policy/architecture-policy.d.ts
16
+ * - dist/policy/index.d.ts
17
+ * - dist/commands/invoke.d.ts (imported `YoloopPersistedState`)
18
+ *
19
+ * Type-only `import type` is erased at runtime (no module resolution attempt),
20
+ * but produces TS2307 in consumer projects that try to use the types via
21
+ * globally-installed CLI (`npm install -g @ornexus/neocortex`).
22
+ *
23
+ * Sync responsibility: `policy-shared-sync.test.ts` (client-side drift test,
24
+ * mirror of `checkpoint-shared-sync.test.ts` P117.01). Drift test fails CI
25
+ * if these diverge from SSoT canonical at
26
+ * `packages/shared/src/types/architecture-policy.ts`.
27
+ *
28
+ * Defense-in-depth: `validate-pre-publish.js` ships
29
+ * `validateClientNoSharedImport()` (P117.01) scanning client dist for
30
+ * `@neocortex/shared` runtime references. P119.02 expands its scope to also
31
+ * walk `dist/policy/` and `dist/commands/` (in addition to checkpoint + yoloop
32
+ * coverage from P117).
33
+ *
34
+ * DO NOT EDIT WITHOUT also editing
35
+ * `packages/shared/src/types/architecture-policy.ts`.
36
+ */
37
+ /**
38
+ * Policy mode controls how server-side injector treats consumer defaults.
39
+ *
40
+ * - `interactive`: Ask user on every decision (pre-P107 behavior, backward compat).
41
+ * - `yoloop_friendly`: Apply `defaults.*` when set + log audit entry (P107.05).
42
+ * - `fully_automated`: Apply `defaults.*` silently; still preserves `preserved_interactions`.
43
+ */
44
+ export type PolicyMode = 'interactive' | 'yoloop_friendly' | 'fully_automated';
45
+ /**
46
+ * Optional default values that drive step prompt behavior.
47
+ * All fields are optional -- unset fields fall back to interactive questions.
48
+ * Each field maps to a specific stepId via `POLICY_FIELD_BY_STEP` (server-side).
49
+ */
50
+ export interface ArchitectureDefaults {
51
+ /** For step-a-01 PRD generation. Free-form string (e.g. "B2B SaaS buyer"). */
52
+ readonly primary_persona?: string;
53
+ /** For step-a-02 architecture choices. */
54
+ readonly cloud_provider?: 'aws' | 'gcp' | 'oci' | 'azure' | 'any';
55
+ /** For step-a-03 api-contracts. */
56
+ readonly api_style?: 'REST' | 'GraphQL' | 'tRPC';
57
+ /** For step-a-04 api-integrations. */
58
+ readonly integration_style?: 'sync' | 'async' | 'hybrid';
59
+ /** For step-a-08 ux-design. */
60
+ readonly ui_priority?: 'mobile-first' | 'desktop-first' | 'responsive';
61
+ /** For step-r-03 refactor-plan. */
62
+ readonly refactor_aggressiveness?: 'conservative' | 'balanced' | 'aggressive';
63
+ /** For step-c-04 write-spec. */
64
+ readonly test_workflow?: 'TDD' | 'test-after' | 'BDD';
65
+ }
66
+ /**
67
+ * Top-level policy shape persisted in `.neocortex/architecture-policy.json`.
68
+ * Consumer copies `architecture-policy.template.json` from repo root and edits.
69
+ */
70
+ export interface ArchitecturePolicy {
71
+ /** Wire-format version. Must be literal 1 in v1. */
72
+ readonly schema_version: 1;
73
+ readonly mode: PolicyMode;
74
+ readonly defaults?: ArchitectureDefaults;
75
+ /**
76
+ * stepIds that ALWAYS require human interaction, regardless of mode.
77
+ * Defaults to `ARCHITECTURE_POLICY_DEFAULT_PRESERVED` if absent.
78
+ */
79
+ readonly preserved_interactions?: readonly string[];
80
+ }
81
+ /**
82
+ * Output of `validateArchitecturePolicy()` (server-side P107.03 exports validator).
83
+ * Fail-soft shape: validation errors NEVER throw; caller decides action.
84
+ */
85
+ export interface ArchitecturePolicyValidationResult {
86
+ readonly valid: boolean;
87
+ readonly errors: readonly string[];
88
+ readonly warnings: readonly string[];
89
+ }