@jlongo78/agent-spaces 0.10.0-beta.2 → 0.10.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (721) 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/server/app/(desktop)/admin/analytics/page_client-reference-manifest.js +1 -1
  4. package/.next/standalone/.next/server/app/(desktop)/admin/users/page_client-reference-manifest.js +1 -1
  5. package/.next/standalone/.next/server/app/(desktop)/analytics/page_client-reference-manifest.js +1 -1
  6. package/.next/standalone/.next/server/app/(desktop)/cortex/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/.next/server/app/(desktop)/network/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/(desktop)/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(desktop)/projects/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/(desktop)/sessions/[id]/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/(desktop)/sessions/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/(desktop)/settings/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/(desktop)/terminal/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/(desktop)/terminal/pane/[id]/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/(desktop)/workspaces/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  18. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  19. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  20. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  21. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  22. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  23. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  24. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  26. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  27. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  28. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  29. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  30. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  31. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  32. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  33. package/.next/standalone/.next/server/app/admin/analytics.html +1 -1
  34. package/.next/standalone/.next/server/app/admin/analytics.rsc +2 -2
  35. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics/__PAGE__.segment.rsc +1 -1
  36. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics.segment.rsc +1 -1
  37. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  38. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  39. package/.next/standalone/.next/server/app/admin/analytics.segments/_full.segment.rsc +2 -2
  40. package/.next/standalone/.next/server/app/admin/analytics.segments/_head.segment.rsc +1 -1
  41. package/.next/standalone/.next/server/app/admin/analytics.segments/_index.segment.rsc +2 -2
  42. package/.next/standalone/.next/server/app/admin/analytics.segments/_tree.segment.rsc +2 -2
  43. package/.next/standalone/.next/server/app/admin/users.html +1 -1
  44. package/.next/standalone/.next/server/app/admin/users.rsc +2 -2
  45. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users/__PAGE__.segment.rsc +1 -1
  46. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users.segment.rsc +1 -1
  47. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  48. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  49. package/.next/standalone/.next/server/app/admin/users.segments/_full.segment.rsc +2 -2
  50. package/.next/standalone/.next/server/app/admin/users.segments/_head.segment.rsc +1 -1
  51. package/.next/standalone/.next/server/app/admin/users.segments/_index.segment.rsc +2 -2
  52. package/.next/standalone/.next/server/app/admin/users.segments/_tree.segment.rsc +2 -2
  53. package/.next/standalone/.next/server/app/analytics.html +1 -1
  54. package/.next/standalone/.next/server/app/analytics.rsc +2 -2
  55. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics/__PAGE__.segment.rsc +1 -1
  56. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics.segment.rsc +1 -1
  57. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  58. package/.next/standalone/.next/server/app/analytics.segments/_full.segment.rsc +2 -2
  59. package/.next/standalone/.next/server/app/analytics.segments/_head.segment.rsc +1 -1
  60. package/.next/standalone/.next/server/app/analytics.segments/_index.segment.rsc +2 -2
  61. package/.next/standalone/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
  62. package/.next/standalone/.next/server/app/api/admin/analytics/route.js +4 -2
  63. package/.next/standalone/.next/server/app/api/admin/analytics/route.js.nft.json +1 -1
  64. package/.next/standalone/.next/server/app/api/admin/users/[id]/route.js +4 -2
  65. package/.next/standalone/.next/server/app/api/admin/users/[id]/route.js.nft.json +1 -1
  66. package/.next/standalone/.next/server/app/api/admin/users/route.js +4 -2
  67. package/.next/standalone/.next/server/app/api/admin/users/route.js.nft.json +1 -1
  68. package/.next/standalone/.next/server/app/api/analytics/overview/route.js +5 -4
  69. package/.next/standalone/.next/server/app/api/analytics/overview/route.js.nft.json +1 -1
  70. package/.next/standalone/.next/server/app/api/auth/login/route.js +3 -2
  71. package/.next/standalone/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  72. package/.next/standalone/.next/server/app/api/auth/logout/route.js +2 -2
  73. package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  74. package/.next/standalone/.next/server/app/api/auth/me/route.js +3 -2
  75. package/.next/standalone/.next/server/app/api/auth/me/route.js.nft.json +1 -1
  76. package/.next/standalone/.next/server/app/api/auth/totp/setup/route.js +2 -2
  77. package/.next/standalone/.next/server/app/api/auth/totp/setup/route.js.nft.json +1 -1
  78. package/.next/standalone/.next/server/app/api/auth/totp/status/route.js +2 -2
  79. package/.next/standalone/.next/server/app/api/auth/totp/status/route.js.nft.json +1 -1
  80. package/.next/standalone/.next/server/app/api/auth/totp/verify/route.js +3 -2
  81. package/.next/standalone/.next/server/app/api/auth/totp/verify/route.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js +4 -3
  83. package/.next/standalone/.next/server/app/api/benchmark/lobes/route.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/app/api/benchmark/run/route.js +4 -3
  85. package/.next/standalone/.next/server/app/api/benchmark/run/route.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js +4 -3
  87. package/.next/standalone/.next/server/app/api/benchmark/runs/[id]/route.js.nft.json +1 -1
  88. package/.next/standalone/.next/server/app/api/benchmark/runs/route.js +4 -3
  89. package/.next/standalone/.next/server/app/api/benchmark/runs/route.js.nft.json +1 -1
  90. package/.next/standalone/.next/server/app/api/benchmark/status/route.js +4 -3
  91. package/.next/standalone/.next/server/app/api/benchmark/status/route.js.nft.json +1 -1
  92. package/.next/standalone/.next/server/app/api/bulk/route.js +5 -4
  93. package/.next/standalone/.next/server/app/api/bulk/route.js.nft.json +1 -1
  94. package/.next/standalone/.next/server/app/api/chat/route.js +4 -2
  95. package/.next/standalone/.next/server/app/api/chat/route.js.nft.json +1 -1
  96. package/.next/standalone/.next/server/app/api/claude/usage/route.js +5 -4
  97. package/.next/standalone/.next/server/app/api/claude/usage/route.js.nft.json +1 -1
  98. package/.next/standalone/.next/server/app/api/config/route.js +3 -3
  99. package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -1
  100. package/.next/standalone/.next/server/app/api/cortex/context/route.js +4 -3
  101. package/.next/standalone/.next/server/app/api/cortex/context/route.js.nft.json +1 -1
  102. package/.next/standalone/.next/server/app/api/cortex/curation/assess/route.js +4 -3
  103. package/.next/standalone/.next/server/app/api/cortex/curation/assess/route.js.nft.json +1 -1
  104. package/.next/standalone/.next/server/app/api/cortex/curation/publish/route.js +4 -3
  105. package/.next/standalone/.next/server/app/api/cortex/curation/publish/route.js.nft.json +1 -1
  106. package/.next/standalone/.next/server/app/api/cortex/curation/refine/route.js +4 -3
  107. package/.next/standalone/.next/server/app/api/cortex/curation/refine/route.js.nft.json +1 -1
  108. package/.next/standalone/.next/server/app/api/cortex/curation/review/route.js +4 -3
  109. package/.next/standalone/.next/server/app/api/cortex/curation/review/route.js.nft.json +1 -1
  110. package/.next/standalone/.next/server/app/api/cortex/curation/seed/route.js +4 -3
  111. package/.next/standalone/.next/server/app/api/cortex/curation/seed/route.js.nft.json +1 -1
  112. package/.next/standalone/.next/server/app/api/cortex/export/route.js +4 -3
  113. package/.next/standalone/.next/server/app/api/cortex/export/route.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/app/api/cortex/federation/pending/route.js +4 -3
  115. package/.next/standalone/.next/server/app/api/cortex/federation/pending/route.js.nft.json +1 -1
  116. package/.next/standalone/.next/server/app/api/cortex/federation/resolve/route.js +4 -3
  117. package/.next/standalone/.next/server/app/api/cortex/federation/resolve/route.js.nft.json +1 -1
  118. package/.next/standalone/.next/server/app/api/cortex/federation/search/route.js +4 -3
  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 +4 -3
  121. package/.next/standalone/.next/server/app/api/cortex/federation/teach/route.js.nft.json +1 -1
  122. package/.next/standalone/.next/server/app/api/cortex/graph/edges/route.js +4 -3
  123. package/.next/standalone/.next/server/app/api/cortex/graph/edges/route.js.nft.json +1 -1
  124. package/.next/standalone/.next/server/app/api/cortex/graph/entities/[id]/route.js +4 -3
  125. package/.next/standalone/.next/server/app/api/cortex/graph/entities/[id]/route.js.nft.json +1 -1
  126. package/.next/standalone/.next/server/app/api/cortex/graph/entities/route.js +4 -3
  127. package/.next/standalone/.next/server/app/api/cortex/graph/entities/route.js.nft.json +1 -1
  128. package/.next/standalone/.next/server/app/api/cortex/graph/populate/route.js +4 -3
  129. package/.next/standalone/.next/server/app/api/cortex/graph/populate/route.js.nft.json +1 -1
  130. package/.next/standalone/.next/server/app/api/cortex/import/route.js +4 -3
  131. package/.next/standalone/.next/server/app/api/cortex/import/route.js.nft.json +1 -1
  132. package/.next/standalone/.next/server/app/api/cortex/import/status/route.js +4 -3
  133. package/.next/standalone/.next/server/app/api/cortex/import/status/route.js.nft.json +1 -1
  134. package/.next/standalone/.next/server/app/api/cortex/ingest/bootstrap/route.js +4 -3
  135. package/.next/standalone/.next/server/app/api/cortex/ingest/bootstrap/route.js.nft.json +1 -1
  136. package/.next/standalone/.next/server/app/api/cortex/ingest/status/route.js +4 -3
  137. package/.next/standalone/.next/server/app/api/cortex/ingest/status/route.js.nft.json +1 -1
  138. package/.next/standalone/.next/server/app/api/cortex/knowledge/[id]/route.js +4 -3
  139. package/.next/standalone/.next/server/app/api/cortex/knowledge/[id]/route.js.nft.json +1 -1
  140. package/.next/standalone/.next/server/app/api/cortex/knowledge/route.js +4 -3
  141. package/.next/standalone/.next/server/app/api/cortex/knowledge/route.js.nft.json +1 -1
  142. package/.next/standalone/.next/server/app/api/cortex/lobes/[id]/route.js +4 -3
  143. package/.next/standalone/.next/server/app/api/cortex/lobes/[id]/route.js.nft.json +1 -1
  144. package/.next/standalone/.next/server/app/api/cortex/lobes/route.js +4 -3
  145. package/.next/standalone/.next/server/app/api/cortex/lobes/route.js.nft.json +1 -1
  146. package/.next/standalone/.next/server/app/api/cortex/lobes/share/route.js +4 -3
  147. package/.next/standalone/.next/server/app/api/cortex/lobes/share/route.js.nft.json +1 -1
  148. package/.next/standalone/.next/server/app/api/cortex/marketplace/browse/route.js +3 -3
  149. package/.next/standalone/.next/server/app/api/cortex/marketplace/browse/route.js.nft.json +1 -1
  150. package/.next/standalone/.next/server/app/api/cortex/marketplace/preview/route.js +3 -3
  151. package/.next/standalone/.next/server/app/api/cortex/marketplace/preview/route.js.nft.json +1 -1
  152. package/.next/standalone/.next/server/app/api/cortex/mcp/call/route.js +4 -3
  153. package/.next/standalone/.next/server/app/api/cortex/mcp/call/route.js.nft.json +1 -1
  154. package/.next/standalone/.next/server/app/api/cortex/mcp/tools/route.js +4 -3
  155. package/.next/standalone/.next/server/app/api/cortex/mcp/tools/route.js.nft.json +1 -1
  156. package/.next/standalone/.next/server/app/api/cortex/search/route.js +4 -3
  157. package/.next/standalone/.next/server/app/api/cortex/search/route.js.nft.json +1 -1
  158. package/.next/standalone/.next/server/app/api/cortex/settings/route.js +4 -3
  159. package/.next/standalone/.next/server/app/api/cortex/settings/route.js.nft.json +1 -1
  160. package/.next/standalone/.next/server/app/api/cortex/status/route.js +4 -3
  161. package/.next/standalone/.next/server/app/api/cortex/status/route.js.nft.json +1 -1
  162. package/.next/standalone/.next/server/app/api/cortex/timeline/route.js +4 -3
  163. package/.next/standalone/.next/server/app/api/cortex/timeline/route.js.nft.json +1 -1
  164. package/.next/standalone/.next/server/app/api/cortex/usage/route.js +4 -3
  165. package/.next/standalone/.next/server/app/api/cortex/usage/route.js.nft.json +1 -1
  166. package/.next/standalone/.next/server/app/api/cortex/workspace/[id]/context/route.js +4 -3
  167. package/.next/standalone/.next/server/app/api/cortex/workspace/[id]/context/route.js.nft.json +1 -1
  168. package/.next/standalone/.next/server/app/api/events/route.js +5 -3
  169. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  170. package/.next/standalone/.next/server/app/api/files/route.js +3 -2
  171. package/.next/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  172. package/.next/standalone/.next/server/app/api/folders/route.js +3 -3
  173. package/.next/standalone/.next/server/app/api/folders/route.js.nft.json +1 -1
  174. package/.next/standalone/.next/server/app/api/network/connect-callback/route.js +2 -2
  175. package/.next/standalone/.next/server/app/api/network/connect-callback/route.js.nft.json +1 -1
  176. package/.next/standalone/.next/server/app/api/network/connect-request/[id]/route.js +2 -2
  177. package/.next/standalone/.next/server/app/api/network/connect-request/[id]/route.js.nft.json +1 -1
  178. package/.next/standalone/.next/server/app/api/network/connect-request/route.js +2 -2
  179. package/.next/standalone/.next/server/app/api/network/connect-request/route.js.nft.json +1 -1
  180. package/.next/standalone/.next/server/app/api/network/discovered/route.js +2 -2
  181. package/.next/standalone/.next/server/app/api/network/discovered/route.js.nft.json +1 -1
  182. package/.next/standalone/.next/server/app/api/network/handshake/route.js +4 -3
  183. package/.next/standalone/.next/server/app/api/network/handshake/route.js.nft.json +1 -1
  184. package/.next/standalone/.next/server/app/api/network/health/route.js +2 -2
  185. package/.next/standalone/.next/server/app/api/network/health/route.js.nft.json +1 -1
  186. package/.next/standalone/.next/server/app/api/network/identity/route.js +2 -2
  187. package/.next/standalone/.next/server/app/api/network/identity/route.js.nft.json +1 -1
  188. package/.next/standalone/.next/server/app/api/network/keys/[id]/route.js +2 -2
  189. package/.next/standalone/.next/server/app/api/network/keys/[id]/route.js.nft.json +1 -1
  190. package/.next/standalone/.next/server/app/api/network/keys/route.js +2 -2
  191. package/.next/standalone/.next/server/app/api/network/keys/route.js.nft.json +1 -1
  192. package/.next/standalone/.next/server/app/api/network/nodes/[id]/route.js +2 -2
  193. package/.next/standalone/.next/server/app/api/network/nodes/[id]/route.js.nft.json +1 -1
  194. package/.next/standalone/.next/server/app/api/network/nodes/check/route.js +2 -2
  195. package/.next/standalone/.next/server/app/api/network/nodes/check/route.js.nft.json +1 -1
  196. package/.next/standalone/.next/server/app/api/network/nodes/route.js +2 -2
  197. package/.next/standalone/.next/server/app/api/network/nodes/route.js.nft.json +1 -1
  198. package/.next/standalone/.next/server/app/api/network/panes/[id]/route.js +6 -5
  199. package/.next/standalone/.next/server/app/api/network/panes/[id]/route.js.nft.json +1 -1
  200. package/.next/standalone/.next/server/app/api/network/panes/route.js +6 -5
  201. package/.next/standalone/.next/server/app/api/network/panes/route.js.nft.json +1 -1
  202. package/.next/standalone/.next/server/app/api/network/projects/route.js +6 -5
  203. package/.next/standalone/.next/server/app/api/network/projects/route.js.nft.json +1 -1
  204. package/.next/standalone/.next/server/app/api/network/proxy/[nodeId]/[...path]/route.js +2 -2
  205. package/.next/standalone/.next/server/app/api/network/proxy/[nodeId]/[...path]/route.js.nft.json +1 -1
  206. package/.next/standalone/.next/server/app/api/network/search/route.js +6 -5
  207. package/.next/standalone/.next/server/app/api/network/search/route.js.nft.json +1 -1
  208. package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js +6 -5
  209. package/.next/standalone/.next/server/app/api/network/sessions/[id]/messages/route.js.nft.json +1 -1
  210. package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js +6 -5
  211. package/.next/standalone/.next/server/app/api/network/sessions/[id]/route.js.nft.json +1 -1
  212. package/.next/standalone/.next/server/app/api/network/sessions/route.js +6 -5
  213. package/.next/standalone/.next/server/app/api/network/sessions/route.js.nft.json +1 -1
  214. package/.next/standalone/.next/server/app/api/network/terminal/token/route.js +2 -2
  215. package/.next/standalone/.next/server/app/api/network/terminal/token/route.js.nft.json +1 -1
  216. package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js +6 -5
  217. package/.next/standalone/.next/server/app/api/network/workspaces/[id]/route.js.nft.json +1 -1
  218. package/.next/standalone/.next/server/app/api/network/workspaces/route.js +6 -5
  219. package/.next/standalone/.next/server/app/api/network/workspaces/route.js.nft.json +1 -1
  220. package/.next/standalone/.next/server/app/api/panes/[id]/diff/route.js +5 -4
  221. package/.next/standalone/.next/server/app/api/panes/[id]/diff/route.js.nft.json +1 -1
  222. package/.next/standalone/.next/server/app/api/panes/[id]/route.js +5 -4
  223. package/.next/standalone/.next/server/app/api/panes/[id]/route.js.nft.json +1 -1
  224. package/.next/standalone/.next/server/app/api/panes/route.js +5 -4
  225. package/.next/standalone/.next/server/app/api/panes/route.js.nft.json +1 -1
  226. package/.next/standalone/.next/server/app/api/projects/route.js +5 -4
  227. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  228. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/[...path]/route.js +3 -3
  229. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/[...path]/route.js.nft.json +1 -1
  230. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/status/route.js +3 -3
  231. package/.next/standalone/.next/server/app/api/proxy/models/[modelId]/status/route.js.nft.json +1 -1
  232. package/.next/standalone/.next/server/app/api/search/route.js +6 -5
  233. package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  234. package/.next/standalone/.next/server/app/api/server-config/route.js +2 -2
  235. package/.next/standalone/.next/server/app/api/server-config/route.js.nft.json +1 -1
  236. package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js +5 -3
  237. package/.next/standalone/.next/server/app/api/sessions/[id]/chat/route.js.nft.json +1 -1
  238. package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js +5 -4
  239. package/.next/standalone/.next/server/app/api/sessions/[id]/messages/route.js.nft.json +1 -1
  240. package/.next/standalone/.next/server/app/api/sessions/[id]/route.js +5 -4
  241. package/.next/standalone/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  242. package/.next/standalone/.next/server/app/api/sessions/route.js +6 -5
  243. package/.next/standalone/.next/server/app/api/sessions/route.js.nft.json +1 -1
  244. package/.next/standalone/.next/server/app/api/sync/route.js +4 -3
  245. package/.next/standalone/.next/server/app/api/sync/route.js.nft.json +1 -1
  246. package/.next/standalone/.next/server/app/api/tags/route.js +5 -4
  247. package/.next/standalone/.next/server/app/api/tags/route.js.nft.json +1 -1
  248. package/.next/standalone/.next/server/app/api/tier/route.js +4 -3
  249. package/.next/standalone/.next/server/app/api/tier/route.js.nft.json +1 -1
  250. package/.next/standalone/.next/server/app/api/updates/route.js +2 -2
  251. package/.next/standalone/.next/server/app/api/updates/route.js.nft.json +1 -1
  252. package/.next/standalone/.next/server/app/api/whisper/config/route.js +2 -2
  253. package/.next/standalone/.next/server/app/api/whisper/config/route.js.nft.json +1 -1
  254. package/.next/standalone/.next/server/app/api/whisper/route.js +2 -2
  255. package/.next/standalone/.next/server/app/api/whisper/route.js.nft.json +1 -1
  256. package/.next/standalone/.next/server/app/api/wizard/chat/route.js +3 -3
  257. package/.next/standalone/.next/server/app/api/wizard/chat/route.js.nft.json +1 -1
  258. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js +5 -3
  259. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/[key]/route.js.nft.json +1 -1
  260. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js +5 -3
  261. package/.next/standalone/.next/server/app/api/workspaces/[id]/context/route.js.nft.json +1 -1
  262. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js +5 -3
  263. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/[msgId]/route.js.nft.json +1 -1
  264. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js +5 -3
  265. package/.next/standalone/.next/server/app/api/workspaces/[id]/messages/route.js.nft.json +1 -1
  266. package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js +5 -4
  267. package/.next/standalone/.next/server/app/api/workspaces/[id]/route.js.nft.json +1 -1
  268. package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js +5 -4
  269. package/.next/standalone/.next/server/app/api/workspaces/[id]/sessions/route.js.nft.json +1 -1
  270. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route.js +5 -4
  271. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route.js.nft.json +1 -1
  272. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route.js +5 -4
  273. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route.js.nft.json +1 -1
  274. package/.next/standalone/.next/server/app/api/workspaces/route.js +6 -5
  275. package/.next/standalone/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  276. package/.next/standalone/.next/server/app/cortex.html +1 -1
  277. package/.next/standalone/.next/server/app/cortex.rsc +2 -2
  278. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex/__PAGE__.segment.rsc +1 -1
  279. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex.segment.rsc +1 -1
  280. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  281. package/.next/standalone/.next/server/app/cortex.segments/_full.segment.rsc +2 -2
  282. package/.next/standalone/.next/server/app/cortex.segments/_head.segment.rsc +1 -1
  283. package/.next/standalone/.next/server/app/cortex.segments/_index.segment.rsc +2 -2
  284. package/.next/standalone/.next/server/app/cortex.segments/_tree.segment.rsc +2 -2
  285. package/.next/standalone/.next/server/app/icon.png/route.js +2 -2
  286. package/.next/standalone/.next/server/app/icon.png/route.js.nft.json +1 -1
  287. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  288. package/.next/standalone/.next/server/app/login.html +1 -1
  289. package/.next/standalone/.next/server/app/login.rsc +2 -2
  290. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +2 -2
  291. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
  292. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +2 -2
  293. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  294. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  295. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
  296. package/.next/standalone/.next/server/app/m/page_client-reference-manifest.js +1 -1
  297. package/.next/standalone/.next/server/app/m/projects/page_client-reference-manifest.js +1 -1
  298. package/.next/standalone/.next/server/app/m/projects.html +1 -1
  299. package/.next/standalone/.next/server/app/m/projects.rsc +2 -2
  300. package/.next/standalone/.next/server/app/m/projects.segments/_full.segment.rsc +2 -2
  301. package/.next/standalone/.next/server/app/m/projects.segments/_head.segment.rsc +1 -1
  302. package/.next/standalone/.next/server/app/m/projects.segments/_index.segment.rsc +2 -2
  303. package/.next/standalone/.next/server/app/m/projects.segments/_tree.segment.rsc +2 -2
  304. package/.next/standalone/.next/server/app/m/projects.segments/m/projects/__PAGE__.segment.rsc +1 -1
  305. package/.next/standalone/.next/server/app/m/projects.segments/m/projects.segment.rsc +1 -1
  306. package/.next/standalone/.next/server/app/m/projects.segments/m.segment.rsc +1 -1
  307. package/.next/standalone/.next/server/app/m/sessions/[id]/page_client-reference-manifest.js +1 -1
  308. package/.next/standalone/.next/server/app/m/sessions/page_client-reference-manifest.js +1 -1
  309. package/.next/standalone/.next/server/app/m/sessions.html +1 -1
  310. package/.next/standalone/.next/server/app/m/sessions.rsc +2 -2
  311. package/.next/standalone/.next/server/app/m/sessions.segments/_full.segment.rsc +2 -2
  312. package/.next/standalone/.next/server/app/m/sessions.segments/_head.segment.rsc +1 -1
  313. package/.next/standalone/.next/server/app/m/sessions.segments/_index.segment.rsc +2 -2
  314. package/.next/standalone/.next/server/app/m/sessions.segments/_tree.segment.rsc +2 -2
  315. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions/__PAGE__.segment.rsc +1 -1
  316. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions.segment.rsc +1 -1
  317. package/.next/standalone/.next/server/app/m/sessions.segments/m.segment.rsc +1 -1
  318. package/.next/standalone/.next/server/app/m/settings/page_client-reference-manifest.js +1 -1
  319. package/.next/standalone/.next/server/app/m/settings.html +1 -1
  320. package/.next/standalone/.next/server/app/m/settings.rsc +2 -2
  321. package/.next/standalone/.next/server/app/m/settings.segments/_full.segment.rsc +2 -2
  322. package/.next/standalone/.next/server/app/m/settings.segments/_head.segment.rsc +1 -1
  323. package/.next/standalone/.next/server/app/m/settings.segments/_index.segment.rsc +2 -2
  324. package/.next/standalone/.next/server/app/m/settings.segments/_tree.segment.rsc +2 -2
  325. package/.next/standalone/.next/server/app/m/settings.segments/m/settings/__PAGE__.segment.rsc +1 -1
  326. package/.next/standalone/.next/server/app/m/settings.segments/m/settings.segment.rsc +1 -1
  327. package/.next/standalone/.next/server/app/m/settings.segments/m.segment.rsc +1 -1
  328. package/.next/standalone/.next/server/app/m/terminal/page_client-reference-manifest.js +1 -1
  329. package/.next/standalone/.next/server/app/m/terminal.html +1 -1
  330. package/.next/standalone/.next/server/app/m/terminal.rsc +2 -2
  331. package/.next/standalone/.next/server/app/m/terminal.segments/_full.segment.rsc +2 -2
  332. package/.next/standalone/.next/server/app/m/terminal.segments/_head.segment.rsc +1 -1
  333. package/.next/standalone/.next/server/app/m/terminal.segments/_index.segment.rsc +2 -2
  334. package/.next/standalone/.next/server/app/m/terminal.segments/_tree.segment.rsc +2 -2
  335. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal/__PAGE__.segment.rsc +1 -1
  336. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal.segment.rsc +1 -1
  337. package/.next/standalone/.next/server/app/m/terminal.segments/m.segment.rsc +1 -1
  338. package/.next/standalone/.next/server/app/m.html +1 -1
  339. package/.next/standalone/.next/server/app/m.rsc +2 -2
  340. package/.next/standalone/.next/server/app/m.segments/_full.segment.rsc +2 -2
  341. package/.next/standalone/.next/server/app/m.segments/_head.segment.rsc +1 -1
  342. package/.next/standalone/.next/server/app/m.segments/_index.segment.rsc +2 -2
  343. package/.next/standalone/.next/server/app/m.segments/_tree.segment.rsc +2 -2
  344. package/.next/standalone/.next/server/app/m.segments/m/__PAGE__.segment.rsc +1 -1
  345. package/.next/standalone/.next/server/app/m.segments/m.segment.rsc +1 -1
  346. package/.next/standalone/.next/server/app/network.html +1 -1
  347. package/.next/standalone/.next/server/app/network.rsc +2 -2
  348. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network/__PAGE__.segment.rsc +1 -1
  349. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network.segment.rsc +1 -1
  350. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  351. package/.next/standalone/.next/server/app/network.segments/_full.segment.rsc +2 -2
  352. package/.next/standalone/.next/server/app/network.segments/_head.segment.rsc +1 -1
  353. package/.next/standalone/.next/server/app/network.segments/_index.segment.rsc +2 -2
  354. package/.next/standalone/.next/server/app/network.segments/_tree.segment.rsc +2 -2
  355. package/.next/standalone/.next/server/app/projects.html +1 -1
  356. package/.next/standalone/.next/server/app/projects.rsc +2 -2
  357. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects/__PAGE__.segment.rsc +1 -1
  358. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects.segment.rsc +1 -1
  359. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  360. package/.next/standalone/.next/server/app/projects.segments/_full.segment.rsc +2 -2
  361. package/.next/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  362. package/.next/standalone/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  363. package/.next/standalone/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  364. package/.next/standalone/.next/server/app/sessions.html +1 -1
  365. package/.next/standalone/.next/server/app/sessions.rsc +2 -2
  366. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions/__PAGE__.segment.rsc +1 -1
  367. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions.segment.rsc +1 -1
  368. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  369. package/.next/standalone/.next/server/app/sessions.segments/_full.segment.rsc +2 -2
  370. package/.next/standalone/.next/server/app/sessions.segments/_head.segment.rsc +1 -1
  371. package/.next/standalone/.next/server/app/sessions.segments/_index.segment.rsc +2 -2
  372. package/.next/standalone/.next/server/app/sessions.segments/_tree.segment.rsc +2 -2
  373. package/.next/standalone/.next/server/app/settings.html +1 -1
  374. package/.next/standalone/.next/server/app/settings.rsc +2 -2
  375. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings/__PAGE__.segment.rsc +1 -1
  376. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings.segment.rsc +1 -1
  377. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  378. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  379. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  380. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  381. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  382. package/.next/standalone/.next/server/app/terminal.html +1 -1
  383. package/.next/standalone/.next/server/app/terminal.rsc +3 -3
  384. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal/__PAGE__.segment.rsc +2 -2
  385. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal.segment.rsc +1 -1
  386. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  387. package/.next/standalone/.next/server/app/terminal.segments/_full.segment.rsc +3 -3
  388. package/.next/standalone/.next/server/app/terminal.segments/_head.segment.rsc +1 -1
  389. package/.next/standalone/.next/server/app/terminal.segments/_index.segment.rsc +2 -2
  390. package/.next/standalone/.next/server/app/terminal.segments/_tree.segment.rsc +2 -2
  391. package/.next/standalone/.next/server/app/vr/page_client-reference-manifest.js +1 -1
  392. package/.next/standalone/.next/server/app/vr.html +1 -1
  393. package/.next/standalone/.next/server/app/vr.rsc +2 -2
  394. package/.next/standalone/.next/server/app/vr.segments/_full.segment.rsc +2 -2
  395. package/.next/standalone/.next/server/app/vr.segments/_head.segment.rsc +1 -1
  396. package/.next/standalone/.next/server/app/vr.segments/_index.segment.rsc +2 -2
  397. package/.next/standalone/.next/server/app/vr.segments/_tree.segment.rsc +2 -2
  398. package/.next/standalone/.next/server/app/vr.segments/vr/__PAGE__.segment.rsc +1 -1
  399. package/.next/standalone/.next/server/app/vr.segments/vr.segment.rsc +1 -1
  400. package/.next/standalone/.next/server/app/workspaces.html +1 -1
  401. package/.next/standalone/.next/server/app/workspaces.rsc +2 -2
  402. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces/__PAGE__.segment.rsc +1 -1
  403. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces.segment.rsc +1 -1
  404. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  405. package/.next/standalone/.next/server/app/workspaces.segments/_full.segment.rsc +2 -2
  406. package/.next/standalone/.next/server/app/workspaces.segments/_head.segment.rsc +1 -1
  407. package/.next/standalone/.next/server/app/workspaces.segments/_index.segment.rsc +2 -2
  408. package/.next/standalone/.next/server/app/workspaces.segments/_tree.segment.rsc +2 -2
  409. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cf5ebdb._.js +3 -0
  410. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0f15af1e._.js +78 -0
  411. package/.next/standalone/.next/server/chunks/[root-of-the-server]__107eab8a._.js +3 -0
  412. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1094360c._.js +1 -1
  413. package/.next/standalone/.next/server/chunks/[root-of-the-server]__118ea5e0._.js +42 -0
  414. package/.next/standalone/.next/server/chunks/[root-of-the-server]__160e7c73._.js +5 -5
  415. package/.next/standalone/.next/server/chunks/[root-of-the-server]__16d4da21._.js +3 -0
  416. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1c542684._.js +3 -0
  417. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1f23bae4._.js +3 -0
  418. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1faefa3e._.js +19 -0
  419. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2145098e._.js +42 -0
  420. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2748c76c._.js +42 -0
  421. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2c08d908._.js +3 -0
  422. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2e29b4bd._.js +3 -0
  423. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__e3ecfd17._.js → [root-of-the-server]__34fd47d2._.js} +3 -3
  424. package/.next/standalone/.next/server/chunks/[root-of-the-server]__366b6cec._.js +78 -0
  425. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4d51508f._.js +3 -0
  426. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5663673e._.js +3 -0
  427. package/.next/standalone/.next/server/chunks/[root-of-the-server]__57e0cc31._.js +133 -0
  428. package/.next/standalone/.next/server/chunks/[root-of-the-server]__57ebbe63._.js +42 -0
  429. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5d3345e4._.js +3 -0
  430. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5ee7aa9d._.js +11 -0
  431. package/.next/standalone/.next/server/chunks/[root-of-the-server]__60caf825._.js +3 -0
  432. package/.next/standalone/.next/server/chunks/[root-of-the-server]__65c9857f._.js +3 -0
  433. package/.next/standalone/.next/server/chunks/[root-of-the-server]__678f6823._.js +3 -0
  434. package/.next/standalone/.next/server/chunks/[root-of-the-server]__685c95d8._.js +3 -0
  435. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__41d4d426._.js → [root-of-the-server]__69568dc2._.js} +1 -1
  436. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6a0bc4ae._.js +3 -0
  437. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6b876561._.js +3 -0
  438. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6e89713c._.js +42 -0
  439. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6f713737._.js +3 -0
  440. package/.next/standalone/.next/server/chunks/[root-of-the-server]__725f10f4._.js +78 -0
  441. package/.next/standalone/.next/server/chunks/[root-of-the-server]__785b0597._.js +38 -0
  442. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7c728bed._.js +3 -0
  443. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7da958b5._.js +42 -0
  444. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7daed406._.js +3 -0
  445. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7f140e4b._.js +78 -0
  446. package/.next/standalone/.next/server/chunks/[root-of-the-server]__80d826f7._.js +3 -0
  447. package/.next/standalone/.next/server/chunks/[root-of-the-server]__83a3c97b._.js +3 -0
  448. package/.next/standalone/.next/server/chunks/[root-of-the-server]__84c15a0e._.js +3 -0
  449. package/.next/standalone/.next/server/chunks/[root-of-the-server]__85c33341._.js +42 -0
  450. package/.next/standalone/.next/server/chunks/[root-of-the-server]__88f3d920._.js +78 -0
  451. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8c916e85._.js +3 -0
  452. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8deb2ae3._.js +3 -0
  453. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8df5a740._.js +3 -0
  454. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8f238bd9._.js +3 -0
  455. package/.next/standalone/.next/server/chunks/[root-of-the-server]__955ab668._.js +3 -0
  456. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9a061e91._.js +42 -0
  457. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a04a87d5._.js +42 -0
  458. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a803051f._.js +42 -0
  459. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ac0a9b09._.js +3 -0
  460. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ac3e37b6._.js +13 -0
  461. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__96685488._.js → [root-of-the-server]__add9e50d._.js} +1 -1
  462. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b57f4274._.js +3 -0
  463. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b84b3426._.js +3 -0
  464. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ba8224a1._.js +42 -0
  465. package/.next/standalone/.next/server/chunks/[root-of-the-server]__bd1c1d0d._.js +42 -0
  466. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c1442c38._.js +42 -0
  467. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c18bdab2._.js +42 -0
  468. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c1efc6a8._.js +3 -0
  469. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c697b87e._.js +3 -0
  470. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c6dc43c6._.js +3 -0
  471. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ccce7f4f._.js +78 -0
  472. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d92f347c._.js +3 -0
  473. package/.next/standalone/.next/server/chunks/[root-of-the-server]__dac9e21e._.js +3 -0
  474. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e3f9ddbc._.js +78 -0
  475. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e66fc05f._.js +3 -0
  476. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e7add82c._.js +3 -0
  477. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fa9a5ec0._.js +42 -0
  478. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ff9f6af0._.js +42 -0
  479. package/.next/standalone/.next/server/chunks/_0142f96b._.js +3 -0
  480. package/.next/standalone/.next/server/chunks/_0ebd30d3._.js +3 -0
  481. package/.next/standalone/.next/server/chunks/_19a59078._.js +3 -0
  482. package/.next/standalone/.next/server/chunks/_1bc02021._.js +11 -0
  483. package/.next/standalone/.next/server/chunks/_1e381a28._.js +3 -0
  484. package/.next/standalone/.next/server/chunks/_2699eda7._.js +3 -0
  485. package/.next/standalone/.next/server/chunks/_2fd02f70._.js +3 -0
  486. package/.next/standalone/.next/server/chunks/_373d522f._.js +3 -0
  487. package/.next/standalone/.next/server/chunks/_43fc1196._.js +3 -0
  488. package/.next/standalone/.next/server/chunks/_48ec4374._.js +3 -0
  489. package/.next/standalone/.next/server/chunks/_563d9ecc._.js +3 -0
  490. package/.next/standalone/.next/server/chunks/_583f9ae2._.js +3 -0
  491. package/.next/standalone/.next/server/chunks/_5a167705._.js +3 -0
  492. package/.next/standalone/.next/server/chunks/_5a8cc3a5._.js +3 -0
  493. package/.next/standalone/.next/server/chunks/_5d894fb4._.js +3 -0
  494. package/.next/standalone/.next/server/chunks/_6bbf8264._.js +3 -0
  495. package/.next/standalone/.next/server/chunks/_6c4bcec1._.js +3 -0
  496. package/.next/standalone/.next/server/chunks/_7a29d111._.js +3 -0
  497. package/.next/standalone/.next/server/chunks/_7d3bab25._.js +3 -0
  498. package/.next/standalone/.next/server/chunks/_7ed4d1a4._.js +3 -0
  499. package/.next/standalone/.next/server/chunks/_8072d20c._.js +3 -0
  500. package/.next/standalone/.next/server/chunks/_81b87c01._.js +3 -0
  501. package/.next/standalone/.next/server/chunks/_881b7b28._.js +3 -0
  502. package/.next/standalone/.next/server/chunks/_902a1d56._.js +3 -0
  503. package/.next/standalone/.next/server/chunks/_96258f1c._.js +3 -0
  504. package/.next/standalone/.next/server/chunks/_96f79f8f._.js +3 -0
  505. package/.next/standalone/.next/server/chunks/_a0379bc2._.js +3 -0
  506. package/.next/standalone/.next/server/chunks/_a0f604e8._.js +3 -0
  507. package/.next/standalone/.next/server/chunks/_a959b121._.js +3 -0
  508. package/.next/standalone/.next/server/chunks/_a975011f._.js +3 -0
  509. package/.next/standalone/.next/server/chunks/_aa956b66._.js +3 -0
  510. package/.next/standalone/.next/server/chunks/_ad7e7d57._.js +3 -0
  511. package/.next/standalone/.next/server/chunks/_aebf2285._.js +3 -0
  512. package/.next/standalone/.next/server/chunks/_b259dda0._.js +36 -0
  513. package/.next/standalone/.next/server/chunks/_b7c60fdc._.js +3 -0
  514. package/.next/standalone/.next/server/chunks/_bd23ddeb._.js +3 -0
  515. package/.next/standalone/.next/server/chunks/_cd02dfbe._.js +3 -0
  516. package/.next/standalone/.next/server/chunks/_d3ecca80._.js +3 -0
  517. package/.next/standalone/.next/server/chunks/_d48dfa43._.js +11 -0
  518. package/.next/standalone/.next/server/chunks/_dba648d6._.js +3 -0
  519. package/.next/standalone/.next/server/chunks/_df42ac6e._.js +3 -0
  520. package/.next/standalone/.next/server/chunks/_dfe0e460._.js +42 -0
  521. package/.next/standalone/.next/server/chunks/_ead2734e._.js +3 -0
  522. package/.next/standalone/.next/server/chunks/_eb4efd0a._.js +3 -0
  523. package/.next/standalone/.next/server/chunks/_eb66a871._.js +3 -0
  524. package/.next/standalone/.next/server/chunks/_ef715efd._.js +3 -0
  525. package/.next/standalone/.next/server/chunks/_f361a656._.js +3 -0
  526. package/.next/standalone/.next/server/chunks/_f54ddbf4._.js +3 -0
  527. package/.next/standalone/.next/server/chunks/_fe2866f2._.js +3 -0
  528. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_4c408326.js +3 -0
  529. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_5603adbc.js +3 -0
  530. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_7180f8ad.js +3 -0
  531. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_b6be66d9.js +3 -0
  532. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_f7054fd7.js +3 -0
  533. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__66aca5d4._.js +1 -1
  534. package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_terminal_page_tsx_de5e8d85._.js +1 -1
  535. package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__90eeddae._.js +1 -1
  536. package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__ca3f649e._.js +1 -1
  537. package/.next/standalone/.next/server/middleware-manifest.json +1 -1
  538. package/.next/standalone/.next/server/pages/404.html +1 -1
  539. package/.next/standalone/.next/server/pages/500.html +2 -2
  540. package/.next/standalone/.next/static/chunks/{732b7502f82e7c37.css → 044decb96250e420.css} +1 -1
  541. package/.next/standalone/.next/static/chunks/{23a9627a951672ed.js → 8b53c673e79b82f1.js} +3 -3
  542. package/.next/standalone/bin/scrub-standalone.js +5 -0
  543. package/.next/standalone/bin/spaces-dev.js +13 -3
  544. package/.next/standalone/bin/spaces.js +25 -4
  545. package/.next/standalone/package-lock.json +2 -2
  546. package/.next/standalone/package.json +3 -2
  547. package/.next/standalone/src/app/(desktop)/terminal/page.tsx +22 -1
  548. package/.next/standalone/src/app/api/network/discovered/route.ts +2 -2
  549. package/.next/standalone/src/app/api/network/nodes/check/route.ts +2 -2
  550. package/.next/standalone/src/app/api/network/nodes/route.ts +2 -2
  551. package/.next/standalone/src/app/api/server-config/route.ts +9 -18
  552. package/.next/standalone/src/lib/admin/api/analytics.ts +1 -8
  553. package/.next/standalone/src/lib/admin/api/users.ts +1 -8
  554. package/.next/standalone/src/lib/admin/api/usersById.ts +1 -8
  555. package/.next/standalone/src/lib/auth/guard.ts +46 -0
  556. package/.next/standalone/src/lib/auth/index.ts +1 -0
  557. package/.next/standalone/src/lib/db/queries.ts +11 -1
  558. package/.next/standalone/src/lib/network/api/discovered.ts +4 -1
  559. package/.next/standalone/src/lib/network/api/identity.ts +6 -0
  560. package/.next/standalone/src/lib/network/api/keys.ts +6 -0
  561. package/.next/standalone/src/lib/network/api/keysById.ts +3 -0
  562. package/.next/standalone/src/lib/network/api/nodes.ts +49 -3
  563. package/.next/standalone/src/lib/network/api/nodesById.ts +5 -0
  564. package/.next/standalone/src/lib/network/api/nodesCheck.ts +4 -1
  565. package/.next/standalone/src/lib/network/api/proxy.ts +5 -0
  566. package/.next/standalone/src/middleware.ts +24 -10
  567. package/.next/standalone/tsconfig.tsbuildinfo +1 -1
  568. package/bin/scrub-standalone.js +5 -0
  569. package/bin/spaces-dev.js +13 -3
  570. package/bin/spaces.js +25 -4
  571. package/package.json +3 -2
  572. package/.next/standalone/.next/server/chunks/[externals]_next_dist_b89b5a39._.js +0 -3
  573. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0153ac12._.js +0 -133
  574. package/.next/standalone/.next/server/chunks/[root-of-the-server]__01a4559c._.js +0 -3
  575. package/.next/standalone/.next/server/chunks/[root-of-the-server]__029ab763._.js +0 -133
  576. package/.next/standalone/.next/server/chunks/[root-of-the-server]__037992dc._.js +0 -141
  577. package/.next/standalone/.next/server/chunks/[root-of-the-server]__06bb204a._.js +0 -133
  578. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fd17dcf._.js +0 -3
  579. package/.next/standalone/.next/server/chunks/[root-of-the-server]__107439ea._.js +0 -133
  580. package/.next/standalone/.next/server/chunks/[root-of-the-server]__12dff461._.js +0 -78
  581. package/.next/standalone/.next/server/chunks/[root-of-the-server]__13eb511a._.js +0 -133
  582. package/.next/standalone/.next/server/chunks/[root-of-the-server]__141c8d34._.js +0 -172
  583. package/.next/standalone/.next/server/chunks/[root-of-the-server]__151efd48._.js +0 -3
  584. package/.next/standalone/.next/server/chunks/[root-of-the-server]__16c141c2._.js +0 -133
  585. package/.next/standalone/.next/server/chunks/[root-of-the-server]__17fee60c._.js +0 -133
  586. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1a525be8._.js +0 -3
  587. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1aea45f5._.js +0 -3
  588. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1cb4ee6b._.js +0 -133
  589. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1e25d3db._.js +0 -133
  590. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1f7566a3._.js +0 -3
  591. package/.next/standalone/.next/server/chunks/[root-of-the-server]__20382bee._.js +0 -133
  592. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2082a624._.js +0 -133
  593. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2091a7ed._.js +0 -42
  594. package/.next/standalone/.next/server/chunks/[root-of-the-server]__24525ae7._.js +0 -133
  595. package/.next/standalone/.next/server/chunks/[root-of-the-server]__284b02fc._.js +0 -42
  596. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2a1a1d0f._.js +0 -42
  597. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2cf17888._.js +0 -42
  598. package/.next/standalone/.next/server/chunks/[root-of-the-server]__323ae5c9._.js +0 -133
  599. package/.next/standalone/.next/server/chunks/[root-of-the-server]__34db98f7._.js +0 -133
  600. package/.next/standalone/.next/server/chunks/[root-of-the-server]__39efba69._.js +0 -3
  601. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3aeedc57._.js +0 -133
  602. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3bbe9d04._.js +0 -78
  603. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3c2324ba._.js +0 -42
  604. package/.next/standalone/.next/server/chunks/[root-of-the-server]__40df3f5d._.js +0 -172
  605. package/.next/standalone/.next/server/chunks/[root-of-the-server]__42a3fe3c._.js +0 -141
  606. package/.next/standalone/.next/server/chunks/[root-of-the-server]__42d5d5be._.js +0 -3
  607. package/.next/standalone/.next/server/chunks/[root-of-the-server]__49821b61._.js +0 -133
  608. package/.next/standalone/.next/server/chunks/[root-of-the-server]__49f58cee._.js +0 -133
  609. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4b9c38dc._.js +0 -141
  610. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4c0ee9c7._.js +0 -133
  611. package/.next/standalone/.next/server/chunks/[root-of-the-server]__530862c6._.js +0 -3
  612. package/.next/standalone/.next/server/chunks/[root-of-the-server]__55504160._.js +0 -133
  613. package/.next/standalone/.next/server/chunks/[root-of-the-server]__599f26fe._.js +0 -42
  614. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5efa69f5._.js +0 -3
  615. package/.next/standalone/.next/server/chunks/[root-of-the-server]__60483ece._.js +0 -3
  616. package/.next/standalone/.next/server/chunks/[root-of-the-server]__61135659._.js +0 -133
  617. package/.next/standalone/.next/server/chunks/[root-of-the-server]__66331034._.js +0 -133
  618. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6887294d._.js +0 -3
  619. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6b9396b4._.js +0 -133
  620. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6cfd7062._.js +0 -166
  621. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6e8d89e2._.js +0 -149
  622. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6f5b3cfe._.js +0 -133
  623. package/.next/standalone/.next/server/chunks/[root-of-the-server]__71d5b087._.js +0 -133
  624. package/.next/standalone/.next/server/chunks/[root-of-the-server]__76434a8e._.js +0 -78
  625. package/.next/standalone/.next/server/chunks/[root-of-the-server]__798bafa7._.js +0 -133
  626. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7b873fdb._.js +0 -78
  627. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7d73f791._.js +0 -133
  628. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7dc76d0e._.js +0 -133
  629. package/.next/standalone/.next/server/chunks/[root-of-the-server]__80a85d1f._.js +0 -133
  630. package/.next/standalone/.next/server/chunks/[root-of-the-server]__81f2a9b7._.js +0 -133
  631. package/.next/standalone/.next/server/chunks/[root-of-the-server]__82f11618._.js +0 -3
  632. package/.next/standalone/.next/server/chunks/[root-of-the-server]__834efefe._.js +0 -42
  633. package/.next/standalone/.next/server/chunks/[root-of-the-server]__853663ea._.js +0 -42
  634. package/.next/standalone/.next/server/chunks/[root-of-the-server]__861f2472._.js +0 -172
  635. package/.next/standalone/.next/server/chunks/[root-of-the-server]__882d0924._.js +0 -133
  636. package/.next/standalone/.next/server/chunks/[root-of-the-server]__88959e7f._.js +0 -133
  637. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8b6c05dc._.js +0 -133
  638. package/.next/standalone/.next/server/chunks/[root-of-the-server]__912a22a4._.js +0 -133
  639. package/.next/standalone/.next/server/chunks/[root-of-the-server]__93d21ad1._.js +0 -42
  640. package/.next/standalone/.next/server/chunks/[root-of-the-server]__94532b09._.js +0 -42
  641. package/.next/standalone/.next/server/chunks/[root-of-the-server]__97e87518._.js +0 -78
  642. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9c13c8d0._.js +0 -78
  643. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9cb13212._.js +0 -133
  644. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9d315363._.js +0 -133
  645. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9ec369db._.js +0 -13
  646. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9f09ade5._.js +0 -133
  647. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9f986ad2._.js +0 -133
  648. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a35913cf._.js +0 -172
  649. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a3641117._.js +0 -78
  650. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a76c75a0._.js +0 -133
  651. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a934c48d._.js +0 -133
  652. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9431ac6._.js +0 -133
  653. package/.next/standalone/.next/server/chunks/[root-of-the-server]__aa3381a4._.js +0 -133
  654. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ab1cc16c._.js +0 -133
  655. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ab22ca4f._.js +0 -133
  656. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ac20d518._.js +0 -78
  657. package/.next/standalone/.next/server/chunks/[root-of-the-server]__aee3bf91._.js +0 -172
  658. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b1114936._.js +0 -133
  659. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b15ade1f._.js +0 -133
  660. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b2bc7a81._.js +0 -133
  661. package/.next/standalone/.next/server/chunks/[root-of-the-server]__b51446e5._.js +0 -133
  662. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ba344563._.js +0 -133
  663. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c3b2e20c._.js +0 -133
  664. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ca93ae79._.js +0 -42
  665. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cf4a76c0._.js +0 -133
  666. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d20bed9e._.js +0 -78
  667. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d2d59054._.js +0 -133
  668. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d4f1c0c0._.js +0 -38
  669. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d6de7a45._.js +0 -133
  670. package/.next/standalone/.next/server/chunks/[root-of-the-server]__da33b519._.js +0 -133
  671. package/.next/standalone/.next/server/chunks/[root-of-the-server]__dc820e44._.js +0 -133
  672. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e1058e69._.js +0 -133
  673. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e1dfb4d4._.js +0 -3
  674. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e3606cd1._.js +0 -3
  675. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e55b6fc5._.js +0 -133
  676. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e6555dc3._.js +0 -133
  677. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e65c3971._.js +0 -3
  678. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ea9e2d75._.js +0 -133
  679. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ec37cbee._.js +0 -133
  680. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f3c19e4b._.js +0 -42
  681. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f445bd01._.js +0 -3
  682. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f7b0b4da._.js +0 -133
  683. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fb4c016b._.js +0 -133
  684. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fd86530e._.js +0 -78
  685. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fef9b1ec._.js +0 -133
  686. package/.next/standalone/docs/plans/2026-02-24-multi-agent-sessions-design.md +0 -133
  687. package/.next/standalone/docs/plans/2026-02-24-multi-agent-sessions-plan.md +0 -959
  688. package/.next/standalone/docs/plans/2026-03-07-service-command-design.md +0 -146
  689. package/.next/standalone/docs/plans/2026-03-07-service-command-plan.md +0 -254
  690. package/.next/standalone/docs/plans/2026-04-23-consolidate-addons-design.md +0 -212
  691. package/.next/standalone/docs/plans/2026-04-23-consolidate-addons-plan.md +0 -1509
  692. package/.next/standalone/docs/superpowers/plans/2026-03-12-spaces-cortex.md +0 -5270
  693. package/.next/standalone/docs/superpowers/plans/2026-03-13-cortex-wiring.md +0 -1387
  694. package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-entity-graph.md +0 -1923
  695. package/.next/standalone/docs/superpowers/plans/2026-03-14-cortex-v2-knowledge-evolution.md +0 -1113
  696. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-boundary-engine.md +0 -853
  697. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-context-engine.md +0 -1274
  698. package/.next/standalone/docs/superpowers/plans/2026-03-15-cortex-v2-signal-ingestion.md +0 -933
  699. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-lobes.md +0 -1080
  700. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-gravity-system.md +0 -768
  701. package/.next/standalone/docs/superpowers/plans/2026-03-16-cortex-v2-ui.md +0 -1108
  702. package/.next/standalone/docs/superpowers/plans/2026-03-18-cortex-ui-integration.md +0 -1846
  703. package/.next/standalone/docs/superpowers/plans/2026-03-19-vr-phase1-shell.md +0 -1639
  704. package/.next/standalone/docs/superpowers/plans/2026-03-27-dockview-pane-layout.md +0 -98
  705. package/.next/standalone/docs/superpowers/plans/2026-04-21-workspace-todos.md +0 -1097
  706. package/.next/standalone/docs/superpowers/plans/2026-04-22-claude-usage-display.md +0 -749
  707. package/.next/standalone/docs/superpowers/specs/2026-03-11-universe-view-design.md +0 -320
  708. package/.next/standalone/docs/superpowers/specs/2026-03-12-spaces-brain-design.md +0 -720
  709. package/.next/standalone/docs/superpowers/specs/2026-03-13-cortex-wiring-design.md +0 -268
  710. package/.next/standalone/docs/superpowers/specs/2026-03-14-cortex-v2-design.md +0 -623
  711. package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-lobes-design.md +0 -263
  712. package/.next/standalone/docs/superpowers/specs/2026-03-16-cortex-v2-ui-design.md +0 -240
  713. package/.next/standalone/docs/superpowers/specs/2026-03-16-pane-ux-design.md +0 -77
  714. package/.next/standalone/docs/superpowers/specs/2026-03-18-cortex-ui-integration-design.md +0 -341
  715. package/.next/standalone/docs/superpowers/specs/2026-03-19-vr-phase1-shell-design.md +0 -288
  716. package/.next/standalone/docs/superpowers/specs/2026-03-27-pane-diff-review-and-project-wizard-design.md +0 -322
  717. package/.next/standalone/docs/superpowers/specs/2026-04-21-workspace-todos-design.md +0 -180
  718. package/.next/standalone/docs/superpowers/specs/2026-04-22-claude-usage-display-design.md +0 -183
  719. /package/.next/standalone/.next/static/{Y9EeSGuSi-8qpkLvIBy0a → mimGB6C_ZmJMiVnOe9tqZ}/_buildManifest.js +0 -0
  720. /package/.next/standalone/.next/static/{Y9EeSGuSi-8qpkLvIBy0a → mimGB6C_ZmJMiVnOe9tqZ}/_clientMiddlewareManifest.json +0 -0
  721. /package/.next/standalone/.next/static/{Y9EeSGuSi-8qpkLvIBy0a → mimGB6C_ZmJMiVnOe9tqZ}/_ssgManifest.js +0 -0
