@jlongo78/agent-spaces 0.7.4 → 0.7.5

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 (515) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +2 -2
  3. package/.next/standalone/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/.next/required-server-files.json +19 -19
  5. package/.next/standalone/.next/server/app/(desktop)/admin/analytics/page.js.nft.json +1 -1
  6. package/.next/standalone/.next/server/app/(desktop)/admin/analytics/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/.next/server/app/(desktop)/admin/users/page.js.nft.json +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.js.nft.json +1 -1
  10. package/.next/standalone/.next/server/app/(desktop)/analytics/page_client-reference-manifest.js +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.js.nft.json +1 -1
  14. package/.next/standalone/.next/server/app/(desktop)/network/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(desktop)/page.js.nft.json +1 -1
  16. package/.next/standalone/.next/server/app/(desktop)/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/(desktop)/projects/page.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/(desktop)/projects/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/(desktop)/sessions/[id]/page.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/(desktop)/sessions/[id]/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/(desktop)/sessions/page.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/(desktop)/sessions/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/(desktop)/settings/page.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/(desktop)/settings/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/(desktop)/terminal/page.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/(desktop)/terminal/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/(desktop)/terminal/pane/[id]/page.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/(desktop)/terminal/pane/[id]/page_client-reference-manifest.js +1 -1
  29. package/.next/standalone/.next/server/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/(desktop)/workspaces/page.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/(desktop)/workspaces/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  34. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  35. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  36. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  37. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  38. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  39. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  40. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  41. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  42. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  43. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  44. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  45. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  46. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  47. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  48. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  49. package/.next/standalone/.next/server/app/admin/analytics.html +1 -1
  50. package/.next/standalone/.next/server/app/admin/analytics.rsc +5 -5
  51. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics/__PAGE__.segment.rsc +2 -2
  52. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics.segment.rsc +1 -1
  53. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  54. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +3 -3
  55. package/.next/standalone/.next/server/app/admin/analytics.segments/_full.segment.rsc +5 -5
  56. package/.next/standalone/.next/server/app/admin/analytics.segments/_head.segment.rsc +1 -1
  57. package/.next/standalone/.next/server/app/admin/analytics.segments/_index.segment.rsc +2 -2
  58. package/.next/standalone/.next/server/app/admin/analytics.segments/_tree.segment.rsc +2 -2
  59. package/.next/standalone/.next/server/app/admin/users.html +1 -1
  60. package/.next/standalone/.next/server/app/admin/users.rsc +5 -5
  61. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users/__PAGE__.segment.rsc +2 -2
  62. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users.segment.rsc +1 -1
  63. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  64. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap.segment.rsc +3 -3
  65. package/.next/standalone/.next/server/app/admin/users.segments/_full.segment.rsc +5 -5
  66. package/.next/standalone/.next/server/app/admin/users.segments/_head.segment.rsc +1 -1
  67. package/.next/standalone/.next/server/app/admin/users.segments/_index.segment.rsc +2 -2
  68. package/.next/standalone/.next/server/app/admin/users.segments/_tree.segment.rsc +2 -2
  69. package/.next/standalone/.next/server/app/analytics.html +1 -1
  70. package/.next/standalone/.next/server/app/analytics.rsc +5 -5
  71. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics/__PAGE__.segment.rsc +2 -2
  72. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics.segment.rsc +1 -1
  73. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +3 -3
  74. package/.next/standalone/.next/server/app/analytics.segments/_full.segment.rsc +5 -5
  75. package/.next/standalone/.next/server/app/analytics.segments/_head.segment.rsc +1 -1
  76. package/.next/standalone/.next/server/app/analytics.segments/_index.segment.rsc +2 -2
  77. package/.next/standalone/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
  78. package/.next/standalone/.next/server/app/api/analytics/overview/route.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/api/bulk/route.js.nft.json +1 -1
  80. package/.next/standalone/.next/server/app/api/chat/route.js +1 -1
  81. package/.next/standalone/.next/server/app/api/chat/route.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
  83. package/.next/standalone/.next/server/app/api/cortex/context/route.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/app/api/cortex/curation/assess/route.js.nft.json +1 -1
  85. package/.next/standalone/.next/server/app/api/cortex/curation/publish/route.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/api/cortex/curation/refine/route.js.nft.json +1 -1
  87. package/.next/standalone/.next/server/app/api/cortex/curation/review/route.js.nft.json +1 -1
  88. package/.next/standalone/.next/server/app/api/cortex/curation/seed/route.js.nft.json +1 -1
  89. package/.next/standalone/.next/server/app/api/cortex/export/route.js.nft.json +1 -1
  90. package/.next/standalone/.next/server/app/api/cortex/federation/pending/route.js.nft.json +1 -1
  91. package/.next/standalone/.next/server/app/api/cortex/federation/resolve/route.js.nft.json +1 -1
  92. package/.next/standalone/.next/server/app/api/cortex/federation/search/route.js.nft.json +1 -1
  93. package/.next/standalone/.next/server/app/api/cortex/federation/teach/route.js.nft.json +1 -1
  94. package/.next/standalone/.next/server/app/api/cortex/graph/edges/route.js.nft.json +1 -1
  95. package/.next/standalone/.next/server/app/api/cortex/graph/entities/[id]/route.js.nft.json +1 -1
  96. package/.next/standalone/.next/server/app/api/cortex/graph/entities/route.js.nft.json +1 -1
  97. package/.next/standalone/.next/server/app/api/cortex/graph/populate/route.js.nft.json +1 -1
  98. package/.next/standalone/.next/server/app/api/cortex/import/route.js.nft.json +1 -1
  99. package/.next/standalone/.next/server/app/api/cortex/import/status/route.js.nft.json +1 -1
  100. package/.next/standalone/.next/server/app/api/cortex/ingest/bootstrap/route.js.nft.json +1 -1
  101. package/.next/standalone/.next/server/app/api/cortex/ingest/status/route.js.nft.json +1 -1
  102. package/.next/standalone/.next/server/app/api/cortex/knowledge/[id]/route.js.nft.json +1 -1
  103. package/.next/standalone/.next/server/app/api/cortex/knowledge/route.js.nft.json +1 -1
  104. package/.next/standalone/.next/server/app/api/cortex/lobes/[id]/route.js.nft.json +1 -1
  105. package/.next/standalone/.next/server/app/api/cortex/lobes/route.js.nft.json +1 -1
  106. package/.next/standalone/.next/server/app/api/cortex/lobes/share/route.js.nft.json +1 -1
  107. package/.next/standalone/.next/server/app/api/cortex/marketplace/browse/route.js.nft.json +1 -1
  108. package/.next/standalone/.next/server/app/api/cortex/marketplace/preview/route.js.nft.json +1 -1
  109. package/.next/standalone/.next/server/app/api/cortex/mcp/call/route.js.nft.json +1 -1
  110. package/.next/standalone/.next/server/app/api/cortex/mcp/tools/route.js.nft.json +1 -1
  111. package/.next/standalone/.next/server/app/api/cortex/search/route.js.nft.json +1 -1
  112. package/.next/standalone/.next/server/app/api/cortex/settings/route.js.nft.json +1 -1
  113. package/.next/standalone/.next/server/app/api/cortex/status/route.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/app/api/cortex/timeline/route.js.nft.json +1 -1
  115. package/.next/standalone/.next/server/app/api/cortex/usage/route.js.nft.json +1 -1
  116. package/.next/standalone/.next/server/app/api/cortex/workspace/[id]/context/route.js.nft.json +1 -1
  117. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  118. package/.next/standalone/.next/server/app/api/folders/route.js.nft.json +1 -1
  119. package/.next/standalone/.next/server/app/api/network/handshake/route.js.nft.json +1 -1
  120. package/.next/standalone/.next/server/app/api/network/projects/route.js.nft.json +1 -1
  121. package/.next/standalone/.next/server/app/api/network/search/route.js.nft.json +1 -1
  122. package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js.nft.json +1 -1
  123. package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js.nft.json +1 -1
  124. package/.next/standalone/.next/server/app/api/network/sessions/route.js.nft.json +1 -1
  125. package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js.nft.json +1 -1
  126. package/.next/standalone/.next/server/app/api/network/workspaces/route.js +1 -1
  127. package/.next/standalone/.next/server/app/api/network/workspaces/route.js.nft.json +1 -1
  128. package/.next/standalone/.next/server/app/api/panes/[id]/route.js.nft.json +1 -1
  129. package/.next/standalone/.next/server/app/api/panes/route.js.nft.json +1 -1
  130. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  131. package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  132. package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js.nft.json +1 -1
  133. package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js.nft.json +1 -1
  134. package/.next/standalone/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  135. package/.next/standalone/.next/server/app/api/sessions/route.js.nft.json +1 -1
  136. package/.next/standalone/.next/server/app/api/sync/route.js.nft.json +1 -1
  137. package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -1
  138. package/.next/standalone/.next/server/app/api/tier/route.js.nft.json +1 -1
  139. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js.nft.json +1 -1
  140. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js.nft.json +1 -1
  141. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js.nft.json +1 -1
  142. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js.nft.json +1 -1
  143. package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js.nft.json +1 -1
  144. package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js.nft.json +1 -1
  145. package/.next/standalone/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  146. package/.next/standalone/.next/server/app/cortex.html +1 -1
  147. package/.next/standalone/.next/server/app/cortex.rsc +5 -5
  148. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex/__PAGE__.segment.rsc +2 -2
  149. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex.segment.rsc +1 -1
  150. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap.segment.rsc +3 -3
  151. package/.next/standalone/.next/server/app/cortex.segments/_full.segment.rsc +5 -5
  152. package/.next/standalone/.next/server/app/cortex.segments/_head.segment.rsc +1 -1
  153. package/.next/standalone/.next/server/app/cortex.segments/_index.segment.rsc +2 -2
  154. package/.next/standalone/.next/server/app/cortex.segments/_tree.segment.rsc +2 -2
  155. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  156. package/.next/standalone/.next/server/app/login.html +1 -1
  157. package/.next/standalone/.next/server/app/login.rsc +2 -2
  158. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +2 -2
  159. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
  160. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +2 -2
  161. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  162. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  163. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
  164. package/.next/standalone/.next/server/app/m/page_client-reference-manifest.js +1 -1
  165. package/.next/standalone/.next/server/app/m/projects/page_client-reference-manifest.js +1 -1
  166. package/.next/standalone/.next/server/app/m/projects.html +1 -1
  167. package/.next/standalone/.next/server/app/m/projects.rsc +2 -2
  168. package/.next/standalone/.next/server/app/m/projects.segments/_full.segment.rsc +2 -2
  169. package/.next/standalone/.next/server/app/m/projects.segments/_head.segment.rsc +1 -1
  170. package/.next/standalone/.next/server/app/m/projects.segments/_index.segment.rsc +2 -2
  171. package/.next/standalone/.next/server/app/m/projects.segments/_tree.segment.rsc +2 -2
  172. package/.next/standalone/.next/server/app/m/projects.segments/m/projects/__PAGE__.segment.rsc +1 -1
  173. package/.next/standalone/.next/server/app/m/projects.segments/m/projects.segment.rsc +1 -1
  174. package/.next/standalone/.next/server/app/m/projects.segments/m.segment.rsc +1 -1
  175. package/.next/standalone/.next/server/app/m/sessions/[id]/page.js.nft.json +1 -1
  176. package/.next/standalone/.next/server/app/m/sessions/[id]/page_client-reference-manifest.js +1 -1
  177. package/.next/standalone/.next/server/app/m/sessions/page_client-reference-manifest.js +1 -1
  178. package/.next/standalone/.next/server/app/m/sessions.html +1 -1
  179. package/.next/standalone/.next/server/app/m/sessions.rsc +2 -2
  180. package/.next/standalone/.next/server/app/m/sessions.segments/_full.segment.rsc +2 -2
  181. package/.next/standalone/.next/server/app/m/sessions.segments/_head.segment.rsc +1 -1
  182. package/.next/standalone/.next/server/app/m/sessions.segments/_index.segment.rsc +2 -2
  183. package/.next/standalone/.next/server/app/m/sessions.segments/_tree.segment.rsc +2 -2
  184. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions/__PAGE__.segment.rsc +1 -1
  185. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions.segment.rsc +1 -1
  186. package/.next/standalone/.next/server/app/m/sessions.segments/m.segment.rsc +1 -1
  187. package/.next/standalone/.next/server/app/m/settings/page_client-reference-manifest.js +1 -1
  188. package/.next/standalone/.next/server/app/m/settings.html +1 -1
  189. package/.next/standalone/.next/server/app/m/settings.rsc +2 -2
  190. package/.next/standalone/.next/server/app/m/settings.segments/_full.segment.rsc +2 -2
  191. package/.next/standalone/.next/server/app/m/settings.segments/_head.segment.rsc +1 -1
  192. package/.next/standalone/.next/server/app/m/settings.segments/_index.segment.rsc +2 -2
  193. package/.next/standalone/.next/server/app/m/settings.segments/_tree.segment.rsc +2 -2
  194. package/.next/standalone/.next/server/app/m/settings.segments/m/settings/__PAGE__.segment.rsc +1 -1
  195. package/.next/standalone/.next/server/app/m/settings.segments/m/settings.segment.rsc +1 -1
  196. package/.next/standalone/.next/server/app/m/settings.segments/m.segment.rsc +1 -1
  197. package/.next/standalone/.next/server/app/m/terminal/page.js.nft.json +1 -1
  198. package/.next/standalone/.next/server/app/m/terminal/page_client-reference-manifest.js +1 -1
  199. package/.next/standalone/.next/server/app/m/terminal.html +1 -1
  200. package/.next/standalone/.next/server/app/m/terminal.rsc +2 -2
  201. package/.next/standalone/.next/server/app/m/terminal.segments/_full.segment.rsc +2 -2
  202. package/.next/standalone/.next/server/app/m/terminal.segments/_head.segment.rsc +1 -1
  203. package/.next/standalone/.next/server/app/m/terminal.segments/_index.segment.rsc +2 -2
  204. package/.next/standalone/.next/server/app/m/terminal.segments/_tree.segment.rsc +2 -2
  205. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal/__PAGE__.segment.rsc +1 -1
  206. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal.segment.rsc +1 -1
  207. package/.next/standalone/.next/server/app/m/terminal.segments/m.segment.rsc +1 -1
  208. package/.next/standalone/.next/server/app/m.html +1 -1
  209. package/.next/standalone/.next/server/app/m.rsc +2 -2
  210. package/.next/standalone/.next/server/app/m.segments/_full.segment.rsc +2 -2
  211. package/.next/standalone/.next/server/app/m.segments/_head.segment.rsc +1 -1
  212. package/.next/standalone/.next/server/app/m.segments/_index.segment.rsc +2 -2
  213. package/.next/standalone/.next/server/app/m.segments/_tree.segment.rsc +2 -2
  214. package/.next/standalone/.next/server/app/m.segments/m/__PAGE__.segment.rsc +1 -1
  215. package/.next/standalone/.next/server/app/m.segments/m.segment.rsc +1 -1
  216. package/.next/standalone/.next/server/app/network.html +1 -1
  217. package/.next/standalone/.next/server/app/network.rsc +5 -5
  218. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network/__PAGE__.segment.rsc +2 -2
  219. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network.segment.rsc +1 -1
  220. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap.segment.rsc +3 -3
  221. package/.next/standalone/.next/server/app/network.segments/_full.segment.rsc +5 -5
  222. package/.next/standalone/.next/server/app/network.segments/_head.segment.rsc +1 -1
  223. package/.next/standalone/.next/server/app/network.segments/_index.segment.rsc +2 -2
  224. package/.next/standalone/.next/server/app/network.segments/_tree.segment.rsc +2 -2
  225. package/.next/standalone/.next/server/app/projects.html +1 -1
  226. package/.next/standalone/.next/server/app/projects.rsc +5 -5
  227. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects/__PAGE__.segment.rsc +2 -2
  228. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects.segment.rsc +1 -1
  229. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap.segment.rsc +3 -3
  230. package/.next/standalone/.next/server/app/projects.segments/_full.segment.rsc +5 -5
  231. package/.next/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  232. package/.next/standalone/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  233. package/.next/standalone/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  234. package/.next/standalone/.next/server/app/sessions.html +1 -1
  235. package/.next/standalone/.next/server/app/sessions.rsc +5 -5
  236. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions/__PAGE__.segment.rsc +2 -2
  237. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions.segment.rsc +1 -1
  238. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap.segment.rsc +3 -3
  239. package/.next/standalone/.next/server/app/sessions.segments/_full.segment.rsc +5 -5
  240. package/.next/standalone/.next/server/app/sessions.segments/_head.segment.rsc +1 -1
  241. package/.next/standalone/.next/server/app/sessions.segments/_index.segment.rsc +2 -2
  242. package/.next/standalone/.next/server/app/sessions.segments/_tree.segment.rsc +2 -2
  243. package/.next/standalone/.next/server/app/settings.html +1 -1
  244. package/.next/standalone/.next/server/app/settings.rsc +5 -5
  245. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings/__PAGE__.segment.rsc +2 -2
  246. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings.segment.rsc +1 -1
  247. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap.segment.rsc +3 -3
  248. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +5 -5
  249. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  250. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  251. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  252. package/.next/standalone/.next/server/app/terminal.html +1 -1
  253. package/.next/standalone/.next/server/app/terminal.rsc +5 -5
  254. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal/__PAGE__.segment.rsc +2 -2
  255. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal.segment.rsc +1 -1
  256. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap.segment.rsc +3 -3
  257. package/.next/standalone/.next/server/app/terminal.segments/_full.segment.rsc +5 -5
  258. package/.next/standalone/.next/server/app/terminal.segments/_head.segment.rsc +1 -1
  259. package/.next/standalone/.next/server/app/terminal.segments/_index.segment.rsc +2 -2
  260. package/.next/standalone/.next/server/app/terminal.segments/_tree.segment.rsc +2 -2
  261. package/.next/standalone/.next/server/app/workspaces.html +1 -1
  262. package/.next/standalone/.next/server/app/workspaces.rsc +5 -5
  263. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces/__PAGE__.segment.rsc +2 -2
  264. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces.segment.rsc +1 -1
  265. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap.segment.rsc +3 -3
  266. package/.next/standalone/.next/server/app/workspaces.segments/_full.segment.rsc +5 -5
  267. package/.next/standalone/.next/server/app/workspaces.segments/_head.segment.rsc +1 -1
  268. package/.next/standalone/.next/server/app/workspaces.segments/_index.segment.rsc +2 -2
  269. package/.next/standalone/.next/server/app/workspaces.segments/_tree.segment.rsc +2 -2
  270. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0041efe4._.js +2 -2
  271. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00bf0ace._.js +2 -2
  272. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e71d908._.js +2 -2
  273. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e9142f3._.js +2 -2
  274. package/.next/standalone/.next/server/chunks/[root-of-the-server]__10e47926._.js +1 -1
  275. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1665dc78._.js +2 -2
  276. package/.next/standalone/.next/server/chunks/[root-of-the-server]__175cbabf._.js +2 -2
  277. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1adae357._.js +2 -2
  278. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1d359752._.js +1 -1
  279. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1e8fabeb._.js +3 -3
  280. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1f8deca0._.js +8 -8
  281. package/.next/standalone/.next/server/chunks/[root-of-the-server]__253fdda1._.js +2 -2
  282. package/.next/standalone/.next/server/chunks/[root-of-the-server]__28e6434f._.js +2 -2
  283. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2a386564._.js +1 -1
  284. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2c20fb38._.js +2 -2
  285. package/.next/standalone/.next/server/chunks/[root-of-the-server]__309132cd._.js +1 -1
  286. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__cf3c60c2._.js → [root-of-the-server]__33fec964._.js} +4 -4
  287. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3786d8ae._.js +1 -1
  288. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3ae92407._.js +2 -2
  289. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3beda9fe._.js +2 -2
  290. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4619e9bd._.js +1 -1
  291. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4a051043._.js +1 -1
  292. package/.next/standalone/.next/server/chunks/[root-of-the-server]__508002e4._.js +2 -2
  293. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5086c373._.js +2 -2
  294. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5913e097._.js +2 -2
  295. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5b5f68d2._.js +2 -2
  296. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5c1f2459._.js +2 -2
  297. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5ec8c977._.js +2 -2
  298. package/.next/standalone/.next/server/chunks/[root-of-the-server]__63cebc6c._.js +2 -2
  299. package/.next/standalone/.next/server/chunks/[root-of-the-server]__64d30d4d._.js +2 -2
  300. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6c54fc2e._.js +2 -2
  301. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6dc1fb7e._.js +1 -1
  302. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6e568102._.js +1 -1
  303. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6faa04c0._.js +2 -2
  304. package/.next/standalone/.next/server/chunks/[root-of-the-server]__74a34dc3._.js +2 -2
  305. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7e7250a4._.js +3 -3
  306. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8309e0a4._.js +2 -2
  307. package/.next/standalone/.next/server/chunks/[root-of-the-server]__86cc0e2b._.js +6 -6
  308. package/.next/standalone/.next/server/chunks/[root-of-the-server]__89c2565a._.js +2 -2
  309. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8d178ad9._.js +2 -2
  310. package/.next/standalone/.next/server/chunks/[root-of-the-server]__93ee06f3._.js +3 -3
  311. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9e4c154a._.js +2 -2
  312. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9d2e1d3._.js +2 -2
  313. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ae53d343._.js +2 -2
  314. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b3a04cef._.js +2 -2
  315. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b4270b77._.js +1 -1
  316. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b6b6ce60._.js +1 -1
  317. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c88b63f7._.js +2 -2
  318. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__eee4c5e8._.js → [root-of-the-server]__cba5f007._.js} +2 -2
  319. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cbf4ceb0._.js +2 -2
  320. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cefdba2f._.js +2 -2
  321. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cf9e82bb._.js +2 -2
  322. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d2897392._.js +2 -2
  323. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d3b2d856._.js +2 -2
  324. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d73273ca._.js +1 -1
  325. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d8417eb6._.js +2 -2
  326. package/.next/standalone/.next/server/chunks/[root-of-the-server]__dc2a55de._.js +2 -2
  327. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e0d4690b._.js +3 -3
  328. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e678dd53._.js +1 -1
  329. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e9223f55._.js +2 -2
  330. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ea630076._.js +3 -3
  331. package/.next/standalone/.next/server/chunks/[root-of-the-server]__eb8acb65._.js +1 -1
  332. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f26ca49d._.js +1 -1
  333. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f33e1101._.js +1 -1
  334. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f515f865._.js +2 -2
  335. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fceb5d60._.js +2 -2
  336. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fed41403._.js +2 -2
  337. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ff2e98c2._.js +2 -2
  338. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__19afc53d._.js +3 -0
  339. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__66aca5d4._.js +1 -1
  340. package/.next/standalone/.next/server/chunks/ssr/{_036cbaa2._.js → _078dd64d._.js} +1 -1
  341. package/.next/standalone/.next/server/chunks/ssr/{_a4eeff0d._.js → _2230ad2d._.js} +2 -2
  342. package/.next/standalone/.next/server/chunks/ssr/{_43455582._.js → _701606d5._.js} +1 -1
  343. package/.next/standalone/.next/server/chunks/ssr/_72b1de37._.js +3 -0
  344. package/.next/standalone/.next/server/chunks/ssr/{_d39bcfda._.js → _93ef0f79._.js} +2 -2
  345. package/.next/standalone/.next/server/chunks/ssr/_950142a4._.js +1 -1
  346. package/.next/standalone/.next/server/chunks/ssr/_a22b5eb0._.js +3 -0
  347. package/.next/standalone/.next/server/chunks/ssr/_aeeff784._.js +3 -0
  348. package/.next/standalone/.next/server/chunks/ssr/_c1cfdd09._.js +3 -0
  349. package/.next/standalone/.next/server/chunks/ssr/_c2d3f6de._.js +3 -0
  350. package/.next/standalone/.next/server/chunks/ssr/{_8167090e._.js → _db2fec84._.js} +2 -2
  351. package/.next/standalone/.next/server/chunks/ssr/src_components_terminal_terminal-pane_tsx_803c5e2c._.js +2 -2
  352. package/.next/standalone/.next/server/edge/chunks/_d73df637._.js +1 -1
  353. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  354. package/.next/standalone/.next/server/pages/404.html +1 -1
  355. package/.next/standalone/.next/server/pages/500.html +2 -2
  356. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  357. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  358. package/.next/standalone/.next/static/chunks/25b7a243a404a1a7.js +1 -0
  359. package/.next/standalone/.next/static/chunks/2b997e211a5d547b.js +1 -0
  360. package/.next/standalone/.next/static/chunks/5e08abb00653754a.js +1 -0
  361. package/.next/standalone/.next/static/chunks/61f2ed39b75b1efc.js +1 -0
  362. package/.next/standalone/.next/static/chunks/6c78a1dfa7ec2959.css +3 -0
  363. package/.next/standalone/.next/static/chunks/7246f1ee445f7024.js +1 -0
  364. package/.next/standalone/.next/static/chunks/7424664c6ffa94bd.js +1 -0
  365. package/.next/standalone/.next/static/chunks/7e0091ab6c5ee8bd.js +1 -0
  366. package/.next/standalone/.next/static/chunks/8b3f4572fec83caa.js +5 -0
  367. package/.next/standalone/.next/static/chunks/{224aab5107987011.js → 9899cf4c2bdbe61d.js} +2 -2
  368. package/.next/standalone/.next/static/chunks/ac339e970df82fa5.js +5 -0
  369. package/.next/standalone/.next/static/chunks/f9f2628207848ac2.js +1 -0
  370. package/.next/standalone/bin/cortex-hook.sh +62 -62
  371. package/.next/standalone/bin/cortex-mcp.js +60 -60
  372. package/.next/standalone/docs/superpowers/plans/2026-03-13-cortex-wiring.md +1387 -1387
  373. package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-entity-graph.md +1923 -1923
  374. package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-knowledge-evolution.md +1113 -1113
  375. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-boundary-engine.md +853 -853
  376. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-context-engine.md +1274 -1274
  377. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-signal-ingestion.md +933 -933
  378. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-lobes.md +1080 -1080
  379. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-gravity-system.md +768 -768
  380. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-ui.md +1108 -1108
  381. package/.next/standalone/docs/superpowers/plans/2026-03-18-cortex-ui-integration.md +1846 -1846
  382. package/.next/standalone/docs/superpowers/specs/2026-03-13-cortex-wiring-design.md +268 -268
  383. package/.next/standalone/docs/superpowers/specs/2026-03-14-cortex-v2-design.md +623 -623
  384. package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-lobes-design.md +263 -263
  385. package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-v2-ui-design.md +240 -240
  386. package/.next/standalone/docs/superpowers/specs/2026-03-18-cortex-ui-integration-design.md +341 -341
  387. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/README.md +46 -0
  388. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/glib-2.0/include/glibconfig.h +221 -0
  389. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/index.js +1 -0
  390. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  391. package/.next/standalone/node_modules/@img/sharp-libvips-linux-x64/package.json +42 -0
  392. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +46 -0
  393. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +221 -0
  394. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +1 -0
  395. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  396. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +42 -0
  397. package/.next/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +30 -0
  398. package/.next/standalone/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  399. package/.next/standalone/node_modules/@img/{sharp-win32-x64 → sharp-linux-x64}/package.json +46 -39
  400. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
  401. package/.next/standalone/node_modules/@img/sharp-linuxmusl-x64/package.json +46 -0
  402. package/.next/standalone/package.json +102 -102
  403. package/.next/standalone/server.js +1 -1
  404. package/.next/standalone/src/app/(desktop)/cortex/page.tsx +78 -78
  405. package/.next/standalone/src/app/api/cortex/context/route.ts +78 -78
  406. package/.next/standalone/src/app/api/cortex/curation/assess/route.ts +27 -27
  407. package/.next/standalone/src/app/api/cortex/curation/publish/route.ts +23 -23
  408. package/.next/standalone/src/app/api/cortex/curation/refine/route.ts +23 -23
  409. package/.next/standalone/src/app/api/cortex/curation/review/route.ts +29 -29
  410. package/.next/standalone/src/app/api/cortex/curation/seed/route.ts +23 -23
  411. package/.next/standalone/src/app/api/cortex/export/route.ts +40 -40
  412. package/.next/standalone/src/app/api/cortex/federation/pending/route.ts +20 -20
  413. package/.next/standalone/src/app/api/cortex/federation/resolve/route.ts +43 -43
  414. package/.next/standalone/src/app/api/cortex/federation/search/route.ts +35 -35
  415. package/.next/standalone/src/app/api/cortex/federation/teach/route.ts +76 -76
  416. package/.next/standalone/src/app/api/cortex/graph/edges/route.ts +112 -112
  417. package/.next/standalone/src/app/api/cortex/graph/entities/[id]/route.ts +73 -73
  418. package/.next/standalone/src/app/api/cortex/graph/entities/route.ts +75 -75
  419. package/.next/standalone/src/app/api/cortex/graph/populate/route.ts +203 -203
  420. package/.next/standalone/src/app/api/cortex/import/route.ts +75 -75
  421. package/.next/standalone/src/app/api/cortex/import/status/route.ts +15 -15
  422. package/.next/standalone/src/app/api/cortex/ingest/bootstrap/route.ts +29 -29
  423. package/.next/standalone/src/app/api/cortex/ingest/status/route.ts +15 -15
  424. package/.next/standalone/src/app/api/cortex/knowledge/[id]/route.ts +91 -91
  425. package/.next/standalone/src/app/api/cortex/knowledge/route.ts +93 -93
  426. package/.next/standalone/src/app/api/cortex/lobes/[id]/route.ts +67 -67
  427. package/.next/standalone/src/app/api/cortex/lobes/route.ts +22 -22
  428. package/.next/standalone/src/app/api/cortex/lobes/share/route.ts +80 -80
  429. package/.next/standalone/src/app/api/cortex/marketplace/browse/route.ts +43 -43
  430. package/.next/standalone/src/app/api/cortex/marketplace/preview/route.ts +46 -46
  431. package/.next/standalone/src/app/api/cortex/mcp/call/route.ts +11 -11
  432. package/.next/standalone/src/app/api/cortex/mcp/tools/route.ts +6 -6
  433. package/.next/standalone/src/app/api/cortex/search/route.ts +43 -43
  434. package/.next/standalone/src/app/api/cortex/settings/route.ts +33 -33
  435. package/.next/standalone/src/app/api/cortex/status/route.ts +169 -169
  436. package/.next/standalone/src/app/api/cortex/timeline/route.ts +42 -42
  437. package/.next/standalone/src/app/api/cortex/usage/route.ts +31 -31
  438. package/.next/standalone/src/app/api/cortex/workspace/[id]/context/route.ts +41 -41
  439. package/.next/standalone/src/components/cortex/constants.ts +29 -29
  440. package/.next/standalone/src/components/cortex/cortex-dashboard.tsx +304 -304
  441. package/.next/standalone/src/components/cortex/cortex-indicator.tsx +44 -44
  442. package/.next/standalone/src/components/cortex/cortex-panel.tsx +140 -140
  443. package/.next/standalone/src/components/cortex/cortex-settings.tsx +221 -221
  444. package/.next/standalone/src/components/cortex/curation-tab.tsx +810 -810
  445. package/.next/standalone/src/components/cortex/entity-detail.tsx +101 -101
  446. package/.next/standalone/src/components/cortex/entity-graph.tsx +382 -382
  447. package/.next/standalone/src/components/cortex/import-dialog.tsx +212 -212
  448. package/.next/standalone/src/components/cortex/injection-badge.tsx +72 -72
  449. package/.next/standalone/src/components/cortex/knowledge-card.tsx +109 -109
  450. package/.next/standalone/src/components/cortex/knowledge-tab.tsx +158 -158
  451. package/.next/standalone/src/components/cortex/lobe-settings.tsx +215 -215
  452. package/.next/standalone/src/components/cortex/marketplace-card.tsx +126 -126
  453. package/.next/standalone/src/components/cortex/marketplace-tab.tsx +113 -113
  454. package/.next/standalone/src/lib/cortex/config.ts +40 -40
  455. package/.next/standalone/src/lib/cortex/debug.ts +10 -10
  456. package/.next/standalone/src/lib/cortex/distillation/usage-store.ts +18 -18
  457. package/.next/standalone/src/lib/cortex/graph/resolver.ts +10 -10
  458. package/.next/standalone/src/lib/cortex/graph/types.ts +22 -22
  459. package/.next/standalone/src/lib/cortex/index.ts +56 -56
  460. package/.next/standalone/src/lib/cortex/ingestion/bootstrap.ts +14 -14
  461. package/.next/standalone/src/lib/cortex/knowledge/compat.ts +14 -14
  462. package/.next/standalone/src/lib/cortex/knowledge/contradiction.ts +10 -10
  463. package/.next/standalone/src/lib/cortex/knowledge/types.ts +67 -67
  464. package/.next/standalone/src/lib/cortex/lobes/config.ts +16 -16
  465. package/.next/standalone/src/lib/cortex/lobes/resolver.ts +8 -8
  466. package/.next/standalone/src/lib/cortex/lobes/shares.ts +14 -14
  467. package/.next/standalone/src/lib/cortex/mcp/server.ts +8 -8
  468. package/.next/standalone/src/lib/cortex/portability/exporter.ts +6 -6
  469. package/.next/standalone/src/lib/cortex/portability/importer.ts +10 -10
  470. package/.next/standalone/src/lib/cortex/retrieval/context-engine.ts +10 -10
  471. package/.next/standalone/src/lib/cortex/types.ts +39 -39
  472. package/.next/standalone/tsconfig.json +34 -34
  473. package/LICENSE +661 -661
  474. package/README.md +131 -131
  475. package/bin/cortex-hook.sh +62 -62
  476. package/bin/cortex-mcp.js +60 -60
  477. package/bin/fix-standalone-externals.js +79 -79
  478. package/bin/lib/auto-setup.js +110 -110
  479. package/bin/mdns-service.js +171 -171
  480. package/bin/postinstall.js +35 -35
  481. package/bin/setup-admin.js +195 -195
  482. package/bin/spaces-dev.js +208 -208
  483. package/bin/spaces-install.js +599 -599
  484. package/bin/spaces-reset-totp.js +50 -50
  485. package/bin/spaces-service.js +1020 -1020
  486. package/bin/spaces-setup.js +253 -253
  487. package/bin/spaces.js +776 -717
  488. package/bin/ssh-auth-keys.sh +68 -68
  489. package/bin/terminal-server.js +1649 -1646
  490. package/package.json +102 -102
  491. package/.next/standalone/.claude/settings.local.json +0 -55
  492. package/.next/standalone/.claude/spaces-env.json +0 -1
  493. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__23f374a2._.js +0 -3
  494. package/.next/standalone/.next/server/chunks/ssr/_01842037._.js +0 -3
  495. package/.next/standalone/.next/server/chunks/ssr/_10c0d382._.js +0 -3
  496. package/.next/standalone/.next/server/chunks/ssr/_67887e33._.js +0 -3
  497. package/.next/standalone/.next/server/chunks/ssr/_a012c43b._.js +0 -3
  498. package/.next/standalone/.next/server/chunks/ssr/_ed6c285b._.js +0 -3
  499. package/.next/standalone/.next/static/chunks/17d164c01fa1aaa9.js +0 -5
  500. package/.next/standalone/.next/static/chunks/19da759dde107f02.js +0 -1
  501. package/.next/standalone/.next/static/chunks/415827af44b8c374.js +0 -1
  502. package/.next/standalone/.next/static/chunks/596bd56e0ad09173.js +0 -5
  503. package/.next/standalone/.next/static/chunks/79aacab676df80c4.js +0 -1
  504. package/.next/standalone/.next/static/chunks/846d6ef408f69390.js +0 -1
  505. package/.next/standalone/.next/static/chunks/8a7f58872c123a53.css +0 -3
  506. package/.next/standalone/.next/static/chunks/8de5e432a2fc563a.js +0 -1
  507. package/.next/standalone/.next/static/chunks/b0484608571d975a.js +0 -1
  508. package/.next/standalone/.next/static/chunks/b42a38df3e418ff0.js +0 -1
  509. package/.next/standalone/.next/static/chunks/d6474f65a17c483e.js +0 -1
  510. package/.next/standalone/.spaces/cortex-context.md +0 -70
  511. package/.next/standalone/node_modules/@img/sharp-win32-x64/lib/sharp-win32-x64.node +0 -0
  512. /package/.next/standalone/.next/static/{Ku7_sP1T1UuqtRhUTiJZw → 77VYbwIoyxFNr5xevTrCu}/_buildManifest.js +0 -0
  513. /package/.next/standalone/.next/static/{Ku7_sP1T1UuqtRhUTiJZw → 77VYbwIoyxFNr5xevTrCu}/_clientMiddlewareManifest.json +0 -0
  514. /package/.next/standalone/.next/static/{Ku7_sP1T1UuqtRhUTiJZw → 77VYbwIoyxFNr5xevTrCu}/_ssgManifest.js +0 -0
  515. /package/.next/standalone/node_modules/@img/{sharp-win32-x64 → sharp-libvips-linux-x64}/versions.json +0 -0
