@jlongo78/agent-spaces 0.7.6 → 0.8.0

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 (800) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +6 -0
  3. package/.next/standalone/.next/build-manifest.json +2 -2
  4. package/.next/standalone/.next/prerender-manifest.json +3 -3
  5. package/.next/standalone/.next/required-server-files.json +19 -19
  6. package/.next/standalone/.next/routes-manifest.json +38 -0
  7. package/.next/standalone/.next/server/app/(desktop)/admin/analytics/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/(desktop)/admin/users/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(desktop)/analytics/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/(desktop)/cortex/page/react-loadable-manifest.json +1 -1
  11. package/.next/standalone/.next/server/app/(desktop)/cortex/page.js.nft.json +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.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/(desktop)/terminal/pane/[id]/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/(desktop)/workspaces/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  28. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  29. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  30. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  31. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  32. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  33. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  34. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  36. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  37. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  38. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  39. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  40. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  41. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  42. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  43. package/.next/standalone/.next/server/app/admin/analytics.html +1 -1
  44. package/.next/standalone/.next/server/app/admin/analytics.rsc +6 -7
  45. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics/__PAGE__.segment.rsc +2 -2
  46. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics.segment.rsc +1 -1
  47. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  48. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  49. package/.next/standalone/.next/server/app/admin/analytics.segments/_full.segment.rsc +6 -7
  50. package/.next/standalone/.next/server/app/admin/analytics.segments/_head.segment.rsc +1 -1
  51. package/.next/standalone/.next/server/app/admin/analytics.segments/_index.segment.rsc +2 -2
  52. package/.next/standalone/.next/server/app/admin/analytics.segments/_tree.segment.rsc +2 -2
  53. package/.next/standalone/.next/server/app/admin/users.html +1 -1
  54. package/.next/standalone/.next/server/app/admin/users.rsc +2 -2
  55. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users/__PAGE__.segment.rsc +1 -1
  56. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users.segment.rsc +1 -1
  57. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  58. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  59. package/.next/standalone/.next/server/app/admin/users.segments/_full.segment.rsc +2 -2
  60. package/.next/standalone/.next/server/app/admin/users.segments/_head.segment.rsc +1 -1
  61. package/.next/standalone/.next/server/app/admin/users.segments/_index.segment.rsc +2 -2
  62. package/.next/standalone/.next/server/app/admin/users.segments/_tree.segment.rsc +2 -2
  63. package/.next/standalone/.next/server/app/analytics.html +1 -1
  64. package/.next/standalone/.next/server/app/analytics.rsc +3 -3
  65. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics/__PAGE__.segment.rsc +2 -2
  66. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics.segment.rsc +1 -1
  67. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  68. package/.next/standalone/.next/server/app/analytics.segments/_full.segment.rsc +3 -3
  69. package/.next/standalone/.next/server/app/analytics.segments/_head.segment.rsc +1 -1
  70. package/.next/standalone/.next/server/app/analytics.segments/_index.segment.rsc +2 -2
  71. package/.next/standalone/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
  72. package/.next/standalone/.next/server/app/api/analytics/overview/route.js.nft.json +1 -1
  73. package/.next/standalone/.next/server/app/api/benchmark/lobes/route/app-paths-manifest.json +3 -0
  74. package/.next/standalone/.next/server/app/api/benchmark/lobes/route/build-manifest.json +11 -0
  75. package/.next/standalone/.next/server/app/api/benchmark/lobes/route/server-reference-manifest.json +4 -0
  76. package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js +7 -0
  77. package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js.map +5 -0
  78. package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js.nft.json +1 -0
  79. package/.next/standalone/.next/server/app/api/benchmark/lobes/route_client-reference-manifest.js +2 -0
  80. package/.next/standalone/.next/server/app/api/benchmark/run/route/app-paths-manifest.json +3 -0
  81. package/.next/standalone/.next/server/app/api/benchmark/run/route/build-manifest.json +11 -0
  82. package/.next/standalone/.next/server/app/api/benchmark/run/route/server-reference-manifest.json +4 -0
  83. package/.next/standalone/.next/server/app/api/benchmark/run/route.js +7 -0
  84. package/.next/standalone/.next/server/app/api/benchmark/run/route.js.map +5 -0
  85. package/.next/standalone/.next/server/app/api/benchmark/run/route.js.nft.json +1 -0
  86. package/.next/standalone/.next/server/app/api/benchmark/run/route_client-reference-manifest.js +2 -0
  87. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route/app-paths-manifest.json +3 -0
  88. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route/build-manifest.json +11 -0
  89. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route/server-reference-manifest.json +4 -0
  90. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js +7 -0
  91. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js.map +5 -0
  92. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js.nft.json +1 -0
  93. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route_client-reference-manifest.js +2 -0
  94. package/.next/standalone/.next/server/app/api/benchmark/runs/route/app-paths-manifest.json +3 -0
  95. package/.next/standalone/.next/server/app/api/benchmark/runs/route/build-manifest.json +11 -0
  96. package/.next/standalone/.next/server/app/api/benchmark/runs/route/server-reference-manifest.json +4 -0
  97. package/.next/standalone/.next/server/app/api/benchmark/runs/route.js +7 -0
  98. package/.next/standalone/.next/server/app/api/benchmark/runs/route.js.map +5 -0
  99. package/.next/standalone/.next/server/app/api/benchmark/runs/route.js.nft.json +1 -0
  100. package/.next/standalone/.next/server/app/api/benchmark/runs/route_client-reference-manifest.js +2 -0
  101. package/.next/standalone/.next/server/app/api/benchmark/status/route/app-paths-manifest.json +3 -0
  102. package/.next/standalone/.next/server/app/api/benchmark/status/route/build-manifest.json +11 -0
  103. package/.next/standalone/.next/server/app/api/benchmark/status/route/server-reference-manifest.json +4 -0
  104. package/.next/standalone/.next/server/app/api/benchmark/status/route.js +7 -0
  105. package/.next/standalone/.next/server/app/api/benchmark/status/route.js.map +5 -0
  106. package/.next/standalone/.next/server/app/api/benchmark/status/route.js.nft.json +1 -0
  107. package/.next/standalone/.next/server/app/api/benchmark/status/route_client-reference-manifest.js +2 -0
  108. package/.next/standalone/.next/server/app/api/bulk/route.js.nft.json +1 -1
  109. package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
  110. package/.next/standalone/.next/server/app/api/cortex/context/route.js.nft.json +1 -1
  111. package/.next/standalone/.next/server/app/api/cortex/curation/assess/route.js.nft.json +1 -1
  112. package/.next/standalone/.next/server/app/api/cortex/curation/publish/route.js.nft.json +1 -1
  113. package/.next/standalone/.next/server/app/api/cortex/curation/refine/route.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/app/api/cortex/curation/review/route.js.nft.json +1 -1
  115. package/.next/standalone/.next/server/app/api/cortex/curation/seed/route.js.nft.json +1 -1
  116. package/.next/standalone/.next/server/app/api/cortex/export/route.js.nft.json +1 -1
  117. package/.next/standalone/.next/server/app/api/cortex/federation/pending/route.js.nft.json +1 -1
  118. package/.next/standalone/.next/server/app/api/cortex/federation/resolve/route.js.nft.json +1 -1
  119. package/.next/standalone/.next/server/app/api/cortex/federation/search/route.js.nft.json +1 -1
  120. package/.next/standalone/.next/server/app/api/cortex/federation/teach/route.js.nft.json +1 -1
  121. package/.next/standalone/.next/server/app/api/cortex/graph/edges/route.js.nft.json +1 -1
  122. package/.next/standalone/.next/server/app/api/cortex/graph/entities/[id]/route.js.nft.json +1 -1
  123. package/.next/standalone/.next/server/app/api/cortex/graph/entities/route.js.nft.json +1 -1
  124. package/.next/standalone/.next/server/app/api/cortex/graph/populate/route.js.nft.json +1 -1
  125. package/.next/standalone/.next/server/app/api/cortex/import/route.js.nft.json +1 -1
  126. package/.next/standalone/.next/server/app/api/cortex/import/status/route.js.nft.json +1 -1
  127. package/.next/standalone/.next/server/app/api/cortex/ingest/bootstrap/route.js.nft.json +1 -1
  128. package/.next/standalone/.next/server/app/api/cortex/ingest/status/route.js.nft.json +1 -1
  129. package/.next/standalone/.next/server/app/api/cortex/knowledge/[id]/route.js.nft.json +1 -1
  130. package/.next/standalone/.next/server/app/api/cortex/knowledge/route.js.nft.json +1 -1
  131. package/.next/standalone/.next/server/app/api/cortex/lobes/[id]/route.js.nft.json +1 -1
  132. package/.next/standalone/.next/server/app/api/cortex/lobes/route.js.nft.json +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.nft.json +1 -1
  135. package/.next/standalone/.next/server/app/api/cortex/marketplace/preview/route.js.nft.json +1 -1
  136. package/.next/standalone/.next/server/app/api/cortex/mcp/call/route.js.nft.json +1 -1
  137. package/.next/standalone/.next/server/app/api/cortex/mcp/tools/route.js.nft.json +1 -1
  138. package/.next/standalone/.next/server/app/api/cortex/search/route.js.nft.json +1 -1
  139. package/.next/standalone/.next/server/app/api/cortex/settings/route.js.nft.json +1 -1
  140. package/.next/standalone/.next/server/app/api/cortex/status/route.js.nft.json +1 -1
  141. package/.next/standalone/.next/server/app/api/cortex/timeline/route.js.nft.json +1 -1
  142. package/.next/standalone/.next/server/app/api/cortex/usage/route.js.nft.json +1 -1
  143. package/.next/standalone/.next/server/app/api/cortex/workspace/[id]/context/route.js.nft.json +1 -1
  144. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  145. package/.next/standalone/.next/server/app/api/files/route.js +1 -1
  146. package/.next/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  147. package/.next/standalone/.next/server/app/api/folders/route.js.nft.json +1 -1
  148. package/.next/standalone/.next/server/app/api/network/handshake/route.js.nft.json +1 -1
  149. package/.next/standalone/.next/server/app/api/network/projects/route.js.nft.json +1 -1
  150. package/.next/standalone/.next/server/app/api/network/search/route.js.nft.json +1 -1
  151. package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js.nft.json +1 -1
  152. package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js.nft.json +1 -1
  153. package/.next/standalone/.next/server/app/api/network/sessions/route.js.nft.json +1 -1
  154. package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js.nft.json +1 -1
  155. package/.next/standalone/.next/server/app/api/network/workspaces/route.js.nft.json +1 -1
  156. package/.next/standalone/.next/server/app/api/panes/[id]/route.js.nft.json +1 -1
  157. package/.next/standalone/.next/server/app/api/panes/route.js.nft.json +1 -1
  158. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  159. package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  160. package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js.nft.json +1 -1
  161. package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js.nft.json +1 -1
  162. package/.next/standalone/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  163. package/.next/standalone/.next/server/app/api/sessions/route.js.nft.json +1 -1
  164. package/.next/standalone/.next/server/app/api/sync/route.js.nft.json +1 -1
  165. package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -1
  166. package/.next/standalone/.next/server/app/api/tier/route.js.nft.json +1 -1
  167. package/.next/standalone/.next/server/app/api/whisper/route/app-paths-manifest.json +3 -0
  168. package/.next/standalone/.next/server/app/api/whisper/route/build-manifest.json +11 -0
  169. package/.next/standalone/.next/server/app/api/whisper/route/server-reference-manifest.json +4 -0
  170. package/.next/standalone/.next/server/app/api/whisper/route.js +7 -0
  171. package/.next/standalone/.next/server/app/api/whisper/route.js.map +5 -0
  172. package/.next/standalone/.next/server/app/api/whisper/route.js.nft.json +1 -0
  173. package/.next/standalone/.next/server/app/api/whisper/route_client-reference-manifest.js +2 -0
  174. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js.nft.json +1 -1
  175. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js.nft.json +1 -1
  176. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js.nft.json +1 -1
  177. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js.nft.json +1 -1
  178. package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js.nft.json +1 -1
  179. package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js.nft.json +1 -1
  180. package/.next/standalone/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  181. package/.next/standalone/.next/server/app/cortex.html +1 -1
  182. package/.next/standalone/.next/server/app/cortex.rsc +3 -3
  183. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex/__PAGE__.segment.rsc +2 -2
  184. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex.segment.rsc +1 -1
  185. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  186. package/.next/standalone/.next/server/app/cortex.segments/_full.segment.rsc +3 -3
  187. package/.next/standalone/.next/server/app/cortex.segments/_head.segment.rsc +1 -1
  188. package/.next/standalone/.next/server/app/cortex.segments/_index.segment.rsc +2 -2
  189. package/.next/standalone/.next/server/app/cortex.segments/_tree.segment.rsc +2 -2
  190. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/login.html +1 -1
  192. package/.next/standalone/.next/server/app/login.rsc +2 -2
  193. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +2 -2
  194. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
  195. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +2 -2
  196. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  197. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  198. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
  199. package/.next/standalone/.next/server/app/m/page_client-reference-manifest.js +1 -1
  200. package/.next/standalone/.next/server/app/m/projects/page_client-reference-manifest.js +1 -1
  201. package/.next/standalone/.next/server/app/m/projects.html +1 -1
  202. package/.next/standalone/.next/server/app/m/projects.rsc +2 -2
  203. package/.next/standalone/.next/server/app/m/projects.segments/_full.segment.rsc +2 -2
  204. package/.next/standalone/.next/server/app/m/projects.segments/_head.segment.rsc +1 -1
  205. package/.next/standalone/.next/server/app/m/projects.segments/_index.segment.rsc +2 -2
  206. package/.next/standalone/.next/server/app/m/projects.segments/_tree.segment.rsc +2 -2
  207. package/.next/standalone/.next/server/app/m/projects.segments/m/projects/__PAGE__.segment.rsc +1 -1
  208. package/.next/standalone/.next/server/app/m/projects.segments/m/projects.segment.rsc +1 -1
  209. package/.next/standalone/.next/server/app/m/projects.segments/m.segment.rsc +1 -1
  210. package/.next/standalone/.next/server/app/m/sessions/[id]/page.js.nft.json +1 -1
  211. package/.next/standalone/.next/server/app/m/sessions/[id]/page_client-reference-manifest.js +1 -1
  212. package/.next/standalone/.next/server/app/m/sessions/page_client-reference-manifest.js +1 -1
  213. package/.next/standalone/.next/server/app/m/sessions.html +1 -1
  214. package/.next/standalone/.next/server/app/m/sessions.rsc +2 -2
  215. package/.next/standalone/.next/server/app/m/sessions.segments/_full.segment.rsc +2 -2
  216. package/.next/standalone/.next/server/app/m/sessions.segments/_head.segment.rsc +1 -1
  217. package/.next/standalone/.next/server/app/m/sessions.segments/_index.segment.rsc +2 -2
  218. package/.next/standalone/.next/server/app/m/sessions.segments/_tree.segment.rsc +2 -2
  219. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions/__PAGE__.segment.rsc +1 -1
  220. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions.segment.rsc +1 -1
  221. package/.next/standalone/.next/server/app/m/sessions.segments/m.segment.rsc +1 -1
  222. package/.next/standalone/.next/server/app/m/settings/page_client-reference-manifest.js +1 -1
  223. package/.next/standalone/.next/server/app/m/settings.html +1 -1
  224. package/.next/standalone/.next/server/app/m/settings.rsc +2 -2
  225. package/.next/standalone/.next/server/app/m/settings.segments/_full.segment.rsc +2 -2
  226. package/.next/standalone/.next/server/app/m/settings.segments/_head.segment.rsc +1 -1
  227. package/.next/standalone/.next/server/app/m/settings.segments/_index.segment.rsc +2 -2
  228. package/.next/standalone/.next/server/app/m/settings.segments/_tree.segment.rsc +2 -2
  229. package/.next/standalone/.next/server/app/m/settings.segments/m/settings/__PAGE__.segment.rsc +1 -1
  230. package/.next/standalone/.next/server/app/m/settings.segments/m/settings.segment.rsc +1 -1
  231. package/.next/standalone/.next/server/app/m/settings.segments/m.segment.rsc +1 -1
  232. package/.next/standalone/.next/server/app/m/terminal/page.js.nft.json +1 -1
  233. package/.next/standalone/.next/server/app/m/terminal/page_client-reference-manifest.js +1 -1
  234. package/.next/standalone/.next/server/app/m/terminal.html +1 -1
  235. package/.next/standalone/.next/server/app/m/terminal.rsc +3 -3
  236. package/.next/standalone/.next/server/app/m/terminal.segments/_full.segment.rsc +3 -3
  237. package/.next/standalone/.next/server/app/m/terminal.segments/_head.segment.rsc +1 -1
  238. package/.next/standalone/.next/server/app/m/terminal.segments/_index.segment.rsc +2 -2
  239. package/.next/standalone/.next/server/app/m/terminal.segments/_tree.segment.rsc +2 -2
  240. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal/__PAGE__.segment.rsc +2 -2
  241. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal.segment.rsc +1 -1
  242. package/.next/standalone/.next/server/app/m/terminal.segments/m.segment.rsc +1 -1
  243. package/.next/standalone/.next/server/app/m.html +1 -1
  244. package/.next/standalone/.next/server/app/m.rsc +2 -2
  245. package/.next/standalone/.next/server/app/m.segments/_full.segment.rsc +2 -2
  246. package/.next/standalone/.next/server/app/m.segments/_head.segment.rsc +1 -1
  247. package/.next/standalone/.next/server/app/m.segments/_index.segment.rsc +2 -2
  248. package/.next/standalone/.next/server/app/m.segments/_tree.segment.rsc +2 -2
  249. package/.next/standalone/.next/server/app/m.segments/m/__PAGE__.segment.rsc +1 -1
  250. package/.next/standalone/.next/server/app/m.segments/m.segment.rsc +1 -1
  251. package/.next/standalone/.next/server/app/network.html +1 -1
  252. package/.next/standalone/.next/server/app/network.rsc +2 -2
  253. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network/__PAGE__.segment.rsc +1 -1
  254. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network.segment.rsc +1 -1
  255. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  256. package/.next/standalone/.next/server/app/network.segments/_full.segment.rsc +2 -2
  257. package/.next/standalone/.next/server/app/network.segments/_head.segment.rsc +1 -1
  258. package/.next/standalone/.next/server/app/network.segments/_index.segment.rsc +2 -2
  259. package/.next/standalone/.next/server/app/network.segments/_tree.segment.rsc +2 -2
  260. package/.next/standalone/.next/server/app/projects.html +1 -1
  261. package/.next/standalone/.next/server/app/projects.rsc +2 -2
  262. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects/__PAGE__.segment.rsc +1 -1
  263. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects.segment.rsc +1 -1
  264. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  265. package/.next/standalone/.next/server/app/projects.segments/_full.segment.rsc +2 -2
  266. package/.next/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  267. package/.next/standalone/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  268. package/.next/standalone/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  269. package/.next/standalone/.next/server/app/sessions.html +1 -1
  270. package/.next/standalone/.next/server/app/sessions.rsc +2 -2
  271. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions/__PAGE__.segment.rsc +1 -1
  272. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions.segment.rsc +1 -1
  273. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  274. package/.next/standalone/.next/server/app/sessions.segments/_full.segment.rsc +2 -2
  275. package/.next/standalone/.next/server/app/sessions.segments/_head.segment.rsc +1 -1
  276. package/.next/standalone/.next/server/app/sessions.segments/_index.segment.rsc +2 -2
  277. package/.next/standalone/.next/server/app/sessions.segments/_tree.segment.rsc +2 -2
  278. package/.next/standalone/.next/server/app/settings.html +1 -1
  279. package/.next/standalone/.next/server/app/settings.rsc +2 -2
  280. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings/__PAGE__.segment.rsc +1 -1
  281. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings.segment.rsc +1 -1
  282. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  283. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  284. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  285. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  286. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  287. package/.next/standalone/.next/server/app/terminal.html +1 -1
  288. package/.next/standalone/.next/server/app/terminal.rsc +3 -3
  289. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal/__PAGE__.segment.rsc +2 -2
  290. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal.segment.rsc +1 -1
  291. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  292. package/.next/standalone/.next/server/app/terminal.segments/_full.segment.rsc +3 -3
  293. package/.next/standalone/.next/server/app/terminal.segments/_head.segment.rsc +1 -1
  294. package/.next/standalone/.next/server/app/terminal.segments/_index.segment.rsc +2 -2
  295. package/.next/standalone/.next/server/app/terminal.segments/_tree.segment.rsc +2 -2
  296. package/.next/standalone/.next/server/app/vr/page/react-loadable-manifest.json +3 -3
  297. package/.next/standalone/.next/server/app/vr/page_client-reference-manifest.js +1 -1
  298. package/.next/standalone/.next/server/app/vr.html +1 -1
  299. package/.next/standalone/.next/server/app/vr.rsc +3 -3
  300. package/.next/standalone/.next/server/app/vr.segments/_full.segment.rsc +3 -3
  301. package/.next/standalone/.next/server/app/vr.segments/_head.segment.rsc +1 -1
  302. package/.next/standalone/.next/server/app/vr.segments/_index.segment.rsc +2 -2
  303. package/.next/standalone/.next/server/app/vr.segments/_tree.segment.rsc +2 -2
  304. package/.next/standalone/.next/server/app/vr.segments/vr/__PAGE__.segment.rsc +2 -2
  305. package/.next/standalone/.next/server/app/vr.segments/vr.segment.rsc +1 -1
  306. package/.next/standalone/.next/server/app/workspaces.html +1 -1
  307. package/.next/standalone/.next/server/app/workspaces.rsc +2 -2
  308. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces/__PAGE__.segment.rsc +1 -1
  309. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces.segment.rsc +1 -1
  310. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  311. package/.next/standalone/.next/server/app/workspaces.segments/_full.segment.rsc +2 -2
  312. package/.next/standalone/.next/server/app/workspaces.segments/_head.segment.rsc +1 -1
  313. package/.next/standalone/.next/server/app/workspaces.segments/_index.segment.rsc +2 -2
  314. package/.next/standalone/.next/server/app/workspaces.segments/_tree.segment.rsc +2 -2
  315. package/.next/standalone/.next/server/app-paths-manifest.json +6 -0
  316. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0041efe4._.js +2 -2
  317. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00bf0ace._.js +2 -2
  318. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0a837dd9._.js +98 -0
  319. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e71d908._.js +3 -3
  320. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e9142f3._.js +2 -2
  321. package/.next/standalone/.next/server/chunks/[root-of-the-server]__10e47926._.js +1 -1
  322. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1665dc78._.js +2 -2
  323. package/.next/standalone/.next/server/chunks/[root-of-the-server]__175cbabf._.js +2 -2
  324. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1adae357._.js +2 -2
  325. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1d359752._.js +2 -2
  326. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1e8fabeb._.js +2 -2
  327. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1f8deca0._.js +8 -8
  328. package/.next/standalone/.next/server/chunks/[root-of-the-server]__253fdda1._.js +2 -2
  329. package/.next/standalone/.next/server/chunks/[root-of-the-server]__28e6434f._.js +2 -2
  330. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2a386564._.js +3 -3
  331. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2c20fb38._.js +2 -2
  332. package/.next/standalone/.next/server/chunks/[root-of-the-server]__309132cd._.js +1 -1
  333. package/.next/standalone/.next/server/chunks/[root-of-the-server]__33fec964._.js +3 -3
  334. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3786d8ae._.js +2 -2
  335. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3ae92407._.js +2 -2
  336. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3beda9fe._.js +2 -2
  337. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4619e9bd._.js +1 -1
  338. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4a051043._.js +2 -2
  339. package/.next/standalone/.next/server/chunks/[root-of-the-server]__508002e4._.js +2 -2
  340. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5086c373._.js +2 -2
  341. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5913e097._.js +2 -2
  342. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5b5f68d2._.js +2 -2
  343. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5c1f2459._.js +2 -2
  344. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5ec8c977._.js +2 -2
  345. package/.next/standalone/.next/server/chunks/[root-of-the-server]__63cebc6c._.js +2 -2
  346. package/.next/standalone/.next/server/chunks/[root-of-the-server]__64d30d4d._.js +2 -2
  347. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6c54fc2e._.js +2 -2
  348. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6dc1fb7e._.js +2 -2
  349. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6e568102._.js +2 -2
  350. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6faa04c0._.js +2 -2
  351. package/.next/standalone/.next/server/chunks/[root-of-the-server]__74a34dc3._.js +2 -2
  352. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7819e4cf._.js +98 -0
  353. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7e7250a4._.js +2 -2
  354. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8309e0a4._.js +2 -2
  355. package/.next/standalone/.next/server/chunks/[root-of-the-server]__86cc0e2b._.js +6 -6
  356. package/.next/standalone/.next/server/chunks/[root-of-the-server]__89c2565a._.js +2 -2
  357. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8d178ad9._.js +2 -2
  358. package/.next/standalone/.next/server/chunks/[root-of-the-server]__93ee06f3._.js +2 -2
  359. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9e1f0137._.js +98 -0
  360. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9e4c154a._.js +2 -2
  361. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9d2e1d3._.js +2 -2
  362. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ae53d343._.js +2 -2
  363. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b3a04cef._.js +2 -2
  364. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b4270b77._.js +1 -1
  365. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b6b6ce60._.js +3 -3
  366. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c0757773._.js +98 -0
  367. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c24cfa91._.js +3 -0
  368. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c7c47529._.js +3 -0
  369. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c88b63f7._.js +2 -2
  370. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cba5f007._.js +1 -1
  371. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cbf4ceb0._.js +2 -2
  372. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cefdba2f._.js +2 -2
  373. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cf9e82bb._.js +2 -2
  374. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d2897392._.js +2 -2
  375. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d3b2d856._.js +2 -2
  376. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d73273ca._.js +2 -2
  377. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d8417eb6._.js +2 -2
  378. package/.next/standalone/.next/server/chunks/[root-of-the-server]__dc2a55de._.js +2 -2
  379. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e0d4690b._.js +2 -2
  380. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e3ea8547._.js +98 -0
  381. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e678dd53._.js +1 -1
  382. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e9223f55._.js +2 -2
  383. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ea630076._.js +2 -2
  384. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f26ca49d._.js +1 -1
  385. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f33e1101._.js +2 -2
  386. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f515f865._.js +2 -2
  387. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fceb5d60._.js +2 -2
  388. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fed41403._.js +2 -2
  389. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ff2e98c2._.js +2 -2
  390. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_benchmark_lobes_route_actions_ea7beadb.js +3 -0
  391. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_benchmark_run_route_actions_9ed0ba41.js +3 -0
  392. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_benchmark_runs_[id]_route_actions_39f90307.js +3 -0
  393. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_benchmark_runs_route_actions_37cf958b.js +3 -0
  394. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_benchmark_status_route_actions_009e2cba.js +3 -0
  395. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_whisper_route_actions_be9a633d.js +3 -0
  396. package/.next/standalone/.next/server/chunks/ssr/{_c1cfdd09._.js → [root-of-the-server]__16621ac5._.js} +2 -2
  397. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__66aca5d4._.js +1 -1
  398. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__9c81bd86._.js +3 -0
  399. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__e3bf6054._.js +5 -0
  400. package/.next/standalone/.next/server/chunks/ssr/{_81abf587._.js → _31ada310._.js} +2 -2
  401. package/.next/standalone/.next/server/chunks/ssr/_648a8a2d._.js +3 -0
  402. package/.next/standalone/.next/server/chunks/ssr/_999dae61._.js +3 -0
  403. package/.next/standalone/.next/server/chunks/ssr/_c48c91e5._.js +3 -0
  404. package/.next/standalone/.next/server/chunks/ssr/_f8959434._.js +3 -0
  405. package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_cortex_page_tsx_0f33d8b3._.js +1 -1
  406. package/.next/standalone/.next/server/chunks/ssr/src_components_terminal_terminal-pane_tsx_803c5e2c._.js +9 -0
  407. package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__32a0045c._.js +1 -1
  408. package/.next/standalone/.next/server/edge/chunks/_d73df637._.js +1 -1
  409. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  410. package/.next/standalone/.next/server/pages/404.html +1 -1
  411. package/.next/standalone/.next/server/pages/500.html +2 -2
  412. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  413. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  414. package/.next/standalone/.next/static/chunks/157826a3253f8ccf.js +7 -0
  415. package/.next/standalone/.next/static/chunks/{396eac60f496f178.js → 2f9f09924ff9d447.js} +1 -1
  416. package/.next/standalone/.next/static/chunks/{e23f20b51a75a5bb.js → 4ced66ef12d91b38.js} +35 -12
  417. package/.next/standalone/.next/static/chunks/57d04d161b8a01b3.js +7 -0
  418. package/.next/standalone/.next/static/chunks/709c4608e5b935e8.js +1 -0
  419. package/.next/standalone/.next/static/chunks/{7424664c6ffa94bd.js → 7b14d4e609b55b9b.js} +1 -1
  420. package/.next/standalone/.next/static/chunks/7be37f4a56b8f575.js +1 -0
  421. package/.next/standalone/.next/static/chunks/8021d5a2269ff113.js +1 -0
  422. package/.next/standalone/.next/static/chunks/a3fd93a9dde3cacc.js +1 -0
  423. package/.next/standalone/.next/static/chunks/{412140a02893327a.js → afee31c7399daf2a.js} +1 -1
  424. package/.next/standalone/.next/static/chunks/b92fdbf858aeb0b3.js +1 -0
  425. package/.next/standalone/.next/static/chunks/c17274c2f95d4ba2.js +5 -0
  426. package/.next/standalone/.next/static/chunks/e116953dc83d4eec.js +1 -0
  427. package/.next/standalone/.next/static/chunks/e82f4414650587cf.js +7 -0
  428. package/.next/standalone/.next/static/chunks/f6464729e7aa0da0.css +3 -0
  429. package/.next/standalone/LICENSE +661 -0
  430. package/.next/standalone/NOTICE +5 -0
  431. package/.next/standalone/README.md +131 -0
  432. package/.next/standalone/bin/cortex-hook.sh +62 -62
  433. package/.next/standalone/bin/cortex-mcp.js +60 -60
  434. package/.next/standalone/bin/fix-standalone-externals.js +79 -0
  435. package/.next/standalone/bin/lib/auto-setup.js +110 -0
  436. package/.next/standalone/bin/mdns-service.js +171 -0
  437. package/.next/standalone/bin/postinstall.js +35 -0
  438. package/.next/standalone/bin/setup-admin.js +195 -0
  439. package/.next/standalone/bin/spaces-dev.js +247 -0
  440. package/.next/standalone/bin/spaces-install.js +638 -0
  441. package/.next/standalone/bin/spaces-reset-totp.js +50 -0
  442. package/.next/standalone/bin/spaces-service.js +1020 -0
  443. package/.next/standalone/bin/spaces-setup.js +253 -0
  444. package/.next/standalone/bin/spaces.js +788 -0
  445. package/.next/standalone/bin/ssh-auth-keys.sh +68 -0
  446. package/.next/standalone/bin/terminal-server.js +1807 -0
  447. package/.next/standalone/docker-compose.yml +28 -0
  448. package/.next/standalone/docs/architecture.md +387 -0
  449. package/.next/standalone/docs/cortex.md +293 -0
  450. package/.next/standalone/docs/getting-started.md +96 -0
  451. package/.next/standalone/docs/plans/2026-02-24-multi-agent-sessions-design.md +133 -0
  452. package/.next/standalone/docs/plans/2026-02-24-multi-agent-sessions-plan.md +959 -0
  453. package/.next/standalone/docs/plans/2026-03-07-service-command-design.md +146 -0
  454. package/.next/standalone/docs/plans/2026-03-07-service-command-plan.md +254 -0
  455. package/.next/standalone/docs/server-install.md +564 -0
  456. package/.next/standalone/docs/social-card.html +150 -0
  457. package/.next/standalone/docs/superpowers/plans/2026-03-12-spaces-cortex.md +5270 -0
  458. package/.next/standalone/docs/superpowers/plans/2026-03-13-cortex-wiring.md +1387 -1387
  459. package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-entity-graph.md +1923 -1923
  460. package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-knowledge-evolution.md +1113 -1113
  461. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-boundary-engine.md +853 -853
  462. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-context-engine.md +1274 -1274
  463. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-signal-ingestion.md +933 -933
  464. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-lobes.md +1080 -1080
  465. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-gravity-system.md +768 -768
  466. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-ui.md +1108 -1108
  467. package/.next/standalone/docs/superpowers/plans/2026-03-18-cortex-ui-integration.md +1846 -1846
  468. package/.next/standalone/docs/superpowers/plans/2026-03-19-vr-phase1-shell.md +1639 -0
  469. package/.next/standalone/docs/superpowers/specs/2026-03-11-universe-view-design.md +320 -0
  470. package/.next/standalone/docs/superpowers/specs/2026-03-12-spaces-brain-design.md +720 -0
  471. package/.next/standalone/docs/superpowers/specs/2026-03-13-cortex-wiring-design.md +268 -268
  472. package/.next/standalone/docs/superpowers/specs/2026-03-14-cortex-v2-design.md +623 -623
  473. package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-lobes-design.md +263 -263
  474. package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-v2-ui-design.md +240 -240
  475. package/.next/standalone/docs/superpowers/specs/2026-03-16-pane-ux-design.md +77 -0
  476. package/.next/standalone/docs/superpowers/specs/2026-03-18-cortex-ui-integration-design.md +341 -341
  477. package/.next/standalone/docs/superpowers/specs/2026-03-19-vr-phase1-shell-design.md +288 -0
  478. package/.next/standalone/docs/tiers.md +104 -0
  479. package/.next/standalone/eslint.config.mjs +18 -0
  480. package/.next/standalone/next.config.ts +20 -0
  481. package/.next/standalone/nginx.conf +53 -0
  482. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/README.md +46 -0
  483. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/glib-2.0/include/glibconfig.h +221 -0
  484. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/index.js +1 -0
  485. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  486. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/package.json +42 -0
  487. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +46 -0
  488. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +221 -0
  489. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +1 -0
  490. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  491. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +42 -0
  492. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +30 -0
  493. package/.next/standalone/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  494. package/.next/standalone/node_modules/@img/{sharp-win32-x64 → sharp-linux-x64}/package.json +46 -39
  495. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
  496. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/package.json +46 -0
  497. package/.next/standalone/package-lock.json +14154 -0
  498. package/.next/standalone/package.json +104 -103
  499. package/.next/standalone/postcss.config.mjs +7 -0
  500. package/.next/standalone/scripts/rebuild.cmd +65 -0
  501. package/.next/standalone/scripts/rebuild.sh +59 -0
  502. package/.next/standalone/server.js +1 -1
  503. package/.next/standalone/src/app/(desktop)/admin/analytics/page.tsx +266 -0
  504. package/.next/standalone/src/app/(desktop)/admin/users/page.tsx +399 -0
  505. package/.next/standalone/src/app/(desktop)/analytics/page.tsx +166 -0
  506. package/.next/standalone/src/app/(desktop)/cortex/page.tsx +81 -78
  507. package/.next/standalone/src/app/(desktop)/dashboard-client.tsx +56 -0
  508. package/.next/standalone/src/app/(desktop)/layout.tsx +18 -0
  509. package/.next/standalone/src/app/(desktop)/network/page.tsx +137 -0
  510. package/.next/standalone/src/app/(desktop)/page.tsx +17 -0
  511. package/.next/standalone/src/app/(desktop)/projects/page.tsx +68 -0
  512. package/.next/standalone/src/app/(desktop)/sessions/[id]/page.tsx +519 -0
  513. package/.next/standalone/src/app/(desktop)/sessions/page.tsx +145 -0
  514. package/.next/standalone/src/app/(desktop)/settings/page.tsx +446 -0
  515. package/.next/standalone/src/app/(desktop)/terminal/layout.tsx +7 -0
  516. package/.next/standalone/src/app/(desktop)/terminal/page.tsx +1151 -0
  517. package/.next/standalone/src/app/(desktop)/terminal/pane/[id]/page.tsx +211 -0
  518. package/.next/standalone/src/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page.tsx +192 -0
  519. package/.next/standalone/src/app/(desktop)/workspaces/page.tsx +12 -0
  520. package/.next/standalone/src/app/api/admin/analytics/route.ts +10 -0
  521. package/.next/standalone/src/app/api/admin/users/[id]/route.ts +20 -0
  522. package/.next/standalone/src/app/api/admin/users/route.ts +15 -0
  523. package/.next/standalone/src/app/api/analytics/overview/route.ts +80 -0
  524. package/.next/standalone/src/app/api/auth/login/route.ts +10 -0
  525. package/.next/standalone/src/app/api/auth/logout/route.ts +9 -0
  526. package/.next/standalone/src/app/api/auth/me/route.ts +22 -0
  527. package/.next/standalone/src/app/api/auth/totp/setup/route.ts +10 -0
  528. package/.next/standalone/src/app/api/auth/totp/status/route.ts +10 -0
  529. package/.next/standalone/src/app/api/auth/totp/verify/route.ts +10 -0
  530. package/.next/standalone/src/app/api/benchmark/lobes/route.ts +16 -0
  531. package/.next/standalone/src/app/api/benchmark/run/route.ts +92 -0
  532. package/.next/standalone/src/app/api/benchmark/runs/[id]/route.ts +26 -0
  533. package/.next/standalone/src/app/api/benchmark/runs/route.ts +16 -0
  534. package/.next/standalone/src/app/api/benchmark/status/route.ts +35 -0
  535. package/.next/standalone/src/app/api/bulk/route.ts +34 -0
  536. package/.next/standalone/src/app/api/chat/route.ts +85 -0
  537. package/.next/standalone/src/app/api/config/route.ts +30 -0
  538. package/.next/standalone/src/app/api/cortex/context/route.ts +78 -78
  539. package/.next/standalone/src/app/api/cortex/curation/assess/route.ts +27 -27
  540. package/.next/standalone/src/app/api/cortex/curation/publish/route.ts +23 -23
  541. package/.next/standalone/src/app/api/cortex/curation/refine/route.ts +23 -23
  542. package/.next/standalone/src/app/api/cortex/curation/review/route.ts +29 -29
  543. package/.next/standalone/src/app/api/cortex/curation/seed/route.ts +23 -23
  544. package/.next/standalone/src/app/api/cortex/export/route.ts +40 -40
  545. package/.next/standalone/src/app/api/cortex/federation/pending/route.ts +20 -20
  546. package/.next/standalone/src/app/api/cortex/federation/resolve/route.ts +43 -43
  547. package/.next/standalone/src/app/api/cortex/federation/search/route.ts +35 -35
  548. package/.next/standalone/src/app/api/cortex/federation/teach/route.ts +76 -76
  549. package/.next/standalone/src/app/api/cortex/graph/edges/route.ts +112 -112
  550. package/.next/standalone/src/app/api/cortex/graph/entities/[id]/route.ts +73 -73
  551. package/.next/standalone/src/app/api/cortex/graph/entities/route.ts +75 -75
  552. package/.next/standalone/src/app/api/cortex/graph/populate/route.ts +203 -203
  553. package/.next/standalone/src/app/api/cortex/import/route.ts +75 -75
  554. package/.next/standalone/src/app/api/cortex/import/status/route.ts +15 -15
  555. package/.next/standalone/src/app/api/cortex/ingest/bootstrap/route.ts +29 -29
  556. package/.next/standalone/src/app/api/cortex/ingest/status/route.ts +15 -15
  557. package/.next/standalone/src/app/api/cortex/knowledge/[id]/route.ts +91 -91
  558. package/.next/standalone/src/app/api/cortex/knowledge/route.ts +93 -93
  559. package/.next/standalone/src/app/api/cortex/lobes/[id]/route.ts +67 -67
  560. package/.next/standalone/src/app/api/cortex/lobes/route.ts +22 -22
  561. package/.next/standalone/src/app/api/cortex/lobes/share/route.ts +80 -80
  562. package/.next/standalone/src/app/api/cortex/marketplace/browse/route.ts +43 -43
  563. package/.next/standalone/src/app/api/cortex/marketplace/preview/route.ts +46 -46
  564. package/.next/standalone/src/app/api/cortex/mcp/call/route.ts +11 -11
  565. package/.next/standalone/src/app/api/cortex/mcp/tools/route.ts +6 -6
  566. package/.next/standalone/src/app/api/cortex/search/route.ts +43 -43
  567. package/.next/standalone/src/app/api/cortex/settings/route.ts +33 -33
  568. package/.next/standalone/src/app/api/cortex/status/route.ts +169 -169
  569. package/.next/standalone/src/app/api/cortex/timeline/route.ts +42 -42
  570. package/.next/standalone/src/app/api/cortex/usage/route.ts +31 -31
  571. package/.next/standalone/src/app/api/cortex/workspace/[id]/context/route.ts +41 -41
  572. package/.next/standalone/src/app/api/events/route.ts +40 -0
  573. package/.next/standalone/src/app/api/files/route.ts +187 -0
  574. package/.next/standalone/src/app/api/folders/route.ts +97 -0
  575. package/.next/standalone/src/app/api/network/connect-callback/route.ts +11 -0
  576. package/.next/standalone/src/app/api/network/connect-request/[id]/route.ts +11 -0
  577. package/.next/standalone/src/app/api/network/connect-request/route.ts +17 -0
  578. package/.next/standalone/src/app/api/network/discovered/route.ts +9 -0
  579. package/.next/standalone/src/app/api/network/handshake/route.ts +25 -0
  580. package/.next/standalone/src/app/api/network/health/route.ts +10 -0
  581. package/.next/standalone/src/app/api/network/identity/route.ts +15 -0
  582. package/.next/standalone/src/app/api/network/keys/[id]/route.ts +10 -0
  583. package/.next/standalone/src/app/api/network/keys/route.ts +15 -0
  584. package/.next/standalone/src/app/api/network/nodes/[id]/route.ts +15 -0
  585. package/.next/standalone/src/app/api/network/nodes/check/route.ts +9 -0
  586. package/.next/standalone/src/app/api/network/nodes/route.ts +15 -0
  587. package/.next/standalone/src/app/api/network/projects/route.ts +25 -0
  588. package/.next/standalone/src/app/api/network/proxy/[nodeId]/[...path]/route.ts +15 -0
  589. package/.next/standalone/src/app/api/network/search/route.ts +38 -0
  590. package/.next/standalone/src/app/api/network/sessions/[id]/messages/route.ts +36 -0
  591. package/.next/standalone/src/app/api/network/sessions/[id]/route.ts +34 -0
  592. package/.next/standalone/src/app/api/network/sessions/route.ts +43 -0
  593. package/.next/standalone/src/app/api/network/terminal/token/route.ts +10 -0
  594. package/.next/standalone/src/app/api/network/workspaces/[id]/route.ts +34 -0
  595. package/.next/standalone/src/app/api/network/workspaces/route.ts +61 -0
  596. package/.next/standalone/src/app/api/panes/[id]/route.ts +60 -0
  597. package/.next/standalone/src/app/api/panes/route.ts +39 -0
  598. package/.next/standalone/src/app/api/projects/route.ts +13 -0
  599. package/.next/standalone/src/app/api/search/route.ts +47 -0
  600. package/.next/standalone/src/app/api/sessions/[id]/chat/route.ts +120 -0
  601. package/.next/standalone/src/app/api/sessions/[id]/messages/route.ts +28 -0
  602. package/.next/standalone/src/app/api/sessions/[id]/route.ts +73 -0
  603. package/.next/standalone/src/app/api/sessions/route.ts +64 -0
  604. package/.next/standalone/src/app/api/sync/route.ts +24 -0
  605. package/.next/standalone/src/app/api/tags/route.ts +35 -0
  606. package/.next/standalone/src/app/api/tier/route.ts +16 -0
  607. package/.next/standalone/src/app/api/updates/route.ts +53 -0
  608. package/.next/standalone/src/app/api/whisper/route.ts +90 -0
  609. package/.next/standalone/src/app/api/workspaces/[id]/context/[key]/route.ts +39 -0
  610. package/.next/standalone/src/app/api/workspaces/[id]/context/route.ts +28 -0
  611. package/.next/standalone/src/app/api/workspaces/[id]/messages/[msgId]/route.ts +17 -0
  612. package/.next/standalone/src/app/api/workspaces/[id]/messages/route.ts +39 -0
  613. package/.next/standalone/src/app/api/workspaces/[id]/route.ts +47 -0
  614. package/.next/standalone/src/app/api/workspaces/[id]/sessions/route.ts +62 -0
  615. package/.next/standalone/src/app/api/workspaces/route.ts +79 -0
  616. package/.next/standalone/src/app/globals.css +85 -0
  617. package/.next/standalone/src/app/icon.png +0 -0
  618. package/.next/standalone/src/app/layout.tsx +33 -0
  619. package/.next/standalone/src/app/login/layout.tsx +7 -0
  620. package/.next/standalone/src/app/login/page.tsx +315 -0
  621. package/.next/standalone/src/app/m/layout.tsx +16 -0
  622. package/.next/standalone/src/app/m/page.tsx +118 -0
  623. package/.next/standalone/src/app/m/projects/page.tsx +64 -0
  624. package/.next/standalone/src/app/m/sessions/[id]/page.tsx +168 -0
  625. package/.next/standalone/src/app/m/sessions/page.tsx +177 -0
  626. package/.next/standalone/src/app/m/settings/page.tsx +230 -0
  627. package/.next/standalone/src/app/m/terminal/page.tsx +413 -0
  628. package/.next/standalone/src/app/vr/page.tsx +21 -0
  629. package/.next/standalone/src/app/vr/vr-app.tsx +163 -0
  630. package/.next/standalone/src/app/vr/vr-controls.tsx +139 -0
  631. package/.next/standalone/src/app/vr/vr-door.tsx +82 -0
  632. package/.next/standalone/src/app/vr/vr-environment.tsx +71 -0
  633. package/.next/standalone/src/app/vr/vr-gaze.tsx +89 -0
  634. package/.next/standalone/src/app/vr/vr-layout.ts +49 -0
  635. package/.next/standalone/src/app/vr/vr-lobby.tsx +97 -0
  636. package/.next/standalone/src/app/vr/vr-pane.tsx +195 -0
  637. package/.next/standalone/src/app/vr/vr-room.tsx +79 -0
  638. package/.next/standalone/src/app/vr/vr-terminal.tsx +303 -0
  639. package/.next/standalone/src/components/auth/totp-gate.tsx +183 -0
  640. package/.next/standalone/src/components/bus/activity-panel.tsx +261 -0
  641. package/.next/standalone/src/components/common/color-picker.tsx +35 -0
  642. package/.next/standalone/src/components/common/dev-directory-picker.tsx +339 -0
  643. package/.next/standalone/src/components/common/folder-picker.tsx +200 -0
  644. package/.next/standalone/src/components/common/tag-picker.tsx +190 -0
  645. package/.next/standalone/src/components/common/workspace-picker.tsx +113 -0
  646. package/.next/standalone/src/components/cortex/benchmark-tab.tsx +880 -0
  647. package/.next/standalone/src/components/cortex/constants.ts +29 -29
  648. package/.next/standalone/src/components/cortex/cortex-dashboard.tsx +304 -304
  649. package/.next/standalone/src/components/cortex/cortex-indicator.tsx +44 -44
  650. package/.next/standalone/src/components/cortex/cortex-panel.tsx +140 -140
  651. package/.next/standalone/src/components/cortex/cortex-settings.tsx +221 -221
  652. package/.next/standalone/src/components/cortex/curation-tab.tsx +810 -810
  653. package/.next/standalone/src/components/cortex/entity-detail.tsx +101 -101
  654. package/.next/standalone/src/components/cortex/entity-graph.tsx +382 -382
  655. package/.next/standalone/src/components/cortex/import-dialog.tsx +212 -212
  656. package/.next/standalone/src/components/cortex/injection-badge.tsx +72 -72
  657. package/.next/standalone/src/components/cortex/knowledge-card.tsx +109 -109
  658. package/.next/standalone/src/components/cortex/knowledge-tab.tsx +158 -158
  659. package/.next/standalone/src/components/cortex/lobe-settings.tsx +215 -215
  660. package/.next/standalone/src/components/cortex/marketplace-card.tsx +126 -126
  661. package/.next/standalone/src/components/cortex/marketplace-tab.tsx +113 -113
  662. package/.next/standalone/src/components/dashboard/activity-chart.tsx +41 -0
  663. package/.next/standalone/src/components/dashboard/model-usage-chart.tsx +61 -0
  664. package/.next/standalone/src/components/dashboard/recent-sessions.tsx +68 -0
  665. package/.next/standalone/src/components/dashboard/stats-cards.tsx +36 -0
  666. package/.next/standalone/src/components/files/file-explorer.tsx +703 -0
  667. package/.next/standalone/src/components/layout/providers.tsx +38 -0
  668. package/.next/standalone/src/components/layout/sidebar.tsx +170 -0
  669. package/.next/standalone/src/components/layout/tier-provider.tsx +53 -0
  670. package/.next/standalone/src/components/layout/update-banner.tsx +92 -0
  671. package/.next/standalone/src/components/mobile/bottom-nav.tsx +46 -0
  672. package/.next/standalone/src/components/mobile/mobile-chat-input.tsx +244 -0
  673. package/.next/standalone/src/components/mobile/mobile-header.tsx +44 -0
  674. package/.next/standalone/src/components/mobile/mobile-session-card.tsx +56 -0
  675. package/.next/standalone/src/components/mobile/mobile-terminal-input.tsx +71 -0
  676. package/.next/standalone/src/components/mobile/mobile-terminal-pane.tsx +300 -0
  677. package/.next/standalone/src/components/mobile/mobile-terminal-toolbar.tsx +53 -0
  678. package/.next/standalone/src/components/mobile/pull-to-refresh.tsx +82 -0
  679. package/.next/standalone/src/components/mobile/voice-input.tsx +53 -0
  680. package/.next/standalone/src/components/network/api-key-list.tsx +190 -0
  681. package/.next/standalone/src/components/network/connection-requests.tsx +94 -0
  682. package/.next/standalone/src/components/network/node-add-dialog.tsx +131 -0
  683. package/.next/standalone/src/components/network/node-badge.tsx +26 -0
  684. package/.next/standalone/src/components/network/node-list.tsx +207 -0
  685. package/.next/standalone/src/components/network/node-selector.tsx +49 -0
  686. package/.next/standalone/src/components/sessions/session-filters.tsx +116 -0
  687. package/.next/standalone/src/components/sessions/session-list.tsx +485 -0
  688. package/.next/standalone/src/components/terminal/terminal-pane.tsx +874 -0
  689. package/.next/standalone/src/components/viewer/chat-input.tsx +275 -0
  690. package/.next/standalone/src/components/viewer/message-renderer.tsx +551 -0
  691. package/.next/standalone/src/components/workspace/universe-cluster.tsx +131 -0
  692. package/.next/standalone/src/components/workspace/universe-orb.tsx +128 -0
  693. package/.next/standalone/src/components/workspace/universe-types.ts +22 -0
  694. package/.next/standalone/src/components/workspace/universe-utils.ts +11 -0
  695. package/.next/standalone/src/components/workspace/universe-view.tsx +397 -0
  696. package/.next/standalone/src/components/workspace/workspace-chooser.tsx +616 -0
  697. package/.next/standalone/src/hooks/use-benchmark.ts +71 -0
  698. package/.next/standalone/src/hooks/use-bus.ts +147 -0
  699. package/.next/standalone/src/hooks/use-idle-detection.ts +79 -0
  700. package/.next/standalone/src/hooks/use-network.ts +229 -0
  701. package/.next/standalone/src/hooks/use-sessions.ts +437 -0
  702. package/.next/standalone/src/hooks/use-speech-recognition.ts +113 -0
  703. package/.next/standalone/src/hooks/use-sse.ts +35 -0
  704. package/.next/standalone/src/hooks/use-tier.ts +39 -0
  705. package/.next/standalone/src/lib/agents.ts +70 -0
  706. package/.next/standalone/src/lib/aider/parser.ts +111 -0
  707. package/.next/standalone/src/lib/api.ts +19 -0
  708. package/.next/standalone/src/lib/auth.ts +47 -0
  709. package/.next/standalone/src/lib/claude/parser.ts +212 -0
  710. package/.next/standalone/src/lib/claude/stats.ts +204 -0
  711. package/.next/standalone/src/lib/codex/parser.ts +265 -0
  712. package/.next/standalone/src/lib/config.ts +115 -0
  713. package/.next/standalone/src/lib/cortex/benchmark.ts +67 -0
  714. package/.next/standalone/src/lib/cortex/config.ts +40 -40
  715. package/.next/standalone/src/lib/cortex/debug.ts +10 -10
  716. package/.next/standalone/src/lib/cortex/distillation/usage-store.ts +18 -18
  717. package/.next/standalone/src/lib/cortex/graph/resolver.ts +10 -10
  718. package/.next/standalone/src/lib/cortex/graph/types.ts +22 -22
  719. package/.next/standalone/src/lib/cortex/index.ts +56 -56
  720. package/.next/standalone/src/lib/cortex/ingestion/bootstrap.ts +14 -14
  721. package/.next/standalone/src/lib/cortex/knowledge/compat.ts +14 -14
  722. package/.next/standalone/src/lib/cortex/knowledge/contradiction.ts +10 -10
  723. package/.next/standalone/src/lib/cortex/knowledge/types.ts +67 -67
  724. package/.next/standalone/src/lib/cortex/lobes/config.ts +16 -16
  725. package/.next/standalone/src/lib/cortex/lobes/resolver.ts +8 -8
  726. package/.next/standalone/src/lib/cortex/lobes/shares.ts +14 -14
  727. package/.next/standalone/src/lib/cortex/mcp/server.ts +8 -8
  728. package/.next/standalone/src/lib/cortex/portability/exporter.ts +6 -6
  729. package/.next/standalone/src/lib/cortex/portability/importer.ts +10 -10
  730. package/.next/standalone/src/lib/cortex/retrieval/context-engine.ts +10 -10
  731. package/.next/standalone/src/lib/cortex/types.ts +39 -39
  732. package/.next/standalone/src/lib/cost-calculator.ts +48 -0
  733. package/.next/standalone/src/lib/db/init.ts +71 -0
  734. package/.next/standalone/src/lib/db/queries.ts +718 -0
  735. package/.next/standalone/src/lib/db/schema.ts +202 -0
  736. package/.next/standalone/src/lib/events/sse.ts +36 -0
  737. package/.next/standalone/src/lib/gemini/parser.ts +216 -0
  738. package/.next/standalone/src/lib/license.ts +56 -0
  739. package/.next/standalone/src/lib/pro.ts +31 -0
  740. package/.next/standalone/src/lib/sync/indexer.ts +429 -0
  741. package/.next/standalone/src/lib/sync/watcher.ts +64 -0
  742. package/.next/standalone/src/lib/teams.ts +31 -0
  743. package/.next/standalone/src/lib/telemetry.ts +75 -0
  744. package/.next/standalone/src/lib/terminal/server.ts +128 -0
  745. package/.next/standalone/src/lib/tier.ts +38 -0
  746. package/.next/standalone/src/lib/utils.ts +72 -0
  747. package/.next/standalone/src/middleware.ts +133 -0
  748. package/.next/standalone/src/types/claude.ts +208 -0
  749. package/.next/standalone/src/types/network.ts +61 -0
  750. package/.next/standalone/tests/setup.ts +8 -0
  751. package/.next/standalone/tsconfig.json +34 -34
  752. package/.next/standalone/vitest.config.ts +24 -0
  753. package/LICENSE +661 -661
  754. package/README.md +131 -131
  755. package/bin/cortex-hook.sh +62 -62
  756. package/bin/cortex-mcp.js +60 -60
  757. package/bin/fix-standalone-externals.js +79 -79
  758. package/bin/lib/auto-setup.js +110 -110
  759. package/bin/mdns-service.js +171 -171
  760. package/bin/postinstall.js +35 -35
  761. package/bin/setup-admin.js +195 -195
  762. package/bin/spaces-dev.js +247 -208
  763. package/bin/spaces-install.js +638 -599
  764. package/bin/spaces-reset-totp.js +50 -50
  765. package/bin/spaces-service.js +1020 -1020
  766. package/bin/spaces-setup.js +253 -253
  767. package/bin/spaces.js +788 -776
  768. package/bin/ssh-auth-keys.sh +68 -68
  769. package/bin/terminal-server.js +1807 -1683
  770. package/package.json +104 -103
  771. package/.next/standalone/.claude/settings.local.json +0 -55
  772. package/.next/standalone/.claude/spaces-env.json +0 -1
  773. package/.next/standalone/.next/server/chunks/[root-of-the-server]__eb8acb65._.js +0 -3
  774. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__e921fdfc._.js +0 -5
  775. package/.next/standalone/.next/server/chunks/ssr/_2230ad2d._.js +0 -3
  776. package/.next/standalone/.next/server/chunks/ssr/_5cf334fd._.js +0 -3
  777. package/.next/standalone/.next/server/chunks/ssr/_db0abd0a._.js +0 -3
  778. package/.next/standalone/.next/server/chunks/ssr/_db2fec84._.js +0 -3
  779. package/.next/standalone/.next/server/chunks/ssr/_f4e57187._.js +0 -3
  780. package/.next/standalone/.next/server/chunks/ssr/src_40fa36ce._.js +0 -7
  781. package/.next/standalone/.next/static/chunks/003e7aa1adfe577d.js +0 -1
  782. package/.next/standalone/.next/static/chunks/232d8aae4fefab70.js +0 -1
  783. package/.next/standalone/.next/static/chunks/5325351ef49cb65f.js +0 -1
  784. package/.next/standalone/.next/static/chunks/559735e598ca3cbb.js +0 -1
  785. package/.next/standalone/.next/static/chunks/5d5d7b0095dd52ae.js +0 -1
  786. package/.next/standalone/.next/static/chunks/7a7c0d9d875332a3.js +0 -1
  787. package/.next/standalone/.next/static/chunks/898f380eba90427a.js +0 -1
  788. package/.next/standalone/.next/static/chunks/95339e55722bb4ca.js +0 -5
  789. package/.next/standalone/.next/static/chunks/9cd594813c539df9.js +0 -1
  790. package/.next/standalone/.next/static/chunks/aae9e0fa485bd835.js +0 -5
  791. package/.next/standalone/.next/static/chunks/c1a95aebf6725f64.css +0 -3
  792. package/.next/standalone/.next/static/chunks/c515eb77d9410aa0.js +0 -5
  793. package/.next/standalone/.next/static/chunks/d9ae203a7f123546.js +0 -5
  794. package/.next/standalone/.next/static/chunks/f9f2628207848ac2.js +0 -1
  795. package/.next/standalone/.spaces/cortex-context.md +0 -70
  796. package/.next/standalone/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64.node +0 -0
  797. /package/.next/standalone/.next/static/{ncDe4k4gvD0788HAnq_3G → PcpzUspSK8QDdwzAJz8br}/_buildManifest.js +0 -0
  798. /package/.next/standalone/.next/static/{ncDe4k4gvD0788HAnq_3G → PcpzUspSK8QDdwzAJz8br}/_clientMiddlewareManifest.json +0 -0
  799. /package/.next/standalone/.next/static/{ncDe4k4gvD0788HAnq_3G → PcpzUspSK8QDdwzAJz8br}/_ssgManifest.js +0 -0
  800. /package/.next/standalone/node_modules/@img/{sharp-win32-x64 → sharp-libvips-linux-x64}/versions.json +0 -0