@@ -1,933 +0,0 @@
1
- # Cortex v2 — Pillar 5: Observable Signal Ingestion
2
-
3
- > **For agentic workers:** REQUIRED: Use superpowers:subagent-driven-development (if subagents available) or superpowers:executing-plans to implement this plan. Steps use checkbox (`- [ ]`) syntax for tracking.
4
-
5
- **Goal:** Build the adapter-based signal ingestion framework and implement the 3 core adapters (Conversations, Git History, Documents). The remaining 4 adapters (PR Reviews, Test Signals, Deployment, Behavioral) are deferred — they require external webhooks/APIs and can be added incrementally since the adapter interface is extensible.
6
-
7
- **Architecture:** A new `src/lib/cortex/signals/` module with a `SignalPipeline` class that consumes `SignalEnvelope` objects from any adapter. Each adapter implements a `SignalAdapter` interface with `extract()` (AsyncIterable) and `healthCheck()`. The existing `IngestionPipeline` is wrapped as the Conversation adapter for backward compat. The Git adapter parses `git log` output. The Document adapter watches `docs/**` for ADRs/READMEs.
8
-
9
- **Tech Stack:** TypeScript, vitest, child_process (for git), fs (for docs)
10
-
11
- **Spec:** `docs/superpowers/specs/2026-03-14-cortex-v2-design.md` — Pillar 5
12
-
13
- **Depends on:** Pillars 1-4 (all completed)
14
-
15
- **Deferred to future:** PR Review adapter, Test Signal adapter, Deployment adapter, Behavioral Inference adapter
16
-
17
- ---
18
-
19
- ## File Structure
20
-
21
- ```
22
- New files:
23
- ├── src/lib/cortex/signals/types.ts — SignalEnvelope, SignalAdapter interfaces
24
- ├── src/lib/cortex/signals/pipeline.ts — Unified SignalPipeline
25
- ├── src/lib/cortex/signals/adapters/conversation.ts — Wraps existing IngestionPipeline
26
- ├── src/lib/cortex/signals/adapters/git.ts — Git history adapter
27
- ├── src/lib/cortex/signals/adapters/document.ts — Document/ADR adapter
28
- ├── src/lib/cortex/signals/index.ts — Barrel export
29
-
30
- Test files:
31
- ├── tests/lib/cortex/signals/pipeline.test.ts
32
- ├── tests/lib/cortex/signals/adapters/git.test.ts
33
- ├── tests/lib/cortex/signals/adapters/document.test.ts
34
- ```
35
-
36
- ---
37
-
38
- ## Chunk 1: Signal Types and Unified Pipeline
39
-
40
- ### Task 1: Signal types
41
-
42
- **Files:**
43
- - Create: `src/lib/cortex/signals/types.ts`
44
-
45
- - [ ] **Step 1: Create types file**
46
-
47
- ```typescript
48
- // src/lib/cortex/signals/types.ts
49
- import type { KnowledgeType, SensitivityClass, Origin, EntityLink } from '../knowledge/types';
50
-
51
- export interface SignalEnvelope {
52
- text: string;
53
- origin: Origin;
54
- entities: EntityLink[];
55
- suggested_type: KnowledgeType;
56
- suggested_sensitivity: SensitivityClass;
57
- raw_metadata: Record<string, unknown>;
58
- }
59
-
60
- export interface SignalAdapter {
61
- name: string;
62
- schedule: 'realtime' | 'polling' | 'webhook' | 'cron';
63
- extract(): AsyncIterable<SignalEnvelope>;
64
- healthCheck(): Promise<boolean>;
65
- }
66
-
67
- export interface IngestResult {
68
- accepted: number;
69
- skipped: number; // dedup
70
- errors: string[];
71
- }
72
-
73
- /**
74
- * Graph edge update carried in raw_metadata.
75
- * Adapters can include these to update the entity graph during ingestion.
76
- */
77
- export interface EdgeUpdate {
78
- source_id: string;
79
- target_id: string;
80
- relation: string;
81
- weight_delta: number; // increment (not absolute)
82
- }
83
- ```
84
-
85
- - [ ] **Step 2: Commit**
86
-
87
- ```bash
88
- git add src/lib/cortex/signals/types.ts
89
- git commit -m "feat(cortex): add signal ingestion type definitions"
90
- ```
91
-
92
- ---
93
-
94
- ### Task 2: Unified SignalPipeline
95
-
96
- **Files:**
97
- - Create: `src/lib/cortex/signals/pipeline.ts`
98
- - Create: `tests/lib/cortex/signals/pipeline.test.ts`
99
-
100
- - [ ] **Step 1: Write failing tests**
101
-
102
- ```typescript
103
- // tests/lib/cortex/signals/pipeline.test.ts
104
- import { describe, it, expect, vi, beforeEach } from 'vitest';
105
- import { SignalPipeline } from '@/lib/cortex/signals/pipeline';
106
- import type { SignalEnvelope } from '@/lib/cortex/signals/types';
107
-
108
- const mockStore = {
109
- add: vi.fn().mockResolvedValue(undefined),
110
- search: vi.fn().mockResolvedValue([]),
111
- };
112
-
113
- const mockEmbedding = {
114
- embed: vi.fn().mockResolvedValue([[0.1, 0.2, 0.3]]),
115
- dimensions: 3,
116
- name: 'mock',
117
- init: vi.fn(),
118
- };
119
-
120
- const mockGraph = {
121
- createEdge: vi.fn(),
122
- incrementEdgeWeight: vi.fn(),
123
- getEntity: vi.fn().mockReturnValue(null),
124
- };
125
-
126
- const mockResolver = {
127
- extractEntities: vi.fn().mockReturnValue([]),
128
- };
129
-
130
- function makeEnvelope(overrides: Partial<SignalEnvelope> = {}): SignalEnvelope {
131
- return {
132
- text: 'Fix auth timeout by increasing pool size',
133
- origin: { source_type: 'git_commit', source_ref: 'abc123', creator_entity_id: 'person-alice' },
134
- entities: [],
135
- suggested_type: 'error_fix',
136
- suggested_sensitivity: 'internal',
137
- raw_metadata: {},
138
- ...overrides,
139
- };
140
- }
141
-
142
- describe('SignalPipeline', () => {
143
- let pipeline: SignalPipeline;
144
-
145
- beforeEach(() => {
146
- vi.clearAllMocks();
147
- pipeline = new SignalPipeline({
148
- store: mockStore as any,
149
- embedding: mockEmbedding as any,
150
- graph: mockGraph as any,
151
- resolver: mockResolver as any,
152
- });
153
- });
154
-
155
- it('ingests a signal envelope and stores it', async () => {
156
- const result = await pipeline.ingest(makeEnvelope());
157
- expect(result.accepted).toBe(1);
158
- expect(mockEmbedding.embed).toHaveBeenCalledWith(['Fix auth timeout by increasing pool size']);
159
- expect(mockStore.add).toHaveBeenCalledTimes(1);
160
- });
161
-
162
- it('uses suggested_type from envelope', async () => {
163
- await pipeline.ingest(makeEnvelope({ suggested_type: 'decision' }));
164
- const addCall = mockStore.add.mock.calls[0];
165
- expect(addCall[1].type).toBe('decision');
166
- });
167
-
168
- it('auto-classifies sensitivity (most restrictive wins)', async () => {
169
- // Text contains API key → confidential, overrides suggested 'internal'
170
- await pipeline.ingest(makeEnvelope({
171
- text: 'Set API_KEY=sk-ant-abc123 in production',
172
- suggested_sensitivity: 'internal',
173
- }));
174
- const addCall = mockStore.add.mock.calls[0];
175
- expect(addCall[1].sensitivity).toBe('confidential');
176
- });
177
-
178
- it('keeps suggested_sensitivity when more restrictive than auto-classification', async () => {
179
- await pipeline.ingest(makeEnvelope({
180
- text: 'General technical note', // auto-classifies as internal
181
- suggested_sensitivity: 'restricted', // more restrictive
182
- }));
183
- const addCall = mockStore.add.mock.calls[0];
184
- expect(addCall[1].sensitivity).toBe('restricted');
185
- });
186
-
187
- it('processes edge updates from raw_metadata', async () => {
188
- await pipeline.ingest(makeEnvelope({
189
- raw_metadata: {
190
- edge_updates: [
191
- { source_id: 'person-alice', target_id: 'topic-auth', relation: 'expert_in', weight_delta: 0.05 },
192
- ],
193
- },
194
- }));
195
- expect(mockGraph.incrementEdgeWeight).toHaveBeenCalledWith(
196
- 'person-alice', 'topic-auth', 'expert_in', 0.05
197
- );
198
- });
199
-
200
- it('deduplicates by text hash', async () => {
201
- const envelope = makeEnvelope();
202
- await pipeline.ingest(envelope);
203
- const result = await pipeline.ingest(envelope); // same text
204
- expect(result.skipped).toBe(1);
205
- expect(result.accepted).toBe(0);
206
- expect(mockStore.add).toHaveBeenCalledTimes(1); // only first call
207
- });
208
-
209
- it('ingests batch of envelopes', async () => {
210
- const envelopes = [
211
- makeEnvelope({ text: 'First signal' }),
212
- makeEnvelope({ text: 'Second signal' }),
213
- makeEnvelope({ text: 'Third signal' }),
214
- ];
215
- const result = await pipeline.ingestBatch(envelopes);
216
- expect(result.accepted).toBe(3);
217
- expect(mockStore.add).toHaveBeenCalledTimes(3);
218
- });
219
-
220
- it('handles embedding failures gracefully', async () => {
221
- mockEmbedding.embed.mockRejectedValueOnce(new Error('embed failed'));
222
- const result = await pipeline.ingest(makeEnvelope());
223
- expect(result.errors).toHaveLength(1);
224
- expect(result.accepted).toBe(0);
225
- });
226
- });
227
- ```
228
-
229
- - [ ] **Step 2: Run tests to verify they fail**
230
-
231
- Run: `npx vitest run tests/lib/cortex/signals/pipeline.test.ts`
232
-
233
- - [ ] **Step 3: Implement SignalPipeline**
234
-
235
- ```typescript
236
- // src/lib/cortex/signals/pipeline.ts
237
- import { createHash } from 'crypto';
238
- import type { CortexStore } from '../store';
239
- import type { EmbeddingProvider } from '../embeddings';
240
- import type { EntityGraph } from '../graph/entity-graph';
241
- import type { EntityResolver } from '../graph/resolver';
242
- import type { KnowledgeUnit } from '../knowledge/types';
243
- import { classifySensitivity } from '../boundary/classifier';
244
- import { layerToScope, scopeToLayerKey } from '../knowledge/compat';
245
- import type { SignalEnvelope, IngestResult, EdgeUpdate } from './types';
246
-
247
- const SENSITIVITY_PRIORITY: Record<string, number> = {
248
- public: 0, internal: 1, restricted: 2, confidential: 3,
249
- };
250
-
251
- export interface SignalPipelineDeps {
252
- store: CortexStore;
253
- embedding: EmbeddingProvider;
254
- graph: EntityGraph;
255
- resolver: EntityResolver;
256
- }
257
-
258
- export class SignalPipeline {
259
- private hashSet = new Set<string>();
260
- private deps: SignalPipelineDeps;
261
-
262
- constructor(deps: SignalPipelineDeps) {
263
- this.deps = deps;
264
- }
265
-
266
- async ingest(envelope: SignalEnvelope): Promise<IngestResult> {
267
- const result: IngestResult = { accepted: 0, skipped: 0, errors: [] };
268
-
269
- try {
270
- // 1. Dedup by text hash
271
- const hash = createHash('sha256')
272
- .update(envelope.text.replace(/\s+/g, ' ').trim())
273
- .digest('hex');
274
-
275
- if (this.hashSet.has(hash)) {
276
- result.skipped = 1;
277
- return result;
278
- }
279
- this.hashSet.add(hash);
280
-
281
- // 2. Sensitivity: most restrictive wins between suggested and auto-classified
282
- const autoSensitivity = classifySensitivity(envelope.text);
283
- const suggestedPriority = SENSITIVITY_PRIORITY[envelope.suggested_sensitivity] ?? 1;
284
- const autoPriority = SENSITIVITY_PRIORITY[autoSensitivity] ?? 1;
285
- const sensitivity = suggestedPriority >= autoPriority
286
- ? envelope.suggested_sensitivity : autoSensitivity;
287
-
288
- // 3. Embed
289
- const [vector] = await this.deps.embedding.embed([envelope.text]);
290
-
291
- // 4. Build scope from origin
292
- const scope = layerToScope('personal', null, envelope.origin.creator_entity_id.replace('person-', ''));
293
- const layerKey = scopeToLayerKey(scope);
294
- const layer = 'personal' as const; // default; adapters can override via metadata
295
-
296
- // 5. Build KnowledgeUnit
297
- const unit: KnowledgeUnit = {
298
- id: crypto.randomUUID(),
299
- vector,
300
- text: envelope.text,
301
- type: envelope.suggested_type,
302
- layer,
303
- workspace_id: (envelope.raw_metadata.workspace_id as number) ?? null,
304
- session_id: (envelope.raw_metadata.session_id as string) ?? null,
305
- agent_type: 'claude',
306
- project_path: (envelope.raw_metadata.project_path as string) ?? null,
307
- file_refs: (envelope.raw_metadata.file_refs as string[]) ?? [],
308
- confidence: 0.8,
309
- created: new Date().toISOString(),
310
- source_timestamp: new Date().toISOString(),
311
- stale_score: 0,
312
- access_count: 0,
313
- last_accessed: null,
314
- metadata: { source: envelope.origin.source_type },
315
- // v2 fields
316
- scope,
317
- entity_links: envelope.entities,
318
- evidence_score: 0.8,
319
- corroborations: 0,
320
- contradiction_refs: [],
321
- sensitivity,
322
- creator_scope: null,
323
- origin: envelope.origin,
324
- propagation_path: [],
325
- };
326
-
327
- // 6. Store
328
- await this.deps.store.add(layerKey, unit);
329
- result.accepted = 1;
330
-
331
- // 7. Process edge updates
332
- const edgeUpdates = (envelope.raw_metadata.edge_updates as EdgeUpdate[]) ?? [];
333
- for (const update of edgeUpdates) {
334
- try {
335
- this.deps.graph.incrementEdgeWeight(
336
- update.source_id, update.target_id, update.relation as any, update.weight_delta
337
- );
338
- } catch {
339
- // Edge entities may not exist yet, skip
340
- }
341
- }
342
-
343
- } catch (err: any) {
344
- result.errors.push(err.message);
345
- }
346
-
347
- return result;
348
- }
349
-
350
- async ingestBatch(envelopes: SignalEnvelope[]): Promise<IngestResult> {
351
- const totals: IngestResult = { accepted: 0, skipped: 0, errors: [] };
352
- for (const envelope of envelopes) {
353
- const r = await this.ingest(envelope);
354
- totals.accepted += r.accepted;
355
- totals.skipped += r.skipped;
356
- totals.errors.push(...r.errors);
357
- }
358
- return totals;
359
- }
360
- }
361
- ```
362
-
363
- - [ ] **Step 4: Run tests to verify they pass**
364
-
365
- Run: `npx vitest run tests/lib/cortex/signals/pipeline.test.ts`
366
- Expected: PASS (8 tests)
367
-
368
- - [ ] **Step 5: Commit**
369
-
370
- ```bash
371
- git add src/lib/cortex/signals/pipeline.ts tests/lib/cortex/signals/pipeline.test.ts
372
- git commit -m "feat(cortex): add unified SignalPipeline for multi-source ingestion"
373
- ```
374
-
375
- ---
376
-
377
- ## Chunk 2: Core Adapters
378
-
379
- ### Task 3: Conversation adapter (wraps existing pipeline)
380
-
381
- **Files:**
382
- - Create: `src/lib/cortex/signals/adapters/conversation.ts`
383
-
384
- - [ ] **Step 1: Implement conversation adapter**
385
-
386
- This adapter wraps the existing `IngestionPipeline` to produce `SignalEnvelope` objects from Claude Code session transcripts. It does NOT replace the existing pipeline — it wraps it so conversations flow through the unified `SignalPipeline`.
387
-
388
- ```typescript
389
- // src/lib/cortex/signals/adapters/conversation.ts
390
- import type { SignalAdapter, SignalEnvelope } from '../types';
391
-
392
- /**
393
- * Conversation adapter — wraps the learn hook's output format.
394
- * This is a "pull" adapter: it doesn't actively extract.
395
- * Instead, the learn hook POSTs to the knowledge API, and this adapter
396
- * can be used to convert raw session messages into SignalEnvelopes
397
- * for batch processing.
398
- */
399
- export class ConversationAdapter implements SignalAdapter {
400
- name = 'conversation';
401
- schedule = 'realtime' as const;
402
-
403
- async *extract(): AsyncIterable<SignalEnvelope> {
404
- // No-op for the conversation adapter.
405
- // Conversations are ingested in real-time via the learn hook → knowledge API.
406
- // This adapter exists to satisfy the interface and for future batch reprocessing.
407
- }
408
-
409
- async healthCheck(): Promise<boolean> {
410
- return true;
411
- }
412
-
413
- /**
414
- * Convert a raw Q&A pair into a SignalEnvelope (used by learn hook).
415
- */
416
- static fromQA(question: string, answer: string, sessionId: string, type: string = 'conversation'): SignalEnvelope {
417
- return {
418
- text: `Q: ${question}\nA: ${answer}`,
419
- origin: {
420
- source_type: 'conversation',
421
- source_ref: sessionId,
422
- creator_entity_id: 'person-default-user',
423
- },
424
- entities: [],
425
- suggested_type: type as any,
426
- suggested_sensitivity: 'internal',
427
- raw_metadata: { session_id: sessionId },
428
- };
429
- }
430
- }
431
- ```
432
-
433
- - [ ] **Step 2: Commit**
434
-
435
- ```bash
436
- git add src/lib/cortex/signals/adapters/conversation.ts
437
- git commit -m "feat(cortex): add conversation signal adapter"
438
- ```
439
-
440
- ---
441
-
442
- ### Task 4: Git history adapter
443
-
444
- **Files:**
445
- - Create: `src/lib/cortex/signals/adapters/git.ts`
446
- - Create: `tests/lib/cortex/signals/adapters/git.test.ts`
447
-
448
- - [ ] **Step 1: Write failing tests**
449
-
450
- ```typescript
451
- // tests/lib/cortex/signals/adapters/git.test.ts
452
- import { describe, it, expect, vi } from 'vitest';
453
- import { GitAdapter, parseGitLog } from '@/lib/cortex/signals/adapters/git';
454
- import type { SignalEnvelope } from '@/lib/cortex/signals/types';
455
-
456
- describe('parseGitLog', () => {
457
- it('parses a commit into a SignalEnvelope', () => {
458
- const logEntry = {
459
- sha: 'abc123def',
460
- author: 'alice@acme.com',
461
- authorName: 'Alice Smith',
462
- date: '2026-03-15T10:00:00Z',
463
- message: 'fix(auth): increase connection pool to handle concurrent load\n\nThe default pool of 10 was exhausted under peak traffic.',
464
- files: ['src/services/auth/pool.ts', 'config/auth.yaml'],
465
- };
466
-
467
- const envelopes = parseGitLog(logEntry);
468
- expect(envelopes.length).toBeGreaterThanOrEqual(1);
469
-
470
- const main = envelopes[0];
471
- expect(main.origin.source_type).toBe('git_commit');
472
- expect(main.origin.source_ref).toBe('abc123def');
473
- expect(main.suggested_type).toBe('error_fix'); // "fix" in message
474
- expect(main.text).toContain('increase connection pool');
475
- expect(main.raw_metadata.file_refs).toEqual(['src/services/auth/pool.ts', 'config/auth.yaml']);
476
- });
477
-
478
- it('classifies refactor commits as decisions', () => {
479
- const logEntry = {
480
- sha: 'def456',
481
- author: 'bob@acme.com',
482
- authorName: 'Bob',
483
- date: '2026-03-15T11:00:00Z',
484
- message: 'refactor: migrate auth from Express to Fastify',
485
- files: ['src/server.ts'],
486
- };
487
-
488
- const envelopes = parseGitLog(logEntry);
489
- expect(envelopes[0].suggested_type).toBe('decision');
490
- });
491
-
492
- it('classifies generic commits as context', () => {
493
- const logEntry = {
494
- sha: 'ghi789',
495
- author: 'charlie@acme.com',
496
- authorName: 'Charlie',
497
- date: '2026-03-15T12:00:00Z',
498
- message: 'update dependencies',
499
- files: ['package.json'],
500
- };
501
-
502
- const envelopes = parseGitLog(logEntry);
503
- expect(envelopes[0].suggested_type).toBe('context');
504
- });
505
-
506
- it('includes edge updates for author TOUCHES files', () => {
507
- const logEntry = {
508
- sha: 'jkl012',
509
- author: 'alice@acme.com',
510
- authorName: 'Alice Smith',
511
- date: '2026-03-15T13:00:00Z',
512
- message: 'feat: add new endpoint',
513
- files: ['src/api/users.ts'],
514
- };
515
-
516
- const envelopes = parseGitLog(logEntry);
517
- const edgeUpdates = envelopes[0].raw_metadata.edge_updates as any[];
518
- expect(edgeUpdates).toBeDefined();
519
- expect(edgeUpdates.length).toBeGreaterThanOrEqual(1);
520
- expect(edgeUpdates[0].relation).toBe('touches');
521
- });
522
-
523
- it('skips merge commits', () => {
524
- const logEntry = {
525
- sha: 'mno345',
526
- author: 'alice@acme.com',
527
- authorName: 'Alice',
528
- date: '2026-03-15T14:00:00Z',
529
- message: 'Merge branch \'feature/foo\' into main',
530
- files: [],
531
- };
532
-
533
- const envelopes = parseGitLog(logEntry);
534
- expect(envelopes).toHaveLength(0);
535
- });
536
- });
537
- ```
538
-
539
- - [ ] **Step 2: Implement git adapter**
540
-
541
- ```typescript
542
- // src/lib/cortex/signals/adapters/git.ts
543
- import type { SignalAdapter, SignalEnvelope, EdgeUpdate } from '../types';
544
- import { slugify } from '../../graph/types';
545
-
546
- export interface GitLogEntry {
547
- sha: string;
548
- author: string; // email
549
- authorName: string;
550
- date: string; // ISO timestamp
551
- message: string;
552
- files: string[];
553
- }
554
-
555
- const FIX_PATTERNS = [/^fix[:(]/, /\bfix\b/i, /\bbug\b/i, /\bhotfix\b/i];
556
- const DECISION_PATTERNS = [/^refactor[:(]/, /\bmigrat/i, /\bswitch\s+to\b/i, /\breplace\b.*\bwith\b/i, /^feat[:(]/];
557
- const MERGE_PATTERN = /^Merge\s+(branch|pull\s+request|remote)/i;
558
-
559
- /**
560
- * Parse a git log entry into SignalEnvelopes.
561
- */
562
- export function parseGitLog(entry: GitLogEntry): SignalEnvelope[] {
563
- // Skip merge commits
564
- if (MERGE_PATTERN.test(entry.message)) return [];
565
-
566
- // Skip very short messages
567
- const body = entry.message.trim();
568
- if (body.length < 10) return [];
569
-
570
- // Classify commit type
571
- let suggestedType: string = 'context';
572
- if (FIX_PATTERNS.some(p => p.test(body))) suggestedType = 'error_fix';
573
- else if (DECISION_PATTERNS.some(p => p.test(body))) suggestedType = 'decision';
574
-
575
- const authorSlug = slugify(entry.authorName);
576
- const creatorEntityId = `person-${authorSlug}`;
577
-
578
- // Build edge updates: author TOUCHES each file
579
- const edgeUpdates: EdgeUpdate[] = entry.files.map(file => ({
580
- source_id: creatorEntityId,
581
- target_id: `module-${slugify(file)}`,
582
- relation: 'touches',
583
- weight_delta: 0.05,
584
- }));
585
-
586
- const envelope: SignalEnvelope = {
587
- text: body,
588
- origin: {
589
- source_type: 'git_commit',
590
- source_ref: entry.sha,
591
- creator_entity_id: creatorEntityId,
592
- },
593
- entities: [],
594
- suggested_type: suggestedType as any,
595
- suggested_sensitivity: 'internal',
596
- raw_metadata: {
597
- file_refs: entry.files,
598
- edge_updates: edgeUpdates,
599
- author_email: entry.author,
600
- commit_date: entry.date,
601
- },
602
- };
603
-
604
- return [envelope];
605
- }
606
-
607
- /**
608
- * Git adapter — extracts knowledge from git history.
609
- * Uses `git log` to scan recent commits.
610
- */
611
- export class GitAdapter implements SignalAdapter {
612
- name = 'git';
613
- schedule = 'polling' as const;
614
-
615
- constructor(private repoPath: string, private sinceDate?: string) {}
616
-
617
- async *extract(): AsyncIterable<SignalEnvelope> {
618
- const { execSync } = await import('child_process');
619
- const since = this.sinceDate ?? new Date(Date.now() - 86400000).toISOString(); // default: last 24h
620
-
621
- try {
622
- const log = execSync(
623
- `git log --since="${since}" --format="%H|%ae|%an|%aI|%s" --name-only`,
624
- { cwd: this.repoPath, encoding: 'utf-8', timeout: 10000 }
625
- );
626
-
627
- const entries = this.parseLogOutput(log);
628
- for (const entry of entries) {
629
- for (const envelope of parseGitLog(entry)) {
630
- yield envelope;
631
- }
632
- }
633
- } catch {
634
- // Git not available or not a repo, yield nothing
635
- }
636
- }
637
-
638
- async healthCheck(): Promise<boolean> {
639
- try {
640
- const { execSync } = await import('child_process');
641
- execSync('git rev-parse HEAD', { cwd: this.repoPath, encoding: 'utf-8', timeout: 5000 });
642
- return true;
643
- } catch {
644
- return false;
645
- }
646
- }
647
-
648
- private parseLogOutput(log: string): GitLogEntry[] {
649
- const entries: GitLogEntry[] = [];
650
- const lines = log.split('\n');
651
- let current: GitLogEntry | null = null;
652
-
653
- for (const line of lines) {
654
- if (line.includes('|') && line.split('|').length >= 5) {
655
- if (current) entries.push(current);
656
- const [sha, author, authorName, date, ...messageParts] = line.split('|');
657
- current = {
658
- sha, author, authorName, date,
659
- message: messageParts.join('|'),
660
- files: [],
661
- };
662
- } else if (line.trim() && current) {
663
- current.files.push(line.trim());
664
- }
665
- }
666
-
667
- if (current) entries.push(current);
668
- return entries;
669
- }
670
- }
671
- ```
672
-
673
- - [ ] **Step 3: Run tests, commit**
674
-
675
- Run: `npx vitest run tests/lib/cortex/signals/adapters/git.test.ts`
676
-
677
- ```bash
678
- git commit -m "feat(cortex): add git history signal adapter"
679
- ```
680
-
681
- ---
682
-
683
- ### Task 5: Document adapter
684
-
685
- **Files:**
686
- - Create: `src/lib/cortex/signals/adapters/document.ts`
687
- - Create: `tests/lib/cortex/signals/adapters/document.test.ts`
688
-
689
- - [ ] **Step 1: Write failing tests**
690
-
691
- ```typescript
692
- // tests/lib/cortex/signals/adapters/document.test.ts
693
- import { describe, it, expect } from 'vitest';
694
- import { parseDocument, classifyDocument } from '@/lib/cortex/signals/adapters/document';
695
-
696
- describe('classifyDocument', () => {
697
- it('classifies ADR files as decisions', () => {
698
- expect(classifyDocument('docs/adr/001-use-postgres.md')).toBe('decision');
699
- expect(classifyDocument('docs/ADR-002.md')).toBe('decision');
700
- });
701
-
702
- it('classifies runbook files as pattern', () => {
703
- expect(classifyDocument('docs/runbooks/deploy-production.md')).toBe('pattern');
704
- });
705
-
706
- it('classifies README as context', () => {
707
- expect(classifyDocument('README.md')).toBe('context');
708
- expect(classifyDocument('docs/getting-started.md')).toBe('context');
709
- });
710
- });
711
-
712
- describe('parseDocument', () => {
713
- it('creates envelope from document content', () => {
714
- const envelope = parseDocument({
715
- path: 'docs/adr/001-use-postgres.md',
716
- content: '# ADR-001: Use PostgreSQL\n\nWe decided to use PostgreSQL for all new services due to its reliability and JSON support.',
717
- });
718
-
719
- expect(envelope.origin.source_type).toBe('document');
720
- expect(envelope.origin.source_ref).toBe('docs/adr/001-use-postgres.md');
721
- expect(envelope.suggested_type).toBe('decision');
722
- expect(envelope.text).toContain('PostgreSQL');
723
- expect(envelope.suggested_sensitivity).toBe('internal');
724
- });
725
-
726
- it('truncates very long documents', () => {
727
- const longContent = 'x'.repeat(10000);
728
- const envelope = parseDocument({
729
- path: 'docs/guide.md',
730
- content: longContent,
731
- });
732
- expect(envelope.text.length).toBeLessThanOrEqual(4000);
733
- });
734
-
735
- it('sets higher authority via raw_metadata', () => {
736
- const envelope = parseDocument({
737
- path: 'docs/adr/001.md',
738
- content: 'ADR content',
739
- });
740
- expect(envelope.raw_metadata.authority_boost).toBe(true);
741
- });
742
- });
743
- ```
744
-
745
- - [ ] **Step 2: Implement document adapter**
746
-
747
- ```typescript
748
- // src/lib/cortex/signals/adapters/document.ts
749
- import type { SignalAdapter, SignalEnvelope } from '../types';
750
- import type { KnowledgeType } from '../../knowledge/types';
751
-
752
- const MAX_DOC_LENGTH = 4000;
753
-
754
- const DOC_TYPE_PATTERNS: [RegExp, KnowledgeType][] = [
755
- [/\badr[s]?\b/i, 'decision'],
756
- [/\bADR[-_]/i, 'decision'],
757
- [/\brunbook/i, 'pattern'],
758
- [/\bplaybook/i, 'pattern'],
759
- [/\bREADME/i, 'context'],
760
- [/\bguide/i, 'context'],
761
- [/\bchangelog/i, 'summary'],
762
- ];
763
-
764
- export function classifyDocument(filepath: string): KnowledgeType {
765
- for (const [pattern, type] of DOC_TYPE_PATTERNS) {
766
- if (pattern.test(filepath)) return type;
767
- }
768
- return 'context';
769
- }
770
-
771
- export interface DocumentInput {
772
- path: string;
773
- content: string;
774
- }
775
-
776
- export function parseDocument(input: DocumentInput): SignalEnvelope {
777
- const type = classifyDocument(input.path);
778
- const text = input.content.length > MAX_DOC_LENGTH
779
- ? input.content.slice(0, MAX_DOC_LENGTH)
780
- : input.content;
781
-
782
- return {
783
- text,
784
- origin: {
785
- source_type: 'document',
786
- source_ref: input.path,
787
- creator_entity_id: 'person-default-user',
788
- },
789
- entities: [],
790
- suggested_type: type,
791
- suggested_sensitivity: 'internal',
792
- raw_metadata: {
793
- file_path: input.path,
794
- authority_boost: true, // documents have higher authority
795
- },
796
- };
797
- }
798
-
799
- /**
800
- * Document adapter — scans docs directories for markdown files.
801
- */
802
- export class DocumentAdapter implements SignalAdapter {
803
- name = 'document';
804
- schedule = 'polling' as const;
805
-
806
- constructor(private docPaths: string[]) {}
807
-
808
- async *extract(): AsyncIterable<SignalEnvelope> {
809
- const fs = await import('fs');
810
- const path = await import('path');
811
-
812
- for (const docDir of this.docPaths) {
813
- try {
814
- const files = this.walkDir(docDir, fs, path);
815
- for (const file of files) {
816
- if (!file.endsWith('.md')) continue;
817
- try {
818
- const content = fs.readFileSync(file, 'utf-8');
819
- yield parseDocument({ path: file, content });
820
- } catch {
821
- // File not readable, skip
822
- }
823
- }
824
- } catch {
825
- // Directory not accessible, skip
826
- }
827
- }
828
- }
829
-
830
- async healthCheck(): Promise<boolean> {
831
- const fs = await import('fs');
832
- return this.docPaths.some(p => {
833
- try { return fs.statSync(p).isDirectory(); } catch { return false; }
834
- });
835
- }
836
-
837
- private walkDir(dir: string, fs: any, path: any): string[] {
838
- const results: string[] = [];
839
- try {
840
- const entries = fs.readdirSync(dir, { withFileTypes: true });
841
- for (const entry of entries) {
842
- const full = path.join(dir, entry.name);
843
- if (entry.isDirectory() && !entry.name.startsWith('.')) {
844
- results.push(...this.walkDir(full, fs, path));
845
- } else if (entry.isFile()) {
846
- results.push(full);
847
- }
848
- }
849
- } catch { /* not accessible */ }
850
- return results;
851
- }
852
- }
853
- ```
854
-
855
- - [ ] **Step 3: Run tests, commit**
856
-
857
- Run: `npx vitest run tests/lib/cortex/signals/adapters/document.test.ts`
858
-
859
- ```bash
860
- git commit -m "feat(cortex): add document signal adapter"
861
- ```
862
-
863
- ---
864
-
865
- ## Chunk 3: Integration and Barrel Export
866
-
867
- ### Task 6: Barrel export and CortexInstance integration
868
-
869
- **Files:**
870
- - Create: `src/lib/cortex/signals/index.ts`
871
- - Modify: `src/lib/cortex/index.ts`
872
-
873
- - [ ] **Step 1: Create barrel export**
874
-
875
- ```typescript
876
- // src/lib/cortex/signals/index.ts
877
- export { SignalPipeline } from './pipeline';
878
- export type { SignalPipelineDeps } from './pipeline';
879
- export { ConversationAdapter } from './adapters/conversation';
880
- export { GitAdapter, parseGitLog } from './adapters/git';
881
- export type { GitLogEntry } from './adapters/git';
882
- export { DocumentAdapter, parseDocument, classifyDocument } from './adapters/document';
883
- export type { DocumentInput } from './adapters/document';
884
- export type { SignalEnvelope, SignalAdapter, IngestResult, EdgeUpdate } from './types';
885
- ```
886
-
887
- - [ ] **Step 2: Add SignalPipeline to CortexInstance**
888
-
889
- Read `src/lib/cortex/index.ts`. Add:
890
-
891
- 1. Import: `import { SignalPipeline } from './signals/pipeline';`
892
- 2. Add `signalPipeline?: SignalPipeline` to CortexInstance interface
893
- 3. In getCortex(), after graph/resolver initialization:
894
-
895
- ```typescript
896
- const signalPipeline = new SignalPipeline({ store, embedding, graph, resolver });
897
- ```
898
-
899
- 4. Include in instance object.
900
-
901
- - [ ] **Step 3: Run full test suite**
902
-
903
- Run: `npx vitest run tests/lib/cortex/`
904
-
905
- - [ ] **Step 4: Commit**
906
-
907
- ```bash
908
- git add src/lib/cortex/signals/index.ts src/lib/cortex/index.ts
909
- git commit -m "feat(cortex): add signal module barrel export and CortexInstance integration"
910
- ```
911
-
912
- ---
913
-
914
- ## Summary
915
-
916
- | Task | Component | Tests | Status |
917
- |------|-----------|-------|--------|
918
- | 1 | Signal types | — | |
919
- | 2 | Unified SignalPipeline | 8 | |
920
- | 3 | Conversation adapter | — | |
921
- | 4 | Git history adapter | 5 | |
922
- | 5 | Document adapter | 6 | |
923
- | 6 | Barrel export + integration | regression | |
924
-
925
- **Total: 6 tasks, ~19 new tests, 3 chunks**
926
-
927
- **Deferred adapters** (require external APIs/webhooks — implement when infrastructure is ready):
928
- - PR Review adapter (GitHub API)
929
- - Test Signal adapter (CI pipeline webhook)
930
- - Deployment adapter (deploy system webhook)
931
- - Behavioral Inference adapter (daily cron analyzing accumulated signals)
932
-
933
- Each deferred adapter = implement `SignalAdapter` interface + test, zero changes to SignalPipeline.