@mndrk/agx 2.0.55 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (762) hide show
  1. package/README.md +5 -0
  2. package/cloud-runtime/standalone/apps/local/.next/BUILD_ID +1 -1
  3. package/cloud-runtime/standalone/apps/local/.next/app-path-routes-manifest.json +3 -0
  4. package/cloud-runtime/standalone/apps/local/.next/build-manifest.json +3 -3
  5. package/cloud-runtime/standalone/apps/local/.next/prerender-manifest.json +3 -3
  6. package/cloud-runtime/standalone/apps/local/.next/required-server-files.json +5 -0
  7. package/cloud-runtime/standalone/apps/local/.next/routes-manifest.json +23 -0
  8. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error/page.js +1 -1
  9. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error/page.js.nft.json +1 -1
  10. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.html +1 -1
  11. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.rsc +1 -1
  12. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  13. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  14. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  15. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  16. package/cloud-runtime/standalone/apps/local/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  17. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found/page.js +1 -1
  18. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found/page.js.nft.json +1 -1
  19. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.html +2 -2
  21. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.rsc +2 -2
  22. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  23. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  24. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  25. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  26. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  27. package/cloud-runtime/standalone/apps/local/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  28. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page.js +1 -1
  29. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page.js.nft.json +1 -1
  30. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  31. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page.js +1 -1
  32. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page.js.nft.json +1 -1
  33. package/cloud-runtime/standalone/apps/local/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  34. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.html +2 -2
  35. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.rsc +3 -3
  36. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_full.segment.rsc +3 -3
  37. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  38. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_index.segment.rsc +2 -2
  39. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
  40. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents/__PAGE__.segment.rsc +2 -2
  41. package/cloud-runtime/standalone/apps/local/.next/server/app/agents.segments/agents.segment.rsc +1 -1
  42. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agent-specs/route.js +1 -1
  43. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agent-specs/route.js.nft.json +1 -1
  44. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agents/[id]/profile/route.js +4 -3
  45. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agents/[id]/profile/route.js.nft.json +1 -1
  46. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agents/export/route.js +1 -1
  47. package/cloud-runtime/standalone/apps/local/.next/server/app/api/agents/export/route.js.nft.json +1 -1
  48. package/cloud-runtime/standalone/apps/local/.next/server/app/api/automations/create/route.js +1 -1
  49. package/cloud-runtime/standalone/apps/local/.next/server/app/api/automations/create/route.js.nft.json +1 -1
  50. package/cloud-runtime/standalone/apps/local/.next/server/app/api/automations/route.js +1 -1
  51. package/cloud-runtime/standalone/apps/local/.next/server/app/api/automations/route.js.nft.json +1 -1
  52. package/cloud-runtime/standalone/apps/local/.next/server/app/api/chat/route.js +2 -2
  53. package/cloud-runtime/standalone/apps/local/.next/server/app/api/chat/route.js.nft.json +1 -1
  54. package/cloud-runtime/standalone/apps/local/.next/server/app/api/daemon/route.js +2 -2
  55. package/cloud-runtime/standalone/apps/local/.next/server/app/api/daemon/route.js.nft.json +1 -1
  56. package/cloud-runtime/standalone/apps/local/.next/server/app/api/file-search/route.js.nft.json +1 -1
  57. package/cloud-runtime/standalone/apps/local/.next/server/app/api/filesystem/analyze/route.js +1 -1
  58. package/cloud-runtime/standalone/apps/local/.next/server/app/api/filesystem/analyze/route.js.nft.json +1 -1
  59. package/cloud-runtime/standalone/apps/local/.next/server/app/api/graphs/[graphId]/nodes/[nodeId]/route.js +1 -1
  60. package/cloud-runtime/standalone/apps/local/.next/server/app/api/graphs/[graphId]/nodes/[nodeId]/route.js.nft.json +1 -1
  61. package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/issues/[id]/route.js.nft.json +1 -1
  62. package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/issues/context/route.js.nft.json +1 -1
  63. package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/issues/route.js.nft.json +1 -1
  64. package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/options/route.js.nft.json +1 -1
  65. package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/runs/scripted/route.js +5 -4
  66. package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/runs/scripted/route.js.nft.json +1 -1
  67. package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/status/route.js.nft.json +1 -1
  68. package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/worker/route/app-paths-manifest.json +3 -0
  69. package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/worker/route/build-manifest.json +9 -0
  70. package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/worker/route/server-reference-manifest.json +4 -0
  71. package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/worker/route.js +13 -0
  72. package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/worker/route.js.map +5 -0
  73. package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/worker/route.js.nft.json +1 -0
  74. package/cloud-runtime/standalone/apps/local/.next/server/app/api/linear/worker/route_client-reference-manifest.js +3 -0
  75. package/cloud-runtime/standalone/apps/local/.next/server/app/api/participants/route.js +1 -1
  76. package/cloud-runtime/standalone/apps/local/.next/server/app/api/participants/route.js.nft.json +1 -1
  77. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/activities/route.js +4 -4
  78. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/activities/route.js.nft.json +1 -1
  79. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/linear-issues/route.js +4 -4
  80. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/linear-issues/route.js.nft.json +1 -1
  81. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/notes/[noteId]/route.js +2 -2
  82. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/notes/[noteId]/route.js.nft.json +1 -1
  83. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/notes/route.js +2 -2
  84. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/notes/route.js.nft.json +1 -1
  85. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/route.js +3 -3
  86. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/route.js.nft.json +1 -1
  87. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/scheduled-tasks/route.js +19 -8
  88. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/scheduled-tasks/route.js.nft.json +1 -1
  89. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/validate/route.js +3 -3
  90. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/validate/route.js.nft.json +1 -1
  91. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/worker/route/app-paths-manifest.json +3 -0
  92. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/worker/route/build-manifest.json +9 -0
  93. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/worker/route/server-reference-manifest.json +4 -0
  94. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/worker/route.js +28 -0
  95. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/worker/route.js.map +5 -0
  96. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/worker/route.js.nft.json +1 -0
  97. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/objectives/[objectiveId]/worker/route_client-reference-manifest.js +3 -0
  98. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/route.js +9 -5
  99. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
  100. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/search/route.js +1 -1
  101. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/search/route.js.nft.json +1 -1
  102. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/[id]/teams/route.js.nft.json +1 -1
  103. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/route.js +4 -4
  104. package/cloud-runtime/standalone/apps/local/.next/server/app/api/projects/route.js.nft.json +1 -1
  105. package/cloud-runtime/standalone/apps/local/.next/server/app/api/prompt-jobs/[id]/cancel/route.js +1 -1
  106. package/cloud-runtime/standalone/apps/local/.next/server/app/api/prompt-jobs/[id]/cancel/route.js.nft.json +1 -1
  107. package/cloud-runtime/standalone/apps/local/.next/server/app/api/prompt-jobs/[id]/route.js +1 -1
  108. package/cloud-runtime/standalone/apps/local/.next/server/app/api/prompt-jobs/[id]/route.js.nft.json +1 -1
  109. package/cloud-runtime/standalone/apps/local/.next/server/app/api/prompt-jobs/[id]/runs/route.js +1 -1
  110. package/cloud-runtime/standalone/apps/local/.next/server/app/api/prompt-jobs/[id]/runs/route.js.nft.json +1 -1
  111. package/cloud-runtime/standalone/apps/local/.next/server/app/api/prompt-jobs/poll/route.js +16 -15
  112. package/cloud-runtime/standalone/apps/local/.next/server/app/api/prompt-jobs/poll/route.js.nft.json +1 -1
  113. package/cloud-runtime/standalone/apps/local/.next/server/app/api/prompt-jobs/route.js +5 -5
  114. package/cloud-runtime/standalone/apps/local/.next/server/app/api/prompt-jobs/route.js.nft.json +1 -1
  115. package/cloud-runtime/standalone/apps/local/.next/server/app/api/providers/check/[id]/route.js.nft.json +1 -1
  116. package/cloud-runtime/standalone/apps/local/.next/server/app/api/providers/route.js.nft.json +1 -1
  117. package/cloud-runtime/standalone/apps/local/.next/server/app/api/queue/route.js +2 -2
  118. package/cloud-runtime/standalone/apps/local/.next/server/app/api/queue/route.js.nft.json +1 -1
  119. package/cloud-runtime/standalone/apps/local/.next/server/app/api/schedules/debug/route.js +1 -1
  120. package/cloud-runtime/standalone/apps/local/.next/server/app/api/schedules/debug/route.js.nft.json +1 -1
  121. package/cloud-runtime/standalone/apps/local/.next/server/app/api/schedules/poll/route.js +1 -1
  122. package/cloud-runtime/standalone/apps/local/.next/server/app/api/schedules/poll/route.js.nft.json +1 -1
  123. package/cloud-runtime/standalone/apps/local/.next/server/app/api/schedules/route.js +1 -1
  124. package/cloud-runtime/standalone/apps/local/.next/server/app/api/schedules/route.js.nft.json +1 -1
  125. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/assign/route.js.nft.json +1 -1
  126. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/available/route.js.nft.json +1 -1
  127. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/detail/route.js.nft.json +1 -1
  128. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/history/route.js.nft.json +1 -1
  129. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/learn/route.js.nft.json +1 -1
  130. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/route.js.nft.json +1 -1
  131. package/cloud-runtime/standalone/apps/local/.next/server/app/api/skills/unlearn/route.js.nft.json +1 -1
  132. package/cloud-runtime/standalone/apps/local/.next/server/app/api/status/route.js.nft.json +1 -1
  133. package/cloud-runtime/standalone/apps/local/.next/server/app/api/summarize/route.js.nft.json +1 -1
  134. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/comments/[commentId]/route.js.nft.json +1 -1
  135. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/comments/route.js.nft.json +1 -1
  136. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/graph/events/route.js.nft.json +1 -1
  137. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/graph/history/route.js.nft.json +1 -1
  138. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/graph/metrics/route.js.nft.json +1 -1
  139. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/graph/pause/route.js.nft.json +1 -1
  140. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/graph/replan/route.js.nft.json +1 -1
  141. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/graph/restart/route.js.nft.json +1 -1
  142. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/graph/resume/route.js.nft.json +1 -1
  143. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/graph/rollback/route.js.nft.json +1 -1
  144. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/graph/route.js.nft.json +1 -1
  145. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/graph/schedule/route.js.nft.json +1 -1
  146. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/graph/stop/route.js.nft.json +1 -1
  147. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/logs/route.js.nft.json +1 -1
  148. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/comments/route.js.nft.json +1 -1
  149. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/complete/route.js.nft.json +1 -1
  150. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/fail/route.js.nft.json +1 -1
  151. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/resume/route.js.nft.json +1 -1
  152. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/start/route.js.nft.json +1 -1
  153. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/stop/route.js.nft.json +1 -1
  154. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/nodes/[nodeId]/verify/route.js.nft.json +1 -1
  155. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
  156. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/extract/route.js.nft.json +1 -1
  157. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/route.js +9 -8
  158. package/cloud-runtime/standalone/apps/local/.next/server/app/api/tasks/route.js.nft.json +1 -1
  159. package/cloud-runtime/standalone/apps/local/.next/server/app/api/terminal/sessions/[id]/route.js +1 -1
  160. package/cloud-runtime/standalone/apps/local/.next/server/app/api/terminal/sessions/[id]/route.js.nft.json +1 -1
  161. package/cloud-runtime/standalone/apps/local/.next/server/app/api/threads/knowledge/route.js +1 -1
  162. package/cloud-runtime/standalone/apps/local/.next/server/app/api/threads/knowledge/route.js.nft.json +1 -1
  163. package/cloud-runtime/standalone/apps/local/.next/server/app/api/threads/route.js +1 -1
  164. package/cloud-runtime/standalone/apps/local/.next/server/app/api/threads/route.js.nft.json +1 -1
  165. package/cloud-runtime/standalone/apps/local/.next/server/app/automations/page/react-loadable-manifest.json +2 -2
  166. package/cloud-runtime/standalone/apps/local/.next/server/app/automations/page.js +1 -1
  167. package/cloud-runtime/standalone/apps/local/.next/server/app/automations/page.js.nft.json +1 -1
  168. package/cloud-runtime/standalone/apps/local/.next/server/app/automations/page_client-reference-manifest.js +1 -1
  169. package/cloud-runtime/standalone/apps/local/.next/server/app/automations.html +2 -2
  170. package/cloud-runtime/standalone/apps/local/.next/server/app/automations.rsc +15 -15
  171. package/cloud-runtime/standalone/apps/local/.next/server/app/automations.segments/_full.segment.rsc +15 -15
  172. package/cloud-runtime/standalone/apps/local/.next/server/app/automations.segments/_head.segment.rsc +1 -1
  173. package/cloud-runtime/standalone/apps/local/.next/server/app/automations.segments/_index.segment.rsc +2 -2
  174. package/cloud-runtime/standalone/apps/local/.next/server/app/automations.segments/_tree.segment.rsc +3 -3
  175. package/cloud-runtime/standalone/apps/local/.next/server/app/automations.segments/automations/__PAGE__.segment.rsc +3 -3
  176. package/cloud-runtime/standalone/apps/local/.next/server/app/automations.segments/automations.segment.rsc +1 -1
  177. package/cloud-runtime/standalone/apps/local/.next/server/app/board/page.js +1 -1
  178. package/cloud-runtime/standalone/apps/local/.next/server/app/board/page.js.nft.json +1 -1
  179. package/cloud-runtime/standalone/apps/local/.next/server/app/board/page_client-reference-manifest.js +1 -1
  180. package/cloud-runtime/standalone/apps/local/.next/server/app/board.html +2 -2
  181. package/cloud-runtime/standalone/apps/local/.next/server/app/board.rsc +2 -2
  182. package/cloud-runtime/standalone/apps/local/.next/server/app/board.segments/_full.segment.rsc +2 -2
  183. package/cloud-runtime/standalone/apps/local/.next/server/app/board.segments/_head.segment.rsc +1 -1
  184. package/cloud-runtime/standalone/apps/local/.next/server/app/board.segments/_index.segment.rsc +2 -2
  185. package/cloud-runtime/standalone/apps/local/.next/server/app/board.segments/_tree.segment.rsc +2 -2
  186. package/cloud-runtime/standalone/apps/local/.next/server/app/board.segments/board/__PAGE__.segment.rsc +1 -1
  187. package/cloud-runtime/standalone/apps/local/.next/server/app/board.segments/board.segment.rsc +1 -1
  188. package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph/page.js +1 -1
  189. package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph/page.js.nft.json +1 -1
  190. package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph/page_client-reference-manifest.js +1 -1
  191. package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph.html +2 -2
  192. package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph.rsc +3 -3
  193. package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph.segments/_full.segment.rsc +3 -3
  194. package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph.segments/_head.segment.rsc +1 -1
  195. package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph.segments/_index.segment.rsc +2 -2
  196. package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph.segments/_tree.segment.rsc +2 -2
  197. package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph.segments/execution-graph/__PAGE__.segment.rsc +2 -2
  198. package/cloud-runtime/standalone/apps/local/.next/server/app/execution-graph.segments/execution-graph.segment.rsc +1 -1
  199. package/cloud-runtime/standalone/apps/local/.next/server/app/folders/page.js +1 -1
  200. package/cloud-runtime/standalone/apps/local/.next/server/app/folders/page.js.nft.json +1 -1
  201. package/cloud-runtime/standalone/apps/local/.next/server/app/folders/page_client-reference-manifest.js +1 -1
  202. package/cloud-runtime/standalone/apps/local/.next/server/app/folders.html +2 -2
  203. package/cloud-runtime/standalone/apps/local/.next/server/app/folders.rsc +3 -3
  204. package/cloud-runtime/standalone/apps/local/.next/server/app/folders.segments/_full.segment.rsc +3 -3
  205. package/cloud-runtime/standalone/apps/local/.next/server/app/folders.segments/_head.segment.rsc +1 -1
  206. package/cloud-runtime/standalone/apps/local/.next/server/app/folders.segments/_index.segment.rsc +2 -2
  207. package/cloud-runtime/standalone/apps/local/.next/server/app/folders.segments/_tree.segment.rsc +2 -2
  208. package/cloud-runtime/standalone/apps/local/.next/server/app/folders.segments/folders/__PAGE__.segment.rsc +2 -2
  209. package/cloud-runtime/standalone/apps/local/.next/server/app/folders.segments/folders.segment.rsc +1 -1
  210. package/cloud-runtime/standalone/apps/local/.next/server/app/index.html +2 -2
  211. package/cloud-runtime/standalone/apps/local/.next/server/app/index.rsc +2 -2
  212. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  213. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_full.segment.rsc +2 -2
  214. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_head.segment.rsc +1 -1
  215. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_index.segment.rsc +2 -2
  216. package/cloud-runtime/standalone/apps/local/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  217. package/cloud-runtime/standalone/apps/local/.next/server/app/page.js +1 -1
  218. package/cloud-runtime/standalone/apps/local/.next/server/app/page.js.nft.json +1 -1
  219. package/cloud-runtime/standalone/apps/local/.next/server/app/page_client-reference-manifest.js +1 -1
  220. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page/react-loadable-manifest.json +2 -2
  221. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page.js +1 -1
  222. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page.js.nft.json +1 -1
  223. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/automations/page_client-reference-manifest.js +1 -1
  224. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page.js +1 -1
  225. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page.js.nft.json +1 -1
  226. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/env-vars/page_client-reference-manifest.js +1 -1
  227. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page/app-paths-manifest.json +3 -0
  228. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page/build-manifest.json +18 -0
  229. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page/next-font-manifest.json +11 -0
  230. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page/react-loadable-manifest.json +1 -0
  231. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page/server-reference-manifest.json +4 -0
  232. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page.js +14 -0
  233. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page.js.map +5 -0
  234. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page.js.nft.json +1 -0
  235. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/folders/page_client-reference-manifest.js +3 -0
  236. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page.js +1 -1
  237. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page.js.nft.json +1 -1
  238. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/graph/[taskId]/page_client-reference-manifest.js +1 -1
  239. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/knowledge/page.js +1 -1
  240. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/knowledge/page.js.nft.json +1 -1
  241. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/knowledge/page_client-reference-manifest.js +1 -1
  242. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/linear/page/react-loadable-manifest.json +8 -2
  243. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/linear/page.js +1 -1
  244. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/linear/page.js.nft.json +1 -1
  245. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/linear/page_client-reference-manifest.js +1 -1
  246. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page.js +1 -1
  247. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page.js.nft.json +1 -1
  248. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/[objectiveId]/page_client-reference-manifest.js +1 -1
  249. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page.js +1 -1
  250. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page.js.nft.json +1 -1
  251. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/objectives/page_client-reference-manifest.js +1 -1
  252. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page.js +1 -1
  253. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page.js.nft.json +1 -1
  254. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  255. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/settings/page.js +1 -1
  256. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/settings/page.js.nft.json +1 -1
  257. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/settings/page_client-reference-manifest.js +1 -1
  258. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page.js +1 -1
  259. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page.js.nft.json +1 -1
  260. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/agents/[agentId]/page_client-reference-manifest.js +1 -1
  261. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page.js +1 -1
  262. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page.js.nft.json +1 -1
  263. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/[teamId]/page_client-reference-manifest.js +1 -1
  264. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page.js +1 -1
  265. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page.js.nft.json +1 -1
  266. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/adopt/page_client-reference-manifest.js +1 -1
  267. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page.js +1 -1
  268. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page.js.nft.json +1 -1
  269. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/new/page_client-reference-manifest.js +1 -1
  270. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page.js +1 -1
  271. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page.js.nft.json +1 -1
  272. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/page_client-reference-manifest.js +1 -1
  273. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page.js +1 -1
  274. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page.js.nft.json +1 -1
  275. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/teams/replace/page_client-reference-manifest.js +1 -1
  276. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page.js +1 -1
  277. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page.js.nft.json +1 -1
  278. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/terminal/page_client-reference-manifest.js +1 -1
  279. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page.js +1 -1
  280. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page.js.nft.json +1 -1
  281. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/[slug]/thread/[threadId]/page_client-reference-manifest.js +1 -1
  282. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans/page.js +1 -1
  283. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans/page.js.nft.json +1 -1
  284. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans/page_client-reference-manifest.js +1 -1
  285. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.html +2 -2
  286. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.rsc +3 -3
  287. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/_full.segment.rsc +3 -3
  288. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/_head.segment.rsc +1 -1
  289. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/_index.segment.rsc +2 -2
  290. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/_tree.segment.rsc +2 -2
  291. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/projects/orphans/__PAGE__.segment.rsc +2 -2
  292. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/projects/orphans.segment.rsc +1 -1
  293. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/orphans.segments/projects.segment.rsc +1 -1
  294. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/page.js +1 -1
  295. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/page.js.nft.json +1 -1
  296. package/cloud-runtime/standalone/apps/local/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  297. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.html +2 -2
  298. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.rsc +3 -3
  299. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_full.segment.rsc +3 -3
  300. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_head.segment.rsc +1 -1
  301. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_index.segment.rsc +2 -2
  302. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  303. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +2 -2
  304. package/cloud-runtime/standalone/apps/local/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  305. package/cloud-runtime/standalone/apps/local/.next/server/app/settings/page.js +1 -1
  306. package/cloud-runtime/standalone/apps/local/.next/server/app/settings/page.js.nft.json +1 -1
  307. package/cloud-runtime/standalone/apps/local/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  308. package/cloud-runtime/standalone/apps/local/.next/server/app/settings.html +2 -2
  309. package/cloud-runtime/standalone/apps/local/.next/server/app/settings.rsc +2 -2
  310. package/cloud-runtime/standalone/apps/local/.next/server/app/settings.segments/_full.segment.rsc +2 -2
  311. package/cloud-runtime/standalone/apps/local/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  312. package/cloud-runtime/standalone/apps/local/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  313. package/cloud-runtime/standalone/apps/local/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  314. package/cloud-runtime/standalone/apps/local/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
  315. package/cloud-runtime/standalone/apps/local/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  316. package/cloud-runtime/standalone/apps/local/.next/server/app/setup/page.js +1 -1
  317. package/cloud-runtime/standalone/apps/local/.next/server/app/setup/page.js.nft.json +1 -1
  318. package/cloud-runtime/standalone/apps/local/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  319. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.html +2 -2
  320. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.rsc +3 -3
  321. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_full.segment.rsc +3 -3
  322. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_head.segment.rsc +1 -1
  323. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_index.segment.rsc +2 -2
  324. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  325. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +2 -2
  326. package/cloud-runtime/standalone/apps/local/.next/server/app/setup.segments/setup.segment.rsc +1 -1
  327. package/cloud-runtime/standalone/apps/local/.next/server/app/skills/page.js +1 -1
  328. package/cloud-runtime/standalone/apps/local/.next/server/app/skills/page.js.nft.json +1 -1
  329. package/cloud-runtime/standalone/apps/local/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  330. package/cloud-runtime/standalone/apps/local/.next/server/app/skills.html +2 -2
  331. package/cloud-runtime/standalone/apps/local/.next/server/app/skills.rsc +2 -2
  332. package/cloud-runtime/standalone/apps/local/.next/server/app/skills.segments/_full.segment.rsc +2 -2
  333. package/cloud-runtime/standalone/apps/local/.next/server/app/skills.segments/_head.segment.rsc +1 -1
  334. package/cloud-runtime/standalone/apps/local/.next/server/app/skills.segments/_index.segment.rsc +2 -2
  335. package/cloud-runtime/standalone/apps/local/.next/server/app/skills.segments/_tree.segment.rsc +2 -2
  336. package/cloud-runtime/standalone/apps/local/.next/server/app/skills.segments/skills/__PAGE__.segment.rsc +1 -1
  337. package/cloud-runtime/standalone/apps/local/.next/server/app/skills.segments/skills.segment.rsc +1 -1
  338. package/cloud-runtime/standalone/apps/local/.next/server/app/status/page.js +1 -1
  339. package/cloud-runtime/standalone/apps/local/.next/server/app/status/page.js.nft.json +1 -1
  340. package/cloud-runtime/standalone/apps/local/.next/server/app/status/page_client-reference-manifest.js +1 -1
  341. package/cloud-runtime/standalone/apps/local/.next/server/app/status.html +2 -2
  342. package/cloud-runtime/standalone/apps/local/.next/server/app/status.rsc +3 -3
  343. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_full.segment.rsc +3 -3
  344. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_head.segment.rsc +1 -1
  345. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_index.segment.rsc +2 -2
  346. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/_tree.segment.rsc +2 -2
  347. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status/__PAGE__.segment.rsc +2 -2
  348. package/cloud-runtime/standalone/apps/local/.next/server/app/status.segments/status.segment.rsc +1 -1
  349. package/cloud-runtime/standalone/apps/local/.next/server/app/thread/[id]/page.js +1 -1
  350. package/cloud-runtime/standalone/apps/local/.next/server/app/thread/[id]/page.js.nft.json +1 -1
  351. package/cloud-runtime/standalone/apps/local/.next/server/app/thread/[id]/page_client-reference-manifest.js +1 -1
  352. package/cloud-runtime/standalone/apps/local/.next/server/app-paths-manifest.json +3 -0
  353. package/cloud-runtime/standalone/apps/local/.next/server/chunks/0jps_app_api_projects_[id]_objectives_[objectiveId]_worker_route_actions_0v8q3zz.js +3 -0
  354. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[externals]__0_au5u1._.js +3 -0
  355. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[externals]__13x93ar._.js +3 -0
  356. package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__0_10qfd._.js → [root-of-the-server]__0.6yz1u._.js} +2 -2
  357. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__01lsgl~._.js +4 -0
  358. package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__0205scg._.js → [root-of-the-server]__03.9arn._.js} +2 -2
  359. package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__01ol22y._.js → [root-of-the-server]__03h0gqp._.js} +2 -2
  360. package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__094z9yf._.js → [root-of-the-server]__08jo91s._.js} +2 -2
  361. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__09j9jpf._.js +3 -0
  362. package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__0-nye63._.js → [root-of-the-server]__09jghbu._.js} +2 -2
  363. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0_7hiof._.js +43 -0
  364. package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__0.jam.l._.js → [root-of-the-server]__0a0cq38._.js} +2 -2
  365. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0asvfdo._.js +54 -0
  366. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0c86535._.js +3 -0
  367. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0cj1krd._.js +3 -0
  368. package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__0aa-88e._.js → [root-of-the-server]__0dy3h2i._.js} +2 -2
  369. package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__0touqng._.js → [root-of-the-server]__0e8-2k_._.js} +2 -2
  370. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0enhv5p._.js +3 -0
  371. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0f9byr.._.js +1 -1
  372. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0g7hc1-._.js +18 -0
  373. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0g7p6pw._.js +55 -0
  374. package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__019q25b._.js → [root-of-the-server]__0gj~dap._.js} +7 -7
  375. package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__0e6cj2y._.js → [root-of-the-server]__0hc45jw._.js} +2 -2
  376. package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__0avz575._.js → [root-of-the-server]__0hkcw03._.js} +2 -2
  377. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0hmw36u._.js +1 -1
  378. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0l53ok5._.js +54 -0
  379. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0n.momw._.js +8 -0
  380. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0tjo9we._.js +7 -0
  381. package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__0-~t2br._.js → [root-of-the-server]__0v7jjvl._.js} +2 -2
  382. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0x6w64i._.js +3 -0
  383. package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__11nke7t._.js → [root-of-the-server]__0y3qxv1._.js} +2 -2
  384. package/cloud-runtime/standalone/apps/local/.next/server/chunks/{[root-of-the-server]__10z8f9h._.js → [root-of-the-server]__0ygidxe._.js} +2 -2
  385. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0z82z0-._.js +49 -0
  386. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0zsv-tb._.js +8 -0
  387. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0~nnfjr._.js +3 -0
  388. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0~x4jbk._.js +3 -0
  389. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__10d.dhd._.js +229 -0
  390. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__12qy318._.js +3 -0
  391. package/cloud-runtime/standalone/apps/local/.next/server/chunks/_039.xxy._.js +1 -1
  392. package/cloud-runtime/standalone/apps/local/.next/server/chunks/_06oeti1._.js +49 -0
  393. package/cloud-runtime/standalone/apps/local/.next/server/chunks/_0dyy7h.._.js +3 -0
  394. package/cloud-runtime/standalone/apps/local/.next/server/chunks/_0gi7c9x._.js +2 -2
  395. package/cloud-runtime/standalone/apps/local/.next/server/chunks/_0gr.psg._.js +1 -1
  396. package/cloud-runtime/standalone/apps/local/.next/server/chunks/_0sd8z0i._.js +21 -0
  397. package/cloud-runtime/standalone/apps/local/.next/server/chunks/_0y42h_~._.js +2 -2
  398. package/cloud-runtime/standalone/apps/local/.next/server/chunks/_0~ah49q._.js +1 -1
  399. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_01kqgle._.js +11 -0
  400. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_06qet8g._.js +36 -0
  401. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0_0m2ly._.js +397 -0
  402. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0_a~bj0._.js +25 -0
  403. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0a15wtk._.js +397 -0
  404. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0bjdpen._.js +29 -0
  405. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0fr1qq6._.js +1 -1
  406. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0g.q2r6._.js +41 -0
  407. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0h7wd0e._.js +29 -0
  408. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0i7fs.i._.js +397 -0
  409. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0ipg-p6._.js +3 -0
  410. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0npxy21._.js +11 -0
  411. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0uhfa93._.js +21 -0
  412. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_12wpldq._.js +25 -0
  413. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local__next-internal_server_app_api_linear_worker_route_actions_116303i.js +3 -0
  414. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_01hd2_5._.js +3 -0
  415. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_01pvj2g._.js +34 -0
  416. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_0ik933l._.js +55 -0
  417. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_0o1v.j4._.js +79 -0
  418. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_0pxj122._.js +55 -0
  419. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_src_automations_index_ts_0_8ch28._.js +10 -0
  420. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_src_graph_082u-ls._.js +41 -0
  421. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_src_prompt-scheduler_0.xgxyl._.js +4 -0
  422. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_src_prompt-scheduler_0yu3--n._.js +4 -0
  423. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_src_prompt-scheduler_0ze8hzc._.js +4 -0
  424. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_src_prompt-scheduler_get-store_ts_0p0aod1._.js +5 -5
  425. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_src_prompt-scheduler_linear-worker_ts_0ycjwem._.js +5 -0
  426. package/cloud-runtime/standalone/apps/local/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0gips_c.js +1 -1
  427. package/cloud-runtime/standalone/apps/local/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0u_5kfo.js +1 -1
  428. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/02dz_local__next-internal_server_app_projects_[slug]_folders_page_actions_03fg4j9.js +3 -0
  429. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/0rhn_lucide-react_dist_esm_0tvwux2._.js +3 -0
  430. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/0rhn_lucide-react_dist_esm_icons_0e2_v_.._.js +3 -0
  431. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/0rhn_lucide-react_dist_esm_icons_0hvpc.y._.js +3 -0
  432. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/0rhn_lucide-react_dist_esm_icons_0w3hl3p._.js +3 -0
  433. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__006vr7.._.js +3 -0
  434. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__08d5c~o._.js +3 -0
  435. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0_n~ybp._.js +3 -0
  436. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0d18x53._.js +18 -0
  437. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0fl7_-o._.js +18 -0
  438. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0h~rb5r._.js +3 -0
  439. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0j9m72.._.js +18 -0
  440. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{[root-of-the-server]__02.r909._.js → [root-of-the-server]__0n5g8ml._.js} +2 -2
  441. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0w.zmt6._.js +3 -0
  442. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0z7nw_r._.js +3 -0
  443. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__10h_7t0._.js +3 -0
  444. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_00trrg8._.js +3 -0
  445. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{_0s~0ump._.js → _064h43p._.js} +2 -2
  446. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0742x_.._.js +3 -0
  447. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0ejzn1e._.js +3 -0
  448. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0fwy5tm._.js +7 -0
  449. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0sjchy6._.js +3 -0
  450. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0ufdu.z._.js +7 -0
  451. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0wk3skw._.js +3 -0
  452. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0yeuuy1._.js +25 -0
  453. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_03z24q2._.js +3 -0
  454. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0_ac-.f._.js +1 -1
  455. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0a-8i4p._.js +3 -0
  456. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0h3mfm7._.js +3 -0
  457. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{apps_local_075cq2j._.js → apps_local_0k4~c1x._.js} +2 -2
  458. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/{_0n80y4_._.js → apps_local_0nvzo3y._.js} +2 -2
  459. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0t6p.qm._.js +3 -0
  460. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0v~bvwg._.js +3 -0
  461. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_11k_-8~._.js +1 -1
  462. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_agents_[id]_page_tsx_06n47n~._.js +1 -1
  463. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_execution-graph_page_tsx_0tn2sx9._.js +2 -2
  464. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_folders_page_tsx_0ju618z._.js +3 -0
  465. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_graph_[taskId]_page_tsx_0bctfd-._.js +1 -1
  466. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_layout_tsx_0aaa3~t._.js +1 -1
  467. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_linear_page_tsx_0a~n5y8._.js +2 -2
  468. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_page_tsx_0kcaeqi._.js +1 -1
  469. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_teams_new_page_tsx_0yqd0a5._.js +3 -0
  470. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_teams_page_tsx_06czvz-._.js +3 -0
  471. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_[slug]_terminal_page_tsx_01n9qk.._.js +12 -12
  472. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_projects_orphans_page_tsx_0sdv.11._.js +4 -4
  473. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_app_setup_page_tsx_0ql2qmr._.js +1 -1
  474. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_PromptJobBoard_tsx_06zob36._.js +8 -0
  475. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_TaskCard_tsx_0e35_z5._.js +6 -6
  476. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_chat-ui_ChatContainer_tsx_0c9fjtl._.js +3 -3
  477. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_projects_ProjectObjectivesWorkspace_tsx_0k4tfip._.js +6 -6
  478. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_components_thread_WorkspaceSidebar_tsx_0unv2xp._.js +1 -1
  479. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0mk0s0o.js +4 -0
  480. package/cloud-runtime/standalone/apps/local/.next/server/functions-config-manifest.json +2 -0
  481. package/cloud-runtime/standalone/apps/local/.next/server/middleware-build-manifest.js +3 -3
  482. package/cloud-runtime/standalone/apps/local/.next/server/middleware-manifest.json +5 -5
  483. package/cloud-runtime/standalone/apps/local/.next/server/next-font-manifest.js +1 -1
  484. package/cloud-runtime/standalone/apps/local/.next/server/next-font-manifest.json +4 -0
  485. package/cloud-runtime/standalone/apps/local/.next/server/pages/404.html +2 -2
  486. package/cloud-runtime/standalone/apps/local/.next/server/pages/500.html +1 -1
  487. package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.js +1 -1
  488. package/cloud-runtime/standalone/apps/local/.next/server/server-reference-manifest.json +1 -1
  489. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0-_ukhpeg429c.js +16 -0
  490. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0-olq~7zw3wjy.js +1 -0
  491. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0142ce0jj3j7r.js → 0-vo_x2cxmjm3.js} +1 -1
  492. package/cloud-runtime/standalone/apps/local/.next/static/chunks/003q-y3exxalk.js +1 -0
  493. package/cloud-runtime/standalone/apps/local/.next/static/chunks/00po4v2x~0x_z.js +1 -0
  494. package/cloud-runtime/standalone/apps/local/.next/static/chunks/013gtut17~fne.js +23 -0
  495. package/cloud-runtime/standalone/apps/local/.next/static/chunks/014z_yruiincl.js +1 -0
  496. package/cloud-runtime/standalone/apps/local/.next/static/chunks/041-dhls9zkl1.js +1 -0
  497. package/cloud-runtime/standalone/apps/local/.next/static/chunks/04yoml2rqnuot.js +16 -0
  498. package/cloud-runtime/standalone/apps/local/.next/static/chunks/07646a0h94826.js +3 -0
  499. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0_mrpyqcoyb_5.js +1 -0
  500. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0rm7v.1y6qcni.js → 0aewbg0i704w7.js} +1 -1
  501. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0px65ynyk3t1d.js → 0bchtyu6m.2yv.js} +7 -7
  502. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0dnw31436wd~..js +5 -0
  503. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0e307b-0c2jbx.js +1 -0
  504. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0edewt9l~cs~k.css +1 -0
  505. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0f7i3ae1ynhf3.css +1 -0
  506. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0fonouj2i9qnb.js +5 -0
  507. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0gj98094p~zn4.js +1 -0
  508. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0jrkacz_dyem6.js +37 -0
  509. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0l3v45kd.9is_.js +1 -0
  510. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0lgb.0~i1xvv-.js +1 -0
  511. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0lkal3uvr6_~2.js +1 -0
  512. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0mig99af4~uos.js +28 -0
  513. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0pdrpsy-zdxp0.js +5 -0
  514. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0p~l5ap6qqx2o.js +1 -0
  515. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0r0c9y6.8.m5p.js +1 -0
  516. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0stvi5btlxl4m.js +20 -0
  517. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0h_bwlg~kk8lz.js → 0tt1oh112yv-l.js} +2 -2
  518. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0uve8xrt~0a2e.js +1 -0
  519. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0w94x-v00osq0.js +1 -0
  520. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0wh6p5~ft5rma.js +5 -0
  521. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0x_pewz9npq~q.js +1 -0
  522. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0xwny92a.ad_i.js +1 -0
  523. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0zw85-xl9ysjs.js +1 -0
  524. package/cloud-runtime/standalone/apps/local/.next/static/chunks/119v0-idpg-cv.js +16 -0
  525. package/cloud-runtime/standalone/apps/local/.next/static/chunks/11l2tww5f0hsk.js +20 -0
  526. package/cloud-runtime/standalone/apps/local/.next/static/chunks/14v~9vx3tdv85.js +1 -0
  527. package/cloud-runtime/standalone/apps/local/.next/static/chunks/{0826uh6nmsi5l.js → 1503vb7lb6.g1.js} +1 -1
  528. package/cloud-runtime/standalone/apps/local/.next/static/chunks/16d~es6h6k~rj.js +6 -0
  529. package/cloud-runtime/standalone/apps/local/.next/static/chunks/177-q0wwdi0qe.js +1 -0
  530. package/cloud-runtime/standalone/apps/local/agx-server.js +4055 -0
  531. package/cloud-runtime/standalone/apps/local/app/agents/[id]/page.tsx +40 -5
  532. package/cloud-runtime/standalone/apps/local/app/api/agents/[id]/profile/route.ts +10 -0
  533. package/cloud-runtime/standalone/apps/local/app/api/automations/route.ts +10 -2
  534. package/cloud-runtime/standalone/apps/local/app/api/linear/worker/route.ts +151 -0
  535. package/cloud-runtime/standalone/apps/local/app/api/projects/[id]/objectives/[objectiveId]/route.ts +0 -8
  536. package/cloud-runtime/standalone/apps/local/app/api/projects/[id]/objectives/[objectiveId]/scheduled-tasks/route.ts +22 -27
  537. package/cloud-runtime/standalone/apps/local/app/api/projects/[id]/objectives/[objectiveId]/worker/route.ts +89 -0
  538. package/cloud-runtime/standalone/apps/local/app/api/projects/[id]/route.ts +13 -0
  539. package/cloud-runtime/standalone/apps/local/app/api/projects/[id]/search/route.ts +4 -4
  540. package/cloud-runtime/standalone/apps/local/app/api/projects/[id]/teams/route.ts +5 -3
  541. package/cloud-runtime/standalone/apps/local/app/api/prompt-jobs/route.ts +15 -5
  542. package/cloud-runtime/standalone/apps/local/app/globals.css +67 -5
  543. package/cloud-runtime/standalone/apps/local/app/projects/[slug]/folders/page.tsx +25 -0
  544. package/cloud-runtime/standalone/apps/local/app/projects/[slug]/layout.tsx +19 -5
  545. package/cloud-runtime/standalone/apps/local/app/projects/[slug]/objectives/[objectiveId]/page.tsx +7 -2
  546. package/cloud-runtime/standalone/apps/local/app/projects/[slug]/teams/new/page.tsx +236 -10
  547. package/cloud-runtime/standalone/apps/local/app/setup/page.tsx +9 -1
  548. package/cloud-runtime/standalone/apps/local/bundled-server.ts +45 -0
  549. package/cloud-runtime/standalone/apps/local/components/ActionToolbar.tsx +5 -2
  550. package/cloud-runtime/standalone/apps/local/components/AutomationsBoard.tsx +35 -3
  551. package/cloud-runtime/standalone/apps/local/components/ContextMenu.tsx +2 -2
  552. package/cloud-runtime/standalone/apps/local/components/FloatingPanel.tsx +70 -20
  553. package/cloud-runtime/standalone/apps/local/components/IconButton.tsx +10 -2
  554. package/cloud-runtime/standalone/apps/local/components/KanbanBoard.tsx +84 -3
  555. package/cloud-runtime/standalone/apps/local/components/LinearBoard.tsx +434 -36
  556. package/cloud-runtime/standalone/apps/local/components/LogTimeline.tsx +4 -1
  557. package/cloud-runtime/standalone/apps/local/components/NowRunningPanel.tsx +3 -1
  558. package/cloud-runtime/standalone/apps/local/components/PromptJobBoard.tsx +119 -6
  559. package/cloud-runtime/standalone/apps/local/components/SearchCombo.tsx +3 -3
  560. package/cloud-runtime/standalone/apps/local/components/SortableTaskCard.tsx +21 -3
  561. package/cloud-runtime/standalone/apps/local/components/StatusCircle.tsx +3 -3
  562. package/cloud-runtime/standalone/apps/local/components/TaskCard.tsx +51 -1
  563. package/cloud-runtime/standalone/apps/local/components/chat-ui/ChatContainer.tsx +15 -2
  564. package/cloud-runtime/standalone/apps/local/components/chat-ui/Composer.tsx +3 -3
  565. package/cloud-runtime/standalone/apps/local/components/chat-ui/ParticipantBar.tsx +76 -9
  566. package/cloud-runtime/standalone/apps/local/components/graph/ExecutionGraphPanel.tsx +4 -1
  567. package/cloud-runtime/standalone/apps/local/components/graph/GraphFirstView.tsx +6 -2
  568. package/cloud-runtime/standalone/apps/local/components/graph/NodeDetailPanel.tsx +45 -25
  569. package/cloud-runtime/standalone/apps/local/components/graph/NodeInspector.tsx +9 -6
  570. package/cloud-runtime/standalone/apps/local/components/linear/LinearSettingsModal.tsx +105 -0
  571. package/cloud-runtime/standalone/apps/local/components/linear/LinearWorkerConfig.tsx +367 -0
  572. package/cloud-runtime/standalone/apps/local/components/projects/FoldersSummaryCard.tsx +16 -16
  573. package/cloud-runtime/standalone/apps/local/components/projects/FoldersView.tsx +856 -0
  574. package/cloud-runtime/standalone/apps/local/components/projects/ObjectiveActivityTimeline.tsx +40 -32
  575. package/cloud-runtime/standalone/apps/local/components/projects/ObjectiveHealthTrend.tsx +215 -0
  576. package/cloud-runtime/standalone/apps/local/components/projects/ObjectiveScheduledTasksPanel.tsx +338 -91
  577. package/cloud-runtime/standalone/apps/local/components/projects/ProjectHome.tsx +12 -6
  578. package/cloud-runtime/standalone/apps/local/components/projects/ProjectObjectivesWorkspace.tsx +489 -467
  579. package/cloud-runtime/standalone/apps/local/components/projects/ProjectSearchBar.tsx +4 -2
  580. package/cloud-runtime/standalone/apps/local/components/projects/RecentlyCompletedCard.tsx +213 -0
  581. package/cloud-runtime/standalone/apps/local/components/projects/ScheduledTasksSummaryCard.tsx +19 -19
  582. package/cloud-runtime/standalone/apps/local/components/projects/TeamsSummaryCard.tsx +10 -10
  583. package/cloud-runtime/standalone/apps/local/components/projects/TeamsView.tsx +171 -56
  584. package/cloud-runtime/standalone/apps/local/components/projects/WorkingNowCard.tsx +12 -12
  585. package/cloud-runtime/standalone/apps/local/components/projects/home/ObjectiveCard.tsx +13 -10
  586. package/cloud-runtime/standalone/apps/local/components/projects/home/ObjectivesSection.tsx +7 -7
  587. package/cloud-runtime/standalone/apps/local/components/projects/home/ToolPathCard.tsx +2 -2
  588. package/cloud-runtime/standalone/apps/local/components/projects/home/ToolPathsSection.tsx +9 -9
  589. package/cloud-runtime/standalone/apps/local/components/scheduling/ScheduleConditionPicker.tsx +4 -4
  590. package/cloud-runtime/standalone/apps/local/components/setup/McpSetupStep.tsx +242 -0
  591. package/cloud-runtime/standalone/apps/local/components/setup/ProjectStep.tsx +2 -2
  592. package/cloud-runtime/standalone/apps/local/components/setup/ProviderStep.tsx +1 -1
  593. package/cloud-runtime/standalone/apps/local/components/setup/TeamsStep.tsx +288 -15
  594. package/cloud-runtime/standalone/apps/local/components/terminal/ProjectTerminal.tsx +233 -89
  595. package/cloud-runtime/standalone/apps/local/components/terminal/TerminalSessionList.tsx +3 -1
  596. package/cloud-runtime/standalone/apps/local/components/thread/WorkspaceSidebar.tsx +72 -21
  597. package/cloud-runtime/standalone/apps/local/hooks/useInputCapabilities.ts +74 -0
  598. package/cloud-runtime/standalone/apps/local/hooks/useSetupFlow.ts +16 -2
  599. package/cloud-runtime/standalone/apps/local/lib/app-config.ts +35 -0
  600. package/cloud-runtime/standalone/apps/local/lib/objective-health-history.ts +198 -0
  601. package/cloud-runtime/standalone/apps/local/lib/project-objective-context.ts +10 -0
  602. package/cloud-runtime/standalone/apps/local/lib/project-objectives.ts +0 -9
  603. package/cloud-runtime/standalone/apps/local/lib/pty-manager.ts +5 -1
  604. package/cloud-runtime/standalone/apps/local/lib/terminal-server.ts +182 -0
  605. package/cloud-runtime/standalone/apps/local/next.config.ts +2 -1
  606. package/cloud-runtime/standalone/apps/local/package.json +2 -2
  607. package/cloud-runtime/standalone/apps/local/playwright.config.ts +8 -0
  608. package/cloud-runtime/standalone/apps/local/server.js +1 -1
  609. package/cloud-runtime/standalone/apps/local/server.ts +14 -158
  610. package/cloud-runtime/standalone/apps/local/skills-lock.json +20 -0
  611. package/cloud-runtime/standalone/apps/local/src/automations/adapters.ts +5 -0
  612. package/cloud-runtime/standalone/apps/local/src/automations/types.ts +5 -0
  613. package/cloud-runtime/standalone/apps/local/src/automations/validation.ts +12 -5
  614. package/cloud-runtime/standalone/apps/local/src/graph/types.ts +2 -0
  615. package/cloud-runtime/standalone/apps/local/src/objectives/parser.ts +0 -2
  616. package/cloud-runtime/standalone/apps/local/src/objectives/serializer.ts +0 -2
  617. package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/cron.ts +11 -0
  618. package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/linear-worker-constants.ts +38 -0
  619. package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/linear-worker-job.ts +47 -0
  620. package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/linear-worker.ts +482 -0
  621. package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/objective-worker-job.ts +47 -0
  622. package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/objective-worker.ts +511 -0
  623. package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/processor.ts +239 -368
  624. package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/store.ts +19 -4
  625. package/cloud-runtime/standalone/apps/local/src/prompt-scheduler/types.ts +32 -8
  626. package/cloud-runtime/standalone/apps/local/state/terminalTabs.ts +182 -106
  627. package/cloud-runtime/standalone/apps/local/state/windowState.ts +11 -0
  628. package/cloud-runtime/standalone/apps/local/styles/workspaceSidebar.css +65 -0
  629. package/cloud-runtime/standalone/apps/local/worker/index.js +9 -14
  630. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  631. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  632. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  633. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  634. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  635. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  636. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  637. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  638. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  639. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  640. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/pty.node +0 -0
  641. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/pty.pdb +0 -0
  642. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/winpty-agent.exe +0 -0
  643. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/winpty-agent.pdb +0 -0
  644. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/winpty.dll +0 -0
  645. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-arm64/winpty.pdb +0 -0
  646. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  647. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  648. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  649. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  650. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  651. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  652. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/pty.node +0 -0
  653. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/pty.pdb +0 -0
  654. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/winpty-agent.exe +0 -0
  655. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/winpty-agent.pdb +0 -0
  656. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/winpty.dll +0 -0
  657. package/cloud-runtime/standalone/node_modules/node-pty/prebuilds/win32-x64/winpty.pdb +0 -0
  658. package/lib/cli/daemon.js +13 -2
  659. package/lib/cli/onboarding.js +5 -6
  660. package/lib/cli/runCli.js +1 -1
  661. package/lib/cloud/client.js +1 -1
  662. package/lib/commands/chat.js +37 -11
  663. package/lib/commands/daemonBoard.js +19 -13
  664. package/lib/config/cloudConfig.js +1 -1
  665. package/lib/orchestrator/httpClient.js +1 -1
  666. package/lib/prompts/templates.js +8 -9
  667. package/package.json +1 -1
  668. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0-0479y._.js +0 -54
  669. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__088h0r2._.js +0 -3
  670. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__08oj_ky._.js +0 -49
  671. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__08y2lkj._.js +0 -3
  672. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__09joc_o._.js +0 -3
  673. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0gtv0rq._.js +0 -8
  674. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0gvjvx7._.js +0 -237
  675. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0ksbs9p._.js +0 -3
  676. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0o315az._.js +0 -3
  677. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0pz~m67._.js +0 -3
  678. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0q93mk3._.js +0 -7
  679. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0t2jk2r._.js +0 -18
  680. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__0vhcrdv._.js +0 -229
  681. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__11s20j6._.js +0 -3
  682. package/cloud-runtime/standalone/apps/local/.next/server/chunks/[root-of-the-server]__12xhcor._.js +0 -54
  683. package/cloud-runtime/standalone/apps/local/.next/server/chunks/_01rag2f._.js +0 -49
  684. package/cloud-runtime/standalone/apps/local/.next/server/chunks/_03y4xss._.js +0 -21
  685. package/cloud-runtime/standalone/apps/local/.next/server/chunks/_0cm4i3i._.js +0 -3
  686. package/cloud-runtime/standalone/apps/local/.next/server/chunks/_0ijzgnb._.js +0 -3
  687. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_03q7_.q._.js +0 -21
  688. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0m3e2d~._.js +0 -30
  689. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_0r-oiga._.js +0 -30
  690. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_00cwfvi._.js +0 -34
  691. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_0hx7xyz._.js +0 -34
  692. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_0rqcat4._.js +0 -55
  693. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_0sc_lek._.js +0 -79
  694. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_lib_135ddsu._.js +0 -55
  695. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_src_graph_store_ts_0h.2qy9._.js +0 -43
  696. package/cloud-runtime/standalone/apps/local/.next/server/chunks/apps_local_src_prompt-scheduler_processor_ts_0i1av_r._.js +0 -474
  697. package/cloud-runtime/standalone/apps/local/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_0xxf2a0.js +0 -3
  698. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/0rhn_lucide-react_dist_esm_0xd_mxu._.js +0 -3
  699. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__044xm0q._.js +0 -3
  700. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__066ay_e._.js +0 -3
  701. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__09smg3p._.js +0 -18
  702. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0bf346q._.js +0 -3
  703. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0hd2vo4._.js +0 -18
  704. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0iix1sf._.js +0 -3
  705. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0r54zr9._.js +0 -3
  706. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0s8z2_c._.js +0 -18
  707. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/[root-of-the-server]__0wq3ukc._.js +0 -3
  708. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_03-mlx0._.js +0 -7
  709. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_03rf_sb._.js +0 -3
  710. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_09b42z9._.js +0 -3
  711. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0ag3.tl._.js +0 -7
  712. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0dh_hx0._.js +0 -3
  713. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0h8cbsi._.js +0 -3
  714. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0i1ffhz._.js +0 -3
  715. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0ndrb_0._.js +0 -8
  716. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0nlki7b._.js +0 -3
  717. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0ut3k~7._.js +0 -3
  718. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0vibfch._.js +0 -3
  719. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/_0yffwm4._.js +0 -8
  720. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0_q01av._.js +0 -3
  721. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0eh.4j7._.js +0 -3
  722. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0qaowqy._.js +0 -3
  723. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0s0iy2_._.js +0 -3
  724. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_0zr-_na._.js +0 -3
  725. package/cloud-runtime/standalone/apps/local/.next/server/chunks/ssr/apps_local_10qsqky._.js +0 -3
  726. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0.a4-dh~x9sa3.js +0 -6
  727. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0.bv3h68wo33z.js +0 -1
  728. package/cloud-runtime/standalone/apps/local/.next/static/chunks/016.x9zt9~rsh.js +0 -16
  729. package/cloud-runtime/standalone/apps/local/.next/static/chunks/027-6dwgpb0cy.js +0 -1
  730. package/cloud-runtime/standalone/apps/local/.next/static/chunks/031720jijg_th.js +0 -1
  731. package/cloud-runtime/standalone/apps/local/.next/static/chunks/03m1xs0rztynh.js +0 -16
  732. package/cloud-runtime/standalone/apps/local/.next/static/chunks/051-7k0nnm-vm.js +0 -1
  733. package/cloud-runtime/standalone/apps/local/.next/static/chunks/07o~9mm~xds_b.js +0 -1
  734. package/cloud-runtime/standalone/apps/local/.next/static/chunks/08zgoptetnxjj.css +0 -1
  735. package/cloud-runtime/standalone/apps/local/.next/static/chunks/09-_2lcshmjl5.js +0 -1
  736. package/cloud-runtime/standalone/apps/local/.next/static/chunks/09_yj-9nfh48m.js +0 -1
  737. package/cloud-runtime/standalone/apps/local/.next/static/chunks/09c7ssmgohk7l.js +0 -1
  738. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0awbe2r3qazge.css +0 -1
  739. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0dro-bz6f72z0.js +0 -1
  740. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0gbunx8z.~i4x.js +0 -5
  741. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0ge81r~ap.u7n.js +0 -28
  742. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0ghg5160qeazw.js +0 -5
  743. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0gl_8hdxl5qnd.js +0 -37
  744. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0g~v8p6_pc46-.js +0 -1
  745. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0jb4f8425s.-2.js +0 -1
  746. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0kukkarp4un0o.js +0 -1
  747. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0m.2b-cekea8b.js +0 -1
  748. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0o0hwfzwwty4b.js +0 -6
  749. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0ov5lu0tz2o2e.js +0 -1
  750. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0pt8_y9asrg~7.js +0 -1
  751. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0wyg4lymaq0hg.js +0 -3
  752. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0xl~1ux2f~rcu.js +0 -1
  753. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0y7-eze-w7~b4.js +0 -5
  754. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0y8e--tok1214.js +0 -5
  755. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0yy~0bgsz~o6-.js +0 -1
  756. package/cloud-runtime/standalone/apps/local/.next/static/chunks/0~apd0q5_i88z.js +0 -16
  757. package/cloud-runtime/standalone/apps/local/.next/static/chunks/100xrwo-45nrg.js +0 -20
  758. package/cloud-runtime/standalone/apps/local/.next/static/chunks/14h3qxwuo~1q9.js +0 -20
  759. package/cloud-runtime/standalone/apps/local/.next/static/chunks/17oesq5eds3xi.js +0 -1
  760. /package/cloud-runtime/standalone/apps/local/.next/static/{z8XjY2Aj-ox_Dro192i4I → RnYHmEXBwXJjVrVVx2CuP}/_buildManifest.js +0 -0
  761. /package/cloud-runtime/standalone/apps/local/.next/static/{z8XjY2Aj-ox_Dro192i4I → RnYHmEXBwXJjVrVVx2CuP}/_clientMiddlewareManifest.js +0 -0
  762. /package/cloud-runtime/standalone/apps/local/.next/static/{z8XjY2Aj-ox_Dro192i4I → RnYHmEXBwXJjVrVVx2CuP}/_ssgManifest.js +0 -0
