@jlongo78/agent-spaces 0.9.6 → 0.9.8

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 (917) hide show
  1. package/.next/standalone/.claude/settings.local.json +68 -0
  2. package/.next/standalone/.claude/spaces-env.json +1 -0
  3. package/.next/standalone/.next/BUILD_ID +1 -1
  4. package/.next/standalone/.next/app-path-routes-manifest.json +1 -0
  5. package/.next/standalone/.next/build-manifest.json +2 -2
  6. package/.next/standalone/.next/prerender-manifest.json +3 -3
  7. package/.next/standalone/.next/required-server-files.json +19 -19
  8. package/.next/standalone/.next/routes-manifest.json +6 -0
  9. package/.next/standalone/.next/server/app/(desktop)/admin/analytics/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/(desktop)/admin/users/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/(desktop)/analytics/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/(desktop)/cortex/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/(desktop)/network/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/(desktop)/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(desktop)/projects/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/(desktop)/sessions/[id]/page.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/(desktop)/sessions/[id]/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/(desktop)/sessions/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/(desktop)/settings/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/(desktop)/terminal/page.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/(desktop)/terminal/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/(desktop)/terminal/pane/[id]/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/(desktop)/workspaces/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  26. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  27. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  28. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  29. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  30. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  31. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  32. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  34. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  35. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  36. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  37. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  38. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  39. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  40. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  41. package/.next/standalone/.next/server/app/admin/analytics.html +1 -1
  42. package/.next/standalone/.next/server/app/admin/analytics.rsc +2 -2
  43. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics/__PAGE__.segment.rsc +1 -1
  44. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics.segment.rsc +1 -1
  45. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  46. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  47. package/.next/standalone/.next/server/app/admin/analytics.segments/_full.segment.rsc +2 -2
  48. package/.next/standalone/.next/server/app/admin/analytics.segments/_head.segment.rsc +1 -1
  49. package/.next/standalone/.next/server/app/admin/analytics.segments/_index.segment.rsc +2 -2
  50. package/.next/standalone/.next/server/app/admin/analytics.segments/_tree.segment.rsc +2 -2
  51. package/.next/standalone/.next/server/app/admin/users.html +1 -1
  52. package/.next/standalone/.next/server/app/admin/users.rsc +2 -2
  53. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users/__PAGE__.segment.rsc +1 -1
  54. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users.segment.rsc +1 -1
  55. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  56. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  57. package/.next/standalone/.next/server/app/admin/users.segments/_full.segment.rsc +2 -2
  58. package/.next/standalone/.next/server/app/admin/users.segments/_head.segment.rsc +1 -1
  59. package/.next/standalone/.next/server/app/admin/users.segments/_index.segment.rsc +2 -2
  60. package/.next/standalone/.next/server/app/admin/users.segments/_tree.segment.rsc +2 -2
  61. package/.next/standalone/.next/server/app/analytics.html +1 -1
  62. package/.next/standalone/.next/server/app/analytics.rsc +2 -2
  63. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics/__PAGE__.segment.rsc +1 -1
  64. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics.segment.rsc +1 -1
  65. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  66. package/.next/standalone/.next/server/app/analytics.segments/_full.segment.rsc +2 -2
  67. package/.next/standalone/.next/server/app/analytics.segments/_head.segment.rsc +1 -1
  68. package/.next/standalone/.next/server/app/analytics.segments/_index.segment.rsc +2 -2
  69. package/.next/standalone/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
  70. package/.next/standalone/.next/server/app/api/analytics/overview/route.js +1 -1
  71. package/.next/standalone/.next/server/app/api/analytics/overview/route.js.nft.json +1 -1
  72. package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js +1 -1
  73. package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js.nft.json +1 -1
  74. package/.next/standalone/.next/server/app/api/benchmark/run/route.js +1 -1
  75. package/.next/standalone/.next/server/app/api/benchmark/run/route.js.nft.json +1 -1
  76. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js +1 -1
  77. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js.nft.json +1 -1
  78. package/.next/standalone/.next/server/app/api/benchmark/runs/route.js +1 -1
  79. package/.next/standalone/.next/server/app/api/benchmark/runs/route.js.nft.json +1 -1
  80. package/.next/standalone/.next/server/app/api/benchmark/status/route.js +1 -1
  81. package/.next/standalone/.next/server/app/api/benchmark/status/route.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/api/bulk/route.js +1 -1
  83. package/.next/standalone/.next/server/app/api/bulk/route.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/app/api/config/route.js +1 -1
  85. package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/api/cortex/context/route.js +1 -1
  87. package/.next/standalone/.next/server/app/api/cortex/context/route.js.nft.json +1 -1
  88. package/.next/standalone/.next/server/app/api/cortex/curation/assess/route.js +1 -1
  89. package/.next/standalone/.next/server/app/api/cortex/curation/assess/route.js.nft.json +1 -1
  90. package/.next/standalone/.next/server/app/api/cortex/curation/publish/route.js +1 -1
  91. package/.next/standalone/.next/server/app/api/cortex/curation/publish/route.js.nft.json +1 -1
  92. package/.next/standalone/.next/server/app/api/cortex/curation/refine/route.js +1 -1
  93. package/.next/standalone/.next/server/app/api/cortex/curation/refine/route.js.nft.json +1 -1
  94. package/.next/standalone/.next/server/app/api/cortex/curation/review/route.js +1 -1
  95. package/.next/standalone/.next/server/app/api/cortex/curation/review/route.js.nft.json +1 -1
  96. package/.next/standalone/.next/server/app/api/cortex/curation/seed/route.js +1 -1
  97. package/.next/standalone/.next/server/app/api/cortex/curation/seed/route.js.nft.json +1 -1
  98. package/.next/standalone/.next/server/app/api/cortex/export/route.js +1 -1
  99. package/.next/standalone/.next/server/app/api/cortex/export/route.js.nft.json +1 -1
  100. package/.next/standalone/.next/server/app/api/cortex/federation/pending/route.js +1 -1
  101. package/.next/standalone/.next/server/app/api/cortex/federation/pending/route.js.nft.json +1 -1
  102. package/.next/standalone/.next/server/app/api/cortex/federation/resolve/route.js +1 -1
  103. package/.next/standalone/.next/server/app/api/cortex/federation/resolve/route.js.nft.json +1 -1
  104. package/.next/standalone/.next/server/app/api/cortex/federation/search/route.js +1 -1
  105. package/.next/standalone/.next/server/app/api/cortex/federation/search/route.js.nft.json +1 -1
  106. package/.next/standalone/.next/server/app/api/cortex/federation/teach/route.js +1 -1
  107. package/.next/standalone/.next/server/app/api/cortex/federation/teach/route.js.nft.json +1 -1
  108. package/.next/standalone/.next/server/app/api/cortex/graph/edges/route.js +1 -1
  109. package/.next/standalone/.next/server/app/api/cortex/graph/edges/route.js.nft.json +1 -1
  110. package/.next/standalone/.next/server/app/api/cortex/graph/entities/[id]/route.js +1 -1
  111. package/.next/standalone/.next/server/app/api/cortex/graph/entities/[id]/route.js.nft.json +1 -1
  112. package/.next/standalone/.next/server/app/api/cortex/graph/entities/route.js +1 -1
  113. package/.next/standalone/.next/server/app/api/cortex/graph/entities/route.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/app/api/cortex/graph/populate/route.js +1 -1
  115. package/.next/standalone/.next/server/app/api/cortex/graph/populate/route.js.nft.json +1 -1
  116. package/.next/standalone/.next/server/app/api/cortex/import/route.js +1 -1
  117. package/.next/standalone/.next/server/app/api/cortex/import/route.js.nft.json +1 -1
  118. package/.next/standalone/.next/server/app/api/cortex/import/status/route.js +1 -1
  119. package/.next/standalone/.next/server/app/api/cortex/import/status/route.js.nft.json +1 -1
  120. package/.next/standalone/.next/server/app/api/cortex/ingest/bootstrap/route.js +1 -1
  121. package/.next/standalone/.next/server/app/api/cortex/ingest/bootstrap/route.js.nft.json +1 -1
  122. package/.next/standalone/.next/server/app/api/cortex/ingest/status/route.js +1 -1
  123. package/.next/standalone/.next/server/app/api/cortex/ingest/status/route.js.nft.json +1 -1
  124. package/.next/standalone/.next/server/app/api/cortex/knowledge/[id]/route.js +1 -1
  125. package/.next/standalone/.next/server/app/api/cortex/knowledge/[id]/route.js.nft.json +1 -1
  126. package/.next/standalone/.next/server/app/api/cortex/knowledge/route.js +1 -1
  127. package/.next/standalone/.next/server/app/api/cortex/knowledge/route.js.nft.json +1 -1
  128. package/.next/standalone/.next/server/app/api/cortex/lobes/[id]/route.js +1 -1
  129. package/.next/standalone/.next/server/app/api/cortex/lobes/[id]/route.js.nft.json +1 -1
  130. package/.next/standalone/.next/server/app/api/cortex/lobes/route.js +1 -1
  131. package/.next/standalone/.next/server/app/api/cortex/lobes/route.js.nft.json +1 -1
  132. package/.next/standalone/.next/server/app/api/cortex/lobes/share/route.js +1 -1
  133. package/.next/standalone/.next/server/app/api/cortex/lobes/share/route.js.nft.json +1 -1
  134. package/.next/standalone/.next/server/app/api/cortex/marketplace/browse/route.js +1 -1
  135. package/.next/standalone/.next/server/app/api/cortex/marketplace/browse/route.js.nft.json +1 -1
  136. package/.next/standalone/.next/server/app/api/cortex/marketplace/preview/route.js +1 -1
  137. package/.next/standalone/.next/server/app/api/cortex/marketplace/preview/route.js.nft.json +1 -1
  138. package/.next/standalone/.next/server/app/api/cortex/mcp/call/route.js +1 -1
  139. package/.next/standalone/.next/server/app/api/cortex/mcp/call/route.js.nft.json +1 -1
  140. package/.next/standalone/.next/server/app/api/cortex/mcp/tools/route.js +1 -1
  141. package/.next/standalone/.next/server/app/api/cortex/mcp/tools/route.js.nft.json +1 -1
  142. package/.next/standalone/.next/server/app/api/cortex/search/route.js +1 -1
  143. package/.next/standalone/.next/server/app/api/cortex/search/route.js.nft.json +1 -1
  144. package/.next/standalone/.next/server/app/api/cortex/settings/route.js +1 -1
  145. package/.next/standalone/.next/server/app/api/cortex/settings/route.js.nft.json +1 -1
  146. package/.next/standalone/.next/server/app/api/cortex/status/route.js +1 -1
  147. package/.next/standalone/.next/server/app/api/cortex/status/route.js.nft.json +1 -1
  148. package/.next/standalone/.next/server/app/api/cortex/timeline/route.js +1 -1
  149. package/.next/standalone/.next/server/app/api/cortex/timeline/route.js.nft.json +1 -1
  150. package/.next/standalone/.next/server/app/api/cortex/usage/route.js +1 -1
  151. package/.next/standalone/.next/server/app/api/cortex/usage/route.js.nft.json +1 -1
  152. package/.next/standalone/.next/server/app/api/cortex/workspace/[id]/context/route.js +1 -1
  153. package/.next/standalone/.next/server/app/api/cortex/workspace/[id]/context/route.js.nft.json +1 -1
  154. package/.next/standalone/.next/server/app/api/events/route.js +1 -1
  155. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  156. package/.next/standalone/.next/server/app/api/files/route.js +1 -1
  157. package/.next/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  158. package/.next/standalone/.next/server/app/api/folders/route.js +1 -1
  159. package/.next/standalone/.next/server/app/api/folders/route.js.nft.json +1 -1
  160. package/.next/standalone/.next/server/app/api/network/handshake/route.js +1 -1
  161. package/.next/standalone/.next/server/app/api/network/handshake/route.js.nft.json +1 -1
  162. package/.next/standalone/.next/server/app/api/network/panes/[id]/route.js +1 -1
  163. package/.next/standalone/.next/server/app/api/network/panes/[id]/route.js.nft.json +1 -1
  164. package/.next/standalone/.next/server/app/api/network/panes/route.js +1 -1
  165. package/.next/standalone/.next/server/app/api/network/panes/route.js.nft.json +1 -1
  166. package/.next/standalone/.next/server/app/api/network/projects/route.js +1 -1
  167. package/.next/standalone/.next/server/app/api/network/projects/route.js.nft.json +1 -1
  168. package/.next/standalone/.next/server/app/api/network/search/route.js +1 -1
  169. package/.next/standalone/.next/server/app/api/network/search/route.js.nft.json +1 -1
  170. package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js +1 -1
  171. package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js.nft.json +1 -1
  172. package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js +1 -1
  173. package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js.nft.json +1 -1
  174. package/.next/standalone/.next/server/app/api/network/sessions/route.js +1 -1
  175. package/.next/standalone/.next/server/app/api/network/sessions/route.js.nft.json +1 -1
  176. package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js +1 -1
  177. package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js.nft.json +1 -1
  178. package/.next/standalone/.next/server/app/api/network/workspaces/route.js +1 -1
  179. package/.next/standalone/.next/server/app/api/network/workspaces/route.js.nft.json +1 -1
  180. package/.next/standalone/.next/server/app/api/panes/[id]/diff/route.js +1 -1
  181. package/.next/standalone/.next/server/app/api/panes/[id]/diff/route.js.nft.json +1 -1
  182. package/.next/standalone/.next/server/app/api/panes/[id]/route.js +1 -1
  183. package/.next/standalone/.next/server/app/api/panes/[id]/route.js.nft.json +1 -1
  184. package/.next/standalone/.next/server/app/api/panes/route.js +1 -1
  185. package/.next/standalone/.next/server/app/api/panes/route.js.nft.json +1 -1
  186. package/.next/standalone/.next/server/app/api/projects/route.js +1 -1
  187. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  188. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/[...path]/route.js +1 -1
  189. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/[...path]/route.js.nft.json +1 -1
  190. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/status/route.js +1 -1
  191. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/status/route.js.nft.json +1 -1
  192. package/.next/standalone/.next/server/app/api/search/route.js +2 -2
  193. package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  194. package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js +1 -1
  195. package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js.nft.json +1 -1
  196. package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js +1 -1
  197. package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js.nft.json +1 -1
  198. package/.next/standalone/.next/server/app/api/sessions/[id]/route.js +1 -1
  199. package/.next/standalone/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  200. package/.next/standalone/.next/server/app/api/sessions/route.js +2 -2
  201. package/.next/standalone/.next/server/app/api/sessions/route.js.nft.json +1 -1
  202. package/.next/standalone/.next/server/app/api/sync/route.js +1 -1
  203. package/.next/standalone/.next/server/app/api/sync/route.js.nft.json +1 -1
  204. package/.next/standalone/.next/server/app/api/tags/route.js +1 -1
  205. package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -1
  206. package/.next/standalone/.next/server/app/api/tier/route.js +1 -1
  207. package/.next/standalone/.next/server/app/api/tier/route.js.nft.json +1 -1
  208. package/.next/standalone/.next/server/app/api/whisper/config/route.js +1 -1
  209. package/.next/standalone/.next/server/app/api/whisper/config/route.js.nft.json +1 -1
  210. package/.next/standalone/.next/server/app/api/whisper/route.js.nft.json +1 -1
  211. package/.next/standalone/.next/server/app/api/wizard/chart/route/app-paths-manifest.json +3 -0
  212. package/.next/standalone/.next/server/app/api/wizard/chart/route/build-manifest.json +11 -0
  213. package/.next/standalone/.next/server/app/api/wizard/chart/route/server-reference-manifest.json +4 -0
  214. package/.next/standalone/.next/server/app/api/wizard/chart/route.js +7 -0
  215. package/.next/standalone/.next/server/app/api/wizard/chart/route.js.map +5 -0
  216. package/.next/standalone/.next/server/app/api/wizard/chart/route.js.nft.json +1 -0
  217. package/.next/standalone/.next/server/app/api/wizard/chart/route_client-reference-manifest.js +2 -0
  218. package/.next/standalone/.next/server/app/api/wizard/chat/route.js +1 -1
  219. package/.next/standalone/.next/server/app/api/wizard/chat/route.js.nft.json +1 -1
  220. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js +1 -1
  221. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js.nft.json +1 -1
  222. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js +1 -1
  223. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js.nft.json +1 -1
  224. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js +1 -1
  225. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js.nft.json +1 -1
  226. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js +1 -1
  227. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js.nft.json +1 -1
  228. package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js +1 -1
  229. package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js.nft.json +1 -1
  230. package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js +1 -1
  231. package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js.nft.json +1 -1
  232. package/.next/standalone/.next/server/app/api/workspaces/route.js +2 -2
  233. package/.next/standalone/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  234. package/.next/standalone/.next/server/app/cortex.html +1 -1
  235. package/.next/standalone/.next/server/app/cortex.rsc +3 -3
  236. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex/__PAGE__.segment.rsc +2 -2
  237. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex.segment.rsc +1 -1
  238. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  239. package/.next/standalone/.next/server/app/cortex.segments/_full.segment.rsc +3 -3
  240. package/.next/standalone/.next/server/app/cortex.segments/_head.segment.rsc +1 -1
  241. package/.next/standalone/.next/server/app/cortex.segments/_index.segment.rsc +2 -2
  242. package/.next/standalone/.next/server/app/cortex.segments/_tree.segment.rsc +2 -2
  243. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  244. package/.next/standalone/.next/server/app/login.html +1 -1
  245. package/.next/standalone/.next/server/app/login.rsc +2 -2
  246. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +2 -2
  247. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
  248. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +2 -2
  249. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  250. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  251. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
  252. package/.next/standalone/.next/server/app/m/page_client-reference-manifest.js +1 -1
  253. package/.next/standalone/.next/server/app/m/projects/page_client-reference-manifest.js +1 -1
  254. package/.next/standalone/.next/server/app/m/projects.html +1 -1
  255. package/.next/standalone/.next/server/app/m/projects.rsc +2 -2
  256. package/.next/standalone/.next/server/app/m/projects.segments/_full.segment.rsc +2 -2
  257. package/.next/standalone/.next/server/app/m/projects.segments/_head.segment.rsc +1 -1
  258. package/.next/standalone/.next/server/app/m/projects.segments/_index.segment.rsc +2 -2
  259. package/.next/standalone/.next/server/app/m/projects.segments/_tree.segment.rsc +2 -2
  260. package/.next/standalone/.next/server/app/m/projects.segments/m/projects/__PAGE__.segment.rsc +1 -1
  261. package/.next/standalone/.next/server/app/m/projects.segments/m/projects.segment.rsc +1 -1
  262. package/.next/standalone/.next/server/app/m/projects.segments/m.segment.rsc +1 -1
  263. package/.next/standalone/.next/server/app/m/sessions/[id]/page.js.nft.json +1 -1
  264. package/.next/standalone/.next/server/app/m/sessions/[id]/page_client-reference-manifest.js +1 -1
  265. package/.next/standalone/.next/server/app/m/sessions/page_client-reference-manifest.js +1 -1
  266. package/.next/standalone/.next/server/app/m/sessions.html +1 -1
  267. package/.next/standalone/.next/server/app/m/sessions.rsc +2 -2
  268. package/.next/standalone/.next/server/app/m/sessions.segments/_full.segment.rsc +2 -2
  269. package/.next/standalone/.next/server/app/m/sessions.segments/_head.segment.rsc +1 -1
  270. package/.next/standalone/.next/server/app/m/sessions.segments/_index.segment.rsc +2 -2
  271. package/.next/standalone/.next/server/app/m/sessions.segments/_tree.segment.rsc +2 -2
  272. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions/__PAGE__.segment.rsc +1 -1
  273. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions.segment.rsc +1 -1
  274. package/.next/standalone/.next/server/app/m/sessions.segments/m.segment.rsc +1 -1
  275. package/.next/standalone/.next/server/app/m/settings/page_client-reference-manifest.js +1 -1
  276. package/.next/standalone/.next/server/app/m/settings.html +1 -1
  277. package/.next/standalone/.next/server/app/m/settings.rsc +2 -2
  278. package/.next/standalone/.next/server/app/m/settings.segments/_full.segment.rsc +2 -2
  279. package/.next/standalone/.next/server/app/m/settings.segments/_head.segment.rsc +1 -1
  280. package/.next/standalone/.next/server/app/m/settings.segments/_index.segment.rsc +2 -2
  281. package/.next/standalone/.next/server/app/m/settings.segments/_tree.segment.rsc +2 -2
  282. package/.next/standalone/.next/server/app/m/settings.segments/m/settings/__PAGE__.segment.rsc +1 -1
  283. package/.next/standalone/.next/server/app/m/settings.segments/m/settings.segment.rsc +1 -1
  284. package/.next/standalone/.next/server/app/m/settings.segments/m.segment.rsc +1 -1
  285. package/.next/standalone/.next/server/app/m/terminal/page_client-reference-manifest.js +1 -1
  286. package/.next/standalone/.next/server/app/m/terminal.html +1 -1
  287. package/.next/standalone/.next/server/app/m/terminal.rsc +3 -3
  288. package/.next/standalone/.next/server/app/m/terminal.segments/_full.segment.rsc +3 -3
  289. package/.next/standalone/.next/server/app/m/terminal.segments/_head.segment.rsc +1 -1
  290. package/.next/standalone/.next/server/app/m/terminal.segments/_index.segment.rsc +2 -2
  291. package/.next/standalone/.next/server/app/m/terminal.segments/_tree.segment.rsc +2 -2
  292. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal/__PAGE__.segment.rsc +2 -2
  293. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal.segment.rsc +1 -1
  294. package/.next/standalone/.next/server/app/m/terminal.segments/m.segment.rsc +1 -1
  295. package/.next/standalone/.next/server/app/m.html +1 -1
  296. package/.next/standalone/.next/server/app/m.rsc +2 -2
  297. package/.next/standalone/.next/server/app/m.segments/_full.segment.rsc +2 -2
  298. package/.next/standalone/.next/server/app/m.segments/_head.segment.rsc +1 -1
  299. package/.next/standalone/.next/server/app/m.segments/_index.segment.rsc +2 -2
  300. package/.next/standalone/.next/server/app/m.segments/_tree.segment.rsc +2 -2
  301. package/.next/standalone/.next/server/app/m.segments/m/__PAGE__.segment.rsc +1 -1
  302. package/.next/standalone/.next/server/app/m.segments/m.segment.rsc +1 -1
  303. package/.next/standalone/.next/server/app/network.html +1 -1
  304. package/.next/standalone/.next/server/app/network.rsc +2 -2
  305. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network/__PAGE__.segment.rsc +1 -1
  306. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network.segment.rsc +1 -1
  307. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  308. package/.next/standalone/.next/server/app/network.segments/_full.segment.rsc +2 -2
  309. package/.next/standalone/.next/server/app/network.segments/_head.segment.rsc +1 -1
  310. package/.next/standalone/.next/server/app/network.segments/_index.segment.rsc +2 -2
  311. package/.next/standalone/.next/server/app/network.segments/_tree.segment.rsc +2 -2
  312. package/.next/standalone/.next/server/app/projects.html +1 -1
  313. package/.next/standalone/.next/server/app/projects.rsc +2 -2
  314. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects/__PAGE__.segment.rsc +1 -1
  315. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects.segment.rsc +1 -1
  316. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  317. package/.next/standalone/.next/server/app/projects.segments/_full.segment.rsc +2 -2
  318. package/.next/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  319. package/.next/standalone/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  320. package/.next/standalone/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  321. package/.next/standalone/.next/server/app/sessions.html +1 -1
  322. package/.next/standalone/.next/server/app/sessions.rsc +2 -2
  323. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions/__PAGE__.segment.rsc +1 -1
  324. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions.segment.rsc +1 -1
  325. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  326. package/.next/standalone/.next/server/app/sessions.segments/_full.segment.rsc +2 -2
  327. package/.next/standalone/.next/server/app/sessions.segments/_head.segment.rsc +1 -1
  328. package/.next/standalone/.next/server/app/sessions.segments/_index.segment.rsc +2 -2
  329. package/.next/standalone/.next/server/app/sessions.segments/_tree.segment.rsc +2 -2
  330. package/.next/standalone/.next/server/app/settings.html +1 -1
  331. package/.next/standalone/.next/server/app/settings.rsc +2 -2
  332. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings/__PAGE__.segment.rsc +1 -1
  333. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings.segment.rsc +1 -1
  334. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  335. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  336. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  337. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  338. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  339. package/.next/standalone/.next/server/app/terminal.html +1 -1
  340. package/.next/standalone/.next/server/app/terminal.rsc +3 -3
  341. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal/__PAGE__.segment.rsc +2 -2
  342. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal.segment.rsc +1 -1
  343. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  344. package/.next/standalone/.next/server/app/terminal.segments/_full.segment.rsc +3 -3
  345. package/.next/standalone/.next/server/app/terminal.segments/_head.segment.rsc +1 -1
  346. package/.next/standalone/.next/server/app/terminal.segments/_index.segment.rsc +2 -2
  347. package/.next/standalone/.next/server/app/terminal.segments/_tree.segment.rsc +2 -2
  348. package/.next/standalone/.next/server/app/vr/page/react-loadable-manifest.json +1 -1
  349. package/.next/standalone/.next/server/app/vr/page_client-reference-manifest.js +1 -1
  350. package/.next/standalone/.next/server/app/vr.html +1 -1
  351. package/.next/standalone/.next/server/app/vr.rsc +3 -3
  352. package/.next/standalone/.next/server/app/vr.segments/_full.segment.rsc +3 -3
  353. package/.next/standalone/.next/server/app/vr.segments/_head.segment.rsc +1 -1
  354. package/.next/standalone/.next/server/app/vr.segments/_index.segment.rsc +2 -2
  355. package/.next/standalone/.next/server/app/vr.segments/_tree.segment.rsc +2 -2
  356. package/.next/standalone/.next/server/app/vr.segments/vr/__PAGE__.segment.rsc +2 -2
  357. package/.next/standalone/.next/server/app/vr.segments/vr.segment.rsc +1 -1
  358. package/.next/standalone/.next/server/app/workspaces.html +1 -1
  359. package/.next/standalone/.next/server/app/workspaces.rsc +2 -2
  360. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces/__PAGE__.segment.rsc +1 -1
  361. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces.segment.rsc +1 -1
  362. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  363. package/.next/standalone/.next/server/app/workspaces.segments/_full.segment.rsc +2 -2
  364. package/.next/standalone/.next/server/app/workspaces.segments/_head.segment.rsc +1 -1
  365. package/.next/standalone/.next/server/app/workspaces.segments/_index.segment.rsc +2 -2
  366. package/.next/standalone/.next/server/app/workspaces.segments/_tree.segment.rsc +2 -2
  367. package/.next/standalone/.next/server/app-paths-manifest.json +1 -0
  368. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00e90fc6._.js +98 -0
  369. package/.next/standalone/.next/server/chunks/[root-of-the-server]__01ab8675._.js +98 -0
  370. package/.next/standalone/.next/server/chunks/[root-of-the-server]__03974f05._.js +98 -0
  371. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__bb331da9._.js → [root-of-the-server]__046c9b91._.js} +3 -3
  372. package/.next/standalone/.next/server/chunks/[root-of-the-server]__04ae6bf0._.js +98 -0
  373. package/.next/standalone/.next/server/chunks/[root-of-the-server]__056fa416._.js +1 -1
  374. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ac4ea3f._.js +3 -0
  375. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0b8e64cb._.js +98 -0
  376. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__d95165f0._.js → [root-of-the-server]__0facd39e._.js} +3 -3
  377. package/.next/standalone/.next/server/chunks/[root-of-the-server]__10bc76a3._.js +3 -0
  378. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__9d68157b._.js → [root-of-the-server]__115f3934._.js} +3 -3
  379. package/.next/standalone/.next/server/chunks/[root-of-the-server]__11f155f1._.js +3 -0
  380. package/.next/standalone/.next/server/chunks/[root-of-the-server]__160e7c73._.js +22 -33
  381. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__91e23c96._.js → [root-of-the-server]__17a3b966._.js} +3 -3
  382. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__277d9445._.js → [root-of-the-server]__17d3a2b2._.js} +3 -3
  383. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1a86c055._.js +98 -0
  384. package/.next/standalone/.next/server/chunks/[root-of-the-server]__20b5e9c4._.js +3 -0
  385. package/.next/standalone/.next/server/chunks/[root-of-the-server]__28d6fbd8._.js +98 -0
  386. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__04f04898._.js → [root-of-the-server]__2a3f866b._.js} +2 -2
  387. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__a95bb38b._.js → [root-of-the-server]__316617e7._.js} +2 -2
  388. package/.next/standalone/.next/server/chunks/[root-of-the-server]__32ad8f71._.js +98 -0
  389. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__6fe5e6c8._.js → [root-of-the-server]__35457394._.js} +2 -2
  390. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__1f054c65._.js → [root-of-the-server]__35de78e6._.js} +3 -3
  391. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3685ffcb._.js +98 -0
  392. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__614458b7._.js → [root-of-the-server]__38954988._.js} +3 -3
  393. package/.next/standalone/.next/server/chunks/[root-of-the-server]__426ad936._.js +106 -0
  394. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4985c034._.js +98 -0
  395. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5c6ce9ed._.js +98 -0
  396. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5cebe58a._.js +98 -0
  397. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5d5e4789._.js +98 -0
  398. package/.next/standalone/.next/server/chunks/[root-of-the-server]__65676930._.js +3 -0
  399. package/.next/standalone/.next/server/chunks/[root-of-the-server]__67cab326._.js +58 -0
  400. package/.next/standalone/.next/server/chunks/[root-of-the-server]__698c6f01._.js +98 -0
  401. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6c64af29._.js +131 -0
  402. package/.next/standalone/.next/server/chunks/[root-of-the-server]__73aed9f5._.js +98 -0
  403. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__ac84b704._.js → [root-of-the-server]__79b6a9bb._.js} +3 -3
  404. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__e56abacf._.js → [root-of-the-server]__7db704c6._.js} +4 -4
  405. package/.next/standalone/.next/server/chunks/[root-of-the-server]__812ca02b._.js +98 -0
  406. package/.next/standalone/.next/server/chunks/[root-of-the-server]__821f50fa._.js +98 -0
  407. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8716b86e._.js +98 -0
  408. package/.next/standalone/.next/server/chunks/[root-of-the-server]__884ef754._.js +98 -0
  409. package/.next/standalone/.next/server/chunks/[root-of-the-server]__88cdbd68._.js +98 -0
  410. package/.next/standalone/.next/server/chunks/[root-of-the-server]__89d9aba9._.js +98 -0
  411. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8d536cb5._.js +98 -0
  412. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8df8c5d1._.js +98 -0
  413. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__2d7a454e._.js → [root-of-the-server]__8f2ccc41._.js} +3 -3
  414. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__2a2c5fc5._.js → [root-of-the-server]__95c9d682._.js} +4 -4
  415. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9e5d7774._.js +98 -0
  416. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__cc6e2885._.js → [root-of-the-server]__9edcff87._.js} +2 -2
  417. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a049dfc2._.js +98 -0
  418. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a5b4bb9a._.js +98 -0
  419. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__929ea03a._.js → [root-of-the-server]__a83262a1._.js} +2 -2
  420. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9cd1240._.js +98 -0
  421. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9d7f822._.js +98 -0
  422. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ad08c221._.js +98 -0
  423. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ad585f2f._.js +98 -0
  424. package/.next/standalone/.next/server/chunks/[root-of-the-server]__afcb8f7d._.js +98 -0
  425. package/.next/standalone/.next/server/chunks/[root-of-the-server]__bc250d43._.js +98 -0
  426. package/.next/standalone/.next/server/chunks/[root-of-the-server]__bce2a6e7._.js +98 -0
  427. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c011bf91._.js +98 -0
  428. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c0ac2895._.js +3 -0
  429. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c130a00c._.js +1 -1
  430. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c37d6380._.js +3 -0
  431. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cae392eb._.js +98 -0
  432. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cc2616bb._.js +3 -3
  433. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d501fa9b._.js +98 -0
  434. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d59c6c15._.js +98 -0
  435. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d5c1db32._.js +98 -0
  436. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d5d92527._.js +1 -1
  437. package/.next/standalone/.next/server/chunks/[root-of-the-server]__dba60c86._.js +98 -0
  438. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__2384f98e._.js → [root-of-the-server]__de14b9ae._.js} +3 -3
  439. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e10643d1._.js +98 -0
  440. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__00fdfbda._.js → [root-of-the-server]__e2a996e5._.js} +2 -2
  441. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__4d903941._.js → [root-of-the-server]__e3477417._.js} +3 -3
  442. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__32dc5513._.js → [root-of-the-server]__e4db362e._.js} +2 -2
  443. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__49e42a3a._.js → [root-of-the-server]__e4e70b86._.js} +3 -3
  444. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__ac39ecc7._.js → [root-of-the-server]__e54925af._.js} +3 -3
  445. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e8edc5b0._.js +98 -0
  446. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__eafd040b._.js → [root-of-the-server]__eab4d83b._.js} +2 -2
  447. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ead29015._.js +1 -1
  448. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__194955d4._.js → [root-of-the-server]__f056fd83._.js} +3 -3
  449. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f0e99572._.js +98 -0
  450. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fe1e16d0._.js +98 -0
  451. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ff9cd277._.js +98 -0
  452. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ffaea2ce._.js +98 -0
  453. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_wizard_chart_route_actions_888e2ec1.js +3 -0
  454. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__2cffc362._.js +3 -0
  455. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__f1050870._.js → [root-of-the-server]__47c97637._.js} +2 -2
  456. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__66aca5d4._.js +1 -1
  457. package/.next/standalone/.next/server/chunks/ssr/_17b946fd._.js +3 -0
  458. package/.next/standalone/.next/server/chunks/ssr/_2a1d79e7._.js +1 -1
  459. package/.next/standalone/.next/server/chunks/ssr/_5c3c4cfa._.js +7 -5
  460. package/.next/standalone/.next/server/chunks/ssr/_ba432382._.js +7 -5
  461. package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_cortex_page_tsx_0f33d8b3._.js +1 -1
  462. package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_terminal_page_tsx_de5e8d85._.js +4 -4
  463. package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__90eeddae._.js +1 -1
  464. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  465. package/.next/standalone/.next/server/pages/404.html +1 -1
  466. package/.next/standalone/.next/server/pages/500.html +2 -2
  467. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  468. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  469. package/.next/standalone/.next/static/chunks/0852575eb90c1e8d.js +85 -0
  470. package/.next/standalone/.next/static/chunks/{74d0ac0b1d0a1b79.js → 10b00b4f66102dcf.js} +1 -1
  471. package/.next/standalone/.next/static/chunks/{16eb77953dee9ea3.js → 19c71a8376c23c58.js} +1 -1
  472. package/.next/standalone/.next/static/chunks/2b769d1597e4fc1c.css +3 -0
  473. package/.next/standalone/.next/static/chunks/{3e91fc608659c524.js → 350271fe79509caf.js} +1 -1
  474. package/.next/standalone/.next/static/chunks/{70423c7afd8abf5f.js → 597847c22200c212.js} +1 -1
  475. package/.next/standalone/.next/static/chunks/{fb0abd1933b2b2e1.js → 7f6a14f1849fa94d.js} +1 -1
  476. package/.next/standalone/.next/static/chunks/{7ecd9bbb0ce4d68a.js → b7c8fe9b7275a84f.js} +1 -1
  477. package/.next/standalone/.next/static/chunks/{6245135a7afb8c7b.js → c9b10fc55516d142.js} +8 -6
  478. package/.next/standalone/.next/static/chunks/d0065f48eab94944.js +1 -0
  479. package/.next/standalone/.next/static/chunks/{180c1b9ff31b979f.js → f7b34c807badf95d.js} +8 -6
  480. package/.next/standalone/.spaces/cortex-context.md +50 -144
  481. package/.next/standalone/LICENSE +661 -661
  482. package/.next/standalone/NOTICE +5 -5
  483. package/.next/standalone/README.md +131 -131
  484. package/.next/standalone/bin/cortex-hook.js +79 -79
  485. package/.next/standalone/bin/cortex-hook.sh +62 -62
  486. package/.next/standalone/bin/cortex-learn-hook.js +138 -138
  487. package/.next/standalone/bin/cortex-mcp.js +60 -60
  488. package/.next/standalone/bin/cortex-pi-extension.ts +170 -170
  489. package/.next/standalone/bin/fix-standalone-externals.js +79 -79
  490. package/.next/standalone/bin/lib/auto-setup.js +110 -110
  491. package/.next/standalone/bin/mdns-service.js +171 -171
  492. package/.next/standalone/bin/postinstall.js +35 -35
  493. package/.next/standalone/bin/setup-admin.js +195 -195
  494. package/.next/standalone/bin/spaces-dev.js +247 -247
  495. package/.next/standalone/bin/spaces-install.js +660 -660
  496. package/.next/standalone/bin/spaces-postinstall.js +50 -50
  497. package/.next/standalone/bin/spaces-reset-totp.js +50 -50
  498. package/.next/standalone/bin/spaces-service.js +1046 -1046
  499. package/.next/standalone/bin/spaces-setup.js +253 -253
  500. package/.next/standalone/bin/spaces.js +808 -805
  501. package/.next/standalone/bin/ssh-auth-keys.sh +68 -68
  502. package/.next/standalone/bin/terminal-server.js +2819 -2781
  503. package/.next/standalone/cortex-hook-debug.log +57 -23
  504. package/.next/standalone/docker-compose.yml +28 -28
  505. package/.next/standalone/docs/architecture.md +387 -387
  506. package/.next/standalone/docs/cortex-integration-reference.md +268 -268
  507. package/.next/standalone/docs/cortex.md +293 -293
  508. package/.next/standalone/docs/getting-started.md +96 -96
  509. package/.next/standalone/docs/plans/2026-02-24-multi-agent-sessions-design.md +133 -133
  510. package/.next/standalone/docs/plans/2026-02-24-multi-agent-sessions-plan.md +959 -959
  511. package/.next/standalone/docs/plans/2026-03-02-security-audit.md +229 -229
  512. package/.next/standalone/docs/plans/2026-03-07-service-command-design.md +146 -146
  513. package/.next/standalone/docs/plans/2026-03-07-service-command-plan.md +254 -254
  514. package/.next/standalone/docs/server-install.md +564 -564
  515. package/.next/standalone/docs/social-card.html +150 -150
  516. package/.next/standalone/docs/superpowers/plans/2026-03-12-spaces-cortex.md +5270 -5270
  517. package/.next/standalone/docs/superpowers/plans/2026-03-13-cortex-wiring.md +1387 -1387
  518. package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-entity-graph.md +1923 -1923
  519. package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-knowledge-evolution.md +1113 -1113
  520. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-boundary-engine.md +853 -853
  521. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-context-engine.md +1274 -1274
  522. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-signal-ingestion.md +933 -933
  523. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-lobes.md +1080 -1080
  524. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-gravity-system.md +768 -768
  525. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-ui.md +1108 -1108
  526. package/.next/standalone/docs/superpowers/plans/2026-03-18-cortex-ui-integration.md +1846 -1846
  527. package/.next/standalone/docs/superpowers/plans/2026-03-19-vr-phase1-shell.md +1639 -1639
  528. package/.next/standalone/docs/superpowers/plans/2026-03-27-dockview-pane-layout.md +98 -98
  529. package/.next/standalone/docs/superpowers/specs/2026-03-11-universe-view-design.md +320 -320
  530. package/.next/standalone/docs/superpowers/specs/2026-03-12-spaces-brain-design.md +720 -720
  531. package/.next/standalone/docs/superpowers/specs/2026-03-13-cortex-wiring-design.md +268 -268
  532. package/.next/standalone/docs/superpowers/specs/2026-03-14-cortex-v2-design.md +623 -623
  533. package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-lobes-design.md +263 -263
  534. package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-v2-ui-design.md +240 -240
  535. package/.next/standalone/docs/superpowers/specs/2026-03-16-pane-ux-design.md +77 -77
  536. package/.next/standalone/docs/superpowers/specs/2026-03-18-cortex-ui-integration-design.md +341 -341
  537. package/.next/standalone/docs/superpowers/specs/2026-03-19-vr-phase1-shell-design.md +288 -288
  538. package/.next/standalone/docs/superpowers/specs/2026-03-27-pane-diff-review-and-project-wizard-design.md +322 -322
  539. package/.next/standalone/docs/tiers.md +104 -104
  540. package/.next/standalone/eslint.config.mjs +18 -18
  541. package/.next/standalone/next.config.ts +20 -20
  542. package/.next/standalone/nginx.conf +53 -53
  543. package/.next/standalone/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64.node +0 -0
  544. package/.next/standalone/node_modules/@img/{sharp-linux-x64 → sharp-win32-x64}/package.json +39 -46
  545. package/.next/standalone/package-lock.json +14985 -14986
  546. package/.next/standalone/package.json +111 -111
  547. package/.next/standalone/postcss.config.mjs +7 -7
  548. package/.next/standalone/scripts/rebuild.cmd +65 -65
  549. package/.next/standalone/scripts/rebuild.sh +59 -59
  550. package/.next/standalone/server.js +1 -1
  551. package/.next/standalone/src/app/(desktop)/admin/analytics/page.tsx +266 -266
  552. package/.next/standalone/src/app/(desktop)/admin/users/page.tsx +399 -399
  553. package/.next/standalone/src/app/(desktop)/analytics/page.tsx +166 -166
  554. package/.next/standalone/src/app/(desktop)/cortex/page.tsx +81 -81
  555. package/.next/standalone/src/app/(desktop)/dashboard-client.tsx +56 -56
  556. package/.next/standalone/src/app/(desktop)/layout.tsx +18 -18
  557. package/.next/standalone/src/app/(desktop)/network/page.tsx +137 -137
  558. package/.next/standalone/src/app/(desktop)/page.tsx +17 -17
  559. package/.next/standalone/src/app/(desktop)/projects/page.tsx +68 -68
  560. package/.next/standalone/src/app/(desktop)/sessions/[id]/page.tsx +519 -519
  561. package/.next/standalone/src/app/(desktop)/sessions/page.tsx +145 -145
  562. package/.next/standalone/src/app/(desktop)/settings/page.tsx +446 -446
  563. package/.next/standalone/src/app/(desktop)/terminal/layout.tsx +7 -7
  564. package/.next/standalone/src/app/(desktop)/terminal/page.tsx +1330 -1291
  565. package/.next/standalone/src/app/(desktop)/terminal/pane/[id]/page.tsx +211 -211
  566. package/.next/standalone/src/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page.tsx +252 -252
  567. package/.next/standalone/src/app/(desktop)/workspaces/page.tsx +12 -12
  568. package/.next/standalone/src/app/api/admin/analytics/route.ts +10 -10
  569. package/.next/standalone/src/app/api/admin/users/[id]/route.ts +20 -20
  570. package/.next/standalone/src/app/api/admin/users/route.ts +15 -15
  571. package/.next/standalone/src/app/api/analytics/overview/route.ts +80 -80
  572. package/.next/standalone/src/app/api/auth/login/route.ts +10 -10
  573. package/.next/standalone/src/app/api/auth/logout/route.ts +9 -9
  574. package/.next/standalone/src/app/api/auth/me/route.ts +22 -22
  575. package/.next/standalone/src/app/api/auth/totp/setup/route.ts +10 -10
  576. package/.next/standalone/src/app/api/auth/totp/status/route.ts +10 -10
  577. package/.next/standalone/src/app/api/auth/totp/verify/route.ts +10 -10
  578. package/.next/standalone/src/app/api/benchmark/lobes/route.ts +16 -16
  579. package/.next/standalone/src/app/api/benchmark/run/route.ts +113 -92
  580. package/.next/standalone/src/app/api/benchmark/runs/[id]/route.ts +26 -26
  581. package/.next/standalone/src/app/api/benchmark/runs/route.ts +16 -16
  582. package/.next/standalone/src/app/api/benchmark/status/route.ts +35 -35
  583. package/.next/standalone/src/app/api/bulk/route.ts +34 -34
  584. package/.next/standalone/src/app/api/chat/route.ts +85 -85
  585. package/.next/standalone/src/app/api/config/route.ts +30 -30
  586. package/.next/standalone/src/app/api/cortex/context/route.ts +78 -78
  587. package/.next/standalone/src/app/api/cortex/curation/assess/route.ts +27 -27
  588. package/.next/standalone/src/app/api/cortex/curation/publish/route.ts +23 -23
  589. package/.next/standalone/src/app/api/cortex/curation/refine/route.ts +23 -23
  590. package/.next/standalone/src/app/api/cortex/curation/review/route.ts +29 -29
  591. package/.next/standalone/src/app/api/cortex/curation/seed/route.ts +23 -23
  592. package/.next/standalone/src/app/api/cortex/export/route.ts +40 -40
  593. package/.next/standalone/src/app/api/cortex/federation/pending/route.ts +20 -20
  594. package/.next/standalone/src/app/api/cortex/federation/resolve/route.ts +43 -43
  595. package/.next/standalone/src/app/api/cortex/federation/search/route.ts +35 -35
  596. package/.next/standalone/src/app/api/cortex/federation/teach/route.ts +76 -76
  597. package/.next/standalone/src/app/api/cortex/graph/edges/route.ts +112 -112
  598. package/.next/standalone/src/app/api/cortex/graph/entities/[id]/route.ts +73 -73
  599. package/.next/standalone/src/app/api/cortex/graph/entities/route.ts +75 -75
  600. package/.next/standalone/src/app/api/cortex/graph/populate/route.ts +203 -203
  601. package/.next/standalone/src/app/api/cortex/import/route.ts +75 -75
  602. package/.next/standalone/src/app/api/cortex/import/status/route.ts +15 -15
  603. package/.next/standalone/src/app/api/cortex/ingest/bootstrap/route.ts +39 -39
  604. package/.next/standalone/src/app/api/cortex/ingest/status/route.ts +15 -15
  605. package/.next/standalone/src/app/api/cortex/knowledge/[id]/route.ts +91 -91
  606. package/.next/standalone/src/app/api/cortex/knowledge/route.ts +97 -97
  607. package/.next/standalone/src/app/api/cortex/lobes/[id]/route.ts +67 -67
  608. package/.next/standalone/src/app/api/cortex/lobes/route.ts +22 -22
  609. package/.next/standalone/src/app/api/cortex/lobes/share/route.ts +80 -80
  610. package/.next/standalone/src/app/api/cortex/marketplace/browse/route.ts +43 -43
  611. package/.next/standalone/src/app/api/cortex/marketplace/preview/route.ts +46 -46
  612. package/.next/standalone/src/app/api/cortex/mcp/call/route.ts +11 -11
  613. package/.next/standalone/src/app/api/cortex/mcp/tools/route.ts +8 -8
  614. package/.next/standalone/src/app/api/cortex/search/route.ts +57 -45
  615. package/.next/standalone/src/app/api/cortex/settings/route.ts +35 -35
  616. package/.next/standalone/src/app/api/cortex/status/route.ts +169 -169
  617. package/.next/standalone/src/app/api/cortex/timeline/route.ts +42 -42
  618. package/.next/standalone/src/app/api/cortex/usage/route.ts +31 -31
  619. package/.next/standalone/src/app/api/cortex/workspace/[id]/context/route.ts +41 -41
  620. package/.next/standalone/src/app/api/events/route.ts +40 -40
  621. package/.next/standalone/src/app/api/files/route.ts +187 -187
  622. package/.next/standalone/src/app/api/folders/route.ts +107 -97
  623. package/.next/standalone/src/app/api/network/connect-callback/route.ts +11 -11
  624. package/.next/standalone/src/app/api/network/connect-request/[id]/route.ts +11 -11
  625. package/.next/standalone/src/app/api/network/connect-request/route.ts +17 -17
  626. package/.next/standalone/src/app/api/network/discovered/route.ts +9 -9
  627. package/.next/standalone/src/app/api/network/handshake/route.ts +25 -25
  628. package/.next/standalone/src/app/api/network/health/route.ts +10 -10
  629. package/.next/standalone/src/app/api/network/identity/route.ts +15 -15
  630. package/.next/standalone/src/app/api/network/keys/[id]/route.ts +10 -10
  631. package/.next/standalone/src/app/api/network/keys/route.ts +15 -15
  632. package/.next/standalone/src/app/api/network/nodes/[id]/route.ts +15 -15
  633. package/.next/standalone/src/app/api/network/nodes/check/route.ts +9 -9
  634. package/.next/standalone/src/app/api/network/nodes/route.ts +15 -15
  635. package/.next/standalone/src/app/api/network/panes/[id]/route.ts +78 -62
  636. package/.next/standalone/src/app/api/network/panes/route.ts +61 -50
  637. package/.next/standalone/src/app/api/network/projects/route.ts +32 -25
  638. package/.next/standalone/src/app/api/network/proxy/[nodeId]/[...path]/route.ts +25 -25
  639. package/.next/standalone/src/app/api/network/search/route.ts +45 -38
  640. package/.next/standalone/src/app/api/network/sessions/[id]/messages/route.ts +43 -36
  641. package/.next/standalone/src/app/api/network/sessions/[id]/route.ts +41 -34
  642. package/.next/standalone/src/app/api/network/sessions/route.ts +50 -43
  643. package/.next/standalone/src/app/api/network/terminal/token/route.ts +10 -10
  644. package/.next/standalone/src/app/api/network/workspaces/[id]/route.ts +80 -71
  645. package/.next/standalone/src/app/api/network/workspaces/route.ts +87 -85
  646. package/.next/standalone/src/app/api/panes/[id]/diff/route.ts +121 -121
  647. package/.next/standalone/src/app/api/panes/[id]/route.ts +60 -60
  648. package/.next/standalone/src/app/api/panes/route.ts +39 -39
  649. package/.next/standalone/src/app/api/projects/route.ts +13 -13
  650. package/.next/standalone/src/app/api/proxy/models/[modelId]/[...path]/route.ts +80 -80
  651. package/.next/standalone/src/app/api/proxy/models/[modelId]/status/route.ts +33 -33
  652. package/.next/standalone/src/app/api/search/route.ts +47 -47
  653. package/.next/standalone/src/app/api/sessions/[id]/chat/route.ts +120 -120
  654. package/.next/standalone/src/app/api/sessions/[id]/messages/route.ts +34 -34
  655. package/.next/standalone/src/app/api/sessions/[id]/route.ts +73 -73
  656. package/.next/standalone/src/app/api/sessions/route.ts +64 -64
  657. package/.next/standalone/src/app/api/sync/route.ts +24 -24
  658. package/.next/standalone/src/app/api/tags/route.ts +35 -35
  659. package/.next/standalone/src/app/api/tier/route.ts +16 -16
  660. package/.next/standalone/src/app/api/updates/route.ts +65 -65
  661. package/.next/standalone/src/app/api/whisper/config/route.ts +50 -42
  662. package/.next/standalone/src/app/api/whisper/route.ts +91 -91
  663. package/.next/standalone/src/app/api/wizard/chart/route.ts +129 -0
  664. package/.next/standalone/src/app/api/wizard/chat/route.ts +113 -113
  665. package/.next/standalone/src/app/api/workspaces/[id]/context/[key]/route.ts +39 -39
  666. package/.next/standalone/src/app/api/workspaces/[id]/context/route.ts +28 -28
  667. package/.next/standalone/src/app/api/workspaces/[id]/messages/[msgId]/route.ts +17 -17
  668. package/.next/standalone/src/app/api/workspaces/[id]/messages/route.ts +39 -39
  669. package/.next/standalone/src/app/api/workspaces/[id]/route.ts +47 -47
  670. package/.next/standalone/src/app/api/workspaces/[id]/sessions/route.ts +62 -62
  671. package/.next/standalone/src/app/api/workspaces/route.ts +79 -79
  672. package/.next/standalone/src/app/globals.css +88 -88
  673. package/.next/standalone/src/app/layout.tsx +33 -33
  674. package/.next/standalone/src/app/login/layout.tsx +7 -7
  675. package/.next/standalone/src/app/login/page.tsx +315 -315
  676. package/.next/standalone/src/app/m/layout.tsx +16 -16
  677. package/.next/standalone/src/app/m/page.tsx +118 -118
  678. package/.next/standalone/src/app/m/projects/page.tsx +64 -64
  679. package/.next/standalone/src/app/m/sessions/[id]/page.tsx +168 -168
  680. package/.next/standalone/src/app/m/sessions/page.tsx +177 -177
  681. package/.next/standalone/src/app/m/settings/page.tsx +230 -230
  682. package/.next/standalone/src/app/m/terminal/page.tsx +413 -413
  683. package/.next/standalone/src/app/vr/page.tsx +21 -21
  684. package/.next/standalone/src/app/vr/vr-app.tsx +163 -163
  685. package/.next/standalone/src/app/vr/vr-controls.tsx +139 -139
  686. package/.next/standalone/src/app/vr/vr-door.tsx +82 -82
  687. package/.next/standalone/src/app/vr/vr-environment.tsx +71 -71
  688. package/.next/standalone/src/app/vr/vr-gaze.tsx +89 -89
  689. package/.next/standalone/src/app/vr/vr-layout.ts +49 -49
  690. package/.next/standalone/src/app/vr/vr-lobby.tsx +97 -97
  691. package/.next/standalone/src/app/vr/vr-pane.tsx +195 -195
  692. package/.next/standalone/src/app/vr/vr-room.tsx +79 -79
  693. package/.next/standalone/src/app/vr/vr-terminal.tsx +303 -303
  694. package/.next/standalone/src/components/auth/totp-gate.tsx +183 -183
  695. package/.next/standalone/src/components/bus/activity-panel.tsx +261 -261
  696. package/.next/standalone/src/components/common/color-picker.tsx +35 -35
  697. package/.next/standalone/src/components/common/dev-directory-picker.tsx +339 -339
  698. package/.next/standalone/src/components/common/folder-picker.tsx +200 -200
  699. package/.next/standalone/src/components/common/tag-picker.tsx +190 -190
  700. package/.next/standalone/src/components/common/workspace-picker.tsx +113 -113
  701. package/.next/standalone/src/components/cortex/benchmark-tab.tsx +894 -880
  702. package/.next/standalone/src/components/cortex/constants.ts +29 -29
  703. package/.next/standalone/src/components/cortex/cortex-dashboard.tsx +304 -304
  704. package/.next/standalone/src/components/cortex/cortex-indicator.tsx +44 -44
  705. package/.next/standalone/src/components/cortex/cortex-panel.tsx +140 -140
  706. package/.next/standalone/src/components/cortex/cortex-settings.tsx +280 -280
  707. package/.next/standalone/src/components/cortex/curation-tab.tsx +810 -810
  708. package/.next/standalone/src/components/cortex/entity-detail.tsx +101 -101
  709. package/.next/standalone/src/components/cortex/entity-graph.tsx +382 -382
  710. package/.next/standalone/src/components/cortex/import-dialog.tsx +212 -212
  711. package/.next/standalone/src/components/cortex/injection-badge.tsx +72 -72
  712. package/.next/standalone/src/components/cortex/knowledge-card.tsx +109 -109
  713. package/.next/standalone/src/components/cortex/knowledge-tab.tsx +158 -158
  714. package/.next/standalone/src/components/cortex/lobe-settings.tsx +215 -215
  715. package/.next/standalone/src/components/cortex/marketplace-card.tsx +126 -126
  716. package/.next/standalone/src/components/cortex/marketplace-tab.tsx +113 -113
  717. package/.next/standalone/src/components/dashboard/activity-chart.tsx +41 -41
  718. package/.next/standalone/src/components/dashboard/model-usage-chart.tsx +61 -61
  719. package/.next/standalone/src/components/dashboard/recent-sessions.tsx +68 -68
  720. package/.next/standalone/src/components/dashboard/stats-cards.tsx +36 -36
  721. package/.next/standalone/src/components/files/file-explorer.tsx +703 -703
  722. package/.next/standalone/src/components/layout/providers.tsx +38 -38
  723. package/.next/standalone/src/components/layout/sidebar.tsx +170 -170
  724. package/.next/standalone/src/components/layout/tier-provider.tsx +53 -53
  725. package/.next/standalone/src/components/layout/update-banner.tsx +92 -92
  726. package/.next/standalone/src/components/mobile/bottom-nav.tsx +46 -46
  727. package/.next/standalone/src/components/mobile/immersive-voice-button.tsx +123 -123
  728. package/.next/standalone/src/components/mobile/mobile-chat-input.tsx +244 -244
  729. package/.next/standalone/src/components/mobile/mobile-header.tsx +44 -44
  730. package/.next/standalone/src/components/mobile/mobile-session-card.tsx +56 -56
  731. package/.next/standalone/src/components/mobile/mobile-terminal-input.tsx +74 -74
  732. package/.next/standalone/src/components/mobile/mobile-terminal-pane.tsx +302 -302
  733. package/.next/standalone/src/components/mobile/mobile-terminal-toolbar.tsx +76 -76
  734. package/.next/standalone/src/components/mobile/pull-to-refresh.tsx +82 -82
  735. package/.next/standalone/src/components/mobile/voice-input.tsx +53 -53
  736. package/.next/standalone/src/components/network/api-key-list.tsx +190 -190
  737. package/.next/standalone/src/components/network/connection-requests.tsx +94 -94
  738. package/.next/standalone/src/components/network/node-add-dialog.tsx +131 -131
  739. package/.next/standalone/src/components/network/node-badge.tsx +26 -26
  740. package/.next/standalone/src/components/network/node-list.tsx +207 -207
  741. package/.next/standalone/src/components/network/node-selector.tsx +49 -49
  742. package/.next/standalone/src/components/sessions/session-filters.tsx +116 -116
  743. package/.next/standalone/src/components/sessions/session-list.tsx +485 -485
  744. package/.next/standalone/src/components/terminal/pane-diff-panel.tsx +179 -179
  745. package/.next/standalone/src/components/terminal/terminal-pane.tsx +1530 -1464
  746. package/.next/standalone/src/components/viewer/chat-input.tsx +275 -275
  747. package/.next/standalone/src/components/viewer/message-renderer.tsx +551 -551
  748. package/.next/standalone/src/components/wizard/chart-wizard.tsx +405 -0
  749. package/.next/standalone/src/components/wizard/project-wizard.tsx +153 -153
  750. package/.next/standalone/src/components/wizard/wizard-chat.tsx +99 -99
  751. package/.next/standalone/src/components/wizard/wizard-plan-summary.tsx +103 -103
  752. package/.next/standalone/src/components/wizard/wizard-review.tsx +225 -225
  753. package/.next/standalone/src/components/workspace/universe-cluster.tsx +131 -131
  754. package/.next/standalone/src/components/workspace/universe-orb.tsx +128 -128
  755. package/.next/standalone/src/components/workspace/universe-types.ts +22 -22
  756. package/.next/standalone/src/components/workspace/universe-utils.ts +11 -11
  757. package/.next/standalone/src/components/workspace/universe-view.tsx +397 -397
  758. package/.next/standalone/src/components/workspace/workspace-chooser.tsx +634 -634
  759. package/.next/standalone/src/hooks/use-benchmark.ts +72 -71
  760. package/.next/standalone/src/hooks/use-bus.ts +147 -147
  761. package/.next/standalone/src/hooks/use-idle-detection.ts +79 -79
  762. package/.next/standalone/src/hooks/use-network.ts +229 -229
  763. package/.next/standalone/src/hooks/use-sessions.ts +437 -437
  764. package/.next/standalone/src/hooks/use-speech-recognition.ts +114 -113
  765. package/.next/standalone/src/hooks/use-sse.ts +35 -35
  766. package/.next/standalone/src/hooks/use-tier.ts +39 -39
  767. package/.next/standalone/src/lib/agents.ts +97 -97
  768. package/.next/standalone/src/lib/aider/parser.ts +111 -111
  769. package/.next/standalone/src/lib/api.ts +19 -19
  770. package/.next/standalone/src/lib/auth.ts +47 -47
  771. package/.next/standalone/src/lib/claude/parser.ts +212 -212
  772. package/.next/standalone/src/lib/claude/stats.ts +204 -204
  773. package/.next/standalone/src/lib/codex/parser.test.ts +111 -111
  774. package/.next/standalone/src/lib/codex/parser.ts +287 -287
  775. package/.next/standalone/src/lib/config.ts +132 -132
  776. package/.next/standalone/src/lib/cortex/benchmark.ts +83 -67
  777. package/.next/standalone/src/lib/cortex/config.ts +42 -42
  778. package/.next/standalone/src/lib/cortex/debug.ts +10 -10
  779. package/.next/standalone/src/lib/cortex/distillation/usage-store.ts +18 -18
  780. package/.next/standalone/src/lib/cortex/graph/resolver.ts +10 -10
  781. package/.next/standalone/src/lib/cortex/graph/types.ts +22 -22
  782. package/.next/standalone/src/lib/cortex/index.ts +109 -56
  783. package/.next/standalone/src/lib/cortex/ingestion/bootstrap.ts +14 -14
  784. package/.next/standalone/src/lib/cortex/knowledge/compat.ts +14 -14
  785. package/.next/standalone/src/lib/cortex/knowledge/contradiction.ts +10 -10
  786. package/.next/standalone/src/lib/cortex/knowledge/types.ts +67 -67
  787. package/.next/standalone/src/lib/cortex/lobes/config.ts +16 -16
  788. package/.next/standalone/src/lib/cortex/lobes/resolver.ts +8 -8
  789. package/.next/standalone/src/lib/cortex/lobes/shares.ts +14 -14
  790. package/.next/standalone/src/lib/cortex/mcp/server.ts +12 -12
  791. package/.next/standalone/src/lib/cortex/portability/exporter.ts +6 -6
  792. package/.next/standalone/src/lib/cortex/portability/importer.ts +10 -10
  793. package/.next/standalone/src/lib/cortex/retrieval/context-engine.ts +10 -10
  794. package/.next/standalone/src/lib/cortex/types.ts +39 -39
  795. package/.next/standalone/src/lib/cost-calculator.ts +48 -48
  796. package/.next/standalone/src/lib/db/init.ts +71 -71
  797. package/.next/standalone/src/lib/db/queries.ts +740 -827
  798. package/.next/standalone/src/lib/db/schema.ts +206 -206
  799. package/.next/standalone/src/lib/events/sse.ts +36 -36
  800. package/.next/standalone/src/lib/forge/parser.ts +52 -52
  801. package/.next/standalone/src/lib/gemini/parser.ts +258 -258
  802. package/.next/standalone/src/lib/license.ts +56 -56
  803. package/.next/standalone/src/lib/pro.ts +31 -31
  804. package/.next/standalone/src/lib/shell-user.ts +101 -0
  805. package/.next/standalone/src/lib/sync/indexer.ts +504 -504
  806. package/.next/standalone/src/lib/sync/watcher.ts +64 -64
  807. package/.next/standalone/src/lib/teams.ts +31 -31
  808. package/.next/standalone/src/lib/telemetry.ts +75 -75
  809. package/.next/standalone/src/lib/terminal/server.ts +188 -188
  810. package/.next/standalone/src/lib/tier.ts +38 -38
  811. package/.next/standalone/src/lib/utils.ts +72 -72
  812. package/.next/standalone/src/lib/vms/manager.ts +121 -121
  813. package/.next/standalone/src/middleware.ts +133 -133
  814. package/.next/standalone/src/types/claude.ts +208 -208
  815. package/.next/standalone/src/types/network.ts +61 -61
  816. package/.next/standalone/tests/setup.ts +8 -8
  817. package/.next/standalone/tsconfig.json +34 -34
  818. package/.next/standalone/vitest.config.ts +24 -24
  819. package/LICENSE +661 -661
  820. package/README.md +131 -131
  821. package/bin/cortex-hook.js +79 -79
  822. package/bin/cortex-hook.sh +62 -62
  823. package/bin/cortex-learn-hook.js +138 -138
  824. package/bin/cortex-mcp.js +60 -60
  825. package/bin/cortex-pi-extension.ts +170 -170
  826. package/bin/fix-standalone-externals.js +79 -79
  827. package/bin/lib/auto-setup.js +110 -110
  828. package/bin/mdns-service.js +171 -171
  829. package/bin/postinstall.js +35 -35
  830. package/bin/setup-admin.js +195 -195
  831. package/bin/spaces-dev.js +247 -247
  832. package/bin/spaces-install.js +660 -660
  833. package/bin/spaces-postinstall.js +50 -50
  834. package/bin/spaces-reset-totp.js +50 -50
  835. package/bin/spaces-service.js +1046 -1046
  836. package/bin/spaces-setup.js +253 -253
  837. package/bin/spaces.js +808 -805
  838. package/bin/ssh-auth-keys.sh +68 -68
  839. package/bin/terminal-server.js +2819 -2781
  840. package/package.json +111 -111
  841. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0903a426._.js +0 -98
  842. package/.next/standalone/.next/server/chunks/[root-of-the-server]__09e8ccc9._.js +0 -98
  843. package/.next/standalone/.next/server/chunks/[root-of-the-server]__11c684b1._.js +0 -98
  844. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1572d4ef._.js +0 -98
  845. package/.next/standalone/.next/server/chunks/[root-of-the-server]__186cd0bb._.js +0 -3
  846. package/.next/standalone/.next/server/chunks/[root-of-the-server]__212760e6._.js +0 -98
  847. package/.next/standalone/.next/server/chunks/[root-of-the-server]__228595ec._.js +0 -98
  848. package/.next/standalone/.next/server/chunks/[root-of-the-server]__283c890f._.js +0 -3
  849. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2f300a68._.js +0 -98
  850. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2f452778._.js +0 -98
  851. package/.next/standalone/.next/server/chunks/[root-of-the-server]__35f8e77e._.js +0 -98
  852. package/.next/standalone/.next/server/chunks/[root-of-the-server]__379fc2e9._.js +0 -98
  853. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3b40d79f._.js +0 -98
  854. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3d3dca2b._.js +0 -98
  855. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4d5b78d2._.js +0 -98
  856. package/.next/standalone/.next/server/chunks/[root-of-the-server]__54163e52._.js +0 -98
  857. package/.next/standalone/.next/server/chunks/[root-of-the-server]__563c0817._.js +0 -3
  858. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5812f90a._.js +0 -98
  859. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5c5e87f5._.js +0 -98
  860. package/.next/standalone/.next/server/chunks/[root-of-the-server]__60d15b16._.js +0 -98
  861. package/.next/standalone/.next/server/chunks/[root-of-the-server]__69d315e5._.js +0 -3
  862. package/.next/standalone/.next/server/chunks/[root-of-the-server]__71f29038._.js +0 -98
  863. package/.next/standalone/.next/server/chunks/[root-of-the-server]__74084e07._.js +0 -3
  864. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7921aa80._.js +0 -98
  865. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7e077dd8._.js +0 -98
  866. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7ebc4280._.js +0 -131
  867. package/.next/standalone/.next/server/chunks/[root-of-the-server]__857c60bb._.js +0 -98
  868. package/.next/standalone/.next/server/chunks/[root-of-the-server]__874fe565._.js +0 -98
  869. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8e2171f7._.js +0 -98
  870. package/.next/standalone/.next/server/chunks/[root-of-the-server]__95659b2d._.js +0 -98
  871. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9679b91e._.js +0 -98
  872. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a90729a1._.js +0 -98
  873. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ad4346fa._.js +0 -98
  874. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b0862d69._.js +0 -98
  875. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b43306ee._.js +0 -98
  876. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b689ff5e._.js +0 -106
  877. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ba87daaa._.js +0 -98
  878. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c0461005._.js +0 -98
  879. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c1deb5f3._.js +0 -98
  880. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c8a62f42._.js +0 -98
  881. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cabaac2b._.js +0 -98
  882. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cb027619._.js +0 -98
  883. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cf608218._.js +0 -98
  884. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cfc1290d._.js +0 -98
  885. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d0109b9b._.js +0 -98
  886. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d0125483._.js +0 -3
  887. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d048ee6b._.js +0 -98
  888. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d12644e7._.js +0 -98
  889. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e3cc946c._.js +0 -98
  890. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e6fd27f8._.js +0 -98
  891. package/.next/standalone/.next/server/chunks/[root-of-the-server]__efb8251e._.js +0 -98
  892. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f44c6882._.js +0 -98
  893. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f85283de._.js +0 -98
  894. package/.next/standalone/.next/server/chunks/[root-of-the-server]__feceb3e4._.js +0 -98
  895. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__843070a6._.js +0 -3
  896. package/.next/standalone/.next/server/chunks/ssr/_e84a0c06._.js +0 -3
  897. package/.next/standalone/.next/static/chunks/470cade58d4eceeb.css +0 -3
  898. package/.next/standalone/.next/static/chunks/9d4164833c2c1fd6.js +0 -85
  899. package/.next/standalone/.next/static/chunks/f091f4bf8d80fd07.js +0 -1
  900. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/README.md +0 -46
  901. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/glib-2.0/include/glibconfig.h +0 -221
  902. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/index.js +0 -1
  903. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  904. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/package.json +0 -42
  905. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +0 -46
  906. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +0 -221
  907. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +0 -1
  908. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  909. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +0 -42
  910. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +0 -30
  911. package/.next/standalone/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  912. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
  913. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/package.json +0 -46
  914. /package/.next/standalone/.next/static/{5S4TviTCiNiTjf6KjXjBo → u1pHON3drz1mBi7owkbBP}/_buildManifest.js +0 -0
  915. /package/.next/standalone/.next/static/{5S4TviTCiNiTjf6KjXjBo → u1pHON3drz1mBi7owkbBP}/_clientMiddlewareManifest.json +0 -0
  916. /package/.next/standalone/.next/static/{5S4TviTCiNiTjf6KjXjBo → u1pHON3drz1mBi7owkbBP}/_ssgManifest.js +0 -0
  917. /package/.next/standalone/node_modules/@img/{sharp-libvips-linux-x64 → sharp-win32-x64}/versions.json +0 -0
