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,305 @@
1
+ [← Docs index](./README.md) · [🇧🇷 Português](../pt/CHAT_COMMANDS.md) · [✦ Constella](../../README.md)
2
+
3
+ # 🛰️ Chat Commands
4
+
5
+ ![](../assets/divider-orbit.svg)
6
+
7
+ > Slash commands are the control panel of the central ship. Type a `/command` in the Team Room or any DM and the server runs a real action server-side, then posts the result back into the same thread — no agent round-trip required.
8
+
9
+ ---
10
+
11
+ ## 2. Short description
12
+
13
+ Chat slash commands are parsed from a leading `/` in the message-send path. They are intercepted **before** the normal conversational path (the `[[CREATE_WORK]]` token and `@mention` routing) and executed by `runSlashCommand` in `src/server/commands.ts`. Each command posts its result straight into the active channel; a handful also hand off to an agent who replies next.
14
+
15
+ ---
16
+
17
+ ## 3. When to use
18
+
19
+ Use slash commands when you want a **deterministic, immediate action** rather than a conversation:
20
+
21
+ - Drive the work lifecycle without prose: `/approve`, `/run-247`, `/pause`, `/reject`, `/cancel`, `/archive`.
22
+ - Query the constellation's state at a glance: `/status`, `/agents`, `/agent`, `/locks`, `/models`, `/skills`, `/telegram`.
23
+ - Tap the memory nebula: `/kb`, `/search`, `/graph`, `/reindex`, `/curate`.
24
+ - Trigger gates and pipelines: `/test-dev`, `/review`, `/github`, `/prepare-deploy`, `/export-source`.
25
+ - Seed new work or board items: `/new-goal`, `/new-issue`, `/new-spec`, `/generate-plan`, `/assign`, `/close-sprint`.
26
+
27
+ For free-form requests ("build me a billing page"), just talk to **@ada** in the Team Room or use `/new-goal` — see [DM.md](./DM.md) and [WORKFLOW.md](./WORKFLOW.md).
28
+
29
+ ---
30
+
31
+ ## 4. How it works 🌌
32
+
33
+ The send path lives in `src/server/chat.ts`. After resolving the org, workspace and agent roster, it inspects the trimmed message text:
34
+
35
+ ```ts
36
+ // src/server/chat.ts — slash commands (room + DM, not Telegram)
37
+ const trimmed = (text ?? "").trim();
38
+ if (trimmed.startsWith("/") && channel !== "telegram") {
39
+ const { runSlashCommand } = await import("@/server/commands");
40
+ const r = await runSlashCommand(org.id, workspace.id, agents, channel, trimmed);
41
+ if (r.handled) { revalidatePath("/", "layout"); return { responders: r.responders }; }
42
+ }
43
+ ```
44
+
45
+ Key facts grounded in the code:
46
+
47
+ - **Channels**: slash commands are honoured in the **Team Room** (`room`) and **DMs** (`dm:<handle>`). They are **not** parsed in the `telegram` channel — Telegram has its own remote-control command handler (`handleCommand` in `src/server/telegram.ts`). See [TELEGRAM.md](./TELEGRAM.md).
48
+ - **Parsing**: `runSlashCommand` splits on the first space. The token before the space is lower-cased into `cmd`; everything after is trimmed into `rest` (the argument).
49
+ - **Echo + reply**: most commands first echo your raw input with `postOp(...)` (as the operator), then post a result with `post(...)`. The result author is usually `system`, but several commands post **as a specific agent** (e.g. Vannevar, Edsger, Werner, Donald, Ada).
50
+ - **Responders**: `runSlashCommand` returns `{ handled, responders }`. A non-empty `responders` array means the named agent(s) should reply next — used by `/new-goal`, `/review`.
51
+ - **Wake**: every handled command calls `wake(wsId)` (via the internal `done()` helper) to nudge the worker/bus.
52
+ - **Sessions**: `ensureActiveSession(wsId, channel)` attaches the result to the channel's active `chatSession`.
53
+
54
+ ### Room auto-routing
55
+
56
+ In the Team Room, plain text that is **not** a `/command` and **not** an `@mention` is auto-prefixed to `/kb` before sending (see `welcome-chat.tsx` and `home-command-bar.tsx`). So typing `how does auth work?` in the room is equivalent to `/kb how does auth work?`. In a DM, text is sent as-is to that agent.
57
+
58
+ ### Home command bar
59
+
60
+ The Welcome Home command bar (`src/components/modules/home-command-bar.tsx`) reuses the same dispatch and shows an autocomplete menu for a curated subset: `/kb`, `/status`, `/new-goal`, `/agents`, `/reindex`, `/curate`, `/help`. The full command set below works in any room/DM input regardless of the menu.
61
+
62
+ ---
63
+
64
+ ## 5. Main flow
65
+
66
+ ```mermaid
67
+ flowchart TD
68
+ A["Operator types a message"] --> B{"starts with '/'\nand channel != telegram?"}
69
+ B -- "no" --> C["Normal path:\n@mention routing / KB auto-route"]
70
+ B -- "yes" --> D["runSlashCommand(orgId, wsId, agents, channel, raw)"]
71
+ D --> E["ensureActiveSession + split cmd / rest"]
72
+ E --> F{"switch (cmd)"}
73
+ F --> G["postOp: echo operator input"]
74
+ G --> H["Run the action\n(plan-ops / work-ops / kb / rag / github / …)"]
75
+ H --> I["post result as system or a named agent"]
76
+ I --> J["done(): wake(wsId)\nreturn { handled:true, responders }"]
77
+ J --> K{"responders non-empty?"}
78
+ K -- "yes" --> L["Agent replies next\n(ada / reviewer)"]
79
+ K -- "no" --> M["Thread updated; no agent turn"]
80
+ ```
81
+
82
+ ---
83
+
84
+ ## 6. Key concepts 🪐
85
+
86
+ | Concept | Meaning |
87
+ | --- | --- |
88
+ | `cmd` | The lower-cased token before the first space (e.g. `/approve`). |
89
+ | `rest` | Trimmed text after the first space — the command argument. |
90
+ | `responders` | Agent handles that should reply after the command (handoff). |
91
+ | `postOp` | Inserts your raw input as a `fromKind: operator` message. |
92
+ | `post` | Inserts the result as `fromKind: agent` with a `fromHandle` (often `system`). |
93
+ | `kind` | Optional message render hint: `kb-card`, `agent-card`, `cleared`. |
94
+ | `sources` | Citation references attached to KB answers. |
95
+ | `done()` | Internal helper: calls `wake(wsId)` and returns `{ handled:true, responders }`. |
96
+
97
+ ---
98
+
99
+ ## 7. The command catalogue (one big table) ✦
100
+
101
+ Every command parsed by `runSlashCommand`, grouped by category. "Responds as" is the `fromHandle` of the result message; "Hands off" is the agent in the returned `responders` array (replies next).
102
+
103
+ ### Help & info
104
+
105
+ | Command (aliases) | Args | What it does | Responds as | Hands off |
106
+ | --- | --- | --- | --- | --- |
107
+ | `/help` | — | Posts the full command list. | `system` | — |
108
+ | `/status` | — | Counts active goals, open issues (col ≠ `done`) and tasks in flight (col = `doing`). | `system` | — |
109
+ | `/agents` | — | Lists the roster: `@handle — name (role, status)`. | `system` | — |
110
+ | `/agent <handle>` | `<handle>` (with or without `@`) | Inspects one agent: name, role, status, health, runtime (adapter / model) + link to Agent Studio. | the agent's own handle (card) | — |
111
+
112
+ ### Knowledge & memory nebula 🌠
113
+
114
+ | Command (aliases) | Args | What it does | Responds as | Hands off |
115
+ | --- | --- | --- | --- | --- |
116
+ | `/kb` (`/ask-kb`) | `<question>` | Asks the Knowledge Base via `kbAnswer`; answers with references (`sources`). Overview answers render as a `kb-card`. Schedules a chat reindex. | `vannevar` | — |
117
+ | `/search <q>` | `<query>` | Same engine as `/kb` (`kbAnswer`) — a search-flavoured alias with its own empty-arg prompt. | `vannevar` | — |
118
+ | `/graph <key>` | spec key, issue key, or goal-title substring | Resolves the seed (spec → issue → goal) and shows connected knowledge via `relatedKnowledge`, grouped by type. | `vannevar` | — |
119
+ | `/reindex` | — | Rebuilds the RAG/KB index now (`indexRag`); reports chunk count and whether semantic or keyword-fallback. | `vannevar` | — |
120
+ | `/curate` | — | Runs Vannevar's KB curation pass (`runKbCuration`): dedup / retire / re-summarise / find gaps. Budget-gated. Details to `Reports/kb-health.md`. | `vannevar` | — |
121
+
122
+ ### Work lifecycle 🚀
123
+
124
+ | Command (aliases) | Args | What it does | Responds as | Hands off |
125
+ | --- | --- | --- | --- | --- |
126
+ | `/new-goal` (`/new-work`) | `<brief>` | Hands the brief to the CEO via the normal new-work pipeline (re-sends as `@ada <brief>`). Schedules a chat reindex. | (operator echo) | `ada` |
127
+ | `/generate-plan` | `<brief>` (optional) | Calls `generatePlanFor` — drafts specs → issues → TODOs into the CEO Planner for approval. | `ada` | — |
128
+ | `/approve` | — | Approves the pending plan (`approvePlanFor`) and queues tasks; reports the count. | `system` | — |
129
+ | `/reject` | `<reason>` (optional) | Sends the plan back to the CEO (`requestPlanChangesFor`); records the reason if given. | `system` | — |
130
+ | `/run-247` (`/resume`) | — | Turns 24/7 autonomous execution **ON** (`setAuto247For(..., true)`). | `system` | — |
131
+ | `/pause` | — | Turns 24/7 autonomous execution **OFF** (`setAuto247For(..., false)`). | `system` | — |
132
+ | `/cancel` | — | Cancels the most recent **active** goal (`cancelGoalFor`); execution stops. | `system` | — |
133
+ | `/archive` | — | Archives the most recent **active** goal (`archiveGoalFor`); reports the archive path. | `system` | — |
134
+ | `/close-sprint` | — | Closes the sprint (`closeSprintFor`): counts shipped vs carried, writes a retro file. | `donald` | — |
135
+
136
+ ### Board items
137
+
138
+ | Command (aliases) | Args | What it does | Responds as | Hands off |
139
+ | --- | --- | --- | --- | --- |
140
+ | `/new-issue <title>` | `<title>` | Creates a single issue (`col: todo`, `prio: med`) with an auto-incremented numeric key. | `system` | — |
141
+ | `/new-spec <title>` | `<title>` | Creates a single spec with key `SPEC-NN` (zero-padded). | `system` | — |
142
+ | `/assign <issue> <@agent>` | `<issue-key> <@agent>` | Sets `issue.assigneeId` to the named agent. | `system` | — |
143
+
144
+ ### Gates, pipelines & integrations 🛰️
145
+
146
+ | Command (aliases) | Args | What it does | Responds as | Hands off |
147
+ | --- | --- | --- | --- | --- |
148
+ | `/test-dev` | — | Runs the Test Dev validation gate (`runTestDevAction`); reports `PASS`/`FAIL`/`INCONCLUSIVE` + summary. | `edsger` | — |
149
+ | `/review` | `<note>` (optional) | Picks a reviewer (CyberSec/QA role, else `whitfield`) and asks them to review recent board changes. | (operator echo) | the reviewer (e.g. `whitfield`) |
150
+ | `/github` | — | Refreshes the repository status (`refreshGitStatus`); reports the count of changed files. | `werner` | — |
151
+ | `/prepare-deploy` | — | Runs the Prepare-Deploy pipeline (`runDeployPipeline`); reports status + summary. | `werner` | — |
152
+ | `/export-source <repo>` | `<github-repo>` | Exports the clean product source to a separate repo (`exportCleanSource`); blocks on secret findings. | `werner` | — |
153
+ | `/telegram` | — | Reports Telegram integration status (`getTelegramConfig`). | `system` | — |
154
+ | `/models` | — | Reports local-model status: llama.cpp (`llamaServerStatus`) + Ollama (`ollamaInfo`). | `system` | — |
155
+ | `/skills` | — | Reports the skills library size + a sample of names (`allLibrarySkillNames`). | `system` | — |
156
+ | `/locks` | — | Lists file locks currently held (`activeLocks`): `path — @agent`. | `system` | — |
157
+
158
+ ### Maintenance
159
+
160
+ | Command (aliases) | Args | What it does | Responds as | Hands off |
161
+ | --- | --- | --- | --- | --- |
162
+ | `/clear` | `confirm` \| `yes` \| `sim` | Permanently deletes EVERY message, the compacted summary and run events **for this channel**. Requires a confirm token; otherwise posts a warning. Board/goals/specs/KB are NOT affected. | `system` (`cleared` kind) | — |
163
+ | _unknown_ | — | Any other `/token` echoes and replies `Unknown command — Try /help`. | `system` | — |
164
+
165
+ ---
166
+
167
+ ## 8. Aliases at a glance
168
+
169
+ | Canonical | Aliases |
170
+ | --- | --- |
171
+ | `/kb` | `/ask-kb` |
172
+ | `/new-goal` | `/new-work` |
173
+ | `/run-247` | `/resume` |
174
+
175
+ > Note: `/cancel` and `/archive` share one `case` block but are **distinct** commands (different effects), not aliases of each other.
176
+
177
+ ---
178
+
179
+ ## 9. Step-by-step
180
+
181
+ ### Approve a plan and start the team
182
+
183
+ 1. In the Team Room, type `/approve`.
184
+ 2. The server runs `approvePlanFor` and posts `✅ Plan approved — N task(s) queued.` as `system`.
185
+ 3. Type `/run-247` to flip 24/7 autonomous execution ON.
186
+ 4. Watch progress with `/status` and `/locks`.
187
+
188
+ ### Ask the memory nebula
189
+
190
+ 1. Type `/kb how does the calculation engine work?` (or just the plain question in the room).
191
+ 2. Vannevar answers with `sources`; an overview answer renders as a `kb-card`.
192
+ 3. If knowledge feels stale, run `/reindex`, then `/curate`.
193
+
194
+ ### Inspect a working constellation
195
+
196
+ 1. `/agents` to see the roster.
197
+ 2. `/agent margaret` for runtime details + an Agent Studio link.
198
+ 3. `/locks` to see which files agents are holding.
199
+
200
+ ---
201
+
202
+ ## 10. Examples
203
+
204
+ ```text
205
+ /help
206
+ /status
207
+ /agents
208
+ /agent ada
209
+ /kb how does auth work?
210
+ /ask-kb where are sessions stored?
211
+ /search rate limiting
212
+ /graph SPEC-01
213
+ /reindex
214
+ /curate
215
+ /new-goal a billing page with Stripe checkout
216
+ /new-work add 2FA to the login screen
217
+ /generate-plan migrate the database to Postgres
218
+ /approve
219
+ /reject the spec is missing the refund flow
220
+ /run-247
221
+ /resume
222
+ /pause
223
+ /cancel
224
+ /archive
225
+ /new-issue add a logout button
226
+ /new-spec billing architecture
227
+ /assign 3 @margaret
228
+ /test-dev
229
+ /review focus on the new payment endpoint
230
+ /github
231
+ /prepare-deploy
232
+ /export-source myorg/constella-public
233
+ /telegram
234
+ /models
235
+ /skills
236
+ /locks
237
+ /close-sprint
238
+ /clear
239
+ /clear confirm
240
+ ```
241
+
242
+ ---
243
+
244
+ ## 11. Possible states 🕳️
245
+
246
+ | Situation | What you see |
247
+ | --- | --- |
248
+ | Empty arg on a command that needs one | A usage hint (e.g. `Ask a question, e.g. /kb …`). |
249
+ | `/agent <handle>` not on roster | `No agent @handle on the roster. Use /agents …`. |
250
+ | `/cancel` / `/archive` with no active goal | `No active goal to cancel/archive.`. |
251
+ | `/assign` malformed | `Usage: /assign <issue-key> <@agent> …`. |
252
+ | `/assign` unknown issue / agent | `No issue #key …` / `No agent @handle …`. |
253
+ | `/graph` no match | `No goal / spec / issue matches …`. |
254
+ | `/graph` match but no connections yet | `No connected knowledge for … yet`. |
255
+ | `/reindex` with embed server down | `… (keyword fallback — embed server down).`. |
256
+ | `/curate` nothing to do / no budget | `Nothing to curate right now …`. |
257
+ | `/export-source` blocked by secrets | `🛑 Export blocked — N secret finding(s).`. |
258
+ | `/clear` without confirm | A `⚠️` warning; nothing deleted. |
259
+ | Unknown command | `Unknown command — Try /help`. |
260
+
261
+ ---
262
+
263
+ ## 12. Related integrations
264
+
265
+ - **Plan / work ops** — `/approve`, `/reject`, `/run-247`, `/pause` call shared cores in `src/server/plan-ops.ts` and `src/server/work-ops.ts`, the same ones used by the [Public API](./PUBLIC_API.md) and [Telegram](./TELEGRAM.md).
266
+ - **Knowledge Base / RAG** — `/kb`, `/search`, `/graph`, `/reindex`, `/curate` route into [KB_AGENT.md](./KB_AGENT.md), [KB_RAG.md](./KB_RAG.md) and [MEMORY_RAG.md](./MEMORY_RAG.md).
267
+ - **Pipelines** — `/test-dev` → [TEST_DEV.md](./TEST_DEV.md); `/prepare-deploy` + `/export-source` → [PREPARE_DEPLOY.md](./PREPARE_DEPLOY.md) and [DEPLOY.md](./DEPLOY.md); `/github` → [GITHUB.md](./GITHUB.md).
268
+ - **Models & skills** — `/models` → [MODELS.md](./MODELS.md); `/skills` → [SKILLS.md](./SKILLS.md).
269
+
270
+ ---
271
+
272
+ ## 13. Security 🔒
273
+
274
+ - Slash commands run **server-side** under the operator's session — the message-send path resolves the org/workspace before dispatch.
275
+ - `/clear` is the only destructive command on conversation data and is **double-gated** (requires `confirm`/`yes`/`sim`). It never touches board work, goals, specs or the KB.
276
+ - `/export-source` is **secret-scan gated** — it refuses to push if findings exist (see [SECURITY.md](./SECURITY.md)).
277
+ - Telegram does **not** share this parser; its remote commands run through a separate allowlisted handler — see [TELEGRAM.md](./TELEGRAM.md).
278
+ - Result text is truncated to 4000 chars on insert (`text.slice(0, 4000)`).
279
+
280
+ ---
281
+
282
+ ## 14. Troubleshooting
283
+
284
+ | Symptom | Likely cause / fix |
285
+ | --- | --- |
286
+ | `/command` was treated as plain text | You typed it in the **Telegram** channel (uses a different handler) or with a leading space. Slash must be the first character. |
287
+ | Plain text in the room "became" a `/kb` query | Expected: room auto-routes non-command, non-mention text to `/kb`. Prefix with `@handle` to talk to an agent instead. |
288
+ | `/reindex` says "keyword fallback" | The embed server is down — start it (see [MEMORY_RAG.md](./MEMORY_RAG.md)). KB still works via keyword search. |
289
+ | `/approve` / `/cancel` says "No workspace/active goal" | There is no pending plan or active goal yet — create work with `/new-goal` first. |
290
+ | `/curate` does nothing | Needs a few KB entries **and** available budget. |
291
+ | Unknown command | Check spelling and aliases above, or run `/help`. |
292
+
293
+ ---
294
+
295
+ ## 15. Related links
296
+
297
+ - [DM.md](./DM.md) — direct messages with a single agent
298
+ - [TEAM_ROOM.md](./TEAM_ROOM.md) — the shared room and @mention routing
299
+ - [WORKFLOW.md](./WORKFLOW.md) — Goal → Spec → Issue → Plan → Execution lifecycle
300
+ - [GOALS_SPECS_ISSUES.md](./GOALS_SPECS_ISSUES.md) — board items created by `/new-issue` / `/new-spec`
301
+ - [AGENTS.md](./AGENTS.md) — the roster behind `/agents` and `/agent`
302
+ - [KB_AGENT.md](./KB_AGENT.md) · [KB_RAG.md](./KB_RAG.md) · [MEMORY_RAG.md](./MEMORY_RAG.md) — the memory nebula behind `/kb`, `/search`, `/graph`, `/reindex`, `/curate`
303
+ - [TEST_DEV.md](./TEST_DEV.md) · [PREPARE_DEPLOY.md](./PREPARE_DEPLOY.md) · [GITHUB.md](./GITHUB.md) — the gates behind `/test-dev`, `/prepare-deploy`, `/github`
304
+ - [TELEGRAM.md](./TELEGRAM.md) — the separate remote-control command set
305
+ - [PUBLIC_API.md](./PUBLIC_API.md) — the same plan/work ops over HTTP
@@ -0,0 +1,340 @@
1
+ [← Docs index](./README.md) · [🇧🇷 Português](../pt/CONFIGURATION.md) · [✦ Constella](../../README.md)
2
+
3
+ # Configuration ✦ 🪐
4
+
5
+ ![](../assets/divider-orbit.svg)
6
+
7
+ > Every knob that steers the central ship: environment variables, the `<HOME>/.env` secrets file, the encrypted vault for provider keys, local-model ports, and the JSON `settings` carried on the workspace row.
8
+
9
+ Constella is configured at three altitudes, each with its own gravity well:
10
+
11
+ 1. **Launch flags** — picked once by `bin/constella.mjs` (run mode, host, port, runtime root).
12
+ 2. **Environment variables** — read at boot by the server and worker; secrets are persisted to `<HOME>/.env`.
13
+ 3. **Workspace settings** — runtime toggles stored as JSON on the `workspace.settings` column, editable from the Config UI without a restart.
14
+
15
+ Nothing here is faked: every variable below is read by real code in the paths cited.
16
+
17
+ ---
18
+
19
+ ## 1. When to use 🛰️
20
+
21
+ | You want to… | Reach for |
22
+ | --- | --- |
23
+ | Change run mode (start/auth/vps/portable) | A launch flag (`--start`, `--auth`, `--vps`, `--portable`) → `CONSTELLA_RUN_MODE` |
24
+ | Move the runtime root off `~/.constella` | `CONSTELLA_HOME` or `--path <dir>` |
25
+ | Bind to a different host/port | `--host` / `--port` (or `PORT`) |
26
+ | Store a provider API key / GitHub PAT | The encrypted **vault** (UI), never an env var |
27
+ | Point at a local model server | `LLAMACPP_URL`, `OLLAMA_URL`, `CONSTELLA_EMBED_URL` |
28
+ | Loosen/tighten agent permissions | `CONSTELLA_AGENT_FULL_ACCESS`, or `settings.agents.*` |
29
+ | Cap concurrent agent runs | `CONSTELLA_MAX_CONCURRENT_AGENTS` or `settings.agents.maxConcurrent` |
30
+
31
+ ---
32
+
33
+ ## 2. How it works 🌌
34
+
35
+ The launcher resolves the runtime root, then guarantees three signing secrets exist before the server boots:
36
+
37
+ ```mermaid
38
+ flowchart TD
39
+ A["npx constella [flags]"] --> B["resolve runMode<br/>(flag → --bind back-compat → start)"]
40
+ B --> C["resolve HOME<br/>(CONSTELLA_HOME / --path / ~/.constella;<br/>portable → pick USB)"]
41
+ C --> D["export CONSTELLA_RUN_MODE / PUBLIC / VERSION<br/>DATABASE_URL=file:HOME/constella.db"]
42
+ D --> E["ensureSecret() ×3 → HOME/.env (chmod 600)"]
43
+ E --> F["drizzle-kit migrate"]
44
+ F --> G["spawn web (next start) + worker (bin/worker.mjs)"]
45
+ G --> H["server reads env + workspace.settings"]
46
+ ```
47
+
48
+ **Key fact (`bin/constella.mjs`):** every mode persists a real `BETTER_AUTH_SECRET`, `CONSTELLA_VAULT_KEY` and `CONSTELLA_WORKER_SECRET`. `next start` runs under `NODE_ENV=production`, where better-auth throws on its default secret, the vault refuses to encrypt without its key, and the worker fails closed without its secret — so even local `start` mode needs all three. They are persisted (not ephemeral) so login sessions and the encrypted vault survive a restart.
49
+
50
+ ---
51
+
52
+ ## 3. Main flow: secret persistence 🌠
53
+
54
+ From `bin/constella.mjs` (`ensureSecret`):
55
+
56
+ 1. **env wins** — if the variable is already set in `process.env`, use it and do not write.
57
+ 2. **reuse persisted** — else if a non-placeholder value is in `<HOME>/.env`, hydrate `process.env` from it.
58
+ 3. **generate once** — else generate a fresh value, store it in `<HOME>/.env`, and export it.
59
+
60
+ ```
61
+ BETTER_AUTH_SECRET = randomBytes(32).toString("base64url")
62
+ CONSTELLA_VAULT_KEY = randomBytes(32).toString("base64") # must decode to 32 bytes
63
+ CONSTELLA_WORKER_SECRET = randomBytes(24).toString("base64url")
64
+ ```
65
+
66
+ The file is written with mode `0o600` (and a best-effort `chmodSync` on Windows). The launcher prints `• Secrets ready (stored in <HOME>/.env, never printed).` — the values themselves are never logged.
67
+
68
+ ---
69
+
70
+ ## 4. Key concepts 🪐
71
+
72
+ - **Runtime root (`<HOME>`)** — defaults to `~/.constella`; overridable with `CONSTELLA_HOME` or `--path`. Holds `constella.db`, `.env`, `cache/`, `backups/`, and `organizations/<orgId>/workspace/`. In portable mode with no explicit path, the launcher detects removable USB drives and uses `<drive>/.constella`.
73
+ - **Package root (`CONSTELLA_PKG_ROOT`)** — the installed package's own directory (the compiled `.next`, `drizzle/` migrations, bundled `skills/`). Exported so the server finds assets when installed globally rather than from the launch CWD.
74
+ - **Vault** — provider API keys and GitHub PATs are AES-256-GCM encrypted at rest in the `vault` table, keyed by `CONSTELLA_VAULT_KEY`. Plaintext **never** touches `provider` rows and **never** reaches the client (`src/lib/vault.ts`).
75
+ - **Workspace settings** — a JSON blob on `workspace.settings`; runtime overrides for agent permissions, the editor, integrations, and import metadata.
76
+
77
+ ---
78
+
79
+ ## 5. The big environment-variable table 🌌
80
+
81
+ ### 5.1 Launcher-set / boot core
82
+
83
+ | Variable | Default | Set by / Read by | Meaning |
84
+ | --- | --- | --- | --- |
85
+ | `CONSTELLA_HOME` | `~/.constella` | launcher / `src/lib/fs-workspace.ts`, `runtime-root.ts`, worker | Runtime root holding DB, `.env`, orgs. Relative values anchor to `INIT_CWD`. |
86
+ | `CONSTELLA_RUN_MODE` | `start` | launcher / `src/lib/run-mode.ts`, `cli.ts`, `proxy.ts` | `start \| auth \| vps \| portable`. Drives login + bind + agent jail. |
87
+ | `CONSTELLA_PUBLIC` | `1` (CLI launch) | launcher / `src/lib/build-mode.ts` | A CLI launch is the public runtime → the in-UI mode picker is hidden. |
88
+ | `CONSTELLA_VERSION` | local `package.json` version | launcher / `src/lib/version.ts` | Reliable installed version for the in-app Update check. |
89
+ | `CONSTELLA_PKG_ROOT` | package dir | launcher / `skills-library.ts`, `cli.ts` | Where bundled assets (`skills/`, `.next`, `drizzle/`) live. |
90
+ | `DATABASE_URL` | `file:<HOME>/constella.db` | launcher / `src/db/index.ts`, `drizzle.config.mjs` | SQLite file (absolute under the runtime root). |
91
+ | `PORT` | `3000` | env / launcher | Web port if `--port` is not given. |
92
+ | `CONSTELLA_FORCE_ONBOARDING` | unset | `--onboarding` / `src/lib/workspace.ts`, `onboarding.ts` | Force the first-run wizard. |
93
+ | `CONSTELLA_DEV` | unset | dev tree / `build-mode.ts`, launcher | `1` allows a dev-server fallback when no production build exists (otherwise the launcher fails closed). |
94
+ | `CONSTELLA_WEB_HEAP_MB` | `0` (Node default) | env / launcher | Opt-in `--max-old-space-size` for the web child (JS-heap OOM relief). |
95
+
96
+ ### 5.2 Secrets (persisted to `<HOME>/.env`, chmod 600)
97
+
98
+ | Variable | Generated as | Read by | Meaning |
99
+ | --- | --- | --- | --- |
100
+ | `BETTER_AUTH_SECRET` | `randomBytes(32).base64url` | `src/lib/auth.ts`, `boot.ts` | Session signing key. better-auth throws on its default in production. |
101
+ | `CONSTELLA_VAULT_KEY` | `randomBytes(32).base64` | `src/lib/vault.ts` | AES-256-GCM key for the secret vault. Must decode to exactly 32 bytes. |
102
+ | `CONSTELLA_WORKER_SECRET` | `randomBytes(24).base64url` | worker + `/api/cron/tick`, `/api/sync/file`, `/api/telegram/poll`, `/api/locks/acquire` | Shared secret on the privileged worker endpoints; they reject all requests when it is unset. |
103
+
104
+ > The vault, auth, and worker secrets are also listed in `src/lib/scrub.ts` so they are scrubbed from KB ingest, Telegram messages and logs.
105
+
106
+ ### 5.3 Worker
107
+
108
+ | Variable | Default | Read by | Meaning |
109
+ | --- | --- | --- | --- |
110
+ | `CONSTELLA_BASE_URL` | `http://localhost:3000` (launcher sets `http://127.0.0.1:<port>`) | `bin/worker.mjs`, `bin/lock-hook.mjs`, `cli.ts` | The local server URL the worker calls back to. |
111
+ | `CONSTELLA_WORKER_INTERVAL_MS` | `60000` | `bin/worker.mjs` | Cron tick interval (POST `/api/cron/tick`). |
112
+ | `CONSTELLA_ALLOW_REMOTE_WORKER_BASE_URL` | unset | `bin/worker.mjs` | SSRF guard override: the worker refuses to send its secret to a non-loopback host unless this is `1`. |
113
+
114
+ ### 5.4 Agent execution (`src/server/adapters/cli.ts`, `runner.ts`)
115
+
116
+ | Variable | Default | Meaning |
117
+ | --- | --- | --- |
118
+ | `CONSTELLA_AGENT_FULL_ACCESS` | derived (`start`→full, else jailed) | `1`/`0` overrides the permission mode. Full → `bypassPermissions` (claude) / `danger-full-access` (codex); jailed → `acceptEdits` / `workspace-write`. |
119
+ | `CONSTELLA_WEB_RESEARCH` | on | `0` disables the additive `--allowedTools WebSearch WebFetch` for agent runs. Also `settings.agents.webResearch`. |
120
+ | `CONSTELLA_AGENT_CMD_GUARD` | on | Destructive-shell guard (`bin/guard-hook.mjs`). `0` disables. Also `settings.agents.cmdGuard`. |
121
+ | `CONSTELLA_AGENT_LOCK_HOOK` | off | `1` enables per-file locking via `bin/lock-hook.mjs` + a clean agent config dir. Also `settings.agents.fileLocks`. |
122
+ | `CONSTELLA_MAX_CONCURRENT_AGENTS` | `1` | Concurrent agent runs **per workspace** (`runner.ts`). Also `settings.agents.maxConcurrent`. |
123
+ | `CONSTELLA_AUTO_REVIEW` | on | `0` disables the independent review gate. Also `settings.agents.autoReview`. |
124
+
125
+ The lock-hook child receives identity env: `CONSTELLA_ORG_ID`, `CONSTELLA_TASK_ID`, `CONSTELLA_AGENT_ID`, `CONSTELLA_AGENT_HANDLE`, plus `CLAUDE_CONFIG_DIR` pointing at the clean agent config dir. Agent CLI runs time out at **180000 ms** by default.
126
+
127
+ ### 5.5 Models, RAG & KB
128
+
129
+ | Variable | Default | Read by | Meaning |
130
+ | --- | --- | --- | --- |
131
+ | `LLAMACPP_URL` | `http://127.0.0.1:8082` | `local-models.ts`, `runtime.ts`, `kb.ts` | Local **chat** llama.cpp server (OpenAI-compatible `/v1`). |
132
+ | `CONSTELLA_EMBED_URL` | `http://127.0.0.1:8083` | `local-models.ts`, `rag.ts` | Dedicated llama.cpp **embedding** server for RAG (auto-started on boot). |
133
+ | `OLLAMA_URL` | `http://127.0.0.1:11434` | `local-models.ts`, `runtime.ts`, `rag.ts` | Fallback embedding/chat provider (Ollama). |
134
+ | `CONSTELLA_EMBED_MODEL` | `nomic-embed-text` | `rag.ts`, `model-catalog.ts` | Embedding model name; `nomic*` triggers the asymmetric `search_document:`/`search_query:` prefixes. |
135
+ | `CONSTELLA_KB_CURATION` | on | `kb.ts` | `0` opts out of the budget-gated Vannevar KB-curation pass. |
136
+
137
+ ### 5.6 better-auth URLs (dev `.env.example`)
138
+
139
+ | Variable | Example | Meaning |
140
+ | --- | --- | --- |
141
+ | `BETTER_AUTH_URL` | `http://localhost:3000` | Server-side auth base URL. |
142
+ | `NEXT_PUBLIC_BETTER_AUTH_URL` | `http://localhost:3000` | Client-side auth base URL. |
143
+
144
+ ### 5.7 Out-of-process clients (PAT-based)
145
+
146
+ | Variable | Default | Read by | Meaning |
147
+ | --- | --- | --- | --- |
148
+ | `CONSTELLA_PAT` | unset | `scripts/mcp-server.mjs` | `cn_…` Personal Access Token for the MCP bridge / Public API. |
149
+ | `CONSTELLA_ORG` | unset | `scripts/mcp-server.mjs` | Optional org id (maps to the `X-Constella-Org` header). |
150
+
151
+ > `CONSTELLA_BASE_URL` is also read by the MCP server (default `http://localhost:3000`).
152
+
153
+ ---
154
+
155
+ ## 6. Ports 🛰️
156
+
157
+ | Port | Process | Configurable via |
158
+ | --- | --- | --- |
159
+ | `3000` | Web server (`next start`) + worker callback target | `--port` / `PORT`; `CONSTELLA_BASE_URL` for the worker |
160
+ | `8082` | Local llama.cpp **chat** server (`LLAMACPP`) | `LLAMACPP_URL` |
161
+ | `8083` | Local llama.cpp **embedding** server (RAG) | `CONSTELLA_EMBED_URL` |
162
+ | `11434` | Ollama (fallback embeddings/chat) | `OLLAMA_URL` |
163
+
164
+ The Test Dev harness boots project dev servers on a free port in the range **4173–4999** (avoiding 3000) — see [TEST_DEV](./TEST_DEV.md).
165
+
166
+ ---
167
+
168
+ ## 7. The `<HOME>/.env` file 🌠
169
+
170
+ Written and re-read by the launcher. A minimal generated file:
171
+
172
+ ```dotenv
173
+ BETTER_AUTH_SECRET=…base64url…
174
+ CONSTELLA_VAULT_KEY=…base64 (32 bytes)…
175
+ CONSTELLA_WORKER_SECRET=…base64url…
176
+ ```
177
+
178
+ The dev-tree template `.env.example` shows the full surface used when running from source:
179
+
180
+ ```dotenv
181
+ DATABASE_URL=file:./.constella/constella.db
182
+ BETTER_AUTH_SECRET=replace-with-a-long-random-string
183
+ BETTER_AUTH_URL=http://localhost:3000
184
+ NEXT_PUBLIC_BETTER_AUTH_URL=http://localhost:3000
185
+ CONSTELLA_RUN_MODE=start
186
+ CONSTELLA_HOME=./.constella
187
+ CONSTELLA_VAULT_KEY=replace-with-32-byte-base64-key
188
+ CONSTELLA_WORKER_SECRET=replace-with-a-random-string
189
+ ```
190
+
191
+ **Precedence:** `process.env` (shell / Docker / systemd) always wins over `<HOME>/.env`. The file only supplies values that are not already in the environment, and only generates the three signing secrets if neither source has them.
192
+
193
+ ---
194
+
195
+ ## 8. The vault: provider keys & PATs 🕳️
196
+
197
+ Provider API keys and GitHub PATs are **never** environment variables and **never** columns on `provider`. They live encrypted in the `vault` table.
198
+
199
+ ```mermaid
200
+ flowchart LR
201
+ UI["Config UI: paste API key / PAT"] --> P["putSecret(workspaceId, ref, plaintext)"]
202
+ P --> E["AES-256-GCM<br/>key = CONSTELLA_VAULT_KEY"]
203
+ E --> V["vault row<br/>(ciphertext + iv, per workspace+ref)"]
204
+ V --> G["getSecret(workspaceId, ref)"]
205
+ G --> R["resolveRuntime / ghToken / telegram"]
206
+ V -.->|UI display| M["maskSecret() → abc••••••wxyz"]
207
+ ```
208
+
209
+ Vault details (`src/lib/vault.ts`):
210
+
211
+ - `putSecret` is **single-valued per `(workspaceId, ref)`**: it deletes the old row before inserting, so a re-registered token never serves a stale value.
212
+ - `ref` examples: `openai_api_key`, `github_pat`, `telegram_bot_token`.
213
+ - `getSecret` returns plaintext only server-side; the UI sees only `maskSecret(s)` (`abc••••••wxyz`).
214
+ - `delSecret` backs the revoke-token path.
215
+ - The `vault` table stores `ciphertext`, `iv`, `ref`, optional `providerId`, scoped by `workspaceId` (cascade-deleted with the workspace).
216
+
217
+ ---
218
+
219
+ ## 9. Workspace settings (JSON on `workspace.settings`) 🪐
220
+
221
+ The `settings` column (`src/db/schema.ts`) is a typed JSON blob. Editable from the Config UI without a restart; the runner pushes the agent flags into the CLI adapter before each spawn.
222
+
223
+ | Path | Type | Effect |
224
+ | --- | --- | --- |
225
+ | `editor.tabSize` / `formatOnSave` / `wordWrap` / `minimap` | number / bool | In-app code editor preferences. |
226
+ | `integrations` | `Record<string, boolean>` | Per-integration enable map. |
227
+ | `lastSecurityRun` | number | Timestamp of the last security scan. |
228
+ | `telegram.offset` | number | Telegram `getUpdates` cursor. |
229
+ | `github.repo` / `login` / `defaultBranch` | string | Connected GitHub repository metadata. |
230
+ | `source.type` | `new \| github \| local \| mock` | How the workspace was imported. |
231
+ | `source.repo` / `branch` / `localPath` / `importedAt` / `fileCount` / `analyzed` | mixed | Import provenance. |
232
+ | `agents.maxConcurrent` | number | Per-workspace agent concurrency (overrides `CONSTELLA_MAX_CONCURRENT_AGENTS`). |
233
+ | `agents.fileLocks` | bool | Per-file locking (overrides `CONSTELLA_AGENT_LOCK_HOOK`). |
234
+ | `agents.webResearch` | bool | Web research (overrides `CONSTELLA_WEB_RESEARCH`). |
235
+ | `agents.autoReview` | bool | Independent review gate (overrides `CONSTELLA_AUTO_REVIEW`). |
236
+ | `agents.cmdGuard` | bool | Destructive-shell guard (overrides `CONSTELLA_AGENT_CMD_GUARD`). |
237
+
238
+ **Override precedence for agent toggles:** the per-workspace `settings.agents.*` value (when set) is pushed at runtime and wins; if unset, the corresponding `CONSTELLA_*` env default applies. Other model/runtime defaults live on the `workspace.stack` (JSON `Record<string,string>`) and on the `agent`, `provider`, and `organization.runMode` rows.
239
+
240
+ ---
241
+
242
+ ## 10. Step-by-step
243
+
244
+ 1. **First boot** — run `npx constella` (or a mode flag). The launcher creates `<HOME>/organizations`, generates `<HOME>/.env`, migrates the DB, and starts web + worker.
245
+ 2. **Pick a mode** — pass `--start` / `--auth` / `--vps` / `--portable`. The flag sets `CONSTELLA_RUN_MODE`, which drives login, bind host, and the agent jail. See [START_MODE](./START_MODE.md), [AUTH_MODE](./AUTH_MODE.md), [VPS_MODE](./VPS_MODE.md), [PORTABLE_MODE](./PORTABLE_MODE.md).
246
+ 3. **Move the runtime root** — `CONSTELLA_HOME=/data/constella npx constella` or `--path /mnt/usb`.
247
+ 4. **Add a provider key** — in the Config UI, paste it; it is vaulted, not written to `.env`.
248
+ 5. **Tune agents** — flip `settings.agents.*` in the UI, or set the `CONSTELLA_*` env defaults.
249
+ 6. **Point at local models** — start your llama.cpp/Ollama servers and set `LLAMACPP_URL` / `CONSTELLA_EMBED_URL` / `OLLAMA_URL` if they are not on the defaults.
250
+
251
+ ---
252
+
253
+ ## 11. Examples
254
+
255
+ **Custom port + heap headroom:**
256
+
257
+ ```bash
258
+ npx constella --auth --port 4000
259
+ CONSTELLA_WEB_HEAP_MB=4096 npx constella --vps
260
+ ```
261
+
262
+ **Relocate the runtime root and DB:**
263
+
264
+ ```bash
265
+ CONSTELLA_HOME=/srv/constella npx constella --vps
266
+ # DATABASE_URL resolves to file:/srv/constella/constella.db
267
+ ```
268
+
269
+ **Allow more concurrent agents and disable the review gate (env):**
270
+
271
+ ```bash
272
+ CONSTELLA_MAX_CONCURRENT_AGENTS=2 CONSTELLA_AUTO_REVIEW=0 npx constella
273
+ ```
274
+
275
+ **Drive Constella over the Public API / MCP from another host:**
276
+
277
+ ```bash
278
+ export CONSTELLA_PAT=cn_xxx
279
+ export CONSTELLA_BASE_URL=http://localhost:3000
280
+ export CONSTELLA_ORG=<orgId>
281
+ node scripts/mcp-server.mjs
282
+ ```
283
+
284
+ ---
285
+
286
+ ## 12. Possible states
287
+
288
+ | Condition | Resulting behavior |
289
+ | --- | --- |
290
+ | `CONSTELLA_VAULT_KEY` missing | `vault.key()` throws `CONSTELLA_VAULT_KEY is not set`; secrets can't be read/written. |
291
+ | `CONSTELLA_VAULT_KEY` not 32 bytes | Throws `CONSTELLA_VAULT_KEY must decode to 32 bytes`. |
292
+ | `CONSTELLA_WORKER_SECRET` unset | Worker endpoints reject every request (fail closed). |
293
+ | `BETTER_AUTH_SECRET` default in production | better-auth throws at boot — hence the launcher always generates one. |
294
+ | No production build, `CONSTELLA_DEV` ≠ `1` | Launcher refuses to start a dev server in a public/network mode and exits. |
295
+ | Portable, `< 32 GB` free | Fatal: launcher aborts below 32 GB; ≥ 32 GB boots. |
296
+ | Worker `CONSTELLA_BASE_URL` non-loopback, no override | Worker exits rather than leak its secret. |
297
+
298
+ ---
299
+
300
+ ## 13. Related integrations
301
+
302
+ - Provider keys/models — [MODELS](./MODELS.md), [AI_ARCHITECTURE](./AI_ARCHITECTURE.md)
303
+ - GitHub PAT/OAuth — [GITHUB](./GITHUB.md)
304
+ - Telegram bot token — [TELEGRAM](./TELEGRAM.md)
305
+ - PAT/MCP clients — [PUBLIC_API](./PUBLIC_API.md), [MCP](./MCP.md)
306
+ - RAG embeddings — [KB_RAG](./KB_RAG.md), [MEMORY_RAG](./MEMORY_RAG.md)
307
+
308
+ ---
309
+
310
+ ## 14. Security 🕳️
311
+
312
+ - Secrets file `<HOME>/.env` is written `chmod 600`; values are never printed.
313
+ - The vault uses **AES-256-GCM** with `CONSTELLA_VAULT_KEY`; ciphertext + IV only, never plaintext to the client.
314
+ - `src/lib/scrub.ts` scrubs `CONSTELLA_VAULT_KEY`, `BETTER_AUTH_SECRET` and `CONSTELLA_WORKER_SECRET` before KB ingest, Telegram and logs.
315
+ - The worker enforces a **loopback-only SSRF guard** on `CONSTELLA_BASE_URL`.
316
+ - `process.env` always overrides the `.env` file — operators control configuration via the shell/Docker/systemd, not via an attacker-writable file.
317
+ - Agent permissions degrade safely: full access only in `start` mode (your own machine); `vps/auth/portable` stay jailed (Docker + Tailscale as the hard jail). See [SECURITY](./SECURITY.md).
318
+
319
+ ---
320
+
321
+ ## 15. Troubleshooting
322
+
323
+ | Symptom | Likely cause | Fix |
324
+ | --- | --- | --- |
325
+ | `CONSTELLA_VAULT_KEY is not set` | `.env` deleted or key cleared | Restore `<HOME>/.env` or let the launcher regenerate it (note: a new key cannot decrypt old vault rows). |
326
+ | Worker logs `401` repeatedly | Telegram not configured / secret mismatch | Configure the bot, confirm `CONSTELLA_WORKER_SECRET` is shared. |
327
+ | Worker refuses to start (non-loopback) | `CONSTELLA_BASE_URL` is remote | Use loopback, or set `CONSTELLA_ALLOW_REMOTE_WORKER_BASE_URL=1` (prefer `https://`). |
328
+ | RAG falls back to keyword search | Embed server down on `:8083` | Start it / set `CONSTELLA_EMBED_URL`, or rely on Ollama at `:11434`. |
329
+ | App reads a different DB than the worker watches | Relative `CONSTELLA_HOME` mismatch | Use an absolute `CONSTELLA_HOME`; relative paths anchor to `INIT_CWD`. |
330
+ | Agents talk in the operator's plugin voice | Operator `~/.claude` hooks leaking | Already mitigated via `disableAllHooks` settings overlay; verify the lock/guard config dir. |
331
+
332
+ ---
333
+
334
+ ## Related links
335
+
336
+ - [INSTALLATION](./INSTALLATION.md) · [ONBOARDING](./ONBOARDING.md) · [START_MODE](./START_MODE.md) · [AUTH_MODE](./AUTH_MODE.md) · [VPS_MODE](./VPS_MODE.md) · [PORTABLE_MODE](./PORTABLE_MODE.md)
337
+ - [ARCHITECTURE](./ARCHITECTURE.md) · [AI_ARCHITECTURE](./AI_ARCHITECTURE.md) · [AGENTS](./AGENTS.md)
338
+ - [MODELS](./MODELS.md) · [KB_RAG](./KB_RAG.md) · [MEMORY_RAG](./MEMORY_RAG.md)
339
+ - [GITHUB](./GITHUB.md) · [TELEGRAM](./TELEGRAM.md) · [PUBLIC_API](./PUBLIC_API.md) · [MCP](./MCP.md)
340
+ - [TEST_DEV](./TEST_DEV.md) · [SECURITY](./SECURITY.md) · [TROUBLESHOOTING](./TROUBLESHOOTING.md) · [FAQ](./FAQ.md)