@@ -0,0 +1,959 @@
1
+ # Multi-Agent Session & Project Support — Implementation Plan
2
+
3
+ > **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
4
+
5
+ **Goal:** Let users browse, search, tag, and resume sessions for Codex, Gemini, and Aider alongside Claude Code.
6
+
7
+ **Architecture:** Add `agent_type` column to existing sessions/projects tables. Write one parser per agent that reads its native disk format and maps into the shared `upsertProject`/`upsertSession` shape. Update agents.ts resume flags, terminal server spawn logic, watcher, and session UI with agent-type filtering.
8
+
9
+ **Tech Stack:** Next.js (App Router), SQLite (better-sqlite3), Node.js fs, TypeScript
10
+
11
+ **Design doc:** `docs/plans/2026-02-24-multi-agent-sessions-design.md`
12
+
13
+ ---
14
+
15
+ ### Task 1: DB Schema — add `agent_type` columns
16
+
17
+ **Files:**
18
+ - Modify: `src/lib/db/schema.ts:119-136` (addCol migration section)
19
+
20
+ **Step 1: Add migration columns**
21
+
22
+ In `schema.ts`, after the existing `addCol` calls (around line 136), add:
23
+
24
+ ```typescript
25
+ // Multi-agent support: add agent_type to sessions and projects
26
+ addCol('sessions', 'agent_type', "TEXT DEFAULT 'claude'");
27
+ addCol('projects', 'agent_type', "TEXT DEFAULT 'claude'");
28
+ addCol('projects', 'agent_path', 'TEXT');
29
+
30
+ // Copy claude_path -> agent_path for existing rows that don't have it yet
31
+ try { db.exec("UPDATE projects SET agent_path = claude_path WHERE agent_path IS NULL AND claude_path IS NOT NULL"); } catch { /* */ }
32
+
33
+ // Index for filtering by agent type
34
+ try { db.exec('CREATE INDEX IF NOT EXISTS idx_sessions_agent_type ON sessions(agent_type)'); } catch { /* */ }
35
+ try { db.exec('CREATE INDEX IF NOT EXISTS idx_projects_agent_type ON projects(agent_type)'); } catch { /* */ }
36
+ ```
37
+
38
+ **Step 2: Verify by running dev server**
39
+
40
+ Run: `npm run dev`
41
+ Expected: Server starts without errors. Existing sessions still appear (defaulted to `agent_type='claude'`).
42
+
43
+ **Step 3: Commit**
44
+
45
+ ```
46
+ feat: add agent_type columns to sessions and projects tables
47
+ ```
48
+
49
+ ---
50
+
51
+ ### Task 2: Update queries and types for agent_type
52
+
53
+ **Files:**
54
+ - Modify: `src/lib/db/queries.ts:7-14` (upsertProject), `src/lib/db/queries.ts:31-61` (upsertSession), `src/lib/db/queries.ts:63-73` (SessionQueryParams), `src/lib/db/queries.ts:75-161` (getSessions)
55
+ - Modify: `src/types/claude.ts:135-142` (Project), `src/types/claude.ts:144-164` (SessionWithMeta)
56
+
57
+ **Step 1: Update types**
58
+
59
+ In `src/types/claude.ts`, add `agentType` to `Project` (after line 139) and `SessionWithMeta` (after line 163):
60
+
61
+ ```typescript
62
+ // Project — add agentType field
63
+ export interface Project {
64
+ id: string;
65
+ name: string;
66
+ path: string;
67
+ claudePath: string;
68
+ agentType: string;
69
+ sessionCount: number;
70
+ lastActivity: string;
71
+ }
72
+
73
+ // SessionWithMeta — add agentType field
74
+ export interface SessionWithMeta {
75
+ // ... existing fields ...
76
+ nodeId?: string;
77
+ nodeName?: string;
78
+ agentType: string;
79
+ }
80
+ ```
81
+
82
+ **Step 2: Update upsertProject**
83
+
84
+ In `src/lib/db/queries.ts`, modify `upsertProject` (line 7) to accept and store `agentType`:
85
+
86
+ ```typescript
87
+ export function upsertProject(project: { id: string; name: string; path: string; claudePath: string; agentType?: string }) {
88
+ const db = getDb();
89
+ db.prepare(`
90
+ INSERT INTO projects (id, name, path, claude_path, agent_path, agent_type)
91
+ VALUES (?, ?, ?, ?, ?, ?)
92
+ ON CONFLICT(id) DO UPDATE SET name=excluded.name, path=excluded.path, claude_path=excluded.claude_path, agent_path=excluded.agent_path, agent_type=excluded.agent_type
93
+ `).run(project.id, project.name, project.path, project.claudePath, project.claudePath, project.agentType || 'claude');
94
+ }
95
+ ```
96
+
97
+ **Step 3: Update upsertSession**
98
+
99
+ Modify `upsertSession` (line 31) to accept and store `agentType`:
100
+
101
+ ```typescript
102
+ export function upsertSession(session: {
103
+ id: string;
104
+ sessionId: string;
105
+ projectId: string;
106
+ firstPrompt: string;
107
+ summary: string;
108
+ messageCount: number;
109
+ created: string;
110
+ modified: string;
111
+ gitBranch: string;
112
+ projectPath: string;
113
+ fullPath: string;
114
+ agentType?: string;
115
+ }) {
116
+ const db = getDb();
117
+ db.prepare(`
118
+ INSERT INTO sessions (id, session_id, project_id, first_prompt, summary, message_count, created, modified, git_branch, project_path, full_path, agent_type)
119
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
120
+ ON CONFLICT(id) DO UPDATE SET
121
+ first_prompt=excluded.first_prompt,
122
+ summary=excluded.summary,
123
+ message_count=excluded.message_count,
124
+ modified=excluded.modified,
125
+ git_branch=excluded.git_branch,
126
+ full_path=excluded.full_path,
127
+ agent_type=excluded.agent_type
128
+ `).run(
129
+ session.id, session.sessionId, session.projectId,
130
+ session.firstPrompt, session.summary, session.messageCount,
131
+ session.created, session.modified, session.gitBranch,
132
+ session.projectPath, session.fullPath, session.agentType || 'claude'
133
+ );
134
+ }
135
+ ```
136
+
137
+ **Step 4: Add agentType to SessionQueryParams and getSessions**
138
+
139
+ In `SessionQueryParams` (line 63), add:
140
+ ```typescript
141
+ agentType?: string;
142
+ ```
143
+
144
+ In `getSessions` (around line 112), add the filter clause after the `search` block:
145
+ ```typescript
146
+ if (params.agentType) {
147
+ where.push('s.agent_type = ?');
148
+ queryParams.push(params.agentType);
149
+ }
150
+ ```
151
+
152
+ In the SELECT statement (line 128), add `s.agent_type as agentType` to the column list.
153
+
154
+ Also add `s.agent_type as agentType` to the SELECT in `getSessionById` (line 166), `getWorkspaceSessions` (line 332), and `getAllProjects` (line 18 — add `p.agent_type as agentType`).
155
+
156
+ **Step 5: Commit**
157
+
158
+ ```
159
+ feat: add agentType to queries, types, and session filtering
160
+ ```
161
+
162
+ ---
163
+
164
+ ### Task 3: Expand getUserPaths with agent directories
165
+
166
+ **Files:**
167
+ - Modify: `src/lib/config.ts:42-49` (getUserPaths return)
168
+
169
+ **Step 1: Add agent paths to return object**
170
+
171
+ In `getUserPaths()`, expand the return object (line 42):
172
+
173
+ ```typescript
174
+ return {
175
+ claudeDir: path.join(homeDir, '.claude'),
176
+ claudeProjectsDir: path.join(homeDir, '.claude', 'projects'),
177
+ statsPath: path.join(homeDir, '.claude', 'stats-cache.json'),
178
+ codexDir: path.join(homeDir, '.codex'),
179
+ codexSessionsDir: path.join(homeDir, '.codex', 'sessions'),
180
+ geminiDir: path.join(homeDir, '.gemini'),
181
+ geminiChatsBaseDir: path.join(homeDir, '.gemini', 'tmp'),
182
+ geminiProjectsRegistry: path.join(homeDir, '.gemini', 'projects.json'),
183
+ spacesDir,
184
+ dbPath: path.join(spacesDir, 'spaces.db'),
185
+ configPath: path.join(spacesDir, 'config.json'),
186
+ };
187
+ ```
188
+
189
+ **Step 2: Commit**
190
+
191
+ ```
192
+ feat: add Codex and Gemini paths to getUserPaths
193
+ ```
194
+
195
+ ---
196
+
197
+ ### Task 4: Codex parser
198
+
199
+ **Files:**
200
+ - Create: `src/lib/codex/parser.ts`
201
+
202
+ **Step 1: Write the parser**
203
+
204
+ The Codex parser scans `~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl`. The first JSONL line is a `SessionMeta` item containing `id` (UUID), `cwd`, `timestamp`. Subsequent lines contain conversation events.
205
+
206
+ ```typescript
207
+ import fs from 'fs';
208
+ import path from 'path';
209
+
210
+ interface CodexSessionMeta {
211
+ id: string;
212
+ cwd: string;
213
+ timestamp: string;
214
+ firstPrompt: string;
215
+ messageCount: number;
216
+ modified: string;
217
+ }
218
+
219
+ /**
220
+ * Scan ~/.codex/sessions/ for rollout files and extract metadata.
221
+ */
222
+ export function scanCodexSessions(sessionsDir: string): CodexSessionMeta[] {
223
+ const results: CodexSessionMeta[] = [];
224
+
225
+ if (!fs.existsSync(sessionsDir)) return results;
226
+
227
+ // Walk YYYY/MM/DD structure
228
+ for (const year of safeReaddir(sessionsDir)) {
229
+ const yearPath = path.join(sessionsDir, year);
230
+ if (!isDir(yearPath)) continue;
231
+ for (const month of safeReaddir(yearPath)) {
232
+ const monthPath = path.join(yearPath, month);
233
+ if (!isDir(monthPath)) continue;
234
+ for (const day of safeReaddir(monthPath)) {
235
+ const dayPath = path.join(monthPath, day);
236
+ if (!isDir(dayPath)) continue;
237
+ for (const file of safeReaddir(dayPath)) {
238
+ if (!file.startsWith('rollout-') || !file.endsWith('.jsonl')) continue;
239
+ const filePath = path.join(dayPath, file);
240
+ const meta = parseRolloutMeta(filePath);
241
+ if (meta) results.push(meta);
242
+ }
243
+ }
244
+ }
245
+ }
246
+
247
+ return results;
248
+ }
249
+
250
+ function parseRolloutMeta(filePath: string): CodexSessionMeta | null {
251
+ try {
252
+ // Read first ~8KB to get SessionMeta and first user message
253
+ const fd = fs.openSync(filePath, 'r');
254
+ const buf = Buffer.alloc(8192);
255
+ const bytesRead = fs.readSync(fd, buf, 0, 8192, 0);
256
+ fs.closeSync(fd);
257
+
258
+ const chunk = buf.toString('utf-8', 0, bytesRead);
259
+ const lines = chunk.split('\n').filter(l => l.trim());
260
+
261
+ let id = '';
262
+ let cwd = '';
263
+ let timestamp = '';
264
+ let firstPrompt = '';
265
+ let messageCount = 0;
266
+
267
+ for (const line of lines) {
268
+ try {
269
+ const entry = JSON.parse(line);
270
+ const item = entry.item || entry;
271
+
272
+ // SessionMeta item
273
+ if (item.type === 'session_meta' || item.id) {
274
+ if (!id && item.id) {
275
+ id = item.id;
276
+ cwd = item.cwd || '';
277
+ timestamp = entry.timestamp || item.timestamp || '';
278
+ }
279
+ }
280
+
281
+ // Count events that look like messages
282
+ if (entry.item?.type === 'event' || entry.type === 'event') {
283
+ messageCount++;
284
+ }
285
+
286
+ // Extract first user message
287
+ if (!firstPrompt) {
288
+ const payload = entry.item?.payload || entry.payload;
289
+ if (payload?.type === 'user_message' || payload?.type === 'UserMessage') {
290
+ firstPrompt = (typeof payload.content === 'string'
291
+ ? payload.content
292
+ : JSON.stringify(payload.content)
293
+ ).slice(0, 500);
294
+ }
295
+ }
296
+ } catch { /* skip unparseable lines */ }
297
+ }
298
+
299
+ if (!id) {
300
+ // Fallback: extract session ID from filename (rollout-<timestamp>-<uuid>.jsonl)
301
+ const match = filePath.match(/rollout-[^-]+-(.+)\.jsonl$/);
302
+ if (match) id = match[1];
303
+ else return null;
304
+ }
305
+
306
+ const stat = fs.statSync(filePath);
307
+
308
+ return {
309
+ id,
310
+ cwd,
311
+ timestamp: timestamp || stat.birthtime.toISOString(),
312
+ firstPrompt,
313
+ messageCount,
314
+ modified: stat.mtime.toISOString(),
315
+ };
316
+ } catch {
317
+ return null;
318
+ }
319
+ }
320
+
321
+ function safeReaddir(dir: string): string[] {
322
+ try { return fs.readdirSync(dir); } catch { return []; }
323
+ }
324
+
325
+ function isDir(p: string): boolean {
326
+ try { return fs.statSync(p).isDirectory(); } catch { return false; }
327
+ }
328
+ ```
329
+
330
+ **Step 2: Commit**
331
+
332
+ ```
333
+ feat: add Codex session parser
334
+ ```
335
+
336
+ ---
337
+
338
+ ### Task 5: Gemini parser
339
+
340
+ **Files:**
341
+ - Create: `src/lib/gemini/parser.ts`
342
+
343
+ **Step 1: Write the parser**
344
+
345
+ Gemini stores sessions at `~/.gemini/tmp/<project-slug>/chats/session-<timestamp>-<id>.json`. Each is a JSON file with `sessionId`, `startTime`, `lastUpdated`, `messages[]`, and optional `summary`.
346
+
347
+ ```typescript
348
+ import fs from 'fs';
349
+ import path from 'path';
350
+
351
+ interface GeminiSessionMeta {
352
+ sessionId: string;
353
+ projectSlug: string;
354
+ projectPath: string;
355
+ startTime: string;
356
+ lastUpdated: string;
357
+ firstPrompt: string;
358
+ summary: string;
359
+ messageCount: number;
360
+ fullPath: string;
361
+ }
362
+
363
+ /**
364
+ * Scan ~/.gemini/tmp/*/chats/ for session files.
365
+ * Optionally reads projects.json to map slugs to real project paths.
366
+ */
367
+ export function scanGeminiSessions(geminiChatsBaseDir: string, projectsRegistryPath: string): GeminiSessionMeta[] {
368
+ const results: GeminiSessionMeta[] = [];
369
+
370
+ if (!fs.existsSync(geminiChatsBaseDir)) return results;
371
+
372
+ // Load project registry (slug -> path mapping)
373
+ const projectMap = loadProjectRegistry(projectsRegistryPath);
374
+
375
+ for (const slug of safeReaddir(geminiChatsBaseDir)) {
376
+ const slugDir = path.join(geminiChatsBaseDir, slug);
377
+ if (!isDir(slugDir)) continue;
378
+
379
+ const chatsDir = path.join(slugDir, 'chats');
380
+ if (!fs.existsSync(chatsDir)) continue;
381
+
382
+ for (const file of safeReaddir(chatsDir)) {
383
+ if (!file.startsWith('session-') || !file.endsWith('.json')) continue;
384
+ const filePath = path.join(chatsDir, file);
385
+ const meta = parseGeminiSession(filePath, slug, projectMap);
386
+ if (meta) results.push(meta);
387
+ }
388
+ }
389
+
390
+ return results;
391
+ }
392
+
393
+ function parseGeminiSession(
394
+ filePath: string,
395
+ projectSlug: string,
396
+ projectMap: Map<string, string>
397
+ ): GeminiSessionMeta | null {
398
+ try {
399
+ const raw = fs.readFileSync(filePath, 'utf-8');
400
+ const data = JSON.parse(raw);
401
+
402
+ const sessionId = data.sessionId || '';
403
+ if (!sessionId) return null;
404
+
405
+ // Extract first user message
406
+ let firstPrompt = '';
407
+ const messages = data.messages || [];
408
+ for (const msg of messages) {
409
+ if (msg.type === 'user' && !firstPrompt) {
410
+ if (typeof msg.content === 'string') {
411
+ firstPrompt = msg.content.slice(0, 500);
412
+ } else if (msg.content?.parts) {
413
+ // Gemini uses parts array with text fields
414
+ const textParts = msg.content.parts
415
+ .filter((p: any) => typeof p === 'string' || p.text)
416
+ .map((p: any) => typeof p === 'string' ? p : p.text);
417
+ firstPrompt = textParts.join(' ').slice(0, 500);
418
+ }
419
+ break;
420
+ }
421
+ }
422
+
423
+ return {
424
+ sessionId,
425
+ projectSlug,
426
+ projectPath: projectMap.get(projectSlug) || '',
427
+ startTime: data.startTime || '',
428
+ lastUpdated: data.lastUpdated || '',
429
+ firstPrompt,
430
+ summary: data.summary || '',
431
+ messageCount: messages.length,
432
+ fullPath: filePath,
433
+ };
434
+ } catch {
435
+ return null;
436
+ }
437
+ }
438
+
439
+ function loadProjectRegistry(registryPath: string): Map<string, string> {
440
+ const map = new Map<string, string>();
441
+ if (!registryPath || !fs.existsSync(registryPath)) return map;
442
+ try {
443
+ const data = JSON.parse(fs.readFileSync(registryPath, 'utf-8'));
444
+ // projects.json maps {projectPath: slugId} or an array of entries
445
+ if (Array.isArray(data)) {
446
+ for (const entry of data) {
447
+ if (entry.slug && entry.path) map.set(entry.slug, entry.path);
448
+ if (entry.id && entry.path) map.set(entry.id, entry.path);
449
+ }
450
+ } else if (typeof data === 'object') {
451
+ for (const [projectPath, slug] of Object.entries(data)) {
452
+ if (typeof slug === 'string') map.set(slug, projectPath);
453
+ }
454
+ }
455
+ } catch { /* ignore */ }
456
+ return map;
457
+ }
458
+
459
+ function safeReaddir(dir: string): string[] {
460
+ try { return fs.readdirSync(dir); } catch { return []; }
461
+ }
462
+
463
+ function isDir(p: string): boolean {
464
+ try { return fs.statSync(p).isDirectory(); } catch { return false; }
465
+ }
466
+ ```
467
+
468
+ **Step 2: Commit**
469
+
470
+ ```
471
+ feat: add Gemini session parser
472
+ ```
473
+
474
+ ---
475
+
476
+ ### Task 6: Aider parser
477
+
478
+ **Files:**
479
+ - Create: `src/lib/aider/parser.ts`
480
+
481
+ **Step 1: Write the parser**
482
+
483
+ Aider stores a single `.aider.chat.history.md` per project directory. One "session" entry per project. Count `#### ` markers for message count, extract first one as firstPrompt.
484
+
485
+ ```typescript
486
+ import fs from 'fs';
487
+ import path from 'path';
488
+ import crypto from 'crypto';
489
+
490
+ interface AiderSessionMeta {
491
+ projectPath: string;
492
+ firstPrompt: string;
493
+ messageCount: number;
494
+ modified: string;
495
+ created: string;
496
+ }
497
+
498
+ /**
499
+ * Scan a list of project directories for .aider.chat.history.md files.
500
+ */
501
+ export function scanAiderSessions(projectDirs: string[]): AiderSessionMeta[] {
502
+ const results: AiderSessionMeta[] = [];
503
+ const seen = new Set<string>();
504
+
505
+ for (const dir of projectDirs) {
506
+ if (seen.has(dir)) continue;
507
+ seen.add(dir);
508
+
509
+ const historyFile = path.join(dir, '.aider.chat.history.md');
510
+ if (!fs.existsSync(historyFile)) continue;
511
+
512
+ const meta = parseAiderHistory(historyFile, dir);
513
+ if (meta) results.push(meta);
514
+ }
515
+
516
+ return results;
517
+ }
518
+
519
+ function parseAiderHistory(filePath: string, projectDir: string): AiderSessionMeta | null {
520
+ try {
521
+ const stat = fs.statSync(filePath);
522
+ const content = fs.readFileSync(filePath, 'utf-8');
523
+ const lines = content.split('\n');
524
+
525
+ let firstPrompt = '';
526
+ let messageCount = 0;
527
+
528
+ for (const line of lines) {
529
+ if (line.startsWith('#### ')) {
530
+ messageCount++;
531
+ if (!firstPrompt) {
532
+ firstPrompt = line.slice(5).trim().slice(0, 500);
533
+ }
534
+ }
535
+ }
536
+
537
+ if (messageCount === 0) return null;
538
+
539
+ return {
540
+ projectPath: projectDir,
541
+ firstPrompt,
542
+ messageCount,
543
+ modified: stat.mtime.toISOString(),
544
+ created: stat.birthtime.toISOString(),
545
+ };
546
+ } catch {
547
+ return null;
548
+ }
549
+ }
550
+
551
+ /**
552
+ * Generate a deterministic session ID from a project path.
553
+ * Aider has no session IDs, so we hash the path.
554
+ */
555
+ export function aiderSessionId(projectPath: string): string {
556
+ return 'aider-' + crypto.createHash('sha256').update(projectPath).digest('hex').slice(0, 16);
557
+ }
558
+
559
+ /**
560
+ * Generate a deterministic project ID from a project path for Aider.
561
+ */
562
+ export function aiderProjectId(projectPath: string): string {
563
+ return 'aider-proj-' + crypto.createHash('sha256').update(projectPath).digest('hex').slice(0, 12);
564
+ }
565
+ ```
566
+
567
+ **Step 2: Commit**
568
+
569
+ ```
570
+ feat: add Aider session parser
571
+ ```
572
+
573
+ ---
574
+
575
+ ### Task 7: Update indexer to scan all agents
576
+
577
+ **Files:**
578
+ - Modify: `src/lib/sync/indexer.ts`
579
+
580
+ **Step 1: Refactor fullSync into per-agent scanners**
581
+
582
+ Replace the existing `fullSync()` with a version that calls four sub-scanners. Keep the existing Claude logic as `syncClaude()`, then add `syncCodex()`, `syncGemini()`, `syncAider()`.
583
+
584
+ Add these imports at top:
585
+ ```typescript
586
+ import { scanCodexSessions } from '../codex/parser';
587
+ import { scanGeminiSessions } from '../gemini/parser';
588
+ import { scanAiderSessions, aiderSessionId, aiderProjectId } from '../aider/parser';
589
+ import { readConfig } from '../config';
590
+ ```
591
+
592
+ Rewrite `fullSync()` to:
593
+ ```typescript
594
+ export async function fullSync(): Promise<{ projects: number; sessions: number }> {
595
+ const username = getCurrentUser();
596
+ const paths = getUserPaths(username);
597
+
598
+ const db = getDb();
599
+ let projectCount = 0;
600
+ let sessionCount = 0;
601
+
602
+ const insertMany = db.transaction(() => {
603
+ const claude = syncClaude(paths.claudeProjectsDir);
604
+ projectCount += claude.projects;
605
+ sessionCount += claude.sessions;
606
+
607
+ const codex = syncCodex(paths.codexSessionsDir);
608
+ projectCount += codex.projects;
609
+ sessionCount += codex.sessions;
610
+
611
+ const gemini = syncGemini(paths.geminiChatsBaseDir, paths.geminiProjectsRegistry);
612
+ projectCount += gemini.projects;
613
+ sessionCount += gemini.sessions;
614
+
615
+ // Aider: scan devDirectories + known project paths
616
+ const config = readConfig(username);
617
+ const knownProjectPaths = db.prepare(
618
+ "SELECT DISTINCT project_path FROM sessions WHERE project_path != '' AND project_path IS NOT NULL"
619
+ ).all().map((r: any) => r.project_path);
620
+ const aiderDirs = [...new Set([...(config.devDirectories || []), ...knownProjectPaths])];
621
+ const aider = syncAider(aiderDirs);
622
+ projectCount += aider.projects;
623
+ sessionCount += aider.sessions;
624
+ });
625
+
626
+ insertMany();
627
+ return { projects: projectCount, sessions: sessionCount };
628
+ }
629
+ ```
630
+
631
+ Extract existing Claude logic into `syncClaude(projectsDir)` that returns `{ projects, sessions }`. Same signature for the other three:
632
+
633
+ - `syncClaude(projectsDir)` — existing logic, passes `agentType: 'claude'` to upserts
634
+ - `syncCodex(sessionsDir)` — calls `scanCodexSessions`, derives projects from `cwd`, upserts with `agentType: 'codex'`
635
+ - `syncGemini(chatsBaseDir, registryPath)` — calls `scanGeminiSessions`, upserts with `agentType: 'gemini'`
636
+ - `syncAider(projectDirs)` — calls `scanAiderSessions`, uses `aiderProjectId`/`aiderSessionId` for IDs, upserts with `agentType: 'aider'`
637
+
638
+ Keep `enrichMissingSessions`, `buildFtsIndex`, `isSyncNeeded`, and `decodeProjectName` unchanged.
639
+
640
+ **Step 2: Verify sync runs**
641
+
642
+ Run: `npm run dev` and visit the sessions page.
643
+ Expected: Existing Claude sessions still appear. If Codex/Gemini/Aider directories exist, their sessions also appear.
644
+
645
+ **Step 3: Commit**
646
+
647
+ ```
648
+ feat: update indexer to scan Codex, Gemini, and Aider sessions
649
+ ```
650
+
651
+ ---
652
+
653
+ ### Task 8: Update watcher to watch all agent directories
654
+
655
+ **Files:**
656
+ - Modify: `src/lib/sync/watcher.ts`
657
+
658
+ **Step 1: Watch multiple directories**
659
+
660
+ Update `initWatcher` to watch Codex and Gemini directories too. Aider is project-local so we skip it — it syncs on fullSync.
661
+
662
+ Replace the existing single-directory watcher with a loop over agent directories:
663
+
664
+ ```typescript
665
+ import os from 'os';
666
+ import fs from 'fs';
667
+ import { getUserPaths } from '../config';
668
+ import { fullSync } from './indexer';
669
+ import { sseManager } from '../events/sse';
670
+
671
+ let watcherInitialized = false;
672
+ let debounceTimer: ReturnType<typeof setTimeout> | null = null;
673
+
674
+ export async function initWatcher() {
675
+ if (watcherInitialized) return;
676
+ watcherInitialized = true;
677
+
678
+ const processUser = os.userInfo().username;
679
+ const paths = getUserPaths(processUser);
680
+
681
+ const watchDirs: { dir: string; filter: (f: string) => boolean }[] = [
682
+ {
683
+ dir: paths.claudeProjectsDir,
684
+ filter: (f) => f.endsWith('.jsonl') || f.endsWith('sessions-index.json'),
685
+ },
686
+ {
687
+ dir: paths.codexSessionsDir,
688
+ filter: (f) => f.endsWith('.jsonl'),
689
+ },
690
+ {
691
+ dir: paths.geminiChatsBaseDir,
692
+ filter: (f) => f.endsWith('.json') && f.includes('session-'),
693
+ },
694
+ ];
695
+
696
+ try {
697
+ const chokidar = await import('chokidar');
698
+
699
+ for (const { dir, filter } of watchDirs) {
700
+ if (!fs.existsSync(dir)) continue;
701
+
702
+ const watcher = chokidar.watch(dir, {
703
+ ignoreInitial: true,
704
+ depth: 5,
705
+ persistent: true,
706
+ awaitWriteFinish: { stabilityThreshold: 500, pollInterval: 100 },
707
+ });
708
+
709
+ watcher.on('all', (event: string, filePath: string) => {
710
+ if (!filter(filePath)) return;
711
+
712
+ if (debounceTimer) clearTimeout(debounceTimer);
713
+ debounceTimer = setTimeout(async () => {
714
+ try {
715
+ await fullSync();
716
+ sseManager.broadcast('sync', { type: event, file: filePath, timestamp: Date.now() });
717
+ } catch (err) {
718
+ console.error('[spaces] Watcher sync error:', err);
719
+ }
720
+ }, 1000);
721
+ });
722
+
723
+ console.log('[spaces] File watcher started on', dir);
724
+ }
725
+ } catch (err) {
726
+ console.error('[spaces] Failed to start file watcher:', err);
727
+ }
728
+ }
729
+ ```
730
+
731
+ **Step 2: Commit**
732
+
733
+ ```
734
+ feat: watch Codex and Gemini directories for live session updates
735
+ ```
736
+
737
+ ---
738
+
739
+ ### Task 9: Update agents.ts with resume flags
740
+
741
+ **Files:**
742
+ - Modify: `src/lib/agents.ts`
743
+
744
+ **Step 1: Update Codex and Gemini entries**
745
+
746
+ ```typescript
747
+ codex: {
748
+ id: 'codex',
749
+ name: 'Codex CLI',
750
+ command: 'codex',
751
+ resumeFlag: 'resume', // subcommand: codex resume <id>
752
+ supportsResume: true,
753
+ color: '#10b981',
754
+ description: 'OpenAI Codex CLI',
755
+ },
756
+ gemini: {
757
+ id: 'gemini',
758
+ name: 'Gemini CLI',
759
+ command: 'gemini',
760
+ resumeFlag: '--resume', // flag: gemini --resume <id>
761
+ supportsResume: true,
762
+ color: '#3b82f6',
763
+ description: 'Google Gemini CLI',
764
+ },
765
+ ```
766
+
767
+ **Step 2: Commit**
768
+
769
+ ```
770
+ feat: enable resume support for Codex and Gemini agents
771
+ ```
772
+
773
+ ---
774
+
775
+ ### Task 10: Update terminal server spawn logic
776
+
777
+ **Files:**
778
+ - Modify: `bin/terminal-server.js:309-316` (AGENTS object)
779
+ - Modify: `bin/terminal-server.js:537-583` (resume spawn logic)
780
+
781
+ **Step 1: Update AGENTS object**
782
+
783
+ ```javascript
784
+ const AGENTS = {
785
+ shell: { command: '', resumeFlag: '', resumeStyle: '' },
786
+ claude: { command: 'claude', resumeFlag: '--resume', resumeStyle: 'flag' },
787
+ codex: { command: 'codex', resumeFlag: 'resume', resumeStyle: 'subcommand' },
788
+ gemini: { command: 'gemini', resumeFlag: '--resume', resumeStyle: 'flag' },
789
+ aider: { command: 'aider', resumeFlag: '', resumeStyle: '' },
790
+ custom: { command: '', resumeFlag: '', resumeStyle: '' },
791
+ };
792
+ ```
793
+
794
+ **Step 2: Update resume spawn logic**
795
+
796
+ Replace the Claude-specific resume block (lines 537-583) with agent-generic logic. Keep the Claude `findSessionCwd` special case. For other agents, use the same delay pattern:
797
+
798
+ - Claude: `claude --resume <sessionId>` (with CWD lookup)
799
+ - Codex: `codex resume <sessionId>` (subcommand)
800
+ - Gemini: `gemini --resume <sessionId>` (flag)
801
+
802
+ See design doc for full spawn logic.
803
+
804
+ **Step 3: Commit**
805
+
806
+ ```
807
+ feat: terminal server supports Codex and Gemini session resume
808
+ ```
809
+
810
+ ---
811
+
812
+ ### Task 11: Update session API to accept agentType filter
813
+
814
+ **Files:**
815
+ - Modify: `src/app/api/sessions/route.ts`
816
+
817
+ **Step 1: Add agentType param**
818
+
819
+ In the GET handler (line 13), add `agentType` to params:
820
+
821
+ ```typescript
822
+ const params = {
823
+ // ... existing params ...
824
+ agentType: searchParams.get('agentType') || undefined,
825
+ };
826
+ ```
827
+
828
+ **Step 2: Commit**
829
+
830
+ ```
831
+ feat: session API accepts agentType filter parameter
832
+ ```
833
+
834
+ ---
835
+
836
+ ### Task 12: Add agent-type filter to session filters UI
837
+
838
+ **Files:**
839
+ - Modify: `src/components/sessions/session-filters.tsx`
840
+
841
+ **Step 1: Add agentType prop and filter chips**
842
+
843
+ Add `agentType` / `onAgentTypeChange` props to `SessionFiltersProps`. Import `AGENT_TYPES` from `@/lib/agents`.
844
+
845
+ Add a row of colored filter chips (All, Claude, Codex, Gemini, Aider) above the existing search/sort row. Each chip shows a colored dot matching the agent's color and highlights when active.
846
+
847
+ **Step 2: Wire up in parent component**
848
+
849
+ Find the parent page that renders `<SessionFilters>` and add `agentType` state. Pass it to `<SessionFilters>` and include `agentType` in the session fetch params.
850
+
851
+ **Step 3: Commit**
852
+
853
+ ```
854
+ feat: add agent-type filter chips to session list
855
+ ```
856
+
857
+ ---
858
+
859
+ ### Task 13: Add agent badge to session list rows
860
+
861
+ **Files:**
862
+ - Modify: `src/components/sessions/session-list.tsx:147-148`
863
+
864
+ **Step 1: Add agent badge**
865
+
866
+ Import `AGENT_TYPES` from `@/lib/agents`. In the `SessionRow` component, after the project name span (line 148), add a small colored badge for non-Claude sessions:
867
+
868
+ ```typescript
869
+ {session.agentType && session.agentType !== 'claude' && (
870
+ <span
871
+ className="inline-flex items-center gap-1 text-[10px] px-1.5 py-0.5 rounded font-medium"
872
+ style={{
873
+ backgroundColor: `${AGENT_TYPES[session.agentType]?.color || '#71717a'}15`,
874
+ color: AGENT_TYPES[session.agentType]?.color || '#71717a',
875
+ }}
876
+ >
877
+ {AGENT_TYPES[session.agentType]?.name || session.agentType}
878
+ </span>
879
+ )}
880
+ ```
881
+
882
+ **Step 2: Commit**
883
+
884
+ ```
885
+ feat: show agent badge on non-Claude session rows
886
+ ```
887
+
888
+ ---
889
+
890
+ ### Task 14: Update resume picker for Codex and Gemini
891
+
892
+ **Files:**
893
+ - Modify: `src/app/(desktop)/terminal/page.tsx`
894
+
895
+ **Step 1: Filter sessions by agent type in resume picker**
896
+
897
+ Find the `useEffect` that loads sessions for the resume picker (around line 161-176). Add `agentType` to the query params:
898
+
899
+ ```typescript
900
+ sp.set('agentType', newAgentType);
901
+ ```
902
+
903
+ This ensures the resume picker for Codex shows only Codex sessions, Gemini shows only Gemini sessions, etc.
904
+
905
+ **Step 2: Commit**
906
+
907
+ ```
908
+ feat: resume picker filters sessions by selected agent type
909
+ ```
910
+
911
+ ---
912
+
913
+ ### Task 15: Update hooks to pass agentType
914
+
915
+ **Files:**
916
+ - Modify: `src/hooks/use-sessions.ts`
917
+
918
+ **Step 1: Add agentType to SessionsParams and query key**
919
+
920
+ In the `SessionsParams` interface, add:
921
+ ```typescript
922
+ agentType?: string;
923
+ ```
924
+
925
+ In `useSessions`, add it to the URL params:
926
+ ```typescript
927
+ if (params.agentType) sp.set('agentType', params.agentType);
928
+ ```
929
+
930
+ And include it in the React Query key so changing agent type triggers a refetch.
931
+
932
+ **Step 2: Commit**
933
+
934
+ ```
935
+ feat: session hooks support agentType filtering
936
+ ```
937
+
938
+ ---
939
+
940
+ ### Task 16: Integration verification
941
+
942
+ **Step 1: Run dev server and verify**
943
+
944
+ Run: `npm run dev`
945
+
946
+ Check:
947
+ - Sessions page loads without errors
948
+ - Agent filter chips appear (All, Claude, Codex, Gemini, Aider)
949
+ - Clicking a filter shows only that agent's sessions
950
+ - Claude sessions still have all existing functionality (star, tag, search, resume)
951
+ - If Codex/Gemini directories exist on the machine, their sessions appear
952
+ - Resume picker for Codex/Gemini shows only that agent's sessions
953
+ - Terminal pane creation with Codex/Gemini resume mode works
954
+
955
+ **Step 2: Final commit**
956
+
957
+ ```
958
+ feat: multi-agent session support for Codex, Gemini, and Aider
959
+ ```