@@ -1,75 +1,75 @@
1
- import { NextResponse } from 'next/server';
2
- import type { NextRequest } from 'next/server';
3
- import { getAuthUser, withUser } from '@/lib/auth';
4
- import { getCortex, isCortexAvailable } from '@/lib/cortex';
5
- import { isValidEntityType } from '@/lib/cortex/graph/types';
6
- import type { EntityType } from '@/lib/cortex/graph/types';
7
-
8
- export async function GET(request: NextRequest) {
9
- const user = getAuthUser(request);
10
- return withUser(user, async () => {
11
- if (!isCortexAvailable()) {
12
- return NextResponse.json({ error: 'Cortex unavailable' }, { status: 403 });
13
- }
14
- const cortex = await getCortex();
15
- if (!cortex?.graph) return NextResponse.json({ entities: [] });
16
-
17
- const url = new URL(request.url);
18
- const typeParam = url.searchParams.get('type') ?? undefined;
19
- const limitParam = url.searchParams.get('limit');
20
- const limit = limitParam ? parseInt(limitParam, 10) : undefined;
21
-
22
- if (typeParam !== undefined && !isValidEntityType(typeParam)) {
23
- return NextResponse.json({ error: `Invalid entity type: ${typeParam}` }, { status: 400 });
24
- }
25
-
26
- const type = typeParam as EntityType | undefined;
27
- const entities = cortex.graph.listEntities({ type, limit });
28
- return NextResponse.json({ entities });
29
- });
30
- }
31
-
32
- export async function POST(request: NextRequest) {
33
- const user = getAuthUser(request);
34
- return withUser(user, async () => {
35
- if (!isCortexAvailable()) {
36
- return NextResponse.json({ error: 'Cortex unavailable' }, { status: 403 });
37
- }
38
- const cortex = await getCortex();
39
- if (!cortex?.graph) {
40
- return NextResponse.json({ error: 'Cortex disabled' }, { status: 503 });
41
- }
42
-
43
- const body = await request.json();
44
- const { type, name, id, metadata } = body as {
45
- type?: string;
46
- name?: string;
47
- id?: string;
48
- metadata?: Record<string, unknown>;
49
- };
50
-
51
- if (!type || !name) {
52
- return NextResponse.json({ error: 'type and name are required' }, { status: 400 });
53
- }
54
-
55
- if (!isValidEntityType(type)) {
56
- return NextResponse.json({ error: `Invalid entity type: ${type}` }, { status: 400 });
57
- }
58
-
59
- // Check for conflict if id is provided
60
- if (id && cortex.graph.getEntity(id)) {
61
- return NextResponse.json({ error: `Entity with id '${id}' already exists` }, { status: 409 });
62
- }
63
-
64
- try {
65
- const entity = cortex.graph.createEntity({ type, name, id, metadata });
66
- return NextResponse.json({ entity }, { status: 201 });
67
- } catch (err: unknown) {
68
- const message = err instanceof Error ? err.message : String(err);
69
- if (message.includes('UNIQUE constraint failed')) {
70
- return NextResponse.json({ error: 'Entity already exists' }, { status: 409 });
71
- }
72
- return NextResponse.json({ error: message }, { status: 400 });
73
- }
74
- });
75
- }
1
+ import { NextResponse } from 'next/server';
2
+ import type { NextRequest } from 'next/server';
3
+ import { getAuthUser, withUser } from '@/lib/auth';
4
+ import { getCortex, isCortexAvailable } from '@/lib/cortex';
5
+ import { isValidEntityType } from '@/lib/cortex/graph/types';
6
+ import type { EntityType } from '@/lib/cortex/graph/types';
7
+
8
+ export async function GET(request: NextRequest) {
9
+ const user = getAuthUser(request);
10
+ return withUser(user, async () => {
11
+ if (!isCortexAvailable()) {
12
+ return NextResponse.json({ error: 'Cortex unavailable' }, { status: 403 });
13
+ }
14
+ const cortex = await getCortex();
15
+ if (!cortex?.graph) return NextResponse.json({ entities: [] });
16
+
17
+ const url = new URL(request.url);
18
+ const typeParam = url.searchParams.get('type') ?? undefined;
19
+ const limitParam = url.searchParams.get('limit');
20
+ const limit = limitParam ? parseInt(limitParam, 10) : undefined;
21
+
22
+ if (typeParam !== undefined && !isValidEntityType(typeParam)) {
23
+ return NextResponse.json({ error: `Invalid entity type: ${typeParam}` }, { status: 400 });
24
+ }
25
+
26
+ const type = typeParam as EntityType | undefined;
27
+ const entities = cortex.graph.listEntities({ type, limit });
28
+ return NextResponse.json({ entities });
29
+ });
30
+ }
31
+
32
+ export async function POST(request: NextRequest) {
33
+ const user = getAuthUser(request);
34
+ return withUser(user, async () => {
35
+ if (!isCortexAvailable()) {
36
+ return NextResponse.json({ error: 'Cortex unavailable' }, { status: 403 });
37
+ }
38
+ const cortex = await getCortex();
39
+ if (!cortex?.graph) {
40
+ return NextResponse.json({ error: 'Cortex disabled' }, { status: 503 });
41
+ }
42
+
43
+ const body = await request.json();
44
+ const { type, name, id, metadata } = body as {
45
+ type?: string;
46
+ name?: string;
47
+ id?: string;
48
+ metadata?: Record<string, unknown>;
49
+ };
50
+
51
+ if (!type || !name) {
52
+ return NextResponse.json({ error: 'type and name are required' }, { status: 400 });
53
+ }
54
+
55
+ if (!isValidEntityType(type)) {
56
+ return NextResponse.json({ error: `Invalid entity type: ${type}` }, { status: 400 });
57
+ }
58
+
59
+ // Check for conflict if id is provided
60
+ if (id && cortex.graph.getEntity(id)) {
61
+ return NextResponse.json({ error: `Entity with id '${id}' already exists` }, { status: 409 });
62
+ }
63
+
64
+ try {
65
+ const entity = cortex.graph.createEntity({ type, name, id, metadata });
66
+ return NextResponse.json({ entity }, { status: 201 });
67
+ } catch (err: unknown) {
68
+ const message = err instanceof Error ? err.message : String(err);
69
+ if (message.includes('UNIQUE constraint failed')) {
70
+ return NextResponse.json({ error: 'Entity already exists' }, { status: 409 });
71
+ }
72
+ return NextResponse.json({ error: message }, { status: 400 });
73
+ }
74
+ });
75
+ }
@@ -1,203 +1,203 @@
1
- import { NextResponse } from 'next/server';
2
- import type { NextRequest } from 'next/server';
3
- import { getAuthUser, withUser } from '@/lib/auth';
4
- import { getCortex, isCortexAvailable } from '@/lib/cortex';
5
- import { getDb } from '@/lib/db/schema';
6
- import { entityId, slugify } from '@/lib/cortex/graph/types';
7
- import type { EdgeRelation, EntityType } from '@/lib/cortex/graph/types';
8
-
9
- export async function POST(request: NextRequest) {
10
- const user = getAuthUser(request);
11
- return withUser(user, async () => {
12
- if (!isCortexAvailable()) {
13
- return NextResponse.json({ error: 'Cortex unavailable' }, { status: 403 });
14
- }
15
- const cortex = await getCortex();
16
- if (!cortex?.graph) {
17
- return NextResponse.json({ error: 'Cortex disabled' }, { status: 503 });
18
- }
19
-
20
- const graph = cortex.graph;
21
- const db = getDb();
22
- let created = 0;
23
- let edges = 0;
24
-
25
- const ensure = (id: string, type: EntityType, name: string, metadata?: Record<string, unknown>) => {
26
- if (!graph.getEntity(id)) {
27
- graph.createEntity({ id, type, name, metadata });
28
- created++;
29
- }
30
- };
31
-
32
- const link = (source: string, target: string, relation: EdgeRelation, weight?: number) => {
33
- try {
34
- graph.createEdge({ source_id: source, target_id: target, relation, weight });
35
- edges++;
36
- } catch { /* dupe */ }
37
- };
38
-
39
- // ── 1. Current user ──────────────────────────────────────
40
- const personId = entityId('person', slugify(user));
41
- ensure(personId, 'person', user);
42
-
43
- // ── 2. Workspaces ────────────────────────────────────────
44
- const workspaces = db.prepare('SELECT id, name, color FROM workspaces').all() as { id: number; name: string; color: string }[];
45
- const wsIdMap = new Map<number, string>();
46
- for (const ws of workspaces) {
47
- const id = entityId('project', slugify(ws.name));
48
- ensure(id, 'project', ws.name, { workspaceId: ws.id, color: ws.color });
49
- link(personId, id, 'owns');
50
- wsIdMap.set(ws.id, id);
51
- }
52
-
53
- // ── 3. Dev projects (from session project_path) ──────────
54
- const projects = db.prepare(`
55
- SELECT p.id, p.name, p.path, p.agent_type as agentType,
56
- COUNT(s.id) as sessionCount
57
- FROM projects p
58
- LEFT JOIN sessions s ON s.project_id = p.id
59
- GROUP BY p.id
60
- `).all() as { id: string; name: string; path: string; agentType: string; sessionCount: number }[];
61
-
62
- const projIdMap = new Map<string, string>();
63
- for (const p of projects) {
64
- const id = entityId('system', slugify(p.name));
65
- ensure(id, 'system', p.name, { path: p.path, agentType: p.agentType, sessions: p.sessionCount });
66
- link(personId, id, 'works_on');
67
- projIdMap.set(p.id, id);
68
- }
69
-
70
- // ── 4. Git branches as modules ──────────────────────────
71
- const branches = db.prepare(`
72
- SELECT DISTINCT git_branch, project_path
73
- FROM sessions
74
- WHERE git_branch IS NOT NULL AND git_branch != '' AND git_branch != 'main' AND git_branch != 'master'
75
- `).all() as { git_branch: string; project_path: string }[];
76
-
77
- for (const b of branches) {
78
- const id = entityId('module', slugify(b.git_branch));
79
- ensure(id, 'module', b.git_branch, { branch: true });
80
-
81
- // Link branch to its project
82
- if (b.project_path) {
83
- const projName = b.project_path.split(/[/\\]/).pop() || b.project_path;
84
- const projGraphId = entityId('system', slugify(projName));
85
- link(id, projGraphId, 'part_of');
86
- }
87
- }
88
-
89
- // ── 5. Topics from knowledge tags & session activity ─────
90
- // Extract topics from session summaries (common patterns)
91
- const summaries = db.prepare(`
92
- SELECT COALESCE(custom_name, summary, first_prompt) as text, project_path, agent_type as agentType
93
- FROM sessions
94
- WHERE (summary IS NOT NULL AND summary != '') OR (first_prompt IS NOT NULL AND first_prompt != '')
95
- ORDER BY modified DESC
96
- LIMIT 200
97
- `).all() as { text: string; project_path: string; agentType: string }[];
98
-
99
- // Extract topic keywords from summaries
100
- const topicCounts = new Map<string, { count: number; projects: Set<string> }>();
101
- const topicPatterns = /\b(auth|api|database|testing|deploy|ci[/-]cd|refactor|bug\s*fix|migration|security|performance|frontend|backend|ui|ux|docker|kubernetes|graphql|rest|websocket|cache|queue|search|analytics|monitor|log|config|setup|infra)\b/gi;
102
-
103
- for (const s of summaries) {
104
- if (!s.text) continue;
105
- const matches = s.text.match(topicPatterns);
106
- if (!matches) continue;
107
- const seen = new Set<string>();
108
- for (const m of matches) {
109
- const topic = m.toLowerCase().replace(/\s+/g, '-');
110
- if (seen.has(topic)) continue;
111
- seen.add(topic);
112
- if (!topicCounts.has(topic)) topicCounts.set(topic, { count: 0, projects: new Set() });
113
- const tc = topicCounts.get(topic)!;
114
- tc.count++;
115
- if (s.project_path) {
116
- const projName = s.project_path.split(/[/\\]/).pop() || s.project_path;
117
- tc.projects.add(projName);
118
- }
119
- }
120
- }
121
-
122
- // Only create topics that appear 2+ times
123
- for (const [topic, data] of topicCounts) {
124
- if (data.count < 2) continue;
125
- const id = entityId('topic', topic);
126
- ensure(id, 'topic', topic, { mentions: data.count });
127
-
128
- // Link topics to projects
129
- for (const projName of data.projects) {
130
- const projGraphId = entityId('system', slugify(projName));
131
- if (graph.getEntity(projGraphId)) {
132
- link(projGraphId, id, 'relates_to');
133
- }
134
- }
135
-
136
- // Link user to frequently-used topics
137
- if (data.count >= 3) {
138
- link(personId, id, 'expert_in', data.count);
139
- }
140
- }
141
-
142
- // ── 6. Agent types as tools ──────────────────────────────
143
- const agentTypes = db.prepare(`
144
- SELECT agent_type, COUNT(*) as cnt
145
- FROM sessions
146
- WHERE agent_type IS NOT NULL AND agent_type != ''
147
- GROUP BY agent_type
148
- HAVING cnt >= 2
149
- `).all() as { agent_type: string; cnt: number }[];
150
-
151
- for (const at of agentTypes) {
152
- const id = entityId('topic', slugify(`${at.agent_type}-agent`));
153
- ensure(id, 'topic', `${at.agent_type} agent`, { agentType: at.agent_type, sessions: at.cnt });
154
- link(personId, id, 'works_on', at.cnt);
155
- }
156
-
157
- // ── 7. Cross-link projects to workspaces via sessions ────
158
- const wsProjectLinks = db.prepare(`
159
- SELECT DISTINCT ws.workspace_id, s.project_id
160
- FROM sessions s
161
- JOIN workspace_sessions ws ON ws.session_id = s.id
162
- WHERE ws.workspace_id IS NOT NULL AND s.project_id IS NOT NULL
163
- `).all() as { workspace_id: number; project_id: string }[];
164
-
165
- for (const wpl of wsProjectLinks) {
166
- const wsGraphId = wsIdMap.get(wpl.workspace_id);
167
- const projGraphId = projIdMap.get(wpl.project_id);
168
- if (wsGraphId && projGraphId) {
169
- link(wsGraphId, projGraphId, 'contains');
170
- }
171
- }
172
-
173
- // ── 8. Cross-link projects that share branches ───────────
174
- const sharedBranches = db.prepare(`
175
- SELECT git_branch, GROUP_CONCAT(DISTINCT project_path) as paths
176
- FROM sessions
177
- WHERE git_branch IS NOT NULL AND git_branch != '' AND project_path IS NOT NULL
178
- GROUP BY git_branch
179
- HAVING COUNT(DISTINCT project_path) > 1
180
- `).all() as { git_branch: string; paths: string }[];
181
-
182
- for (const sb of sharedBranches) {
183
- const projectPaths = sb.paths.split(',');
184
- for (let i = 0; i < projectPaths.length; i++) {
185
- for (let j = i + 1; j < projectPaths.length; j++) {
186
- const nameA = projectPaths[i].split(/[/\\]/).pop() || projectPaths[i];
187
- const nameB = projectPaths[j].split(/[/\\]/).pop() || projectPaths[j];
188
- const idA = entityId('system', slugify(nameA));
189
- const idB = entityId('system', slugify(nameB));
190
- if (graph.getEntity(idA) && graph.getEntity(idB)) {
191
- link(idA, idB, 'depends_on');
192
- }
193
- }
194
- }
195
- }
196
-
197
- return NextResponse.json({
198
- created,
199
- edges,
200
- total: graph.listEntities({}).length,
201
- });
202
- });
203
- }
1
+ import { NextResponse } from 'next/server';
2
+ import type { NextRequest } from 'next/server';
3
+ import { getAuthUser, withUser } from '@/lib/auth';
4
+ import { getCortex, isCortexAvailable } from '@/lib/cortex';
5
+ import { getDb } from '@/lib/db/schema';
6
+ import { entityId, slugify } from '@/lib/cortex/graph/types';
7
+ import type { EdgeRelation, EntityType } from '@/lib/cortex/graph/types';
8
+
9
+ export async function POST(request: NextRequest) {
10
+ const user = getAuthUser(request);
11
+ return withUser(user, async () => {
12
+ if (!isCortexAvailable()) {
13
+ return NextResponse.json({ error: 'Cortex unavailable' }, { status: 403 });
14
+ }
15
+ const cortex = await getCortex();
16
+ if (!cortex?.graph) {
17
+ return NextResponse.json({ error: 'Cortex disabled' }, { status: 503 });
18
+ }
19
+
20
+ const graph = cortex.graph;
21
+ const db = getDb();
22
+ let created = 0;
23
+ let edges = 0;
24
+
25
+ const ensure = (id: string, type: EntityType, name: string, metadata?: Record<string, unknown>) => {
26
+ if (!graph.getEntity(id)) {
27
+ graph.createEntity({ id, type, name, metadata });
28
+ created++;
29
+ }
30
+ };
31
+
32
+ const link = (source: string, target: string, relation: EdgeRelation, weight?: number) => {
33
+ try {
34
+ graph.createEdge({ source_id: source, target_id: target, relation, weight });
35
+ edges++;
36
+ } catch { /* dupe */ }
37
+ };
38
+
39
+ // ── 1. Current user ──────────────────────────────────────
40
+ const personId = entityId('person', slugify(user));
41
+ ensure(personId, 'person', user);
42
+
43
+ // ── 2. Workspaces ────────────────────────────────────────
44
+ const workspaces = db.prepare('SELECT id, name, color FROM workspaces').all() as { id: number; name: string; color: string }[];
45
+ const wsIdMap = new Map<number, string>();
46
+ for (const ws of workspaces) {
47
+ const id = entityId('project', slugify(ws.name));
48
+ ensure(id, 'project', ws.name, { workspaceId: ws.id, color: ws.color });
49
+ link(personId, id, 'owns');
50
+ wsIdMap.set(ws.id, id);
51
+ }
52
+
53
+ // ── 3. Dev projects (from session project_path) ──────────
54
+ const projects = db.prepare(`
55
+ SELECT p.id, p.name, p.path, p.agent_type as agentType,
56
+ COUNT(s.id) as sessionCount
57
+ FROM projects p
58
+ LEFT JOIN sessions s ON s.project_id = p.id
59
+ GROUP BY p.id
60
+ `).all() as { id: string; name: string; path: string; agentType: string; sessionCount: number }[];
61
+
62
+ const projIdMap = new Map<string, string>();
63
+ for (const p of projects) {
64
+ const id = entityId('system', slugify(p.name));
65
+ ensure(id, 'system', p.name, { path: p.path, agentType: p.agentType, sessions: p.sessionCount });
66
+ link(personId, id, 'works_on');
67
+ projIdMap.set(p.id, id);
68
+ }
69
+
70
+ // ── 4. Git branches as modules ──────────────────────────
71
+ const branches = db.prepare(`
72
+ SELECT DISTINCT git_branch, project_path
73
+ FROM sessions
74
+ WHERE git_branch IS NOT NULL AND git_branch != '' AND git_branch != 'main' AND git_branch != 'master'
75
+ `).all() as { git_branch: string; project_path: string }[];
76
+
77
+ for (const b of branches) {
78
+ const id = entityId('module', slugify(b.git_branch));
79
+ ensure(id, 'module', b.git_branch, { branch: true });
80
+
81
+ // Link branch to its project
82
+ if (b.project_path) {
83
+ const projName = b.project_path.split(/[/\\]/).pop() || b.project_path;
84
+ const projGraphId = entityId('system', slugify(projName));
85
+ link(id, projGraphId, 'part_of');
86
+ }
87
+ }
88
+
89
+ // ── 5. Topics from knowledge tags & session activity ─────
90
+ // Extract topics from session summaries (common patterns)
91
+ const summaries = db.prepare(`
92
+ SELECT COALESCE(custom_name, summary, first_prompt) as text, project_path, agent_type as agentType
93
+ FROM sessions
94
+ WHERE (summary IS NOT NULL AND summary != '') OR (first_prompt IS NOT NULL AND first_prompt != '')
95
+ ORDER BY modified DESC
96
+ LIMIT 200
97
+ `).all() as { text: string; project_path: string; agentType: string }[];
98
+
99
+ // Extract topic keywords from summaries
100
+ const topicCounts = new Map<string, { count: number; projects: Set<string> }>();
101
+ const topicPatterns = /\b(auth|api|database|testing|deploy|ci[/-]cd|refactor|bug\s*fix|migration|security|performance|frontend|backend|ui|ux|docker|kubernetes|graphql|rest|websocket|cache|queue|search|analytics|monitor|log|config|setup|infra)\b/gi;
102
+
103
+ for (const s of summaries) {
104
+ if (!s.text) continue;
105
+ const matches = s.text.match(topicPatterns);
106
+ if (!matches) continue;
107
+ const seen = new Set<string>();
108
+ for (const m of matches) {
109
+ const topic = m.toLowerCase().replace(/\s+/g, '-');
110
+ if (seen.has(topic)) continue;
111
+ seen.add(topic);
112
+ if (!topicCounts.has(topic)) topicCounts.set(topic, { count: 0, projects: new Set() });
113
+ const tc = topicCounts.get(topic)!;
114
+ tc.count++;
115
+ if (s.project_path) {
116
+ const projName = s.project_path.split(/[/\\]/).pop() || s.project_path;
117
+ tc.projects.add(projName);
118
+ }
119
+ }
120
+ }
121
+
122
+ // Only create topics that appear 2+ times
123
+ for (const [topic, data] of topicCounts) {
124
+ if (data.count < 2) continue;
125
+ const id = entityId('topic', topic);
126
+ ensure(id, 'topic', topic, { mentions: data.count });
127
+
128
+ // Link topics to projects
129
+ for (const projName of data.projects) {
130
+ const projGraphId = entityId('system', slugify(projName));
131
+ if (graph.getEntity(projGraphId)) {
132
+ link(projGraphId, id, 'relates_to');
133
+ }
134
+ }
135
+
136
+ // Link user to frequently-used topics
137
+ if (data.count >= 3) {
138
+ link(personId, id, 'expert_in', data.count);
139
+ }
140
+ }
141
+
142
+ // ── 6. Agent types as tools ──────────────────────────────
143
+ const agentTypes = db.prepare(`
144
+ SELECT agent_type, COUNT(*) as cnt
145
+ FROM sessions
146
+ WHERE agent_type IS NOT NULL AND agent_type != ''
147
+ GROUP BY agent_type
148
+ HAVING cnt >= 2
149
+ `).all() as { agent_type: string; cnt: number }[];
150
+
151
+ for (const at of agentTypes) {
152
+ const id = entityId('topic', slugify(`${at.agent_type}-agent`));
153
+ ensure(id, 'topic', `${at.agent_type} agent`, { agentType: at.agent_type, sessions: at.cnt });
154
+ link(personId, id, 'works_on', at.cnt);
155
+ }
156
+
157
+ // ── 7. Cross-link projects to workspaces via sessions ────
158
+ const wsProjectLinks = db.prepare(`
159
+ SELECT DISTINCT ws.workspace_id, s.project_id
160
+ FROM sessions s
161
+ JOIN workspace_sessions ws ON ws.session_id = s.id
162
+ WHERE ws.workspace_id IS NOT NULL AND s.project_id IS NOT NULL
163
+ `).all() as { workspace_id: number; project_id: string }[];
164
+
165
+ for (const wpl of wsProjectLinks) {
166
+ const wsGraphId = wsIdMap.get(wpl.workspace_id);
167
+ const projGraphId = projIdMap.get(wpl.project_id);
168
+ if (wsGraphId && projGraphId) {
169
+ link(wsGraphId, projGraphId, 'contains');
170
+ }
171
+ }
172
+
173
+ // ── 8. Cross-link projects that share branches ───────────
174
+ const sharedBranches = db.prepare(`
175
+ SELECT git_branch, GROUP_CONCAT(DISTINCT project_path) as paths
176
+ FROM sessions
177
+ WHERE git_branch IS NOT NULL AND git_branch != '' AND project_path IS NOT NULL
178
+ GROUP BY git_branch
179
+ HAVING COUNT(DISTINCT project_path) > 1
180
+ `).all() as { git_branch: string; paths: string }[];
181
+
182
+ for (const sb of sharedBranches) {
183
+ const projectPaths = sb.paths.split(',');
184
+ for (let i = 0; i < projectPaths.length; i++) {
185
+ for (let j = i + 1; j < projectPaths.length; j++) {
186
+ const nameA = projectPaths[i].split(/[/\\]/).pop() || projectPaths[i];
187
+ const nameB = projectPaths[j].split(/[/\\]/).pop() || projectPaths[j];
188
+ const idA = entityId('system', slugify(nameA));
189
+ const idB = entityId('system', slugify(nameB));
190
+ if (graph.getEntity(idA) && graph.getEntity(idB)) {
191
+ link(idA, idB, 'depends_on');
192
+ }
193
+ }
194
+ }
195
+ }
196
+
197
+ return NextResponse.json({
198
+ created,
199
+ edges,
200
+ total: graph.listEntities({}).length,
201
+ });
202
+ });
203
+ }