@@ -13,9 +13,11 @@ import {
13
13
  FileText,
14
14
  Pencil,
15
15
  Plus,
16
+ Search,
16
17
  Trash2,
17
18
  User,
18
19
  Users,
20
+ Sparkles,
19
21
  X,
20
22
  } from "lucide-react";
21
23
  import { useProjects } from "@/hooks/useProjects";
@@ -26,20 +28,18 @@ import { Markdown } from "@/components/chat-ui/Markdown";
26
28
  import { agentAvatarUrl } from "@/components/chat-ui/ParticipantBar";
27
29
  import RichTextEditor from "@/components/RichTextEditor";
28
30
  import SearchCombo, { type ComboOption } from "@/components/SearchCombo";
29
- import { ScheduleConditionPicker } from "@/components/scheduling/ScheduleConditionPicker";
30
31
  import { ObjectiveScheduledTasksPanel } from "@/components/projects/ObjectiveScheduledTasksPanel";
31
32
  import { ObjectiveActivityTimeline } from "@/components/projects/ObjectiveActivityTimeline";
33
+ import { ObjectiveHealthTrend } from "@/components/projects/ObjectiveHealthTrend";
32
34
  import { LinearIcon } from "@/components/linear/LinearIcon";
33
35
  import { usePromptJobs } from "@/hooks/usePromptJobs";
