@jlongo78/agent-spaces 0.9.8 → 0.9.9

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 (356) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +3 -0
  3. package/.next/standalone/.next/build-manifest.json +2 -2
  4. package/.next/standalone/.next/prerender-manifest.json +3 -3
  5. package/.next/standalone/.next/routes-manifest.json +23 -0
  6. package/.next/standalone/.next/server/app/(desktop)/admin/analytics/page.js.nft.json +1 -1
  7. package/.next/standalone/.next/server/app/(desktop)/admin/analytics/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/(desktop)/admin/users/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(desktop)/analytics/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/(desktop)/cortex/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/(desktop)/network/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/(desktop)/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/(desktop)/projects/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/(desktop)/sessions/[id]/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(desktop)/sessions/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/(desktop)/settings/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/(desktop)/terminal/page.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/(desktop)/terminal/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/(desktop)/terminal/pane/[id]/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/(desktop)/terminal/remote/[nodeId]/[workspaceId]/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/(desktop)/workspaces/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/_global-error.html +2 -2
  23. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  24. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  25. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  26. package/.next/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  27. package/.next/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  28. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  29. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  31. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  32. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  33. package/.next/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  34. package/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  35. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  36. package/.next/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  37. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  38. package/.next/standalone/.next/server/app/admin/analytics.html +1 -1
  39. package/.next/standalone/.next/server/app/admin/analytics.rsc +3 -3
  40. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics/__PAGE__.segment.rsc +2 -2
  41. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin/analytics.segment.rsc +1 -1
  42. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  43. package/.next/standalone/.next/server/app/admin/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  44. package/.next/standalone/.next/server/app/admin/analytics.segments/_full.segment.rsc +3 -3
  45. package/.next/standalone/.next/server/app/admin/analytics.segments/_head.segment.rsc +1 -1
  46. package/.next/standalone/.next/server/app/admin/analytics.segments/_index.segment.rsc +2 -2
  47. package/.next/standalone/.next/server/app/admin/analytics.segments/_tree.segment.rsc +2 -2
  48. package/.next/standalone/.next/server/app/admin/users.html +1 -1
  49. package/.next/standalone/.next/server/app/admin/users.rsc +2 -2
  50. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users/__PAGE__.segment.rsc +1 -1
  51. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin/users.segment.rsc +1 -1
  52. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap/admin.segment.rsc +1 -1
  53. package/.next/standalone/.next/server/app/admin/users.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  54. package/.next/standalone/.next/server/app/admin/users.segments/_full.segment.rsc +2 -2
  55. package/.next/standalone/.next/server/app/admin/users.segments/_head.segment.rsc +1 -1
  56. package/.next/standalone/.next/server/app/admin/users.segments/_index.segment.rsc +2 -2
  57. package/.next/standalone/.next/server/app/admin/users.segments/_tree.segment.rsc +2 -2
  58. package/.next/standalone/.next/server/app/analytics.html +1 -1
  59. package/.next/standalone/.next/server/app/analytics.rsc +2 -2
  60. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics/__PAGE__.segment.rsc +1 -1
  61. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap/analytics.segment.rsc +1 -1
  62. package/.next/standalone/.next/server/app/analytics.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  63. package/.next/standalone/.next/server/app/analytics.segments/_full.segment.rsc +2 -2
  64. package/.next/standalone/.next/server/app/analytics.segments/_head.segment.rsc +1 -1
  65. package/.next/standalone/.next/server/app/analytics.segments/_index.segment.rsc +2 -2
  66. package/.next/standalone/.next/server/app/analytics.segments/_tree.segment.rsc +2 -2
  67. package/.next/standalone/.next/server/app/api/claude/usage/route/app-paths-manifest.json +3 -0
  68. package/.next/standalone/.next/server/app/api/claude/usage/route/build-manifest.json +11 -0
  69. package/.next/standalone/.next/server/app/api/claude/usage/route/server-reference-manifest.json +4 -0
  70. package/.next/standalone/.next/server/app/api/claude/usage/route.js +8 -0
  71. package/.next/standalone/.next/server/app/api/claude/usage/route.js.map +5 -0
  72. package/.next/standalone/.next/server/app/api/claude/usage/route.js.nft.json +1 -0
  73. package/.next/standalone/.next/server/app/api/claude/usage/route_client-reference-manifest.js +2 -0
  74. package/.next/standalone/.next/server/app/api/whisper/route.js.nft.json +1 -1
  75. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route/app-paths-manifest.json +3 -0
  76. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route/build-manifest.json +11 -0
  77. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route/server-reference-manifest.json +4 -0
  78. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route.js +8 -0
  79. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route.js.map +5 -0
  80. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route.js.nft.json +1 -0
  81. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/[todoId]/route_client-reference-manifest.js +2 -0
  82. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route/app-paths-manifest.json +3 -0
  83. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route/build-manifest.json +11 -0
  84. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route/server-reference-manifest.json +4 -0
  85. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route.js +8 -0
  86. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route.js.map +5 -0
  87. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route.js.nft.json +1 -0
  88. package/.next/standalone/.next/server/app/api/workspaces/[id]/todos/route_client-reference-manifest.js +2 -0
  89. package/.next/standalone/.next/server/app/cortex.html +1 -1
  90. package/.next/standalone/.next/server/app/cortex.rsc +2 -2
  91. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex/__PAGE__.segment.rsc +1 -1
  92. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap/cortex.segment.rsc +1 -1
  93. package/.next/standalone/.next/server/app/cortex.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  94. package/.next/standalone/.next/server/app/cortex.segments/_full.segment.rsc +2 -2
  95. package/.next/standalone/.next/server/app/cortex.segments/_head.segment.rsc +1 -1
  96. package/.next/standalone/.next/server/app/cortex.segments/_index.segment.rsc +2 -2
  97. package/.next/standalone/.next/server/app/cortex.segments/_tree.segment.rsc +2 -2
  98. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/login.html +1 -1
  100. package/.next/standalone/.next/server/app/login.rsc +2 -2
  101. package/.next/standalone/.next/server/app/login.segments/_full.segment.rsc +2 -2
  102. package/.next/standalone/.next/server/app/login.segments/_head.segment.rsc +1 -1
  103. package/.next/standalone/.next/server/app/login.segments/_index.segment.rsc +2 -2
  104. package/.next/standalone/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  105. package/.next/standalone/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  106. package/.next/standalone/.next/server/app/login.segments/login.segment.rsc +1 -1
  107. package/.next/standalone/.next/server/app/m/page_client-reference-manifest.js +1 -1
  108. package/.next/standalone/.next/server/app/m/projects/page_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/m/projects.html +1 -1
  110. package/.next/standalone/.next/server/app/m/projects.rsc +2 -2
  111. package/.next/standalone/.next/server/app/m/projects.segments/_full.segment.rsc +2 -2
  112. package/.next/standalone/.next/server/app/m/projects.segments/_head.segment.rsc +1 -1
  113. package/.next/standalone/.next/server/app/m/projects.segments/_index.segment.rsc +2 -2
  114. package/.next/standalone/.next/server/app/m/projects.segments/_tree.segment.rsc +2 -2
  115. package/.next/standalone/.next/server/app/m/projects.segments/m/projects/__PAGE__.segment.rsc +1 -1
  116. package/.next/standalone/.next/server/app/m/projects.segments/m/projects.segment.rsc +1 -1
  117. package/.next/standalone/.next/server/app/m/projects.segments/m.segment.rsc +1 -1
  118. package/.next/standalone/.next/server/app/m/sessions/[id]/page_client-reference-manifest.js +1 -1
  119. package/.next/standalone/.next/server/app/m/sessions/page_client-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/app/m/sessions.html +1 -1
  121. package/.next/standalone/.next/server/app/m/sessions.rsc +2 -2
  122. package/.next/standalone/.next/server/app/m/sessions.segments/_full.segment.rsc +2 -2
  123. package/.next/standalone/.next/server/app/m/sessions.segments/_head.segment.rsc +1 -1
  124. package/.next/standalone/.next/server/app/m/sessions.segments/_index.segment.rsc +2 -2
  125. package/.next/standalone/.next/server/app/m/sessions.segments/_tree.segment.rsc +2 -2
  126. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions/__PAGE__.segment.rsc +1 -1
  127. package/.next/standalone/.next/server/app/m/sessions.segments/m/sessions.segment.rsc +1 -1
  128. package/.next/standalone/.next/server/app/m/sessions.segments/m.segment.rsc +1 -1
  129. package/.next/standalone/.next/server/app/m/settings/page_client-reference-manifest.js +1 -1
  130. package/.next/standalone/.next/server/app/m/settings.html +1 -1
  131. package/.next/standalone/.next/server/app/m/settings.rsc +2 -2
  132. package/.next/standalone/.next/server/app/m/settings.segments/_full.segment.rsc +2 -2
  133. package/.next/standalone/.next/server/app/m/settings.segments/_head.segment.rsc +1 -1
  134. package/.next/standalone/.next/server/app/m/settings.segments/_index.segment.rsc +2 -2
  135. package/.next/standalone/.next/server/app/m/settings.segments/_tree.segment.rsc +2 -2
  136. package/.next/standalone/.next/server/app/m/settings.segments/m/settings/__PAGE__.segment.rsc +1 -1
  137. package/.next/standalone/.next/server/app/m/settings.segments/m/settings.segment.rsc +1 -1
  138. package/.next/standalone/.next/server/app/m/settings.segments/m.segment.rsc +1 -1
  139. package/.next/standalone/.next/server/app/m/terminal/page_client-reference-manifest.js +1 -1
  140. package/.next/standalone/.next/server/app/m/terminal.html +1 -1
  141. package/.next/standalone/.next/server/app/m/terminal.rsc +2 -2
  142. package/.next/standalone/.next/server/app/m/terminal.segments/_full.segment.rsc +2 -2
  143. package/.next/standalone/.next/server/app/m/terminal.segments/_head.segment.rsc +1 -1
  144. package/.next/standalone/.next/server/app/m/terminal.segments/_index.segment.rsc +2 -2
  145. package/.next/standalone/.next/server/app/m/terminal.segments/_tree.segment.rsc +2 -2
  146. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal/__PAGE__.segment.rsc +1 -1
  147. package/.next/standalone/.next/server/app/m/terminal.segments/m/terminal.segment.rsc +1 -1
  148. package/.next/standalone/.next/server/app/m/terminal.segments/m.segment.rsc +1 -1
  149. package/.next/standalone/.next/server/app/m.html +1 -1
  150. package/.next/standalone/.next/server/app/m.rsc +2 -2
  151. package/.next/standalone/.next/server/app/m.segments/_full.segment.rsc +2 -2
  152. package/.next/standalone/.next/server/app/m.segments/_head.segment.rsc +1 -1
  153. package/.next/standalone/.next/server/app/m.segments/_index.segment.rsc +2 -2
  154. package/.next/standalone/.next/server/app/m.segments/_tree.segment.rsc +2 -2
  155. package/.next/standalone/.next/server/app/m.segments/m/__PAGE__.segment.rsc +1 -1
  156. package/.next/standalone/.next/server/app/m.segments/m.segment.rsc +1 -1
  157. package/.next/standalone/.next/server/app/network.html +1 -1
  158. package/.next/standalone/.next/server/app/network.rsc +2 -2
  159. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network/__PAGE__.segment.rsc +1 -1
  160. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap/network.segment.rsc +1 -1
  161. package/.next/standalone/.next/server/app/network.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  162. package/.next/standalone/.next/server/app/network.segments/_full.segment.rsc +2 -2
  163. package/.next/standalone/.next/server/app/network.segments/_head.segment.rsc +1 -1
  164. package/.next/standalone/.next/server/app/network.segments/_index.segment.rsc +2 -2
  165. package/.next/standalone/.next/server/app/network.segments/_tree.segment.rsc +2 -2
  166. package/.next/standalone/.next/server/app/projects.html +1 -1
  167. package/.next/standalone/.next/server/app/projects.rsc +2 -2
  168. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects/__PAGE__.segment.rsc +1 -1
  169. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap/projects.segment.rsc +1 -1
  170. package/.next/standalone/.next/server/app/projects.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  171. package/.next/standalone/.next/server/app/projects.segments/_full.segment.rsc +2 -2
  172. package/.next/standalone/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  173. package/.next/standalone/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  174. package/.next/standalone/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  175. package/.next/standalone/.next/server/app/sessions.html +1 -1
  176. package/.next/standalone/.next/server/app/sessions.rsc +2 -2
  177. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions/__PAGE__.segment.rsc +1 -1
  178. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap/sessions.segment.rsc +1 -1
  179. package/.next/standalone/.next/server/app/sessions.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  180. package/.next/standalone/.next/server/app/sessions.segments/_full.segment.rsc +2 -2
  181. package/.next/standalone/.next/server/app/sessions.segments/_head.segment.rsc +1 -1
  182. package/.next/standalone/.next/server/app/sessions.segments/_index.segment.rsc +2 -2
  183. package/.next/standalone/.next/server/app/sessions.segments/_tree.segment.rsc +2 -2
  184. package/.next/standalone/.next/server/app/settings.html +1 -1
  185. package/.next/standalone/.next/server/app/settings.rsc +3 -3
  186. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings/__PAGE__.segment.rsc +2 -2
  187. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap/settings.segment.rsc +1 -1
  188. package/.next/standalone/.next/server/app/settings.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  189. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  190. package/.next/standalone/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  191. package/.next/standalone/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  192. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  193. package/.next/standalone/.next/server/app/terminal.html +1 -1
  194. package/.next/standalone/.next/server/app/terminal.rsc +3 -3
  195. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal/__PAGE__.segment.rsc +2 -2
  196. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap/terminal.segment.rsc +1 -1
  197. package/.next/standalone/.next/server/app/terminal.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  198. package/.next/standalone/.next/server/app/terminal.segments/_full.segment.rsc +3 -3
  199. package/.next/standalone/.next/server/app/terminal.segments/_head.segment.rsc +1 -1
  200. package/.next/standalone/.next/server/app/terminal.segments/_index.segment.rsc +2 -2
  201. package/.next/standalone/.next/server/app/terminal.segments/_tree.segment.rsc +2 -2
  202. package/.next/standalone/.next/server/app/vr/page_client-reference-manifest.js +1 -1
  203. package/.next/standalone/.next/server/app/vr.html +1 -1
  204. package/.next/standalone/.next/server/app/vr.rsc +2 -2
  205. package/.next/standalone/.next/server/app/vr.segments/_full.segment.rsc +2 -2
  206. package/.next/standalone/.next/server/app/vr.segments/_head.segment.rsc +1 -1
  207. package/.next/standalone/.next/server/app/vr.segments/_index.segment.rsc +2 -2
  208. package/.next/standalone/.next/server/app/vr.segments/_tree.segment.rsc +2 -2
  209. package/.next/standalone/.next/server/app/vr.segments/vr/__PAGE__.segment.rsc +1 -1
  210. package/.next/standalone/.next/server/app/vr.segments/vr.segment.rsc +1 -1
  211. package/.next/standalone/.next/server/app/workspaces.html +1 -1
  212. package/.next/standalone/.next/server/app/workspaces.rsc +2 -2
  213. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces/__PAGE__.segment.rsc +1 -1
  214. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap/workspaces.segment.rsc +1 -1
  215. package/.next/standalone/.next/server/app/workspaces.segments/!KGRlc2t0b3Ap.segment.rsc +1 -1
  216. package/.next/standalone/.next/server/app/workspaces.segments/_full.segment.rsc +2 -2
  217. package/.next/standalone/.next/server/app/workspaces.segments/_head.segment.rsc +1 -1
  218. package/.next/standalone/.next/server/app/workspaces.segments/_index.segment.rsc +2 -2
  219. package/.next/standalone/.next/server/app/workspaces.segments/_tree.segment.rsc +2 -2
  220. package/.next/standalone/.next/server/app-paths-manifest.json +3 -0
  221. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00e90fc6._.js +15 -2
  222. package/.next/standalone/.next/server/chunks/[root-of-the-server]__01ab8675._.js +15 -2
  223. package/.next/standalone/.next/server/chunks/[root-of-the-server]__03974f05._.js +15 -2
  224. package/.next/standalone/.next/server/chunks/[root-of-the-server]__046c9b91._.js +15 -2
  225. package/.next/standalone/.next/server/chunks/[root-of-the-server]__04ae6bf0._.js +15 -2
  226. package/.next/standalone/.next/server/chunks/[root-of-the-server]__056fa416._.js +1 -1
  227. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ac4ea3f._.js +1 -1
  228. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0b8e64cb._.js +15 -2
  229. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0facd39e._.js +15 -2
  230. package/.next/standalone/.next/server/chunks/[root-of-the-server]__10bc76a3._.js +1 -1
  231. package/.next/standalone/.next/server/chunks/[root-of-the-server]__115f3934._.js +15 -2
  232. package/.next/standalone/.next/server/chunks/[root-of-the-server]__11f155f1._.js +1 -1
  233. package/.next/standalone/.next/server/chunks/[root-of-the-server]__160e7c73._.js +52 -24
  234. package/.next/standalone/.next/server/chunks/[root-of-the-server]__17a3b966._.js +15 -2
  235. package/.next/standalone/.next/server/chunks/[root-of-the-server]__17d3a2b2._.js +15 -2
  236. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1a86c055._.js +15 -2
  237. package/.next/standalone/.next/server/chunks/[root-of-the-server]__20b5e9c4._.js +1 -1
  238. package/.next/standalone/.next/server/chunks/[root-of-the-server]__28d6fbd8._.js +15 -2
  239. package/.next/standalone/.next/server/chunks/[root-of-the-server]__2a3f866b._.js +16 -3
  240. package/.next/standalone/.next/server/chunks/[root-of-the-server]__316617e7._.js +2 -2
  241. package/.next/standalone/.next/server/chunks/[root-of-the-server]__32ad8f71._.js +15 -2
  242. package/.next/standalone/.next/server/chunks/[root-of-the-server]__35457394._.js +15 -2
  243. package/.next/standalone/.next/server/chunks/[root-of-the-server]__35de78e6._.js +15 -2
  244. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3685ffcb._.js +15 -2
  245. package/.next/standalone/.next/server/chunks/[root-of-the-server]__38954988._.js +15 -2
  246. package/.next/standalone/.next/server/chunks/[root-of-the-server]__3a32b624._.js +111 -0
  247. package/.next/standalone/.next/server/chunks/[root-of-the-server]__426ad936._.js +17 -4
  248. package/.next/standalone/.next/server/chunks/[root-of-the-server]__4985c034._.js +15 -2
  249. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5c6ce9ed._.js +16 -3
  250. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5cebe58a._.js +15 -2
  251. package/.next/standalone/.next/server/chunks/[root-of-the-server]__5d5e4789._.js +15 -2
  252. package/.next/standalone/.next/server/chunks/[root-of-the-server]__65676930._.js +1 -1
  253. package/.next/standalone/.next/server/chunks/[root-of-the-server]__67cab326._.js +2 -2
  254. package/.next/standalone/.next/server/chunks/[root-of-the-server]__698c6f01._.js +16 -3
  255. package/.next/standalone/.next/server/chunks/[root-of-the-server]__6c64af29._.js +22 -9
  256. package/.next/standalone/.next/server/chunks/[root-of-the-server]__73aed9f5._.js +15 -2
  257. package/.next/standalone/.next/server/chunks/[root-of-the-server]__79b6a9bb._.js +15 -2
  258. package/.next/standalone/.next/server/chunks/[root-of-the-server]__7db704c6._.js +17 -4
  259. package/.next/standalone/.next/server/chunks/[root-of-the-server]__812ca02b._.js +15 -2
  260. package/.next/standalone/.next/server/chunks/[root-of-the-server]__821f50fa._.js +15 -2
  261. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8716b86e._.js +15 -2
  262. package/.next/standalone/.next/server/chunks/[root-of-the-server]__884ef754._.js +15 -2
  263. package/.next/standalone/.next/server/chunks/[root-of-the-server]__88cdbd68._.js +15 -2
  264. package/.next/standalone/.next/server/chunks/[root-of-the-server]__89d9aba9._.js +15 -2
  265. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8c2e1260._.js +111 -0
  266. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8d536cb5._.js +15 -2
  267. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8df8c5d1._.js +15 -2
  268. package/.next/standalone/.next/server/chunks/[root-of-the-server]__8f2ccc41._.js +15 -2
  269. package/.next/standalone/.next/server/chunks/[root-of-the-server]__95c9d682._.js +15 -2
  270. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9e5d7774._.js +15 -2
  271. package/.next/standalone/.next/server/chunks/[root-of-the-server]__9edcff87._.js +15 -2
  272. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a049dfc2._.js +15 -2
  273. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a5b4bb9a._.js +16 -3
  274. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a83262a1._.js +15 -2
  275. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9cd1240._.js +15 -2
  276. package/.next/standalone/.next/server/chunks/[root-of-the-server]__a9d7f822._.js +15 -2
  277. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ad08c221._.js +15 -2
  278. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ad585f2f._.js +15 -2
  279. package/.next/standalone/.next/server/chunks/[root-of-the-server]__afcb8f7d._.js +15 -2
  280. package/.next/standalone/.next/server/chunks/[root-of-the-server]__bc250d43._.js +15 -2
  281. package/.next/standalone/.next/server/chunks/[root-of-the-server]__bce2a6e7._.js +15 -2
  282. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c011bf91._.js +15 -2
  283. package/.next/standalone/.next/server/chunks/[root-of-the-server]__c37d6380._.js +1 -1
  284. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cae392eb._.js +15 -2
  285. package/.next/standalone/.next/server/chunks/[root-of-the-server]__cc2616bb._.js +16 -3
  286. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d501fa9b._.js +15 -2
  287. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d59c6c15._.js +16 -3
  288. package/.next/standalone/.next/server/chunks/[root-of-the-server]__d5c1db32._.js +15 -2
  289. package/.next/standalone/.next/server/chunks/[root-of-the-server]__dba60c86._.js +15 -2
  290. package/.next/standalone/.next/server/chunks/[root-of-the-server]__de14b9ae._.js +15 -2
  291. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e10643d1._.js +15 -2
  292. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e2a996e5._.js +23 -10
  293. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e3477417._.js +15 -2
  294. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e4db362e._.js +1 -1
  295. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e4e70b86._.js +15 -2
  296. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e54925af._.js +15 -2
  297. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e8cbeaca._.js +111 -0
  298. package/.next/standalone/.next/server/chunks/[root-of-the-server]__e8edc5b0._.js +15 -2
  299. package/.next/standalone/.next/server/chunks/[root-of-the-server]__eab4d83b._.js +15 -2
  300. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ead29015._.js +1 -1
  301. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f056fd83._.js +15 -2
  302. package/.next/standalone/.next/server/chunks/[root-of-the-server]__f0e99572._.js +15 -2
  303. package/.next/standalone/.next/server/chunks/[root-of-the-server]__fe1e16d0._.js +15 -2
  304. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ff9cd277._.js +15 -2
  305. package/.next/standalone/.next/server/chunks/[root-of-the-server]__ffaea2ce._.js +15 -2
  306. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_claude_usage_route_actions_fe002ec1.js +3 -0
  307. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_workspaces_[id]_todos_route_actions_0d4ffac5.js +3 -0
  308. package/.next/standalone/.next/server/chunks/ce889_server_app_api_workspaces_[id]_todos_[todoId]_route_actions_754fe6b9.js +3 -0
  309. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__66aca5d4._.js +1 -1
  310. package/.next/standalone/.next/server/chunks/ssr/{_17b946fd._.js → _20c2cf3a._.js} +2 -2
  311. package/.next/standalone/.next/server/chunks/ssr/_5f55bf8f._.js +3 -0
  312. package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_settings_page_tsx_f74824b3._.js +1 -1
  313. package/.next/standalone/.next/server/chunks/ssr/src_app_(desktop)_terminal_page_tsx_de5e8d85._.js +1 -1
  314. package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__90eeddae._.js +1 -1
  315. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  316. package/.next/standalone/.next/server/pages/404.html +1 -1
  317. package/.next/standalone/.next/server/pages/500.html +2 -2
  318. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  319. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  320. package/.next/standalone/.next/static/chunks/14216197f9dcbe5b.css +3 -0
  321. package/.next/standalone/.next/static/chunks/{0852575eb90c1e8d.js → 4c9fb0a38f041a3d.js} +2 -2
  322. package/.next/standalone/.next/static/chunks/8f6f93ab45a5ff5b.js +1 -0
  323. package/.next/standalone/.next/static/chunks/{e62bb488d02db247.js → d2566c2dcf53fef3.js} +1 -1
  324. package/.next/standalone/.next/static/chunks/{7f6a14f1849fa94d.js → ff7d85dade44d1f3.js} +1 -1
  325. package/.next/standalone/cortex-hook-debug.log +61 -0
  326. package/.next/standalone/docs/features/claude-usage.md +105 -0
  327. package/.next/standalone/docs/features/workspace-todos.md +127 -0
  328. package/.next/standalone/docs/superpowers/plans/2026-04-21-workspace-todos.md +1097 -0
  329. package/.next/standalone/docs/superpowers/plans/2026-04-22-claude-usage-display.md +749 -0
  330. package/.next/standalone/docs/superpowers/specs/2026-04-21-workspace-todos-design.md +180 -0
  331. package/.next/standalone/docs/superpowers/specs/2026-04-22-claude-usage-display-design.md +183 -0
  332. package/.next/standalone/package-lock.json +2 -2
  333. package/.next/standalone/package.json +1 -1
  334. package/.next/standalone/src/app/(desktop)/settings/page.tsx +40 -1
  335. package/.next/standalone/src/app/(desktop)/terminal/page.tsx +54 -2
  336. package/.next/standalone/src/app/api/claude/usage/route.ts +33 -0
  337. package/.next/standalone/src/app/api/config/route.ts +3 -0
  338. package/.next/standalone/src/app/api/workspaces/[id]/todos/[todoId]/route.ts +55 -0
  339. package/.next/standalone/src/app/api/workspaces/[id]/todos/route.ts +43 -0
  340. package/.next/standalone/src/components/claude/claude-usage-strip.tsx +175 -0
  341. package/.next/standalone/src/components/workspace/workspace-todos.tsx +265 -0
  342. package/.next/standalone/src/hooks/use-claude-usage.ts +66 -0
  343. package/.next/standalone/src/lib/claude/credentials.ts +36 -0
  344. package/.next/standalone/src/lib/claude/usage.ts +69 -0
  345. package/.next/standalone/src/lib/config.ts +3 -0
  346. package/.next/standalone/src/lib/db/queries.ts +103 -1
  347. package/.next/standalone/src/lib/db/schema.ts +18 -0
  348. package/.next/standalone/src/types/claude.ts +39 -0
  349. package/.next/standalone/tests/db/workspace-todos.test.ts +156 -0
  350. package/package.json +1 -1
  351. package/.next/standalone/.next/server/chunks/ssr/_3ba93bdd._.js +0 -3
  352. package/.next/standalone/.next/static/chunks/074df89a63b6a854.js +0 -1
  353. package/.next/standalone/.next/static/chunks/2b769d1597e4fc1c.css +0 -3
  354. /package/.next/standalone/.next/static/{u1pHON3drz1mBi7owkbBP → bAQs2gDlFrq3e8w9ni9tr}/_buildManifest.js +0 -0
  355. /package/.next/standalone/.next/static/{u1pHON3drz1mBi7owkbBP → bAQs2gDlFrq3e8w9ni9tr}/_clientMiddlewareManifest.json +0 -0
  356. /package/.next/standalone/.next/static/{u1pHON3drz1mBi7owkbBP → bAQs2gDlFrq3e8w9ni9tr}/_ssgManifest.js +0 -0
