constella 0.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 (747) hide show
  1. package/.next/BUILD_ID +1 -0
  2. package/.next/app-path-routes-manifest.json +53 -0
  3. package/.next/build-manifest.json +20 -0
  4. package/.next/diagnostics/build-diagnostics.json +6 -0
  5. package/.next/diagnostics/framework.json +1 -0
  6. package/.next/export-marker.json +6 -0
  7. package/.next/images-manifest.json +68 -0
  8. package/.next/next-minimal-server.js.nft.json +1 -0
  9. package/.next/next-server.js.nft.json +1 -0
  10. package/.next/package.json +1 -0
  11. package/.next/prerender-manifest.json +36 -0
  12. package/.next/react-loadable-manifest.json +14 -0
  13. package/.next/required-server-files.js +343 -0
  14. package/.next/required-server-files.json +343 -0
  15. package/.next/routes-manifest.json +362 -0
  16. package/.next/server/app/(app)/activity/page.js +2 -0
  17. package/.next/server/app/(app)/activity/page.js.nft.json +1 -0
  18. package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -0
  19. package/.next/server/app/(app)/agents/[handle]/page.js +18 -0
  20. package/.next/server/app/(app)/agents/[handle]/page.js.nft.json +1 -0
  21. package/.next/server/app/(app)/agents/[handle]/page_client-reference-manifest.js +1 -0
  22. package/.next/server/app/(app)/code/page.js +2 -0
  23. package/.next/server/app/(app)/code/page.js.nft.json +1 -0
  24. package/.next/server/app/(app)/code/page_client-reference-manifest.js +1 -0
  25. package/.next/server/app/(app)/config/page.js +2 -0
  26. package/.next/server/app/(app)/config/page.js.nft.json +1 -0
  27. package/.next/server/app/(app)/config/page_client-reference-manifest.js +1 -0
  28. package/.next/server/app/(app)/costs/page.js +2 -0
  29. package/.next/server/app/(app)/costs/page.js.nft.json +1 -0
  30. package/.next/server/app/(app)/costs/page_client-reference-manifest.js +1 -0
  31. package/.next/server/app/(app)/cron/page.js +2 -0
  32. package/.next/server/app/(app)/cron/page.js.nft.json +1 -0
  33. package/.next/server/app/(app)/cron/page_client-reference-manifest.js +1 -0
  34. package/.next/server/app/(app)/dashboard/page.js +2 -0
  35. package/.next/server/app/(app)/dashboard/page.js.nft.json +1 -0
  36. package/.next/server/app/(app)/dashboard/page_client-reference-manifest.js +1 -0
  37. package/.next/server/app/(app)/docs/[id]/page.js +2 -0
  38. package/.next/server/app/(app)/docs/[id]/page.js.nft.json +1 -0
  39. package/.next/server/app/(app)/docs/[id]/page_client-reference-manifest.js +1 -0
  40. package/.next/server/app/(app)/docs/page.js +2 -0
  41. package/.next/server/app/(app)/docs/page.js.nft.json +1 -0
  42. package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -0
  43. package/.next/server/app/(app)/github/page.js +2 -0
  44. package/.next/server/app/(app)/github/page.js.nft.json +1 -0
  45. package/.next/server/app/(app)/github/page_client-reference-manifest.js +1 -0
  46. package/.next/server/app/(app)/goals/page.js +2 -0
  47. package/.next/server/app/(app)/goals/page.js.nft.json +1 -0
  48. package/.next/server/app/(app)/goals/page_client-reference-manifest.js +1 -0
  49. package/.next/server/app/(app)/inbox/page.js +2 -0
  50. package/.next/server/app/(app)/inbox/page.js.nft.json +1 -0
  51. package/.next/server/app/(app)/inbox/page_client-reference-manifest.js +1 -0
  52. package/.next/server/app/(app)/knowledge/page.js +3 -0
  53. package/.next/server/app/(app)/knowledge/page.js.nft.json +1 -0
  54. package/.next/server/app/(app)/knowledge/page_client-reference-manifest.js +1 -0
  55. package/.next/server/app/(app)/models/page.js +2 -0
  56. package/.next/server/app/(app)/models/page.js.nft.json +1 -0
  57. package/.next/server/app/(app)/models/page_client-reference-manifest.js +1 -0
  58. package/.next/server/app/(app)/notifications/page.js +2 -0
  59. package/.next/server/app/(app)/notifications/page.js.nft.json +1 -0
  60. package/.next/server/app/(app)/notifications/page_client-reference-manifest.js +1 -0
  61. package/.next/server/app/(app)/org/page.js +2 -0
  62. package/.next/server/app/(app)/org/page.js.nft.json +1 -0
  63. package/.next/server/app/(app)/org/page_client-reference-manifest.js +1 -0
  64. package/.next/server/app/(app)/organizations/page.js +2 -0
  65. package/.next/server/app/(app)/organizations/page.js.nft.json +1 -0
  66. package/.next/server/app/(app)/organizations/page_client-reference-manifest.js +1 -0
  67. package/.next/server/app/(app)/page.js +3 -0
  68. package/.next/server/app/(app)/page.js.nft.json +1 -0
  69. package/.next/server/app/(app)/page_client-reference-manifest.js +1 -0
  70. package/.next/server/app/(app)/planner/page.js +2 -0
  71. package/.next/server/app/(app)/planner/page.js.nft.json +1 -0
  72. package/.next/server/app/(app)/planner/page_client-reference-manifest.js +1 -0
  73. package/.next/server/app/(app)/plugins/page.js +2 -0
  74. package/.next/server/app/(app)/plugins/page.js.nft.json +1 -0
  75. package/.next/server/app/(app)/plugins/page_client-reference-manifest.js +1 -0
  76. package/.next/server/app/(app)/pm/page.js +2 -0
  77. package/.next/server/app/(app)/pm/page.js.nft.json +1 -0
  78. package/.next/server/app/(app)/pm/page_client-reference-manifest.js +1 -0
  79. package/.next/server/app/(app)/prepare-deploy/page.js +19 -0
  80. package/.next/server/app/(app)/prepare-deploy/page.js.nft.json +1 -0
  81. package/.next/server/app/(app)/prepare-deploy/page_client-reference-manifest.js +1 -0
  82. package/.next/server/app/(app)/profile/page.js +2 -0
  83. package/.next/server/app/(app)/profile/page.js.nft.json +1 -0
  84. package/.next/server/app/(app)/profile/page_client-reference-manifest.js +1 -0
  85. package/.next/server/app/(app)/pulse/page.js +2 -0
  86. package/.next/server/app/(app)/pulse/page.js.nft.json +1 -0
  87. package/.next/server/app/(app)/pulse/page_client-reference-manifest.js +1 -0
  88. package/.next/server/app/(app)/reports/[id]/page.js +3 -0
  89. package/.next/server/app/(app)/reports/[id]/page.js.nft.json +1 -0
  90. package/.next/server/app/(app)/reports/[id]/page_client-reference-manifest.js +1 -0
  91. package/.next/server/app/(app)/reports/page.js +5 -0
  92. package/.next/server/app/(app)/reports/page.js.nft.json +1 -0
  93. package/.next/server/app/(app)/reports/page_client-reference-manifest.js +1 -0
  94. package/.next/server/app/(app)/routines/page.js +2 -0
  95. package/.next/server/app/(app)/routines/page.js.nft.json +1 -0
  96. package/.next/server/app/(app)/routines/page_client-reference-manifest.js +1 -0
  97. package/.next/server/app/(app)/search/page.js +2 -0
  98. package/.next/server/app/(app)/search/page.js.nft.json +1 -0
  99. package/.next/server/app/(app)/search/page_client-reference-manifest.js +1 -0
  100. package/.next/server/app/(app)/security/page.js +2 -0
  101. package/.next/server/app/(app)/security/page.js.nft.json +1 -0
  102. package/.next/server/app/(app)/security/page_client-reference-manifest.js +1 -0
  103. package/.next/server/app/(app)/skills/page.js +18 -0
  104. package/.next/server/app/(app)/skills/page.js.nft.json +1 -0
  105. package/.next/server/app/(app)/skills/page_client-reference-manifest.js +1 -0
  106. package/.next/server/app/(app)/tasks/page.js +2 -0
  107. package/.next/server/app/(app)/tasks/page.js.nft.json +1 -0
  108. package/.next/server/app/(app)/tasks/page_client-reference-manifest.js +1 -0
  109. package/.next/server/app/(app)/test-dev/page.js +2 -0
  110. package/.next/server/app/(app)/test-dev/page.js.nft.json +1 -0
  111. package/.next/server/app/(app)/test-dev/page_client-reference-manifest.js +1 -0
  112. package/.next/server/app/(app)/update/page.js +2 -0
  113. package/.next/server/app/(app)/update/page.js.nft.json +1 -0
  114. package/.next/server/app/(app)/update/page_client-reference-manifest.js +1 -0
  115. package/.next/server/app/(auth)/login/page.js +2 -0
  116. package/.next/server/app/(auth)/login/page.js.nft.json +1 -0
  117. package/.next/server/app/(auth)/login/page_client-reference-manifest.js +1 -0
  118. package/.next/server/app/(auth)/onboarding/page.js +18 -0
  119. package/.next/server/app/(auth)/onboarding/page.js.nft.json +1 -0
  120. package/.next/server/app/(auth)/onboarding/page_client-reference-manifest.js +1 -0
  121. package/.next/server/app/_global-error/page.js +32 -0
  122. package/.next/server/app/_global-error/page.js.nft.json +1 -0
  123. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -0
  124. package/.next/server/app/_global-error.html +1 -0
  125. package/.next/server/app/_global-error.meta +16 -0
  126. package/.next/server/app/_global-error.rsc +15 -0
  127. package/.next/server/app/_global-error.segments/_full.segment.rsc +15 -0
  128. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +5 -0
  129. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +5 -0
  130. package/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
  131. package/.next/server/app/_global-error.segments/_index.segment.rsc +6 -0
  132. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  133. package/.next/server/app/_not-found/page.js +2 -0
  134. package/.next/server/app/_not-found/page.js.nft.json +1 -0
  135. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  136. package/.next/server/app/api/auth/[...all]/route.js +1 -0
  137. package/.next/server/app/api/auth/[...all]/route.js.nft.json +1 -0
  138. package/.next/server/app/api/auth/[...all]/route_client-reference-manifest.js +1 -0
  139. package/.next/server/app/api/cron/tick/route.js +52 -0
  140. package/.next/server/app/api/cron/tick/route.js.nft.json +1 -0
  141. package/.next/server/app/api/cron/tick/route_client-reference-manifest.js +1 -0
  142. package/.next/server/app/api/dev-login/route.js +1 -0
  143. package/.next/server/app/api/dev-login/route.js.nft.json +1 -0
  144. package/.next/server/app/api/dev-login/route_client-reference-manifest.js +1 -0
  145. package/.next/server/app/api/locks/acquire/route.js +1 -0
  146. package/.next/server/app/api/locks/acquire/route.js.nft.json +1 -0
  147. package/.next/server/app/api/locks/acquire/route_client-reference-manifest.js +1 -0
  148. package/.next/server/app/api/models/progress/route.js +1 -0
  149. package/.next/server/app/api/models/progress/route.js.nft.json +1 -0
  150. package/.next/server/app/api/models/progress/route_client-reference-manifest.js +1 -0
  151. package/.next/server/app/api/passkey/authenticate/options/route.js +1 -0
  152. package/.next/server/app/api/passkey/authenticate/options/route.js.nft.json +1 -0
  153. package/.next/server/app/api/passkey/authenticate/options/route_client-reference-manifest.js +1 -0
  154. package/.next/server/app/api/passkey/authenticate/verify/route.js +1 -0
  155. package/.next/server/app/api/passkey/authenticate/verify/route.js.nft.json +1 -0
  156. package/.next/server/app/api/passkey/authenticate/verify/route_client-reference-manifest.js +1 -0
  157. package/.next/server/app/api/passkey/register/options/route.js +1 -0
  158. package/.next/server/app/api/passkey/register/options/route.js.nft.json +1 -0
  159. package/.next/server/app/api/passkey/register/options/route_client-reference-manifest.js +1 -0
  160. package/.next/server/app/api/passkey/register/verify/route.js +1 -0
  161. package/.next/server/app/api/passkey/register/verify/route.js.nft.json +1 -0
  162. package/.next/server/app/api/passkey/register/verify/route_client-reference-manifest.js +1 -0
  163. package/.next/server/app/api/stream/route.js +4 -0
  164. package/.next/server/app/api/stream/route.js.nft.json +1 -0
  165. package/.next/server/app/api/stream/route_client-reference-manifest.js +1 -0
  166. package/.next/server/app/api/sync/file/route.js +2 -0
  167. package/.next/server/app/api/sync/file/route.js.nft.json +1 -0
  168. package/.next/server/app/api/sync/file/route_client-reference-manifest.js +1 -0
  169. package/.next/server/app/api/telegram/poll/route.js +15 -0
  170. package/.next/server/app/api/telegram/poll/route.js.nft.json +1 -0
  171. package/.next/server/app/api/telegram/poll/route_client-reference-manifest.js +1 -0
  172. package/.next/server/app/api/upload/route.js +1 -0
  173. package/.next/server/app/api/upload/route.js.nft.json +1 -0
  174. package/.next/server/app/api/upload/route_client-reference-manifest.js +1 -0
  175. package/.next/server/app/api/v1/[[...path]]/route.js +1 -0
  176. package/.next/server/app/api/v1/[[...path]]/route.js.nft.json +1 -0
  177. package/.next/server/app/api/v1/[[...path]]/route_client-reference-manifest.js +1 -0
  178. package/.next/server/app-paths-manifest.json +53 -0
  179. package/.next/server/chunks/1003.js +1 -0
  180. package/.next/server/chunks/127.js +26 -0
  181. package/.next/server/chunks/1388.js +1 -0
  182. package/.next/server/chunks/1408.js +21 -0
  183. package/.next/server/chunks/1572.js +1 -0
  184. package/.next/server/chunks/1591.js +24 -0
  185. package/.next/server/chunks/1619.js +188 -0
  186. package/.next/server/chunks/162.js +1 -0
  187. package/.next/server/chunks/1881.js +1 -0
  188. package/.next/server/chunks/1968.js +1 -0
  189. package/.next/server/chunks/2297.js +348 -0
  190. package/.next/server/chunks/2341.js +1 -0
  191. package/.next/server/chunks/2517.js +1 -0
  192. package/.next/server/chunks/2549.js +1 -0
  193. package/.next/server/chunks/259.js +14 -0
  194. package/.next/server/chunks/2599.js +1 -0
  195. package/.next/server/chunks/260.js +1 -0
  196. package/.next/server/chunks/2867.js +147 -0
  197. package/.next/server/chunks/3018.js +1 -0
  198. package/.next/server/chunks/3050.js +18 -0
  199. package/.next/server/chunks/3085.js +12 -0
  200. package/.next/server/chunks/3131.js +1 -0
  201. package/.next/server/chunks/3242.js +1 -0
  202. package/.next/server/chunks/3266.js +15 -0
  203. package/.next/server/chunks/3524.js +1 -0
  204. package/.next/server/chunks/3527.js +479 -0
  205. package/.next/server/chunks/3533.js +869 -0
  206. package/.next/server/chunks/3550.js +1 -0
  207. package/.next/server/chunks/3609.js +2 -0
  208. package/.next/server/chunks/3667.js +462 -0
  209. package/.next/server/chunks/3760.js +4 -0
  210. package/.next/server/chunks/4679.js +1 -0
  211. package/.next/server/chunks/4804.js +1 -0
  212. package/.next/server/chunks/4832.js +2 -0
  213. package/.next/server/chunks/4853.js +1 -0
  214. package/.next/server/chunks/4979.js +67 -0
  215. package/.next/server/chunks/5060.js +1 -0
  216. package/.next/server/chunks/5278.js +1 -0
  217. package/.next/server/chunks/5614.js +1 -0
  218. package/.next/server/chunks/5818.js +1 -0
  219. package/.next/server/chunks/6479.js +1 -0
  220. package/.next/server/chunks/6658.js +1 -0
  221. package/.next/server/chunks/6706.js +1 -0
  222. package/.next/server/chunks/6719.js +1 -0
  223. package/.next/server/chunks/678.js +1 -0
  224. package/.next/server/chunks/683.js +1 -0
  225. package/.next/server/chunks/6862.js +1 -0
  226. package/.next/server/chunks/6882.js +1 -0
  227. package/.next/server/chunks/7037.js +1 -0
  228. package/.next/server/chunks/7107.js +741 -0
  229. package/.next/server/chunks/73.js +17 -0
  230. package/.next/server/chunks/7327.js +1 -0
  231. package/.next/server/chunks/7514.js +1 -0
  232. package/.next/server/chunks/7622.js +1 -0
  233. package/.next/server/chunks/7778.js +1 -0
  234. package/.next/server/chunks/7912.js +1 -0
  235. package/.next/server/chunks/7949.js +1 -0
  236. package/.next/server/chunks/7971.js +1 -0
  237. package/.next/server/chunks/7989.js +1 -0
  238. package/.next/server/chunks/842.js +22 -0
  239. package/.next/server/chunks/8762.js +15 -0
  240. package/.next/server/chunks/8823.js +77 -0
  241. package/.next/server/chunks/9146.js +4 -0
  242. package/.next/server/chunks/9676.js +1 -0
  243. package/.next/server/chunks/9783.js +22 -0
  244. package/.next/server/chunks/9969.js +3 -0
  245. package/.next/server/functions-config-manifest.json +18 -0
  246. package/.next/server/instrumentation.js +1 -0
  247. package/.next/server/instrumentation.js.nft.json +1 -0
  248. package/.next/server/interception-route-rewrite-manifest.js +1 -0
  249. package/.next/server/middleware-build-manifest.js +1 -0
  250. package/.next/server/middleware-manifest.json +6 -0
  251. package/.next/server/middleware-react-loadable-manifest.js +1 -0
  252. package/.next/server/middleware.js +18 -0
  253. package/.next/server/middleware.js.nft.json +1 -0
  254. package/.next/server/next-font-manifest.js +1 -0
  255. package/.next/server/next-font-manifest.json +1 -0
  256. package/.next/server/pages/500.html +1 -0
  257. package/.next/server/pages-manifest.json +3 -0
  258. package/.next/server/prefetch-hints.json +1 -0
  259. package/.next/server/server-reference-manifest.js +1 -0
  260. package/.next/server/server-reference-manifest.json +1 -0
  261. package/.next/server/webpack-runtime.js +1 -0
  262. package/.next/static/chunks/1858-339516f78a4b00da.js +1 -0
  263. package/.next/static/chunks/2320-fc8b39380e69d465.js +2 -0
  264. package/.next/static/chunks/23550918-ff694f70f4b0648c.js +1 -0
  265. package/.next/static/chunks/3219-ebb3c23be38c838d.js +1 -0
  266. package/.next/static/chunks/4263-adecb5b466380b6e.js +1 -0
  267. package/.next/static/chunks/5479-0cceab68cd0ca9c7.js +1 -0
  268. package/.next/static/chunks/5701-665b927b06158b76.js +1 -0
  269. package/.next/static/chunks/5920.6451a68b63918988.js +1 -0
  270. package/.next/static/chunks/6575-5c9139720bb0f5bf.js +4 -0
  271. package/.next/static/chunks/6834-4759af1ce7d95fb6.js +32 -0
  272. package/.next/static/chunks/7509.721cd47a931c5518.js +1 -0
  273. package/.next/static/chunks/8264-1ca011989ee2b231.js +1 -0
  274. package/.next/static/chunks/9219-4a39a98b5502d9d1.js +1 -0
  275. package/.next/static/chunks/9690-53d5222618cbeddb.js +1 -0
  276. package/.next/static/chunks/app/(app)/activity/page-3973534281ecea81.js +1 -0
  277. package/.next/static/chunks/app/(app)/agents/[handle]/page-83662a175c098282.js +1 -0
  278. package/.next/static/chunks/app/(app)/code/page-33979545192cd137.js +1 -0
  279. package/.next/static/chunks/app/(app)/config/page-9933aed1ca8a85c1.js +1 -0
  280. package/.next/static/chunks/app/(app)/costs/page-131c4dc580efcc19.js +1 -0
  281. package/.next/static/chunks/app/(app)/cron/page-53ea1aff998a87ca.js +1 -0
  282. package/.next/static/chunks/app/(app)/dashboard/page-deed83aaa9d0d447.js +1 -0
  283. package/.next/static/chunks/app/(app)/docs/[id]/page-38c993d73c0eab4f.js +1 -0
  284. package/.next/static/chunks/app/(app)/docs/page-bf463b55d0554e86.js +1 -0
  285. package/.next/static/chunks/app/(app)/error-988cd28480809861.js +1 -0
  286. package/.next/static/chunks/app/(app)/github/page-62678b4e82dfecb6.js +1 -0
  287. package/.next/static/chunks/app/(app)/goals/page-4adb426fe1c96106.js +1 -0
  288. package/.next/static/chunks/app/(app)/inbox/page-e347dc55ab467310.js +1 -0
  289. package/.next/static/chunks/app/(app)/knowledge/page-65393a045b4349be.js +1 -0
  290. package/.next/static/chunks/app/(app)/layout-7f65675705b011d8.js +1 -0
  291. package/.next/static/chunks/app/(app)/models/page-e01f1dd7e49a2951.js +1 -0
  292. package/.next/static/chunks/app/(app)/notifications/page-56548ac87aef00da.js +1 -0
  293. package/.next/static/chunks/app/(app)/org/page-699e6a6dc0db7d81.js +1 -0
  294. package/.next/static/chunks/app/(app)/organizations/page-36051a380a7e8eb7.js +1 -0
  295. package/.next/static/chunks/app/(app)/page-7d1011a566f81520.js +1 -0
  296. package/.next/static/chunks/app/(app)/planner/page-dab7ced94083373a.js +1 -0
  297. package/.next/static/chunks/app/(app)/plugins/page-5b5a1f53389be42e.js +1 -0
  298. package/.next/static/chunks/app/(app)/pm/page-0de5c08c0b227bb0.js +1 -0
  299. package/.next/static/chunks/app/(app)/prepare-deploy/page-e426038552df8d41.js +1 -0
  300. package/.next/static/chunks/app/(app)/profile/page-608dfcaf8aae0a69.js +1 -0
  301. package/.next/static/chunks/app/(app)/pulse/page-309ccaca91de1faa.js +1 -0
  302. package/.next/static/chunks/app/(app)/reports/[id]/page-53ea1aff998a87ca.js +1 -0
  303. package/.next/static/chunks/app/(app)/reports/page-68cdc6dcfa472d86.js +1 -0
  304. package/.next/static/chunks/app/(app)/routines/page-bcc55550b197a9fa.js +1 -0
  305. package/.next/static/chunks/app/(app)/search/page-5c5f67558d0dbf0d.js +1 -0
  306. package/.next/static/chunks/app/(app)/security/page-a7d41e36aa366b45.js +1 -0
  307. package/.next/static/chunks/app/(app)/skills/page-c5b21e89593b8336.js +1 -0
  308. package/.next/static/chunks/app/(app)/tasks/page-08ae079e3e54d2ce.js +1 -0
  309. package/.next/static/chunks/app/(app)/test-dev/page-633f82dfd9c3ce23.js +1 -0
  310. package/.next/static/chunks/app/(app)/update/page-4be019054351bfac.js +1 -0
  311. package/.next/static/chunks/app/(auth)/login/page-6e85d3377062acae.js +1 -0
  312. package/.next/static/chunks/app/(auth)/onboarding/page-ebb10c175abf3b85.js +1 -0
  313. package/.next/static/chunks/app/_global-error/page-23fe50a6bf589c97.js +1 -0
  314. package/.next/static/chunks/app/_not-found/page-dc38b02aebeab535.js +1 -0
  315. package/.next/static/chunks/app/api/auth/[...all]/route-23fe50a6bf589c97.js +1 -0
  316. package/.next/static/chunks/app/api/cron/tick/route-23fe50a6bf589c97.js +1 -0
  317. package/.next/static/chunks/app/api/dev-login/route-23fe50a6bf589c97.js +1 -0
  318. package/.next/static/chunks/app/api/locks/acquire/route-23fe50a6bf589c97.js +1 -0
  319. package/.next/static/chunks/app/api/models/progress/route-23fe50a6bf589c97.js +1 -0
  320. package/.next/static/chunks/app/api/passkey/authenticate/options/route-23fe50a6bf589c97.js +1 -0
  321. package/.next/static/chunks/app/api/passkey/authenticate/verify/route-23fe50a6bf589c97.js +1 -0
  322. package/.next/static/chunks/app/api/passkey/register/options/route-23fe50a6bf589c97.js +1 -0
  323. package/.next/static/chunks/app/api/passkey/register/verify/route-23fe50a6bf589c97.js +1 -0
  324. package/.next/static/chunks/app/api/stream/route-23fe50a6bf589c97.js +1 -0
  325. package/.next/static/chunks/app/api/sync/file/route-23fe50a6bf589c97.js +1 -0
  326. package/.next/static/chunks/app/api/telegram/poll/route-23fe50a6bf589c97.js +1 -0
  327. package/.next/static/chunks/app/api/upload/route-23fe50a6bf589c97.js +1 -0
  328. package/.next/static/chunks/app/api/v1/[[...path]]/route-23fe50a6bf589c97.js +1 -0
  329. package/.next/static/chunks/app/error-09899a13c38b6e89.js +1 -0
  330. package/.next/static/chunks/app/global-error-b8050d4d886f448c.js +1 -0
  331. package/.next/static/chunks/app/layout-ab9deed1e7e2e9df.js +1 -0
  332. package/.next/static/chunks/framework-4b2c6b6043dd203f.js +1 -0
  333. package/.next/static/chunks/main-722e16032e7764d1.js +5 -0
  334. package/.next/static/chunks/main-app-761880af2b6f1962.js +1 -0
  335. package/.next/static/chunks/next/dist/client/components/builtin/app-error-23fe50a6bf589c97.js +1 -0
  336. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-23fe50a6bf589c97.js +1 -0
  337. package/.next/static/chunks/next/dist/client/components/builtin/not-found-23fe50a6bf589c97.js +1 -0
  338. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-23fe50a6bf589c97.js +1 -0
  339. package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  340. package/.next/static/chunks/webpack-222e3894b78c67db.js +1 -0
  341. package/.next/static/css/0a9b5805594444e3.css +1 -0
  342. package/.next/static/yztMvBwyrWWkSqP6jfXoa/_buildManifest.js +1 -0
  343. package/.next/static/yztMvBwyrWWkSqP6jfXoa/_ssgManifest.js +1 -0
  344. package/.next/trace-build +1 -0
  345. package/.next/types/app/(app)/activity/page.ts +87 -0
  346. package/.next/types/app/(app)/agents/[handle]/page.ts +87 -0
  347. package/.next/types/app/(app)/code/page.ts +87 -0
  348. package/.next/types/app/(app)/config/page.ts +87 -0
  349. package/.next/types/app/(app)/costs/page.ts +87 -0
  350. package/.next/types/app/(app)/cron/page.ts +87 -0
  351. package/.next/types/app/(app)/dashboard/page.ts +87 -0
  352. package/.next/types/app/(app)/docs/[id]/page.ts +87 -0
  353. package/.next/types/app/(app)/docs/page.ts +87 -0
  354. package/.next/types/app/(app)/github/page.ts +87 -0
  355. package/.next/types/app/(app)/goals/page.ts +87 -0
  356. package/.next/types/app/(app)/inbox/page.ts +87 -0
  357. package/.next/types/app/(app)/knowledge/page.ts +87 -0
  358. package/.next/types/app/(app)/models/page.ts +87 -0
  359. package/.next/types/app/(app)/notifications/page.ts +87 -0
  360. package/.next/types/app/(app)/org/page.ts +87 -0
  361. package/.next/types/app/(app)/organizations/page.ts +87 -0
  362. package/.next/types/app/(app)/page.ts +87 -0
  363. package/.next/types/app/(app)/planner/page.ts +87 -0
  364. package/.next/types/app/(app)/plugins/page.ts +87 -0
  365. package/.next/types/app/(app)/pm/page.ts +87 -0
  366. package/.next/types/app/(app)/prepare-deploy/page.ts +87 -0
  367. package/.next/types/app/(app)/profile/page.ts +87 -0
  368. package/.next/types/app/(app)/pulse/page.ts +87 -0
  369. package/.next/types/app/(app)/reports/[id]/page.ts +87 -0
  370. package/.next/types/app/(app)/reports/page.ts +87 -0
  371. package/.next/types/app/(app)/routines/page.ts +87 -0
  372. package/.next/types/app/(app)/search/page.ts +87 -0
  373. package/.next/types/app/(app)/security/page.ts +87 -0
  374. package/.next/types/app/(app)/skills/page.ts +87 -0
  375. package/.next/types/app/(app)/tasks/page.ts +87 -0
  376. package/.next/types/app/(app)/test-dev/page.ts +87 -0
  377. package/.next/types/app/(app)/update/page.ts +87 -0
  378. package/.next/types/app/(auth)/login/page.ts +87 -0
  379. package/.next/types/app/(auth)/onboarding/page.ts +87 -0
  380. package/.next/types/app/api/auth/[...all]/route.ts +351 -0
  381. package/.next/types/app/api/cron/tick/route.ts +351 -0
  382. package/.next/types/app/api/dev-login/route.ts +351 -0
  383. package/.next/types/app/api/locks/acquire/route.ts +351 -0
  384. package/.next/types/app/api/models/progress/route.ts +351 -0
  385. package/.next/types/app/api/passkey/authenticate/options/route.ts +351 -0
  386. package/.next/types/app/api/passkey/authenticate/verify/route.ts +351 -0
  387. package/.next/types/app/api/passkey/register/options/route.ts +351 -0
  388. package/.next/types/app/api/passkey/register/verify/route.ts +351 -0
  389. package/.next/types/app/api/stream/route.ts +351 -0
  390. package/.next/types/app/api/sync/file/route.ts +351 -0
  391. package/.next/types/app/api/telegram/poll/route.ts +351 -0
  392. package/.next/types/app/api/upload/route.ts +351 -0
  393. package/.next/types/app/api/v1/[[...path]]/route.ts +351 -0
  394. package/.next/types/cache-life.d.ts +145 -0
  395. package/.next/types/link.d.ts +210 -0
  396. package/.next/types/package.json +1 -0
  397. package/.next/types/routes.d.ts +120 -0
  398. package/.next/types/validator.ts +511 -0
  399. package/CHANGELOG.md +312 -0
  400. package/LICENSE +21 -0
  401. package/README.md +382 -0
  402. package/README.pt-BR.md +391 -0
  403. package/bin/constella.mjs +329 -0
  404. package/bin/guard-hook.mjs +44 -0
  405. package/bin/lock-hook.mjs +49 -0
  406. package/bin/worker.mjs +142 -0
  407. package/docs/assets/arch-orbit.svg +56 -0
  408. package/docs/assets/blackhole.svg +37 -0
  409. package/docs/assets/divider-orbit.svg +23 -0
  410. package/docs/assets/hero-constella.svg +72 -0
  411. package/docs/en/AGENTS.md +279 -0
  412. package/docs/en/AI_ARCHITECTURE.md +373 -0
  413. package/docs/en/ARCHITECTURE.md +334 -0
  414. package/docs/en/AUTH_MODE.md +247 -0
  415. package/docs/en/CHAT_COMMANDS.md +305 -0
  416. package/docs/en/CONFIGURATION.md +340 -0
  417. package/docs/en/DEPLOY.md +331 -0
  418. package/docs/en/DM.md +297 -0
  419. package/docs/en/FAQ.md +258 -0
  420. package/docs/en/GITHUB.md +341 -0
  421. package/docs/en/GOALS_SPECS_ISSUES.md +303 -0
  422. package/docs/en/INBOX.md +340 -0
  423. package/docs/en/INSTALLATION.md +329 -0
  424. package/docs/en/KB_AGENT.md +305 -0
  425. package/docs/en/KB_RAG.md +356 -0
  426. package/docs/en/MCP.md +313 -0
  427. package/docs/en/MEMORY_RAG.md +289 -0
  428. package/docs/en/MODELS.md +341 -0
  429. package/docs/en/ONBOARDING.md +327 -0
  430. package/docs/en/PLUGINS.md +290 -0
  431. package/docs/en/PORTABLE_MODE.md +387 -0
  432. package/docs/en/PO_AGENT.md +379 -0
  433. package/docs/en/PREPARE_DEPLOY.md +308 -0
  434. package/docs/en/PROJECT_STACKS.md +258 -0
  435. package/docs/en/PUBLIC_API.md +315 -0
  436. package/docs/en/PUBLISHING.md +343 -0
  437. package/docs/en/README.md +95 -0
  438. package/docs/en/SECURITY.md +280 -0
  439. package/docs/en/SKILLS.md +349 -0
  440. package/docs/en/START_MODE.md +340 -0
  441. package/docs/en/SYNCED_BLOCKS.md +320 -0
  442. package/docs/en/TEAM_ROOM.md +285 -0
  443. package/docs/en/TELEGRAM.md +294 -0
  444. package/docs/en/TEST_DEV.md +321 -0
  445. package/docs/en/TROUBLESHOOTING.md +294 -0
  446. package/docs/en/UPDATE.md +301 -0
  447. package/docs/en/VPS_MODE.md +334 -0
  448. package/docs/en/WORKFLOW.md +321 -0
  449. package/docs/pt/AGENTS.md +279 -0
  450. package/docs/pt/AI_ARCHITECTURE.md +373 -0
  451. package/docs/pt/ARCHITECTURE.md +334 -0
  452. package/docs/pt/AUTH_MODE.md +247 -0
  453. package/docs/pt/CHAT_COMMANDS.md +307 -0
  454. package/docs/pt/CONFIGURATION.md +340 -0
  455. package/docs/pt/DEPLOY.md +331 -0
  456. package/docs/pt/DM.md +297 -0
  457. package/docs/pt/FAQ.md +258 -0
  458. package/docs/pt/GITHUB.md +341 -0
  459. package/docs/pt/GOALS_SPECS_ISSUES.md +303 -0
  460. package/docs/pt/INBOX.md +340 -0
  461. package/docs/pt/INSTALLATION.md +329 -0
  462. package/docs/pt/KB_AGENT.md +305 -0
  463. package/docs/pt/KB_RAG.md +356 -0
  464. package/docs/pt/MCP.md +313 -0
  465. package/docs/pt/MEMORY_RAG.md +289 -0
  466. package/docs/pt/MODELS.md +341 -0
  467. package/docs/pt/ONBOARDING.md +327 -0
  468. package/docs/pt/PLUGINS.md +290 -0
  469. package/docs/pt/PORTABLE_MODE.md +387 -0
  470. package/docs/pt/PO_AGENT.md +379 -0
  471. package/docs/pt/PREPARE_DEPLOY.md +308 -0
  472. package/docs/pt/PROJECT_STACKS.md +258 -0
  473. package/docs/pt/PUBLIC_API.md +315 -0
  474. package/docs/pt/PUBLISHING.md +343 -0
  475. package/docs/pt/README.md +95 -0
  476. package/docs/pt/SECURITY.md +280 -0
  477. package/docs/pt/SKILLS.md +349 -0
  478. package/docs/pt/START_MODE.md +340 -0
  479. package/docs/pt/SYNCED_BLOCKS.md +320 -0
  480. package/docs/pt/TEAM_ROOM.md +285 -0
  481. package/docs/pt/TELEGRAM.md +294 -0
  482. package/docs/pt/TEST_DEV.md +321 -0
  483. package/docs/pt/TROUBLESHOOTING.md +294 -0
  484. package/docs/pt/UPDATE.md +301 -0
  485. package/docs/pt/VPS_MODE.md +334 -0
  486. package/docs/pt/WORKFLOW.md +321 -0
  487. package/drizzle/0000_regular_nightshade.sql +644 -0
  488. package/drizzle/0001_mixed_zombie.sql +106 -0
  489. package/drizzle/meta/0000_snapshot.json +4650 -0
  490. package/drizzle/meta/0001_snapshot.json +5418 -0
  491. package/drizzle/meta/_journal.json +20 -0
  492. package/drizzle.config.mjs +16 -0
  493. package/next.config.mjs +18 -0
  494. package/package.json +130 -0
  495. package/scripts/clean-repo.mjs +20 -0
  496. package/scripts/dev-all.mjs +46 -0
  497. package/scripts/i18n-parity.mjs +57 -0
  498. package/scripts/mcp-server.mjs +100 -0
  499. package/scripts/postbuild.mjs +11 -0
  500. package/scripts/publish-public.mjs +116 -0
  501. package/scripts/start-all.mjs +45 -0
  502. package/scripts/trim-next.mjs +23 -0
  503. package/scripts/vps-install.sh +39 -0
  504. package/skills/CONTRIBUTING.md +122 -0
  505. package/skills/COVERAGE.md +129 -0
  506. package/skills/INDEX.json +3443 -0
  507. package/skills/README.md +57 -0
  508. package/skills/design/animation-motion/SKILL.md +60 -0
  509. package/skills/design/color-and-typography/SKILL.md +60 -0
  510. package/skills/design/css-techniques/SKILL.md +58 -0
  511. package/skills/design/design-systems/SKILL.md +60 -0
  512. package/skills/design/gradients/SKILL.md +59 -0
  513. package/skills/design/graphic-design-basics/SKILL.md +55 -0
  514. package/skills/design/microinteractions/SKILL.md +58 -0
  515. package/skills/design/responsive-layout/SKILL.md +59 -0
  516. package/skills/design/ui-ux-principles/SKILL.md +58 -0
  517. package/skills/engineering/architecture/api-design-rest-graphql/SKILL.md +67 -0
  518. package/skills/engineering/architecture/caching-strategies/SKILL.md +59 -0
  519. package/skills/engineering/architecture/data-modeling/SKILL.md +64 -0
  520. package/skills/engineering/architecture/message-queues-async/SKILL.md +58 -0
  521. package/skills/engineering/architecture/scalability-reliability/SKILL.md +62 -0
  522. package/skills/engineering/architecture/software-architecture-patterns/SKILL.md +56 -0
  523. package/skills/engineering/architecture/system-design-fundamentals/SKILL.md +56 -0
  524. package/skills/engineering/backend/auth-and-authorization/SKILL.md +62 -0
  525. package/skills/engineering/backend/backend-fundamentals/SKILL.md +65 -0
  526. package/skills/engineering/backend/observability-logging/SKILL.md +60 -0
  527. package/skills/engineering/frontend/accessibility-wcag/SKILL.md +57 -0
  528. package/skills/engineering/frontend/frontend-architecture/SKILL.md +65 -0
  529. package/skills/engineering/frontend/rendering-strategies-ssr-csr/SKILL.md +60 -0
  530. package/skills/engineering/frontend/state-management/SKILL.md +69 -0
  531. package/skills/engineering/performance/backend-performance/SKILL.md +69 -0
  532. package/skills/engineering/performance/database-query-optimization/SKILL.md +64 -0
  533. package/skills/engineering/performance/profiling-and-benchmarking/SKILL.md +60 -0
  534. package/skills/engineering/performance/web-performance-core-vitals/SKILL.md +72 -0
  535. package/skills/engineering/practices/clean-code/SKILL.md +61 -0
  536. package/skills/engineering/practices/code-optimization/SKILL.md +60 -0
  537. package/skills/engineering/practices/code-review-practices/SKILL.md +58 -0
  538. package/skills/engineering/practices/git-workflow/SKILL.md +62 -0
  539. package/skills/engineering/practices/refactoring/SKILL.md +58 -0
  540. package/skills/engineering/security/appsec-fundamentals/SKILL.md +70 -0
  541. package/skills/engineering/security/dependency-supply-chain/SKILL.md +77 -0
  542. package/skills/engineering/security/owasp-asvs/SKILL.md +54 -0
  543. package/skills/engineering/security/owasp-top-10/SKILL.md +63 -0
  544. package/skills/engineering/security/secrets-management/SKILL.md +58 -0
  545. package/skills/engineering/security/secure-auth-sessions/SKILL.md +56 -0
  546. package/skills/engineering/testing/tdd-and-coverage/SKILL.md +62 -0
  547. package/skills/engineering/testing/testing-strategy-pyramid/SKILL.md +56 -0
  548. package/skills/engineering/testing/unit-integration-e2e/SKILL.md +75 -0
  549. package/skills/languages/c/SKILL.md +74 -0
  550. package/skills/languages/clojure/SKILL.md +73 -0
  551. package/skills/languages/cpp/SKILL.md +75 -0
  552. package/skills/languages/csharp/SKILL.md +75 -0
  553. package/skills/languages/dart/SKILL.md +82 -0
  554. package/skills/languages/elixir/SKILL.md +74 -0
  555. package/skills/languages/erlang/SKILL.md +76 -0
  556. package/skills/languages/go/SKILL.md +83 -0
  557. package/skills/languages/haskell/SKILL.md +70 -0
  558. package/skills/languages/java/SKILL.md +71 -0
  559. package/skills/languages/javascript/SKILL.md +62 -0
  560. package/skills/languages/kotlin/SKILL.md +68 -0
  561. package/skills/languages/lua/SKILL.md +79 -0
  562. package/skills/languages/objectivec/SKILL.md +83 -0
  563. package/skills/languages/php/SKILL.md +74 -0
  564. package/skills/languages/python/SKILL.md +68 -0
  565. package/skills/languages/r/SKILL.md +70 -0
  566. package/skills/languages/ruby/SKILL.md +67 -0
  567. package/skills/languages/rust/SKILL.md +72 -0
  568. package/skills/languages/scala/SKILL.md +73 -0
  569. package/skills/languages/swift/SKILL.md +73 -0
  570. package/skills/languages/typescript/SKILL.md +69 -0
  571. package/skills/meta/authoring-agent-skills/SKILL.md +73 -0
  572. package/skills/meta/progressive-disclosure/SKILL.md +65 -0
  573. package/skills/meta/skill-frontmatter-spec/SKILL.md +65 -0
  574. package/skills/process/adr-technical-decisions/SKILL.md +59 -0
  575. package/skills/process/app-planning/SKILL.md +63 -0
  576. package/skills/process/architecture-before-code/SKILL.md +52 -0
  577. package/skills/process/breaking-work-into-sprints/SKILL.md +53 -0
  578. package/skills/process/idea-to-product/SKILL.md +50 -0
  579. package/skills/process/mocks-and-screen-flows/SKILL.md +52 -0
  580. package/skills/process/prioritization-moscow-rice/SKILL.md +64 -0
  581. package/skills/process/problem-framing/SKILL.md +51 -0
  582. package/skills/process/product-discovery/SKILL.md +53 -0
  583. package/skills/process/readme-generation/SKILL.md +90 -0
  584. package/skills/process/requirements-to-specs/SKILL.md +53 -0
  585. package/skills/process/research-official-docs/SKILL.md +58 -0
  586. package/skills/process/review-code-perf-security/SKILL.md +65 -0
  587. package/skills/process/security-by-design/SKILL.md +68 -0
  588. package/skills/process/specs-to-issues/SKILL.md +53 -0
  589. package/skills/process/testing-before-done/SKILL.md +61 -0
  590. package/skills/process/validating-ux-navigation/SKILL.md +63 -0
  591. package/skills/references/ai-attachments-ui/SKILL.md +66 -0
  592. package/skills/references/ai-in-browser-webllm/SKILL.md +74 -0
  593. package/skills/references/ai-tool-ui-patterns/SKILL.md +63 -0
  594. package/skills/references/component-patterns-gallery/SKILL.md +62 -0
  595. package/skills/references/gradient-resources/SKILL.md +66 -0
  596. package/skills/references/react-component-libraries/SKILL.md +61 -0
  597. package/skills/references/saas-landing-patterns/SKILL.md +67 -0
  598. package/skills/references/shadcn-tailwind-theming/SKILL.md +74 -0
  599. package/skills/references/vercel-ai-sdk-elements/SKILL.md +66 -0
  600. package/skills/references/web-animation-codrops/SKILL.md +68 -0
  601. package/skills/stacks/aiml/jupyter/SKILL.md +68 -0
  602. package/skills/stacks/aiml/keras/SKILL.md +77 -0
  603. package/skills/stacks/aiml/numpy/SKILL.md +69 -0
  604. package/skills/stacks/aiml/pandas/SKILL.md +72 -0
  605. package/skills/stacks/aiml/pytorch/SKILL.md +77 -0
  606. package/skills/stacks/aiml/scikit-learn/SKILL.md +74 -0
  607. package/skills/stacks/aiml/tensorflow/SKILL.md +79 -0
  608. package/skills/stacks/auth/auth0/SKILL.md +63 -0
  609. package/skills/stacks/auth/authjs/SKILL.md +69 -0
  610. package/skills/stacks/auth/clerk/SKILL.md +72 -0
  611. package/skills/stacks/auth/keycloak/SKILL.md +63 -0
  612. package/skills/stacks/auth/lucia/SKILL.md +56 -0
  613. package/skills/stacks/auth/passport/SKILL.md +70 -0
  614. package/skills/stacks/auth/supabase-auth/SKILL.md +66 -0
  615. package/skills/stacks/baas/amplify/SKILL.md +71 -0
  616. package/skills/stacks/baas/appwrite/SKILL.md +79 -0
  617. package/skills/stacks/baas/firebase/SKILL.md +73 -0
  618. package/skills/stacks/baas/heroku/SKILL.md +71 -0
  619. package/skills/stacks/backend/actix/SKILL.md +77 -0
  620. package/skills/stacks/backend/adonisjs/SKILL.md +65 -0
  621. package/skills/stacks/backend/aspnet-core/SKILL.md +75 -0
  622. package/skills/stacks/backend/codeigniter/SKILL.md +76 -0
  623. package/skills/stacks/backend/django/SKILL.md +62 -0
  624. package/skills/stacks/backend/express/SKILL.md +65 -0
  625. package/skills/stacks/backend/fastapi/SKILL.md +64 -0
  626. package/skills/stacks/backend/fastify/SKILL.md +64 -0
  627. package/skills/stacks/backend/fiber/SKILL.md +68 -0
  628. package/skills/stacks/backend/flask/SKILL.md +71 -0
  629. package/skills/stacks/backend/gin/SKILL.md +68 -0
  630. package/skills/stacks/backend/graphql/SKILL.md +70 -0
  631. package/skills/stacks/backend/hono/SKILL.md +64 -0
  632. package/skills/stacks/backend/koa/SKILL.md +63 -0
  633. package/skills/stacks/backend/laravel/SKILL.md +73 -0
  634. package/skills/stacks/backend/nestjs/SKILL.md +70 -0
  635. package/skills/stacks/backend/nginx/SKILL.md +77 -0
  636. package/skills/stacks/backend/phoenix/SKILL.md +68 -0
  637. package/skills/stacks/backend/rails/SKILL.md +67 -0
  638. package/skills/stacks/backend/spring/SKILL.md +70 -0
  639. package/skills/stacks/backend/spring-boot/SKILL.md +70 -0
  640. package/skills/stacks/backend/symfony/SKILL.md +77 -0
  641. package/skills/stacks/container/containerd/SKILL.md +75 -0
  642. package/skills/stacks/container/docker/SKILL.md +90 -0
  643. package/skills/stacks/container/podman/SKILL.md +93 -0
  644. package/skills/stacks/database/cassandra/SKILL.md +74 -0
  645. package/skills/stacks/database/cockroachdb/SKILL.md +69 -0
  646. package/skills/stacks/database/dynamodb/SKILL.md +62 -0
  647. package/skills/stacks/database/mariadb/SKILL.md +71 -0
  648. package/skills/stacks/database/mongodb/SKILL.md +71 -0
  649. package/skills/stacks/database/mysql/SKILL.md +72 -0
  650. package/skills/stacks/database/neon/SKILL.md +68 -0
  651. package/skills/stacks/database/planetscale/SKILL.md +70 -0
  652. package/skills/stacks/database/postgresql/SKILL.md +81 -0
  653. package/skills/stacks/database/redis/SKILL.md +78 -0
  654. package/skills/stacks/database/sqlite/SKILL.md +70 -0
  655. package/skills/stacks/database/supabase/SKILL.md +79 -0
  656. package/skills/stacks/dataviz/chart-js/SKILL.md +72 -0
  657. package/skills/stacks/dataviz/d3/SKILL.md +77 -0
  658. package/skills/stacks/dataviz/grafana/SKILL.md +69 -0
  659. package/skills/stacks/dataviz/plotly/SKILL.md +71 -0
  660. package/skills/stacks/frontend/alpine/SKILL.md +75 -0
  661. package/skills/stacks/frontend/angular/SKILL.md +75 -0
  662. package/skills/stacks/frontend/backbone/SKILL.md +82 -0
  663. package/skills/stacks/frontend/ember/SKILL.md +85 -0
  664. package/skills/stacks/frontend/htmx/SKILL.md +73 -0
  665. package/skills/stacks/frontend/lit/SKILL.md +76 -0
  666. package/skills/stacks/frontend/preact/SKILL.md +74 -0
  667. package/skills/stacks/frontend/qwik/SKILL.md +65 -0
  668. package/skills/stacks/frontend/react/SKILL.md +77 -0
  669. package/skills/stacks/frontend/solidjs/SKILL.md +75 -0
  670. package/skills/stacks/frontend/svelte/SKILL.md +70 -0
  671. package/skills/stacks/frontend/vue/SKILL.md +69 -0
  672. package/skills/stacks/infra/ansible/SKILL.md +76 -0
  673. package/skills/stacks/infra/aws/SKILL.md +66 -0
  674. package/skills/stacks/infra/azure/SKILL.md +72 -0
  675. package/skills/stacks/infra/circleci/SKILL.md +78 -0
  676. package/skills/stacks/infra/cloudflare/SKILL.md +65 -0
  677. package/skills/stacks/infra/fly-io/SKILL.md +63 -0
  678. package/skills/stacks/infra/gcp/SKILL.md +66 -0
  679. package/skills/stacks/infra/jenkins/SKILL.md +73 -0
  680. package/skills/stacks/infra/kubernetes/SKILL.md +64 -0
  681. package/skills/stacks/infra/netlify/SKILL.md +60 -0
  682. package/skills/stacks/infra/railway/SKILL.md +63 -0
  683. package/skills/stacks/infra/tailscale/SKILL.md +65 -0
  684. package/skills/stacks/infra/terraform/SKILL.md +75 -0
  685. package/skills/stacks/infra/vagrant/SKILL.md +70 -0
  686. package/skills/stacks/infra/vercel/SKILL.md +60 -0
  687. package/skills/stacks/meta/astro/SKILL.md +64 -0
  688. package/skills/stacks/meta/docusaurus/SKILL.md +71 -0
  689. package/skills/stacks/meta/eleventy/SKILL.md +69 -0
  690. package/skills/stacks/meta/gatsby/SKILL.md +63 -0
  691. package/skills/stacks/meta/hugo/SKILL.md +73 -0
  692. package/skills/stacks/meta/jekyll/SKILL.md +70 -0
  693. package/skills/stacks/meta/nextjs/SKILL.md +62 -0
  694. package/skills/stacks/meta/nuxt/SKILL.md +66 -0
  695. package/skills/stacks/meta/remix/SKILL.md +67 -0
  696. package/skills/stacks/meta/sveltekit/SKILL.md +70 -0
  697. package/skills/stacks/meta/vite/SKILL.md +63 -0
  698. package/skills/stacks/mobile/android/SKILL.md +77 -0
  699. package/skills/stacks/mobile/flutter/SKILL.md +77 -0
  700. package/skills/stacks/mobile/ionic/SKILL.md +72 -0
  701. package/skills/stacks/mobile/nativescript/SKILL.md +71 -0
  702. package/skills/stacks/mobile/react-native/SKILL.md +75 -0
  703. package/skills/stacks/mobile/xamarin/SKILL.md +73 -0
  704. package/skills/stacks/orm/diesel/SKILL.md +72 -0
  705. package/skills/stacks/orm/django-orm/SKILL.md +58 -0
  706. package/skills/stacks/orm/drizzle/SKILL.md +67 -0
  707. package/skills/stacks/orm/gorm/SKILL.md +73 -0
  708. package/skills/stacks/orm/knex/SKILL.md +64 -0
  709. package/skills/stacks/orm/mongoose/SKILL.md +64 -0
  710. package/skills/stacks/orm/prisma/SKILL.md +64 -0
  711. package/skills/stacks/orm/sequelize/SKILL.md +65 -0
  712. package/skills/stacks/orm/sqlalchemy/SKILL.md +71 -0
  713. package/skills/stacks/orm/typeorm/SKILL.md +70 -0
  714. package/skills/stacks/queue/bullmq/SKILL.md +69 -0
  715. package/skills/stacks/queue/celery/SKILL.md +68 -0
  716. package/skills/stacks/queue/kafka/SKILL.md +66 -0
  717. package/skills/stacks/queue/nats/SKILL.md +66 -0
  718. package/skills/stacks/queue/rabbitmq/SKILL.md +64 -0
  719. package/skills/stacks/queue/redis/SKILL.md +66 -0
  720. package/skills/stacks/runtime/beam/SKILL.md +72 -0
  721. package/skills/stacks/runtime/bun/SKILL.md +80 -0
  722. package/skills/stacks/runtime/deno/SKILL.md +74 -0
  723. package/skills/stacks/runtime/dotnet/SKILL.md +64 -0
  724. package/skills/stacks/runtime/jvm/SKILL.md +66 -0
  725. package/skills/stacks/runtime/node/SKILL.md +70 -0
  726. package/skills/stacks/runtime/pypy/SKILL.md +69 -0
  727. package/skills/stacks/runtime/python3/SKILL.md +70 -0
  728. package/skills/stacks/styling/bootstrap/SKILL.md +74 -0
  729. package/skills/stacks/styling/bulma/SKILL.md +80 -0
  730. package/skills/stacks/styling/chakra-ui/SKILL.md +61 -0
  731. package/skills/stacks/styling/css-modules/SKILL.md +54 -0
  732. package/skills/stacks/styling/mui/SKILL.md +60 -0
  733. package/skills/stacks/styling/sass/SKILL.md +63 -0
  734. package/skills/stacks/styling/shadcn-ui/SKILL.md +58 -0
  735. package/skills/stacks/styling/styled-components/SKILL.md +62 -0
  736. package/skills/stacks/styling/tailwind/SKILL.md +59 -0
  737. package/skills/stacks/styling/unocss/SKILL.md +64 -0
  738. package/skills/stacks/styling/vanilla-extract/SKILL.md +64 -0
  739. package/skills/stacks/styling/vuetify/SKILL.md +89 -0
  740. package/skills/stacks/testing/cypress/SKILL.md +68 -0
  741. package/skills/stacks/testing/jasmine/SKILL.md +67 -0
  742. package/skills/stacks/testing/jest/SKILL.md +67 -0
  743. package/skills/stacks/testing/mocha/SKILL.md +71 -0
  744. package/skills/stacks/testing/playwright/SKILL.md +68 -0
  745. package/skills/stacks/testing/puppeteer/SKILL.md +70 -0
  746. package/skills/stacks/testing/selenium/SKILL.md +70 -0
  747. package/skills/stacks/testing/vitest/SKILL.md +68 -0