34
- import { cronToHuman } from "@/src/graph/nl-schedule";
35
- import {
36
- DEFAULT_OBJECTIVE_LINEAR_WORKER_NAME,
37
- type PromptJobExecutionMode,
38
- } from "@/src/prompt-scheduler/types";
36
+ import { useInputCapabilities } from "@/hooks/useInputCapabilities";
39
37
  import { threadService } from "@/services/threadService";
40
38
  import {
41
39
  loadObjectiveChatPanelWidth,
40
+ loadObjectiveListPanelWidth,
42
41
  persistObjectiveChatPanelWidth,
42
+ persistObjectiveListPanelWidth,
43
43
  } from "@/state/windowState";
44
44
  import type { GroupMessage, Participant } from "@/lib/types";
45
45
  import {
@@ -65,6 +65,7 @@ interface ProjectObjectivesWorkspaceProps {
65
65
 
66
66
  interface ProjectObjectiveDetailProps extends ProjectObjectivesWorkspaceProps {
67
67
  objectiveId: string;
68
+ onObjectiveDeleted?: () => void;
68
69
  }
69
70
 
70
71
  interface ObjectiveEditorDraft {
@@ -72,8 +73,6 @@ interface ObjectiveEditorDraft {
72
73
  title: string;
73
74
  teamId: string;
74
75
  summary: string;
75
- cadence: string;
76
- condition: string;
77
76
  }
78
77
 
79
78
  interface ObjectiveTeamDraft {
@@ -109,23 +108,23 @@ const HEALTH_META: Record<
109
108
  > = {
110
109
  on_track: {
111
110
  label: "On track",
112
- chipClass: "border-emerald-500/20 bg-emerald-500/10 text-emerald-200",
113
- toneClass: "text-emerald-300",
111
+ chipClass: "border-[var(--status-completed-border)] bg-[var(--status-completed-bg)] text-[var(--status-completed-text)]",
112
+ toneClass: "text-[var(--status-completed-text)]",
114
113
  },
115
114
  at_risk: {
116
115
  label: "At risk",
117
- chipClass: "border-amber-500/20 bg-amber-500/10 text-amber-100",
118
- toneClass: "text-amber-300",
116
+ chipClass: "border-[var(--status-blocked-border)] bg-[var(--status-blocked-bg)] text-[var(--status-blocked-text)]",
117
+ toneClass: "text-[var(--status-blocked-text)]",
119
118
  },
120
119
  off_track: {
121
120
  label: "Off track",
122
- chipClass: "border-rose-500/20 bg-rose-500/10 text-rose-100",
123
- toneClass: "text-rose-300",
121
+ chipClass: "border-[var(--status-failed-border)] bg-[var(--status-failed-bg)] text-[var(--status-failed-text)]",
122
+ toneClass: "text-[var(--status-failed-text)]",
124
123
  },
125
124
  done: {
126
125
  label: "Done",
127
- chipClass: "border-sky-500/20 bg-sky-500/10 text-sky-100",
128
- toneClass: "text-sky-300",
126
+ chipClass: "border-[var(--status-in-progress-border)] bg-[var(--status-in-progress-bg)] text-[var(--status-in-progress-text)]",
127
+ toneClass: "text-[var(--status-in-progress-text)]",
129
128
  },
130
129
  };
131
130
 
@@ -138,33 +137,11 @@ function ObjectiveChatResizeHandle({
138
137
  }: {
139
138
  onResize: (delta: number) => void;
140
139
  }) {
141
- const dragging = useRef(false);
142
- const lastX = useRef(0);
143
-
144
- useEffect(() => {
145
- if (!dragging.current) return;
146
-
147
- const onMouseMove = (event: MouseEvent) => {
148
- const delta = lastX.current - event.clientX;
149
- lastX.current = event.clientX;
150
- onResize(delta);
151
- };
152
-
153
- const onMouseUp = () => {
154
- dragging.current = false;
155
- document.body.style.cursor = "";
156
- document.body.style.userSelect = "";
157
- window.removeEventListener("mousemove", onMouseMove);
158
- window.removeEventListener("mouseup", onMouseUp);
159
- };
140
+ const { isTouchLayout } = useInputCapabilities();
160
141
 
161
- window.addEventListener("mousemove", onMouseMove);
162
- window.addEventListener("mouseup", onMouseUp);
163
- return () => {
164
- window.removeEventListener("mousemove", onMouseMove);
165
- window.removeEventListener("mouseup", onMouseUp);
166
- };
167
- });
142
+ if (isTouchLayout) {
143
+ return null;
144
+ }
168
145
 
169
146
  return (
170
147
  <div
@@ -174,10 +151,22 @@ function ObjectiveChatResizeHandle({
174
151
  className="group relative z-10 hidden w-0 shrink-0 cursor-col-resize xl:block"
175
152
  onMouseDown={(event) => {
176
153
  event.preventDefault();
177
- dragging.current = true;
178
- lastX.current = event.clientX;
154
+ let lastX = event.clientX;
179
155
  document.body.style.cursor = "col-resize";
180
156
  document.body.style.userSelect = "none";
157
+ const onMouseMove = (ev: MouseEvent) => {
158
+ const delta = lastX - ev.clientX;
159
+ lastX = ev.clientX;
160
+ onResize(delta);
161
+ };
162
+ const onMouseUp = () => {
163
+ document.body.style.cursor = "";
164
+ document.body.style.userSelect = "";
165
+ window.removeEventListener("mousemove", onMouseMove);
166
+ window.removeEventListener("mouseup", onMouseUp);
167
+ };
168
+ window.addEventListener("mousemove", onMouseMove);
169
+ window.addEventListener("mouseup", onMouseUp);
181
170
  }}
182
171
  >
183
172
  <div className="absolute inset-y-0 -left-0.5 w-1 transition-colors group-hover:bg-[var(--primary)]/40" />
@@ -199,8 +188,6 @@ function buildEmptyObjectiveDraft(): ObjectiveEditorDraft {
199
188
  title: "",
200
189
  teamId: "",
201
190
  summary: "",
202
- cadence: "",
203
- condition: "",
204
191
  };
205
192
  }
206
193
 
@@ -210,8 +197,6 @@ function buildObjectiveDraft(objective: ProjectObjective): ObjectiveEditorDraft
210
197
  title: objective.title,
211
198
  teamId: objective.teamId,
212
199
  summary: objective.summary,
213
- cadence: objective.cadence,
214
- condition: objective.condition,
215
200
  };
216
201
  }
217
202
 
@@ -258,12 +243,6 @@ function getTeamName(teams: ProjectTeamSummary[], teamId: string): string | null
258
243
  return teams.find((team) => team.id === teamId)?.name ?? null;
259
244
  }
260
245
 
261
- function formatObjectiveCadence(cadence: string): string {
262
- const trimmed = cadence.trim();
263
- if (!trimmed) return "Not set yet";
264
- return cronToHuman(trimmed) ?? trimmed;
265
- }
266
-
267
246
  function prependObjectiveLabelToPrompt(
268
247
  objective: Pick<ProjectObjective, "key">,
269
248
  prompt: string
@@ -391,27 +370,24 @@ function buildObjectiveChatPrefix(
391
370
  `Objective label: ${objective.key}`,
392
371
  teamName ? `Owning team: ${teamName}` : "",
393
372
  notesPreview ? `Current notes:\n${notesPreview}` : "Current notes: none yet.",
394
- objective.cadence
395
- ? `Wake schedule: ${formatObjectiveCadence(objective.cadence)}`
396
- : "Wake schedule: not set yet.",
397
- objective.condition ? `Wake condition: ${objective.condition}` : "",
373
+ "Wake schedule: managed by the built-in objective worker job.",
398
374
 
399
- `## Objective file (source of truth)\n\nThis objective is stored as a frontmatter markdown file at:\n\`${objectiveFilePath}\`\n\nFile format:\n- YAML frontmatter between \`---\` delimiters contains all metadata (title, teamId, key, status, progress, cadence, condition, scheduledTaskIds, threadId, chatSessionVersion, createdAt, updatedAt).\n- \`## Activities\` section contains the activity timeline; each activity is a \`### Title\` block with metadata lines (\`- **id:**\`, \`- **source:**\`, \`- **created:**\`, \`- **body:**\`) and optional \`#### Replies\` sub-section.\n\nNotes are stored as separate files in \`${notesDir}\`. Each note is a markdown file with YAML frontmatter (id, title, objectiveId, createdAt, updatedAt) and a markdown body.\n\nWhen updating the objective, you can edit this file directly. Rules:\n- NEVER remove or break the \`---\` frontmatter delimiters.\n- NEVER change the \`id\` or \`createdAt\` fields.\n- Always update \`updatedAt\` to the current ISO timestamp when making changes.\n- After any edit, call \`GET ${validateRoute}\` to verify the file is still valid.\n- If validation fails, fix the errors immediately before doing anything else.`,
375
+ `## Objective file (source of truth)\n\nThis objective is stored as a frontmatter markdown file at:\n\`${objectiveFilePath}\`\n\nFile format:\n- YAML frontmatter between \`---\` delimiters contains all metadata (title, teamId, key, status, progress, scheduledTaskIds, threadId, chatSessionVersion, createdAt, updatedAt).\n- \`## Activities\` section contains the activity timeline; each activity is a \`### Title\` block with metadata lines (\`- **id:**\`, \`- **source:**\`, \`- **created:**\`, \`- **body:**\`) and optional \`#### Replies\` sub-section.\n\nNotes are stored as separate files in \`${notesDir}\`. Each note is a markdown file with YAML frontmatter (id, title, objectiveId, createdAt, updatedAt) and a markdown body.\n\nWhen updating the objective, you can edit this file directly. Rules:\n- NEVER remove or break the \`---\` frontmatter delimiters.\n- NEVER change the \`id\` or \`createdAt\` fields.\n- Always update \`updatedAt\` to the current ISO timestamp when making changes.\n- After any edit, call \`GET ${validateRoute}\` to verify the file is still valid.\n- If validation fails, fix the errors immediately before doing anything else.`,
400
376
 
401
377
  "Scheduled tasks live in the shared scheduled-task list and are filtered by this objective label.",
402
- "Your job is to help the team develop the strategy needed to reach the goal, including the right combination of objective notes, wake cadence/condition, scheduled tasks, and Linear tickets.",
378
+ "Your job is to help the team develop the strategy needed to reach the goal, including the right combination of objective notes, scheduled tasks, and Linear tickets.",
403
379
  "Use the current session history to build on prior reasoning. Only reset and start from scratch when the user explicitly starts a new session.",
404
380
  "Use this thread to pressure-test strategy, suggest better tactics, rewrite the objective when asked, propose the right operational cadence, and take concrete follow-up actions when the user wants them applied.",
405
381
  "When suggesting edits, prefer editing the frontmatter file directly or using the notes API. When the user asks you to make a change, edit the file, validate, then confirm.",
406
382
  "Local objective APIs:",
407
- `- PATCH ${objectiveRoute} with JSON fields such as {"title","cadence","condition","teamId","key"} to update the objective itself.`,
383
+ `- PATCH ${objectiveRoute} with JSON fields such as {"title","teamId","key"} to update the objective itself.`,
408
384
  `- GET ${notesRoute} to list all notes for this objective. Returns {"notes":[...],"total","page","limit","hasMore"}.`,
409
385
  `- POST ${notesRoute} with {"title","body"} to create a new note.`,
410
386
  `- GET ${notesRoute}/{noteId} to read a single note.`,
411
387
  `- PATCH ${notesRoute}/{noteId} with {"title","body"} to update a note.`,
412
388
  `- DELETE ${notesRoute}/{noteId} to delete a note.`,
413
389
  `- GET ${scheduledTasksRoute} to inspect the scheduled tasks already tracked for this objective.`,
414
- `- POST ${scheduledTasksRoute} with {"name","prompt","cadence","condition","agentId","syncObjectiveSchedule":true} to create a scheduled task for this objective.`,
390
+ `- POST ${scheduledTasksRoute} with {"name","prompt","cadence","agentId"} to create a scheduled task for this objective.`,
415
391
  `- GET ${linearIssuesRoute} to inspect Linear tickets carrying the objective label "${objective.key}".`,
416
392
  `- POST ${linearIssuesRoute} with {"title","description","teamId","assigneeId","cycleId","stateId","priority"} to create a Linear ticket labeled "${objective.key}".`,
417
393
  `- GET ${validateRoute} to validate the objective file on disk. Returns {"valid":true} or {"valid":false,"errors":[...]}.`,
@@ -636,24 +612,27 @@ function ObjectiveChatPanel({
636
612
 
637
613
  async function loadParticipants() {
638
614
  try {
639
- const [participantsResponse, projectAgentsResponse] = await Promise.all([
615
+ const agentsUrl = objective.teamId
616
+ ? `/api/projects/${projectId}/teams/${objective.teamId}/agents`
617
+ : `/api/projects/${projectId}/agents`;
618
+ const [participantsResponse, agentsResponse] = await Promise.all([
640
619
  fetch("/api/participants"),
641
- fetch(`/api/projects/${projectId}/agents`),
620
+ fetch(agentsUrl),
642
621
  ]);
643
622
  const rawParticipants = participantsResponse.ok
644
623
  ? await participantsResponse.json()
645
624
  : [];
646
625
  const allParticipants = Array.isArray(rawParticipants) ? (rawParticipants as Participant[]) : [];
647
- const rawProjectAgents = projectAgentsResponse.ok
648
- ? await projectAgentsResponse.json()
626
+ const rawAgents = agentsResponse.ok
627
+ ? await agentsResponse.json()
649
628
  : { agents: [] };
650
- const projectAgentsPayload =
651
- rawProjectAgents && typeof rawProjectAgents === "object"
652
- ? (rawProjectAgents as { agents?: ProjectAgentSummary[] })
629
+ const agentsPayload =
630
+ rawAgents && typeof rawAgents === "object"
631
+ ? (rawAgents as { agents?: ProjectAgentSummary[] })
653
632
  : { agents: [] };
654
633
  if (cancelled) return;
655
634
 
656
- const orderedAgentIds = (projectAgentsPayload.agents ?? [])
635
+ const orderedAgentIds = (agentsPayload.agents ?? [])
657
636
  .slice()
658
637
  .sort((left, right) => left.routing_order - right.routing_order)
659
638
  .map((agent) => agent.agent_id);
@@ -680,7 +659,7 @@ function ObjectiveChatPanel({
680
659
  return () => {
681
660
  cancelled = true;
682
661
  };
683
- }, [projectId]);
662
+ }, [projectId, objective.teamId]);
684
663
 
685
664
  useEffect(() => {
686
665
  if (!objective.threadId) {
@@ -1053,7 +1032,7 @@ function ObjectiveChatPanel({
1053
1032
  <>
1054
1033
  <ObjectiveChatResizeHandle onResize={handleChatPanelResize} />
1055
1034
  <aside
1056
- className="relative flex h-full min-h-[420px] w-full flex-col overflow-hidden border-t border-[var(--border)] bg-[rgba(8,12,18,0.72)] xl:min-h-0 xl:w-[var(--objective-chat-panel-width)] xl:shrink-0 xl:self-stretch xl:border-l xl:border-t-0"
1035
+ className="relative flex h-full min-h-[420px] w-full flex-col overflow-hidden border-t border-[var(--border)] bg-[var(--overlay-panel)] xl:min-h-0 xl:w-[var(--objective-chat-panel-width)] xl:shrink-0 xl:self-stretch xl:border-l xl:border-t-0"
1057
1036
  style={
1058
1037
  {
1059
1038
  "--objective-chat-panel-width": `${chatPanelWidth}px`,
@@ -1068,7 +1047,7 @@ function ObjectiveChatPanel({
1068
1047
  type="button"
1069
1048
  onClick={() => setChatView("list")}
1070
1049
  aria-label="Back to sessions"
1071
- className="inline-flex min-w-0 items-center gap-2 text-left text-sm font-medium text-[var(--foreground)] transition-colors hover:text-sky-100"
1050
+ className="inline-flex min-w-0 items-center gap-2 text-left text-sm font-medium text-[var(--foreground)] transition-colors hover:text-[var(--primary)]"
1072
1051
  >
1073
1052
  <ArrowLeft className="h-3.5 w-3.5" />
1074
1053
  <span className="truncate">
@@ -1118,7 +1097,7 @@ function ObjectiveChatPanel({
1118
1097
  setSelectedSessionId(session.rootMessageId);
1119
1098
  setChatView("detail");
1120
1099
  }}
1121
- className="flex w-full items-start justify-between gap-3 px-4 py-3 text-left transition-colors hover:bg-white/[0.02]"
1100
+ className="flex w-full items-start justify-between gap-3 px-4 py-3 text-left transition-colors hover:bg-[var(--overlay-panel-soft)]"
1122
1101
  >
1123
1102
  <div className="min-w-0 flex-1">
1124
1103
  <p className="truncate text-sm font-medium text-[var(--foreground)]">
@@ -1131,7 +1110,7 @@ function ObjectiveChatPanel({
1131
1110
  </div>
1132
1111
  <div className="flex shrink-0 items-center gap-2">
1133
1112
  {sessionState ? (
1134
- <span className="rounded-full border border-sky-400/30 bg-sky-400/10 px-2 py-1 text-[10px] font-semibold uppercase tracking-[0.18em] text-sky-100">
1113
+ <span className="rounded-full border border-[var(--status-in-progress-border)] bg-[var(--status-in-progress-bg)] px-2 py-1 text-[10px] font-semibold uppercase tracking-[0.18em] text-[var(--status-in-progress-text)]">
1135
1114
  {sessionState === "queued" ? "Queued" : "Working"}
1136
1115
  </span>
1137
1116
  ) : null}
@@ -1160,7 +1139,7 @@ function ObjectiveChatPanel({
1160
1139
  return (
1161
1140
  <div key={message.id} className="flex gap-3">
1162
1141
  {message.role === "user" ? (
1163
- <div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-[rgba(15,23,42,0.55)] text-[var(--muted-foreground)]">
1142
+ <div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-[var(--overlay-panel-soft)] text-[var(--muted-foreground)]">
1164
1143
  <User className="h-4 w-4" />
1165
1144
  </div>
1166
1145
  ) : (
@@ -1184,7 +1163,7 @@ function ObjectiveChatPanel({
1184
1163
  })}
1185
1164
  </span>
1186
1165
  </div>
1187
- <div className="mt-2 rounded-2xl border border-[var(--border)] bg-[rgba(15,23,42,0.32)] px-4 py-3 text-sm text-[var(--foreground)]">
1166
+ <div className="mt-2 rounded-2xl border border-[var(--border)] bg-[var(--overlay-panel-muted)] px-4 py-3 text-sm text-[var(--foreground)]">
1188
1167
  <Markdown content={message.content} isUser={message.role === "user"} />
1189
1168
  </div>
1190
1169
  </div>
@@ -1208,7 +1187,7 @@ function ObjectiveChatPanel({
1208
1187
  )}
1209
1188
  </div>
1210
1189
 
1211
- <div className="absolute bottom-0 left-0 right-0 p-3 pb-[calc(0.75rem+env(safe-area-inset-bottom))] bg-[rgba(8,12,18,0.72)]">
1190
+ <div className="absolute bottom-0 left-0 right-0 bg-[var(--overlay-panel)] p-3 pb-[calc(0.75rem+env(safe-area-inset-bottom))]">
1212
1191
  <Composer
1213
1192
  onSend={handleSend}
1214
1193
  onStop={interruptObjectiveChat}
@@ -1265,7 +1244,7 @@ function ObjectiveNotesEditor({
1265
1244
  if (!editable && !hasContent) return null;
1266
1245
 
1267
1246
  return (
1268
- <div className="overflow-hidden border-l-2 border-zinc-700/60 pl-4 transition-all focus-within:border-indigo-500/60">
1247
+ <div className="overflow-hidden border-l-2 border-[var(--border)]/60 pl-4 transition-all focus-within:border-indigo-500/60">
1269
1248
  {editable || hasContent ? (
1270
1249
  <RichTextEditor
1271
1250
  content={content}
@@ -1278,43 +1257,96 @@ function ObjectiveNotesEditor({
1278
1257
  );
1279
1258
  }
1280
1259
 
1260
+ const OBJECTIVE_LIST_MIN_WIDTH = 240;
1261
+ const OBJECTIVE_LIST_MAX_WIDTH = 480;
1262
+
1263
+ function ObjectiveListResizeHandle({
1264
+ onResize,
1265
+ }: {
1266
+ onResize: (delta: number) => void;
1267
+ }) {
1268
+ const { isTouchLayout } = useInputCapabilities();
1269
+
1270
+ if (isTouchLayout) {
1271
+ return null;
1272
+ }
1273
+
1274
+ return (
1275
+ <div
1276
+ role="separator"
1277
+ aria-orientation="vertical"
1278
+ aria-label="Resize objective list panel"
1279
+ className="group relative z-10 w-0 shrink-0 cursor-col-resize"
1280
+ onMouseDown={(event) => {
1281
+ event.preventDefault();
1282
+ let lastX = event.clientX;
1283
+ document.body.style.cursor = "col-resize";
1284
+ document.body.style.userSelect = "none";
1285
+ const onMouseMove = (ev: MouseEvent) => {
1286
+ const delta = ev.clientX - lastX;
1287
+ lastX = ev.clientX;
1288
+ onResize(delta);
1289
+ };
1290
+ const onMouseUp = () => {
1291
+ document.body.style.cursor = "";
1292
+ document.body.style.userSelect = "";
1293
+ window.removeEventListener("mousemove", onMouseMove);
1294
+ window.removeEventListener("mouseup", onMouseUp);
1295
+ };
1296
+ window.addEventListener("mousemove", onMouseMove);
1297
+ window.addEventListener("mouseup", onMouseUp);
1298
+ }}
1299
+ >
1300
+ <div className="absolute inset-y-0 -left-0.5 w-1 transition-colors group-hover:bg-[var(--primary)]/40" />
1301
+ </div>
1302
+ );
1303
+ }
1304
+
1281
1305
  function ObjectiveListCard({
1282
- projectSlug,
1283
1306
  objective,
1284
1307
  activityCount,
1285
1308
  lastActivityAt,
1286
1309
  activeAgentIds,
1287
1310
  participants,
1311
+ isSelected,
1312
+ onSelect,
1288
1313
  }: {
1289
- projectSlug: string;
1290
1314
  objective: ProjectObjective;
1291
1315
  activityCount: number;
1292
1316
  lastActivityAt: string | null;
1293
1317
  activeAgentIds?: string[];
1294
1318
  participants?: Participant[];
1319
+ isSelected?: boolean;
1320
+ onSelect?: () => void;
1295
1321
  }) {
1296
1322
  const activityMeta = buildActivityMeta(activityCount, lastActivityAt);
1297
1323
 
1298
1324
  return (
1299
1325
  <article className="px-2">
1300
- <Link
1301
- href={buildObjectiveHref(projectSlug, objective.id)}
1326
+ <button
1327
+ type="button"
1328
+ onClick={onSelect}
1302
1329
  aria-label={`Open details for ${objective.title}`}
1303
- className="group flex items-center gap-3 rounded-2xl py-2 transition-colors hover:bg-white/[0.02] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sky-400/40"
1330
+ className={`group flex w-full items-center gap-3 rounded-xl px-2 py-2 text-left transition-colors ${
1331
+ isSelected
1332
+ ? "bg-[var(--primary)]/10 border border-[var(--primary)]/20"
1333
+ : "border border-transparent hover:bg-[var(--secondary)]"
1334
+ }`}
1304
1335
  >
1305
- <div className="min-w-0 flex-1 px-1 py-1.5">
1306
- <div className="flex min-w-0 items-center gap-3">
1307
- <span className="truncate text-sm font-medium text-[var(--foreground)]">
1308
- {objective.title}
1336
+ <div className="min-w-0 flex-1 py-0.5">
1337
+ <div className="flex min-w-0 items-center gap-2">
1338
+ <span
1339
+ className={`rounded-full border px-1.5 py-0 text-[9px] font-semibold uppercase tracking-[0.12em] ${HEALTH_META[objective.status].chipClass}`}
1340
+ >
1341
+ {HEALTH_META[objective.status].label}
1309
1342
  </span>
1310
1343
  </div>
1311
- <div className="mt-1 text-xs text-[var(--muted-foreground)] sm:hidden">
1344
+ <p className="mt-1 truncate text-sm font-medium text-[var(--foreground)]">
1345
+ {objective.title}
1346
+ </p>
1347
+ <p className="mt-0.5 text-[11px] text-[var(--muted-foreground)]">
1312
1348
  {activityMeta}
1313
- </div>
1314
- </div>
1315
-
1316
- <div className="hidden shrink-0 text-right text-xs text-[var(--muted-foreground)] sm:block">
1317
- <div>{activityMeta}</div>
1349
+ </p>
1318
1350
  </div>
1319
1351
 
1320
1352
  {activeAgentIds && activeAgentIds.length > 0 && (
@@ -1330,19 +1362,15 @@ function ObjectiveListCard({
1330
1362
  })}
1331
1363
  </span>
1332
1364
  )}
1333
-
1334
- <span className="inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-[var(--muted-foreground)] transition-colors group-hover:bg-white/5 group-hover:text-[var(--foreground)] group-focus-visible:bg-white/5 group-focus-visible:text-[var(--foreground)]">
1335
- <ArrowRight className="h-4 w-4" />
1336
- </span>
1337
- </Link>
1365
+ </button>
1338
1366
  </article>
1339
1367
  );
1340
1368
  }
1341
1369
 
1342
1370
  export function ProjectObjectivesOverview({
1343
1371
  projectSlug,
1344
- }: ProjectObjectivesWorkspaceProps) {
1345
- const router = useRouter();
1372
+ initialObjectiveId,
1373
+ }: ProjectObjectivesWorkspaceProps & { initialObjectiveId?: string }) {
1346
1374
  const { isLoading, project, workspace, teams, persistWorkspace } =
1347
1375
  useProjectObjectivesWorkspace(projectSlug);
1348
1376
  const objectives = workspace.objectives;
@@ -1350,12 +1378,36 @@ export function ProjectObjectivesOverview({
1350
1378
  () => getAvailableTeams(teams, workspace),
1351
1379
  [teams, workspace]
1352
1380
  );
1381
+ const [selectedObjectiveId, setSelectedObjectiveId] = useState<string | null>(
1382
+ initialObjectiveId ?? null
1383
+ );
1384
+ const [listPanelWidth, setListPanelWidth] = useState(() => {
1385
+ return loadObjectiveListPanelWidth() || 320;
1386
+ });
1353
1387
  const [objectiveEditor, setObjectiveEditor] = useState<ObjectiveEditorDraft | null>(null);
1354
1388
  const [isSaving, setIsSaving] = useState(false);
1355
1389
  const [saveError, setSaveError] = useState<string | null>(null);
1356
1390
  const [activeAgentsByObjective, setActiveAgentsByObjective] = useState<Map<string, string[]>>(new Map());
1357
1391
  const [participants, setParticipants] = useState<Participant[]>([]);
1358
1392
 
1393
+ // Auto-select first objective when none is selected
1394
+ useEffect(() => {
1395
+ if (!selectedObjectiveId && objectives.length > 0) {
1396
+ setSelectedObjectiveId(objectives[0].id);
1397
+ }
1398
+ }, [selectedObjectiveId, objectives]);
1399
+
1400
+ // Clear selection if the selected objective was deleted
1401
+ useEffect(() => {
1402
+ if (
1403
+ selectedObjectiveId &&
1404
+ objectives.length > 0 &&
1405
+ !objectives.some((o) => o.id === selectedObjectiveId)
1406
+ ) {
1407
+ setSelectedObjectiveId(objectives[0]?.id ?? null);
1408
+ }
1409
+ }, [selectedObjectiveId, objectives]);
1410
+
1359
1411
  useEffect(() => {
1360
1412
  let cancelled = false;
1361
1413
  async function load() {
@@ -1423,8 +1475,6 @@ export function ProjectObjectivesOverview({
1423
1475
  teamId,
1424
1476
  key: generateProjectObjectiveKey(title, workspace.objectives),
1425
1477
  summary: objectiveEditor.summary,
1426
- cadence: objectiveEditor.cadence,
1427
- condition: objectiveEditor.condition,
1428
1478
  now,
1429
1479
  });
1430
1480
 
@@ -1433,8 +1483,19 @@ export function ProjectObjectivesOverview({
1433
1483
 
1434
1484
  try {
1435
1485
  await persistWorkspace(upsertProjectObjective(workspace, nextObjective));
1486
+
1487
+ // After the persist succeeds, ensure the built-in worker job exists
1488
+ try {
1489
+ await fetch(
1490
+ `/api/projects/${project?.id}/objectives/${nextObjective.id}/worker`,
1491
+ { method: 'POST', headers: { 'Content-Type': 'application/json' } },
1492
+ );
1493
+ } catch {
1494
+ // Worker job creation is best-effort — will be lazily created on first run
1495
+ }
1496
+
1436
1497
  setObjectiveEditor(null);
1437
- router.push(buildObjectiveHref(projectSlug, nextObjective.id));
1498
+ setSelectedObjectiveId(nextObjective.id);
1438
1499
  } catch (error) {
1439
1500
  setSaveError(
1440
1501
  error instanceof Error ? error.message : "Failed to save objective updates."
@@ -1444,6 +1505,17 @@ export function ProjectObjectivesOverview({
1444
1505
  }
1445
1506
  };
1446
1507
 
1508
+ const handleListPanelResize = useCallback((delta: number) => {
1509
+ setListPanelWidth((currentWidth) => {
1510
+ const nextWidth = Math.max(
1511
+ OBJECTIVE_LIST_MIN_WIDTH,
1512
+ Math.min(OBJECTIVE_LIST_MAX_WIDTH, currentWidth + delta)
1513
+ );
1514
+ persistObjectiveListPanelWidth(nextWidth);
1515
+ return nextWidth;
1516
+ });
1517
+ }, []);
1518
+
1447
1519
  if (isLoading && !project) {
1448
1520
  return <LoadingState label="Loading objectives..." />;
1449
1521
  }
@@ -1453,57 +1525,88 @@ export function ProjectObjectivesOverview({
1453
1525
  }
1454
1526
 
1455
1527
  return (
1456
- <div className="flex h-full min-h-0 flex-col bg-[radial-gradient(circle_at_top_left,rgba(59,130,246,0.14),transparent_28%),var(--background)] text-[var(--foreground)]">
1457
- <div className="border-b border-[var(--border)] bg-[rgba(10,14,20,0.7)] px-4 py-5 backdrop-blur md:px-6">
1458
- <div className="flex flex-col gap-4 md:flex-row md:items-end md:justify-between">
1459
- <div className="space-y-2">
1460
- <p className="text-sm text-[var(--muted-foreground)]">
1461
- {objectives.length === 0
1462
- ? "Add an objective to start tracking work in this project."
1463
- : "Click an objective to open its detail view."}
1528
+ <div className="flex h-full min-h-0 overflow-hidden bg-[var(--background)] text-[var(--foreground)]">
1529
+ {/* Left panel: objective list */}
1530
+ <div
1531
+ className="flex flex-shrink-0 flex-col border-r border-[var(--border)] bg-[var(--background)]"
1532
+ style={{ width: listPanelWidth }}
1533
+ >
1534
+ <div className="flex items-center justify-between border-b border-[var(--border)] px-4 py-3">
1535
+ <div className="min-w-0">
1536
+ <p className="text-xs font-semibold uppercase tracking-[0.12em] text-[var(--muted-foreground)]">
1537
+ Objectives
1538
+ </p>
1539
+ <p className="mt-0.5 text-[11px] text-[var(--muted-foreground)]">
1540
+ {objectives.length === 0 ? "None yet" : `${objectives.length} total`}
1464
1541
  </p>
1465
1542
  </div>
1466
-
1467
1543
  <button
1468
1544
  type="button"
1469
1545
  onClick={() => setObjectiveEditor(buildEmptyObjectiveDraft())}
1470
- className="inline-flex items-center gap-2 self-start rounded-xl border border-emerald-500/30 bg-emerald-500/10 px-3 py-2 text-sm font-medium text-emerald-100 transition-colors hover:bg-emerald-500/20"
1546
+ className="inline-flex h-7 w-7 items-center justify-center rounded-lg text-[var(--muted-foreground)] transition-colors hover:bg-[var(--secondary)] hover:text-[var(--foreground)]"
1547
+ aria-label="New objective"
1471
1548
  >
1472
1549
  <Plus className="h-4 w-4" />
1473
- New objective
1474
1550
  </button>
1475
1551
  </div>
1552
+
1476
1553
  <ErrorBanner message={saveError} />
1554
+
1555
+ <div className="flex-1 overflow-y-auto py-1">
1556
+ {objectives.length === 0 ? (
1557
+ <div className="px-4 py-8 text-center">
1558
+ <p className="text-sm text-[var(--muted-foreground)]">
1559
+ No objectives yet.
1560
+ </p>
1561
+ <button
1562
+ type="button"
1563
+ onClick={() => setObjectiveEditor(buildEmptyObjectiveDraft())}
1564
+ className="mt-2 text-sm text-[var(--primary)] hover:underline"
1565
+ >
1566
+ Create one
1567
+ </button>
1568
+ </div>
1569
+ ) : (
1570
+ <div className="space-y-0.5">
1571
+ {objectives.map((objective) => {
1572
+ const objectiveActivities = buildObjectiveTimelineActivities({
1573
+ objective,
1574
+ workspace,
1575
+ });
1576
+
1577
+ return (
1578
+ <ObjectiveListCard
1579
+ key={objective.id}
1580
+ objective={objective}
1581
+ activityCount={objectiveActivities.length}
1582
+ lastActivityAt={objectiveActivities[0]?.createdAt ?? null}
1583
+ activeAgentIds={activeAgentsByObjective.get(objective.id)}
1584
+ participants={participants}
1585
+ isSelected={selectedObjectiveId === objective.id}
1586
+ onSelect={() => setSelectedObjectiveId(objective.id)}
1587
+ />
1588
+ );
1589
+ })}
1590
+ </div>
1591
+ )}
1592
+ </div>
1477
1593
  </div>
1478
1594
 
1479
- <div className="flex-1 overflow-y-auto px-4 py-5 md:px-6 md:py-6">
1480
- {objectives.length === 0 ? (
1481
- <div className="mx-auto max-w-3xl rounded-[32px] border border-dashed border-[var(--border)] bg-[var(--card-bg)] p-8 text-center">
1482
- <p className="text-lg font-semibold text-[var(--foreground)]">No objectives yet</p>
1483
- <p className="mt-2 text-sm text-[var(--muted-foreground)]">
1484
- Keep the root view simple: objective list first, detail after click-through.
1485
- </p>
1486
- </div>
1487
- ) : (
1488
- <div className="mx-auto max-w-4xl divide-y divide-[var(--border)] overflow-hidden rounded-[24px] border border-[var(--border)] bg-[rgba(8,12,18,0.58)]">
1489
- {objectives.map((objective) => {
1490
- const objectiveActivities = buildObjectiveTimelineActivities({
1491
- objective,
1492
- workspace,
1493
- });
1595
+ <ObjectiveListResizeHandle onResize={handleListPanelResize} />
1494
1596
 
1495
- return (
1496
- <ObjectiveListCard
1497
- key={objective.id}
1498
- projectSlug={projectSlug}
1499
- objective={objective}
1500
- activityCount={objectiveActivities.length}
1501
- lastActivityAt={objectiveActivities[0]?.createdAt ?? null}
1502
- activeAgentIds={activeAgentsByObjective.get(objective.id)}
1503
- participants={participants}
1504
- />
1505
- );
1506
- })}
1597
+ {/* Right panel: objective detail */}
1598
+ <div className="flex-1 min-w-0 min-h-0 overflow-hidden">
1599
+ {selectedObjectiveId ? (
1600
+ <ProjectObjectiveDetail
1601
+ projectSlug={projectSlug}
1602
+ objectiveId={selectedObjectiveId}
1603
+ onObjectiveDeleted={() => setSelectedObjectiveId(null)}
1604
+ />
1605
+ ) : (
1606
+ <div className="flex h-full items-center justify-center text-sm text-[var(--muted-foreground)]">
1607
+ {objectives.length === 0
1608
+ ? "Create an objective to get started."
1609
+ : "Select an objective from the list."}
1507
1610
  </div>
1508
1611
  )}
1509
1612
  </div>
@@ -1526,6 +1629,7 @@ export function ProjectObjectivesOverview({
1526
1629
  export function ProjectObjectiveDetail({
1527
1630
  projectSlug,
1528
1631
  objectiveId,
1632
+ onObjectiveDeleted,
1529
1633
  }: ProjectObjectiveDetailProps) {
1530
1634
  const router = useRouter();
1531
1635
  const { isLoading, project, workspace, teams, persistWorkspace, refetchProject } =
@@ -1541,7 +1645,6 @@ export function ProjectObjectiveDetail({
1541
1645
  const teamName = objective ? getTeamName(teams, objective.teamId) : null;
1542
1646
  const [objectiveEditor, setObjectiveEditor] = useState<ObjectiveEditorDraft | null>(null);
1543
1647
  const [teamEditor, setTeamEditor] = useState<ObjectiveTeamDraft | null>(null);
1544
- const [wakeEditor, setWakeEditor] = useState<ObjectiveEditorDraft | null>(null);
1545
1648
 
1546
1649
  const [activeTab, setActiveTab] = useState<ObjectiveDetailTab>("activity");
1547
1650
  const [activityTotal, setActivityTotal] = useState(0);
@@ -1553,10 +1656,11 @@ export function ProjectObjectiveDetail({
1553
1656
  const [noteDrafts, setNoteDrafts] = useState<Record<string, string>>({});
1554
1657
  const [noteTitleDrafts, setNoteTitleDrafts] = useState<Record<string, string>>({});
1555
1658
  const [savingNoteIds, setSavingNoteIds] = useState<Set<string>>(new Set());
1556
- const [newNoteTitle, setNewNoteTitle] = useState("");
1557
1659
  const [isCreatingNote, setIsCreatingNote] = useState(false);
1660
+ const [noteSearch, setNoteSearch] = useState("");
1558
1661
  const [linearIssues, setLinearIssues] = useState<ObjectiveLinearIssueSummary[]>([]);
1559
1662
  const [linearConnected, setLinearConnected] = useState(true);
1663
+ const [workingOnObjective, setWorkingOnObjective] = useState(false);
1560
1664
 
1561
1665
  const { jobs: scheduledJobs } = usePromptJobs(project?.id ?? null, {
1562
1666
  requireProjectId: true,
@@ -1702,7 +1806,6 @@ export function ProjectObjectiveDetail({
1702
1806
 
1703
1807
  const handleCreateNote = async () => {
1704
1808
  if (!project?.id || !objective?.id) return;
1705
- const title = newNoteTitle.trim() || "Untitled";
1706
1809
  setIsCreatingNote(true);
1707
1810
  try {
1708
1811
  const res = await fetch(
@@ -1710,14 +1813,13 @@ export function ProjectObjectiveDetail({
1710
1813
  {
1711
1814
  method: "POST",
1712
1815
  headers: { "Content-Type": "application/json" },
1713
- body: JSON.stringify({ title, body: "" }),
1816
+ body: JSON.stringify({ title: "Untitled", body: "" }),
1714
1817
  },
1715
1818
  );
1716
1819
  if (res.ok) {
1717
1820
  const data = await res.json();
1718
1821
  setNotes((prev) => [data.note, ...prev]);
1719
1822
  setEditingNoteId(data.note.id);
1720
- setNewNoteTitle("");
1721
1823
  }
1722
1824
  } catch {
1723
1825
  setSaveError("Failed to create note.");
@@ -1766,19 +1868,6 @@ export function ProjectObjectiveDetail({
1766
1868
  setTeamEditor(null);
1767
1869
  };
1768
1870
 
1769
- const handleWakeSave = async () => {
1770
- if (!wakeEditor || !objective) return;
1771
-
1772
- const nextObjective = {
1773
- ...objective,
1774
- cadence: wakeEditor.cadence.trim(),
1775
- condition: wakeEditor.condition.trim(),
1776
- updatedAt: new Date().toISOString(),
1777
- };
1778
-
1779
- await runPersist(upsertProjectObjective(workspace, nextObjective));
1780
- setWakeEditor(null);
1781
- };
1782
1871
 
1783
1872
  const handleObjectiveDelete = async () => {
1784
1873
  if (!objective) return;
@@ -1787,7 +1876,11 @@ export function ProjectObjectiveDetail({
1787
1876
  if (!confirmed) return;
1788
1877
 
1789
1878
  await runPersist(removeProjectObjective(workspace, objective.id));
1790
- router.push(`/projects/${projectSlug}`);
1879
+ if (onObjectiveDeleted) {
1880
+ onObjectiveDeleted();
1881
+ } else {
1882
+ router.push(`/projects/${projectSlug}`);
1883
+ }
1791
1884
  };
1792
1885
 
1793
1886
  const handleObjectiveThreadLinked = useCallback(
@@ -1815,7 +1908,6 @@ export function ProjectObjectiveDetail({
1815
1908
  catchUpPolicy: string;
1816
1909
  cadence: string;
1817
1910
  condition: string;
1818
- executionMode?: PromptJobExecutionMode;
1819
1911
  }) => {
1820
1912
  if (!project?.id || !objective?.id) {
1821
1913
  setSaveError("Objective not found.");
@@ -1832,10 +1924,7 @@ export function ProjectObjectiveDetail({
1832
1924
  headers: { "Content-Type": "application/json" },
1833
1925
  body: JSON.stringify({
1834
1926
  ...data,
1835
- prompt:
1836
- data.executionMode === "objective_linear_ticket"
1837
- ? data.prompt
1838
- : prependObjectiveLabelToPrompt(objective, data.prompt),
1927
+ prompt: prependObjectiveLabelToPrompt(objective, data.prompt),
1839
1928
  }),
1840
1929
  }
1841
1930
  );
@@ -1857,37 +1946,35 @@ export function ProjectObjectiveDetail({
1857
1946
  [objective, project?.id, refetchProject]
1858
1947
  );
1859
1948
 
1860
- const handleObjectiveLinearWorkerCreate = useCallback(async () => {
1949
+ const handleWorkOnObjective = useCallback(async () => {
1861
1950
  if (!project?.id || !objective?.id) {
1862
1951
  setSaveError("Objective not found.");
1863
1952
  return false;
1864
1953
  }
1865
1954
 
1955
+ if (!objective.teamId) {
1956
+ setSaveError("Assign a team to this objective before creating a worker.");
1957
+ return false;
1958
+ }
1959
+
1866
1960
  setSaveError(null);
1867
1961
 
1868
1962
  try {
1869
1963
  const response = await fetch(
1870
- `/api/projects/${project.id}/objectives/${objective.id}/scheduled-tasks`,
1871
- {
1872
- method: "POST",
1873
- headers: { "Content-Type": "application/json" },
1874
- body: JSON.stringify({
1875
- name: DEFAULT_OBJECTIVE_LINEAR_WORKER_NAME,
1876
- executionMode: "objective_linear_ticket",
1877
- }),
1878
- }
1964
+ `/api/projects/${project.id}/objectives/${objective.id}/worker`,
1965
+ { method: "PUT" },
1879
1966
  );
1880
1967
  const payload = (await response.json().catch(() => ({}))) as { error?: string };
1881
1968
 
1882
1969
  if (!response.ok) {
1883
- throw new Error(payload.error || "Failed to create objective Linear worker.");
1970
+ throw new Error(payload.error || "Failed to trigger objective worker.");
1884
1971
  }
1885
1972
 
1886
1973
  await refetchProject();
1887
1974
  return true;
1888
1975
  } catch (error) {
1889
1976
  setSaveError(
1890
- error instanceof Error ? error.message : "Failed to create objective Linear worker."
1977
+ error instanceof Error ? error.message : "Failed to trigger objective worker."
1891
1978
  );
1892
1979
  return false;
1893
1980
  }
@@ -1950,15 +2037,15 @@ export function ProjectObjectiveDetail({
1950
2037
 
1951
2038
  if (!objective) {
1952
2039
  return (
1953
- <div className="flex h-full items-center justify-center px-4 bg-[#131315]">
1954
- <div className="rounded-xl border border-zinc-700/80 bg-[#18181b] p-8 text-center">
1955
- <p className="text-lg font-semibold text-zinc-100">Objective not found</p>
1956
- <p className="mt-2 text-sm text-zinc-500">
2040
+ <div className="flex h-full items-center justify-center px-4 bg-[var(--background)]">
2041
+ <div className="rounded-xl border border-[var(--border)] bg-[var(--card-bg)] p-8 text-center">
2042
+ <p className="text-lg font-semibold text-[var(--foreground)]">Objective not found</p>
2043
+ <p className="mt-2 text-sm text-[var(--muted-foreground)]">
1957
2044
  It may have been deleted or the link is stale.
1958
2045
  </p>
1959
2046
  <Link
1960
2047
  href={`/projects/${projectSlug}`}
1961
- className="mt-4 inline-flex items-center gap-2 rounded-md border border-zinc-700/80 px-3 py-1.5 text-sm text-zinc-300 transition-colors hover:bg-zinc-800/50 bg-[#1a1a1c]"
2048
+ className="mt-4 inline-flex items-center gap-2 rounded-md border border-[var(--border)] bg-[var(--card-bg)] px-3 py-1.5 text-sm text-[var(--foreground)] transition-colors hover:bg-[var(--secondary)]"
1962
2049
  >
1963
2050
  Back to objectives
1964
2051
  </Link>
@@ -1968,7 +2055,7 @@ export function ProjectObjectiveDetail({
1968
2055
  }
1969
2056
 
1970
2057
  return (
1971
- <div className="flex h-full min-h-0 flex-col bg-[#131315] text-zinc-200">
2058
+ <div className="flex h-full min-h-0 flex-col bg-[radial-gradient(circle_at_top_left,rgba(59,130,246,0.1),transparent_28%),var(--background)] text-[var(--foreground)]">
1972
2059
  <div className="flex-1 min-h-0 overflow-hidden">
1973
2060
  <div className="flex h-full min-h-0 flex-col xl:flex-row">
1974
2061
  <div className="min-h-0 flex-1 overflow-y-auto">
@@ -1976,7 +2063,7 @@ export function ProjectObjectiveDetail({
1976
2063
  <ErrorBanner message={saveError} />
1977
2064
 
1978
2065
  <div className="flex items-center gap-3 mb-4">
1979
- <span className="px-2.5 py-0.5 rounded-full text-[10px] font-mono tracking-wider bg-zinc-800/60 text-zinc-400 border border-zinc-700 uppercase">
2066
+ <span className="rounded-full border border-[var(--tone-neutral-border)] bg-[var(--tone-neutral-bg)] px-2.5 py-0.5 text-[10px] font-mono uppercase tracking-wider text-[var(--tone-neutral)]">
1980
2067
  {objective.key}
1981
2068
  </span>
1982
2069
  <span
@@ -1997,14 +2084,14 @@ export function ProjectObjectiveDetail({
1997
2084
  if (e.key === "Enter") void handleObjectiveSave();
1998
2085
  if (e.key === "Escape") setObjectiveEditor(null);
1999
2086
  }}
2000
- className="flex-1 text-[28px] leading-tight font-semibold text-zinc-100 bg-transparent border-b-2 border-sky-500/50 outline-none px-0 py-1"
2087
+ className="flex-1 border-b-2 border-[var(--primary)] bg-transparent px-0 py-1 text-[28px] font-semibold leading-tight text-[var(--foreground)] outline-none"
2001
2088
  placeholder="Objective statement"
2002
2089
  />
2003
2090
  <button
2004
2091
  type="button"
2005
2092
  onClick={() => void handleObjectiveSave()}
2006
2093
  disabled={isSaving}
2007
- className="p-1.5 rounded-md text-sky-400 hover:bg-sky-500/10 transition-colors"
2094
+ className="rounded-md p-1.5 text-[var(--primary)] transition-colors hover:bg-[var(--status-in-progress-bg)]"
2008
2095
  aria-label="Save objective"
2009
2096
  >
2010
2097
  <Check size={18} />
@@ -2012,22 +2099,24 @@ export function ProjectObjectiveDetail({
2012
2099
  <button
2013
2100
  type="button"
2014
2101
  onClick={() => setObjectiveEditor(null)}
2015
- className="p-1.5 rounded-md text-zinc-400 hover:bg-zinc-800/50 transition-colors"
2102
+ className="rounded-md p-1.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--muted)]"
2016
2103
  aria-label="Cancel editing"
2017
2104
  >
2018
2105
  <X size={18} />
2019
2106
  </button>
2020
2107
  </div>
2021
2108
  ) : (
2022
- <div
2023
- className="flex items-center gap-3 group cursor-pointer"
2109
+ <button
2110
+ type="button"
2111
+ aria-label={`Edit objective ${objective.title}`}
2112
+ className="flex items-center gap-3 group cursor-pointer text-left"
2024
2113
  onClick={() => setObjectiveEditor(buildObjectiveDraft(objective))}
2025
2114
  >
2026
- <h1 className="text-[28px] leading-tight font-semibold text-zinc-100">
2115
+ <h1 className="text-[28px] leading-tight font-semibold text-[var(--foreground)]">
2027
2116
  {objective.title}
2028
2117
  </h1>
2029
- <Pencil size={16} className="text-zinc-500 opacity-0 group-hover:opacity-100 transition-opacity shrink-0" />
2030
- </div>
2118
+ <Pencil size={16} className="shrink-0 text-[var(--muted-foreground)] opacity-0 transition-opacity group-hover:opacity-100" />
2119
+ </button>
2031
2120
  )}
2032
2121
  </div>
2033
2122
 
@@ -2035,10 +2124,10 @@ export function ProjectObjectiveDetail({
2035
2124
  <div className="flex flex-wrap items-center gap-x-6 gap-y-3 mb-10">
2036
2125
  {/* Team Property */}
2037
2126
  <div className="flex items-center gap-2">
2038
- <span className="text-xs font-semibold text-zinc-500 uppercase tracking-wider flex items-center gap-1.5">
2127
+ <span className="flex items-center gap-1.5 text-xs font-semibold uppercase tracking-wider text-[var(--muted-foreground)]">
2039
2128
  <Users size={12} /> Team
2040
2129
  </span>
2041
- <span className="text-zinc-600">·</span>
2130
+ <span className="text-[var(--app-shell-soft-text)]">·</span>
2042
2131
  {teamEditor ? (
2043
2132
  <div className="min-w-[180px]">
2044
2133
  <SearchCombo
@@ -2069,42 +2158,53 @@ export function ProjectObjectiveDetail({
2069
2158
  ) : (
2070
2159
  <button
2071
2160
  type="button"
2161
+ aria-label={`Edit team for ${objective.title}`}
2072
2162
  onClick={() => setTeamEditor({ teamId: objective.teamId })}
2073
- className="flex items-center gap-2 group rounded px-1.5 py-0.5 -mx-1.5 -my-0.5 hover:bg-zinc-800 transition-colors"
2163
+ className="group -mx-1.5 -my-0.5 flex items-center gap-2 rounded px-1.5 py-0.5 transition-colors hover:bg-[var(--muted)]"
2074
2164
  >
2075
2165
  <div className="w-5 h-5 rounded-full bg-blue-500/20 text-blue-400 flex items-center justify-center text-[10px] font-bold border border-blue-500/30">
2076
2166
  {(teamName ?? "?").charAt(0).toUpperCase()}
2077
2167
  </div>
2078
- <span className="text-sm text-zinc-200 group-hover:text-zinc-50 transition-colors">
2168
+ <span className="text-sm text-[var(--foreground)] transition-colors group-hover:text-[var(--primary)]">
2079
2169
  {teamName ?? "Not assigned"}
2080
2170
  </span>
2081
2171
  </button>
2082
2172
  )}
2083
2173
  </div>
2084
2174
 
2085
- {/* Check-in Frequency Property */}
2086
- <div className="flex items-center gap-2">
2087
- <span className="text-xs font-semibold text-zinc-500 uppercase tracking-wider flex items-center gap-1.5">
2088
- <Clock size={12} /> Check-in
2089
- </span>
2090
- <span className="text-zinc-600">·</span>
2091
- <button
2092
- type="button"
2093
- onClick={() => setWakeEditor(buildObjectiveDraft(objective))}
2094
- className="text-sm text-zinc-200 hover:text-zinc-50 rounded px-1.5 py-0.5 -my-0.5 hover:bg-zinc-800 transition-colors"
2095
- >
2096
- {formatObjectiveCadence(objective.cadence)}
2097
- </button>
2098
- {objective.condition ? (
2099
- <span className="text-xs text-zinc-500 truncate max-w-[200px]">
2100
- · {objective.condition}
2101
- </span>
2102
- ) : null}
2103
- </div>
2175
+ {project.id && objective.id ? (
2176
+ <ObjectiveHealthTrend
2177
+ projectId={project.id}
2178
+ objectiveId={objective.id}
2179
+ objectiveKey={objective.key}
2180
+ metadata={project.metadata}
2181
+ currentProgress={objective.progress}
2182
+ currentStatus={objective.status}
2183
+ objectiveUpdatedAt={objective.updatedAt}
2184
+ />
2185
+ ) : null}
2186
+
2187
+ </div>
2188
+
2189
+ {/* Work on objective */}
2190
+ <div className="mb-6">
2191
+ <button
2192
+ type="button"
2193
+ onClick={async () => {
2194
+ setWorkingOnObjective(true);
2195
+ await handleWorkOnObjective();
2196
+ setWorkingOnObjective(false);
2197
+ }}
2198
+ disabled={workingOnObjective}
2199
+ className="inline-flex items-center gap-2 rounded-xl border border-[var(--status-completed-border)] bg-[var(--status-completed-bg)] px-3 py-2 text-sm text-[var(--status-completed-text)] transition-opacity hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-50"
2200
+ >
2201
+ <Sparkles className="h-4 w-4" />
2202
+ {workingOnObjective ? "Working..." : "Work on objective"}
2203
+ </button>
2104
2204
  </div>
2105
2205
 
2106
2206
  {/* Tabs */}
2107
- <div className="border-b border-zinc-800/80 mb-8">
2207
+ <div className="mb-8 border-b border-[var(--border)]">
2108
2208
  <nav className="flex gap-1 -mb-px" aria-label="Objective sections">
2109
2209
  {([
2110
2210
  { id: "activity" as const, label: "Activity", icon: Clock },
@@ -2118,29 +2218,35 @@ export function ProjectObjectiveDetail({
2118
2218
  onClick={() => setActiveTab(tab.id)}
2119
2219
  className={`flex items-center gap-2 px-3 py-2.5 text-sm font-medium border-b-2 transition-colors ${
2120
2220
  activeTab === tab.id
2121
- ? "border-sky-500 text-zinc-100"
2122
- : "border-transparent text-zinc-500 hover:text-zinc-300 hover:border-zinc-700"
2221
+ ? "border-[var(--primary)] text-[var(--foreground)]"
2222
+ : "border-transparent text-[var(--muted-foreground)] hover:border-[var(--border)] hover:text-[var(--foreground)]"
2123
2223
  }`}
2124
2224
  >
2125
2225
  <tab.icon size={14} />
2126
2226
  {tab.label}
2127
2227
  {tab.id === "activity" && activityTotal > 0 && (
2128
- <span className="text-[10px] bg-zinc-800 text-zinc-400 rounded-full px-1.5 py-0.5 font-mono">
2228
+ <span className="rounded-full bg-[var(--tone-neutral-bg)] px-1.5 py-0.5 font-mono text-[10px] text-[var(--tone-neutral)]">
2129
2229
  {activityTotal}
2130
2230
  </span>
2131
2231
  )}
2132
2232
  {tab.id === "notes" && notes.length > 0 && (
2133
- <span className="text-[10px] bg-zinc-800 text-zinc-400 rounded-full px-1.5 py-0.5 font-mono">
2233
+ <span className="rounded-full bg-[var(--tone-neutral-bg)] px-1.5 py-0.5 font-mono text-[10px] text-[var(--tone-neutral)]">
2134
2234
  {notes.length}
2135
2235
  </span>
2136
2236
  )}
2137
- {tab.id === "linear" && linearIssues.length > 0 && (
2138
- <span className="text-[10px] bg-zinc-800 text-zinc-400 rounded-full px-1.5 py-0.5 font-mono">
2139
- {linearIssues.length}
2140
- </span>
2141
- )}
2237
+ {tab.id === "linear" && (() => {
2238
+ const DONE = ["done", "canceled", "cancelled", "completed", "duplicate"];
2239
+ const active = linearIssues.filter(
2240
+ (i, idx, arr) => arr.findIndex((x) => x.id === i.id) === idx && !DONE.includes(i.status.toLowerCase())
2241
+ );
2242
+ return active.length > 0 ? (
2243
+ <span className="rounded-full bg-[var(--tone-neutral-bg)] px-1.5 py-0.5 font-mono text-[10px] text-[var(--tone-neutral)]">
2244
+ {active.length}
2245
+ </span>
2246
+ ) : null;
2247
+ })()}
2142
2248
  {tab.id === "scheduled-tasks" && scheduledTaskCount > 0 && (
2143
- <span className="text-[10px] bg-zinc-800 text-zinc-400 rounded-full px-1.5 py-0.5 font-mono">
2249
+ <span className="rounded-full bg-[var(--tone-neutral-bg)] px-1.5 py-0.5 font-mono text-[10px] text-[var(--tone-neutral)]">
2144
2250
  {scheduledTaskCount}
2145
2251
  </span>
2146
2252
  )}
@@ -2154,146 +2260,149 @@ export function ProjectObjectiveDetail({
2154
2260
  {/* Notes Tab */}
2155
2261
  {activeTab === "notes" && (
2156
2262
  <section className="space-y-4">
2157
- <div className="flex justify-between items-end">
2158
- <p className="text-sm text-zinc-500">
2159
- Capture the strategy, constraints, and what better looks like.
2160
- </p>
2161
- </div>
2162
-
2163
- {/* Create Note */}
2164
- <div className="flex gap-2">
2165
- <input
2166
- type="text"
2167
- value={newNoteTitle}
2168
- onChange={(e) => setNewNoteTitle(e.target.value)}
2169
- onKeyDown={(e) => {
2170
- if (e.key === "Enter") handleCreateNote();
2171
- }}
2172
- placeholder="New note title..."
2173
- className="flex-1 bg-zinc-900 border border-zinc-800 rounded-md px-3 py-1.5 text-sm text-zinc-200 placeholder:text-zinc-600 focus:outline-none focus:border-zinc-600"
2174
- />
2263
+ {/* Search + Create */}
2264
+ <div className="flex gap-2 items-center">
2265
+ <div className="relative flex-1">
2266
+ <Search size={14} className="absolute left-3 top-1/2 -translate-y-1/2 text-[var(--muted-foreground)]" />
2267
+ <input
2268
+ type="text"
2269
+ value={noteSearch}
2270
+ onChange={(e) => setNoteSearch(e.target.value)}
2271
+ placeholder="Search notes..."
2272
+ className="w-full rounded-md border border-[var(--border)] bg-[var(--input)] py-1.5 pl-8 pr-3 text-sm text-[var(--foreground)] placeholder:text-[var(--app-shell-soft-text)] focus:border-[var(--primary)] focus:outline-none"
2273
+ />
2274
+ </div>
2175
2275
  <button
2176
2276
  type="button"
2177
2277
  onClick={handleCreateNote}
2178
2278
  disabled={isCreatingNote}
2179
- className="flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium text-zinc-200 bg-zinc-800 hover:bg-zinc-700 rounded-md transition-colors disabled:opacity-50"
2279
+ className="flex items-center gap-1.5 rounded-md border border-[var(--status-in-progress-border)] bg-[var(--status-in-progress-bg)] px-3 py-1.5 text-sm font-medium text-[var(--status-in-progress-text)] transition-opacity hover:opacity-90 disabled:opacity-50"
2180
2280
  >
2181
2281
  <Plus size={14} />
2182
- Add
2282
+ New note
2183
2283
  </button>
2184
2284
  </div>
2185
2285
 
2186
- {/* Notes List */}
2286
+ {/* Masonry Grid */}
2187
2287
  {isNotesLoading ? (
2188
- <p className="text-sm text-zinc-500 py-4">Loading notes...</p>
2288
+ <p className="py-4 text-sm text-[var(--muted-foreground)]">Loading notes...</p>
2189
2289
  ) : notes.length === 0 ? (
2190
- <p className="text-sm text-zinc-600 py-4">
2290
+ <p className="text-sm text-[var(--muted-foreground)] py-4">
2191
2291
  No notes yet. Add one above.
2192
2292
  </p>
2193
- ) : (
2194
- <div className="space-y-3">
2195
- {notes.map((note) => {
2196
- const isEditing = editingNoteId === note.id;
2197
- const isSavingNote = savingNoteIds.has(note.id);
2198
- const draftBody = noteDrafts[note.id] ?? note.body;
2199
- const draftTitle = noteTitleDrafts[note.id] ?? note.title;
2200
-
2201
- return (
2202
- <div
2293
+ ) : (() => {
2294
+ const q = noteSearch.toLowerCase();
2295
+ const filtered = q
2296
+ ? notes.filter(
2297
+ (n) =>
2298
+ n.title.toLowerCase().includes(q) ||
2299
+ n.body.toLowerCase().includes(q),
2300
+ )
2301
+ : notes;
2302
+ return filtered.length === 0 ? (
2303
+ <p className="text-sm text-[var(--muted-foreground)] py-4">
2304
+ No notes match your search.
2305
+ </p>
2306
+ ) : (
2307
+ <div className="columns-1 gap-3 sm:columns-2 lg:columns-3" style={{ columnFill: "balance" as const }}>
2308
+ {filtered.map((note) => (
2309
+ <button
2203
2310
  key={note.id}
2204
- className="border border-zinc-800/80 rounded-lg overflow-hidden"
2311
+ type="button"
2312
+ onClick={() => setEditingNoteId(note.id)}
2313
+ className="mb-3 block w-full break-inside-avoid overflow-hidden rounded-lg border border-[var(--border)] bg-[var(--overlay-panel-muted)] text-left transition-shadow hover:shadow-md"
2205
2314
  >
2206
- {/* Note Header */}
2207
- <div className="flex items-center justify-between px-4 py-2.5 bg-zinc-900/50">
2208
- {isEditing ? (
2209
- <div className="flex items-center gap-2 flex-1 mr-2">
2210
- <FileText size={14} className="text-zinc-500 shrink-0" />
2211
- <input
2212
- type="text"
2213
- value={draftTitle}
2214
- onChange={(e) =>
2215
- setNoteTitleDrafts((prev) => ({
2216
- ...prev,
2217
- [note.id]: e.target.value,
2218
- }))
2219
- }
2220
- className="flex-1 bg-transparent border-b border-zinc-700 text-sm font-medium text-zinc-200 focus:outline-none focus:border-zinc-400 py-0.5"
2221
- />
2222
- </div>
2223
- ) : (
2224
- <button
2225
- type="button"
2226
- onClick={() =>
2227
- setEditingNoteId(note.id)
2228
- }
2229
- className="flex items-center gap-2 text-sm font-medium text-zinc-200 hover:text-zinc-50 transition-colors"
2230
- >
2231
- <FileText size={14} className="text-zinc-500" />
2232
- {note.title}
2233
- </button>
2234
- )}
2235
- <div className="flex items-center gap-2">
2236
- <span className="text-[11px] text-zinc-600">
2237
- {isSavingNote
2238
- ? "Saving..."
2239
- : new Date(note.updatedAt).toLocaleDateString()}
2240
- </span>
2241
- <button
2242
- type="button"
2243
- onClick={() =>
2244
- setEditingNoteId(isEditing ? null : note.id)
2245
- }
2246
- className="p-1 text-zinc-500 hover:text-zinc-300 transition-colors"
2247
- >
2248
- <Pencil size={12} />
2249
- </button>
2250
- <button
2251
- type="button"
2252
- onClick={() => handleDeleteNote(note.id)}
2253
- className="p-1 text-zinc-500 hover:text-red-400 transition-colors"
2254
- >
2255
- <Trash2 size={12} />
2256
- </button>
2257
- </div>
2315
+ <div className="px-3 pt-3 pb-1">
2316
+ <h4 className="text-sm font-medium text-[var(--foreground)] leading-snug">
2317
+ {note.title}
2318
+ </h4>
2258
2319
  </div>
2259
-
2260
- {/* Note Body */}
2261
- {isEditing ? (
2262
- <div className="px-4 py-3">
2263
- <ObjectiveNotesEditor
2264
- content={draftBody}
2265
- editable
2266
- onChange={(value) =>
2267
- setNoteDrafts((prev) => ({
2268
- ...prev,
2269
- [note.id]: value,
2270
- }))
2271
- }
2272
- placeholder="Write your note..."
2273
- />
2320
+ {note.body.trim() && (
2321
+ <div className="px-3 pb-2 text-xs text-[var(--muted-foreground)] line-clamp-4">
2322
+ <Markdown content={note.body} />
2274
2323
  </div>
2275
- ) : note.body.trim() ? (
2276
- <div
2277
- className="px-4 py-3 text-sm text-zinc-400 cursor-pointer hover:bg-zinc-900/30 transition-colors"
2278
- onClick={() => setEditingNoteId(note.id)}
2324
+ )}
2325
+ <div className="flex items-center justify-between px-3 pb-2">
2326
+ <span className="text-[10px] text-[var(--muted-foreground)]">
2327
+ {new Date(note.updatedAt).toLocaleDateString()}
2328
+ </span>
2329
+ </div>
2330
+ </button>
2331
+ ))}
2332
+ </div>
2333
+ );
2334
+ })()}
2335
+
2336
+ {/* Note Edit Modal */}
2337
+ {editingNoteId && (() => {
2338
+ const note = notes.find((n) => n.id === editingNoteId);
2339
+ if (!note) return null;
2340
+ const draftBody = noteDrafts[note.id] ?? note.body;
2341
+ const draftTitle = noteTitleDrafts[note.id] ?? note.title;
2342
+ const isSavingNote = savingNoteIds.has(note.id);
2343
+ return (
2344
+ <div
2345
+ className="fixed inset-0 z-50 flex items-start justify-center bg-black/50 pt-[5vh]"
2346
+ onClick={(e) => {
2347
+ if (e.target === e.currentTarget) setEditingNoteId(null);
2348
+ }}
2349
+ >
2350
+ <div className="mx-6 w-full max-w-7xl rounded-xl border border-[var(--border)] bg-[var(--background)] shadow-xl">
2351
+ {/* Modal Header */}
2352
+ <div className="flex items-center justify-between border-b border-[var(--border)] px-5 py-3">
2353
+ <input
2354
+ type="text"
2355
+ autoFocus
2356
+ value={draftTitle}
2357
+ onFocus={(e) => {
2358
+ if (draftTitle === "Untitled") e.target.select();
2359
+ }}
2360
+ onChange={(e) =>
2361
+ setNoteTitleDrafts((prev) => ({
2362
+ ...prev,
2363
+ [note.id]: e.target.value,
2364
+ }))
2365
+ }
2366
+ className="flex-1 bg-transparent text-base font-semibold text-[var(--foreground)] focus:outline-none"
2367
+ />
2368
+ <div className="flex items-center gap-2 ml-3">
2369
+ <span className="text-[11px] text-[var(--muted-foreground)]">
2370
+ {isSavingNote ? "Saving..." : new Date(note.updatedAt).toLocaleDateString()}
2371
+ </span>
2372
+ <button
2373
+ type="button"
2374
+ onClick={() => handleDeleteNote(note.id)}
2375
+ className="p-1 text-[var(--muted-foreground)] transition-colors hover:text-[var(--destructive)]"
2279
2376
  >
2280
- <div className="line-clamp-3">
2281
- <Markdown content={note.body} />
2282
- </div>
2283
- </div>
2284
- ) : (
2285
- <div
2286
- className="px-4 py-3 text-sm text-zinc-600 italic cursor-pointer hover:bg-zinc-900/30 transition-colors"
2287
- onClick={() => setEditingNoteId(note.id)}
2377
+ <Trash2 size={14} />
2378
+ </button>
2379
+ <button
2380
+ type="button"
2381
+ onClick={() => setEditingNoteId(null)}
2382
+ className="p-1 text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]"
2288
2383
  >
2289
- Empty note — click to edit
2290
- </div>
2291
- )}
2384
+ <X size={14} />
2385
+ </button>
2386
+ </div>
2292
2387
  </div>
2293
- );
2294
- })}
2295
- </div>
2296
- )}
2388
+ {/* Modal Body */}
2389
+ <div className="max-h-[75vh] overflow-y-auto px-5 py-4">
2390
+ <ObjectiveNotesEditor
2391
+ content={draftBody}
2392
+ editable
2393
+ onChange={(value) =>
2394
+ setNoteDrafts((prev) => ({
2395
+ ...prev,
2396
+ [note.id]: value,
2397
+ }))
2398
+ }
2399
+ placeholder="Write your note..."
2400
+ />
2401
+ </div>
2402
+ </div>
2403
+ </div>
2404
+ );
2405
+ })()}
2297
2406
  </section>
2298
2407
  )}
2299
2408
 
@@ -2321,12 +2430,14 @@ export function ProjectObjectiveDetail({
2321
2430
 
2322
2431
  return (
2323
2432
  <section>
2324
- <p className="text-sm text-zinc-500 mb-4">
2325
- Tickets tracked by the objective label{" "}
2326
- <code className="font-mono text-[11px] bg-zinc-800/80 px-1.5 py-0.5 rounded text-zinc-300">
2327
- {objective.key}
2328
- </code>.
2329
- </p>
2433
+ <div className="flex flex-wrap items-start justify-between gap-3 mb-4">
2434
+ <p className="text-sm text-[var(--muted-foreground)]">
2435
+ Tickets tracked by the objective label{" "}
2436
+ <code className="rounded bg-[var(--tone-neutral-bg)] px-1.5 py-0.5 font-mono text-[11px] text-[var(--foreground)]">
2437
+ {objective.key}
2438
+ </code>.
2439
+ </p>
2440
+ </div>
2330
2441
  {!linearConnected ? (
2331
2442
  <EmptyState label="Connect Linear to create and track tickets for this objective." />
2332
2443
  ) : dedupedIssues.length === 0 ? (
@@ -2338,33 +2449,25 @@ export function ProjectObjectiveDetail({
2338
2449
  {activeIssues.map((issue) => (
2339
2450
  <div
2340
2451
  key={issue.id}
2341
- className="bg-[#1c212b] border border-[#2d3748] rounded-xl p-4"
2452
+ className="rounded-xl border border-[var(--border)] bg-[var(--overlay-panel-muted)] p-4"
2342
2453
  >
2343
2454
  <div className="flex items-start justify-between gap-3">
2344
2455
  <div className="min-w-0">
2345
- <p className="text-xs font-semibold uppercase tracking-[0.18em] text-zinc-500">
2456
+ <p className="text-xs font-semibold uppercase tracking-[0.18em] text-[var(--muted-foreground)]">
2346
2457
  {issue.identifier}
2347
2458
  </p>
2348
- {issue.url ? (
2349
- <a
2350
- href={issue.url}
2351
- target="_blank"
2352
- rel="noreferrer"
2353
- className="mt-1 block text-sm font-medium text-zinc-200 transition-colors hover:text-sky-200"
2354
- >
2355
- {issue.title}
2356
- </a>
2357
- ) : (
2358
- <p className="mt-1 text-sm font-medium text-zinc-200">
2359
- {issue.title}
2360
- </p>
2361
- )}
2459
+ <a
2460
+ href={`/projects/${projectSlug}/linear?issue=${issue.id}`}
2461
+ className="mt-1 block text-sm font-medium text-[var(--foreground)] transition-colors hover:text-[var(--primary)]"
2462
+ >
2463
+ {issue.title}
2464
+ </a>
2362
2465
  </div>
2363
- <span className="rounded-full border border-zinc-700 px-2 py-1 text-[10px] font-semibold uppercase tracking-[0.18em] text-zinc-500">
2466
+ <span className="rounded-full border border-[var(--tone-neutral-border)] px-2 py-1 text-[10px] font-semibold uppercase tracking-[0.18em] text-[var(--tone-neutral)]">
2364
2467
  {issue.status}
2365
2468
  </span>
2366
2469
  </div>
2367
- <div className="mt-3 flex flex-wrap items-center gap-2 text-[11px] text-zinc-500">
2470
+ <div className="mt-3 flex flex-wrap items-center gap-2 text-[11px] text-[var(--muted-foreground)]">
2368
2471
  <span>Updated {formatDateTime(issue.updatedAt)}</span>
2369
2472
  <span>{issue.assignee ? `Assigned to ${issue.assignee}` : "Unassigned"}</span>
2370
2473
  </div>
@@ -2375,21 +2478,19 @@ export function ProjectObjectiveDetail({
2375
2478
 
2376
2479
  {doneIssues.length > 0 && (
2377
2480
  <div className={activeIssues.length > 0 ? "mt-6" : ""}>
2378
- <p className="text-[11px] font-medium uppercase tracking-[0.18em] text-zinc-600 mb-2">
2481
+ <p className="text-[11px] font-medium uppercase tracking-[0.18em] text-[var(--muted-foreground)] mb-2">
2379
2482
  Completed
2380
2483
  </p>
2381
2484
  <div className="space-y-0.5">
2382
2485
  {doneIssues.map((issue) => (
2383
2486
  <a
2384
2487
  key={issue.id}
2385
- href={issue.url ?? "#"}
2386
- target="_blank"
2387
- rel="noreferrer"
2388
- className="flex items-center gap-3 py-1.5 px-2 rounded-md text-zinc-500 hover:text-zinc-400 hover:bg-zinc-800/40 transition-colors group"
2488
+ href={`/projects/${projectSlug}/linear?issue=${issue.id}`}
2489
+ className="group flex items-center gap-3 rounded-md px-2 py-1.5 text-[var(--muted-foreground)] transition-colors hover:bg-[var(--muted)] hover:text-[var(--foreground)]"
2389
2490
  >
2390
2491
  <span className="text-[11px] font-mono shrink-0">{issue.identifier}</span>
2391
2492
  <span className="text-[12px] truncate">{issue.title}</span>
2392
- <span className="ml-auto text-[10px] shrink-0 text-zinc-600 group-hover:text-zinc-500">{issue.status}</span>
2493
+ <span className="ml-auto shrink-0 text-[10px] text-[var(--app-shell-soft-text)] group-hover:text-[var(--muted-foreground)]">{issue.status}</span>
2393
2494
  </a>
2394
2495
  ))}
2395
2496
  </div>
@@ -2410,11 +2511,8 @@ export function ProjectObjectiveDetail({
2410
2511
  objectiveKey={objective.key}
2411
2512
  createDefaults={{
2412
2513
  name: `Work on ${objective.title}`,
2413
- cadence: objective.cadence,
2414
- condition: objective.condition,
2415
2514
  }}
2416
2515
  onCreateTask={handleScheduledTaskCreate}
2417
- onCreateObjectiveLinearWorker={handleObjectiveLinearWorkerCreate}
2418
2516
  />
2419
2517
  </section>
2420
2518
  )}
@@ -2422,12 +2520,12 @@ export function ProjectObjectiveDetail({
2422
2520
  {/* Danger Zone */}
2423
2521
  <section className="pt-10">
2424
2522
  <div className="mb-4">
2425
- <h2 className="text-sm font-semibold text-red-400">Danger Zone</h2>
2523
+ <h2 className="text-sm font-semibold text-[var(--destructive)]">Danger Zone</h2>
2426
2524
  </div>
2427
- <div className="border border-red-900/30 rounded-xl p-5 flex items-center justify-between bg-red-950/5">
2525
+ <div className="flex items-center justify-between rounded-xl border border-[var(--destructive-border)] bg-[var(--destructive-bg)] p-5">
2428
2526
  <div>
2429
- <h3 className="text-sm font-medium text-zinc-200">Delete Objective</h3>
2430
- <p className="text-sm text-zinc-500 mt-1">
2527
+ <h3 className="text-sm font-medium text-[var(--foreground)]">Delete Objective</h3>
2528
+ <p className="mt-1 text-sm text-[var(--muted-foreground)]">
2431
2529
  Once you delete an objective, there is no going back.
2432
2530
  </p>
2433
2531
  </div>
@@ -2435,7 +2533,7 @@ export function ProjectObjectiveDetail({
2435
2533
  type="button"
2436
2534
  onClick={() => void handleObjectiveDelete()}
2437
2535
  aria-label={`Delete objective ${objective.title}`}
2438
- className="flex items-center gap-2 px-3 py-1.5 rounded-md border border-red-900/40 text-red-400 text-sm font-medium hover:bg-red-950/40 transition-colors bg-red-950/20 whitespace-nowrap"
2536
+ className="flex items-center gap-2 whitespace-nowrap rounded-md border border-[var(--destructive-border)] bg-[var(--destructive-bg)] px-3 py-1.5 text-sm font-medium text-[var(--destructive)] transition-opacity hover:opacity-90"
2439
2537
  >
2440
2538
  <Trash2 size={14} /> Delete
2441
2539
  </button>
@@ -2456,15 +2554,6 @@ export function ProjectObjectiveDetail({
2456
2554
  </div>
2457
2555
  </div>
2458
2556
 
2459
- {wakeEditor ? (
2460
- <ObjectiveWakeModal
2461
- draft={wakeEditor}
2462
- isSaving={isSaving}
2463
- onChange={setWakeEditor}
2464
- onClose={() => setWakeEditor(null)}
2465
- onSave={() => void handleWakeSave()}
2466
- />
2467
- ) : null}
2468
2557
  </div>
2469
2558
  );
2470
2559
  }
@@ -2475,8 +2564,8 @@ export function ProjectObjectivesWorkspace(props: ProjectObjectivesWorkspaceProp
2475
2564
 
2476
2565
  function EmptyState({ label }: { label: string }) {
2477
2566
  return (
2478
- <div className="border border-dashed border-zinc-700/80 rounded-xl p-6 flex items-center bg-[#151517]">
2479
- <p className="text-sm text-zinc-500">{label}</p>
2567
+ <div className="flex items-center rounded-xl border border-dashed border-[var(--border)] bg-[var(--overlay-panel-muted)] p-6">
2568
+ <p className="text-sm text-[var(--muted-foreground)]">{label}</p>
2480
2569
  </div>
2481
2570
  );
2482
2571
  }
@@ -2504,7 +2593,7 @@ function ObjectiveEditorModal({
2504
2593
  role="dialog"
2505
2594
  aria-modal="true"
2506
2595
  aria-label={mode === "edit" ? "Edit objective" : "New objective"}
2507
- className="w-full max-w-3xl overflow-hidden rounded-[32px] border border-[var(--border)] bg-[rgba(6,10,16,0.96)] shadow-2xl"
2596
+ className="w-full max-w-3xl overflow-hidden rounded-[32px] border border-[var(--border)] bg-[var(--overlay-panel-strong)] shadow-2xl"
2508
2597
  >
2509
2598
  <div className="border-b border-[var(--border)] px-5 py-4">
2510
2599
  <h3 className="text-lg font-semibold text-[var(--foreground)]">
@@ -2523,7 +2612,7 @@ function ObjectiveEditorModal({
2523
2612
  <input
2524
2613
  value={draft.title}
2525
2614
  onChange={(event) => onChange({ ...draft, title: event.target.value })}
2526
- className="w-full rounded-2xl border border-[var(--border)] bg-[rgba(15,23,42,0.55)] px-4 py-3 text-sm text-[var(--foreground)] outline-none transition-colors focus:border-sky-500/50"
2615
+ className="w-full rounded-2xl border border-[var(--border)] bg-[var(--input)] px-4 py-3 text-sm text-[var(--foreground)] outline-none transition-colors focus:border-[var(--primary)]"
2527
2616
  placeholder="Get 50 qualified visitors daily"
2528
2617
  />
2529
2618
  </div>
@@ -2534,7 +2623,7 @@ function ObjectiveEditorModal({
2534
2623
  <select
2535
2624
  value={draft.teamId}
2536
2625
  onChange={(event) => onChange({ ...draft, teamId: event.target.value })}
2537
- className="w-full rounded-2xl border border-[var(--border)] bg-[rgba(15,23,42,0.55)] px-3 py-3 text-sm text-[var(--foreground)] outline-none transition-colors focus:border-sky-500/50"
2626
+ className="w-full rounded-2xl border border-[var(--border)] bg-[var(--input)] px-3 py-3 text-sm text-[var(--foreground)] outline-none transition-colors focus:border-[var(--primary)]"
2538
2627
  >
2539
2628
  <option value="">Select a team</option>
2540
2629
  {teams.map((team) => (
@@ -2562,7 +2651,7 @@ function ObjectiveEditorModal({
2562
2651
  type="button"
2563
2652
  onClick={onSave}
2564
2653
  disabled={isSaving}
2565
- className="rounded-xl border border-sky-500/30 bg-sky-500/10 px-3 py-2 text-sm font-medium text-sky-100 transition-colors hover:bg-sky-500/20 disabled:cursor-not-allowed disabled:opacity-50"
2654
+ className="rounded-xl border border-[var(--status-in-progress-border)] bg-[var(--status-in-progress-bg)] px-3 py-2 text-sm font-medium text-[var(--status-in-progress-text)] transition-opacity hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-50"
2566
2655
  >
2567
2656
  {isSaving ? "Saving..." : mode === "edit" ? "Save objective" : "Create objective"}
2568
2657
  </button>
@@ -2572,73 +2661,6 @@ function ObjectiveEditorModal({
2572
2661
  );
2573
2662
  }
2574
2663
 
2575
- function ObjectiveWakeModal({
2576
- draft,
2577
- isSaving,
2578
- onChange,
2579
- onClose,
2580
- onSave,
2581
- }: {
2582
- draft: ObjectiveEditorDraft;
2583
- isSaving: boolean;
2584
- onChange: (draft: ObjectiveEditorDraft) => void;
2585
- onClose: () => void;
2586
- onSave: () => void;
2587
- }) {
2588
- return (
2589
- <div className="fixed inset-0 z-50 flex items-center justify-center bg-black/45 p-4">
2590
- <div
2591
- role="dialog"
2592
- aria-modal="true"
2593
- aria-label="Edit wake schedule"
2594
- className="w-full max-w-2xl overflow-hidden rounded-[32px] border border-[var(--border)] bg-[rgba(6,10,16,0.96)] shadow-2xl"
2595
- >
2596
- <div className="border-b border-[var(--border)] px-5 py-4">
2597
- <h3 className="text-lg font-semibold text-[var(--foreground)]">Edit wake schedule</h3>
2598
- <p className="mt-1 text-sm text-[var(--muted-foreground)]">
2599
- Control when agents should wake up and whether they should gate execution on a condition.
2600
- </p>
2601
- </div>
2602
-
2603
- <div className="px-5 py-5">
2604
- <ScheduleConditionPicker
2605
- value={{ cadence: draft.cadence, condition: draft.condition }}
2606
- onChange={(nextValue) =>
2607
- onChange({
2608
- ...draft,
2609
- cadence: nextValue.cadence,
2610
- condition: nextValue.condition,
2611
- })
2612
- }
2613
- allowEmptySchedule
2614
- scheduleLabel="Schedule"
2615
- conditionLabel="Condition"
2616
- conditionHelpText="Use a condition when agents should only work on this objective in specific circumstances."
2617
- />
2618
- </div>
2619
-
2620
- <div className="flex items-center justify-end gap-2 border-t border-[var(--border)] px-5 py-4">
2621
- <button
2622
- type="button"
2623
- onClick={onClose}
2624
- className="rounded-xl border border-[var(--border)] px-3 py-2 text-sm text-[var(--muted-foreground)] transition-colors hover:text-[var(--foreground)]"
2625
- >
2626
- Cancel
2627
- </button>
2628
- <button
2629
- type="button"
2630
- onClick={onSave}
2631
- disabled={isSaving}
2632
- className="rounded-xl border border-sky-500/30 bg-sky-500/10 px-3 py-2 text-sm font-medium text-sky-100 transition-colors hover:bg-sky-500/20 disabled:cursor-not-allowed disabled:opacity-50"
2633
- >
2634
- {isSaving ? "Saving..." : "Save schedule"}
2635
- </button>
2636
- </div>
2637
- </div>
2638
- </div>
2639
- );
2640
- }
2641
-
2642
2664
  function FieldLabel({ label }: { label: string }) {
2643
2665
  return (
2644
2666
  <label className="mb-2 block text-[11px] font-semibold uppercase tracking-[0.18em] text-[var(--muted-foreground)]">