@@ -55,3 +55,64 @@
55
55
  [2026-04-19T13:39:55.433Z] Querying: http://localhost:3457/api/cortex/context/?q=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&limit=5&workspace_id=2 (event: UserPromptSubmit)
56
56
  [2026-04-19T13:39:55.467Z] Main error: 307
57
57
  [2026-04-19T13:39:55.467Z] Hook finished
58
+ [2026-04-19T13:42:05.596Z] [LEARN] Learn hook started
59
+ [2026-04-19T13:42:05.605Z] [LEARN] Input length: 573
60
+ [2026-04-19T13:42:05.615Z] [LEARN] Sending POST to http://localhost:3457/api/cortex/knowledge/
61
+ [2026-04-19T13:42:05.657Z] [LEARN] Response: 307
62
+ [2026-04-19T13:42:36.645Z] Hook started
63
+ [2026-04-19T13:42:36.651Z] Input length: 356
64
+ [2026-04-19T13:42:36.652Z] Querying: http://localhost:3457/api/cortex/context/?q=this%20is%20my%20pc%20--%20why%20does%20it%20matter%20if%20it's%20exposed%20in%20the%20conversation%3F&limit=5&workspace_id=2 (event: UserPromptSubmit)
65
+ [2026-04-19T13:42:36.692Z] Main error: 307
66
+ [2026-04-19T13:42:36.693Z] Hook finished
67
+ [2026-04-19T13:42:48.628Z] [LEARN] Learn hook started
68
+ [2026-04-19T13:42:48.803Z] [LEARN] Input length: 1549
69
+ [2026-04-19T13:42:48.814Z] [LEARN] Sending POST to http://localhost:3457/api/cortex/knowledge/
70
+ [2026-04-19T13:42:48.851Z] [LEARN] Response: 307
71
+ [2026-04-19T13:43:13.309Z] Hook started
72
+ [2026-04-19T13:43:13.315Z] Input length: 325
73
+ [2026-04-19T13:43:13.315Z] Querying: http://localhost:3457/api/cortex/context/?q=how%20do%20I%20check%20to%20see%20if%20telemetry%20is%20on%3F&limit=5&workspace_id=2 (event: UserPromptSubmit)
74
+ [2026-04-19T13:43:13.350Z] Main error: 307
75
+ [2026-04-19T13:43:13.350Z] Hook finished
76
+ [2026-04-19T13:43:53.691Z] [LEARN] Learn hook started
77
+ [2026-04-19T13:43:53.703Z] [LEARN] Input length: 1307
78
+ [2026-04-19T13:43:53.713Z] [LEARN] Sending POST to http://localhost:3457/api/cortex/knowledge/
79
+ [2026-04-19T13:43:53.750Z] [LEARN] Response: 307
80
+ [2026-04-19T13:48:18.876Z] Hook started
81
+ [2026-04-19T13:48:18.882Z] Input length: 287
82
+ [2026-04-19T13:48:18.882Z] Prompt too short
83
+ [2026-04-19T13:52:11.498Z] [LEARN] Learn hook started
84
+ [2026-04-19T13:52:11.505Z] [LEARN] Input length: 354
85
+ [2026-04-19T13:52:11.514Z] [LEARN] Sending POST to http://localhost:3457/api/cortex/knowledge/
86
+ [2026-04-19T13:52:11.557Z] [LEARN] Response: 307
87
+ [2026-04-19T13:52:37.908Z] Hook started
88
+ [2026-04-19T13:52:37.914Z] Input length: 314
89
+ [2026-04-19T13:52:37.916Z] Querying: http://localhost:3457/api/cortex/context/?q=add%20that%20to%20my%20claude%20settings&limit=5&workspace_id=2 (event: UserPromptSubmit)
90
+ [2026-04-19T13:52:37.948Z] Main error: 307
91
+ [2026-04-19T13:52:37.949Z] Hook finished
92
+ [2026-04-19T13:53:23.519Z] [LEARN] Learn hook started
93
+ [2026-04-19T13:53:23.529Z] [LEARN] Input length: 532
94
+ [2026-04-19T13:53:23.541Z] [LEARN] Sending POST to http://localhost:3457/api/cortex/knowledge/
95
+ [2026-04-19T13:53:23.579Z] [LEARN] Response: 307
96
+ [2026-04-22T17:51:18.661Z] Hook started
97
+ [2026-04-22T17:51:18.668Z] Input length: 326
98
+ [2026-04-22T17:51:18.669Z] Querying: http://localhost:3457/api/cortex/context/?q=update%20ffrom%20github%20and%20push%20a%20new%20npm%20release&limit=5&workspace_id=2 (event: UserPromptSubmit)
99
+ [2026-04-22T17:51:18.696Z] Main error:
100
+ [2026-04-22T17:51:18.696Z] Hook finished
101
+ [2026-04-22T17:51:58.962Z] [LEARN] Learn hook started
102
+ [2026-04-22T17:51:58.968Z] [LEARN] Input length: 559
103
+ [2026-04-22T17:51:58.976Z] [LEARN] Sending POST to http://localhost:3457/api/cortex/knowledge/
104
+ [2026-04-22T17:51:59.003Z] [LEARN] Request error:
105
+ [2026-04-22T18:06:02.839Z] Hook started
106
+ [2026-04-22T18:06:02.845Z] Input length: 1514
107
+ [2026-04-22T18:06:02.846Z] Querying: http://localhost:3457/api/cortex/context/?q=npm%20notice%201.4kB%20bin%2Fspaces-reset-totp.js%0Anpm%20notice%2036.8kB%20bin%2Fspaces-service.js%0Anpm%20notice%208.9kB%20bin%2Fspaces-setup.js%0Anpm%20notice%2033.6kB%20bin%2Fspaces.js%0Anpm%20notice%202.3kB%20bin%2Fssh-auth-keys.sh%0Anpm%20notice%20108.5kB%20bin%2Fterminal-server.js%0Anpm%20notice%203.4kB%20package.json%0Anpm%20notice%20Tarball%20Details%0Anpm%20notice%20name%3A%20%40jlongo78%2Fagent-spaces%0Anpm%20notice%20version%3A%200.9.9%0Anpm%20notice%20filename%3A%20jlongo78-agent-spaces-0.9.9.tgz%0Anpm%20notice%20package%20size%3A%2018.5%20MB%0Anpm%20notice%20unpacked%20size%3A%2089.8%20MB%0Anpm%20notice%20shasum%3A%2051e72b721f4acb1c8310031c78f24475639d870c%0Anpm%20notice%20integrity%3A%20sha512-L3MTwHtZpUSCN%5B...%5DY1n6%2FUIyMlpYA%3D%3D%0Anpm%20notice%20total%20files%3A%203341%0Anpm%20notice%0Anpm%20notice%20Publishing%20to%20https%3A%2F%2Fregistry.npmjs.org%2F%20with%20tag%20latest%20and%20public%20access%0Anpm%20error%20code%20E404%0Anpm%20error%20404%20Not%20Found%20-%20PUT%20https%3A%2F%2Fregistry.npmjs.org%2F%40jlongo78%252fagent-spaces%20-%20Not%20found%0Anpm%20error%20404%0Anpm%20error%20404%20%20'%40jlongo78%2Fagent-spaces%400.9.9'%20is%20not%20in%20this%20registry.%0Anpm%20error%20404%0Anpm%20error%20404%20Note%20that%20you%20can%20also%20install%20from%20a%0Anpm%20error%20404%20tarball%2C%20folder%2C%20http%20url%2C%20or%20git%20url.%0Anpm%20error%20A%20complete%20log%20of%20this%20run%20can%20be%20found%20in%3A%20C%3A%5CUsers%5Cjohns%5CAppData%5CLocal%5Cnpm-cache%5C_logs%5C2026-04-22T18_01_12_712Z-debug-0.log%0A%0AD%3A%5Cprojects%5Cspaces%3E&limit=5&workspace_id=2 (event: UserPromptSubmit)
108
+ [2026-04-22T18:06:02.872Z] Main error:
109
+ [2026-04-22T18:06:02.873Z] Hook finished
110
+ [2026-04-22T18:06:14.831Z] [LEARN] Learn hook started
111
+ [2026-04-22T18:06:14.838Z] [LEARN] Input length: 960
112
+ [2026-04-22T18:06:14.847Z] [LEARN] Sending POST to http://localhost:3457/api/cortex/knowledge/
113
+ [2026-04-22T18:06:14.877Z] [LEARN] Request error:
114
+ [2026-04-22T18:07:49.032Z] Hook started
115
+ [2026-04-22T18:07:49.039Z] Input length: 320
116
+ [2026-04-22T18:07:49.041Z] Querying: http://localhost:3457/api/cortex/context/?q=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&limit=5&workspace_id=2 (event: UserPromptSubmit)
117
+ [2026-04-22T18:07:49.071Z] Main error:
118
+ [2026-04-22T18:07:49.071Z] Hook finished
@@ -0,0 +1,105 @@
1
+ # Claude Plan-Usage Display
2
+
3
+ **Status:** stable
4
+ **Owner:** jlongo
5
+ **Last updated:** 2026-04-22
6
+
7
+ ## Overview
8
+
9
+ A compact readout of the user's Anthropic plan-usage rate limits, surfaced in the terminal page header whenever the active workspace has at least one Claude pane. Shows 5-hour, 7-day Opus, and 7-day Sonnet windows at a glance; click expands to all windows plus overage credits. Data matches what `/usage` shows inside Claude Code.
10
+
11
+ ## User-facing behavior
12
+
13
+ - Open any workspace on `/terminal` that has a Claude pane.
14
+ - A horizontal strip appears in the header (right side, before Files / Collab / Close / Add Pane).
15
+ - Three thin progress bars: **5h**, **Opus**, **Sonnet** — each with a percent label and a color that escalates green → amber → red.
16
+ - Hover a bar → tooltip `{label}: X% used · resets in 2h 14m`.
17
+ - Click the strip → popover with all five rate-limit windows + an overage-credits block if the account has overage enabled.
18
+ - If the OAuth token is missing or expired, the strip shows `sign in via Claude Code` with a small login icon. No auto-refresh.
19
+ - If the Anthropic endpoint fails or times out, the strip hides silently.
20
+
21
+ ## Architecture
22
+
23
+ UI (`src/components/claude/claude-usage-strip.tsx`) → polling hook (`src/hooks/use-claude-usage.ts`) → API route (`src/app/api/claude/usage/route.ts`) → credentials reader (`src/lib/claude/credentials.ts`) + Anthropic fetcher with 30s cache (`src/lib/claude/usage.ts`) → `https://api.anthropic.com/api/oauth/usage`.
24
+
25
+ Polling: hook calls the route on mount and every 60s while the strip is enabled. Server caches the Anthropic response 30s per access-token prefix so rapid re-polls don't hammer Anthropic.
26
+
27
+ ## Key files
28
+
29
+ | Path | Role |
30
+ |---|---|
31
+ | `src/lib/claude/credentials.ts` | Reads `~/.claude/.credentials.json`, extracts `claudeAiOauth`, exposes `isTokenExpired()`. |
32
+ | `src/lib/claude/usage.ts` | Calls Anthropic's `/api/oauth/usage`, 5s timeout, 30s in-memory cache. |
33
+ | `src/app/api/claude/usage/route.ts` | `GET` handler; returns one of `ok` / `unauthenticated` / `expired` / `upstream_error`. |
34
+ | `src/hooks/use-claude-usage.ts` | 60s polling hook, toggled by `enabled` arg. |
35
+ | `src/components/claude/claude-usage-strip.tsx` | Compact 3-bar strip + expanded popover. |
36
+ | `src/app/(desktop)/terminal/page.tsx` | Mounts the strip conditionally in the header. |
37
+ | `src/types/claude.ts` | `RateLimit`, `ExtraUsage`, `Utilization`, `UsageResponse`. |
38
+
39
+ ## Data model
40
+
41
+ No DB tables. All state is transient:
42
+ - Server-side: in-memory `Map<tokenPrefix, { fetchedAt, data }>` in `src/lib/claude/usage.ts` with 30s TTL. Process-local; resets on server restart.
43
+ - Client-side: React state in the hook.
44
+
45
+ ## APIs / contracts
46
+
47
+ ### Internal endpoints
48
+
49
+ - `GET /api/claude/usage` — returns `UsageResponse`:
50
+ - `200 { status: "ok", data: Utilization }` — happy path.
51
+ - `200 { status: "unauthenticated" }` — no credentials file or no `claudeAiOauth`.
52
+ - `200 { status: "expired" }` — access token past `expiresAt`.
53
+ - `200 { status: "upstream_error" }` — Anthropic non-2xx or timeout.
54
+
55
+ Auth: same `withUser`/`getAuthUser` wrapping as every other `/api/*` route.
56
+
57
+ ### External calls
58
+
59
+ - **Anthropic `GET https://api.anthropic.com/api/oauth/usage`** — uses the user's own OAuth access token read from `~/.claude/.credentials.json`. No secret of our own. User-Agent `claude-code/spaces-integration`.
60
+
61
+ ## Configuration & environment
62
+
63
+ - `CLAUDE_CONFIG_DIR` — respected (defaults to `~/.claude`). Same semantics as Claude Code.
64
+ - No env vars, feature flags, or tier gates specific to this feature.
65
+
66
+ ## How to run / test locally
67
+
68
+ ```bash
69
+ npm install
70
+ npm run build
71
+ npm start
72
+ # visit http://localhost:3457/terminal, enter a workspace, add a Claude pane
73
+ ```
74
+
75
+ Manual QA checklist:
76
+
77
+ 1. With a valid OAuth session (logged in via any recent Claude Code run): the strip appears in the header; percents match `/usage` inside Claude Code.
78
+ 2. Hover each bar → tooltip shows the reset timing.
79
+ 3. Click → popover with all five windows and overage block (if applicable).
80
+ 4. Delete the Claude pane from the workspace → strip disappears.
81
+ 5. Set `claudeAiOauth.expiresAt` to a past timestamp in `.credentials.json`, reload → strip shows "sign in via Claude Code".
82
+ 6. Move `.credentials.json` aside temporarily, reload → same sign-in hint.
83
+ 7. Disconnect network → within ~90s the strip silently hides (`upstream_error` → null render).
84
+
85
+ No automated tests for v1.
86
+
87
+ ## Known quirks & decisions
88
+
89
+ - **Passive refresh.** We do not refresh the OAuth access token. Claude Code owns the refresh lifecycle and writes `.credentials.json`; racing with it would corrupt the shared file.
90
+ - **Account-wide data, not per-pane.** The Anthropic endpoint returns account-level rate limits. Rendering once in the header (not per-pane) is intentional.
91
+ - **User-Agent and anthropic-beta header.** The Anthropic `/api/oauth/usage` endpoint requires the `anthropic-beta: oauth-2025-04-20` header in addition to the Bearer token — without it the call 4xx-errors out. Both the UA (`claude-code/spaces`) and the beta header are constants in `src/lib/claude/usage.ts`; if upstream ever rotates the beta header, bump it there.
92
+ - **30s cache + 60s poll.** Outer-bound staleness is ~90s; fine for windows that move in hours.
93
+ - **Token-prefix cache key.** First 16 chars of `accessToken`. Collision probability is effectively nil; avoids holding full tokens in the cache structure beyond the single request.
94
+ - **Silent upstream failure.** Errors hide the strip rather than showing a red toast — rate-limit info is nice-to-have, not mission-critical.
95
+ - **Ships direct to `main`.** Per repo convention.
96
+
97
+ ## Open questions / TODOs
98
+
99
+ - [ ] Active OAuth refresh — mirror Claude Code's `/oauth/token` dance to keep the widget live past expiry. Deferred for v1.
100
+ - [ ] Session-cost complement using local JSONL token counts (different data source).
101
+ - [ ] Consider surfacing 7-day-overall alongside the current three for users who care.
102
+
103
+ ## Changelog
104
+
105
+ - 2026-04-22 — Initial implementation. v1 ships direct to `main`.
@@ -0,0 +1,127 @@
1
+ # Workspace Todos
2
+
3
+ **Status:** stable
4
+ **Owner:** jlongo
5
+ **Last updated:** 2026-04-21
6
+
7
+ ## Overview
8
+
9
+ A lightweight todo list attached to each workspace. Renders inline at the top of `/terminal` above the pane grid, always visible. Minimal model: text + checkbox + delete. Scoped per-workspace — switching workspaces swaps the list. Not in scope: agent read/write, drag-reorder, priorities/due dates, cross-workspace views.
10
+
11
+ ## User-facing behavior
12
+
13
+ - Visit `/terminal`, enter any workspace.
14
+ - A "Todos" bar renders above the pane grid with an "Add todo…" input.
15
+ - Enter adds a todo at the bottom of the uncompleted list. Input stays focused.
16
+ - Click the checkbox → strike-through + sink to the completed section.
17
+ - Click text → inline edit. Enter saves, Esc cancels, blur saves.
18
+ - Hover row → `×` delete button.
19
+ - Eye icon in the header toggles visibility of completed todos (ephemeral, resets on reload).
20
+
21
+ ## Architecture
22
+
23
+ UI (`src/components/workspace/workspace-todos.tsx`) → API routes (`src/app/api/workspaces/[id]/todos/*`) → DB helpers (`src/lib/db/queries.ts`) → SQLite (`workspace_todos` table in the per-user DB at `~/.spaces/<user>.db`).
24
+
25
+ Mutations are optimistic client-side with rollback on failure. Workspace switch triggers a fresh refetch keyed on `workspaceId`.
26
+
27
+ ## Key files
28
+
29
+ | Path | Role |
30
+ |---|---|
31
+ | `src/components/workspace/workspace-todos.tsx` | Inline UI component — fetching, optimistic CRUD, rendering |
32
+ | `src/app/api/workspaces/[id]/todos/route.ts` | `GET` list, `POST` create |
33
+ | `src/app/api/workspaces/[id]/todos/[todoId]/route.ts` | `PATCH` update, `DELETE` remove |
34
+ | `src/lib/db/schema.ts` | `workspace_todos` table declaration inside `initSchema()` |
35
+ | `src/lib/db/queries.ts` | `getWorkspaceTodos`, `addWorkspaceTodo`, `updateWorkspaceTodo`, `deleteWorkspaceTodo` |
36
+ | `src/types/claude.ts` | `WorkspaceTodo` type |
37
+ | `src/app/(desktop)/terminal/page.tsx` | Mounts `<WorkspaceTodos>` above the pane grid |
38
+ | `tests/db/workspace-todos.test.ts` | Query-layer tests — ordering, cascade, scoping |
39
+
40
+ ## Data model
41
+
42
+ ### `workspace_todos`
43
+
44
+ | Column | Type | Notes |
45
+ |---|---|---|
46
+ | `id` | INTEGER PK | autoincrement |
47
+ | `workspace_id` | INTEGER NOT NULL | FK → `workspaces(id)` ON DELETE CASCADE |
48
+ | `text` | TEXT NOT NULL | trimmed on insert/update; empty rejected |
49
+ | `completed` | INTEGER NOT NULL DEFAULT 0 | 0 or 1 |
50
+ | `sort_order` | INTEGER NOT NULL DEFAULT 0 | meaningful only among uncompleted rows |
51
+ | `created` | TEXT NOT NULL DEFAULT datetime('now') | |
52
+ | `completed_at` | TEXT | set when completed flips 0→1, cleared on 1→0 |
53
+
54
+ Index: `idx_workspace_todos_workspace` on `workspace_id`.
55
+
56
+ ### TypeScript
57
+
58
+ ```ts
59
+ interface WorkspaceTodo {
60
+ id: number;
61
+ workspaceId: number;
62
+ text: string;
63
+ completed: boolean;
64
+ sortOrder: number;
65
+ created: string;
66
+ completedAt: string | null;
67
+ }
68
+ ```
69
+
70
+ ### Invariants
71
+
72
+ - Listing order: uncompleted first by `sort_order` ASC, then completed by `completed_at` DESC.
73
+ - New todos get `sort_order = MAX(sort_order WHERE completed=0) + 1`.
74
+ - `completed_at` is `NULL` iff `completed = 0`.
75
+ - Deleting a workspace deletes its todos via FK cascade.
76
+
77
+ ## APIs / contracts
78
+
79
+ ### Internal endpoints
80
+
81
+ | Method | Path | Request | Response |
82
+ |---|---|---|---|
83
+ | `GET` | `/api/workspaces/:id/todos` | — | `WorkspaceTodo[]` |
84
+ | `POST` | `/api/workspaces/:id/todos` | `{ text: string }` | `201 WorkspaceTodo` or `400 { error }` |
85
+ | `PATCH` | `/api/workspaces/:id/todos/:todoId` | `{ text?, completed? }` | `WorkspaceTodo` or `400`/`404` |
86
+ | `DELETE` | `/api/workspaces/:id/todos/:todoId` | — | `{ ok: true }` |
87
+
88
+ Auth via `getAuthUser` + `withUser`, same pattern as sibling workspace routes.
89
+
90
+ ### External calls
91
+ N/A.
92
+
93
+ ## Configuration & environment
94
+ None. Always-on Community-tier feature. No env vars, flags, or tier gates.
95
+
96
+ ## How to run / test locally
97
+
98
+ ```bash
99
+ npm install
100
+ npm run build
101
+ npm start
102
+ # visit http://localhost:3457/terminal, enter any workspace
103
+ ```
104
+
105
+ Automated:
106
+ ```bash
107
+ npx vitest run tests/db/workspace-todos.test.ts
108
+ ```
109
+
110
+ ## Known quirks & decisions
111
+
112
+ - **Schema lives in `initSchema()`, no migration file.** Matches the pattern in `src/lib/db/schema.ts`; the repo has no separate migration system.
113
+ - **No agent write path in v1.** The coworker's "pi /todos" plugin that inspired this lets agents add todos from inside the session — deferred because it requires an MCP tool or CLI surface.
114
+ - **Optimistic updates without toasts.** Failures `console.error` and revert local state; this is a local-only app, so silent revert is acceptable for v1.
115
+ - **`sort_order = Number.MAX_SAFE_INTEGER` for optimistic inserts.** The temp row sorts to the bottom of uncompleted; the server returns the real `sort_order` on response and replaces the temp.
116
+ - **No confirm on delete.** Minimal ethos. Add undo toast in a follow-up if this proves painful.
117
+ - **Direct-to-main workflow.** Per repo convention for this codebase; no PR flow.
118
+
119
+ ## Open questions / TODOs
120
+
121
+ - [ ] Agent write access via MCP tool once UI v1 proves out.
122
+ - [ ] Optional: persist the "show completed" toggle in localStorage.
123
+ - [ ] Optional: keyboard shortcut to focus the add-input from anywhere on `/terminal`.
124
+
125
+ ## Changelog
126
+
127
+ - 2026-04-21 — Initial implementation. v1 ships direct to `main`.