@@ -1,720 +1,720 @@
1
- # Spaces Cortex — Distributed Intelligence Network
2
-
3
- **Date:** 2026-03-12
4
- **Status:** Approved
5
- **Feature Name:** Cortex
6
-
7
- ## Summary
8
-
9
- A persistent, self-building knowledge system for Spaces that continuously ingests all AI agent conversations, extracts decisions, patterns, preferences, and error resolutions, stores them as vector embeddings in LanceDB, and automatically injects relevant context into every prompt via hooks. Agents get smarter over time because the Cortex remembers everything you've built, decided, and corrected — across all sessions, all agents, all projects.
10
-
11
- In federated environments, Cortex nodes actively teach each other — propagating high-confidence knowledge across the network so every node benefits from every other node's experience. The result is a distributed intelligence network that grows smarter with every conversation, on every machine, across every team.
12
-
13
- The Cortex operates across four knowledge layers (Personal, Workspace, Team, Federation), supports all agent types (Claude Code, Codex, Gemini, Aider), and integrates with Spaces' existing tier model (Community, Pro/Server, Teams, Federation).
14
-
15
- ## Tier Availability
16
-
17
- Cortex is a **premium feature** available only on Teams and Federation tiers. It is not included in the open-source Community version.
18
-
19
- - All Cortex API routes check tier before responding (return 403 on Community)
20
- - All UI components use `useTier()` to conditionally render
21
- - The `src/lib/cortex/` directory can be excluded from Community builds
22
- - Federation features (query delegation, active propagation, sync) require the Federation tier specifically
23
- - Teams tier gets: local Cortex (personal + workspace layers, ingestion, retrieval, MCP, import/export)
24
- - Federation tier gets: everything in Teams + team layer, federation queries, Cortex-to-Cortex teaching, sync modes
25
-
26
- ## Design Principles
27
-
28
- - **Zero config** — Cortex works the moment it's enabled. No API keys required (falls back to local embeddings). No manual curation needed.
29
- - **Fully automatic** — All conversations are ingested passively. The Cortex decides what's worth remembering. Users never need to manually save knowledge.
30
- - **Invisible when working, inspectable when curious** — The Cortex enhances every prompt silently. But every injection is visible (pane header badge), every knowledge unit is browsable (Cortex panel), and everything can be taught, corrected, or forgotten.
31
- - **Privacy by default** — Personal knowledge never leaves your node. Workspace knowledge is shareable only if the workspace is collaborative. Team knowledge flows only between paired federation nodes.
32
- - **Distributed intelligence** — In federated environments, Cortex nodes actively teach each other. High-confidence knowledge propagates across the network automatically. Every node makes every other node smarter.
33
-
34
- ## Architecture
35
-
36
- ### System Overview
37
-
38
- ```
39
- Input (Conversation Stream)
40
- │ Claude Code JSONL, Codex, Gemini, Aider sessions, terminal output
41
-
42
- Ingestion Pipeline
43
- │ Tier 1: Fast Pass (heuristic, ~10ms) → immediate chunks
44
- │ Tier 2: Embedding (~50ms) → vectorize and store in LanceDB
45
- │ Tier 3: Distillation (async) → LLM extracts decisions, patterns, preferences
46
-
47
- Storage (LanceDB)
48
- │ Personal layer: ~/.spaces/cortex/personal/
49
- │ Workspace layer: ~/.spaces/cortex/workspace/{id}/
50
- │ Team layer: ~/.spaces/cortex/team/ (cache from federation queries)
51
-
52
- Retrieval & Injection
53
- │ Hook injection: automatic, every prompt, <200ms
54
- │ MCP tool: agent-driven deep queries
55
- │ Federation query: transparent delegation to remote nodes
56
-
57
- Agent receives prompt + relevant Cortex context
58
- ```
59
-
60
- ### Knowledge Layers
61
-
62
- Four layers, organized from most specific to most general:
63
-
64
- | Layer | Scope | Privacy | Storage | Examples |
65
- |-------|-------|---------|---------|----------|
66
- | **Personal** | Your preferences and style | Never shared | `~/.spaces/cortex/personal/` | "Prefers Zod", "No ORMs", "Terse output" |
67
- | **Workspace** | Project-specific knowledge | Shareable if workspace is collaborative | `~/.spaces/cortex/workspace/{id}/` | "Auth uses JWT", "DB schema v3", "Bug #247 fix" |
68
- | **Team** | Shared conventions | Flows between federation nodes | `~/.spaces/cortex/team/` (local cache) | "API uses /v2/ prefix", "All endpoints return {data, error}" |
69
- | **Federation** | Org-wide patterns | Query delegation across nodes | Not stored locally — queried on demand | Cross-team patterns, org standards |
70
-
71
- On every prompt, the Cortex searches: Personal → Workspace → Team → Federation. Most specific wins. Results merged by relevance score.
72
-
73
- ## Ingestion Pipeline
74
-
75
- ### Tier 1: Fast Pass (immediate, heuristic)
76
-
77
- Runs synchronously as messages are indexed. No LLM calls, no API calls. Pure text processing at ~10ms per message.
78
-
79
- **Extractors:**
80
-
81
- - **Message chunking** — Split conversations into semantic chunks at turn boundaries, topic shifts, and tool call boundaries. Each chunk gets metadata: session ID, workspace ID, agent type, timestamp, project path.
82
- - **Code block extraction** — Pull fenced code blocks as separate chunks. Tag with language, file path (from nearby context), and whether user-provided or agent-generated.
83
- - **File reference detection** — Regex scan for file paths. Links chunks to the files they discuss.
84
- - **Error/fix pair detection** — Detect "error → investigation → fix" patterns. Heuristic: error messages followed by successful resolution within the same session.
85
- - **Command extraction** — Terminal commands with context: what was run, why, what happened.
86
- - **Conversation summary markers** — When a session ends or reaches a natural break, generate a session-level summary chunk capturing the overall arc.
87
- - **Git context linking** — Capture git branch, commit hashes, and diff stats. Links knowledge to exact code state.
88
- - **Tool call analysis** — Parse tool_use/tool_result pairs. File reads = what code was examined. Edits = what changed and why. Bash commands = what was tested.
89
-
90
- ### Tier 2: Embedding (near-realtime)
91
-
92
- Runs async but fast. Vectorizes chunks from Tier 1:
93
-
94
- - **Model selection** — Check for API keys in order: Voyage AI → OpenAI → Anthropic → local (all-MiniLM-L6-v2 via ONNX Runtime). Best available wins. Default to most advanced available.
95
- - **Batch embedding** — Queue chunks, embed in batches (50-100 per API call).
96
- - **LanceDB storage** — Store vector with full metadata (see schema below).
97
- - **Deduplication** — Check cosine similarity against recent entries. >0.95 similarity = skip.
98
-
99
- ### Tier 3: Distillation (background, LLM-powered)
100
-
101
- Runs during idle time. Produces high-quality knowledge units from raw chunks:
102
-
103
- - **Decision extraction** — "We decided to use X because Y." Structured: decision, rationale, alternatives considered, date.
104
- - **Pattern recognition** — "This project always does X when Y." Recurring approaches across sessions.
105
- - **Preference learning** — "User corrected: don't do X, do Y instead." Corrections become personal-layer knowledge.
106
- - **Error wisdom** — "When error X happens, the fix is Y." Distilled from error/fix pairs.
107
- - **Staleness scoring** — Each unit gets a freshness score based on source file modification times.
108
-
109
- The distiller uses whatever LLM is available (Claude API, or delegates to a running Claude Code session). Processes batches of recent chunks, produces structured knowledge units, embeds them, stores with `type: 'distilled'` and higher base confidence.
110
-
111
- ### Bootstrap Ingestion
112
-
113
- On first enable (or when linking a new workspace to a project), bulk-processes all existing sessions:
114
-
115
- 1. Scan `~/.claude/projects/`, `~/.codex/`, `~/.gemini/`, `.aider.chat.history.md` for all existing sessions
116
- 2. Map sessions to workspaces by project path
117
- 3. Run Tier 1 (fast pass) on all messages
118
- 4. Run Tier 2 (embedding) in batches
119
- 5. Queue Tier 3 (distillation) starting from most recent, working backward
120
- 6. Ingest subagent transcripts (full conversations in `{sessionId}/subagents/`)
121
- 7. Show progress in UI: "Ingesting 172MB across 20 projects... 45%"
122
-
123
- Bootstrap is incremental — if interrupted, picks up where it left off using sync state tracking.
124
-
125
- ## Knowledge Classification
126
-
127
- ### Knowledge Unit Types
128
-
129
- | Type | Source | Confidence Base | Staleness Half-life | Example |
130
- |------|--------|-----------------|---------------------|---------|
131
- | `decision` | Distillation | 0.8 | 180 days | "Using JWT with refresh rotation for auth" |
132
- | `pattern` | Distillation + repetition | 0.8 | 90 days | "API routes validate with Zod middleware" |
133
- | `preference` | User corrections | 0.95 | 180 days | "Don't mock DB in integration tests" |
134
- | `error_fix` | Error/fix detection | 0.8 | 90 days | "ECONNRESET → exponential backoff with jitter" |
135
- | `context` | Session summaries | 0.6 | 30 days | "Migrating from v1 to v2 API" |
136
- | `code_pattern` | Code block analysis | 0.7 | 60 days | "Components use forwardRef + displayName" |
137
- | `command` | Command extraction | 0.6 | 30 days | "Deploy: npm run deploy:staging" |
138
- | `conversation` | Raw chunking | 0.4 | 14 days | Fallback: raw conversation segment |
139
- | `summary` | Session summarization | 0.6 | 60 days | "Session built the Cortex ingestion pipeline" |
140
-
141
- ### Storage Schema (LanceDB)
142
-
143
- ```
144
- Table: knowledge
145
- ├── id: string (uuid)
146
- ├── vector: float32[dimensions]
147
- ├── text: string
148
- ├── type: string // decision/pattern/preference/error_fix/context/code_pattern/command/conversation/summary
149
- ├── layer: string // personal/workspace/team
150
- ├── workspace_id: number | null
151
- ├── session_id: string | null
152
- ├── agent_type: string // claude/codex/gemini/aider
153
- ├── project_path: string | null
154
- ├── file_refs: string[]
155
- ├── confidence: float32 // 0.0–1.0
156
- ├── created: timestamp
157
- ├── source_timestamp: timestamp
158
- ├── stale_score: float32 // 0.0–1.0
159
- ├── access_count: number
160
- ├── last_accessed: timestamp | null
161
- └── metadata: json
162
- ```
163
-
164
- ### Confidence Scoring
165
-
166
- - **Source quality:** Distilled = 0.8 base, raw chunks = 0.4
167
- - **Repetition:** Same pattern across 3+ sessions → +0.1 per occurrence (cap 0.95)
168
- - **Recency:** Last 7 days → +0.1 boost
169
- - **User validation:** Explicit `cortex_teach` → 0.95
170
- - **Contradiction:** Newer knowledge contradicts older → older gets confidence reduced, gains `superseded_by` pointer
171
-
172
- ### Staleness Detection
173
-
174
- - **File modification tracking** — Referenced files heavily modified since knowledge created → increase `stale_score`
175
- - **Git-aware** — Referenced branch merged or deleted → mark potentially stale
176
- - **Contradiction from newer sessions** — Recent session shows different approach → downrank older
177
- - **Time decay** — Configurable half-lives per knowledge type (see table above)
178
-
179
- **Effective retrieval score:** `similarity × confidence × (1 - stale_score) × recency_boost`
180
-
181
- ## Retrieval & Injection
182
-
183
- ### Path 1: Hook Injection (automatic, every prompt)
184
-
185
- Target latency: <200ms.
186
-
187
- 1. **Extract query signal** — Parse prompt for intent, keywords, file paths, error messages, concept terms
188
- 2. **Multi-layer search** — Query LanceDB across layers with priority weighting:
189
- - Personal (weight 1.0)
190
- - Active workspace (weight 0.9)
191
- - Other workspaces (weight 0.5, if relevant)
192
- - Team via federation (weight 0.7, if available)
193
- 3. **Reranking** — Score by: vector similarity, recency, confidence, source quality, staleness. Take top-k (default: 5).
194
- 4. **Token budget** — Cap at ~2000 tokens (configurable). Summarize or truncate lower-ranked results if over budget.
195
- 5. **Inject** — Append `<cortex-context>` block to prompt:
196
-
197
- ```
198
- <cortex-context>
199
- Relevant context from your workspace history:
200
-
201
- [Decision] 2026-03-10: Auth uses JWT with httpOnly cookies, refresh token rotation.
202
- Source: session abc123, workspace "Backend API"
203
-
204
- [Pattern] This project uses Zod schemas at API boundaries, validated in middleware.
205
- Source: 4 sessions over 2 weeks, confidence: 0.92
206
-
207
- [Error Fix] "ECONNRESET on WebSocket reconnect" — Fixed by adding exponential backoff
208
- with jitter in the reconnect handler. See session def456.
209
-
210
- [Preference] You previously corrected: "Don't mock the database in integration tests."
211
- </cortex-context>
212
- ```
213
-
214
- For Claude Code: uses the `user-prompt-submit` hook.
215
-
216
- For other agents (Codex, Gemini, Aider): terminal intercept approach — watches PTY input stream and injects context via wrapper script that prepends cortex context to stdin.
217
-
218
- ### Path 2: MCP Tool (agent-driven, on-demand)
219
-
220
- The Cortex exposes an MCP server with these tools:
221
-
222
- | Tool | Purpose | Key Params |
223
- |------|---------|------------|
224
- | `cortex_search` | Semantic search across layers | query, layers, types, workspace_id, time_range, min_confidence, limit |
225
- | `cortex_recall` | Retrieve specific unit by ID or exact match | id, exact |
226
- | `cortex_context` | Full context for a workspace | workspace_id, depth (brief/full) |
227
- | `cortex_similar` | Find analogous past experiences | input, type (error/code/problem), limit |
228
- | `cortex_timeline` | Chronological decision/change history | workspace_id, project_path, limit |
229
- | `cortex_teach` | Explicitly store knowledge (confidence 0.95) | text, type, layer, workspace_id |
230
- | `cortex_forget` | Remove or downrank knowledge | id, query, action (delete/downrank) |
231
- | `cortex_status` | Cortex health and stats | — |
232
- | `cortex_export` | Export cortex to .cortexpack | scope, workspace_id, include_embeddings, format |
233
- | `cortex_import` | Import .cortexpack archive | path, target_layer, merge_strategy, re_embed |
234
-
235
- ### Path 3: Federation Query (transparent)
236
-
237
- When team-layer results are needed:
238
-
239
- 1. Local Cortex constructs search request (query embedding + filters)
240
- 2. Request goes to `GET /api/network/proxy/{nodeId}/api/cortex/search`
241
- 3. Remote node runs search locally, returns results
242
- 4. Local Cortex merges remote results with local by relevance score
243
- 5. All connected nodes queried in parallel, configurable timeout (default 500ms)
244
-
245
- ## Federation
246
-
247
- ### Three Sync Modes (per-node-pair setting)
248
-
249
- | Mode | Behavior | Best For |
250
- |------|----------|----------|
251
- | **Query-only** (default) | No data replication. Query remote nodes on demand. | Privacy-conscious teams, intermittent connectivity |
252
- | **Background sync** | Periodically pull team-layer knowledge and cache locally. Fall back to live query if cache stale. | Better latency, offline capability |
253
- | **Real-time sync** | Continuous replication via WebSocket. Knowledge appears on all nodes within seconds. | Tight teams, same codebase, full trust |
254
-
255
- Background sync: polls connected nodes every N minutes (default 5), imports new knowledge units using merge-by-similarity.
256
-
257
- Real-time sync: persistent WebSocket to `/api/cortex/federation/stream`. New team-layer units pushed as created.
258
-
259
- ### Privacy Model
260
-
261
- - **Personal layer** — Never leaves your node. Not queryable by remote nodes.
262
- - **Workspace layer** — Queryable by remote nodes only if the workspace has `collaboration: true`.
263
- - **Team layer** — Always queryable by paired federation nodes. This is the shared knowledge pool.
264
-
265
- ## Import/Export (Portable Knowledge)
266
-
267
- ### .cortexpack Format
268
-
269
- ```
270
- my-project.cortexpack (tar.gz)
271
- ├── manifest.json — version, source node, export date, stats
272
- ├── knowledge.jsonl — knowledge units as JSON lines
273
- ├── embeddings.lance/ — LanceDB table snapshot (optional, large)
274
- └── sessions.json — source session metadata for provenance
275
- ```
276
-
277
- Without embeddings: ~5-50MB typical. With embeddings: larger but skips re-embedding on import.
278
-
279
- ### Export Options
280
-
281
- - **Scope:** full, workspace, personal, or custom (filtered by type/time)
282
- - **Include embeddings:** optional (skip re-embedding on import vs. smaller file)
283
-
284
- ### Import Options
285
-
286
- - **Target layer:** where to put imported knowledge
287
- - **Merge strategy:** append (add all), merge (deduplicate by similarity, keep highest confidence), replace (wipe then import)
288
- - **Re-embed:** regenerate embeddings with local model if embeddings not included
289
-
290
- ### Use Cases
291
-
292
- - **Cloud ↔ Local sync** — Export from cloud VM, import locally (or vice versa)
293
- - **Onboarding** — Senior dev exports workspace cortex, new team member imports. Instant ramp-up.
294
- - **Project handoff** — Export cortex with codebase. Next developer gets the reasoning, not just the code.
295
- - **Backup/restore** — Periodic export as backup
296
- - **Machine migration** — Moving to new laptop? Export all cortexes, import on new machine.
297
-
298
- ## REST API
299
-
300
- ```
301
- # Cortex status and health
302
- GET /api/cortex/status
303
-
304
- # Knowledge CRUD
305
- GET /api/cortex/search?q=...&layer=...&type=...
306
- GET /api/cortex/knowledge/:id
307
- POST /api/cortex/knowledge — create (cortex_teach)
308
- PATCH /api/cortex/knowledge/:id — update confidence/layer/metadata
309
- DELETE /api/cortex/knowledge/:id — remove (cortex_forget)
310
-
311
- # Workspace context
312
- GET /api/cortex/workspace/:id/context
313
- GET /api/cortex/timeline?workspace_id=...
314
-
315
- # Bootstrap
316
- POST /api/cortex/ingest/bootstrap
317
- GET /api/cortex/ingest/status
318
-
319
- # Import/Export
320
- POST /api/cortex/export — body: {scope, workspace_id?, include_embeddings?}
321
- POST /api/cortex/import — multipart .cortexpack upload
322
- GET /api/cortex/import/status
323
-
324
- # Settings
325
- GET /api/cortex/settings
326
- POST /api/cortex/settings
327
-
328
- # Federation (served to remote nodes)
329
- GET /api/cortex/federation/search — remote search endpoint
330
- WS /api/cortex/federation/stream — real-time sync WebSocket
331
-
332
- # Active Knowledge Propagation
333
- POST /api/cortex/federation/teach — receive propagated knowledge from remote node
334
- GET /api/cortex/federation/pending — knowledge pending review (contradictions)
335
- POST /api/cortex/federation/resolve — resolve contradiction
336
- ```
337
-
338
- ## UI Integration
339
-
340
- ### 1. Top Bar — CortexStatus Indicator
341
-
342
- Small purple "Cortex" badge in the top bar, always visible. Shows knowledge unit count. Pulses gently during active ingestion or retrieval. Colors: green (healthy), amber (ingesting), red (error). Click to open Cortex panel.
343
-
344
- ### 2. CortexPanel — Slide-out Knowledge Explorer
345
-
346
- Opens from the right when Cortex indicator is clicked:
347
-
348
- - **Search bar** — Semantic search across all knowledge
349
- - **Stats row** — Total units, distilled count, average confidence
350
- - **Layer tabs** — Personal / Workspace / Team
351
- - **Knowledge list** — Each unit shows: type badge (color-coded), text, confidence, source, age
352
- - **Actions** — Teach Cortex, Export, Settings
353
-
354
- Knowledge type colors:
355
- - Decision: blue (#60a5fa)
356
- - Preference: pink (#f472b6)
357
- - Pattern: green (#34d399)
358
- - Error Fix: amber (#fbbf24)
359
- - Context: gray (#94a3b8)
360
-
361
- ### 3. Pane Header — CortexActivity Badge
362
-
363
- Each terminal pane header shows a small badge when the Cortex injected context into the last prompt: "3 items" with a purple dot. Click to see exactly what context was provided. Builds trust through transparency.
364
-
365
- ### 4. Settings Page — CortexConfiguration
366
-
367
- Settings → Cortex section:
368
- - Enable/disable toggle
369
- - Embedding provider (auto-detected, with override)
370
- - Injection token budget (default 2000)
371
- - LLM distillation toggle
372
- - Federation sync mode dropdown (Query Only / Background Sync / Real-time Sync)
373
- - Bootstrap ingestion trigger with progress bar
374
-
375
- ## Configuration Defaults
376
-
377
- ```json
378
- {
379
- "enabled": true,
380
- "embedding": {
381
- "provider": "auto",
382
- "model": null,
383
- "fallback": "local"
384
- },
385
- "injection": {
386
- "enabled": true,
387
- "max_tokens": 2000,
388
- "max_results": 5,
389
- "min_confidence": 0.3
390
- },
391
- "ingestion": {
392
- "auto_ingest": true,
393
- "distillation": true,
394
- "distillation_model": "auto"
395
- },
396
- "layers": {
397
- "personal": true,
398
- "workspace": true,
399
- "team": true
400
- },
401
- "staleness": {
402
- "decision_halflife_days": 180,
403
- "pattern_halflife_days": 90,
404
- "context_halflife_days": 30,
405
- "conversation_halflife_days": 14
406
- },
407
- "federation": {
408
- "sync_mode": "query-only",
409
- "sync_interval_minutes": 5,
410
- "query_timeout_ms": 500
411
- }
412
- }
413
- ```
414
-
415
- ## File Structure
416
-
417
- ```
418
- src/lib/cortex/
419
- ├── index.ts — Cortex singleton, initialization
420
- ├── config.ts — Cortex settings management
421
- ├── store.ts — LanceDB connection, table management
422
- ├── embeddings/
423
- │ ├── index.ts — Embedding provider router
424
- │ ├── voyage.ts — Voyage AI provider
425
- │ ├── openai.ts — OpenAI provider
426
- │ └── local.ts — Transformers.js ONNX Runtime local provider
427
- ├── ingestion/
428
- │ ├── pipeline.ts — Ingestion pipeline orchestrator
429
- │ ├── chunker.ts — Message chunking logic
430
- │ ├── extractors.ts — Code blocks, file refs, errors, commands, git context, tool calls
431
- │ ├── deduplicator.ts — Cosine similarity dedup
432
- │ ├── bootstrap.ts — Historical session bulk ingestion
433
- │ └── watcher.ts — Live file watcher for new messages
434
- ├── distillation/
435
- │ ├── distiller.ts — Background LLM knowledge extraction
436
- │ ├── prompts.ts — Distillation prompt templates
437
- │ └── scheduler.ts — Idle-time scheduling
438
- ├── retrieval/
439
- │ ├── search.ts — Multi-layer vector search with reranking
440
- │ ├── injection.ts — Prompt augmentation (cortex-context block)
441
- │ ├── federation.ts — Remote node query delegation
442
- │ └── scoring.ts — Confidence, staleness, relevance scoring
443
- ├── knowledge/
444
- │ ├── types.ts — Knowledge unit type definitions
445
- │ ├── staleness.ts — Staleness detection and decay
446
- │ └── contradiction.ts — Contradiction detection between units
447
- ├── portability/
448
- │ ├── exporter.ts — .cortexpack export
449
- │ └── importer.ts — .cortexpack import with merge strategies
450
- └── mcp/
451
- └── server.ts — MCP server exposing cortex tools
452
-
453
- src/app/api/cortex/
454
- ├── status/route.ts
455
- ├── search/route.ts
456
- ├── knowledge/route.ts
457
- ├── knowledge/[id]/route.ts
458
- ├── workspace/[id]/context/route.ts
459
- ├── timeline/route.ts
460
- ├── ingest/bootstrap/route.ts
461
- ├── ingest/status/route.ts
462
- ├── export/route.ts
463
- ├── import/route.ts
464
- ├── import/status/route.ts
465
- ├── settings/route.ts
466
- └── federation/
467
- ├── search/route.ts
468
- ├── stream/route.ts
469
- ├── teach/route.ts
470
- ├── pending/route.ts
471
- └── resolve/route.ts
472
-
473
- src/components/cortex/
474
- ├── cortex-indicator.tsx — Top bar status badge
475
- ├── cortex-panel.tsx — Slide-out knowledge explorer
476
- ├── cortex-settings.tsx — Settings page section
477
- ├── knowledge-card.tsx — Individual knowledge unit display
478
- └── injection-badge.tsx — Pane header injection indicator
479
-
480
- ~/.spaces/cortex/
481
- ├── config.json — Cortex settings
482
- ├── personal/ — Personal layer LanceDB tables
483
- ├── workspace/
484
- │ ├── 1/ — Workspace 1 LanceDB tables
485
- │ ├── 2/ — Workspace 2 LanceDB tables
486
- │ └── .../
487
- └── team/ — Team layer cache (from federation)
488
- ```
489
-
490
- ## Dependencies & Platform Compatibility
491
-
492
- ### LanceDB
493
-
494
- Use `@lancedb/lancedb` (the official Node.js package). This has native Rust bindings for optimal performance, with a WASM fallback for platforms where native compilation fails.
495
-
496
- **Installation strategy:**
497
-
498
- 1. Primary: `@lancedb/lancedb` with native bindings (best performance)
499
- 2. Fallback: If native compilation fails during `npm install`, the package provides WASM builds that work everywhere
500
- 3. The package supports Windows (MSVC + MINGW), macOS (Intel + Apple Silicon), and Linux (x64 + ARM64)
501
-
502
- Since Spaces already depends on `better-sqlite3` (native), users are already set up for native compilation. LanceDB adds ~15MB to the install.
503
-
504
- ### Local Embedding Model
505
-
506
- For the local embedding fallback, use `@huggingface/transformers` (Transformers.js) which runs models via ONNX Runtime in Node.js. The `all-MiniLM-L6-v2` model is ~23MB and loads once on first use.
507
-
508
- ### Embedding Provider Chain
509
-
510
- Check for API keys in order: Voyage AI (`VOYAGE_API_KEY`) → OpenAI (`OPENAI_API_KEY`) → local (ONNX). Default to the best available. Anthropic does not offer a public embedding API; Voyage AI is the recommended partner.
511
-
512
- ### Embedding Dimension Management
513
-
514
- Different providers produce different dimensions (MiniLM: 384, OpenAI: 1536, Voyage: 1024). The Cortex stores the current embedding dimension in config. If the user changes providers:
515
-
516
- 1. Detect dimension mismatch on startup
517
- 2. Warn: "Embedding provider changed. Re-embedding all knowledge units in background."
518
- 3. Queue full re-embedding as a background job (same as bootstrap, but embedding-only)
519
- 4. During transition, old vectors are still searchable (LanceDB handles mixed queries via separate partitions), new results take priority
520
-
521
- ## Error Handling & Resilience
522
-
523
- ### Ingestion Pipeline Failures
524
-
525
- - **Tier 1 (fast pass):** If a session file is malformed or being actively written to, skip that file and log a warning. Retry on next sync cycle. Never crash the pipeline for a single bad file.
526
- - **Tier 2 (embedding):** If the embedding API returns an error (rate limit, network, invalid response), move the chunk to a retry queue with exponential backoff (1s, 5s, 30s, 5min). After 5 failures, fall back to local embeddings for that batch. If local also fails, store the chunk as text-only (searchable via FTS but not vector search) and log an error.
527
- - **Tier 3 (distillation):** If the LLM call fails or returns malformed output, discard that distillation attempt and log. The raw chunks remain searchable. Retry distillation on next idle cycle. Never block ingestion on distillation failures.
528
-
529
- ### LanceDB Corruption Recovery
530
-
531
- LanceDB uses Arrow IPC format. Partial writes can corrupt tables. Recovery strategy:
532
-
533
- 1. On startup, verify table integrity (LanceDB provides health checks)
534
- 2. If corruption detected, log error, rename corrupt directory to `{layer}.corrupt.{timestamp}/`
535
- 3. Create fresh empty table
536
- 4. Trigger re-ingestion from raw session files (bootstrap in repair mode — embedding-only, no re-parsing)
537
- 5. The raw JSONL session files are the source of truth; LanceDB is a derived index
538
-
539
- ### Graceful Degradation
540
-
541
- The Cortex continues to function even when components fail:
542
-
543
- | Failure | Behavior |
544
- |---------|----------|
545
- | Embedding API down | Fall back to local embeddings automatically |
546
- | Local embeddings fail | Store text-only chunks, skip vector search, use FTS keyword matching |
547
- | LanceDB unavailable | Cortex indicator shows red, injection disabled, MCP tools return empty results |
548
- | Federation node unreachable | Skip that node's results, merge what's available |
549
- | Distillation LLM unavailable | Raw chunks still searchable, distillation queued for later |
550
- | Bootstrap interrupted | Resume from last checkpoint on next run |
551
-
552
- ### Circuit Breaker
553
-
554
- External API calls (embedding, distillation, federation) use a circuit breaker pattern:
555
-
556
- - **Closed** (normal): requests flow through
557
- - **Open** (after 5 consecutive failures): stop calling for 60 seconds, return fallback
558
- - **Half-open** (after cooldown): try one request, if success → close, if fail → reopen
559
-
560
- ## Non-Claude Agent Injection
561
-
562
- Claude Code has hook support (`PreToolUse`, `PostToolUse`, `Notification`, `Stop`). However, Claude Code does not currently support a `user-prompt-submit` hook for intercepting prompts before they're sent.
563
-
564
- **Primary injection strategy (all agents): MCP Tool**
565
-
566
- The Cortex registers as an MCP server. Claude Code (and any agent that supports MCP) can call `cortex_search` and `cortex_context` as tools. The agent receives cortex context as tool results, which it naturally incorporates.
567
-
568
- To make this automatic (without the agent needing to know to ask), the Cortex's MCP server description includes instructions telling the agent to query the Cortex at the start of each task. This is how MCP servers like `memory` work today — the server description says "always check memory first."
569
-
570
- **Secondary injection strategy (future): PTY-level injection**
571
-
572
- For agents without MCP support, and for the auto-injection experience (user doesn't need to configure anything), a future version could:
573
-
574
- 1. Intercept at the WebSocket layer in `terminal/server.ts` — when a `data` message from the client matches a prompt pattern (newline after text), inject cortex context
575
- 2. This happens before the data reaches node-pty, so the agent sees the enriched prompt
576
- 3. This requires careful handling of escape sequences, binary data, and multi-byte characters
577
- 4. **Deferred to a future phase** — MCP is the v1 approach
578
-
579
- ## Integration with Existing Data Layer
580
-
581
- ### SQLite Cross-References
582
-
583
- Cortex knowledge units reference SQLite entities via:
584
-
585
- - `workspace_id` → `workspaces.id` in SQLite
586
- - `session_id` → `sessions.session_id` in SQLite
587
-
588
- These are soft references (no foreign key enforcement across databases). The Cortex tolerates dangling references gracefully — if a workspace is deleted from SQLite, its knowledge units remain in LanceDB but are no longer returned in workspace-scoped queries (workspace doesn't exist = no results).
589
-
590
- ### Lifecycle Coupling
591
-
592
- - **Workspace deleted** → Cortex workspace layer directory is not automatically deleted (knowledge may still be valuable in personal layer). A "Clean up Cortex data" option in UI allows explicit deletion.
593
- - **Session deleted from SQLite** → Knowledge units sourced from that session remain (the knowledge is independent of the session index).
594
- - **Bootstrap reads from** → Raw agent JSONL files on disk (not from SQLite). The SQLite index helps map sessions to workspaces, but the actual content comes from the source files.
595
-
596
- ### FTS5 Coexistence
597
-
598
- The existing FTS5 full-text search (`sessions_fts`) continues to work for session content search. The Cortex adds semantic/vector search on top. The `/api/search` route could be extended to combine FTS5 keyword results with Cortex vector results for hybrid search, but this is not required for v1.
599
-
600
- ## Configuration
601
-
602
- Cortex settings are stored as a `cortex` key within the existing `~/.spaces/config.json`. This requires adding a `cortex?: CortexConfig` field to the `SpacesConfig` interface in `src/lib/config.ts`, and updating `readConfig`/`writeConfig` to preserve unknown keys (or explicitly handle the `cortex` field). This avoids a separate config file and keeps all Spaces configuration in one place.
603
-
604
- The `~/.spaces/cortex/` directory contains only LanceDB data files, not configuration.
605
-
606
- ## Performance Budget
607
-
608
- ### Hook/MCP Injection Latency Target: <200ms (local only)
609
-
610
- | Step | Budget |
611
- |------|--------|
612
- | Query signal extraction | 5ms |
613
- | LanceDB search (personal + workspace) | 20-50ms |
614
- | Reranking + staleness scoring | 10ms |
615
- | Result formatting | 5ms |
616
- | **Total local** | **40-70ms** |
617
-
618
- Federation queries are fire-and-forget with a 500ms timeout. If federation results arrive before the agent processes the prompt, they're included. If not, local results are sufficient. Federation results may also arrive and be available for the *next* prompt.
619
-
620
- ### Disk Space Management
621
-
622
- - **Warning threshold:** Cortex UI shows a warning when total Cortex storage exceeds 500MB
623
- - **Maximum size:** Configurable (default: 2GB). When exceeded, automatic pruning removes lowest-confidence + highest-staleness entries first
624
- - **Pruning strategy:** Remove `conversation` type chunks first (lowest value), then `command`, then stale `context`. Never auto-prune `decision`, `preference`, or `error_fix` types — these are too valuable.
625
-
626
- ## Active Knowledge Propagation (Cortex-to-Cortex Teaching)
627
-
628
- In federated environments, Cortex nodes don't just respond to queries — they actively teach each other. High-confidence knowledge propagates across the network automatically, creating a distributed intelligence mesh where every node benefits from every other node's experience.
629
-
630
- ### Propagation Mechanics
631
-
632
- When a Cortex node produces a knowledge unit that crosses a **propagation threshold**, it becomes a candidate for teaching:
633
-
634
- | Criteria | Threshold | Rationale |
635
- |----------|-----------|-----------|
636
- | Confidence score | ≥ 0.85 | Only propagate knowledge the source node is confident about |
637
- | Type | `decision`, `pattern`, `preference`, `error_fix` | High-value types only — raw `conversation` and `context` chunks stay local |
638
- | Layer | `team` | Personal and workspace knowledge are never propagated automatically |
639
- | Validation | User-validated or repeated 3+ times | Prevents propagation of noise |
640
-
641
- ### Propagation Flow
642
-
643
- ```
644
- Node A discovers high-confidence pattern
645
-
646
-
647
- Propagation check: confidence ≥ 0.85, team layer, validated type?
648
- │ yes
649
-
650
- Package as teaching unit:
651
- { knowledge, source_node, confidence, provenance_chain }
652
-
653
-
654
- Push to all paired federation nodes via:
655
- - Real-time sync: WebSocket push (immediate)
656
- - Background sync: included in next sync batch
657
- - Query-only: piggyback on next query response as "suggested knowledge"
658
-
659
-
660
- Receiving node (Node B):
661
- 1. Dedup check — already have this? (cosine similarity > 0.95 → skip)
662
- 2. Contradiction check — conflicts with local knowledge? → flag for review
663
- 3. Confidence adjustment — remote knowledge arrives at 0.8 × source confidence
664
- (trust but verify — local experience always ranks higher)
665
- 4. Store in team layer with provenance: "Learned from Node A"
666
-
667
-
668
- Node B's agents now benefit from Node A's experience
669
- ```
670
-
671
- ### Provenance Chain
672
-
673
- Every propagated knowledge unit carries a provenance chain — a record of where the knowledge originated and how it traveled:
674
-
675
- ```json
676
- {
677
- "origin_node": "node-abc",
678
- "origin_timestamp": "2026-03-10T14:30:00Z",
679
- "hops": [
680
- { "node": "node-abc", "confidence": 0.92, "timestamp": "2026-03-10T14:30:00Z" },
681
- { "node": "node-def", "confidence": 0.74, "timestamp": "2026-03-10T15:00:00Z" }
682
- ],
683
- "max_hops": 3
684
- }
685
- ```
686
-
687
- **Max hops** prevents knowledge from echoing endlessly across the network. Default: 3 hops. Knowledge that has traveled through 3 nodes is not propagated further (it's available via query delegation if needed).
688
-
689
- ### Confidence Decay Across Hops
690
-
691
- Each hop multiplies confidence by 0.8 (retains 80%):
692
-
693
- - **Origin:** 0.92
694
- - **Hop 1:** 0.92 × 0.8 = 0.74
695
- - **Hop 2:** 0.74 × 0.8 = 0.59
696
- - **Hop 3:** 0.59 × 0.8 = 0.47 (no further propagation)
697
-
698
- This ensures that firsthand knowledge always outranks secondhand knowledge. A node's own direct experience is always the strongest signal.
699
-
700
- ### Contradiction Resolution
701
-
702
- When propagated knowledge contradicts local knowledge:
703
-
704
- 1. **Local wins by default** — Local knowledge has higher base confidence (no hop decay)
705
- 2. **Flag for review** — The contradiction is surfaced in the Cortex panel: "Node X says Y, but you've been doing Z. Which is correct?"
706
- 3. **User resolves** — User can accept the remote knowledge (updates local), reject it (downranks the remote unit), or mark as "context-dependent" (both valid in different situations)
707
- 4. **Resolution propagates** — If the user explicitly validates remote knowledge, that validation propagates back to the source node as a confidence boost
708
-
709
- ### Rate Limiting
710
-
711
- - **Per-node-pair:** Max 50 knowledge units pushed per sync cycle
712
- - **Dedup window:** Knowledge within 0.95 cosine similarity of existing units is silently dropped
713
- - **Backpressure:** If a receiving node's ingestion queue exceeds 500 items, it signals the sender to slow down
714
-
715
- ## Deferred / Future Considerations
716
-
717
- - **Knowledge graph visualization** — 3D visualization of how knowledge units relate (could reuse R3F infrastructure)
718
- - **Auto-CLAUDE.md generation** — Cortex distills its most confident preferences/patterns into a CLAUDE.md file automatically
719
- - **Multi-modal knowledge** — Screenshots, diagrams, architecture images stored alongside text
720
- - **Knowledge unit voting** — In teams, members can upvote/downvote knowledge units to improve confidence scoring
1
+ # Spaces Cortex — Distributed Intelligence Network
2
+
3
+ **Date:** 2026-03-12
4
+ **Status:** Approved
5
+ **Feature Name:** Cortex
6
+
7
+ ## Summary
8
+
9
+ A persistent, self-building knowledge system for Spaces that continuously ingests all AI agent conversations, extracts decisions, patterns, preferences, and error resolutions, stores them as vector embeddings in LanceDB, and automatically injects relevant context into every prompt via hooks. Agents get smarter over time because the Cortex remembers everything you've built, decided, and corrected — across all sessions, all agents, all projects.
10
+
11
+ In federated environments, Cortex nodes actively teach each other — propagating high-confidence knowledge across the network so every node benefits from every other node's experience. The result is a distributed intelligence network that grows smarter with every conversation, on every machine, across every team.
12
+
13
+ The Cortex operates across four knowledge layers (Personal, Workspace, Team, Federation), supports all agent types (Claude Code, Codex, Gemini, Aider), and integrates with Spaces' existing tier model (Community, Pro/Server, Teams, Federation).
14
+
15
+ ## Tier Availability
16
+
17
+ Cortex is a **premium feature** available only on Teams and Federation tiers. It is not included in the open-source Community version.
18
+
19
+ - All Cortex API routes check tier before responding (return 403 on Community)
20
+ - All UI components use `useTier()` to conditionally render
21
+ - The `src/lib/cortex/` directory can be excluded from Community builds
22
+ - Federation features (query delegation, active propagation, sync) require the Federation tier specifically
23
+ - Teams tier gets: local Cortex (personal + workspace layers, ingestion, retrieval, MCP, import/export)
24
+ - Federation tier gets: everything in Teams + team layer, federation queries, Cortex-to-Cortex teaching, sync modes
25
+
26
+ ## Design Principles
27
+
28
+ - **Zero config** — Cortex works the moment it's enabled. No API keys required (falls back to local embeddings). No manual curation needed.
29
+ - **Fully automatic** — All conversations are ingested passively. The Cortex decides what's worth remembering. Users never need to manually save knowledge.
30
+ - **Invisible when working, inspectable when curious** — The Cortex enhances every prompt silently. But every injection is visible (pane header badge), every knowledge unit is browsable (Cortex panel), and everything can be taught, corrected, or forgotten.
31
+ - **Privacy by default** — Personal knowledge never leaves your node. Workspace knowledge is shareable only if the workspace is collaborative. Team knowledge flows only between paired federation nodes.
32
+ - **Distributed intelligence** — In federated environments, Cortex nodes actively teach each other. High-confidence knowledge propagates across the network automatically. Every node makes every other node smarter.
33
+
34
+ ## Architecture
35
+
36
+ ### System Overview
37
+
38
+ ```
39
+ Input (Conversation Stream)
40
+ │ Claude Code JSONL, Codex, Gemini, Aider sessions, terminal output
41
+
42
+ Ingestion Pipeline
43
+ │ Tier 1: Fast Pass (heuristic, ~10ms) → immediate chunks
44
+ │ Tier 2: Embedding (~50ms) → vectorize and store in LanceDB
45
+ │ Tier 3: Distillation (async) → LLM extracts decisions, patterns, preferences
46
+
47
+ Storage (LanceDB)
48
+ │ Personal layer: ~/.spaces/cortex/personal/
49
+ │ Workspace layer: ~/.spaces/cortex/workspace/{id}/
50
+ │ Team layer: ~/.spaces/cortex/team/ (cache from federation queries)
51
+
52
+ Retrieval & Injection
53
+ │ Hook injection: automatic, every prompt, <200ms
54
+ │ MCP tool: agent-driven deep queries
55
+ │ Federation query: transparent delegation to remote nodes
56
+
57
+ Agent receives prompt + relevant Cortex context
58
+ ```
59
+
60
+ ### Knowledge Layers
61
+
62
+ Four layers, organized from most specific to most general:
63
+
64
+ | Layer | Scope | Privacy | Storage | Examples |
65
+ |-------|-------|---------|---------|----------|
66
+ | **Personal** | Your preferences and style | Never shared | `~/.spaces/cortex/personal/` | "Prefers Zod", "No ORMs", "Terse output" |
67
+ | **Workspace** | Project-specific knowledge | Shareable if workspace is collaborative | `~/.spaces/cortex/workspace/{id}/` | "Auth uses JWT", "DB schema v3", "Bug #247 fix" |
68
+ | **Team** | Shared conventions | Flows between federation nodes | `~/.spaces/cortex/team/` (local cache) | "API uses /v2/ prefix", "All endpoints return {data, error}" |
69
+ | **Federation** | Org-wide patterns | Query delegation across nodes | Not stored locally — queried on demand | Cross-team patterns, org standards |
70
+
71
+ On every prompt, the Cortex searches: Personal → Workspace → Team → Federation. Most specific wins. Results merged by relevance score.
72
+
73
+ ## Ingestion Pipeline
74
+
75
+ ### Tier 1: Fast Pass (immediate, heuristic)
76
+
77
+ Runs synchronously as messages are indexed. No LLM calls, no API calls. Pure text processing at ~10ms per message.
78
+
79
+ **Extractors:**
80
+
81
+ - **Message chunking** — Split conversations into semantic chunks at turn boundaries, topic shifts, and tool call boundaries. Each chunk gets metadata: session ID, workspace ID, agent type, timestamp, project path.
82
+ - **Code block extraction** — Pull fenced code blocks as separate chunks. Tag with language, file path (from nearby context), and whether user-provided or agent-generated.
83
+ - **File reference detection** — Regex scan for file paths. Links chunks to the files they discuss.
84
+ - **Error/fix pair detection** — Detect "error → investigation → fix" patterns. Heuristic: error messages followed by successful resolution within the same session.
85
+ - **Command extraction** — Terminal commands with context: what was run, why, what happened.
86
+ - **Conversation summary markers** — When a session ends or reaches a natural break, generate a session-level summary chunk capturing the overall arc.
87
+ - **Git context linking** — Capture git branch, commit hashes, and diff stats. Links knowledge to exact code state.
88
+ - **Tool call analysis** — Parse tool_use/tool_result pairs. File reads = what code was examined. Edits = what changed and why. Bash commands = what was tested.
89
+
90
+ ### Tier 2: Embedding (near-realtime)
91
+
92
+ Runs async but fast. Vectorizes chunks from Tier 1:
93
+
94
+ - **Model selection** — Check for API keys in order: Voyage AI → OpenAI → Anthropic → local (all-MiniLM-L6-v2 via ONNX Runtime). Best available wins. Default to most advanced available.
95
+ - **Batch embedding** — Queue chunks, embed in batches (50-100 per API call).
96
+ - **LanceDB storage** — Store vector with full metadata (see schema below).
97
+ - **Deduplication** — Check cosine similarity against recent entries. >0.95 similarity = skip.
98
+
99
+ ### Tier 3: Distillation (background, LLM-powered)
100
+
101
+ Runs during idle time. Produces high-quality knowledge units from raw chunks:
102
+
103
+ - **Decision extraction** — "We decided to use X because Y." Structured: decision, rationale, alternatives considered, date.
104
+ - **Pattern recognition** — "This project always does X when Y." Recurring approaches across sessions.
105
+ - **Preference learning** — "User corrected: don't do X, do Y instead." Corrections become personal-layer knowledge.
106
+ - **Error wisdom** — "When error X happens, the fix is Y." Distilled from error/fix pairs.
107
+ - **Staleness scoring** — Each unit gets a freshness score based on source file modification times.
108
+
109
+ The distiller uses whatever LLM is available (Claude API, or delegates to a running Claude Code session). Processes batches of recent chunks, produces structured knowledge units, embeds them, stores with `type: 'distilled'` and higher base confidence.
110
+
111
+ ### Bootstrap Ingestion
112
+
113
+ On first enable (or when linking a new workspace to a project), bulk-processes all existing sessions:
114
+
115
+ 1. Scan `~/.claude/projects/`, `~/.codex/`, `~/.gemini/`, `.aider.chat.history.md` for all existing sessions
116
+ 2. Map sessions to workspaces by project path
117
+ 3. Run Tier 1 (fast pass) on all messages
118
+ 4. Run Tier 2 (embedding) in batches
119
+ 5. Queue Tier 3 (distillation) starting from most recent, working backward
120
+ 6. Ingest subagent transcripts (full conversations in `{sessionId}/subagents/`)
121
+ 7. Show progress in UI: "Ingesting 172MB across 20 projects... 45%"
122
+
123
+ Bootstrap is incremental — if interrupted, picks up where it left off using sync state tracking.
124
+
125
+ ## Knowledge Classification
126
+
127
+ ### Knowledge Unit Types
128
+
129
+ | Type | Source | Confidence Base | Staleness Half-life | Example |
130
+ |------|--------|-----------------|---------------------|---------|
131
+ | `decision` | Distillation | 0.8 | 180 days | "Using JWT with refresh rotation for auth" |
132
+ | `pattern` | Distillation + repetition | 0.8 | 90 days | "API routes validate with Zod middleware" |
133
+ | `preference` | User corrections | 0.95 | 180 days | "Don't mock DB in integration tests" |
134
+ | `error_fix` | Error/fix detection | 0.8 | 90 days | "ECONNRESET → exponential backoff with jitter" |
135
+ | `context` | Session summaries | 0.6 | 30 days | "Migrating from v1 to v2 API" |
136
+ | `code_pattern` | Code block analysis | 0.7 | 60 days | "Components use forwardRef + displayName" |
137
+ | `command` | Command extraction | 0.6 | 30 days | "Deploy: npm run deploy:staging" |
138
+ | `conversation` | Raw chunking | 0.4 | 14 days | Fallback: raw conversation segment |
139
+ | `summary` | Session summarization | 0.6 | 60 days | "Session built the Cortex ingestion pipeline" |
140
+
141
+ ### Storage Schema (LanceDB)
142
+
143
+ ```
144
+ Table: knowledge
145
+ ├── id: string (uuid)
146
+ ├── vector: float32[dimensions]
147
+ ├── text: string
148
+ ├── type: string // decision/pattern/preference/error_fix/context/code_pattern/command/conversation/summary
149
+ ├── layer: string // personal/workspace/team
150
+ ├── workspace_id: number | null
151
+ ├── session_id: string | null
152
+ ├── agent_type: string // claude/codex/gemini/aider
153
+ ├── project_path: string | null
154
+ ├── file_refs: string[]
155
+ ├── confidence: float32 // 0.0–1.0
156
+ ├── created: timestamp
157
+ ├── source_timestamp: timestamp
158
+ ├── stale_score: float32 // 0.0–1.0
159
+ ├── access_count: number
160
+ ├── last_accessed: timestamp | null
161
+ └── metadata: json
162
+ ```
163
+
164
+ ### Confidence Scoring
165
+
166
+ - **Source quality:** Distilled = 0.8 base, raw chunks = 0.4
167
+ - **Repetition:** Same pattern across 3+ sessions → +0.1 per occurrence (cap 0.95)
168
+ - **Recency:** Last 7 days → +0.1 boost
169
+ - **User validation:** Explicit `cortex_teach` → 0.95
170
+ - **Contradiction:** Newer knowledge contradicts older → older gets confidence reduced, gains `superseded_by` pointer
171
+
172
+ ### Staleness Detection
173
+
174
+ - **File modification tracking** — Referenced files heavily modified since knowledge created → increase `stale_score`
175
+ - **Git-aware** — Referenced branch merged or deleted → mark potentially stale
176
+ - **Contradiction from newer sessions** — Recent session shows different approach → downrank older
177
+ - **Time decay** — Configurable half-lives per knowledge type (see table above)
178
+
179
+ **Effective retrieval score:** `similarity × confidence × (1 - stale_score) × recency_boost`
180
+
181
+ ## Retrieval & Injection
182
+
183
+ ### Path 1: Hook Injection (automatic, every prompt)
184
+
185
+ Target latency: <200ms.
186
+
187
+ 1. **Extract query signal** — Parse prompt for intent, keywords, file paths, error messages, concept terms
188
+ 2. **Multi-layer search** — Query LanceDB across layers with priority weighting:
189
+ - Personal (weight 1.0)
190
+ - Active workspace (weight 0.9)
191
+ - Other workspaces (weight 0.5, if relevant)
192
+ - Team via federation (weight 0.7, if available)
193
+ 3. **Reranking** — Score by: vector similarity, recency, confidence, source quality, staleness. Take top-k (default: 5).
194
+ 4. **Token budget** — Cap at ~2000 tokens (configurable). Summarize or truncate lower-ranked results if over budget.
195
+ 5. **Inject** — Append `<cortex-context>` block to prompt:
196
+
197
+ ```
198
+ <cortex-context>
199
+ Relevant context from your workspace history:
200
+
201
+ [Decision] 2026-03-10: Auth uses JWT with httpOnly cookies, refresh token rotation.
202
+ Source: session abc123, workspace "Backend API"
203
+
204
+ [Pattern] This project uses Zod schemas at API boundaries, validated in middleware.
205
+ Source: 4 sessions over 2 weeks, confidence: 0.92
206
+
207
+ [Error Fix] "ECONNRESET on WebSocket reconnect" — Fixed by adding exponential backoff
208
+ with jitter in the reconnect handler. See session def456.
209
+
210
+ [Preference] You previously corrected: "Don't mock the database in integration tests."
211
+ </cortex-context>
212
+ ```
213
+
214
+ For Claude Code: uses the `user-prompt-submit` hook.
215
+
216
+ For other agents (Codex, Gemini, Aider): terminal intercept approach — watches PTY input stream and injects context via wrapper script that prepends cortex context to stdin.
217
+
218
+ ### Path 2: MCP Tool (agent-driven, on-demand)
219
+
220
+ The Cortex exposes an MCP server with these tools:
221
+
222
+ | Tool | Purpose | Key Params |
223
+ |------|---------|------------|
224
+ | `cortex_search` | Semantic search across layers | query, layers, types, workspace_id, time_range, min_confidence, limit |
225
+ | `cortex_recall` | Retrieve specific unit by ID or exact match | id, exact |
226
+ | `cortex_context` | Full context for a workspace | workspace_id, depth (brief/full) |
227
+ | `cortex_similar` | Find analogous past experiences | input, type (error/code/problem), limit |
228
+ | `cortex_timeline` | Chronological decision/change history | workspace_id, project_path, limit |
229
+ | `cortex_teach` | Explicitly store knowledge (confidence 0.95) | text, type, layer, workspace_id |
230
+ | `cortex_forget` | Remove or downrank knowledge | id, query, action (delete/downrank) |
231
+ | `cortex_status` | Cortex health and stats | — |
232
+ | `cortex_export` | Export cortex to .cortexpack | scope, workspace_id, include_embeddings, format |
233
+ | `cortex_import` | Import .cortexpack archive | path, target_layer, merge_strategy, re_embed |
234
+
235
+ ### Path 3: Federation Query (transparent)
236
+
237
+ When team-layer results are needed:
238
+
239
+ 1. Local Cortex constructs search request (query embedding + filters)
240
+ 2. Request goes to `GET /api/network/proxy/{nodeId}/api/cortex/search`
241
+ 3. Remote node runs search locally, returns results
242
+ 4. Local Cortex merges remote results with local by relevance score
243
+ 5. All connected nodes queried in parallel, configurable timeout (default 500ms)
244
+
245
+ ## Federation
246
+
247
+ ### Three Sync Modes (per-node-pair setting)
248
+
249
+ | Mode | Behavior | Best For |
250
+ |------|----------|----------|
251
+ | **Query-only** (default) | No data replication. Query remote nodes on demand. | Privacy-conscious teams, intermittent connectivity |
252
+ | **Background sync** | Periodically pull team-layer knowledge and cache locally. Fall back to live query if cache stale. | Better latency, offline capability |
253
+ | **Real-time sync** | Continuous replication via WebSocket. Knowledge appears on all nodes within seconds. | Tight teams, same codebase, full trust |
254
+
255
+ Background sync: polls connected nodes every N minutes (default 5), imports new knowledge units using merge-by-similarity.
256
+
257
+ Real-time sync: persistent WebSocket to `/api/cortex/federation/stream`. New team-layer units pushed as created.
258
+
259
+ ### Privacy Model
260
+
261
+ - **Personal layer** — Never leaves your node. Not queryable by remote nodes.
262
+ - **Workspace layer** — Queryable by remote nodes only if the workspace has `collaboration: true`.
263
+ - **Team layer** — Always queryable by paired federation nodes. This is the shared knowledge pool.
264
+
265
+ ## Import/Export (Portable Knowledge)
266
+
267
+ ### .cortexpack Format
268
+
269
+ ```
270
+ my-project.cortexpack (tar.gz)
271
+ ├── manifest.json — version, source node, export date, stats
272
+ ├── knowledge.jsonl — knowledge units as JSON lines
273
+ ├── embeddings.lance/ — LanceDB table snapshot (optional, large)
274
+ └── sessions.json — source session metadata for provenance
275
+ ```
276
+
277
+ Without embeddings: ~5-50MB typical. With embeddings: larger but skips re-embedding on import.
278
+
279
+ ### Export Options
280
+
281
+ - **Scope:** full, workspace, personal, or custom (filtered by type/time)
282
+ - **Include embeddings:** optional (skip re-embedding on import vs. smaller file)
283
+
284
+ ### Import Options
285
+
286
+ - **Target layer:** where to put imported knowledge
287
+ - **Merge strategy:** append (add all), merge (deduplicate by similarity, keep highest confidence), replace (wipe then import)
288
+ - **Re-embed:** regenerate embeddings with local model if embeddings not included
289
+
290
+ ### Use Cases
291
+
292
+ - **Cloud ↔ Local sync** — Export from cloud VM, import locally (or vice versa)
293
+ - **Onboarding** — Senior dev exports workspace cortex, new team member imports. Instant ramp-up.
294
+ - **Project handoff** — Export cortex with codebase. Next developer gets the reasoning, not just the code.
295
+ - **Backup/restore** — Periodic export as backup
296
+ - **Machine migration** — Moving to new laptop? Export all cortexes, import on new machine.
297
+
298
+ ## REST API
299
+
300
+ ```
301
+ # Cortex status and health
302
+ GET /api/cortex/status
303
+
304
+ # Knowledge CRUD
305
+ GET /api/cortex/search?q=...&layer=...&type=...
306
+ GET /api/cortex/knowledge/:id
307
+ POST /api/cortex/knowledge — create (cortex_teach)
308
+ PATCH /api/cortex/knowledge/:id — update confidence/layer/metadata
309
+ DELETE /api/cortex/knowledge/:id — remove (cortex_forget)
310
+
311
+ # Workspace context
312
+ GET /api/cortex/workspace/:id/context
313
+ GET /api/cortex/timeline?workspace_id=...
314
+
315
+ # Bootstrap
316
+ POST /api/cortex/ingest/bootstrap
317
+ GET /api/cortex/ingest/status
318
+
319
+ # Import/Export
320
+ POST /api/cortex/export — body: {scope, workspace_id?, include_embeddings?}
321
+ POST /api/cortex/import — multipart .cortexpack upload
322
+ GET /api/cortex/import/status
323
+
324
+ # Settings
325
+ GET /api/cortex/settings
326
+ POST /api/cortex/settings
327
+
328
+ # Federation (served to remote nodes)
329
+ GET /api/cortex/federation/search — remote search endpoint
330
+ WS /api/cortex/federation/stream — real-time sync WebSocket
331
+
332
+ # Active Knowledge Propagation
333
+ POST /api/cortex/federation/teach — receive propagated knowledge from remote node
334
+ GET /api/cortex/federation/pending — knowledge pending review (contradictions)
335
+ POST /api/cortex/federation/resolve — resolve contradiction
336
+ ```
337
+
338
+ ## UI Integration
339
+
340
+ ### 1. Top Bar — CortexStatus Indicator
341
+
342
+ Small purple "Cortex" badge in the top bar, always visible. Shows knowledge unit count. Pulses gently during active ingestion or retrieval. Colors: green (healthy), amber (ingesting), red (error). Click to open Cortex panel.
343
+
344
+ ### 2. CortexPanel — Slide-out Knowledge Explorer
345
+
346
+ Opens from the right when Cortex indicator is clicked:
347
+
348
+ - **Search bar** — Semantic search across all knowledge
349
+ - **Stats row** — Total units, distilled count, average confidence
350
+ - **Layer tabs** — Personal / Workspace / Team
351
+ - **Knowledge list** — Each unit shows: type badge (color-coded), text, confidence, source, age
352
+ - **Actions** — Teach Cortex, Export, Settings
353
+
354
+ Knowledge type colors:
355
+ - Decision: blue (#60a5fa)
356
+ - Preference: pink (#f472b6)
357
+ - Pattern: green (#34d399)
358
+ - Error Fix: amber (#fbbf24)
359
+ - Context: gray (#94a3b8)
360
+
361
+ ### 3. Pane Header — CortexActivity Badge
362
+
363
+ Each terminal pane header shows a small badge when the Cortex injected context into the last prompt: "3 items" with a purple dot. Click to see exactly what context was provided. Builds trust through transparency.
364
+
365
+ ### 4. Settings Page — CortexConfiguration
366
+
367
+ Settings → Cortex section:
368
+ - Enable/disable toggle
369
+ - Embedding provider (auto-detected, with override)
370
+ - Injection token budget (default 2000)
371
+ - LLM distillation toggle
372
+ - Federation sync mode dropdown (Query Only / Background Sync / Real-time Sync)
373
+ - Bootstrap ingestion trigger with progress bar
374
+
375
+ ## Configuration Defaults
376
+
377
+ ```json
378
+ {
379
+ "enabled": true,
380
+ "embedding": {
381
+ "provider": "auto",
382
+ "model": null,
383
+ "fallback": "local"
384
+ },
385
+ "injection": {
386
+ "enabled": true,
387
+ "max_tokens": 2000,
388
+ "max_results": 5,
389
+ "min_confidence": 0.3
390
+ },
391
+ "ingestion": {
392
+ "auto_ingest": true,
393
+ "distillation": true,
394
+ "distillation_model": "auto"
395
+ },
396
+ "layers": {
397
+ "personal": true,
398
+ "workspace": true,
399
+ "team": true
400
+ },
401
+ "staleness": {
402
+ "decision_halflife_days": 180,
403
+ "pattern_halflife_days": 90,
404
+ "context_halflife_days": 30,
405
+ "conversation_halflife_days": 14
406
+ },
407
+ "federation": {
408
+ "sync_mode": "query-only",
409
+ "sync_interval_minutes": 5,
410
+ "query_timeout_ms": 500
411
+ }
412
+ }
413
+ ```
414
+
415
+ ## File Structure
416
+
417
+ ```
418
+ src/lib/cortex/
419
+ ├── index.ts — Cortex singleton, initialization
420
+ ├── config.ts — Cortex settings management
421
+ ├── store.ts — LanceDB connection, table management
422
+ ├── embeddings/
423
+ │ ├── index.ts — Embedding provider router
424
+ │ ├── voyage.ts — Voyage AI provider
425
+ │ ├── openai.ts — OpenAI provider
426
+ │ └── local.ts — Transformers.js ONNX Runtime local provider
427
+ ├── ingestion/
428
+ │ ├── pipeline.ts — Ingestion pipeline orchestrator
429
+ │ ├── chunker.ts — Message chunking logic
430
+ │ ├── extractors.ts — Code blocks, file refs, errors, commands, git context, tool calls
431
+ │ ├── deduplicator.ts — Cosine similarity dedup
432
+ │ ├── bootstrap.ts — Historical session bulk ingestion
433
+ │ └── watcher.ts — Live file watcher for new messages
434
+ ├── distillation/
435
+ │ ├── distiller.ts — Background LLM knowledge extraction
436
+ │ ├── prompts.ts — Distillation prompt templates
437
+ │ └── scheduler.ts — Idle-time scheduling
438
+ ├── retrieval/
439
+ │ ├── search.ts — Multi-layer vector search with reranking
440
+ │ ├── injection.ts — Prompt augmentation (cortex-context block)
441
+ │ ├── federation.ts — Remote node query delegation
442
+ │ └── scoring.ts — Confidence, staleness, relevance scoring
443
+ ├── knowledge/
444
+ │ ├── types.ts — Knowledge unit type definitions
445
+ │ ├── staleness.ts — Staleness detection and decay
446
+ │ └── contradiction.ts — Contradiction detection between units
447
+ ├── portability/
448
+ │ ├── exporter.ts — .cortexpack export
449
+ │ └── importer.ts — .cortexpack import with merge strategies
450
+ └── mcp/
451
+ └── server.ts — MCP server exposing cortex tools
452
+
453
+ src/app/api/cortex/
454
+ ├── status/route.ts
455
+ ├── search/route.ts
456
+ ├── knowledge/route.ts
457
+ ├── knowledge/[id]/route.ts
458
+ ├── workspace/[id]/context/route.ts
459
+ ├── timeline/route.ts
460
+ ├── ingest/bootstrap/route.ts
461
+ ├── ingest/status/route.ts
462
+ ├── export/route.ts
463
+ ├── import/route.ts
464
+ ├── import/status/route.ts
465
+ ├── settings/route.ts
466
+ └── federation/
467
+ ├── search/route.ts
468
+ ├── stream/route.ts
469
+ ├── teach/route.ts
470
+ ├── pending/route.ts
471
+ └── resolve/route.ts
472
+
473
+ src/components/cortex/
474
+ ├── cortex-indicator.tsx — Top bar status badge
475
+ ├── cortex-panel.tsx — Slide-out knowledge explorer
476
+ ├── cortex-settings.tsx — Settings page section
477
+ ├── knowledge-card.tsx — Individual knowledge unit display
478
+ └── injection-badge.tsx — Pane header injection indicator
479
+
480
+ ~/.spaces/cortex/
481
+ ├── config.json — Cortex settings
482
+ ├── personal/ — Personal layer LanceDB tables
483
+ ├── workspace/
484
+ │ ├── 1/ — Workspace 1 LanceDB tables
485
+ │ ├── 2/ — Workspace 2 LanceDB tables
486
+ │ └── .../
487
+ └── team/ — Team layer cache (from federation)
488
+ ```
489
+
490
+ ## Dependencies & Platform Compatibility
491
+
492
+ ### LanceDB
493
+
494
+ Use `@lancedb/lancedb` (the official Node.js package). This has native Rust bindings for optimal performance, with a WASM fallback for platforms where native compilation fails.
495
+
496
+ **Installation strategy:**
497
+
498
+ 1. Primary: `@lancedb/lancedb` with native bindings (best performance)
499
+ 2. Fallback: If native compilation fails during `npm install`, the package provides WASM builds that work everywhere
500
+ 3. The package supports Windows (MSVC + MINGW), macOS (Intel + Apple Silicon), and Linux (x64 + ARM64)
501
+
502
+ Since Spaces already depends on `better-sqlite3` (native), users are already set up for native compilation. LanceDB adds ~15MB to the install.
503
+
504
+ ### Local Embedding Model
505
+
506
+ For the local embedding fallback, use `@huggingface/transformers` (Transformers.js) which runs models via ONNX Runtime in Node.js. The `all-MiniLM-L6-v2` model is ~23MB and loads once on first use.
507
+
508
+ ### Embedding Provider Chain
509
+
510
+ Check for API keys in order: Voyage AI (`VOYAGE_API_KEY`) → OpenAI (`OPENAI_API_KEY`) → local (ONNX). Default to the best available. Anthropic does not offer a public embedding API; Voyage AI is the recommended partner.
511
+
512
+ ### Embedding Dimension Management
513
+
514
+ Different providers produce different dimensions (MiniLM: 384, OpenAI: 1536, Voyage: 1024). The Cortex stores the current embedding dimension in config. If the user changes providers:
515
+
516
+ 1. Detect dimension mismatch on startup
517
+ 2. Warn: "Embedding provider changed. Re-embedding all knowledge units in background."
518
+ 3. Queue full re-embedding as a background job (same as bootstrap, but embedding-only)
519
+ 4. During transition, old vectors are still searchable (LanceDB handles mixed queries via separate partitions), new results take priority
520
+
521
+ ## Error Handling & Resilience
522
+
523
+ ### Ingestion Pipeline Failures
524
+
525
+ - **Tier 1 (fast pass):** If a session file is malformed or being actively written to, skip that file and log a warning. Retry on next sync cycle. Never crash the pipeline for a single bad file.
526
+ - **Tier 2 (embedding):** If the embedding API returns an error (rate limit, network, invalid response), move the chunk to a retry queue with exponential backoff (1s, 5s, 30s, 5min). After 5 failures, fall back to local embeddings for that batch. If local also fails, store the chunk as text-only (searchable via FTS but not vector search) and log an error.
527
+ - **Tier 3 (distillation):** If the LLM call fails or returns malformed output, discard that distillation attempt and log. The raw chunks remain searchable. Retry distillation on next idle cycle. Never block ingestion on distillation failures.
528
+
529
+ ### LanceDB Corruption Recovery
530
+
531
+ LanceDB uses Arrow IPC format. Partial writes can corrupt tables. Recovery strategy:
532
+
533
+ 1. On startup, verify table integrity (LanceDB provides health checks)
534
+ 2. If corruption detected, log error, rename corrupt directory to `{layer}.corrupt.{timestamp}/`
535
+ 3. Create fresh empty table
536
+ 4. Trigger re-ingestion from raw session files (bootstrap in repair mode — embedding-only, no re-parsing)
537
+ 5. The raw JSONL session files are the source of truth; LanceDB is a derived index
538
+
539
+ ### Graceful Degradation
540
+
541
+ The Cortex continues to function even when components fail:
542
+
543
+ | Failure | Behavior |
544
+ |---------|----------|
545
+ | Embedding API down | Fall back to local embeddings automatically |
546
+ | Local embeddings fail | Store text-only chunks, skip vector search, use FTS keyword matching |
547
+ | LanceDB unavailable | Cortex indicator shows red, injection disabled, MCP tools return empty results |
548
+ | Federation node unreachable | Skip that node's results, merge what's available |
549
+ | Distillation LLM unavailable | Raw chunks still searchable, distillation queued for later |
550
+ | Bootstrap interrupted | Resume from last checkpoint on next run |
551
+
552
+ ### Circuit Breaker
553
+
554
+ External API calls (embedding, distillation, federation) use a circuit breaker pattern:
555
+
556
+ - **Closed** (normal): requests flow through
557
+ - **Open** (after 5 consecutive failures): stop calling for 60 seconds, return fallback
558
+ - **Half-open** (after cooldown): try one request, if success → close, if fail → reopen
559
+
560
+ ## Non-Claude Agent Injection
561
+
562
+ Claude Code has hook support (`PreToolUse`, `PostToolUse`, `Notification`, `Stop`). However, Claude Code does not currently support a `user-prompt-submit` hook for intercepting prompts before they're sent.
563
+
564
+ **Primary injection strategy (all agents): MCP Tool**
565
+
566
+ The Cortex registers as an MCP server. Claude Code (and any agent that supports MCP) can call `cortex_search` and `cortex_context` as tools. The agent receives cortex context as tool results, which it naturally incorporates.
567
+
568
+ To make this automatic (without the agent needing to know to ask), the Cortex's MCP server description includes instructions telling the agent to query the Cortex at the start of each task. This is how MCP servers like `memory` work today — the server description says "always check memory first."
569
+
570
+ **Secondary injection strategy (future): PTY-level injection**
571
+
572
+ For agents without MCP support, and for the auto-injection experience (user doesn't need to configure anything), a future version could:
573
+
574
+ 1. Intercept at the WebSocket layer in `terminal/server.ts` — when a `data` message from the client matches a prompt pattern (newline after text), inject cortex context
575
+ 2. This happens before the data reaches node-pty, so the agent sees the enriched prompt
576
+ 3. This requires careful handling of escape sequences, binary data, and multi-byte characters
577
+ 4. **Deferred to a future phase** — MCP is the v1 approach
578
+
579
+ ## Integration with Existing Data Layer
580
+
581
+ ### SQLite Cross-References
582
+
583
+ Cortex knowledge units reference SQLite entities via:
584
+
585
+ - `workspace_id` → `workspaces.id` in SQLite
586
+ - `session_id` → `sessions.session_id` in SQLite
587
+
588
+ These are soft references (no foreign key enforcement across databases). The Cortex tolerates dangling references gracefully — if a workspace is deleted from SQLite, its knowledge units remain in LanceDB but are no longer returned in workspace-scoped queries (workspace doesn't exist = no results).
589
+
590
+ ### Lifecycle Coupling
591
+
592
+ - **Workspace deleted** → Cortex workspace layer directory is not automatically deleted (knowledge may still be valuable in personal layer). A "Clean up Cortex data" option in UI allows explicit deletion.
593
+ - **Session deleted from SQLite** → Knowledge units sourced from that session remain (the knowledge is independent of the session index).
594
+ - **Bootstrap reads from** → Raw agent JSONL files on disk (not from SQLite). The SQLite index helps map sessions to workspaces, but the actual content comes from the source files.
595
+
596
+ ### FTS5 Coexistence
597
+
598
+ The existing FTS5 full-text search (`sessions_fts`) continues to work for session content search. The Cortex adds semantic/vector search on top. The `/api/search` route could be extended to combine FTS5 keyword results with Cortex vector results for hybrid search, but this is not required for v1.
599
+
600
+ ## Configuration
601
+
602
+ Cortex settings are stored as a `cortex` key within the existing `~/.spaces/config.json`. This requires adding a `cortex?: CortexConfig` field to the `SpacesConfig` interface in `src/lib/config.ts`, and updating `readConfig`/`writeConfig` to preserve unknown keys (or explicitly handle the `cortex` field). This avoids a separate config file and keeps all Spaces configuration in one place.
603
+
604
+ The `~/.spaces/cortex/` directory contains only LanceDB data files, not configuration.
605
+
606
+ ## Performance Budget
607
+
608
+ ### Hook/MCP Injection Latency Target: <200ms (local only)
609
+
610
+ | Step | Budget |
611
+ |------|--------|
612
+ | Query signal extraction | 5ms |
613
+ | LanceDB search (personal + workspace) | 20-50ms |
614
+ | Reranking + staleness scoring | 10ms |
615
+ | Result formatting | 5ms |
616
+ | **Total local** | **40-70ms** |
617
+
618
+ Federation queries are fire-and-forget with a 500ms timeout. If federation results arrive before the agent processes the prompt, they're included. If not, local results are sufficient. Federation results may also arrive and be available for the *next* prompt.
619
+
620
+ ### Disk Space Management
621
+
622
+ - **Warning threshold:** Cortex UI shows a warning when total Cortex storage exceeds 500MB
623
+ - **Maximum size:** Configurable (default: 2GB). When exceeded, automatic pruning removes lowest-confidence + highest-staleness entries first
624
+ - **Pruning strategy:** Remove `conversation` type chunks first (lowest value), then `command`, then stale `context`. Never auto-prune `decision`, `preference`, or `error_fix` types — these are too valuable.
625
+
626
+ ## Active Knowledge Propagation (Cortex-to-Cortex Teaching)
627
+
628
+ In federated environments, Cortex nodes don't just respond to queries — they actively teach each other. High-confidence knowledge propagates across the network automatically, creating a distributed intelligence mesh where every node benefits from every other node's experience.
629
+
630
+ ### Propagation Mechanics
631
+
632
+ When a Cortex node produces a knowledge unit that crosses a **propagation threshold**, it becomes a candidate for teaching:
633
+
634
+ | Criteria | Threshold | Rationale |
635
+ |----------|-----------|-----------|
636
+ | Confidence score | ≥ 0.85 | Only propagate knowledge the source node is confident about |
637
+ | Type | `decision`, `pattern`, `preference`, `error_fix` | High-value types only — raw `conversation` and `context` chunks stay local |
638
+ | Layer | `team` | Personal and workspace knowledge are never propagated automatically |
639
+ | Validation | User-validated or repeated 3+ times | Prevents propagation of noise |
640
+
641
+ ### Propagation Flow
642
+
643
+ ```
644
+ Node A discovers high-confidence pattern
645
+
646
+
647
+ Propagation check: confidence ≥ 0.85, team layer, validated type?
648
+ │ yes
649
+
650
+ Package as teaching unit:
651
+ { knowledge, source_node, confidence, provenance_chain }
652
+
653
+
654
+ Push to all paired federation nodes via:
655
+ - Real-time sync: WebSocket push (immediate)
656
+ - Background sync: included in next sync batch
657
+ - Query-only: piggyback on next query response as "suggested knowledge"
658
+
659
+
660
+ Receiving node (Node B):
661
+ 1. Dedup check — already have this? (cosine similarity > 0.95 → skip)
662
+ 2. Contradiction check — conflicts with local knowledge? → flag for review
663
+ 3. Confidence adjustment — remote knowledge arrives at 0.8 × source confidence
664
+ (trust but verify — local experience always ranks higher)
665
+ 4. Store in team layer with provenance: "Learned from Node A"
666
+
667
+
668
+ Node B's agents now benefit from Node A's experience
669
+ ```
670
+
671
+ ### Provenance Chain
672
+
673
+ Every propagated knowledge unit carries a provenance chain — a record of where the knowledge originated and how it traveled:
674
+
675
+ ```json
676
+ {
677
+ "origin_node": "node-abc",
678
+ "origin_timestamp": "2026-03-10T14:30:00Z",
679
+ "hops": [
680
+ { "node": "node-abc", "confidence": 0.92, "timestamp": "2026-03-10T14:30:00Z" },
681
+ { "node": "node-def", "confidence": 0.74, "timestamp": "2026-03-10T15:00:00Z" }
682
+ ],
683
+ "max_hops": 3
684
+ }
685
+ ```
686
+
687
+ **Max hops** prevents knowledge from echoing endlessly across the network. Default: 3 hops. Knowledge that has traveled through 3 nodes is not propagated further (it's available via query delegation if needed).
688
+
689
+ ### Confidence Decay Across Hops
690
+
691
+ Each hop multiplies confidence by 0.8 (retains 80%):
692
+
693
+ - **Origin:** 0.92
694
+ - **Hop 1:** 0.92 × 0.8 = 0.74
695
+ - **Hop 2:** 0.74 × 0.8 = 0.59
696
+ - **Hop 3:** 0.59 × 0.8 = 0.47 (no further propagation)
697
+
698
+ This ensures that firsthand knowledge always outranks secondhand knowledge. A node's own direct experience is always the strongest signal.
699
+
700
+ ### Contradiction Resolution
701
+
702
+ When propagated knowledge contradicts local knowledge:
703
+
704
+ 1. **Local wins by default** — Local knowledge has higher base confidence (no hop decay)
705
+ 2. **Flag for review** — The contradiction is surfaced in the Cortex panel: "Node X says Y, but you've been doing Z. Which is correct?"
706
+ 3. **User resolves** — User can accept the remote knowledge (updates local), reject it (downranks the remote unit), or mark as "context-dependent" (both valid in different situations)
707
+ 4. **Resolution propagates** — If the user explicitly validates remote knowledge, that validation propagates back to the source node as a confidence boost
708
+
709
+ ### Rate Limiting
710
+
711
+ - **Per-node-pair:** Max 50 knowledge units pushed per sync cycle
712
+ - **Dedup window:** Knowledge within 0.95 cosine similarity of existing units is silently dropped
713
+ - **Backpressure:** If a receiving node's ingestion queue exceeds 500 items, it signals the sender to slow down
714
+
715
+ ## Deferred / Future Considerations
716
+
717
+ - **Knowledge graph visualization** — 3D visualization of how knowledge units relate (could reuse R3F infrastructure)
718
+ - **Auto-CLAUDE.md generation** — Cortex distills its most confident preferences/patterns into a CLAUDE.md file automatically
719
+ - **Multi-modal knowledge** — Screenshots, diagrams, architecture images stored alongside text
720
+ - **Knowledge unit voting** — In teams, members can upvote/downvote knowledge units to improve confidence scoring