@@ -0,0 +1,77 @@
1
+ "use strict";exports.id=8823,exports.ids=[8823],exports.modules={18661:(a,b,c)=>{c.d(b,{NF:()=>t,PT:()=>u});var d=c(73024),e=c(76760),f=c(54679),g=c.n(f),h=c(63933),i=c(80280),j=c(25533),k=c(78698),l=c(3188),m=c(6404),n=c(99546),o=c(54033),p=c(90860);async function q(a,b){let[c]=await i.db.select().from(j.goal).where((0,h.Uo)((0,h.eq)(j.goal.id,b),(0,h.eq)(j.goal.workspaceId,a)));return c}async function r(a,b){for(let c of(await i.db.select().from(j.task).where((0,h.Uo)((0,h.eq)(j.task.workspaceId,a),(0,h.eq)(j.task.goalId,b)))))(0,l.KD)(c.id),("todo"===c.col||"doing"===c.col)&&(await i.db.update(j.task).set({col:"blocked"}).where((0,h.eq)(j.task.id,c.id)),c.issueId&&await i.db.update(j.issue).set({col:"blocked"}).where((0,h.eq)(j.issue.id,c.issueId))),c.assigneeId&&await i.db.update(j.agent).set({status:"idle"}).where((0,h.eq)(j.agent.id,c.assigneeId))}async function s(a,b,c){await i.db.update(j.spec).set({status:c}).where((0,h.Uo)((0,h.eq)(j.spec.workspaceId,a),(0,h.eq)(j.spec.goalId,b))),await i.db.update(j.issue).set({status:c}).where((0,h.Uo)((0,h.eq)(j.issue.workspaceId,a),(0,h.eq)(j.issue.goalId,b)))}async function t(a,b){let c=await q(a,b);return c?(await i.db.update(j.goal).set({status:"cancelled",cancelledAt:new Date}).where((0,h.eq)(j.goal.id,b)),await s(a,b,"cancelled"),await (0,o.TC)(a,b),await r(a,b),await (0,n.j)(a,{text:`Cancelled goal: ${c.title}`,by:"operator",source:"operator-instruction",goalId:b}),await (0,p.I)(a,{kind:"info",text:`Goal cancelled — ${c.title}`,detail:"Execution stopped; state preserved. Reopen to resume."}),{ok:!0,title:c.title}):{ok:!1}}async function u(a,b,c){let f=await q(b,c);if(!f)return{ok:!1};let l=(0,k.HZ)(a),[t,u,v,w,x]=await Promise.all([i.db.select().from(j.spec).where((0,h.Uo)((0,h.eq)(j.spec.workspaceId,b),(0,h.eq)(j.spec.goalId,c))),i.db.select().from(j.issue).where((0,h.Uo)((0,h.eq)(j.issue.workspaceId,b),(0,h.eq)(j.issue.goalId,c))),i.db.select().from(j.task).where((0,h.Uo)((0,h.eq)(j.task.workspaceId,b),(0,h.eq)(j.task.goalId,c))),i.db.select().from(j.decision).where((0,h.Uo)((0,h.eq)(j.decision.workspaceId,b),(0,h.eq)(j.decision.goalId,c))),i.db.select().from(j.report).where((0,h.Uo)((0,h.eq)(j.report.workspaceId,b),(0,h.eq)(j.report.goalId,c)))]),y=v.map(a=>a.id),z=y.length?await i.db.select().from(j.taskStep).where((0,h.RV)(j.taskStep.taskId,y)):[],A=await (0,m.Y)(b,c),B=new(g()),C=0;for(let a of A){let b=(0,e.join)(l,a);if((0,d.existsSync)(b))try{B.addFile("files/"+a,(0,d.readFileSync)(b)),C++}catch{}}let D={goal:f,specs:t,issues:u,tasks:v,taskSteps:z,decisions:w,reports:x,fileCount:C,archivedAt:new Date().toISOString()},E=[`# Archived work — ${f.title}`,"",`Status at archive: ${f.status} \xb7 progress ${f.progress}%`,"",`## Specs (${t.length})`,...t.map(a=>`- ${a.key} ${a.title}`),"",`## Issues (${u.length})`,...u.map(a=>`- ${a.key} [${a.col}] ${a.title}`),"",`## Decisions (${w.length})`,...w.map(a=>`- ${a.text} (${a.by})`),"",`## Source files (${C})`,...A.map(a=>`- ${a}`),""].join("\n");B.addFile("MANIFEST.json",Buffer.from(JSON.stringify(D,null,2))),B.addFile("MANIFEST.md",Buffer.from(E));let F=(0,e.join)(l,"archives");(0,d.mkdirSync)(F,{recursive:!0});let G=`archives/${(f.title||"work").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,40)||"work"}-${new Date().toISOString().slice(0,10)}-${c.slice(0,6)}.zip`;try{B.writeZip((0,e.join)(l,G))}catch(a){return console.error("[archiveGoalFor] zip failed:",a),{ok:!1}}return await i.db.update(j.goal).set({status:"archived",archivePath:G,archivedAt:new Date}).where((0,h.eq)(j.goal.id,c)),await s(b,c,"archived"),await (0,o.TC)(b,c),await r(b,c),await (0,n.j)(b,{text:`Archived goal: ${f.title} → ${G}`,by:"operator",source:"operator-instruction",goalId:c}),await (0,p.I)(b,{kind:"info",text:`Goal archived — ${f.title}`,detail:`${C} files + manifest zipped to ${G}.`}),{ok:!0,path:G,title:f.title}}},55479:(a,b,c)=>{c.d(b,{PO:()=>p,TR:()=>o,mL:()=>n,mt:()=>q,wz:()=>m,yk:()=>r});var d=c(77598),e=c(63933),f=c(80280),g=c(25533),h=c(90860),i=c(99546),j=c(54033),k=c(863),l=c(26288);async function m(a,b){await f.db.update(g.plan).set({approved:!0,stage:6}).where((0,e.eq)(g.plan.workspaceId,b.id)),await f.db.update(g.issue).set({approved:!0}).where((0,e.eq)(g.issue.workspaceId,b.id)),await f.db.update(g.spec).set({approved:!0}).where((0,e.Uo)((0,e.eq)(g.spec.workspaceId,b.id),(0,e.eq)(g.spec.status,"active")));let m=await (0,l.s$)(a,b.id),n=await f.db.select().from(g.issue).where((0,e.eq)(g.issue.workspaceId,b.id));for(let a of(await f.db.delete(g.backlogItem).where((0,e.eq)(g.backlogItem.workspaceId,b.id)),n))await f.db.insert(g.backlogItem).values({id:(0,d.randomUUID)(),workspaceId:b.id,title:a.title,moscow:a.moscow??"Should",points:a.points});let o=`# Product backlog — ${b.name}
2
+
3
+ _Groomed from the approved plan._
4
+
5
+ ${n.map(a=>`- [ ] (${a.prio}) ${a.key} — ${a.title}`).join("\n")}
6
+ `;try{await (0,k.g)(a,"PO/backlog.md",o)}catch(a){console.error("[approvePlanFor] backlog write failed:",a)}let[p]=await f.db.select().from(g.agent).where((0,e.Uo)((0,e.eq)(g.agent.workspaceId,b.id),(0,e.eq)(g.agent.handle,"ada"))),q=p??(await f.db.select().from(g.agent).where((0,e.eq)(g.agent.workspaceId,b.id)))[0];return q&&await f.db.insert(g.message).values({id:(0,d.randomUUID)(),workspaceId:b.id,channel:"room",fromKind:"agent",fromHandle:q.handle,text:`Plan approved — starting execution. ${m} task${1===m?"":"s"} queued; the team will work the board top to bottom. Turn on Run 24/7 to begin.`,createdAt:new Date}),await (0,h.I)(b.id,{kind:"done",text:"Plan approved — agents may start coding",detail:`${m} task${1===m?"":"s"} created from the plan.`}),await (0,i.j)(b.id,{text:`Plan approved — ${n.length} issues, ${m} tasks queued for execution`,by:"operator",source:"plan-approve"}),await (0,j.W_)(b.id,"plan",b.id),await (0,j.vG)(b.id,["spec","issue"]),Promise.resolve().then(c.bind(c,56053)).then(c=>c.groomBacklogFor(a,b)).catch(a=>console.error("[approvePlanFor] auto-groom failed:",a)),{made:m,issues:n.length}}async function n(a,b){await f.db.update(g.plan).set({auto247:b}).where((0,e.eq)(g.plan.workspaceId,a))}async function o(a,b){await f.db.update(g.plan).set({approved:!1,auto247:!1,stage:1}).where((0,e.eq)(g.plan.workspaceId,a)),await (0,j.W_)(a,"plan",a),await f.db.insert(g.notification).values({id:(0,d.randomUUID)(),workspaceId:a,kind:"info",text:"Plan sent back to Ada for revision",detail:b?.trim()?`Operator requested changes: ${b.trim().slice(0,280)}`:"The operator requested changes before any code is written."})}async function p(a){let[b,c,d,[h]]=await Promise.all([f.db.select({status:g.goal.status}).from(g.goal).where((0,e.eq)(g.goal.workspaceId,a.id)),f.db.select({col:g.issue.col}).from(g.issue).where((0,e.eq)(g.issue.workspaceId,a.id)),f.db.select({id:g.task.id}).from(g.task).where((0,e.Uo)((0,e.eq)(g.task.workspaceId,a.id),(0,e.eq)(g.task.col,"doing"))),f.db.select().from(g.plan).where((0,e.eq)(g.plan.workspaceId,a.id))]),i=b.filter(a=>"active"===a.status).length,j=c.filter(a=>"done"!==a.col).length,k=h?h.approved?"approved":"draft":"none";return`📊 ${a.name} — ${i} active goal(s) \xb7 ${j} open issue(s) \xb7 ${d.length} task(s) in flight \xb7 24/7 ${h?.auto247?"ON":"off"} \xb7 plan ${k}.`}async function q(a){let[b,c,d,h,[i]]=await Promise.all([f.db.select({title:g.goal.title,status:g.goal.status}).from(g.goal).where((0,e.eq)(g.goal.workspaceId,a.id)),f.db.select({status:g.spec.status}).from(g.spec).where((0,e.eq)(g.spec.workspaceId,a.id)),f.db.select({key:g.issue.key,title:g.issue.title,col:g.issue.col,prio:g.issue.prio}).from(g.issue).where((0,e.eq)(g.issue.workspaceId,a.id)),f.db.select({col:g.task.col}).from(g.task).where((0,e.eq)(g.task.workspaceId,a.id)),f.db.select().from(g.plan).where((0,e.eq)(g.plan.workspaceId,a.id))]),j=b.filter(a=>"active"===a.status),k=a=>d.filter(b=>b.col===a).length,l=h.filter(a=>"doing"===a.col).length,m=i?i.approved?"✅ approved":`📝 draft (stage ${i.stage})`:"none",n={high:3,med:2,low:1},o=d.filter(a=>"done"!==a.col).sort((a,b)=>n[b.prio]-n[a.prio]||a.key.localeCompare(b.key)).slice(0,5),p=[`📊 ${a.name} — review`,`Plan: ${m} \xb7 24/7 ${i?.auto247?"ON":"off"}`,`Goals: ${j.length} active / ${b.length} total`,`Specs: ${c.filter(a=>"active"===a.status).length} active`,`Issues: todo ${k("todo")} \xb7 doing ${k("doing")} \xb7 review ${k("review")} \xb7 blocked ${k("blocked")} \xb7 done ${k("done")} (of ${d.length})`,`Tasks in flight: ${l}`];return j[0]&&p.push(`Active goal: “${j[0].title}”`),o.length&&p.push(`Next up:
7
+ ${o.map(a=>` • (${a.prio}) ${a.key} — ${a.title}`).join("\n")}`),p.join("\n").slice(0,3500)}async function r(a){let b=await f.db.select({key:g.task.key,title:g.task.title,col:g.task.col,prio:g.task.prio}).from(g.task).where((0,e.eq)(g.task.workspaceId,a.id)),c=b.filter(a=>"doing"===a.col),d=b.filter(a=>"todo"===a.col||"triage"===a.col),h=b.filter(a=>"review"===a.col),i=a=>` • ${a.key} — ${a.title}`,j=[`🗂️ ${a.name} — tasks`];return j.push(`Doing (${c.length}):${c.length?"\n"+c.slice(0,10).map(i).join("\n"):" —"}`),j.push(`In review (${h.length}):${h.length?"\n"+h.slice(0,8).map(i).join("\n"):" —"}`),j.push(`Queued (${d.length}):${d.length?"\n"+d.slice(0,10).map(i).join("\n"):" —"}`),j.join("\n").slice(0,3500)}},56053:(a,b,c)=>{c.r(b),c.d(b,{advanceIssue:()=>C,approveIssue:()=>z,approvePlan:()=>t,approveSpec:()=>x,generatePlan:()=>D,groomBacklog:()=>v,groomBacklogFor:()=>u,planFromConversation:()=>F,rejectIssue:()=>A,rejectSpec:()=>y,requestPlanChanges:()=>w,setAuto247:()=>B,startNewWork:()=>E});var d=c(52813),e=c(77598),f=c(63933),g=c(5443),h=c(83550),i=c(80280),j=c(25533),k=c(95896),l=c(3188),m=c(90860),n=c(99546),o=c(54033),p=c(78698),q=c(55479),r=c(96930),s=c(12867);async function t(){let{org:a,workspace:b}=await (0,k.nP)();await (0,q.wz)(a.id,b),(0,h.revalidatePath)("/planner"),(0,h.revalidatePath)("/pm"),(0,h.revalidatePath)("/tasks"),(0,h.revalidatePath)("/inbox"),(0,h.revalidatePath)("/","layout")}async function u(a,b){let c,d=await i.db.select().from(j.agent).where((0,f.eq)(j.agent.workspaceId,b.id)),h=d.find(a=>"donald"===a.handle)??d.find(a=>/product owner|\bpo\b|product manager/i.test(a.role));if(!h)return{ok:!1,error:"No Product Owner agent in this workspace."};let k=(await i.db.select().from(j.issue).where((0,f.Uo)((0,f.eq)(j.issue.workspaceId,b.id),(0,f.eq)(j.issue.status,"active")))).filter(a=>"done"!==a.col);if(!k.length)return{ok:!1,error:"No active issues to groom."};let m=(0,l.hW)(h.adapter,h.model),p="claude"===m?h.model.includes("opus")?"opus":h.model.includes("haiku")?"haiku":"sonnet":void 0,q=Object.fromEntries((await i.db.select({id:j.spec.id,summary:j.spec.summary}).from(j.spec).where((0,f.eq)(j.spec.workspaceId,b.id))).map(a=>[a.id,a.summary])),r=k.map(a=>`- ${a.key}: ${a.title}${a.specId&&q[a.specId]?` — spec: ${String(q[a.specId]).slice(0,120)}`:""} (current priority: ${a.prio})`).join("\n"),t=await (0,s.yY)(a,`product objectives, existing features and code, prior decisions, duplicate or overlapping requirements for: ${k.map(a=>a.title).slice(0,12).join("; ")}`,{agentHandle:h.handle,k:8}),u=t.context?`
8
+ Project knowledge (objectives, existing work, prior decisions — use it to avoid duplicates and spot gaps; do not contradict):
9
+ ${t.context}`:"",v=await i.db.select({text:j.decision.text,by:j.decision.by}).from(j.decision).where((0,f.eq)(j.decision.workspaceId,b.id)).orderBy((0,g.i)(j.decision.createdAt)).limit(12),w=v.length?`
10
+ Recent decisions:
11
+ ${v.map(a=>`- ${a.text} (${a.by})`).join("\n").slice(0,1500)}`:"",x=[`You are ${h.name} (@${h.handle}), the Product Owner of ${b.name}. GROOM THE BACKLOG: for EACH issue below, estimate STORY POINTS and set its MoSCoW priority, AND flag likely duplicates + missing work.`,"Story points = relative EFFORT / complexity / uncertainty on the Fibonacci scale (1, 2, 3, 5, 8, 13) — NOT the same as priority. A small tweak is 1-2; a whole subsystem is 8-13.","MoSCoW = Must | Should | Could | Won't. Be honest: only the truly essential are Must; nice-to-haves are Could; use Won't sparingly (defer).","Weigh the title, the spec, dependencies, risk AND the project knowledge below. Treat the current priority as a hint, but size by REAL effort.",'Use the knowledge to: avoid DUPLICATE/overlapping issues (set "duplicateOf" to the key of the issue it overlaps), validate whether the work already exists, and identify GAPS (work the objectives need but no issue covers).',u,w,`
12
+ Issues:
13
+ ${r}`,`
14
+ Output ONLY a JSON object (no prose, no markdown fences): {"estimates":[{"key":"1","points":5,"moscow":"Must","duplicateOf":"3"}],"gaps":["a missing issue the objectives need"]} — one estimate per issue above, "points" one of 1,2,3,5,8,13, "duplicateOf" optional, "gaps" optional.`].filter(Boolean).join("\n");await i.db.update(j.agent).set({status:"working"}).where((0,f.eq)(j.agent.id,h.id));try{c=await (0,l.p1)(x,{orgId:a,binary:m,model:p,timeoutMs:12e4},()=>{})}finally{try{await i.db.update(j.agent).set({status:"idle"}).where((0,f.eq)(j.agent.id,h.id))}catch{}}(c.usd>0||c.inputTokens+c.outputTokens>0)&&await i.db.insert(j.costEntry).values({id:(0,e.randomUUID)(),workspaceId:b.id,agentId:h.id,provider:c.binary,model:c.model??h.model,usd:c.usd,tokens:c.inputTokens+c.outputTokens,at:new Date});let y=[],z=[],A=c.text.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(A)try{let a=JSON.parse(A[0]);Array.isArray(a)?y=a:(y=Array.isArray(a.estimates)?a.estimates:[],z=Array.isArray(a.gaps)?a.gaps.map(String).slice(0,8):[])}catch{y=[]}if(!Array.isArray(y)||!y.length)return{ok:!1,error:"The PO returned no parseable estimates — try again."};let B=new Set([1,2,3,5,8,13]),C=new Set(["Must","Should","Could","Won't"]),D=Object.fromEntries(k.map(a=>[String(a.key),a.id])),E=0;for(let a of y){let b=D[String(a.key)];if(!b)continue;let c="number"==typeof a.points?Math.round(a.points):NaN,d=B.has(c)?c:void 0,e="string"==typeof a.moscow&&C.has(a.moscow)?a.moscow:void 0;(void 0!==d||e)&&(await i.db.update(j.issue).set({...void 0!==d?{points:d}:{},...e?{moscow:e}:{}}).where((0,f.eq)(j.issue.id,b)),E++)}if(E){for(let a of(await i.db.select().from(j.issue).where((0,f.Uo)((0,f.eq)(j.issue.workspaceId,b.id),(0,f.eq)(j.issue.status,"active")))))await i.db.update(j.backlogItem).set({points:a.points,moscow:a.moscow??"Should"}).where((0,f.Uo)((0,f.eq)(j.backlogItem.workspaceId,b.id),(0,f.eq)(j.backlogItem.title,a.title)));await i.db.insert(j.message).values({id:(0,e.randomUUID)(),workspaceId:b.id,channel:"room",fromKind:"agent",fromHandle:h.handle,text:`Backlog groomed — estimated story points + MoSCoW for ${E} issue${1===E?"":"s"}. Open the Product Manager to review.`,createdAt:new Date}),await (0,n.j)(b.id,{text:`Backlog groomed by ${h.name} — sized ${E} issue(s)`,by:h.handle,source:"po-grooming"})}let F=y.filter(a=>null!=a.duplicateOf&&D[String(a.duplicateOf)]&&D[String(a.key)]&&String(a.duplicateOf)!==String(a.key)).map(a=>`${a.key} ↔ ${a.duplicateOf}`);if(F.length||z.length){let a=[];F.length&&a.push(`Possible duplicate / overlapping issues: ${F.join(", ")}.`),z.length&&a.push(`Gaps the objectives need:
15
+ ${z.map(a=>`- ${a}`).join("\n")}`);let c=a.join("\n\n");await i.db.insert(j.message).values({id:(0,e.randomUUID)(),workspaceId:b.id,channel:"room",fromKind:"agent",fromHandle:h.handle,text:`Backlog review — ${c}`.slice(0,4e3),createdAt:new Date}),await (0,o.vE)(b.id,{kind:"review",fromAgentId:h.id,title:`PO backlog review — ${F.length} duplicate, ${z.length} gap`,detail:c.slice(0,500)}),await (0,n.j)(b.id,{text:`PO flagged ${F.length} duplicate + ${z.length} gap during grooming`,by:h.handle,source:"po-grooming"})}return{ok:!0,groomed:E}}async function v(){let{org:a,workspace:b}=await (0,k.nP)(),c=await u(a.id,b);return(0,h.revalidatePath)("/pm"),(0,h.revalidatePath)("/planner"),(0,h.revalidatePath)("/","layout"),c}async function w(){let{workspace:a}=await (0,k.nP)();await (0,q.TR)(a.id),(0,h.revalidatePath)("/planner"),(0,h.revalidatePath)("/inbox")}async function x(a){let{workspace:b}=await (0,k.nP)();await i.db.update(j.spec).set({approved:!0}).where((0,f.Uo)((0,f.eq)(j.spec.id,a),(0,f.eq)(j.spec.workspaceId,b.id))),await (0,o.W_)(b.id,"spec",a),(0,h.revalidatePath)("/planner"),(0,h.revalidatePath)("/inbox")}async function y(a){let{workspace:b}=await (0,k.nP)(),[c]=await i.db.select().from(j.spec).where((0,f.Uo)((0,f.eq)(j.spec.id,a),(0,f.eq)(j.spec.workspaceId,b.id)));await i.db.update(j.spec).set({approved:!1}).where((0,f.eq)(j.spec.id,a));let d="ada",e=null;if(c?.authorId){let[a]=await i.db.select().from(j.agent).where((0,f.eq)(j.agent.id,c.authorId));a&&(d=a.handle,e=a.id)}return await (0,m.I)(b.id,{kind:"review",text:`Spec ${c?.key??""} sent back for revision`,detail:"The operator rejected this spec."}),await (0,o.vE)(b.id,{kind:"review",refType:"spec",refId:a,goalId:c?.goalId??null,fromAgentId:e,title:`Revise spec ${c?.key??""}`,detail:`Rejected — @${d} should revise “${c?.title??""}”.`}),(0,h.revalidatePath)("/planner"),(0,h.revalidatePath)("/inbox"),{handle:d,key:c?.key??"spec"}}async function z(a){let{org:b,workspace:c}=await (0,k.nP)(),[d]=await i.db.update(j.issue).set({approved:!0}).where((0,f.Uo)((0,f.eq)(j.issue.id,a),(0,f.eq)(j.issue.workspaceId,c.id))).returning();if(d?.key){let a=(0,p.sL)(b.id,`issues/${d.key}.md`);a&&(0,p.dx)(b.id,`issues/${d.key}.md`,a.replace(/\*\*Status:\*\* .*/m,"**Status:** approved"))}await (0,o.W_)(c.id,"issue",a),(0,h.revalidatePath)("/pm"),(0,h.revalidatePath)("/planner"),(0,h.revalidatePath)("/inbox")}async function A(a){let{workspace:b}=await (0,k.nP)(),[c]=await i.db.select().from(j.issue).where((0,f.Uo)((0,f.eq)(j.issue.id,a),(0,f.eq)(j.issue.workspaceId,b.id)));await i.db.update(j.issue).set({approved:!1}).where((0,f.eq)(j.issue.id,a));let d="donald",e=null;if(c?.assigneeId){let[a]=await i.db.select().from(j.agent).where((0,f.eq)(j.agent.id,c.assigneeId));a&&(d=a.handle,e=a.id)}return await (0,m.I)(b.id,{kind:"review",text:`Issue ${c?.key??""} sent back for revision`,detail:"The operator rejected this issue."}),await (0,o.vE)(b.id,{kind:"review",refType:"issue",refId:a,goalId:c?.goalId??null,fromAgentId:e,title:`Revise issue ${c?.key??""}`,detail:`Rejected — @${d} should revise “${c?.title??""}”.`}),(0,h.revalidatePath)("/pm"),(0,h.revalidatePath)("/planner"),(0,h.revalidatePath)("/inbox"),{handle:d,key:c?.key??"issue"}}async function B(a){let{workspace:b}=await (0,k.nP)();await (0,q.mL)(b.id,a),(0,h.revalidatePath)("/planner")}async function C(a){let{workspace:b}=await (0,k.nP)(),c=["todo","doing","review","done"],[d]=await i.db.select().from(j.issue).where((0,f.Uo)((0,f.eq)(j.issue.id,a),(0,f.eq)(j.issue.workspaceId,b.id)));if(!d||"done"===d.col||"blocked"===d.col)return;let e=c[c.indexOf(d.col)+1]??"done";await i.db.update(j.issue).set({col:e}).where((0,f.eq)(j.issue.id,a)),"done"===e&&await (0,m.I)(b.id,{kind:"test",text:`${d.key} merged — ${d.title}`,detail:"QA passed and the issue was merged.",tg:!0}),(0,h.revalidatePath)("/planner")}async function D(a){let{org:b,workspace:c}=await (0,k.nP)();return(0,r.ui)(b.id,c,a)}async function E(a){let b=a.brief?.trim();return b?D({brief:b,goalTitle:a.title?.trim()||void 0}):{ok:!1,error:"Describe what you want to implement, fix or change."}}async function F(a){let{workspace:b}=await (0,k.nP)(),c=(await i.db.select().from(j.message).where((0,f.Uo)((0,f.eq)(j.message.workspaceId,b.id),(0,f.eq)(j.message.channel,a))).orderBy((0,g.Y)(j.message.createdAt))).slice(-30).map(a=>("operator"===a.fromKind?"Operator":"@"+(a.fromHandle??"agent"))+": "+a.text).join("\n");return c.trim()?D({brief:`Turn the operator's request from this chat into a delivery plan. Conversation:
16
+
17
+ ${c}`}):{ok:!1,error:"No conversation to plan from yet."}}(0,c(29635).D)([t,u,v,w,x,y,z,A,B,C,D,E,F]),(0,d.A)(t,"00e45bb09a28ac696d2f5a9503f7648f4e490d9007",null),(0,d.A)(u,"60aefffbd59ed1a5d32478f4d67ed869bb9d1d6ff0",null),(0,d.A)(v,"002791a737a2b5f520663a95d4e899ae4d0ba07f4c",null),(0,d.A)(w,"00c91dc39ccc68d15fb0f0f1b170a819b17be7523b",null),(0,d.A)(x,"4092700ba435c925678f2d627e88e5e971326a5e5e",null),(0,d.A)(y,"4084456b8f373168599967a95f1f6074ca5ed265cc",null),(0,d.A)(z,"4054b0647abaaa37034f58a7515bb92956b1c1075c",null),(0,d.A)(A,"409a00fb6112f1d61b785f1dcab141214f82cad748",null),(0,d.A)(B,"40c0818db6a6d0dc733e343a692e8b27655fcea0ba",null),(0,d.A)(C,"40271235e4d51e23e6e5598171e5405700203062a9",null),(0,d.A)(D,"40d4495591c4f0c211bbbbc777aa080521893681ba",null),(0,d.A)(E,"40fd48d764a7ee7b502997ebd8a49b56c480a5a216",null),(0,d.A)(F,"405c4cacc851c1aa0b8634f94d3407132d3a5a6c01",null)},96930:(a,b,c)=>{c.d(b,{ui:()=>u,G8:()=>t,pk:()=>v});var d=c(77598),e=c(63933),f=c(5443),g=c(83550),h=c(80280),i=c(25533),j=c(3188),k=c(96485),l=c(78848),m=c(78698);let n="specs/SUPER-SPEC.md";async function o(a){let b,{orgId:c,wsId:e,ada:f,binary:g,model:k}=a,o=`You are ${f.name}, analyzing an EXISTING project that is ALREADY present in this workspace (the current directory). Do NOT write any product code, do NOT scaffold anything — your ONLY job is to UNDERSTAND the project and write a thorough "super spec".
18
+
19
+ Read in THIS order, then go deeper:
20
+ 1. Docs first: README*, CHANGELOG*, docs/**, any install/setup/usage guides, CONTRIBUTING.
21
+ 2. Manifests + config: package.json, pyproject.toml, go.mod, Cargo.toml, requirements.txt, tsconfig, .env.example, *.config.*, docker/compose files, CI files.
22
+ 3. Then SCAN THE SOURCE FILE-BY-FILE (skip node_modules, dist, build, .next, .git, vendor): read the actual code to understand it — do not guess.
23
+
24
+ Then WRITE the file specs/SUPER-SPEC.md (create/overwrite it) with these sections, filled with REAL, concrete detail grounded in what you read:
25
+ ## Overview & purpose \xb7 ## Architecture & layers \xb7 ## Tech stack & dependencies \xb7 ## Directory / module map \xb7 ## Frontend (components, routes, state) \xb7 ## Backend (services, APIs, jobs) \xb7 ## Data model & database \xb7 ## Auth & security \xb7 ## Integrations / external services \xb7 ## Business rules & key flows \xb7 ## What is mock/stubbed vs real \xb7 ## Gaps to make it production-real.
26
+
27
+ If this is a visual mock/prototype (only \`mock/\` files — markup/styles/scripts, no real backend), INFER the intended tech stack from its HTML/CSS/JS and state it EXPLICITLY in the "Tech stack & dependencies" section (e.g. plain HTML/CSS/JS static, React, Next.js, Vue, Tailwind) so the plan adopts it.
28
+ CRITICAL framing for the team that will plan next: explicitly call out which UI/UX, behavior and visual identity MUST be PRESERVED, and where real backend, data and integrations must be ADDED. Constella will EXTEND this exact system — never build a second separate prototype, never replace what exists.
29
+ If the repo is large, prioritize breadth: read every manifest + entry point and sample representative files per module; never read generated/vendored dirs. Keep writing into specs/SUPER-SPEC.md as you learn (it is a living document).
30
+ When done, reply with a 2-3 sentence summary of the system.`,p=(0,d.randomUUID)();await (0,l.I)(e,{runId:p,channel:"planner",agentId:f.id,kind:"thinking",target:`${f.name} is reading the existing project…`});try{b=await (0,j.p1)(o,{orgId:c,binary:g,model:k,timeoutMs:6e5},a=>{(0,l.I)(e,{runId:p,channel:"planner",agentId:f.id,kind:a.kind,target:a.target,detail:a.detail})})}catch(a){return{ok:!1,bytes:0,error:String(a instanceof Error?a.message:a)}}(b.usd>0||b.inputTokens+b.outputTokens>0)&&await h.db.insert(i.costEntry).values({id:(0,d.randomUUID)(),workspaceId:e,agentId:f.id,provider:b.binary,model:b.model??k??"",usd:b.usd,tokens:b.inputTokens+b.outputTokens,at:new Date});let q=(0,m.sL)(c,n);(!q||q.trim().length<80)&&b.text.trim()&&((0,m.dx)(c,n,`# Super Spec — existing system analysis
31
+
32
+ ${b.text.trim()}
33
+ `),q=(0,m.sL)(c,n));let r=q?.length??0;return{ok:r>0,bytes:r}}var p=c(90860),q=c(54033),r=c(6873),s=c(78874);async function t(a,b,c){let d=(await h.db.select().from(i.message).where((0,e.Uo)((0,e.eq)(i.message.workspaceId,b.id),(0,e.eq)(i.message.channel,c))).orderBy((0,f.i)(i.message.createdAt)).limit(30)).reverse().map(a=>("operator"===a.fromKind?"Operator":"@"+(a.fromHandle??"agent"))+": "+a.text).join("\n");return d.trim()?u(a,b,{brief:`Turn the operator's request from this chat into a delivery plan. Conversation:
34
+
35
+ ${d}`}):{ok:!1,error:"No conversation to plan from yet."}}async function u(a,b,c){let j=await h.db.select().from(i.agent).where((0,e.eq)(i.agent.workspaceId,b.id)),k=j.find(a=>"ada"===a.handle)??j.find(a=>/ceo|chief exec/i.test(a.role))??j[0];if(!k)return{ok:!1,error:"no CEO agent"};if("working"===k.status){let[a]=await h.db.select({seq:i.event.seq,kind:i.event.kind}).from(i.event).where((0,e.Uo)((0,e.eq)(i.event.workspaceId,b.id),(0,e.eq)(i.event.channel,"planner"))).orderBy((0,f.i)(i.event.seq)).limit(1);if(a&&"done"!==a.kind&&"error"!==a.kind&&Date.now()-a.seq<36e4)return{ok:!0,started:!1};console.warn("[planner] Ada was stuck 'working' with no live run — recovering (a prior plan job died before it reset her).")}let m=(0,d.randomUUID)();await h.db.update(i.agent).set({status:"working"}).where((0,e.eq)(i.agent.id,k.id)),await (0,l.I)(b.id,{runId:m,channel:"planner",agentId:k.id,kind:"thinking",target:`${k.name} is analyzing the brief…`});try{(0,g.revalidatePath)("/planner")}catch{}return w({orgId:a,workspace:b,ada:k,agents:j,runId:m,opts:c}).catch(a=>console.error("[planner] background plan job crashed:",a)),{ok:!0,started:!0}}async function v(a,b,c){let d=c.brief?.trim();return d?u(a,b,{brief:d,goalTitle:c.title?.trim()||void 0}):{ok:!1,error:"Describe what you want to implement, fix or change."}}async function w(a){let{orgId:b,workspace:c,ada:f,agents:n,runId:t,opts:u}=a;try{let a=a=>a?n.find(b=>b.role.toLowerCase()===a.toLowerCase())?.id??null:null,v=(0,j.hW)(f.adapter,f.model),w="claude"===v?f.model.includes("opus")?"opus":f.model.includes("haiku")?"haiku":"sonnet":void 0;(0,j.UC)(c.settings?.agents?.webResearch??null);let x=Array.from(new Set(n.map(a=>a.role))),y=!!u?.brief?.trim(),z=u?.brief?.trim()||(0,m.sL)(b,".claude/BRIEF.md")||"",A=(0,m.CS)(b).filter(a=>a.startsWith("mock/")&&"mock/README.md"!==a),B=c.stack??{},C=Object.entries(B).map(([a,b])=>`${a}: ${b}`).filter(a=>!a.endsWith(": None")).join(", "),D=!!B.frontend&&"None"!==B.frontend,E=(0,r.Cg)(),F=[...new Set([...(0,r.AQ)(B),...(0,r.IT)(B,"Frontend"),...(0,r.IT)(B,"Backend"),...(0,r.IT)(B,"CyberSec"),...(0,r.IT)(B,"CTO")])].filter(a=>E.has(a)).map(a=>`- ${a}: ${E.get(a).description}`).join("\n"),G=c.settings??{},H=G.source?.type??"new",I="new"!==H||A.length>0||!!(0,k.pp)(b);if(!y&&I&&!G.source?.analyzed)try{await o({orgId:b,wsId:c.id,ada:{id:f.id,name:f.name},binary:v,model:w}),await h.db.update(i.workspace).set({settings:{...G,source:{...G.source??{},type:H,analyzed:!0}}}).where((0,e.eq)(i.workspace.id,c.id))}catch(a){console.error("[planner] project analysis failed:",a)}let J=y?null:(0,m.sL)(b,"specs/SUPER-SPEC.md"),K=[`You are ${f.name} (@${f.handle}), the CEO of ${c.name}.`,c.mission?`Mission: ${c.mission}`:"",c.objective?`Objective: ${c.objective}`:"",C?`Chosen stack: ${C}. Honor it.`:"","If the stack above is missing or partial, INFER the stack from the project brief and the attached mock/prototype (and any imported project) — e.g. a plain HTML/CSS/JS static site, React, Next.js, Node, Laravel — and use it CONSISTENTLY. When the brief or the mock explicitly names technologies, they take precedence over the chosen stack. Record the resolved stack in ARCHITECTURE.md and reflect it in every spec and issue.",F?`
36
+ STACK PLAYBOOK — these native skills are already seeded in this workspace as .claude/skills/<name>.md. READ the ones relevant to each part of the plan and GROUND every spec, issue and architecture decision in them — plan specifically for the chosen technologies, never generically:
37
+ ${F}`:"",D?`
38
+ This project has a FRONTEND (${B.frontend}${B.styling&&"None"!==B.styling?" + "+B.styling:""}). Plan the UI as a real product, not a generic AI look: ${y?"ensure the existing design system covers":"WRITE specs/DESIGN-SYSTEM.md now (in the workspace) covering"} the design system, colour palette, typography, spacing scale, components, responsiveness, accessibility (WCAG), UI/UX patterns, motion & microinteractions, screen behaviour & flows, visual docs, backend integration, tests and performance — grounded in the design + frontend skills in the playbook. Include a dedicated design-system issue assigned to the Frontend role.`:"",I?"An EXISTING project is already in this workspace (an imported repo, a copied local directory, or an attached mock — see specs/SUPER-SPEC.md). BUILD ON IT: every issue EXTENDS the existing code; PRESERVE the working UI/UX, behavior and visual identity; ADD the missing real backend, data and integrations. Never scaffold a fresh app, never replace what's there, and never create a second separate prototype. When the work is done there must be ONE real, functional version of the project.":"A deterministic RUNNABLE starter for this stack has ALREADY been generated in the workspace (a configured dev server with a themed landing page that boots out of the box). Plan so engineers BUILD THE PRODUCT ON THIS EXISTING STARTER — extend it; never plan to scaffold a new app from scratch or replace the starter. Every issue that touches code must keep the dev server bootable.",J?`
39
+ The existing project has been analyzed — read specs/SUPER-SPEC.md IN FULL now. Summary:
40
+ ${J.slice(0,6e3)}`:"",`Your team roles: ${x.join(", ")}.`,z?`
41
+ Project brief:
42
+ ${z.slice(0,4e3)}`:"",A.length?`
43
+ A visual prototype/mock is attached in the \`mock/\` directory (${A.length} files: ${A.slice(0,14).join(", ")}). READ those files now and design the product to MATCH the mock precisely — same layout, components, copy and flows. Specs/issues should reference the mock.`:"","",y?"Produce a focused delivery plan for THIS NEW unit of work, grounded in the brief above. Do NOT rewrite ARCHITECTURE.md or RITUALS.md — they belong to the whole company and already exist; only ADD what this work needs.":"Produce the delivery plan grounded in the brief + stack. In the current workspace directory, WRITE two files: ARCHITECTURE.md (system design) and RITUALS.md (team cadences & process).","Then output ONLY a single JSON object (no markdown fences, no prose):",'{"specs":[{"key":"SPEC-01","title":"...","summary":"...","authorRole":"<one of the team roles>"}],"issues":[{"specKey":"SPEC-01","key":"1","title":"...","prio":"high|med|low","assigneeRole":"<one of the team roles>","skills":["the .claude/skills the assignee must consult, picked from the STACK PLAYBOOK, e.g. vue, design-systems"],"todos":["concrete sub-step","another sub-step"]}]}','Each issue MUST include 2-5 concrete TODO sub-steps in "todos" (the checklist that tracks progress) AND "skills": the seeded skill names from the STACK PLAYBOOK its assignee will consult before building. Set "prio" honestly (the Product Owner sizes story points + MoSCoW from it later).',"The FIRST spec is the MAIN spec — it defines the overall objective (the Goal). Keep to 3-6 specs and 4-12 issues, grounded in the mission. Use the real team roles above for authorRole/assigneeRole."].filter(Boolean).join("\n");await (0,l.I)(c.id,{runId:t,channel:"planner",agentId:f.id,kind:"thinking",target:I?`${f.name} is studying the project, brief & mock…`:`${f.name} is reading the brief, mission & stack…`});let L=await (0,j.p1)(K,{orgId:b,binary:v,model:w,timeoutMs:3e5},a=>{(0,l.I)(c.id,{runId:t,channel:"planner",agentId:f.id,kind:a.kind,target:a.target,detail:a.detail})});(L.usd>0||L.inputTokens+L.outputTokens>0)&&await h.db.insert(i.costEntry).values({id:(0,d.randomUUID)(),workspaceId:c.id,agentId:f.id,provider:L.binary,model:L.model??f.model,usd:L.usd,tokens:L.inputTokens+L.outputTokens,at:new Date});let M=null,N=L.text.match(/\{[\s\S]*\}/);if(N)try{M=JSON.parse(N[0])}catch{M=null}if(!M||!M.specs?.length){await (0,l.I)(c.id,{runId:t,channel:"planner",agentId:f.id,kind:"error",target:(L.error??"Ada returned no structured plan — try again.").slice(0,200)}),await (0,p.I)(c.id,{kind:"info",text:"Planning run produced no parseable plan",detail:(L.error??"Ada returned no structured specs — try again.").slice(0,300),agentId:f.id});return}let O=M.specs.slice(0,8);await (0,l.I)(c.id,{runId:t,channel:"planner",agentId:f.id,kind:"thinking",target:`Drafting ${O.length} spec(s) & ${(M.issues??[]).length} issue(s), writing files…`});let P={},Q=O[0],R=(0,d.randomUUID)();await h.db.insert(i.goal).values({id:R,workspaceId:c.id,title:(u?.goalTitle||(y?Q?.title:c.objective)||Q?.title||c.name).slice(0,200),description:(Q?.summary||c.mission||"").slice(0,600),ownerId:f.id,status:"active",progress:0});let S=(await h.db.select({id:i.spec.id}).from(i.spec).where((0,e.eq)(i.spec.workspaceId,c.id))).length,T={};for(let b of(O.forEach((a,b)=>{T[a.key]=`SPEC-${String(S+b+1).padStart(2,"0")}`}),O)){let e=(0,d.randomUUID)();P[b.key]=e,await h.db.insert(i.spec).values({id:e,workspaceId:c.id,key:T[b.key],title:String(b.title).slice(0,200),summary:String(b.summary??"").slice(0,600),authorId:a(b.authorRole)??f.id,goalId:R})}Q&&await h.db.update(i.goal).set({specId:P[Q.key]}).where((0,e.eq)(i.goal.id,R));let U=(await h.db.select({id:i.issue.id}).from(i.issue).where((0,e.eq)(i.issue.workspaceId,c.id))).length,V=(M.issues??[]).slice(0,20).map((a,b)=>({...a,seq:String(U+b+1)})),W={high:8,med:5,low:3},X={high:"Must",med:"Should",low:"Could"},Y=0;for(let b of V){let e="high"===b.prio||"low"===b.prio?b.prio:"med";await h.db.insert(i.issue).values({id:(0,d.randomUUID)(),workspaceId:c.id,specId:P[b.specKey]??null,goalId:R,key:b.seq,title:String(b.title).slice(0,200),prio:e,points:W[e],moscow:X[e],col:"todo",assigneeId:a(b.assigneeRole)}),Y++}for(let a of O){let c=T[a.key],d=V.filter(b=>b.specKey===a.key),e=`# ${c} — ${a.title}
44
+
45
+ **Author:** ${a.authorRole??"CEO"}
46
+ **Status:** draft (pending approval)
47
+
48
+ ## Summary
49
+ ${a.summary??""}
50
+
51
+ ## Issues
52
+ ${d.map(a=>`- ${a.seq} (${a.prio??"med"} \xb7 ${a.assigneeRole??"?"}): ${a.title}`).join("\n")||"_none_"}
53
+ `;(0,m.dx)(b,`specs/${c}.md`,e)}for(let a of V){let c=(a.todos??[]).slice(0,6).map(a=>String(a).slice(0,160)).filter(Boolean),d=c.length?`
54
+ ## Checklist
55
+ ${c.map(a=>`- [ ] ${a}`).join("\n")}
56
+ `:"",e=(a.skills??[]).map(a=>String(a).trim().toLowerCase()).filter(Boolean).slice(0,8),f=e.length?`**Skills to consult:** ${e.join(", ")}
57
+ `:"";(0,m.dx)(b,`issues/${a.seq}.md`,`# ${a.seq} — ${a.title}
58
+
59
+ **Spec:** ${T[a.specKey]??a.specKey}
60
+ **Priority:** ${a.prio??"med"}
61
+ **Owner:** ${a.assigneeRole??"?"}
62
+ ${f}**Status:** todo (pending approval)
63
+ ${d}`)}y||(0,m.dx)(b,"ritual.md",`# Team ritual — ${c.name}
64
+
65
+ How this organization operates. Agents follow this order; code starts only after the operator approves.
66
+
67
+ 1. CEO (@ada) turns the brief + stack into a plan and specs.
68
+ 2. CTO (@linus) writes the architecture (ARCHITECTURE.md → DOCS/Reports).
69
+ 3. Product Owner (@donald) grooms the backlog into the sprint board.
70
+ 4. Operator reviews & approves the plan, specs and issues (reject → DM the owner to revise).
71
+ 5. CEO confirms all approved and asks to start execution.
72
+ 6. Engineers pull approved issues; QA gates sign-off; CyberSec reviews every change.
73
+ 7. Routines + reports keep the operator informed.
74
+ `),y||await h.db.update(i.plan).set({stage:4,approved:!1}).where((0,e.eq)(i.plan.workspaceId,c.id)),await (0,l.I)(c.id,{runId:t,channel:"planner",agentId:f.id,kind:"done",target:`${Object.keys(P).length} specs \xb7 ${Y} issues drafted`}),await h.db.insert(i.message).values({id:(0,d.randomUUID)(),workspaceId:c.id,channel:"room",fromKind:"agent",fromHandle:f.handle,text:`Plan ready for review: ${Object.keys(P).length} specs and ${Y} issues drafted from the brief. Open the CEO Planner and approve to start execution.`,createdAt:new Date}),await (0,p.I)(c.id,{kind:"done",text:`${f.name} drafted ${y?"a new work plan":"the delivery plan"}`,detail:`${Object.keys(P).length} specs \xb7 ${Y} issues.`,agentId:f.id,tg:!1}),await (0,q.vE)(c.id,{kind:"approval",refType:"plan",refId:c.id,goalId:R,fromAgentId:f.id,channel:"room",title:`Approve plan — ${c.name}`,detail:`${Object.keys(P).length} spec(s) \xb7 ${Y} issue(s) drafted from the brief. Approve to start execution.`});try{let a=await (0,s._9)(c.id);a&&await (0,s.bT)(a.botToken,a.chatId,`📋 Plan ready — ${c.name}
75
+ ${Object.keys(P).length} spec(s) \xb7 ${Y} issue(s) drafted from the brief.
76
+
77
+ Approve to queue tasks, or Start execution to also run 24/7.`,[[{text:"✅ Approve",data:"approve_plan"},{text:"▶️ Start execution",data:"start_exec"}],[{text:"\uD83D\uDCDD Review",data:"review"},{text:"↩️ Reject",data:"reject_plan"}]])}catch(a){console.error("[planner] telegram plan-ready push failed:",a)}try{(0,g.revalidatePath)("/planner"),(0,g.revalidatePath)("/inbox"),(0,g.revalidatePath)("/pm"),(0,g.revalidatePath)("/goals")}catch{}}catch(a){console.error("[planner] plan job failed:",a);try{await (0,l.I)(c.id,{runId:t,channel:"planner",agentId:f.id,kind:"error",target:(a?.message??"Planning failed.").slice(0,200)})}catch{}try{await (0,p.I)(c.id,{kind:"info",text:"Planning run failed",detail:(a?.message??"").slice(0,300),agentId:f.id})}catch{}}finally{try{await h.db.update(i.agent).set({status:"idle"}).where((0,e.eq)(i.agent.id,f.id))}catch{}}}}};
@@ -0,0 +1,4 @@
1
+ "use strict";exports.id=9146,exports.ids=[9146],exports.modules={6404:(a,b,c)=>{c.d(b,{Y:()=>j,g:()=>i});var d=c(63933),e=c(76760),f=c(80280),g=c(25533),h=c(78698);async function i(a,b,c,d){let i=(0,h.HZ)(b);for(let b of d){if(!b.path)continue;let d=((0,e.isAbsolute)(b.path)?(0,e.relative)(i,b.path):b.path).replace(/\\/g,"/");if(!(!d||d.startsWith(".."))&&!(d.startsWith(".claude/")||d.startsWith("archives/")||d.startsWith(".git/")))try{await f.db.insert(g.goalFile).values({workspaceId:a,goalId:c,path:d,op:b.op}).onConflictDoUpdate({target:[g.goalFile.goalId,g.goalFile.path],set:{op:b.op,at:new Date}})}catch{}}}async function j(a,b){return(await f.db.select({path:g.goalFile.path}).from(g.goalFile).where((0,d.Uo)((0,d.eq)(g.goalFile.workspaceId,a),(0,d.eq)(g.goalFile.goalId,b)))).map(a=>a.path)}},26288:(a,b,c)=>{c.d(b,{lM:()=>j,s$:()=>k});var d=c(77598),e=c(63933),f=c(80280),g=c(25533),h=c(78698);function i(a){let b=[];for(let c of a.split("\n")){let a=c.match(/^\s*-\s*\[([ xX])\]\s+(.+)$/);a&&b.push({text:a[2].trim().slice(0,200),done:"x"===a[1].toLowerCase()})}return b.slice(0,12)}async function j(a,b,c){let h=i(c);if(!h.length)return;let j=await f.db.select().from(g.taskStep).where((0,e.eq)(g.taskStep.taskId,b)),k=new Map(j.map(a=>[a.text.toLowerCase(),a])),l=j.length;for(let c of h){let h=k.get(c.text.toLowerCase());h?h.done!==c.done&&await f.db.update(g.taskStep).set({done:c.done}).where((0,e.eq)(g.taskStep.id,h.id)):await f.db.insert(g.taskStep).values({id:(0,d.randomUUID)(),workspaceId:a,taskId:b,text:c.text,done:c.done,ord:l++})}}async function k(a,b){let c=await f.db.select().from(g.issue).where((0,e.eq)(g.issue.workspaceId,b)),j=Object.fromEntries((await f.db.select().from(g.spec).where((0,e.eq)(g.spec.workspaceId,b))).map(a=>[a.id,a.summary])),k=new Set((await f.db.select({issueId:g.task.issueId}).from(g.task).where((0,e.eq)(g.task.workspaceId,b))).map(a=>a.issueId).filter(Boolean)),m=0;for(let e of c){if(k.has(e.id))continue;let c=(0,h.sL)(a,`issues/${e.key}.md`)??"",l=c.match(/^\*\*Skills to consult:\*\*\s*(.+)$/m)?.[1]?.trim(),n=l?`
2
+
3
+ Consult these skills BEFORE building (read the matching .claude/skills/<name>.md): ${l}.`:"",o=(((e.specId?j[e.specId]:"")||c).slice(0,2e3)+n).slice(0,2200),p=(0,d.randomUUID)();await f.db.insert(g.task).values({id:p,workspaceId:b,issueId:e.id,goalId:e.goalId,key:e.key,title:e.title,description:o,col:"todo",prio:e.prio,assigneeId:e.assigneeId,createdBy:"agent"});let q=0;for(let a of i(c))await f.db.insert(g.taskStep).values({id:(0,d.randomUUID)(),workspaceId:b,taskId:p,text:a.text,done:a.done,ord:q++});m++}return await l(b),m}async function l(a){let[b]=await f.db.select().from(g.agent).where((0,e.Uo)((0,e.eq)(g.agent.workspaceId,a),(0,e.eq)(g.agent.handle,"barbara"))),c=b??(await f.db.select().from(g.agent).where((0,e.Uo)((0,e.eq)(g.agent.workspaceId,a),(0,e.mj)(g.agent.role,"%Docs%"))))[0];!c||(await f.db.select({id:g.task.id}).from(g.task).where((0,e.Uo)((0,e.eq)(g.task.workspaceId,a),(0,e.eq)(g.task.key,"DOCS-1")))).length||await f.db.insert(g.task).values({id:(0,d.randomUUID)(),workspaceId:a,key:"DOCS-1",title:"Document the project — update DOCS/ to match what was built",description:"Read the real code, specs and structure in this workspace, then write/refresh accurate documentation under DOCS/ (architecture, API, usage, how to run). Replace the scaffold templates with real content grounded in the actual files. Do not invent features.",col:"todo",prio:"low",assigneeId:c.id,createdBy:"agent"})}},29635:(a,b)=>{function c(a){for(let b=0;b<a.length;b++){let c=a[b];if("function"!=typeof c)throw Object.defineProperty(Error(`A "use server" file can only export async functions, found ${typeof c}.
4
+ Read more: https://nextjs.org/docs/messages/invalid-use-server-value`),"__NEXT_ERROR_CODE",{value:"E352",enumerable:!1,configurable:!0})}}Object.defineProperty(b,"D",{enumerable:!0,get:function(){return c}})},51063:(a,b,c)=>{c.d(b,{dp:()=>m,j2:()=>n});var d=c(64985),e=c(93907),f=c(10504),g=c(33636),h=c(80280),i=c(25533);let j=(0,c(81290).TQ)(),k=process.env.BETTER_AUTH_URL??"http://localhost:3000";"start"===j||process.env.BETTER_AUTH_SECRET||console.error(`[auth] FATAL: BETTER_AUTH_SECRET is required in '${j}' mode (sessions would be forgeable). Set it in your environment.`);let l={};process.env.GITHUB_CLIENT_ID&&process.env.GITHUB_CLIENT_SECRET&&(l.github={clientId:process.env.GITHUB_CLIENT_ID,clientSecret:process.env.GITHUB_CLIENT_SECRET,scope:["repo","read:user"]}),process.env.GOOGLE_CLIENT_ID&&process.env.GOOGLE_CLIENT_SECRET&&(l.google={clientId:process.env.GOOGLE_CLIENT_ID,clientSecret:process.env.GOOGLE_CLIENT_SECRET});let m=Object.keys(l),n=(0,d.l)({baseURL:k,secret:process.env.BETTER_AUTH_SECRET,database:(0,e.y)(h.db,{provider:"sqlite",schema:{user:i.user,session:i.session,account:i.account,verification:i.verification,twoFactor:i.twoFactor}}),emailAndPassword:{enabled:!0,autoSignIn:!0,requireEmailVerification:!1},socialProviders:l,account:{accountLinking:{enabled:!0,trustedProviders:["github","google"]}},session:{expiresIn:2592e3,additionalFields:{activeOrgId:{type:"string",required:!1}}},plugins:[(0,f.AI)(),(0,g.d)()],advanced:{useSecureCookies:k.startsWith("https://")}})},52813:(a,b,c)=>{Object.defineProperty(b,"A",{enumerable:!0,get:function(){return d.registerServerReference}});let d=c(62060)},62060:(a,b,c)=>{a.exports=c(53488).vendored["react-rsc"].ReactServerDOMWebpackServer},81290:(a,b,c)=>{c.d(b,{TQ:()=>e});let d={start:{label:"Start",requiresLogin:!1,note:"Local auto-created account \xb7 always signed in."},auth:{label:"Auth",requiresLogin:!0,note:"Email + password required each session."},vps:{label:"VPS",requiresLogin:!0,note:"Access over your Tailscale tailnet; runs in Docker."},portable:{label:"Portable",requiresLogin:!0,note:"USB drive mounted as root across machines."}};function e(){let a=process.env.CONSTELLA_RUN_MODE;return a&&a in d?a:"start"}},95896:(a,b,c)=>{c.d(b,{$x:()=>l,Ht:()=>k,K4:()=>m,O5:()=>n,nP:()=>o});var d=c(79676),e=c(17971),f=c(63933),g=c(80280),h=c(25533),i=c(51063),j=c(81290);async function k(){return i.j2.api.getSession({headers:await (0,d.headers)()})}async function l(a,b){if(b){let[c]=await g.db.select({org:h.organization}).from(h.member).innerJoin(h.organization,(0,f.eq)(h.member.orgId,h.organization.id)).where((0,f.Uo)((0,f.eq)(h.member.userId,a),(0,f.eq)(h.organization.id,b)));if(c)return c.org}let c=await g.db.select({org:h.organization}).from(h.member).innerJoin(h.organization,(0,f.eq)(h.member.orgId,h.organization.id)).where((0,f.eq)(h.member.userId,a));return c[0]?.org??null}async function m(a){let[b]=await g.db.select().from(h.workspace).where((0,f.eq)(h.workspace.orgId,a));return b??null}async function n(a){return g.db.select({id:h.organization.id,name:h.organization.name}).from(h.member).innerJoin(h.organization,(0,f.eq)(h.member.orgId,h.organization.id)).where((0,f.eq)(h.member.userId,a))}async function o(){let a=await k();a||(0,e.redirect)("start"===(0,j.TQ)()?"/api/dev-login":"/login"),"1"===process.env.CONSTELLA_FORCE_ONBOARDING&&(0,e.redirect)("/onboarding");let b=await l(a.user.id,a.session.activeOrgId);b||(0,e.redirect)("/onboarding");let c=await m(b.id);return c||(0,e.redirect)("/onboarding"),{session:a,org:b,workspace:c}}},99146:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0});var d={INTERCEPTION_ROUTE_MARKERS:function(){return g},extractInterceptionRouteInformation:function(){return i},isInterceptionRouteAppPath:function(){return h}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(90937),g=["(..)(..)","(.)","(..)","(...)"];function h(a){return void 0!==a.split("/").find(a=>g.find(b=>a.startsWith(b)))}function i(a){let b,c,d;for(let e of a.split("/"))if(c=g.find(a=>e.startsWith(a))){[b,d]=a.split(c,2);break}if(!b||!c||!d)throw Object.defineProperty(Error(`Invalid interception route: ${a}. Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>`),"__NEXT_ERROR_CODE",{value:"E269",enumerable:!1,configurable:!0});switch(b=(0,f.normalizeAppPath)(b),c){case"(.)":d="/"===b?`/${d}`:b+"/"+d;break;case"(..)":if("/"===b)throw Object.defineProperty(Error(`Invalid interception route: ${a}. Cannot use (..) marker at the root level, use (.) instead.`),"__NEXT_ERROR_CODE",{value:"E207",enumerable:!1,configurable:!0});d=b.split("/").slice(0,-1).concat(d).join("/");break;case"(...)":d="/"+d;break;case"(..)(..)":let e=b.split("/");if(e.length<=2)throw Object.defineProperty(Error(`Invalid interception route: ${a}. Cannot use (..)(..) marker at the root level or one level up.`),"__NEXT_ERROR_CODE",{value:"E486",enumerable:!1,configurable:!0});d=e.slice(0,-2).concat(d).join("/");break;default:throw Object.defineProperty(Error("Invariant: unexpected marker"),"__NEXT_ERROR_CODE",{value:"E112",enumerable:!1,configurable:!0})}return{interceptingRoute:b,interceptedRoute:d}}},99546:(a,b,c)=>{c.d(b,{j:()=>i});var d=c(77598),e=c(63933),f=c(80280),g=c(25533),h=c(12867);async function i(a,b){if(b.text.trim()){try{await f.db.insert(g.decision).values({id:(0,d.randomUUID)(),workspaceId:a,text:b.text.slice(0,1e3),by:b.by??"",source:b.source??"",refKey:b.refKey??"",rationale:b.rationale??"",goalId:b.goalId??null,createdAt:new Date})}catch(a){console.error("[decision] log failed:",a)}(async()=>{try{let[c]=await f.db.select({orgId:g.workspace.orgId}).from(g.workspace).where((0,e.eq)(g.workspace.id,a));c?.orgId&&await (0,h.ru)(c.orgId,[{type:"decision",title:b.text.slice(0,120),summary:b.text.slice(0,1e3),body:b.rationale??"",goalId:b.goalId??null,agentHandle:b.by??"",sourceKind:"decision",sourceRef:b.refKey??""}])}catch{}})()}}}};
@@ -0,0 +1 @@
1
+ "use strict";exports.id=9676,exports.ids=[9676],exports.modules={7914:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0});var d={isRequestAPICallableInsideAfter:function(){return j},throwForSearchParamsAccessInUseCache:function(){return i},throwWithStaticGenerationBailoutErrorWithDynamicError:function(){return h}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(90276),g=c(3295);function h(a,b){throw Object.defineProperty(new f.StaticGenBailoutError(`Route ${a} with \`dynamic = "error"\` couldn't be rendered statically because it used ${b}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E543",enumerable:!1,configurable:!0})}function i(a,b){let c=Object.defineProperty(Error(`Route ${a.route} used \`searchParams\` inside "use cache". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await \`searchParams\` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E842",enumerable:!1,configurable:!0});throw Error.captureStackTrace(c,b),a.invalidDynamicUsageError??=c,c}function j(){let a=g.afterTaskAsyncStorage.getStore();return(null==a?void 0:a.rootTaskSpawnPhase)==="action"}},38848:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0});var d={MutableRequestCookiesAdapter:function(){return o},ReadonlyRequestCookiesError:function(){return j},RequestCookiesAdapter:function(){return k},appendMutableCookies:function(){return n},areCookiesMutableInCurrentPhase:function(){return q},createCookiesWithMutableAccessCheck:function(){return p},getModifiedCookieValues:function(){return m},responseCookiesToRequestCookies:function(){return s}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(91073),g=c(37170),h=c(29294),i=c(64659);class j extends Error{constructor(){super("Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options")}static callable(){throw new j}}class k{static seal(a){return new Proxy(a,{get(a,b,c){switch(b){case"clear":case"delete":case"set":return j.callable;default:return g.ReflectAdapter.get(a,b,c)}}})}}let l=Symbol.for("next.mutated.cookies");function m(a){let b=a[l];return b&&Array.isArray(b)&&0!==b.length?b:[]}function n(a,b){let c=m(b);if(0===c.length)return!1;let d=new f.ResponseCookies(a),e=d.getAll();for(let a of c)d.set(a);for(let a of e)d.set(a);return!0}class o{static wrap(a,b){let c=new f.ResponseCookies(new Headers);for(let b of a.getAll())c.set(b);let d=[],e=new Set,j=()=>{let a=h.workAsyncStorage.getStore();if(a&&(a.pathWasRevalidated=i.ActionDidRevalidateStaticAndDynamic),d=c.getAll().filter(a=>e.has(a.name)),b){let a=[];for(let b of d){let c=new f.ResponseCookies(new Headers);c.set(b),a.push(c.toString())}b(a)}},k=new Proxy(c,{get(a,b,c){switch(b){case l:return d;case"delete":return function(...b){e.add("string"==typeof b[0]?b[0]:b[0].name);try{return a.delete(...b),k}finally{j()}};case"set":return function(...b){e.add("string"==typeof b[0]?b[0]:b[0].name);try{return a.set(...b),k}finally{j()}};default:return g.ReflectAdapter.get(a,b,c)}}});return k}}function p(a){let b=new Proxy(a.mutableCookies,{get(c,d,e){switch(d){case"delete":return function(...d){return r(a,"cookies().delete"),c.delete(...d),b};case"set":return function(...d){return r(a,"cookies().set"),c.set(...d),b};default:return g.ReflectAdapter.get(c,d,e)}}});return b}function q(a){return"action"===a.phase}function r(a,b){if(!q(a))throw new j}function s(a){let b=new f.RequestCookies(new Headers);for(let c of a.getAll())b.set(c);return b}},40101:(a,b,c)=>{Object.defineProperty(b,"b",{enumerable:!0,get:function(){return m}});let d=c(4517),e=c(29294),f=c(63033),g=c(45392),h=c(90276),i=c(65805),j=c(92089),k=c(7914),l=c(61328);function m(){let a="headers",b=e.workAsyncStorage.getStore(),c=f.workUnitAsyncStorage.getStore();if(b){if(c&&"after"===c.phase&&!(0,k.isRequestAPICallableInsideAfter)())throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside \`after()\`. This is not supported. If you need this data inside an \`after()\` callback, use \`headers()\` outside of the callback. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E839",enumerable:!1,configurable:!0});if(b.forceStatic)return o(d.HeadersAdapter.seal(new Headers({})));if(c)switch(c.type){case"cache":{let a=Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`headers()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E833",enumerable:!1,configurable:!0});throw Error.captureStackTrace(a,m),b.invalidDynamicUsageError??=a,a}case"unstable-cache":throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside a function cached with \`unstable_cache()\`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`headers()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E838",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`headers()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1134",enumerable:!1,configurable:!0})}if(b.dynamicShouldError)throw Object.defineProperty(new h.StaticGenBailoutError(`Route ${b.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`headers()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E828",enumerable:!1,configurable:!0});if(c)switch(c.type){case"prerender":var j=b,p=c;let e=n.get(p);if(e)return e;let q=(0,i.makeHangingPromise)(p.renderSignal,j.route,"`headers()`");return n.set(p,q),q;case"prerender-client":case"validation-client":let r="`headers`";throw Object.defineProperty(new l.InvariantError(`${r} must not be used within a client component. Next.js should be preventing ${r} from being included in client components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1017",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,g.postponeWithTracking)(b.route,a,c.dynamicTracking);case"prerender-legacy":return(0,g.throwToInterruptStaticGeneration)(a,b,c);case"prerender-runtime":return(0,i.delayUntilRuntimeStage)(c,o(c.headers));case"private-cache":return o(c.headers);case"request":if((0,g.trackDynamicDataInDynamicRender)(c),c.asyncApiPromises)return(0,f.isInEarlyRenderStage)(c)?c.asyncApiPromises.earlyHeaders:c.asyncApiPromises.headers;return o(c.headers)}}(0,f.throwForMissingRequestStore)(a)}c(56393);let n=new WeakMap;function o(a){let b=n.get(a);if(b)return b;let c=Promise.resolve(a);return n.set(a,c),c}(0,j.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`headers()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E836",enumerable:!1,configurable:!0})})},47108:(a,b,c)=>{Object.defineProperty(b,"U",{enumerable:!0,get:function(){return n}});let d=c(38848),e=c(91073),f=c(29294),g=c(63033),h=c(45392),i=c(90276),j=c(65805),k=c(92089),l=c(7914),m=c(61328);function n(){let a="cookies",b=f.workAsyncStorage.getStore(),c=g.workUnitAsyncStorage.getStore();if(b){if(c&&"after"===c.phase&&!(0,l.isRequestAPICallableInsideAfter)())throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside \`after()\`. This is not supported. If you need this data inside an \`after()\` callback, use \`cookies()\` outside of the callback. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E843",enumerable:!1,configurable:!0});if(b.forceStatic)return p(d.RequestCookiesAdapter.seal(new e.RequestCookies(new Headers({}))));if(b.dynamicShouldError)throw Object.defineProperty(new i.StaticGenBailoutError(`Route ${b.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`cookies()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E849",enumerable:!1,configurable:!0});if(c)switch(c.type){case"cache":let f=Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`cookies()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E831",enumerable:!1,configurable:!0});throw Error.captureStackTrace(f,n),b.invalidDynamicUsageError??=f,f;case"unstable-cache":throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside a function cached with \`unstable_cache()\`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`cookies()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E846",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(Error(`Route ${b.route} used \`cookies()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1123",enumerable:!1,configurable:!0});case"prerender":var k=b,q=c;let r=o.get(q);if(r)return r;let s=(0,j.makeHangingPromise)(q.renderSignal,k.route,"`cookies()`");return o.set(q,s),s;case"prerender-client":case"validation-client":let t="`cookies`";throw Object.defineProperty(new m.InvariantError(`${t} must not be used within a Client Component. Next.js should be preventing ${t} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1037",enumerable:!1,configurable:!0});case"prerender-ppr":return(0,h.postponeWithTracking)(b.route,a,c.dynamicTracking);case"prerender-legacy":return(0,h.throwToInterruptStaticGeneration)(a,b,c);case"prerender-runtime":return(0,j.delayUntilRuntimeStage)(c,p(c.cookies));case"private-cache":return p(c.cookies);case"request":let u;if((0,h.trackDynamicDataInDynamicRender)(c),u=(0,d.areCookiesMutableInCurrentPhase)(c)?c.userspaceMutableCookies:c.cookies,!c.asyncApiPromises)return p(u);{let a=(0,g.isInEarlyRenderStage)(c);if(u===c.mutableCookies)return a?c.asyncApiPromises.earlyMutableCookies:c.asyncApiPromises.mutableCookies;return a?c.asyncApiPromises.earlyCookies:c.asyncApiPromises.cookies}}}(0,g.throwForMissingRequestStore)(a)}c(56393);let o=new WeakMap;function p(a){let b=o.get(a);if(b)return b;let c=Promise.resolve(a);return o.set(a,c),c}(0,k.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`cookies()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E830",enumerable:!1,configurable:!0})})},61790:(a,b,c)=>{let d=c(63033),e=c(29294),f=c(45392),g=c(92089),h=c(90276),i=c(26870),j=c(61328),k=c(65805);c(37170);new WeakMap;(0,g.createDedupedByCallsiteServerErrorLoggerDev)(function(a,b){let c=a?`Route "${a}" `:"This route ";return Object.defineProperty(Error(`${c}used ${b}. \`draftMode()\` returns a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E835",enumerable:!1,configurable:!0})})},64659:(a,b)=>{Object.defineProperty(b,"__esModule",{value:!0});var c={ActionDidNotRevalidate:function(){return e},ActionDidRevalidateDynamicOnly:function(){return g},ActionDidRevalidateStaticAndDynamic:function(){return f}};for(var d in c)Object.defineProperty(b,d,{enumerable:!0,get:c[d]});let e=0,f=1,g=2},79676:(a,b,c)=>{c.d(b,{cookies:()=>d.U,headers:()=>e.b});var d=c(47108),e=c(40101);c(61790)},92089:(a,b,c)=>{Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"createDedupedByCallsiteServerErrorLoggerDev",{enumerable:!0,get:function(){return i}});let d=function(a){if(a&&a.__esModule)return a;if(null===a||"object"!=typeof a&&"function"!=typeof a)return{default:a};var b=e(void 0);if(b&&b.has(a))return b.get(a);var c={__proto__:null},d=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in a)if("default"!==f&&Object.prototype.hasOwnProperty.call(a,f)){var g=d?Object.getOwnPropertyDescriptor(a,f):null;g&&(g.get||g.set)?Object.defineProperty(c,f,g):c[f]=a[f]}return c.default=a,b&&b.set(a,c),c}(c(28089));function e(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(e=function(a){return a?c:b})(a)}let f={current:null},g="function"==typeof d.cache?d.cache:a=>a,h=console.warn;function i(a){return function(...b){h(a(...b))}}g(a=>{try{h(f.current)}finally{f.current=null}})}};
@@ -0,0 +1,22 @@
1
+ "use strict";exports.id=9783,exports.ids=[9783],exports.modules={3196:(a,b,c)=>{c.d(b,{I:()=>l});var d=c(73024),e=c(76760),f=c(70149);let g=/(^|\/)(\.env(\.[\w.-]+)?|id_[rd]sa\w*|.*\.(pem|key|p12|pfx|keystore|jks|ppk|asc)|credentials?\.json|service[-_]?account[\w.-]*\.json|.*\.(sql|dump|bak|sqlite3?|db)|npm-debug\.log|.*\.local)$/i,h=/(\.env\.(example|sample|template|dist)|\.env-example)$/i,i=[{kind:"AWS access key",re:/\bAKIA[0-9A-Z]{16}\b/},{kind:"GitHub token",re:/\bgh[posru]_[A-Za-z0-9]{30,}\b/},{kind:"OpenAI/Anthropic key",re:/\bsk-[A-Za-z0-9_-]{20,}\b/},{kind:"Google API key",re:/\bAIza[0-9A-Za-z_-]{30,}\b/},{kind:"Slack token",re:/\bxox[baprs]-[A-Za-z0-9-]{10,}\b/},{kind:"Private key",re:/-----BEGIN (?:RSA |EC |OPENSSH |DSA |PGP )?PRIVATE KEY-----/},{kind:"JWT",re:/\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{6,}\b/},{kind:"DB URL with credentials",re:/\b(?:postgres(?:ql)?|mysql|mongodb(?:\+srv)?|redis|amqp):\/\/[^\s:@/]+:[^\s:@/]+@/i},{kind:"Telegram bot token",re:/\b\d{6,}:[A-Za-z0-9_-]{35,}\b/},{kind:"Hardcoded secret",re:/\b(password|passwd|secret|api[_-]?key|access[_-]?token|auth[_-]?token|client[_-]?secret|private[_-]?key)\b\s*[:=]\s*['"][^'"\n]{6,}['"]/i}],j=/(your[_-]?|xxx+|<[^>]+>|change[_-]?me|example|placeholder|\*{3,}|•|dummy|todo|redacted|\.\.\.)/i,k=/(^|\/)(node_modules|\.git|\.next|dist|build|out|\.turbo|coverage|uploads|archives|\.testdev|vendor)\//;async function l(a){let b=await (0,f.d1)("git",["status","--porcelain","-z","--untracked-files=all"],{cwd:a});if(0!==b.code)return{findings:[],scanned:0,files:0};let c=[],l=b.stdout.split("\0");for(let a=0;a<l.length;a++){let b=l[a];if(!b||b.length<3)continue;let d=b[0],e=b[1],f=b.slice(3);("R"===d||"C"===d||"R"===e||"C"===e)&&a++,"D"!==d&&"D"!==e&&(!f||k.test(f+"/")||c.push(f))}let m=[],n=0;for(let b of c.slice(0,3e3)){g.test(b)&&!h.test(b)&&m.push({file:b,line:0,kind:"must-not-commit file",preview:b.split("/").pop()??b});let c=(0,e.join)(a,b),f=0;try{f=(0,d.statSync)(c).size}catch{continue}if(f>2097152)continue;let k="";try{k=(0,d.readFileSync)(c,"utf8")}catch{continue}if(k.includes("\0"))continue;n++;let l=k.split("\n");for(let a=0;a<l.length&&m.length<300;a++){let c=l[a];if(!(c.length>4e3))for(let{kind:d,re:e}of i){let f=e.exec(c);if(f){var o;if("Hardcoded secret"===d&&j.test(f[0]))break;m.push({file:b,line:a+1,kind:d,preview:(o=f[0]).length<=10?"•••":o.slice(0,4)+"•••"+o.slice(-2)});break}}}}return{findings:m,scanned:n,files:c.length}}},69783:(a,b,c)=>{c.d(b,{A5:()=>H,Bz:()=>A,H9:()=>I,Iq:()=>D,Td:()=>z,UY:()=>F,UZ:()=>G,Uc:()=>B,ec:()=>E,jU:()=>y,ox:()=>J,uP:()=>x});var d=c(6866),e=c(73024),f=c(77598),g=c(76760),h=c(19202),i=c(31371),j=c(65705),k=c(1890),l=c(53993),m=c(38926),n=c(56663),o=c(70149),p=c(3196),q=c(77558),r=c(24701),s=c(74252);let t=`# Constella default — don't commit deps/build output
2
+ node_modules/
3
+ .next/
4
+ dist/
5
+ build/
6
+ out/
7
+ .turbo/
8
+ coverage/
9
+ .cache/
10
+ *.log
11
+ .env
12
+ .env.*
13
+ .DS_Store
14
+ .testdev/
15
+ uploads/
16
+ `;async function u(a){if((0,e.mkdirSync)(a,{recursive:!0}),!(0,e.existsSync)((0,g.join)(a,".git"))&&0!==(await (0,o.d1)("git",["init","-b","main"],{cwd:a})).code)return!1;let b=(0,g.join)(a,".gitignore");if(!(0,e.existsSync)(b))try{(0,e.writeFileSync)(b,t)}catch{}return!0}async function v(a,b){let c=await (0,m.r6)(a,"github_pat");if(c)return c;let[d]=await j.db.select().from(k.account).where((0,h.Uo)((0,h.eq)(k.account.userId,b),(0,h.eq)(k.account.providerId,"github")));return d?.accessToken??null}function w(a,b,c){return fetch("https://api.github.com"+b,{...c,headers:{Authorization:`Bearer ${a}`,"User-Agent":"constella",Accept:"application/vnd.github+json",...c?.headers??{}},signal:AbortSignal.timeout(12e3)})}async function x(){let{session:a,workspace:b}=await (0,l.nP)(),c=await v(b.id,a.user.id);if(!c)return{ok:!1,error:"Connect GitHub first."};try{let a=await w(c,"/user/repos?per_page=100&sort=updated&affiliation=owner,collaborator,organization_member");if(!a.ok)return{ok:!1,error:`GitHub ${a.status}`};let b=await a.json();return{ok:!0,repos:b.map(a=>({full:a.full_name,private:a.private,branch:a.default_branch||"main"}))}}catch{return{ok:!1,error:"Couldn't reach GitHub."}}}async function y(a){let b,c=(a||"").trim();if(c.length<7)return{ok:!1,error:"That token looks too short."};try{let a=await w(c,"/user");if(401===a.status)return{ok:!1,error:"Invalid token (401). It needs the 'repo' scope."};if(!a.ok)return{ok:!1,error:`GitHub rejected the token (${a.status}).`};b=(await a.json().catch(()=>({})))?.login;let d=await w(c,"/user/repos?per_page=100&sort=updated&affiliation=owner,collaborator,organization_member");if(!d.ok)return{ok:!1,error:`GitHub ${d.status}`};let e=await d.json();return{ok:!0,login:b,repos:e.map(a=>({full:a.full_name,private:a.private,branch:a.default_branch||"main"}))}}catch{return{ok:!1,error:"Couldn't reach GitHub — check your connection and retry."}}}async function z(a){let{session:b,workspace:c}=await (0,l.nP)(),d=await v(c.id,b.user.id);if(!d)return{ok:!1,error:"Connect GitHub first."};let e=a.name.trim().replace(/\s+/g,"-");if(!/^[\w.-]+$/.test(e))return{ok:!1,error:"Use letters, numbers, - _ . only."};try{let b=await w(d,"/user/repos",{method:"POST",body:JSON.stringify({name:e,private:a.private??!0,auto_init:!1})});if(!b.ok){let a=await b.text().catch(()=>"");return{ok:!1,error:/already exists/i.test(a)?"A repo with that name already exists.":`GitHub ${b.status}`}}let c=await b.json();return await A(c.full_name),{ok:!0,full:c.full_name}}catch{return{ok:!1,error:"Couldn't reach GitHub."}}}async function A(a){let{session:b,org:c,workspace:d}=await (0,l.nP)(),f=(0,n.HZ)(c.id);(0,e.mkdirSync)(f,{recursive:!0});let g=a.trim().replace(/^https?:\/\/github\.com\//i,"").replace(/\.git$/,"");if(!/^[\w.-]+\/[\w.-]+$/.test(g))return{ok:!1,error:"Use the form owner/repo."};let m=await v(d.id,b.user.id);if(!m)return{ok:!1,error:"Connect GitHub for this company first."};let p="main";try{let a=await w(m,`/repos/${g}`);if(404===a.status)return{ok:!1,error:"Repo not found, or this company's token can't access it."};if(!a.ok)return{ok:!1,error:`GitHub ${a.status}`};p=(await a.json()).default_branch||"main"}catch{return{ok:!1,error:"Couldn't reach GitHub."}}let q=`https://github.com/${g}.git`;return await u(f)?0!==(0===(await (0,o.d1)("git",["remote","get-url","origin"],{cwd:f})).code?await (0,o.d1)("git",["remote","set-url","origin",q],{cwd:f}):await (0,o.d1)("git",["remote","add","origin",q],{cwd:f})).code?{ok:!1,error:"couldn't set origin"}:(await j.db.update(k.workspace).set({settings:{...d.settings??{},github:{...d.settings?.github??{},repo:g,defaultBranch:p}}}).where((0,h.eq)(k.workspace.id,d.id)),(0,i.revalidatePath)("/github"),(0,i.revalidatePath)("/code"),{ok:!0}):{ok:!1,error:"git init failed"}}async function B(){let{org:a}=await (0,l.nP)(),b=(0,n.HZ)(a.id);if(!(0,e.existsSync)((0,g.join)(b,".git")))return null;let c=await (0,o.d1)("git",["remote","get-url","origin"],{cwd:b});if(0!==c.code)return null;let d=c.stdout.trim().match(/github\.com[/:]([\w.-]+\/[\w.-]+?)(?:\.git)?\s*$/i);return d?d[1]:null}let C=new Set;async function D(){let{org:a,workspace:b}=await (0,l.nP)();if(C.has(b.id))return{ok:!0,changed:0};C.add(b.id);try{let c=(0,n.HZ)(a.id);if(!await u(c))return{ok:!1,changed:0};let d=await (0,o.d1)("git",["status","--porcelain","-z","--untracked-files=all"],{cwd:c});if(0!==d.code)return{ok:!1,changed:0};let e=new Map,g=d.stdout.split("\0");for(let a=0;a<g.length;a++){let b=g[a];if(!b||b.length<3)continue;let c=b[0],d=b[1],f=b.slice(3);if(("R"===c||"C"===c||"R"===d||"C"===d)&&a++,!f||f.startsWith(".git/")||/(^|\/)node_modules\//.test(f))continue;let h="?"===c||"?"===d?"U":"D"===c||"D"===d?"D":"A"===c||"A"===d?"A":"M";e.set(f,h)}let i=await j.db.select().from(k.file).where((0,h.eq)(k.file.workspaceId,b.id)),l=new Map(i.map(a=>[a.path,a]));for(let a of i)""===a.gitStatus||e.has(a.path)||await j.db.update(k.file).set({gitStatus:""}).where((0,h.eq)(k.file.id,a.id));for(let[a,c]of e){let d=l.get(a);d?d.gitStatus!==c&&await j.db.update(k.file).set({gitStatus:c}).where((0,h.eq)(k.file.id,d.id)):await j.db.insert(k.file).values({id:(0,f.randomUUID)(),workspaceId:b.id,path:a,gitStatus:c})}return{ok:!0,changed:e.size}}finally{C.delete(b.id)}}async function E(a){let{org:b}=await (0,l.nP)(),c=(0,n.HZ)(b.id);if(!(0,e.existsSync)((0,g.join)(c,".git")))return{ok:!1,diff:""};let d=(await (0,o.d1)("git",["diff","HEAD","--",a],{cwd:c,timeoutMs:15e3})).stdout;return d.trim()||(d=(await (0,o.d1)("git",["diff","--no-index","/dev/null",a],{cwd:c,timeoutMs:15e3})).stdout),{ok:!0,diff:d.slice(0,6e4)}}async function F(a){let b,{workspace:c}=await (0,l.nP)(),d=a.trim();if(d.length<7)return{ok:!1,error:"That token looks too short."};try{let a=await fetch("https://api.github.com/user",{headers:{Authorization:`Bearer ${d}`,"User-Agent":"constella",Accept:"application/vnd.github+json"},signal:AbortSignal.timeout(8e3)});if(401===a.status)return{ok:!1,error:"Invalid token (401). Make sure it has the 'repo' scope."};if(!a.ok)return{ok:!1,error:`GitHub rejected the token (${a.status}).`};b=(await a.json().catch(()=>({})))?.login}catch{return{ok:!1,error:"Couldn't reach GitHub — check your connection and retry."}}return await j.db.delete(k.vault).where((0,h.Uo)((0,h.eq)(k.vault.workspaceId,c.id),(0,h.eq)(k.vault.ref,"github_pat"))),await (0,m.IW)(c.id,"github_pat",d),await j.db.update(k.workspace).set({settings:{...c.settings??{},github:{login:b,repo:void 0,defaultBranch:void 0}}}).where((0,h.eq)(k.workspace.id,c.id)),(0,i.revalidatePath)("/github"),{ok:!0,login:b}}async function G(){let{workspace:a}=await (0,l.nP)();return await j.db.delete(k.vault).where((0,h.Uo)((0,h.eq)(k.vault.workspaceId,a.id),(0,h.eq)(k.vault.ref,"github_pat"))),(0,i.revalidatePath)("/github"),{ok:!0}}async function H(){let{workspace:a}=await (0,l.nP)(),b=await j.db.select({path:k.file.path,st:k.file.gitStatus}).from(k.file).where((0,h.Uo)((0,h.eq)(k.file.workspaceId,a.id),(0,h.ne)(k.file.gitStatus,"")));if(0===b.length)return{ok:!1,message:""};let c=b.filter(a=>"A"===a.st).length,d=b.filter(a=>"M"===a.st).length,e=b.filter(a=>"D"===a.st).length,f=[];d&&f.push(`update ${d} file${d>1?"s":""}`),c&&f.push(`add ${c} file${c>1?"s":""}`),e&&f.push(`remove ${e} file${e>1?"s":""}`);let g=`${!c||d||e?!e||c||d?"chore":"refactor":"feat"}: ${f.join(", ")}`,i=b.map(a=>`${a.st} ${a.path}`).join("\n");return{ok:!0,message:`${g}
17
+
18
+ ${i}`}}async function I(){let{org:a}=await (0,l.nP)(),b=(0,n.HZ)(a.id);return await u(b)?{ok:!0,...await (0,p.I)(b)}:{ok:!1,findings:[],scanned:0,files:0}}async function J(a){let{org:b,workspace:c}=await (0,l.nP)(),d=(0,n.HZ)(b.id);(0,e.mkdirSync)(d,{recursive:!0});let f=a.branch||"main",g=await (0,m.r6)(c.id,"github_pat"),h=a=>(g?a.split(g).join("***"):a).slice(-300),j={ok:!1,committed:!1,sha:"",pushed:!1,prUrl:"",nothing:!1};if(!await u(d))return j.error="git init failed",K(c.id,j,a);if(!g)return j.blocked=!0,j.error="GitHub isn't configured for this company — connect a token + pick a repo first.",K(c.id,j,a);let k=c.settings?.github?.repo,s=await B();if(!k||!s)return j.blocked=!0,j.error="No repository set for this company — pick or create one first.",K(c.id,j,a);if(k.toLowerCase()!==s.toLowerCase())return j.blocked=!0,j.error=`Origin (${s}) doesn't match this company's configured repo (${k}). Re-select the repo before committing.`,K(c.id,j,a);if(!a.force){let a=await (0,p.I)(d);if(a.findings.length)return j.blocked=!0,j.secrets=a.findings,j.error=`Blocked: ${a.findings.length} potential secret(s)/sensitive file(s) in the change set. Resolve them or review before committing.`,await (0,q.vE)(c.id,{kind:"block",refType:"task",refId:`commit-${s}`,title:`Commit blocked — ${a.findings.length} secret risk(s)`,detail:`Pushing to ${s} was blocked. Sensitive items:
19
+ `+a.findings.slice(0,20).map(a=>`• ${a.file}${a.line?":"+a.line:""} — ${a.kind} (${a.preview})`).join("\n")}),await (0,r.I)(c.id,{kind:"security",text:`Commit blocked — ${a.findings.length} secret risk(s)`,detail:a.findings.slice(0,5).map(a=>`${a.file}: ${a.kind}`).join("; ")}),(0,i.revalidatePath)("/github"),(0,i.revalidatePath)("/inbox"),j}await (0,o.d1)("git",["add","-A"],{cwd:d});let t=await (0,o.d1)("git",["-c","user.email=agents@constella.dev","-c","user.name=Constella Agents","commit","-m",a.message],{cwd:d});if(0===t.code)j.committed=!0,j.sha=(await (0,o.d1)("git",["rev-parse","--short","HEAD"],{cwd:d})).stdout.trim();else if(/nothing to commit|no changes added/i.test(t.stdout+t.stderr))return j.nothing=!0,K(c.id,j,a);else return j.error=h(t.stderr||t.stdout)||"git commit failed",K(c.id,j,a);let v=await (0,o.d1)("git",["remote","get-url","origin"],{cwd:d}),w=0===v.code?v.stdout.trim():"";if(w&&g&&/^https:\/\/github\.com\//i.test(w)){let b=w.replace(/^https:\/\//i,`https://x-access-token:${g}@`),e=await (0,o.d1)("git",["push",b,`HEAD:${f}`],{cwd:d,timeoutMs:12e4});if(j.pushed=0===e.code,!j.pushed&&(j.error=h(e.stderr)||"git push failed",/rejected|non-fast-forward|fetch first|merge conflict|failed to push/i.test(e.stderr)&&await (0,q.vE)(c.id,{kind:"block",refType:"task",refId:`push:${a.repo}:${f}`,title:`Push rejected — ${a.repo}`,detail:`git push to \`${f}\` was rejected (remote conflict / non-fast-forward). Pull + resolve, then push again.
20
+
21
+ ${h(e.stderr).slice(0,300)}`})),j.pushed&&a.delegated){let a=((await (0,o.d1)("gh",["pr","create","--fill","--head",f],{cwd:d,timeoutMs:6e4,env:{GH_TOKEN:g}})).stdout.match(/https:\/\/github\.com\/\S+/)??[])[0];a&&(j.prUrl=a)}}else w?g||(j.error="committed locally — connect a GitHub PAT to push"):j.error="committed locally — no 'origin' remote configured to push";return K(c.id,j,a)}async function K(a,b,c){if(b.committed){await j.db.update(k.file).set({gitStatus:""}).where((0,h.Uo)((0,h.eq)(k.file.workspaceId,a),(0,h.ne)(k.file.gitStatus,"")));let d=b.pushed?`pushed to ${c.repo} \xb7 ${c.branch}`:"committed locally";await (0,r.I)(a,{kind:"deploy",text:`Workspace ${d}${b.sha?` (${b.sha})`:""}`,detail:(c.delegated&&b.prUrl?`PR: ${b.prUrl}
22
+ `:"")+c.message})}return b.ok=b.committed,(0,i.revalidatePath)("/github"),b}(0,s.D)([x,y,z,A,B,D,E,F,G,H,I,J]),(0,d.A)(x,"003850e56ad3c54b39674010ded262a0daa211535c",null),(0,d.A)(y,"40f46dd3d0a20c88844db31686b931ae8a16e73f14",null),(0,d.A)(z,"400db192cd266d8311e8ad1dd0ec6b04b492b04bdc",null),(0,d.A)(A,"405ca1478561dfd6da31d99c74b93e3bd13bc76be5",null),(0,d.A)(B,"0021f8ed57bd8d06d1e4ca18ad9faa9b47f8a19ea7",null),(0,d.A)(D,"000cc16c19923cb844bbe4572cb18860d157994f6f",null),(0,d.A)(E,"406b88ec6a820841c40bc7f3158001456667cda22f",null),(0,d.A)(F,"406b62f8ae0c6ef0fd27dbc3ebfcb4893b8a57ed16",null),(0,d.A)(G,"00a8d2be81b03c22764d9c64634d37d70acd492958",null),(0,d.A)(H,"0080b6aaba42bb95067a7046afccec10d1ad56caa6",null),(0,d.A)(I,"002dec5492ae64d8767c197bb1ab2d6c1334140f9a",null),(0,d.A)(J,"40245cd4271118749543fe516ea538a1b12b258d6d",null)}};
@@ -0,0 +1,3 @@
1
+ "use strict";exports.id=9969,exports.ids=[9969],exports.modules={3188:(a,b,c)=>{c.d(b,{$g:()=>U,Hs:()=>r,JN:()=>Z,KD:()=>C,Kp:()=>V,Pe:()=>o,UC:()=>u,ZB:()=>S,d1:()=>T,hW:()=>X,p1:()=>_,qX:()=>Y,w5:()=>W});var d=c(31421),e=c(73024),f=c(48161),g=c(76760),h=c(78698);let i="win32"===process.platform,j=process.env.CONSTELLA_RUN_MODE??"start",k=null!=process.env.CONSTELLA_AGENT_FULL_ACCESS?"0"!==process.env.CONSTELLA_AGENT_FULL_ACCESS:"start"===j;function l(){return k?["--permission-mode","bypassPermissions"]:["--permission-mode","acceptEdits"]}let m=null,n=null;function o(a){n=a}function p(){return n??"1"===process.env.CONSTELLA_AGENT_LOCK_HOOK}let q=null;function r(a){q=a}function s(){return q??"0"!==process.env.CONSTELLA_AGENT_CMD_GUARD}let t=null;function u(a){t=a}function v(){try{let a=(0,g.join)((0,h.r$)(),".agent-claude");(0,e.mkdirSync)(a,{recursive:!0});let b=(0,g.join)((0,f.homedir)(),".claude",".credentials.json");if(!(0,e.existsSync)(b))return null;(0,e.copyFileSync)(b,(0,g.join)(a,".credentials.json"));let c=process.env.CONSTELLA_PKG_ROOT||process.cwd(),d=[];return p()&&d.push({matcher:"Write|Edit|MultiEdit|NotebookEdit",hooks:[{type:"command",command:`node "${(0,g.join)(c,"bin","lock-hook.mjs")}"`}]}),s()&&d.push({matcher:"Bash",hooks:[{type:"command",command:`node "${(0,g.join)(c,"bin","guard-hook.mjs")}"`}]}),(0,e.writeFileSync)((0,g.join)(a,"settings.json"),JSON.stringify({hooks:{PreToolUse:d}}),"utf8"),a}catch{return null}}function w(){if((p()||s())&&v())return[];if(null===m)try{let a=(0,g.join)((0,f.tmpdir)(),"constella-agent-settings.json");(0,e.writeFileSync)(a,JSON.stringify({disableAllHooks:!0}),"utf8"),m=a}catch{m=""}return m?["--settings",m]:[]}function x(a){if(!p()&&!s())return process.env;let b=v();return b?{...process.env,CLAUDE_CONFIG_DIR:b,CONSTELLA_ORG_ID:a.orgId,CONSTELLA_TASK_ID:a.token||"",CONSTELLA_AGENT_ID:a.agentId||"",CONSTELLA_AGENT_HANDLE:a.agentHandle||"",CONSTELLA_BASE_URL:process.env.CONSTELLA_BASE_URL||"http://127.0.0.1:3000"}:process.env}function y(a){if(a)return/^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$/.test(a)?a:void 0}function z(a){if(a&&"(default)"!==a)return/^[A-Za-z0-9][A-Za-z0-9._:/-]{0,79}$/.test(a)?a:void 0}let A=new Map,B=new Set;function C(a){B.add(a);let b=A.get(a);if(!b)return!1;A.delete(a);try{return b.kill("SIGKILL"),!0}catch{return!1}}function D(a,b){if(a){if(B.has(a)){B.delete(a);try{b.kill("SIGKILL")}catch{}return}A.set(a,b)}}function E(a){a&&(A.delete(a),B.delete(a))}function F(a,b,c,e,f,g,h,j=i){return new Promise(i=>{let k=Date.now(),l=(0,d.spawn)(a,b,{cwd:e,shell:j,windowsHide:!0,env:g??process.env});D(h,l);let m="",n="",o=!1,p=setTimeout(()=>{o=!0;try{l.kill("SIGKILL")}catch{}},f);l.stdout.on("data",a=>m+=a.toString()),l.stderr.on("data",a=>n+=a.toString()),l.on("error",a=>{clearTimeout(p),E(h),i({code:-1,stdout:m,stderr:n+String(a),durationMs:Date.now()-k,timedOut:o})}),l.on("close",a=>{clearTimeout(p),E(h),i({code:a,stdout:m,stderr:n,durationMs:Date.now()-k,timedOut:o})}),c&&l.stdin.write(c),l.stdin.end()})}async function G(a,b){let c=(0,h.HZ)(b.orgId);(0,e.mkdirSync)(c,{recursive:!0});let d=y(b.model),f=["-p","--output-format","json",...w(),...l()];d&&f.push("--model",d);let g=await F("claude",f,a,c,b.timeoutMs??18e4,x(b),b.token);if(g.timedOut)return I("claude",b.model,g.durationMs,"timed out");let i=null;try{i=JSON.parse(g.stdout.trim())}catch{let a=g.stdout.split("\n").reverse().find(a=>a.includes('"type":"result"'));if(a)try{i=JSON.parse(a)}catch{}}if(!i)return I("claude",b.model,g.durationMs,g.stderr.slice(-300)||"no JSON output (code "+g.code+")");let j=i.usage??{};return{ok:!0!==i.is_error&&"success"===i.subtype,text:String(i.result??""),usd:Number(i.total_cost_usd??0),inputTokens:Number(j.input_tokens??0)+Number(j.cache_read_input_tokens??0)+Number(j.cache_creation_input_tokens??0),outputTokens:Number(j.output_tokens??0),durationMs:g.durationMs,binary:"claude",model:b.model,error:!0===i.is_error?String(i.result??"error"):void 0}}async function H(a,b){let c=(0,h.HZ)(b.orgId);(0,e.mkdirSync)(c,{recursive:!0});let d=y(b.model),f=["exec","--json","--skip-git-repo-check","-s",k?"danger-full-access":"workspace-write"];d&&f.push("-m",d);let g=await F("codex",f,a,c,b.timeoutMs??18e4,void 0,b.token);if(g.timedOut)return I("codex",b.model,g.durationMs,"timed out");let i="",j=0,l=0,m=0;for(let a of g.stdout.split("\n")){let b=a.trim();if(b.startsWith("{"))try{let a=JSON.parse(b),c=a.item??a.msg??{};"string"==typeof c.text&&c.text&&(i=c.text),"string"==typeof a.text&&(i=a.text);let d=a.usage??a.token_usage??c.usage??{};d.input_tokens&&(j=Number(d.input_tokens)),d.output_tokens&&(l=Number(d.output_tokens)),"number"==typeof a.cost_usd&&(m=a.cost_usd)}catch{}}return{ok:0===g.code,text:i,usd:m,inputTokens:j,outputTokens:l,durationMs:g.durationMs,binary:"codex",model:b.model,error:0===g.code?void 0:g.stderr.slice(-300)||"codex exit "+g.code}}function I(a,b,c,d){return{ok:!1,text:"",usd:0,inputTokens:0,outputTokens:0,durationMs:c,binary:a,model:b,error:d}}async function J(a,b){let c=(0,h.HZ)(b.orgId);(0,e.mkdirSync)(c,{recursive:!0});let d=z(b.model),f=["-z",a];if(d){let a=d.indexOf("/");a>0?f.push("--provider",d.slice(0,a),"--model",d.slice(a+1)):f.push("--model",d)}let g=await F("hermes",f,"",c,b.timeoutMs??18e4,void 0,b.token);if(g.timedOut)return I("hermes",b.model,g.durationMs,"timed out");let i=(g.stdout||"").trim();return{ok:0===g.code&&!!i,text:i,usd:0,inputTokens:0,outputTokens:0,durationMs:g.durationMs,binary:"hermes",model:b.model,error:0===g.code?void 0:g.stderr.slice(-300)||"hermes exit "+g.code}}async function K(a,b){let c=(0,h.HZ)(b.orgId);(0,e.mkdirSync)(c,{recursive:!0});let d=z(b.model),f=["infer","model","run","--prompt",a,"--json"];d&&f.push("--model",d);let g=await F("openclaw",f,"",c,b.timeoutMs??18e4,void 0,b.token);if(g.timedOut)return I("openclaw",b.model,g.durationMs,"timed out");let i="",j=0===g.code,k;try{var l;let a=JSON.parse(g.stdout.trim());j=!1!==a.ok&&0===g.code,i=(l=a.outputs)?"string"==typeof l?l:Array.isArray(l)?l.map(a=>"string"==typeof a?a:a&&"object"==typeof a?String(a.text??a.content??a.output??a.message??""):"").filter(Boolean).join("\n"):"object"==typeof l?String(l.text??l.content??""):"":"",a.error&&(k=String(a.error?.message??a.error))}catch{i=g.stdout.trim(),0!==g.code&&(j=!1,k=g.stderr.slice(-300)||"openclaw exit "+g.code)}return i||k||(k=g.stderr.slice(-300)||"no output (code "+g.code+")"),{ok:j&&!!i,text:i,usd:0,inputTokens:0,outputTokens:0,durationMs:g.durationMs,binary:"openclaw",model:b.model,error:k}}async function L(a,b,c){let d=(0,h.HZ)(c.orgId);(0,e.mkdirSync)(d,{recursive:!0});let f=await F(a,b,"",d,c.timeoutMs??18e4,void 0,c.token);if(f.timedOut)return I(a,c.model,f.durationMs,"timed out");let g=function(a){let b=a.trim();if(!b)return"";if(b.startsWith("{")||b.startsWith("["))try{let a=JSON.parse(b),c=a.result??a.text??a.response??a.content??a.message??a.output;if("string"==typeof c&&c)return c;if(c&&"object"==typeof c){let a=c.text??c.content;if("string"==typeof a)return a}}catch{}return b}(f.stdout),i=0===f.code?g?void 0:f.stderr.slice(-300)||"no output (code "+f.code+")":f.stderr.slice(-300)||`${a} exit ${f.code}`;return{ok:0===f.code&&!!g,text:g,usd:0,inputTokens:0,outputTokens:0,durationMs:f.durationMs,binary:a,model:c.model,error:i}}async function M(a,b){let c=z(b.model),d=["--message",a,"--yes-always","--no-auto-commits","--no-stream"];return c&&d.push("--model",c),L("aider",d,b)}async function N(a,b){let c=z(b.model),d=["run",a];return c&&d.push("--model",c),L("opencode",d,b)}async function O(a,b){let c=z(b.model),d=["-p",a,"--allow-all-tools"];return c&&d.push("--model",c),L("copilot",d,b)}async function P(a,b){let c=z(b.model),d=["-p",a,"--output-format","json"];return c&&d.push("--model",c),L("cursor-agent",d,{...b,timeoutMs:b.timeoutMs??15e4})}async function Q(a,b){let c=z(b.model),d=["--json","-y",a];return c&&d.push("--model",c),L("cline",d,b)}async function R(a,b){let c=z(b.model),d=["--yes",a];return c&&d.push("--model",c),L("kilocode",d,b)}async function S(a){try{if("opencode"===a){let a=await F("opencode",["models"],"",process.cwd(),2e4);if(0!==a.code)return[];return a.stdout.split("\n").map(a=>a.trim()).filter(a=>/^[\w.-]+\/[\w./:-]+$/.test(a)).slice(0,200)}if("aider"===a){let a=await F("aider",["--list-models","/"],"",process.cwd(),25e3);if(0!==a.code)return[];return a.stdout.split("\n").map(a=>a.replace(/^[-*\s]+/,"").trim()).filter(a=>/^[\w.-]+\/[\w./:-]+$/.test(a)).slice(0,200)}}catch{}return[]}async function T(a,b,c){return F(a,b,c.input??"",c.cwd,c.timeoutMs??6e4,c.env?{...process.env,...c.env}:void 0,void 0,!1)}async function U(a){let b=await F(a,["--version"],"",process.cwd(),15e3);return 0!==b.code?null:(b.stdout||b.stderr).trim().split("\n")[0]||"ok"}async function V(a){let b=(0,f.homedir)(),c=(...a)=>a.some(a=>(0,e.existsSync)((0,g.join)(b,a)));try{switch(a){case"claude":return c(".claude/.credentials.json",".claude.json",".config/claude")?"ready":"needs_login";case"codex":return c(".codex/auth.json",".codex")?"ready":"needs_login";case"aider":return process.env.OPENAI_API_KEY||process.env.ANTHROPIC_API_KEY||process.env.DEEPSEEK_API_KEY||process.env.GEMINI_API_KEY||process.env.OPENROUTER_API_KEY||process.env.GROQ_API_KEY?"ready":"needs_login";case"opencode":{let a=await F("opencode",["auth","list"],"",process.cwd(),8e3);if(0===a.code&&/\w/.test(a.stdout)&&!/\b(no|none|not)\b.*(auth|provider|credential|logged)/i.test(a.stdout))return"ready";return c(".local/share/opencode/auth.json",".config/opencode")?"ready":"needs_login"}case"copilot":return c(".config/github-copilot/apps.json",".config/github-copilot",".copilot")?"ready":"needs_login";case"cursor-agent":return c(".config/cursor-agent",".cursor-agent",".cursor")?"ready":"needs_login";case"openclaw":return c(".openclaw",".config/openclaw")?"ready":"unknown";case"hermes":return c(".hermes",".config/hermes")?"ready":"unknown";case"cline":return c(".cline",".config/cline")?"ready":"unknown";case"kilocode":return c(".kilocode",".config/kilocode")?"ready":"unknown"}}catch{}return"unknown"}let W={cli_claude_code:["opus","sonnet","haiku"],cli_codex:["gpt-5-codex","o4-mini"],cli_openclaw:["(default)","openai/gpt-5.4","anthropic/claude-sonnet-4"],cli_hermes:["(default)","anthropic/claude-sonnet-4.6","openai/gpt-5.5"],cli_aider:["(default)","anthropic/claude-sonnet-4-6","openai/gpt-5.2","deepseek/deepseek-chat"],cli_opencode:["(default)","anthropic/claude-sonnet-4-6","openai/gpt-5.2"],cli_copilot:["(default)","claude-sonnet-4.5","gpt-5"],cli_cursor:["(default)","claude-4.5-sonnet","gpt-5"],cli_cline:["(default)"],cli_kilo:["(default)"]};function X(a,b){if("cli_codex"===a||"cli_codex_cli"===a)return"codex";if("cli_openclaw"===a)return"openclaw";if("cli_hermes"===a)return"hermes";if("cli_aider"===a)return"aider";if("cli_opencode"===a)return"opencode";if("cli_copilot"===a||"cli_copilot_cli"===a)return"copilot";if("cli_cursor"===a||"cli_cursor_cli"===a)return"cursor-agent";if("cli_cline"===a||"cli_cline_cli"===a)return"cline";if("cli_kilo"===a||"cli_kilo_code"===a)return"kilocode";if("cli_claude_code"===a)return"claude";let c=(b??"").toLowerCase();return c.startsWith("codex")||c.startsWith("gpt")||c.startsWith("o1")||c.startsWith("o3")||c.startsWith("o4")?"codex":"claude"}function Y(a){let b=X(a);return"claude"===b?"opus":"codex"!==b?(W[a??""]??[]).find(a=>"(default)"!==a):void 0}async function Z(a,b){let c=b.binary??"claude",d={model:b.model,orgId:b.orgId,timeoutMs:b.timeoutMs,token:b.token,agentId:b.agentId,agentHandle:b.agentHandle};return"codex"===c?H(a,d):"openclaw"===c?K(a,d):"hermes"===c?J(a,d):"aider"===c?M(a,d):"opencode"===c?N(a,d):"copilot"===c?O(a,d):"cursor-agent"===c?P(a,d):"cline"===c?Q(a,d):"kilocode"===c?R(a,d):G(a,d)}async function $(a,b,c){let f=(0,h.HZ)(b.orgId);(0,e.mkdirSync)(f,{recursive:!0});let g=y(b.model),j=["-p","--output-format","stream-json","--include-partial-messages","--verbose",...w(),...l(),...t??"0"!==process.env.CONSTELLA_WEB_RESEARCH?["--allowedTools","WebSearch","WebFetch"]:[]];return g&&j.push("--model",g),new Promise(e=>{let g=Date.now(),h=(0,d.spawn)("claude",j,{cwd:f,shell:i,windowsHide:!0,env:x(b)});D(b.token,h);let k="",l="",m=0,n=0,o=0,p=!1,q,r="",s=0,t=!1,u=()=>{r.length>s&&(c({kind:"text",detail:r.slice(s,s+8e3)}),s=r.length)},v=setTimeout(()=>{try{h.kill("SIGKILL")}catch{}},b.timeoutMs??24e4);h.stdout.on("data",a=>{let b;for(k+=a.toString();(b=k.indexOf("\n"))>=0;){let a=k.slice(0,b).trim();if(k=k.slice(b+1),a.startsWith("{"))try{!function(a){if("stream_event"===a.type){let b=a.event;b?.type==="content_block_start"&&b.content_block?.type==="text"&&r?r+="\n\n":b?.type==="content_block_delta"&&b.delta?.type==="text_delta"&&b.delta.text&&(t=!0,(r+=b.delta.text).length-s>=120&&u())}else if("assistant"===a.type){for(let b of a.message?.content??[])"tool_use"===b.type&&b.name?c(function(a,b){if("Read"===a)return{kind:"read",target:String(b.file_path??"")};if("Write"===a)return{kind:"create",target:String(b.file_path??""),detail:String(b.content??"").slice(0,4e3)};if("Edit"===a||"NotebookEdit"===a){let a=String(b.old_string??"").split("\n"),c=String(b.new_string??"").split("\n"),d=[...a.map(a=>"-"+a),...c.map(a=>"+"+a)].slice(0,80).join("\n");return{kind:"edit",target:String(b.file_path??""),detail:d}}return"Bash"===a||"PowerShell"===a?{kind:"run",target:String(b.command??"").slice(0,200)}:"Glob"===a||"Grep"===a?{kind:"search",target:String(b.pattern??"")}:{kind:"read",target:a}}(b.name,b.input??{})):"text"===b.type&&b.text?(l=b.text,t||c({kind:"text",detail:b.text.slice(0,8e3)})):"thinking"===b.type&&b.thinking&&c({kind:"thinking",detail:b.thinking.slice(0,200)});u()}else if("result"===a.type){p=!0!==a.is_error&&"success"===a.subtype,"string"==typeof a.result&&(l=a.result),m=Number(a.total_cost_usd??0);let b=a.usage??{};n=Number(b.input_tokens??0)+Number(b.cache_read_input_tokens??0)+Number(b.cache_creation_input_tokens??0),o=Number(b.output_tokens??0),a.is_error&&(q=String(a.result??"error"))}}(JSON.parse(a))}catch{}}}),h.on("error",a=>{clearTimeout(v),E(b.token),e(I("claude",b.model,Date.now()-g,String(a)))}),h.on("close",()=>{clearTimeout(v),E(b.token),c({kind:"done"}),e({ok:p,text:l,usd:m,inputTokens:n,outputTokens:o,durationMs:Date.now()-g,binary:"claude",model:b.model,error:q})}),h.stdin.write(a),h.stdin.end()})}async function _(a,b,c){let d=b.binary??"claude";if("claude"===d)return $(a,{model:b.model,orgId:b.orgId,timeoutMs:b.timeoutMs,token:b.token,agentId:b.agentId,agentHandle:b.agentHandle},c);let e={model:b.model,orgId:b.orgId,timeoutMs:b.timeoutMs,token:b.token},f="openclaw"===d?await K(a,e):"hermes"===d?await J(a,e):"aider"===d?await M(a,e):"opencode"===d?await N(a,e):"copilot"===d?await O(a,e):"cursor-agent"===d?await P(a,e):"cline"===d?await Q(a,e):"kilocode"===d?await R(a,e):await H(a,e);return c({kind:"done"}),f}},28969:(a,b,c)=>{c.d(b,{IW:()=>i,Kh:()=>k,r6:()=>j});var d=c(77598),e=c(63933),f=c(80280),g=c(25533);function h(){let a=process.env.CONSTELLA_VAULT_KEY;if(!a)throw Error("CONSTELLA_VAULT_KEY is not set");let b=Buffer.from(a,"base64");if(32!==b.length)throw Error("CONSTELLA_VAULT_KEY must decode to 32 bytes");return b}async function i(a,b,c,i){let j=(0,d.randomBytes)(12),k=(0,d.createCipheriv)("aes-256-gcm",h(),j),l=Buffer.concat([k.update(c,"utf8"),k.final()]),m=k.getAuthTag(),n=Buffer.concat([l,m]).toString("base64");await f.db.delete(g.vault).where((0,e.Uo)((0,e.eq)(g.vault.workspaceId,a),(0,e.eq)(g.vault.ref,b))),await f.db.insert(g.vault).values({id:(0,d.randomUUID)(),workspaceId:a,providerId:i,ref:b,ciphertext:n,iv:j.toString("base64")})}async function j(a,b){let[c]=await f.db.select().from(g.vault).where((0,e.Uo)((0,e.eq)(g.vault.workspaceId,a),(0,e.eq)(g.vault.ref,b)));if(!c)return null;let i=Buffer.from(c.ciphertext,"base64"),j=i.subarray(i.length-16),k=i.subarray(0,i.length-16),l=(0,d.createDecipheriv)("aes-256-gcm",h(),Buffer.from(c.iv,"base64"));return l.setAuthTag(j),Buffer.concat([l.update(k),l.final()]).toString("utf8")}async function k(a,b){await f.db.delete(g.vault).where((0,e.Uo)((0,e.eq)(g.vault.workspaceId,a),(0,e.eq)(g.vault.ref,b)))}},54033:(a,b,c)=>{c.d(b,{TC:()=>k,W_:()=>i,vE:()=>h,vG:()=>j});var d=c(77598),e=c(63933),f=c(80280),g=c(25533);async function h(a,b){try{if(b.refType&&b.refId){let[c]=await f.db.select({id:g.inboxItem.id}).from(g.inboxItem).where((0,e.Uo)((0,e.eq)(g.inboxItem.workspaceId,a),(0,e.eq)(g.inboxItem.refType,b.refType),(0,e.eq)(g.inboxItem.refId,b.refId),(0,e.eq)(g.inboxItem.resolved,!1)));if(c)return void await f.db.update(g.inboxItem).set({title:b.title,detail:b.detail??"",goalId:b.goalId??null,channel:b.channel??null,messageId:b.messageId??null,createdAt:new Date}).where((0,e.eq)(g.inboxItem.id,c.id))}await f.db.insert(g.inboxItem).values({id:(0,d.randomUUID)(),workspaceId:a,kind:b.kind,title:b.title,detail:b.detail??"",fromAgentId:b.fromAgentId??null,resolved:!1,refType:b.refType??null,refId:b.refId??null,goalId:b.goalId??null,channel:b.channel??null,messageId:b.messageId??null})}catch(a){console.error("[inbox] pushInbox failed:",a)}}async function i(a,b,c){try{await f.db.update(g.inboxItem).set({resolved:!0}).where((0,e.Uo)((0,e.eq)(g.inboxItem.workspaceId,a),(0,e.eq)(g.inboxItem.refType,b),(0,e.eq)(g.inboxItem.refId,c),(0,e.eq)(g.inboxItem.resolved,!1)))}catch(a){console.error("[inbox] resolveInboxFor failed:",a)}}async function j(a,b){try{await f.db.update(g.inboxItem).set({resolved:!0}).where((0,e.Uo)((0,e.eq)(g.inboxItem.workspaceId,a),(0,e.RV)(g.inboxItem.refType,b),(0,e.eq)(g.inboxItem.resolved,!1)))}catch(a){console.error("[inbox] resolveInboxRefTypes failed:",a)}}async function k(a,b){try{await f.db.update(g.inboxItem).set({resolved:!0}).where((0,e.Uo)((0,e.eq)(g.inboxItem.workspaceId,a),(0,e.eq)(g.inboxItem.goalId,b),(0,e.eq)(g.inboxItem.resolved,!1)))}catch(a){console.error("[inbox] resolveInboxForGoal failed:",a)}}},78698:(a,b,c)=>{c.d(b,{CS:()=>function a(b,c=""){let d=[];for(let e of l(b,c))if(e.isDir){if(m.has(e.name))continue;d.push(...a(b,e.path))}else d.push(e.path);return d},Ci:()=>l,EX:()=>p,HZ:()=>j,dx:()=>o,r$:()=>h,sL:()=>n});var d=c(73024),e=c(76760),f=c(48161),g=c(28430);function h(){return process.env.CONSTELLA_HOME?(0,g.Y)(process.env.CONSTELLA_HOME):(0,e.join)((0,f.homedir)(),".constella")}let i=new Set;function j(a){if(!/^[A-Za-z0-9_-]{6,64}$/.test(a))throw Error("Invalid orgId");let b=(0,e.join)(h(),"organizations",a,"workspace");if(!i.has(a)){i.add(a);try{let c=(0,e.join)(h(),"organizations",a,"constella"),f=!(0,d.existsSync)(b)||0===(0,d.readdirSync)(b).length;if((0,d.existsSync)(c)&&f)try{(0,d.renameSync)(c,b)}catch{(0,d.mkdirSync)(b,{recursive:!0}),0===(0,d.readdirSync)(b).length&&(0,d.cpSync)(c,b,{recursive:!0})}}catch{}}return b}function k(a,b){let c=(0,e.normalize)((0,e.join)(a,b));if(c!==a&&!c.startsWith(a+e.sep))throw Error("Path escapes workspace: "+b);if((0,d.existsSync)(a)){let f;try{f=d.realpathSync.native(a)}catch{f=a}let g=function(a){let b=a;for(;;){if((0,d.existsSync)(b))try{return d.realpathSync.native(b)}catch{return b}let a=(0,e.dirname)(b);if(a===b)return b;b=a}}(c);if(g!==f&&!g.startsWith(f+e.sep))throw Error("Path escapes workspace (symlink): "+b)}return c}function l(a,b=""){let c=k(j(a),b);return(0,d.existsSync)(c)?(0,d.readdirSync)(c).map(a=>{let f=(0,e.join)(c,a),g=(b?b+"/":"")+a;return{name:a,path:g,isDir:(0,d.statSync)(f).isDirectory()}}).sort((a,b)=>a.isDir===b.isDir?a.name.localeCompare(b.name):a.isDir?-1:1):[]}let m=new Set(["node_modules",".git",".next",".turbo","dist","build","out","coverage",".cache","archives",".testdev",".pnpm-store",".vercel","vendor"]);function n(a,b){let c=k(j(a),b);return(0,d.existsSync)(c)?(0,d.readFileSync)(c,"utf8"):null}function o(a,b,c){let f=k(j(a),b);(0,d.mkdirSync)((0,e.dirname)(f),{recursive:!0}),(0,d.writeFileSync)(f,c,"utf8")}function p(a,b){let c=k(j(a),b);(0,d.existsSync)(c)&&(0,d.rmSync)(c,{recursive:!0,force:!0})}},78874:(a,b,c)=>{c.d(b,{A3:()=>i,G3:()=>k,J4:()=>o,S3:()=>p,SD:()=>j,_9:()=>g,bT:()=>n,sK:()=>l,vH:()=>m});var d=c(28969);function e(a){return/^\d{6,}:[A-Za-z0-9_-]{30,}$/.test(a)}let f="https://api.telegram.org";async function g(a){let b=await (0,d.r6)(a,"telegram_bot");if(!b)return null;try{let a=JSON.parse(b);if(a.botToken&&a.chatId&&e(a.botToken))return a}catch{}return null}let h=[{command:"help",description:"Show the remote-control commands"},{command:"status",description:"Quick project status"},{command:"review",description:"Plan / issues / tasks summary"},{command:"tasks",description:"What's in flight right now"},{command:"approve",description:"Approve the pending plan"},{command:"start_execution",description:"Approve + run 24/7"},{command:"pause",description:"Pause 24/7 execution"},{command:"resume",description:"Resume 24/7 execution"},{command:"reject",description:"Send the plan back to the CEO"},{command:"new",description:"Start new work — describe it"},{command:"cancel",description:"Cancel the active goal"},{command:"archive",description:"Archive the active goal"},{command:"kb",description:"Ask the Knowledge Base"}];async function i(a,b=h){if(!e(a))return!1;try{let c=await fetch(`${f}/bot${a}/setMyCommands`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({commands:b}),signal:AbortSignal.timeout(8e3)});return!!(await c.json()).ok}catch{return!1}}async function j(a,b){if(!e(a))return[];try{let c=await fetch(`${f}/bot${a}/getUpdates?offset=${b}&timeout=25&allowed_updates=${encodeURIComponent('["message","callback_query"]')}`,{signal:AbortSignal.timeout(3e4)}),d=await c.json();return d.ok?d.result:[]}catch{return[]}}async function k(a,b){if(!e(a))return null;try{let c=await fetch(`${f}/bot${a}/getFile?file_id=${encodeURIComponent(b)}`,{signal:AbortSignal.timeout(1e4)}),d=await c.json(),e=d.result?.file_path;if(!e)return null;let g=await fetch(`${f}/file/bot${a}/${e}`,{signal:AbortSignal.timeout(3e4)});if(!g.ok)return null;return{buf:Buffer.from(await g.arrayBuffer()),ext:(e.match(/\.([a-z0-9]+)$/i)?.[1]??"bin").toLowerCase()}}catch{return null}}async function l(a,b,c="typing"){if(e(a))try{await fetch(`${f}/bot${a}/sendChatAction`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({chat_id:b,action:c}),signal:AbortSignal.timeout(8e3)})}catch{}}async function m(a,b,c){if(!e(a))return!1;try{return(await fetch(`${f}/bot${a}/sendMessage`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({chat_id:b,text:c.slice(0,3800),disable_web_page_preview:!0})})).ok}catch{return!1}}async function n(a,b,c,d){if(!e(a))return{ok:!1};try{let e=await fetch(`${f}/bot${a}/sendMessage`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({chat_id:b,text:c.slice(0,3500),disable_web_page_preview:!0,reply_markup:{inline_keyboard:d.map(a=>a.map(a=>({text:a.text,callback_data:a.data.slice(0,64)})))}}),signal:AbortSignal.timeout(12e3)});if(!e.ok)return{ok:!1};let g=await e.json().catch(()=>({}));return{ok:!!g.ok,messageId:g.result?.message_id}}catch{return{ok:!1}}}async function o(a,b,c){if(e(a))try{await fetch(`${f}/bot${a}/answerCallbackQuery`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({callback_query_id:b,...c?{text:c.slice(0,200)}:{}}),signal:AbortSignal.timeout(8e3)})}catch{}}async function p(a,b,c){if(e(a))try{await fetch(`${f}/bot${a}/editMessageReplyMarkup`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({chat_id:b,message_id:c,reply_markup:{inline_keyboard:[]}}),signal:AbortSignal.timeout(8e3)})}catch{}}},90860:(a,b,c)=>{c.d(b,{I:()=>k});var d=c(77598),e=c(63933),f=c(80280),g=c(25533),h=c(78874);let i=new Set(["escalation","approval","needs-approval","block","blocked","security","deploy","error","alert","review","report","warn","warning"]);async function j(a,b){try{let c=b.kind??"info";if(!(!0===b.tg||!1!==b.tg&&i.has(c)))return;let[d]=await f.db.select({orgId:g.workspace.orgId}).from(g.workspace).where((0,e.eq)(g.workspace.id,a));if(!d)return;let[j]=await f.db.select({ownerId:g.organization.ownerId}).from(g.organization).where((0,e.eq)(g.organization.id,d.orgId));if(!j)return;let[k]=await f.db.select().from(g.notificationPref).where((0,e.eq)(g.notificationPref.userId,j.ownerId));if(k&&!1===k.telegram)return;let l=await (0,h._9)(a);if(!l)return;let m=c.replace(/[-_]/g," ").toUpperCase(),n=`🔔 ${m}
2
+ ${b.text}${b.detail?`
3
+ ${b.detail}`:""}`.slice(0,3400);await (0,h.bT)(l.botToken,l.chatId,n,"approval"===c||"needs-approval"===c?[[{text:"✅ Approve",data:"approve_plan"},{text:"▶️ Start execution",data:"start_exec"}],[{text:"\uD83D\uDCDD Review",data:"review"},{text:"↩️ Reject",data:"reject_plan"}]]:[[{text:"\uD83D\uDCDD Review",data:"review"},{text:"\uD83D\uDCCA Status",data:"status"}]])}catch{}}async function k(a,b){await f.db.insert(g.notification).values({id:(0,d.randomUUID)(),workspaceId:a,kind:b.kind??"info",text:b.text,detail:b.detail??"",agentId:b.agentId??null,messageId:b.messageId??null,channel:b.channel??""}),await j(a,b)}}};
@@ -0,0 +1,18 @@
1
+ {
2
+ "version": 1,
3
+ "functions": {
4
+ "/_middleware": {
5
+ "runtime": "nodejs",
6
+ "matchers": [
7
+ {
8
+ "regexp": "^(?:\\/(_next\\/data\\/[^/]{1,}))?(?:\\/((?!_next\\/static|_next\\/image|favicon.ico).*))(\\.json|\\.rsc|\\.segments\\/.+\\.segment\\.rsc)?[\\/#\\?]?$",
9
+ "originalSource": "/((?!_next/static|_next/image|favicon.ico).*)"
10
+ }
11
+ ]
12
+ },
13
+ "/api/stream": {},
14
+ "/api/telegram/poll": {},
15
+ "/api/upload": {},
16
+ "/api/v1/[[...path]]": {}
17
+ }
18
+ }
@@ -0,0 +1 @@
1
+ "use strict";(()=>{var a={};a.id=6183,a.ids=[6183],a.modules={3295:a=>{a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:a=>{a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},11703:(a,b,c)=>{async function d(){let{default:a}=await Promise.resolve().then(c.t.bind(c,78474,23));a.defaultMaxListeners=64;let b=globalThis;if(!b.__constellaLogScrub){b.__constellaLogScrub=!0;let{redactForLog:a}=await c.e(7912).then(c.bind(c,27912));for(let b of["log","info","warn","error","debug"]){let c=console[b].bind(console);console[b]=(...b)=>c(...b.map(b=>"string"==typeof b?a(b):b))}}let{reconcileOnBoot:d}=await c.e(7107).then(c.bind(c,67107));await d()}c.r(b),c.d(b,{register:()=>d})},19121:a=>{a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},29021:a=>{a.exports=require("fs")},29294:a=>{a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},31421:a=>{a.exports=require("node:child_process")},33873:a=>{a.exports=require("path")},46466:a=>{a.exports=require("node:stream/promises")},48161:a=>{a.exports=require("node:os")},51455:a=>{a.exports=require("node:fs/promises")},55511:a=>{a.exports=require("crypto")},57075:a=>{a.exports=require("node:stream")},63033:a=>{a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73024:a=>{a.exports=require("node:fs")},74075:a=>{a.exports=require("zlib")},76760:a=>{a.exports=require("node:path")},77030:a=>{a.exports=require("node:net")},77598:a=>{a.exports=require("node:crypto")},78474:a=>{a.exports=require("node:events")},87550:a=>{a.exports=require("better-sqlite3")}};var b=require("./webpack-runtime.js");b.C(a);var c=b(b.s=11703);module.exports=c})();
@@ -0,0 +1 @@
1
+ {"version":1,"files":["../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/_/_interop_require_default/package.json","../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/cjs/_interop_require_default.cjs","../../node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/package.json","../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/build/Release/better_sqlite3.node","../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/database.js","../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/index.js","../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/methods/aggregate.js","../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/methods/backup.js","../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/methods/function.js","../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/methods/inspect.js","../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/methods/pragma.js","../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/methods/serialize.js","../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/methods/table.js","../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/methods/transaction.js","../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/methods/wrappers.js","../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/sqlite-error.js","../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/lib/util.js","../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/package.json","../../node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/bindings","../../node_modules/.pnpm/bindings@1.5.0/node_modules/bindings/bindings.js","../../node_modules/.pnpm/bindings@1.5.0/node_modules/bindings/package.json","../../node_modules/.pnpm/bindings@1.5.0/node_modules/file-uri-to-path","../../node_modules/.pnpm/file-uri-to-path@1.0.0/node_modules/file-uri-to-path/index.js","../../node_modules/.pnpm/file-uri-to-path@1.0.0/node_modules/file-uri-to-path/package.json","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@swc/helpers","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/build/adapter/setup-node-env.external.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/client/components/app-router-headers.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/client/components/hooks-server-context.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/client/components/static-generation-bailout.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/client/lib/console.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/compiled/jsonwebtoken/index.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/compiled/jsonwebtoken/package.json","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/compiled/source-map/package.json","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/compiled/source-map/source-map.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/compiled/stacktrace-parser/package.json","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/compiled/ws/index.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/compiled/ws/package.json","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/lib/client-and-server-references.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/lib/constants.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/lib/framework/boundary-constants.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/lib/interop-default.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/lib/is-error.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/lib/picocolors.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/lib/scheduler.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/lib/semver-noop.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/app-render/action-async-storage.external.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/app-render/async-local-storage.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/app-render/cache-signal.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/app-render/console-async-storage-instance.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/app-render/console-async-storage.external.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/app-render/dynamic-rendering.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/app-render/staged-rendering.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/app-render/work-async-storage.external.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/dev/browser-logs/file-logger.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/dynamic-rendering-utils.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/lib/lru-cache.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/lib/parse-stack.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/lib/source-maps.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/lib/trace/constants.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/lib/trace/tracer.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/load-manifest.external.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/node-environment-baseline.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/node-environment-extensions/console-dim.external.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/node-environment-extensions/console-exit.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/node-environment-extensions/console-file.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/node-environment-extensions/date.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/node-environment-extensions/error-inspect.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/node-environment-extensions/io-utils.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/node-environment-extensions/node-crypto.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/node-environment-extensions/random.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/node-environment-extensions/web-crypto.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/node-environment.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/node-polyfill-crypto.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/patch-error-inspect.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/require-hook.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/response-cache/types.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/server/runtime-reacts.external.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/shared/lib/deep-freeze.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/shared/lib/invariant-error.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/shared/lib/is-plain-object.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/shared/lib/is-thenable.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/shared/lib/promise-with-resolvers.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/dist/shared/lib/server-reference-info.js","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/next/package.json","../../node_modules/.pnpm/next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/react","../../node_modules/.pnpm/react@19.2.7/node_modules/react/cjs/react.development.js","../../node_modules/.pnpm/react@19.2.7/node_modules/react/cjs/react.production.js","../../node_modules/.pnpm/react@19.2.7/node_modules/react/index.js","../../node_modules/.pnpm/react@19.2.7/node_modules/react/package.json","../../node_modules/better-sqlite3","../../node_modules/next","../../package.json","../package.json","chunks/2549.js","chunks/2599.js","chunks/6658.js","chunks/6706.js","chunks/7107.js","chunks/7514.js","chunks/7912.js","webpack-runtime.js"]}
@@ -0,0 +1 @@
1
+ self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST="[]";
@@ -0,0 +1 @@
1
+ globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/yztMvBwyrWWkSqP6jfXoa/_buildManifest.js","static/yztMvBwyrWWkSqP6jfXoa/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-222e3894b78c67db.js","static/chunks/23550918-ff694f70f4b0648c.js","static/chunks/6834-4759af1ce7d95fb6.js","static/chunks/main-app-761880af2b6f1962.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "middleware": {},
4
+ "functions": {},
5
+ "sortedMiddleware": []
6
+ }
@@ -0,0 +1 @@
1
+ self.__REACT_LOADABLE_MANIFEST='{"..\\\\node_modules\\\\.pnpm\\\\next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7\\\\node_modules\\\\next\\\\dist\\\\client\\\\index.js -> ../pages/_app":{"id":5920,"files":["static/chunks/5920.6451a68b63918988.js"]},"..\\\\node_modules\\\\.pnpm\\\\next@16.2.9_@playwright+test@1.61.0_react-dom@19.2.7_react@19.2.7__react@19.2.7\\\\node_modules\\\\next\\\\dist\\\\client\\\\index.js -> ../pages/_error":{"id":7509,"files":["static/chunks/7509.721cd47a931c5518.js"]}}';