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,373 @@
1
+ [โ† Docs index](./README.md) ยท [๐Ÿ‡ง๐Ÿ‡ท Portuguรชs](../pt/AI_ARCHITECTURE.md) ยท [โœฆ Constella](../../README.md)
2
+
3
+ # ๐ŸŒŒ AI Architecture โ€” how a constellation actually runs
4
+
5
+ > The control plane never talks to an LLM API directly. It **drives real CLIs** (`claude`, `codex`, and friends) as subprocesses inside the org workspace, captures their **real** token usage + cost, and never fabricates a number.
6
+
7
+ This document explains the machinery that turns "an agent" into a running process: the CLI adapters, the spawn invocation, the vanilla-hooks override, permission modes per run-mode, the model-agnostic context assembly, and cost tracking.
8
+
9
+ ---
10
+
11
+ ## โœฆ When to use this doc
12
+
13
+ - You want to understand **what command** Constella runs when an agent "thinks" or "builds".
14
+ - You need to know **why agents run vanilla** (no operator plugins/hooks leaking in).
15
+ - You're debugging permissions, timeouts, model selection, or cost rows.
16
+ - You're adding a new CLI adapter or HTTP runtime.
17
+
18
+ For the org/role side (who the agents are, their daily caps), see [AGENTS.md](./AGENTS.md). For the workflow they execute, see [WORKFLOW.md](./WORKFLOW.md).
19
+
20
+ ---
21
+
22
+ ## ๐Ÿ›ฐ๏ธ How it works (the big picture)
23
+
24
+ Every agent run โ€” a chat reply, a board task, or a CEO planning pass โ€” flows through the same three layers:
25
+
26
+ 1. **Context Manager** (`src/server/context-manager.ts`) assembles ONE standardized, model-agnostic prompt (mission, project state, decisions, conversation, RAG, memory, skills) and trims it to the agent's real context window.
27
+ 2. **Runtime resolver** (`src/server/runtime.ts`) decides *where* the prompt runs: a local **CLI** (the default โ€” subscription-backed, agentic, file-editing) or an **HTTP** provider (chat/reasoning only, when wired to a connected `http_*` provider).
28
+ 3. **CLI adapters** (`src/server/adapters/cli.ts`) spawn the actual binary, stream tool-use + text events back, and parse **real** usage + cost from the CLI's JSON output.
29
+
30
+ ```mermaid
31
+ flowchart TD
32
+ A["Trigger: chat / task / plan"] --> CM["Context Manager<br/>assembleAgentPrompt()"]
33
+ CM --> RT["resolveRuntime()"]
34
+ RT -->|"kind: cli"| CLI["adapters/cli.ts<br/>runAgentStream()"]
35
+ RT -->|"kind: http"| HTTP["adapters/http.ts<br/>runHttpStream()"]
36
+ CLI --> SPAWN["spawn('claude' | 'codex' | โ€ฆ)"]
37
+ SPAWN --> JSON["parse JSON โ†’ CliResult<br/>{ ok, text, usd, tokens }"]
38
+ HTTP --> JSON
39
+ JSON --> COST["insert costEntry<br/>(only if real usage)"]
40
+ JSON --> OUT["stream events โ†’ Team Room / dock"]
41
+ ```
42
+
43
+ ---
44
+
45
+ ## ๐Ÿช Main flow
46
+
47
+ The canonical agentic path is the CLI. `runAgent` / `runAgentStream` dispatch to a per-binary runner:
48
+
49
+ | Step | Where | What happens |
50
+ |------|-------|--------------|
51
+ | 1. Pick binary | `pickBinary(adapter, model)` | Maps the agent's adapter (`cli_claude_code`, `cli_codex`, โ€ฆ) to an executable name (`claude`, `codex`, `cursor-agent`, `kilocode`, โ€ฆ). |
52
+ | 2. Resolve cwd | `orgRoot(orgId)` | The agent's **FS jail** โ€” the org workspace dir. `mkdirSync(cwd, { recursive: true })`. |
53
+ | 3. Build argv | `claudePermArgs()`, `claudeSettingsArgs()`, `claudeWebArgs()` | Permission mode, vanilla-hooks settings overlay, optional web tools. |
54
+ | 4. Validate model | `safeModel()` / `safeModelSlash()` | Regex-validates the model id (it reaches argv on a `shell: true` Windows spawn) โ€” drops anything that could inject. |
55
+ | 5. Spawn | `runProc()` | `spawn(cmd, args, { cwd, shell, windowsHide, env })`; registers the child under its abort token. |
56
+ | 6. Stream / parse | `runClaudeStream` / per-binary parser | Emits `StreamEvent`s per tool_use + text delta; parses the final JSON for usage. |
57
+ | 7. Result | `CliResult` | `{ ok, text, usd, inputTokens, outputTokens, durationMs, binary, model, error }`. |
58
+ | 8. Book cost | caller (`collab` / `runner` / `planner-core`) | Inserts a `cost_entry` row **only if** `usd > 0` or tokens > 0. |
59
+
60
+ ---
61
+
62
+ ## ๐ŸŒ  Key concepts
63
+
64
+ ### CLI adapters (`src/server/adapters/cli.ts`)
65
+
66
+ The `CliBinary` union enumerates every executable Constella can drive:
67
+
68
+ ```
69
+ "claude" | "codex" | "openclaw" | "hermes"
70
+ | "aider" | "opencode" | "copilot" | "cursor-agent" | "cline" | "kilocode"
71
+ ```
72
+
73
+ `pickBinary(adapter, model)` resolves the agent's stored adapter to a binary. If the adapter is unknown, it heuristically picks `codex` for `gpt*`/`o1`/`o3`/`o4`/`codex*` models, otherwise `claude`. The fixed model lists each CLI exposes live in `CLI_MODELS`:
74
+
75
+ | Adapter | Binary | Models |
76
+ |---------|--------|--------|
77
+ | `cli_claude_code` | `claude` | `opus`, `sonnet`, `haiku` |
78
+ | `cli_codex` | `codex` | `gpt-5-codex`, `o4-mini` |
79
+ | `cli_openclaw` | `openclaw` | `(default)` + provider-prefixed ids |
80
+ | `cli_hermes` | `hermes` | `(default)` + provider-prefixed ids |
81
+ | `cli_aider` | `aider` | `(default)` + provider-prefixed ids |
82
+ | `cli_opencode` | `opencode` | `(default)` + provider-prefixed ids |
83
+ | `cli_copilot` | `copilot` | `(default)`, `claude-sonnet-4.5`, `gpt-5` |
84
+ | `cli_cursor` | `cursor-agent` | `(default)`, `claude-4.5-sonnet`, `gpt-5` |
85
+ | `cli_cline` | `cline` | `(default)` |
86
+ | `cli_kilo` | `kilocode` | `(default)` |
87
+
88
+ > Provider-routed CLIs (Aider, OpenCode, Copilot, Cursor, Cline, Kilo) authenticate via **their own** login/config โ€” Constella drives them, never holds their keys. Their headless modes emit **no** token/cost, so those are recorded as `0` (honest, never faked). `LOGIN_HINTS` maps each binary to the command that authenticates it, surfaced in the UI when `detectCliAuth()` returns `needs_login`.
89
+
90
+ ### The Claude spawn invocation ๐Ÿš€
91
+
92
+ The primary, fully-streamed path is `runClaudeStream`. It builds:
93
+
94
+ ```
95
+ claude -p --output-format stream-json --include-partial-messages --verbose \
96
+ [--settings <vanilla settings file>] \
97
+ --permission-mode <bypassPermissions|acceptEdits> \
98
+ [--allowedTools WebSearch WebFetch] \
99
+ [--model <opus|sonnet|haiku>]
100
+ ```
101
+
102
+ The non-streamed sibling `runClaude` uses `--output-format json` (single result object). Both pipe the assembled prompt to **stdin** and parse the result JSON:
103
+
104
+ ```js
105
+ ok: obj.is_error !== true && obj.subtype === "success",
106
+ text: String(obj.result ?? ""),
107
+ usd: Number(obj.total_cost_usd ?? 0),
108
+ inputTokens: usage.input_tokens + usage.cache_read_input_tokens + usage.cache_creation_input_tokens,
109
+ outputTokens: usage.output_tokens,
110
+ ```
111
+
112
+ Codex uses `codex exec --json --skip-git-repo-check -s <sandbox> [-m <model>]` and parses best-effort usage from its JSONL event stream.
113
+
114
+ ### Vanilla agents โ€” `disableAllHooks` ๐Ÿ•ณ๏ธ
115
+
116
+ Company agents must run **independent of the operator's personal `~/.claude`**. The operator may have UserPromptSubmit/SessionStart hooks or plugins (e.g. a "caveman mode" voice rewriter) that fire for **every** `claude` invocation โ€” including the headless agent subprocesses. Without isolation, the agents start talking like the operator's plugin instead of themselves.
117
+
118
+ Constella can't redirect `CLAUDE_CONFIG_DIR` (the subscription credentials live there โ€” redirecting it logs the agent out). Instead, `vanillaSettingsArgs()` writes a tiny file once and passes it:
119
+
120
+ ```json
121
+ { "disableAllHooks": true }
122
+ ```
123
+
124
+ โ†’ `--settings <tmpdir>/constella-agent-settings.json`. Hooks off, **auth intact**.
125
+
126
+ ### Opt-in clean-config isolation (lock + guard hooks)
127
+
128
+ When `CONSTELLA_AGENT_LOCK_HOOK=1` (or the per-workspace `settings.agents.fileLocks`) or the destructive-command guard is on, `agentClaudeDir()` builds a **dedicated clean config dir** under `<CONSTELLA_HOME>/.agent-claude`, copies in the operator's `.credentials.json` (to stay logged in), and writes a `settings.json` carrying ONLY Constella's `PreToolUse` hooks:
129
+
130
+ | Hook | Matcher | Binary |
131
+ |------|---------|--------|
132
+ | File lock (`bin/lock-hook.mjs`) | `Write\|Edit\|MultiEdit\|NotebookEdit` | gated by `lockHookOn()` |
133
+ | Command guard (`bin/guard-hook.mjs`) | `Bash` | gated by `guardHookOn()` (default ON, `CONSTELLA_AGENT_CMD_GUARD`) |
134
+
135
+ When this clean dir is active, `claudeSettingsArgs()` returns `[]` (the dir already carries settings โ€” don't ALSO pass `disableAllHooks`), and `claudeEnv()` injects `CLAUDE_CONFIG_DIR` plus the lock-hook identity (`CONSTELLA_ORG_ID`, `CONSTELLA_TASK_ID`, `CONSTELLA_AGENT_ID`, `CONSTELLA_AGENT_HANDLE`, `CONSTELLA_BASE_URL`). If creds can't be copied, it **falls back to vanilla** โ€” file-locking degrades, auth never breaks.
136
+
137
+ ### Permission modes by run-mode ๐Ÿ›ฐ๏ธ
138
+
139
+ `AGENT_FULL_ACCESS` is run-mode aware (`CONSTELLA_RUN_MODE`), overridable with `CONSTELLA_AGENT_FULL_ACCESS=1|0`:
140
+
141
+ | Run mode | `AGENT_FULL_ACCESS` | claude `--permission-mode` | codex `-s` sandbox |
142
+ |----------|---------------------|----------------------------|--------------------|
143
+ | `start` (local dev) | `true` | `bypassPermissions` (install + run tests) | `danger-full-access` |
144
+ | `auth` / `vps` / `portable` (prod) | `false` | `acceptEdits` (edits only, no net/exec) | `workspace-write` (no network) |
145
+
146
+ > Prod already runs inside Docker + Tailscale (the container is the hard jail). The CLI stays restricted on top for defense-in-depth.
147
+
148
+ ### Web research ๐ŸŒ 
149
+
150
+ `claudeWebArgs()` pre-approves the built-in web tools with `--allowedTools WebSearch WebFetch`. It's **additive** โ€” it does NOT restrict Read/Edit/Bash. Default **ON**; disable with `CONSTELLA_WEB_RESEARCH=0` or per-workspace `settings.agents.webResearch = false` (pushed by the runner via `setWebResearch` before each spawn).
151
+
152
+ ### Streaming events
153
+
154
+ `runClaudeStream` parses the `stream-json` line protocol and emits a `StreamEvent` per tool use and per text delta:
155
+
156
+ | `StreamEvent.kind` | Source tool |
157
+ |--------------------|-------------|
158
+ | `read` | `Read` |
159
+ | `create` | `Write` (with a content preview) |
160
+ | `edit` | `Edit` / `NotebookEdit` (a real `-`/`+` diff, โ‰ค80 lines) |
161
+ | `run` | `Bash` / `PowerShell` |
162
+ | `search` | `Glob` / `Grep` |
163
+ | `thinking` | extended-thinking blocks |
164
+ | `text` | streamed reply deltas (debounced ~120 chars) |
165
+ | `done` | run finished |
166
+
167
+ These events drive the live Team Room work-card (true diff view, not fabricated). The runner uses `create`/`edit` events to record file provenance for the goal.
168
+
169
+ ### Cancellation ๐Ÿ•ณ๏ธ
170
+
171
+ Runs register their child process under an **abort token** (= the `taskId`) in an `ACTIVE` map. `abortRun(token)` SIGKILLs the in-flight CLI mid-run (used by goal cancellation). A token cancelled in the claimโ†’spawn window is recorded in `ABORTED`, so a child that registers late **self-kills**. Default timeouts: 180s (`runClaude`/`runCodex`), 240s (`runClaudeStream`), 300s for a planning pass.
172
+
173
+ ---
174
+
175
+ ## ๐ŸŒŒ Context assembly (prompt gravity)
176
+
177
+ `assembleAgentPrompt()` (`src/server/context-manager.ts`) is the **single source of truth** for prompts โ€” used by chat (`collab.replyInChannel`) AND task execution (`runner`) so task agents are never context-blind. It is **model-agnostic**: the same bundle feeds Opus, Codex, or a local model; only the trim differs.
178
+
179
+ ### Budget & window
180
+
181
+ `resolveWindow()` prefers the dynamic catalog (`provider_model.context`) so a 1M-ctx model keeps full history; otherwise falls back to `modelWindow(model)`:
182
+
183
+ | Model alias | Window | keepRecent | aggressive |
184
+ |-------------|--------|------------|------------|
185
+ | `opus` / `sonnet` | 200,000 | 16 | no |
186
+ | `haiku` | 200,000 | 12 | no |
187
+ | `gpt*` / `codex` / `o3` / `o4` | 128,000 | 12 | yes |
188
+ | (other / local) | 100,000 | 8 | yes |
189
+
190
+ The prompt budget is **half** the window (`win.window * 0.5`) โ€” the other half is reserved for the model's reply. `estimateTokens(text)` โ‰ˆ `text.length / 4`.
191
+
192
+ ### Section priority (trimmed lowest-first)
193
+
194
+ A fixed **head** (identity + persona + `temperatureBehavior` + the instruction + the task) always survives. Then sections are added in priority order until the budget is hit; lower-priority sections are **skipped** when over budget:
195
+
196
+ ```mermaid
197
+ flowchart TD
198
+ H["HEAD (always kept)<br/>You are @handle, the role.<br/>persona ยท temperature ยท instruction ยท TASK"] --> S1["Canonical project facts<br/>(synced knowledge blocks)"]
199
+ S1 --> S2["Core skills for role + stack<br/>(pinned, โ‰ค10)"]
200
+ S2 --> S3["Project state<br/>(issues ยท my tasks ยท decisions)"]
201
+ S3 --> S4["More skills (long tail, โ‰ค30)"]
202
+ S4 --> S5["Recent conversation"]
203
+ S5 --> S6["Earlier conversation (compacted)"]
204
+ S6 --> S7["Knowledge โ€” RAG/KB (kbQuery k=6)"]
205
+ S7 --> S8["Relevant memory (.claude/memory.md)"]
206
+ S8 --> S9["Company background<br/>(mission ยท objective ยท stack)"]
207
+ style H fill:#1b2a4a,color:#fff
208
+ style S9 fill:#3a1b2a,color:#fff
209
+ ```
210
+
211
+ Each section is sourced from real state:
212
+
213
+ - **Canonical facts** โ€” `canonicalFactsSection()` (synced knowledge blocks, treated as authoritative). See [SYNCED_BLOCKS.md](./SYNCED_BLOCKS.md).
214
+ - **Skills** โ€” `agentSkills()` joins `agent_skill โ†’ skill`, ranks by `coreSkillNamesForRole` / `librarySkillNamesForStack`, pins โ‰ค10 core, caps โ‰ค30 tail. See [SKILLS.md](./SKILLS.md).
215
+ - **Project state** โ€” open issues, this agent's active tasks, team tasks, specs, recent `decision` rows. See [GOALS_SPECS_ISSUES.md](./GOALS_SPECS_ISSUES.md).
216
+ - **Conversation** โ€” `buildChannelContext()` returns `{ summary, recent }` (compaction handles the long tail). See [DM.md](./DM.md) / [TEAM_ROOM.md](./TEAM_ROOM.md).
217
+ - **Knowledge** โ€” `kbQuery(orgId, query, { k: 6 })`, state-aware (drops obsolete/superseded). See [KB_RAG.md](./KB_RAG.md) / [MEMORY_RAG.md](./MEMORY_RAG.md).
218
+ - **Memory** โ€” `.claude/memory.md`, capped 1500 chars.
219
+
220
+ Finally `resolveBlocks()` expands any `{{kb:slug}}` markers to the current canonical block bodies. The function returns `{ prompt, sources }` โ€” `sources` becomes the message's source chips.
221
+
222
+ ---
223
+
224
+ ## ๐Ÿช Runtime resolution
225
+
226
+ `resolveRuntime(workspaceId, agent)` returns `{ kind: "cli", binary }` or `{ kind: "http", http }`:
227
+
228
+ | Adapter prefix | Runtime | Notes |
229
+ |----------------|---------|-------|
230
+ | `local_*` | HTTP (loopback) | llama.cpp `:8082` (primary) or Ollama `:11434` (`local_ollama`, legacy), OpenAI-compatible `/v1`. Chat/reasoning only โ€” file editing stays on CLIs. |
231
+ | `http_*` (configured + key present) | HTTP API | `provider`/`baseUrl`/`apiKey` from the `provider` table + Vault; `google` vs `openai` shape. |
232
+ | `http_*` (not configured) | **falls back** to CLI | so the agent still works. |
233
+ | everything else | CLI | `pickBinary(adapter, model)`. |
234
+
235
+ `runAgentRuntime()` then streams via `runHttpStream` or `runAgentStream`. The Context Manager produced a model-agnostic prompt, so **either runtime gets the same context**. See [MODELS.md](./MODELS.md) and [AI_ARCHITECTURE.md] (this doc).
236
+
237
+ ---
238
+
239
+ ## ๐Ÿ›ฐ๏ธ Cost tracking (`cost_entry`)
240
+
241
+ Cost is **real** โ€” pulled from the CLI's JSON (`total_cost_usd`, `usage`). A row is inserted **only when** the run produced usage (`res.usd > 0 || inputTokens + outputTokens > 0`):
242
+
243
+ | Column | Type | Meaning |
244
+ |--------|------|---------|
245
+ | `id` | text (PK) | row id |
246
+ | `workspace_id` | text | owning workspace (cascade) |
247
+ | `agent_id` | text | which agent spent |
248
+ | `provider` | text | the `binary` that ran (`claude`, `codex`, โ€ฆ) |
249
+ | `model` | text | resolved model |
250
+ | `usd` | real | real cost (0 for CLIs that don't emit cost) |
251
+ | `tokens` | integer | `inputTokens + outputTokens` |
252
+ | `at` | timestamp | when |
253
+
254
+ The same row shape is written from `collab.ts`, `runner.ts`, and `planner-core.ts`. Daily caps are enforced by summing `cost_entry.usd` for the agent since midnight (`agentAtCap`): a task or chat is **gated** when `total >= agent.dailyCapUsd`, and a `budget` Inbox item is surfaced. See [AGENTS.md](./AGENTS.md) for per-agent caps.
255
+
256
+ > Provider-routed CLIs and local/HTTP runtimes that emit no usage record `usd: 0` and `tokens: 0` โ€” never a guessed number.
257
+
258
+ ---
259
+
260
+ ## ๐ŸŒ  Step-by-step: a task execution run
261
+
262
+ 1. The cron tick / runner claims a `todo`/`doing` task; budget + goal-active gates pass.
263
+ 2. `pickBinary` + availability check (`binaryAvailable`); agent โ†’ `working`, linked issue โ†’ `doing`.
264
+ 3. `assembleAgentPrompt({ orgId, ws, agent, channel:"room", instruction: TASK_INSTRUCTION, task })`.
265
+ 4. Per-spawn flags pushed: `setLockHook`, `setGuardHook`, `setWebResearch` (from `ws.settings.agents.*`).
266
+ 5. `runAgentStream(prompt, { binary, model: modelAlias(...), timeoutMs: 240_000, token: t.id, agentId, agentHandle }, onEvent)`.
267
+ 6. Stream events tick the TODO checklist live, record touched files, and emit to the Team Room.
268
+ 7. On completion: book `cost_entry`; parse `[[KB-BLOCK]]`, `[[REMEMBER]]`, `[[RESEARCH]]` tokens; run boot gate + Test Dev gate; advance the column.
269
+
270
+ ## Step-by-step: a chat reply
271
+
272
+ 1. `replyInChannel(orgId, ws, channel, agent, mode)` builds the role instruction (chat vs work) + the KB/consult/language/security clauses.
273
+ 2. `assembleAgentPrompt(...)` โ†’ model-agnostic prompt + `sources`.
274
+ 3. `resolveRuntime` โ†’ CLI or HTTP; `runAgentRuntime` streams events to the operator.
275
+ 4. Strip `[[CREATE_WORK]]` (new-work signal), `[[REMEMBER]]`, `[[CONSULT]]`, `[[KB:]]` tokens; `scrubSecrets` the reply.
276
+ 5. Persist the `message` (+ `sources`), post KB consult answers as Vannevar, book cost.
277
+
278
+ ---
279
+
280
+ ## ๐Ÿช Examples
281
+
282
+ **Vanilla Claude task run (start mode, full access):**
283
+ ```
284
+ claude -p --output-format stream-json --include-partial-messages --verbose \
285
+ --settings /tmp/constella-agent-settings.json \
286
+ --permission-mode bypassPermissions \
287
+ --allowedTools WebSearch WebFetch \
288
+ --model sonnet
289
+ ```
290
+
291
+ **Jailed prod run (vps mode, edits only):**
292
+ ```
293
+ claude -p --output-format stream-json --include-partial-messages --verbose \
294
+ --settings /tmp/constella-agent-settings.json \
295
+ --permission-mode acceptEdits
296
+ ```
297
+
298
+ **Codex task run (jailed):**
299
+ ```
300
+ codex exec --json --skip-git-repo-check -s workspace-write -m gpt-5-codex
301
+ ```
302
+
303
+ **Probe a CLI's availability / auth:**
304
+ ```
305
+ claude --version # cliVersion("claude")
306
+ opencode auth list # detectCliAuth("opencode")
307
+ ```
308
+
309
+ ---
310
+
311
+ ## ๐Ÿ•ณ๏ธ Possible states
312
+
313
+ | State | Where | Meaning |
314
+ |-------|-------|---------|
315
+ | `CliResult.ok = true` | adapter | `is_error !== true` and (claude) `subtype === "success"`, or exit 0 with text |
316
+ | `CliResult.ok = false` | adapter | error / non-zero exit / no JSON; `error` carries the last ~300 stderr chars |
317
+ | `timedOut` | `runProc` | SIGKILL fired at the timeout; `base(...)` returns `"timed out"` |
318
+ | aborted | `abortRun` | the run's child SIGKILLed mid-flight (goal cancelled) |
319
+ | `AuthState` | `detectCliAuth` | `ready` / `needs_login` / `needs_key` / `unknown` (never fabricates `ready`) |
320
+ | runtime `cli` / `http` | `resolveRuntime` | which engine ran the prompt |
321
+
322
+ ---
323
+
324
+ ## ๐Ÿ›ฐ๏ธ Related integrations
325
+
326
+ - **Vault** โ€” HTTP/`http_*` provider keys are read via `getSecret` (AES-256-GCM). See [CONFIGURATION.md](./CONFIGURATION.md).
327
+ - **RAG / KB** โ€” `kbQuery` feeds the Knowledge section; chat transcripts get re-indexed. See [KB_RAG.md](./KB_RAG.md).
328
+ - **Skills** โ€” pinned/tail skills are linked per agent. See [SKILLS.md](./SKILLS.md).
329
+ - **Synced blocks** โ€” canonical facts + `{{kb:slug}}` resolution. See [SYNCED_BLOCKS.md](./SYNCED_BLOCKS.md).
330
+ - **Models** โ€” local + catalog model selection. See [MODELS.md](./MODELS.md).
331
+ - **Plugins** โ€” Web Search is a native plugin gating `claudeWebArgs`. See [PLUGINS.md](./PLUGINS.md).
332
+
333
+ ---
334
+
335
+ ## ๐Ÿš€ Security
336
+
337
+ - **FS jail** โ€” every CLI runs with `cwd = orgRoot(orgId)`; agents read/edit only inside the org workspace. See [SECURITY.md](./SECURITY.md).
338
+ - **Model-id injection guard** โ€” `safeModel` / `safeModelSlash` regex-validate model ids before they reach argv on a `shell: true` Windows spawn (a value like `sonnet"; rm -rf ~` is dropped).
339
+ - **shell:false for git/gh** โ€” real executables run with `shell: false` so client-influenced branch/message/path args can't be re-parsed by a shell.
340
+ - **Vanilla hooks** โ€” `disableAllHooks` keeps an operator's plugins/hooks out of agent runs (voice + behavior isolation).
341
+ - **Command guard** โ€” `bin/guard-hook.mjs` (default ON) blocks catastrophic shell (`rm -rf /`, force-push, `mkfs`, fork-bomb).
342
+ - **Permission jail in prod** โ€” `acceptEdits` (no net/arbitrary exec) on top of Docker + Tailscale.
343
+ - **Secret scrub** โ€” chat replies pass through `scrubSecrets` before they're stored / shown / sent to Telegram.
344
+ - **Prompt-injection hardening** โ€” Telegram + attached-file clauses mark operator input as DATA, never instructions.
345
+
346
+ ---
347
+
348
+ ## ๐ŸŒŒ Troubleshooting
349
+
350
+ | Symptom | Likely cause | Fix |
351
+ |---------|--------------|-----|
352
+ | Agent "couldn't respond" / no output | CLI not installed or not logged in | `cliVersion(...)`; follow `LOGIN_HINTS` (e.g. sign in to Claude Code) |
353
+ | Agents talk in the operator's plugin "voice" | hooks leaked in | confirm `disableAllHooks` overlay is applied (vanilla path) |
354
+ | Agent can't install deps / run tests | jailed permission mode | run-mode is prod (`acceptEdits`); set `CONSTELLA_AGENT_FULL_ACCESS=1` if intended |
355
+ | No web search | web research off | unset `CONSTELLA_WEB_RESEARCH=0` or enable `settings.agents.webResearch` |
356
+ | `cost_entry` rows always `usd:0` | provider-routed/local CLI emits no cost | expected โ€” Constella never fakes cost |
357
+ | Run killed at ~3-4 min | timeout (180s/240s/300s) | large work should be split across tasks |
358
+ | File edits blocked | lock hook (parallel-agent locking) | another agent holds the lock; see [SECURITY.md](./SECURITY.md) |
359
+ | Agent logged out after enabling locks | creds copy failed | check `~/.claude/.credentials.json` exists; it falls back to vanilla otherwise |
360
+
361
+ ---
362
+
363
+ ## ๐Ÿช Related links
364
+
365
+ - [ARCHITECTURE.md](./ARCHITECTURE.md) โ€” the control plane, processes, runtime root
366
+ - [AGENTS.md](./AGENTS.md) โ€” roster, roles, daily caps, status/health
367
+ - [WORKFLOW.md](./WORKFLOW.md) โ€” the work lifecycle agents execute
368
+ - [MODELS.md](./MODELS.md) โ€” model catalog, local models, HTTP providers
369
+ - [SKILLS.md](./SKILLS.md) โ€” skill library + per-agent linking
370
+ - [KB_RAG.md](./KB_RAG.md) ยท [MEMORY_RAG.md](./MEMORY_RAG.md) โ€” the memory nebula
371
+ - [SYNCED_BLOCKS.md](./SYNCED_BLOCKS.md) โ€” canonical facts in context
372
+ - [SECURITY.md](./SECURITY.md) โ€” FS jail, vault, guards, hooks
373
+ - [CONFIGURATION.md](./CONFIGURATION.md) โ€” env vars + per-workspace settings