trybeacon 0.1.34 → 0.1.35

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 (317) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +11 -10
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/routes-manifest.json +6 -0
  6. package/.next/server/app/_global-error/page.js +3 -3
  7. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/_not-found/page.js +2 -2
  17. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/.next/server/app/_not-found.html +1 -1
  19. package/.next/server/app/_not-found.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  22. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  24. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  25. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  26. package/.next/server/app/api/board-annotations/[id]/route.js +1 -1
  27. package/.next/server/app/api/board-annotations/route.js +1 -1
  28. package/.next/server/app/api/board-layout/route.js +1 -1
  29. package/.next/server/app/api/bug-flags/[id]/route.js +1 -1
  30. package/.next/server/app/api/bug-flags/route.js +1 -1
  31. package/.next/server/app/api/code-graph/position/route.js +1 -1
  32. package/.next/server/app/api/code-graph/route.js +1 -1
  33. package/.next/server/app/api/context/feature/route.js +1 -1
  34. package/.next/server/app/api/context/file/route.js +1 -1
  35. package/.next/server/app/api/context/route.js +2 -2
  36. package/.next/server/app/api/db/arrange/route.js +1 -1
  37. package/.next/server/app/api/db/backfill-access/route.js +1 -1
  38. package/.next/server/app/api/db/position/route.js +1 -1
  39. package/.next/server/app/api/db/position/route.js.nft.json +1 -1
  40. package/.next/server/app/api/db/prune-planned/route.js +1 -1
  41. package/.next/server/app/api/db/reconcile-endpoints/route.js +1 -1
  42. package/.next/server/app/api/db/relations/[id]/route.js +1 -1
  43. package/.next/server/app/api/db/tables/[id]/route.js +1 -1
  44. package/.next/server/app/api/draft/approve/route.js +1 -1
  45. package/.next/server/app/api/draft/route.js +1 -1
  46. package/.next/server/app/api/draft/status/route.js +1 -1
  47. package/.next/server/app/api/edges/[id]/route.js +1 -1
  48. package/.next/server/app/api/edges/route.js +1 -1
  49. package/.next/server/app/api/edges/route.js.nft.json +1 -1
  50. package/.next/server/app/api/endpoints/[id]/route.js +1 -1
  51. package/.next/server/app/api/entities/route.js +1 -1
  52. package/.next/server/app/api/feedback/[id]/route.js +1 -1
  53. package/.next/server/app/api/feedback/[id]/vote/route.js +1 -1
  54. package/.next/server/app/api/feedback/route.js +1 -1
  55. package/.next/server/app/api/ingest/route.js +2 -2
  56. package/.next/server/app/api/init/route.js +2 -2
  57. package/.next/server/app/api/init/route.js.nft.json +1 -1
  58. package/.next/server/app/api/map/describe/route.js +2 -2
  59. package/.next/server/app/api/map/describe/route.js.nft.json +1 -1
  60. package/.next/server/app/api/map/files/route.js +1 -1
  61. package/.next/server/app/api/map/files/route.js.nft.json +1 -1
  62. package/.next/server/app/api/map/finish/route.js +1 -1
  63. package/.next/server/app/api/map/finish/route.js.nft.json +1 -1
  64. package/.next/server/app/api/map/route.js +1 -1
  65. package/.next/server/app/api/map/route.js.nft.json +1 -1
  66. package/.next/server/app/api/map/start/route.js +1 -1
  67. package/.next/server/app/api/map/start/route.js.nft.json +1 -1
  68. package/.next/server/app/api/map/touch-active/route.js +1 -1
  69. package/.next/server/app/api/map/touch-active/route.js.nft.json +1 -1
  70. package/.next/server/app/api/nodes/[id]/position/route.js +1 -1
  71. package/.next/server/app/api/nodes/[id]/position/route.js.nft.json +1 -1
  72. package/.next/server/app/api/nodes/[id]/route.js +1 -1
  73. package/.next/server/app/api/nodes/[id]/route.js.nft.json +1 -1
  74. package/.next/server/app/api/nodes/positions/route.js +1 -1
  75. package/.next/server/app/api/nodes/positions/route.js.nft.json +1 -1
  76. package/.next/server/app/api/nodes/route.js +1 -1
  77. package/.next/server/app/api/nodes/route.js.nft.json +1 -1
  78. package/.next/server/app/api/nodes/subtasks/route.js +1 -1
  79. package/.next/server/app/api/nodes/subtasks/route.js.nft.json +1 -1
  80. package/.next/server/app/api/notes/[id]/route.js +1 -1
  81. package/.next/server/app/api/notes/route.js +1 -1
  82. package/.next/server/app/api/open/route.js +1 -1
  83. package/.next/server/app/api/plan/annotations/route.js +3 -3
  84. package/.next/server/app/api/plan/approve/route.js +2 -2
  85. package/.next/server/app/api/plan/history/route.js +1 -1
  86. package/.next/server/app/api/plan/markdown/route.js +1 -1
  87. package/.next/server/app/api/plan/markdown/route.js.nft.json +1 -1
  88. package/.next/server/app/api/plan/presence/route.js +1 -1
  89. package/.next/server/app/api/plan/route.js +1 -1
  90. package/.next/server/app/api/plan/route.js.nft.json +1 -1
  91. package/.next/server/app/api/plan/verdict/route.js +1 -1
  92. package/.next/server/app/api/preferences/route.js +1 -1
  93. package/.next/server/app/api/project-meta/route.js +1 -0
  94. package/.next/server/app/api/project-meta/route.js.nft.json +1 -0
  95. package/.next/server/app/api/project-meta/route_client-reference-manifest.js +1 -0
  96. package/.next/server/app/api/reset/route.js +1 -1
  97. package/.next/server/app/api/stream/route.js +2 -2
  98. package/.next/server/app/api/version/route.js +1 -1
  99. package/.next/server/app/api/workspace/activate/route.js +1 -1
  100. package/.next/server/app/api/workspace/route.js +1 -1
  101. package/.next/server/app/apple-icon.png/route.js +1 -1
  102. package/.next/server/app/docs/page.js +2 -2
  103. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/docs.html +1 -1
  105. package/.next/server/app/docs.rsc +1 -1
  106. package/.next/server/app/docs.segments/_full.segment.rsc +1 -1
  107. package/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  108. package/.next/server/app/docs.segments/_index.segment.rsc +1 -1
  109. package/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
  110. package/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
  111. package/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  112. package/.next/server/app/feedback/page.js +2 -2
  113. package/.next/server/app/feedback/page_client-reference-manifest.js +1 -1
  114. package/.next/server/app/feedback.html +1 -1
  115. package/.next/server/app/feedback.rsc +1 -1
  116. package/.next/server/app/feedback.segments/_full.segment.rsc +1 -1
  117. package/.next/server/app/feedback.segments/_head.segment.rsc +1 -1
  118. package/.next/server/app/feedback.segments/_index.segment.rsc +1 -1
  119. package/.next/server/app/feedback.segments/_tree.segment.rsc +1 -1
  120. package/.next/server/app/feedback.segments/feedback/__PAGE__.segment.rsc +1 -1
  121. package/.next/server/app/feedback.segments/feedback.segment.rsc +1 -1
  122. package/.next/server/app/help/page.js +2 -2
  123. package/.next/server/app/help/page_client-reference-manifest.js +1 -1
  124. package/.next/server/app/help.html +1 -1
  125. package/.next/server/app/help.rsc +1 -1
  126. package/.next/server/app/help.segments/_full.segment.rsc +1 -1
  127. package/.next/server/app/help.segments/_head.segment.rsc +1 -1
  128. package/.next/server/app/help.segments/_index.segment.rsc +1 -1
  129. package/.next/server/app/help.segments/_tree.segment.rsc +1 -1
  130. package/.next/server/app/help.segments/help/__PAGE__.segment.rsc +1 -1
  131. package/.next/server/app/help.segments/help.segment.rsc +1 -1
  132. package/.next/server/app/icon.svg/route.js +1 -1
  133. package/.next/server/app/index.html +1 -1
  134. package/.next/server/app/index.rsc +1 -1
  135. package/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  136. package/.next/server/app/index.segments/_full.segment.rsc +1 -1
  137. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  138. package/.next/server/app/index.segments/_index.segment.rsc +1 -1
  139. package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  140. package/.next/server/app/map/page.js +2 -2
  141. package/.next/server/app/map/page.js.nft.json +1 -1
  142. package/.next/server/app/map/page_client-reference-manifest.js +1 -1
  143. package/.next/server/app/page.js +2 -2
  144. package/.next/server/app/page_client-reference-manifest.js +1 -1
  145. package/.next/server/app/plan/page.js +2 -2
  146. package/.next/server/app/plan/page.js.nft.json +1 -1
  147. package/.next/server/app/plan/page_client-reference-manifest.js +1 -1
  148. package/.next/server/app/settings/page.js +2 -2
  149. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  150. package/.next/server/app-paths-manifest.json +11 -10
  151. package/.next/server/chunks/1130.js +1 -0
  152. package/.next/server/chunks/1341.js +1 -0
  153. package/.next/server/chunks/249.js +1 -1
  154. package/.next/server/chunks/{4274.js → 3269.js} +2 -2
  155. package/.next/server/chunks/3622.js +1 -0
  156. package/.next/server/chunks/4378.js +1 -1
  157. package/.next/server/chunks/7154.js +1 -0
  158. package/.next/server/chunks/9313.js +3 -3
  159. package/.next/server/chunks/9683.js +1 -1
  160. package/.next/server/middleware-build-manifest.js +1 -1
  161. package/.next/server/middleware.js +3 -3
  162. package/.next/server/pages/404.html +1 -1
  163. package/.next/server/pages/500.html +1 -1
  164. package/.next/server/server-reference-manifest.js +1 -1
  165. package/.next/server/server-reference-manifest.json +1 -1
  166. package/.next/static/chunks/1551-c19a41da7732c31e.js +1 -0
  167. package/.next/static/chunks/{1202-dfeac8ec49693586.js → 6955-c21412b6dcd86d80.js} +1 -1
  168. package/.next/static/chunks/app/_global-error/page-68515a67eece5248.js +1 -0
  169. package/.next/static/chunks/app/api/board-annotations/[id]/route-68515a67eece5248.js +1 -0
  170. package/.next/static/chunks/app/api/board-annotations/route-68515a67eece5248.js +1 -0
  171. package/.next/static/chunks/app/api/board-layout/route-68515a67eece5248.js +1 -0
  172. package/.next/static/chunks/app/api/bug-flags/[id]/route-68515a67eece5248.js +1 -0
  173. package/.next/static/chunks/app/api/bug-flags/route-68515a67eece5248.js +1 -0
  174. package/.next/static/chunks/app/api/code-graph/position/route-68515a67eece5248.js +1 -0
  175. package/.next/static/chunks/app/api/code-graph/route-68515a67eece5248.js +1 -0
  176. package/.next/static/chunks/app/api/context/feature/route-68515a67eece5248.js +1 -0
  177. package/.next/static/chunks/app/api/context/file/route-68515a67eece5248.js +1 -0
  178. package/.next/static/chunks/app/api/context/route-68515a67eece5248.js +1 -0
  179. package/.next/static/chunks/app/api/db/arrange/route-68515a67eece5248.js +1 -0
  180. package/.next/static/chunks/app/api/db/backfill-access/route-68515a67eece5248.js +1 -0
  181. package/.next/static/chunks/app/api/db/position/route-68515a67eece5248.js +1 -0
  182. package/.next/static/chunks/app/api/db/prune-planned/route-68515a67eece5248.js +1 -0
  183. package/.next/static/chunks/app/api/db/reconcile-endpoints/route-68515a67eece5248.js +1 -0
  184. package/.next/static/chunks/app/api/db/relations/[id]/route-68515a67eece5248.js +1 -0
  185. package/.next/static/chunks/app/api/db/tables/[id]/route-68515a67eece5248.js +1 -0
  186. package/.next/static/chunks/app/api/draft/approve/route-68515a67eece5248.js +1 -0
  187. package/.next/static/chunks/app/api/draft/route-68515a67eece5248.js +1 -0
  188. package/.next/static/chunks/app/api/draft/status/route-68515a67eece5248.js +1 -0
  189. package/.next/static/chunks/app/api/edges/[id]/route-68515a67eece5248.js +1 -0
  190. package/.next/static/chunks/app/api/edges/route-68515a67eece5248.js +1 -0
  191. package/.next/static/chunks/app/api/endpoints/[id]/route-68515a67eece5248.js +1 -0
  192. package/.next/static/chunks/app/api/entities/route-68515a67eece5248.js +1 -0
  193. package/.next/static/chunks/app/api/feedback/[id]/route-68515a67eece5248.js +1 -0
  194. package/.next/static/chunks/app/api/feedback/[id]/vote/route-68515a67eece5248.js +1 -0
  195. package/.next/static/chunks/app/api/feedback/route-68515a67eece5248.js +1 -0
  196. package/.next/static/chunks/app/api/ingest/route-68515a67eece5248.js +1 -0
  197. package/.next/static/chunks/app/api/init/route-68515a67eece5248.js +1 -0
  198. package/.next/static/chunks/app/api/map/describe/route-68515a67eece5248.js +1 -0
  199. package/.next/static/chunks/app/api/map/files/route-68515a67eece5248.js +1 -0
  200. package/.next/static/chunks/app/api/map/finish/route-68515a67eece5248.js +1 -0
  201. package/.next/static/chunks/app/api/map/route-68515a67eece5248.js +1 -0
  202. package/.next/static/chunks/app/api/map/start/route-68515a67eece5248.js +1 -0
  203. package/.next/static/chunks/app/api/map/touch-active/route-68515a67eece5248.js +1 -0
  204. package/.next/static/chunks/app/api/nodes/[id]/position/route-68515a67eece5248.js +1 -0
  205. package/.next/static/chunks/app/api/nodes/[id]/route-68515a67eece5248.js +1 -0
  206. package/.next/static/chunks/app/api/nodes/positions/route-68515a67eece5248.js +1 -0
  207. package/.next/static/chunks/app/api/nodes/route-68515a67eece5248.js +1 -0
  208. package/.next/static/chunks/app/api/nodes/subtasks/route-68515a67eece5248.js +1 -0
  209. package/.next/static/chunks/app/api/notes/[id]/route-68515a67eece5248.js +1 -0
  210. package/.next/static/chunks/app/api/notes/route-68515a67eece5248.js +1 -0
  211. package/.next/static/chunks/app/api/open/route-68515a67eece5248.js +1 -0
  212. package/.next/static/chunks/app/api/plan/annotations/route-68515a67eece5248.js +1 -0
  213. package/.next/static/chunks/app/api/plan/approve/route-68515a67eece5248.js +1 -0
  214. package/.next/static/chunks/app/api/plan/history/route-68515a67eece5248.js +1 -0
  215. package/.next/static/chunks/app/api/plan/markdown/route-68515a67eece5248.js +1 -0
  216. package/.next/static/chunks/app/api/plan/presence/route-68515a67eece5248.js +1 -0
  217. package/.next/static/chunks/app/api/plan/route-68515a67eece5248.js +1 -0
  218. package/.next/static/chunks/app/api/plan/verdict/route-68515a67eece5248.js +1 -0
  219. package/.next/static/chunks/app/api/preferences/route-68515a67eece5248.js +1 -0
  220. package/.next/static/chunks/app/api/project-meta/route-68515a67eece5248.js +1 -0
  221. package/.next/static/chunks/app/api/reset/route-68515a67eece5248.js +1 -0
  222. package/.next/static/chunks/app/api/stream/route-68515a67eece5248.js +1 -0
  223. package/.next/static/chunks/app/api/version/route-68515a67eece5248.js +1 -0
  224. package/.next/static/chunks/app/api/workspace/activate/route-68515a67eece5248.js +1 -0
  225. package/.next/static/chunks/app/api/workspace/route-68515a67eece5248.js +1 -0
  226. package/.next/static/chunks/app/map/{page-f3aa9e2ca859e0a1.js → page-8417d6e5dc33e7fb.js} +1 -1
  227. package/.next/static/chunks/app/plan/{page-056303390782b974.js → page-af54cdc9fb6058a3.js} +1 -1
  228. package/.next/static/chunks/next/dist/client/components/builtin/app-error-68515a67eece5248.js +1 -0
  229. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-68515a67eece5248.js +1 -0
  230. package/.next/static/chunks/next/dist/client/components/builtin/not-found-68515a67eece5248.js +1 -0
  231. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-68515a67eece5248.js +1 -0
  232. package/.next/static/p7RuAgL_wa-K9PsrN1Js0/_buildManifest.js +1 -0
  233. package/.next/trace +38 -38
  234. package/.next/trace-build +1 -1
  235. package/.next/types/app/api/{plan → project-meta}/route.ts +3 -3
  236. package/.next/types/routes.d.ts +2 -1
  237. package/.next/types/validator.ts +9 -0
  238. package/dist/bin/beacon.js +5 -5
  239. package/dist/bin/doctor.js +6 -3
  240. package/dist/bin/hook.js +6 -3
  241. package/dist/bin/mcp.js +35 -32
  242. package/dist/bin/plan.js +6 -3
  243. package/dist/bin/remove.js +2 -2
  244. package/dist/bin/uninstall.js +6 -3
  245. package/dist/lib/assets.js +6 -3
  246. package/dist/lib/codex-install.js +6 -3
  247. package/dist/lib/global-install.js +6 -3
  248. package/drizzle/0006_optimal_chronomancer.sql +2 -0
  249. package/drizzle/meta/0006_snapshot.json +1765 -0
  250. package/drizzle/meta/_journal.json +7 -0
  251. package/package.json +1 -1
  252. package/.next/server/chunks/7266.js +0 -1
  253. package/.next/server/chunks/7373.js +0 -1
  254. package/.next/static/OgbjxEMZfqIJgM1cAQ4cs/_buildManifest.js +0 -1
  255. package/.next/static/chunks/6764-ff2754e69d33be8a.js +0 -1
  256. package/.next/static/chunks/app/_global-error/page-4cdc03c65547f289.js +0 -1
  257. package/.next/static/chunks/app/api/board-annotations/[id]/route-4cdc03c65547f289.js +0 -1
  258. package/.next/static/chunks/app/api/board-annotations/route-4cdc03c65547f289.js +0 -1
  259. package/.next/static/chunks/app/api/board-layout/route-4cdc03c65547f289.js +0 -1
  260. package/.next/static/chunks/app/api/bug-flags/[id]/route-4cdc03c65547f289.js +0 -1
  261. package/.next/static/chunks/app/api/bug-flags/route-4cdc03c65547f289.js +0 -1
  262. package/.next/static/chunks/app/api/code-graph/position/route-4cdc03c65547f289.js +0 -1
  263. package/.next/static/chunks/app/api/code-graph/route-4cdc03c65547f289.js +0 -1
  264. package/.next/static/chunks/app/api/context/feature/route-4cdc03c65547f289.js +0 -1
  265. package/.next/static/chunks/app/api/context/file/route-4cdc03c65547f289.js +0 -1
  266. package/.next/static/chunks/app/api/context/route-4cdc03c65547f289.js +0 -1
  267. package/.next/static/chunks/app/api/db/arrange/route-4cdc03c65547f289.js +0 -1
  268. package/.next/static/chunks/app/api/db/backfill-access/route-4cdc03c65547f289.js +0 -1
  269. package/.next/static/chunks/app/api/db/position/route-4cdc03c65547f289.js +0 -1
  270. package/.next/static/chunks/app/api/db/prune-planned/route-4cdc03c65547f289.js +0 -1
  271. package/.next/static/chunks/app/api/db/reconcile-endpoints/route-4cdc03c65547f289.js +0 -1
  272. package/.next/static/chunks/app/api/db/relations/[id]/route-4cdc03c65547f289.js +0 -1
  273. package/.next/static/chunks/app/api/db/tables/[id]/route-4cdc03c65547f289.js +0 -1
  274. package/.next/static/chunks/app/api/draft/approve/route-4cdc03c65547f289.js +0 -1
  275. package/.next/static/chunks/app/api/draft/route-4cdc03c65547f289.js +0 -1
  276. package/.next/static/chunks/app/api/draft/status/route-4cdc03c65547f289.js +0 -1
  277. package/.next/static/chunks/app/api/edges/[id]/route-4cdc03c65547f289.js +0 -1
  278. package/.next/static/chunks/app/api/edges/route-4cdc03c65547f289.js +0 -1
  279. package/.next/static/chunks/app/api/endpoints/[id]/route-4cdc03c65547f289.js +0 -1
  280. package/.next/static/chunks/app/api/entities/route-4cdc03c65547f289.js +0 -1
  281. package/.next/static/chunks/app/api/feedback/[id]/route-4cdc03c65547f289.js +0 -1
  282. package/.next/static/chunks/app/api/feedback/[id]/vote/route-4cdc03c65547f289.js +0 -1
  283. package/.next/static/chunks/app/api/feedback/route-4cdc03c65547f289.js +0 -1
  284. package/.next/static/chunks/app/api/ingest/route-4cdc03c65547f289.js +0 -1
  285. package/.next/static/chunks/app/api/init/route-4cdc03c65547f289.js +0 -1
  286. package/.next/static/chunks/app/api/map/describe/route-4cdc03c65547f289.js +0 -1
  287. package/.next/static/chunks/app/api/map/files/route-4cdc03c65547f289.js +0 -1
  288. package/.next/static/chunks/app/api/map/finish/route-4cdc03c65547f289.js +0 -1
  289. package/.next/static/chunks/app/api/map/route-4cdc03c65547f289.js +0 -1
  290. package/.next/static/chunks/app/api/map/start/route-4cdc03c65547f289.js +0 -1
  291. package/.next/static/chunks/app/api/map/touch-active/route-4cdc03c65547f289.js +0 -1
  292. package/.next/static/chunks/app/api/nodes/[id]/position/route-4cdc03c65547f289.js +0 -1
  293. package/.next/static/chunks/app/api/nodes/[id]/route-4cdc03c65547f289.js +0 -1
  294. package/.next/static/chunks/app/api/nodes/positions/route-4cdc03c65547f289.js +0 -1
  295. package/.next/static/chunks/app/api/nodes/route-4cdc03c65547f289.js +0 -1
  296. package/.next/static/chunks/app/api/nodes/subtasks/route-4cdc03c65547f289.js +0 -1
  297. package/.next/static/chunks/app/api/notes/[id]/route-4cdc03c65547f289.js +0 -1
  298. package/.next/static/chunks/app/api/notes/route-4cdc03c65547f289.js +0 -1
  299. package/.next/static/chunks/app/api/open/route-4cdc03c65547f289.js +0 -1
  300. package/.next/static/chunks/app/api/plan/annotations/route-4cdc03c65547f289.js +0 -1
  301. package/.next/static/chunks/app/api/plan/approve/route-4cdc03c65547f289.js +0 -1
  302. package/.next/static/chunks/app/api/plan/history/route-4cdc03c65547f289.js +0 -1
  303. package/.next/static/chunks/app/api/plan/markdown/route-4cdc03c65547f289.js +0 -1
  304. package/.next/static/chunks/app/api/plan/presence/route-4cdc03c65547f289.js +0 -1
  305. package/.next/static/chunks/app/api/plan/route-4cdc03c65547f289.js +0 -1
  306. package/.next/static/chunks/app/api/plan/verdict/route-4cdc03c65547f289.js +0 -1
  307. package/.next/static/chunks/app/api/preferences/route-4cdc03c65547f289.js +0 -1
  308. package/.next/static/chunks/app/api/reset/route-4cdc03c65547f289.js +0 -1
  309. package/.next/static/chunks/app/api/stream/route-4cdc03c65547f289.js +0 -1
  310. package/.next/static/chunks/app/api/version/route-4cdc03c65547f289.js +0 -1
  311. package/.next/static/chunks/app/api/workspace/activate/route-4cdc03c65547f289.js +0 -1
  312. package/.next/static/chunks/app/api/workspace/route-4cdc03c65547f289.js +0 -1
  313. package/.next/static/chunks/next/dist/client/components/builtin/app-error-4cdc03c65547f289.js +0 -1
  314. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-4cdc03c65547f289.js +0 -1
  315. package/.next/static/chunks/next/dist/client/components/builtin/not-found-4cdc03c65547f289.js +0 -1
  316. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-4cdc03c65547f289.js +0 -1
  317. /package/.next/static/{OgbjxEMZfqIJgM1cAQ4cs → p7RuAgL_wa-K9PsrN1Js0}/_ssgManifest.js +0 -0
package/.next/trace-build CHANGED
@@ -1 +1 @@
1
- [{"name":"run-webpack","duration":27406623,"timestamp":57469586,"id":14,"parentId":1,"tags":{},"startTime":1781199932454,"traceId":"e34b2e31346c17a1"},{"name":"run-typescript","duration":11489459,"timestamp":84878997,"id":3966,"parentId":1,"tags":{},"startTime":1781199959864,"traceId":"e34b2e31346c17a1"},{"name":"static-check","duration":721435,"timestamp":96386659,"id":3969,"parentId":1,"tags":{},"startTime":1781199971372,"traceId":"e34b2e31346c17a1"},{"name":"static-generation","duration":3550410,"timestamp":98300615,"id":4109,"parentId":1,"tags":{},"startTime":1781199973286,"traceId":"e34b2e31346c17a1"},{"name":"collect-build-traces","duration":12089105,"timestamp":97110996,"id":4106,"parentId":1,"tags":{},"startTime":1781199972096,"traceId":"e34b2e31346c17a1"},{"name":"telemetry-flush","duration":52,"timestamp":109204187,"id":4118,"parentId":1,"tags":{},"startTime":1781199984189,"traceId":"e34b2e31346c17a1"},{"name":"next-build","duration":51869478,"timestamp":57334771,"id":1,"tags":{"buildMode":"default","version":"16.2.7","bundler":"webpack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781199932320,"traceId":"e34b2e31346c17a1"}]
1
+ [{"name":"run-webpack","duration":29275564,"timestamp":127503423,"id":14,"parentId":1,"tags":{},"startTime":1781205906327,"traceId":"9fc340e37337f1c7"},{"name":"run-typescript","duration":12093817,"timestamp":156781363,"id":3987,"parentId":1,"tags":{},"startTime":1781205935605,"traceId":"9fc340e37337f1c7"},{"name":"static-check","duration":744499,"timestamp":168895605,"id":3990,"parentId":1,"tags":{},"startTime":1781205947719,"traceId":"9fc340e37337f1c7"},{"name":"static-generation","duration":4215901,"timestamp":170631071,"id":4132,"parentId":1,"tags":{},"startTime":1781205949455,"traceId":"9fc340e37337f1c7"},{"name":"collect-build-traces","duration":13753910,"timestamp":169642981,"id":4129,"parentId":1,"tags":{},"startTime":1781205948467,"traceId":"9fc340e37337f1c7"},{"name":"telemetry-flush","duration":57,"timestamp":183400558,"id":4141,"parentId":1,"tags":{},"startTime":1781205962224,"traceId":"9fc340e37337f1c7"},{"name":"next-build","duration":56023131,"timestamp":127377495,"id":1,"tags":{"buildMode":"default","version":"16.2.7","bundler":"webpack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1781205906201,"traceId":"9fc340e37337f1c7"}]
@@ -1,10 +1,10 @@
1
- // File: /home/runner/work/beacon/beacon/app/api/plan/route.ts
2
- import * as entry from '../../../../../app/api/plan/route.js'
1
+ // File: /home/runner/work/beacon/beacon/app/api/project-meta/route.ts
2
+ import * as entry from '../../../../../app/api/project-meta/route.js'
3
3
  import type { NextRequest } from 'next/server.js'
4
4
 
5
5
  import type { InstantConfigForTypeCheckInternal } from 'next/dist/build/segment-config/app/app-segment-config.js'
6
6
 
7
- type TEntry = typeof import('../../../../../app/api/plan/route.js')
7
+ type TEntry = typeof import('../../../../../app/api/project-meta/route.js')
8
8
 
9
9
  type SegmentParams<T extends Object = any> = T extends Record<string, any>
10
10
  ? { [K in keyof T]: T[K] extends string ? string | string[] | undefined : never }
@@ -2,7 +2,7 @@
2
2
  // Do not edit this file manually
3
3
 
4
4
  type AppRoutes = "/" | "/docs" | "/feedback" | "/help" | "/map" | "/plan" | "/settings"
5
- type AppRouteHandlerRoutes = "/api/board-annotations" | "/api/board-annotations/[id]" | "/api/board-layout" | "/api/bug-flags" | "/api/bug-flags/[id]" | "/api/code-graph" | "/api/code-graph/position" | "/api/context" | "/api/context/feature" | "/api/context/file" | "/api/db/arrange" | "/api/db/backfill-access" | "/api/db/position" | "/api/db/prune-planned" | "/api/db/reconcile-endpoints" | "/api/db/relations/[id]" | "/api/db/tables/[id]" | "/api/draft" | "/api/draft/approve" | "/api/draft/status" | "/api/edges" | "/api/edges/[id]" | "/api/endpoints/[id]" | "/api/entities" | "/api/feedback" | "/api/feedback/[id]" | "/api/feedback/[id]/vote" | "/api/ingest" | "/api/init" | "/api/map" | "/api/map/describe" | "/api/map/files" | "/api/map/finish" | "/api/map/start" | "/api/map/touch-active" | "/api/nodes" | "/api/nodes/[id]" | "/api/nodes/[id]/position" | "/api/nodes/positions" | "/api/nodes/subtasks" | "/api/notes" | "/api/notes/[id]" | "/api/open" | "/api/plan" | "/api/plan/annotations" | "/api/plan/approve" | "/api/plan/history" | "/api/plan/markdown" | "/api/plan/presence" | "/api/plan/verdict" | "/api/preferences" | "/api/reset" | "/api/stream" | "/api/version" | "/api/workspace" | "/api/workspace/activate"
5
+ type AppRouteHandlerRoutes = "/api/board-annotations" | "/api/board-annotations/[id]" | "/api/board-layout" | "/api/bug-flags" | "/api/bug-flags/[id]" | "/api/code-graph" | "/api/code-graph/position" | "/api/context" | "/api/context/feature" | "/api/context/file" | "/api/db/arrange" | "/api/db/backfill-access" | "/api/db/position" | "/api/db/prune-planned" | "/api/db/reconcile-endpoints" | "/api/db/relations/[id]" | "/api/db/tables/[id]" | "/api/draft" | "/api/draft/approve" | "/api/draft/status" | "/api/edges" | "/api/edges/[id]" | "/api/endpoints/[id]" | "/api/entities" | "/api/feedback" | "/api/feedback/[id]" | "/api/feedback/[id]/vote" | "/api/ingest" | "/api/init" | "/api/map" | "/api/map/describe" | "/api/map/files" | "/api/map/finish" | "/api/map/start" | "/api/map/touch-active" | "/api/nodes" | "/api/nodes/[id]" | "/api/nodes/[id]/position" | "/api/nodes/positions" | "/api/nodes/subtasks" | "/api/notes" | "/api/notes/[id]" | "/api/open" | "/api/plan" | "/api/plan/annotations" | "/api/plan/approve" | "/api/plan/history" | "/api/plan/markdown" | "/api/plan/presence" | "/api/plan/verdict" | "/api/preferences" | "/api/project-meta" | "/api/reset" | "/api/stream" | "/api/version" | "/api/workspace" | "/api/workspace/activate"
6
6
  type PageRoutes = never
7
7
  type LayoutRoutes = "/"
8
8
  type RedirectRoutes = never
@@ -63,6 +63,7 @@ interface ParamMap {
63
63
  "/api/plan/presence": {}
64
64
  "/api/plan/verdict": {}
65
65
  "/api/preferences": {}
66
+ "/api/project-meta": {}
66
67
  "/api/reset": {}
67
68
  "/api/stream": {}
68
69
  "/api/version": {}
@@ -569,6 +569,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
569
569
  type __Unused = __Check
570
570
  }
571
571
 
572
+ // Validate ../../app/api/project-meta/route.ts
573
+ {
574
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/project-meta">> = Specific
575
+ const handler = {} as typeof import("../../app/api/project-meta/route.js")
576
+ type __Check = __IsExpected<typeof handler>
577
+ // @ts-ignore
578
+ type __Unused = __Check
579
+ }
580
+
572
581
  // Validate ../../app/api/reset/route.ts
573
582
  {
574
583
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/reset">> = Specific
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import{execSync as v,spawn as k}from"child_process";import{existsSync as S,mkdirSync as f,openSync as h,readFileSync as m,writeFileSync as g}from"fs";import{homedir as u,platform as w}from"os";import{basename as d,dirname as F,join as G}from"path";import{fileURLToPath as c}from"url";var P=F(c(import.meta.url)),L=d(F(P))==="dist",B=L?F(F(P)):F(P),O=process.cwd(),T=process.env.BEACON_HOME||G(u(),".beacon"),_=G(T,"server.json"),R=process.env.PORT||"4319";if(!process.env.BEACON_MIGRATIONS_DIR)process.env.BEACON_MIGRATIONS_DIR=G(B,"drizzle");function Q(z){if(!L)return G(B,z);return G(B,"dist",z.replace(/\.ts$/,".js"))}var $=process.argv[2];if($==="mcp")await import(Q("bin/mcp.ts"));else if($==="hook")await import(Q("bin/hook.ts"));else if($==="plan")await import(Q("bin/plan.ts"));else if($==="prompt")await import(Q("bin/prompt.ts"));else if($==="stop-hook")await import(Q("bin/stop-hook.ts"));else if($==="stop")i();else if($==="remove")await import(Q("bin/remove.ts"));else if($==="setup")await x(C()||O);else if($==="doctor")await import(Q("bin/doctor.ts"));else if($==="uninstall")await import(Q("bin/uninstall.ts"));else if($==="update")await s(process.argv.includes("--force")||process.argv.includes("-f"));else if($==="version"||$==="--version"||$==="-v")console.log(b());else await n();async function x(z,X=!1){let{installInitSkill:q,installRefreshSkill:J,installCodexRepoSkills:Y,ensureMcp:H,ensureWorkflowDoc:V}=await import(Q("lib/assets.ts")),{selfHealGlobal:I}=await import(Q("lib/global-install.ts")),{codexDetected:j}=await import(Q("lib/codex-install.ts")),M=await I(),K=q(z),U=J(z);V(z);let Z=H(z),y=j()?Y(z):[];if(X){if(Z.added)console.log(`[beacon] registered Beacon MCP in ${Z.path} \u2014 restart your agent CLI to use @beacon mentions.`)}else{console.log(`
3
+ import{execSync as v,spawn as S}from"child_process";import{existsSync as f,mkdirSync as h,openSync as m,readFileSync as g,writeFileSync as u}from"fs";import{homedir as d,platform as w}from"os";import{basename as c,dirname as F,join as G}from"path";import{fileURLToPath as p}from"url";var P=F(p(import.meta.url)),L=c(F(P))==="dist",B=L?F(F(P)):F(P),O=process.cwd(),T=process.env.BEACON_HOME||G(d(),".beacon"),_=G(T,"server.json"),R=process.env.PORT||"4319";if(!process.env.BEACON_MIGRATIONS_DIR)process.env.BEACON_MIGRATIONS_DIR=G(B,"drizzle");function Q(z){if(!L)return G(B,z);return G(B,"dist",z.replace(/\.ts$/,".js"))}var $=process.argv[2];if($==="mcp")await import(Q("bin/mcp.ts"));else if($==="hook")await import(Q("bin/hook.ts"));else if($==="plan")await import(Q("bin/plan.ts"));else if($==="prompt")await import(Q("bin/prompt.ts"));else if($==="stop-hook")await import(Q("bin/stop-hook.ts"));else if($==="stop")k();else if($==="remove")await import(Q("bin/remove.ts"));else if($==="setup")await x(C()||O);else if($==="doctor")await import(Q("bin/doctor.ts"));else if($==="uninstall")await import(Q("bin/uninstall.ts"));else if($==="update")await i(process.argv.includes("--force")||process.argv.includes("-f"));else if($==="version"||$==="--version"||$==="-v")console.log(b());else await s();async function x(z,X=!1){let{installInitSkill:q,installRefreshSkill:J,installCodexRepoSkills:Y,ensureMcp:H,ensureWorkflowDoc:V}=await import(Q("lib/assets.ts")),{selfHealGlobal:I}=await import(Q("lib/global-install.ts")),{codexDetected:j}=await import(Q("lib/codex-install.ts")),M=await I(),K=q(z),U=J(z);V(z);let Z=H(z),y=j()?Y(z):[];if(X){if(Z.added)console.log(`[beacon] registered Beacon MCP in ${Z.path} \u2014 restart your agent CLI to use @beacon mentions.`)}else{console.log(`
4
4
  \u25C9 Beacon setup \xB7 ${z}`),console.log(` \u2713 skill: ${K}`),console.log(` \u2713 skill: ${U}`);for(let N of y)console.log(` \u2713 skill: ${N}`);console.log(` ${Z.added?"\u2713 added ":"\xB7 kept "} Beacon MCP in ${Z.path}`),console.log(` \u2192 in this repo, run /beacon-init in your agent (Claude Code or Codex) to map the repo.
5
- `)}return{initSkill:K,refreshSkill:U,mcp:Z,codexSkills:y,heal:M}}function C(){try{return v("git rev-parse --show-toplevel",{cwd:O,stdio:["ignore","pipe","ignore"]}).toString().trim()}catch{return""}}function D(z){try{return process.kill(z,0),!0}catch{return!1}}function A(z){try{return JSON.parse(m(z,"utf8"))}catch{return null}}async function E(z){try{return(await fetch(z)).ok}catch{return!1}}async function p(z,X=60){for(let q=0;q<X;q++){if(await E(z))return!0;await new Promise((J)=>setTimeout(J,500))}return!1}function t(){f(T,{recursive:!0});let z=h(G(T,"server.log"),"a"),X={...process.env,PORT:R,BEACON_NO_OPEN:"1",BEACON_MIGRATIONS_DIR:G(B,"drizzle")};delete X.BEACON_REPO,delete X.BEACON_DATA_DIR,delete X.DATABASE_URL;let J=k("bun",L?["run","start"]:["run","dev"],{cwd:B,env:X,detached:!0,stdio:["ignore",z,z]});J.unref();let Y={pid:J.pid??0,port:R};return g(_,JSON.stringify(Y)),Y}async function a(){let z=A(_);if(z&&D(z.pid)&&await E(`http://localhost:${z.port}/api/workspace`))return z.port;console.log("[beacon] starting the Beacon server\u2026");let{port:X}=t();if(!await p(`http://localhost:${X}/api/workspace`))console.log("[beacon] (server is taking a while \u2014 it may still be compiling)");return X}function l(z){if(process.env.BEACON_NO_OPEN)return;let X=w()==="darwin"?"open":w()==="win32"?"start":"xdg-open";try{v(`${X} "${z}"`,{stdio:"ignore"})}catch{}}async function n(){let z=C()||O,{registerWorkspaceExplicit:X,idForPath:q,dataDirFor:J,ensureWorkspaceDb:Y,isRegistrableWorkspacePath:H}=await import(Q("lib/workspaces.ts"));if(!H(z))console.error(`[beacon] refusing to open Beacon in ${z} \u2014 that's your home directory, not a project.
6
- `+" cd into a repo (or run `git init` there) and try again."),process.exit(1);let V=q(z),I=J(V),j=!S(G(I,"db.sqlite"));if(j)console.log(`[beacon] first run for ${z} \u2014 creating database\u2026`);let M=await Y(V);if(!M.ok)console.error(`[beacon] failed to provision database: ${M.error}`);if(j)console.log("[beacon] tip: already have code here? run `/beacon-init` in your agent (Claude Code or Codex) to map the project.");let{heal:K}=await x(z,!0),U=[];if(K.skillsAdded.length)U.push(`skills ${K.skillsAdded.join(", ")}`);if(K.hooksAdded)U.push(`${K.hooksAdded} Claude Code hook${K.hooksAdded===1?"":"s"}`);if(K.claudeMdBlockTouched)U.push("global CLAUDE.md block");if(U.length)console.log(`[beacon] wired into ~/.claude/: ${U.join(" + ")}.`);let Z=K.codex;if(Z){let W=[];if(Z.skillsAdded.length)W.push(`skills ${Z.skillsAdded.join(", ")}`);if(Z.hooksAdded)W.push(`${Z.hooksAdded} Codex hook${Z.hooksAdded===1?"":"s"}`);if(Z.agentsMdBlockTouched)W.push("global AGENTS.md block");if(Z.mcp.added)W.push("MCP entry in config.toml");if(W.length)console.log(`[beacon] wired into ~/.codex/: ${W.join(" + ")}.`);if(Z.mcp.error)console.log(`[beacon] codex MCP not wired: ${Z.mcp.error}`)}X(z);let y=await a(),N=`http://localhost:${y}/api/workspace/activate?id=${V}&redirect=/map`;console.log(`
5
+ `)}return{initSkill:K,refreshSkill:U,mcp:Z,codexSkills:y,heal:M}}function C(){try{return v("git rev-parse --show-toplevel",{cwd:O,stdio:["ignore","pipe","ignore"]}).toString().trim()}catch{return""}}function E(z){try{return process.kill(z,0),!0}catch{return!1}}function A(z){try{return JSON.parse(g(z,"utf8"))}catch{return null}}async function D(z){try{return(await fetch(z)).ok}catch{return!1}}async function t(z,X=60){for(let q=0;q<X;q++){if(await D(z))return!0;await new Promise((J)=>setTimeout(J,500))}return!1}function a(){h(T,{recursive:!0});let z=m(G(T,"server.log"),"a"),X={...process.env,PORT:R,BEACON_NO_OPEN:"1",BEACON_MIGRATIONS_DIR:G(B,"drizzle")};delete X.BEACON_REPO,delete X.BEACON_DATA_DIR,delete X.DATABASE_URL;let J=S("bun",L?["run","start"]:["run","dev"],{cwd:B,env:X,detached:!0,stdio:["ignore",z,z]});J.unref();let Y={pid:J.pid??0,port:R};return u(_,JSON.stringify(Y)),Y}async function l(){let z=A(_);if(z&&E(z.pid)&&await D(`http://localhost:${z.port}/api/workspace`))return z.port;console.log("[beacon] starting the Beacon server\u2026");let{port:X}=a();if(!await t(`http://localhost:${X}/api/workspace`))console.log("[beacon] (server is taking a while \u2014 it may still be compiling)");return X}function n(z){if(process.env.BEACON_NO_OPEN)return;let X=w()==="darwin"?"open":w()==="win32"?"start":"xdg-open";try{v(`${X} "${z}"`,{stdio:"ignore"})}catch{}}async function s(){let z=C()||O,{registerWorkspaceExplicit:X,idForPath:q,dataDirFor:J,ensureWorkspaceDb:Y,isRegistrableWorkspacePath:H}=await import(Q("lib/workspaces.ts"));if(!H(z))console.error(`[beacon] refusing to open Beacon in ${z} \u2014 that's your home directory, not a project.
6
+ `+" cd into a repo (or run `git init` there) and try again."),process.exit(1);let V=q(z),I=J(V),j=!f(G(I,"db.sqlite"));if(j)console.log(`[beacon] first run for ${z} \u2014 creating database\u2026`);let M=await Y(V);if(!M.ok)console.error(`[beacon] failed to provision database: ${M.error}`);if(j)console.log("[beacon] tip: already have code here? run `/beacon-init` in your agent (Claude Code or Codex) to map the project.");let{heal:K}=await x(z,!0),U=[];if(K.skillsAdded.length)U.push(`skills ${K.skillsAdded.join(", ")}`);if(K.hooksAdded)U.push(`${K.hooksAdded} Claude Code hook${K.hooksAdded===1?"":"s"}`);if(K.claudeMdBlockTouched)U.push("global CLAUDE.md block");if(U.length)console.log(`[beacon] wired into ~/.claude/: ${U.join(" + ")}.`);let Z=K.codex;if(Z){let W=[];if(Z.skillsAdded.length)W.push(`skills ${Z.skillsAdded.join(", ")}`);if(Z.hooksAdded)W.push(`${Z.hooksAdded} Codex hook${Z.hooksAdded===1?"":"s"}`);if(Z.agentsMdBlockTouched)W.push("global AGENTS.md block");if(Z.mcp.added)W.push("MCP entry in config.toml");if(W.length)console.log(`[beacon] wired into ~/.codex/: ${W.join(" + ")}.`);if(Z.mcp.error)console.log(`[beacon] codex MCP not wired: ${Z.mcp.error}`)}X(z);let y=await l(),N=`http://localhost:${y}/api/workspace/activate?id=${V}&redirect=/map`;console.log(`
7
7
  \u25C9 Beacon
8
8
  repo: ${z}
9
9
  data: ${I}
10
10
  url: http://localhost:${y}
11
- `),console.log(" (the server keeps running in the background \u2014 `beacon stop` to stop it)\n"),l(N)}function b(){return A(G(B,"package.json"))?.version??"0.0.0"}async function s(z){let X=b(),{INSTALL_COMMAND:q,NPM_LATEST_URL:J}=await import(Q("lib/release.ts"));if(w()==="win32"){console.log(`[beacon] current version v${X}.`),console.log(`[beacon] on Windows, update with your package manager:
11
+ `),console.log(" (the server keeps running in the background \u2014 `beacon stop` to stop it)\n"),n(N)}function b(){return A(G(B,"package.json"))?.version??"0.0.0"}async function i(z){let X=b(),{INSTALL_COMMAND:q,NPM_LATEST_URL:J}=await import(Q("lib/release.ts"));if(w()==="win32"){console.log(`[beacon] current version v${X}.`),console.log(`[beacon] on Windows, update with your package manager:
12
12
  npm i -g trybeacon@latest`);return}let Y=null;try{let H=await fetch(J);if(H.ok)Y=(await H.json()).version??null}catch{}if(Y&&!z){let{isNewerVersion:H}=await import(Q("lib/semver.ts"));if(!H(Y,X)){console.log(`[beacon] already on the latest version (v${X}).`),console.log(" run `beacon update --force` to reinstall anyway.");return}}console.log(Y?`[beacon] updating Beacon v${X} \u2192 v${Y}\u2026`:`[beacon] reinstalling Beacon (current v${X})\u2026`);try{v(q,{stdio:"inherit"})}catch{console.error(`[beacon] update failed. Run it manually:
13
- ${q}`),process.exitCode=1;return}console.log("[beacon] updated. Restart the daemon to run the new version: `beacon stop` then `beacon`.")}function i(){let z=A(_);if(z&&D(z.pid))try{try{process.kill(-z.pid)}catch{process.kill(z.pid)}console.log(`[beacon] stopped the server (pid ${z.pid}).`)}catch{console.log("[beacon] could not stop the server.")}else console.log("[beacon] no server running.")}
13
+ ${q}`),process.exitCode=1;return}k(),console.log("[beacon] updated. Run `beacon` to relaunch on the new version.")}function k(){let z=A(_);if(z&&E(z.pid))try{try{process.kill(-z.pid)}catch{process.kill(z.pid)}console.log(`[beacon] stopped the server (pid ${z.pid}).`)}catch{console.log("[beacon] could not stop the server.")}else console.log("[beacon] no server running.")}
@@ -28,8 +28,9 @@ The user already has Beacon running. You're going to map this repository's archi
28
28
 
29
29
  A single \`beacon_init_persist\` MCP tool call with:
30
30
 
31
- - **components**: 8\u201325 main building blocks of this codebase. NOT every file. Group them by \`domain\` (short UPPERCASE: AUTH, API, DATA, UI, JOBS, INFRA, BILLING, SEARCH, \u2026). For each: a one-line technical \`role\`, a one-sentence plain-language \`plain\`, the few \`files\` that implement it (repo-relative), and \`depends\` listing other component titles it relies on. Use the dependency graph you can see in the source \u2014 files that import each other heavily usually belong together. If you spot a bug or something worth investigating while reading a component's code, add \`bugs: [{ note }]\` to that component \u2014 it renders as a bug flag on the node (attributed to the agent). Only flag what you actually saw in the code; don't speculate.
32
- - **roadmap**: 3\u20136 BROAD strategic directions. Big-picture themes only \u2014 "Harden auth & security", "Add observability", "Scale the data layer", "Pay down test-coverage debt". NOT detailed tasks. NOT file-level. Each gets a short title and one-line \`why\`. If one of them is a concrete BUG to fix (something broken you saw in the code), add \`kind: "BUG"\` so it renders as a typed bug card.
31
+ - **hasFrontend**: \`true\` or \`false\` \u2014 does this repo have a frontend surface (UI code)? You just read the repo, so you know. Set it explicitly; it gates the frontend/backend \`layer\` distinction on the boards (a pure-backend repo never shows it).
32
+ - **components**: 8\u201325 main building blocks of this codebase. NOT every file. Group them by \`domain\` (short UPPERCASE: AUTH, API, DATA, UI, JOBS, INFRA, BILLING, SEARCH, \u2026). For each: a one-line technical \`role\`, a one-sentence plain-language \`plain\`, the few \`files\` that implement it (repo-relative), \`depends\` listing other component titles it relies on \u2014 and, when \`hasFrontend\` is true, \`layer\` (\`"frontend" | "backend" | "fullstack"\`). Use the dependency graph you can see in the source \u2014 files that import each other heavily usually belong together. If you spot a bug or something worth investigating while reading a component's code, add \`bugs: [{ note }]\` to that component \u2014 it renders as a bug flag on the node (attributed to the agent). Only flag what you actually saw in the code; don't speculate.
33
+ - **roadmap**: 3\u20136 BROAD strategic directions. Big-picture themes only \u2014 "Harden auth & security", "Add observability", "Scale the data layer", "Pay down test-coverage debt". NOT detailed tasks. NOT file-level. Each gets a short title and one-line \`why\`. If one of them is a concrete BUG to fix (something broken you saw in the code), add \`kind: "BUG"\` so it renders as a typed bug card. When \`hasFrontend\` is true, give each a \`layer\` too (\`"frontend" | "backend" | "fullstack"\`).
33
34
  - **overview**: one paragraph describing what this project is and its stack. This lands in AGENTS.md as the project intro.
34
35
  - **conventions**: 3\u20138 concrete rules a contributor MUST follow \u2014 build/test commands, where code goes, patterns, things easy to get wrong. Infer from actual files, not assumptions.
35
36
  - **snapshot** (optional but encouraged): \`{ tables, relations, endpoints }\` for the existing database. If the project uses Prisma, read \`prisma/schema.prisma\`. If SQLAlchemy, read the model files. If Django, read \`models.py\`. If you find no obvious schema source, skip the snapshot \u2014 don't fabricate.
@@ -87,7 +88,7 @@ The one caveat: if the user manually edited an INIT-source node on the canvas (e
87
88
  - **~ changed**: COMPONENT_X (role expanded to cover Y)
88
89
  - **schema**: + 2 new tables (TableA, TableB); + 3 new endpoints; \u2212 1 deprecated endpoint
89
90
  No need to wait for confirmation \u2014 just show the diff so the user sees what's about to land.
90
- 5. **Call \`beacon_init_persist\`** ONCE with the refreshed full analysis (same shape as init: \`components\`, \`roadmap\`, \`overview\`, \`conventions\`, \`snapshot\`). It replaces all init-source nodes and regenerates \`AGENTS.md\`. Bug flags already on a component survive the refresh (they're carried over by title); add \`bugs: [{ note }]\` for anything NEW you found worth investigating \u2014 identical open flags are not duplicated.
91
+ 5. **Call \`beacon_init_persist\`** ONCE with the refreshed full analysis (same shape as init: \`components\`, \`roadmap\`, \`overview\`, \`conventions\`, \`snapshot\`, \`hasFrontend\` \u2014 re-assert it, the stack may have changed). It replaces all init-source nodes and regenerates \`AGENTS.md\`. Bug flags already on a component survive the refresh (they're carried over by title); add \`bugs: [{ note }]\` for anything NEW you found worth investigating \u2014 identical open flags are not duplicated.
91
92
 
92
93
  ## What you should NOT do
93
94
 
@@ -166,6 +167,8 @@ When listing endpoints, give each \`uses: [{ table, access }]\` so the endpoint\
166
167
 
167
168
  EVERY feature MUST carry \`category\` (e.g. AUTH | SEARCH | DATA | INTEL | BILLING | \u2026; \`cluster\` is accepted as an alias) and \`priority\` (0 = P0 critical, 1 = P1 high, 2 = P2 medium, 3 = P3 low). Beacon REJECTS a plan whose features omit either \u2014 \`beacon_propose_plan\` returns the list of what's missing, and an ExitPlanMode \`\`\`beacon block is denied \u2014 so set both on every feature instead of relying on defaults.
168
169
 
170
+ When the workspace HAS A FRONTEND (Beacon knows \u2014 the agent set \`hasFrontend\` at init, or frontend files were detected), every feature must ALSO carry \`layer\`: \`"frontend" | "backend" | "fullstack"\` \u2014 which side of the stack the work lands on. Plans omitting it are REJECTED the same way category/priority are. It works on every surface that creates roadmap cards (\`beacon_propose_plan\`, the \`\`\`beacon block, \`beacon_start_feature\`, \`beacon_add_subtasks\` \u2014 sub-tasks default to the parent's layer) and on architecture components (\`beacon_describe_feature\` / \`beacon_init_persist\`). In a pure-backend repo, never set it \u2014 the boards don't show it there.
171
+
169
172
  REUSE before you create. Call \`beacon_map\` to see the features + categories that already exist. Beacon HARD-BLOCKS a feature that duplicates an existing one (it returns the existing feature to use instead) and one created without a category \u2014 so don't re-create work that's already on the board, and reuse an existing category rather than a near-synonym. \`category\` is the ONLY domain field. \`front\` (in \`beacon_start_feature\`) nests a feature UNDER an existing parent feature \u2014 it is NOT a domain tag; a \`front\` that matches no real feature is rejected.
170
173
 
171
174
  When listing features, give each \`dependsOn: ["Other feature title", \u2026]\` for any feature that must ship after another in the same plan. Beacon draws these as "depends on" links so the roadmap shows the dependency chain instead of loose, disconnected cards.
package/dist/bin/hook.js CHANGED
@@ -28,8 +28,9 @@ The user already has Beacon running. You're going to map this repository's archi
28
28
 
29
29
  A single \`beacon_init_persist\` MCP tool call with:
30
30
 
31
- - **components**: 8\u201325 main building blocks of this codebase. NOT every file. Group them by \`domain\` (short UPPERCASE: AUTH, API, DATA, UI, JOBS, INFRA, BILLING, SEARCH, \u2026). For each: a one-line technical \`role\`, a one-sentence plain-language \`plain\`, the few \`files\` that implement it (repo-relative), and \`depends\` listing other component titles it relies on. Use the dependency graph you can see in the source \u2014 files that import each other heavily usually belong together. If you spot a bug or something worth investigating while reading a component's code, add \`bugs: [{ note }]\` to that component \u2014 it renders as a bug flag on the node (attributed to the agent). Only flag what you actually saw in the code; don't speculate.
32
- - **roadmap**: 3\u20136 BROAD strategic directions. Big-picture themes only \u2014 "Harden auth & security", "Add observability", "Scale the data layer", "Pay down test-coverage debt". NOT detailed tasks. NOT file-level. Each gets a short title and one-line \`why\`. If one of them is a concrete BUG to fix (something broken you saw in the code), add \`kind: "BUG"\` so it renders as a typed bug card.
31
+ - **hasFrontend**: \`true\` or \`false\` \u2014 does this repo have a frontend surface (UI code)? You just read the repo, so you know. Set it explicitly; it gates the frontend/backend \`layer\` distinction on the boards (a pure-backend repo never shows it).
32
+ - **components**: 8\u201325 main building blocks of this codebase. NOT every file. Group them by \`domain\` (short UPPERCASE: AUTH, API, DATA, UI, JOBS, INFRA, BILLING, SEARCH, \u2026). For each: a one-line technical \`role\`, a one-sentence plain-language \`plain\`, the few \`files\` that implement it (repo-relative), \`depends\` listing other component titles it relies on \u2014 and, when \`hasFrontend\` is true, \`layer\` (\`"frontend" | "backend" | "fullstack"\`). Use the dependency graph you can see in the source \u2014 files that import each other heavily usually belong together. If you spot a bug or something worth investigating while reading a component's code, add \`bugs: [{ note }]\` to that component \u2014 it renders as a bug flag on the node (attributed to the agent). Only flag what you actually saw in the code; don't speculate.
33
+ - **roadmap**: 3\u20136 BROAD strategic directions. Big-picture themes only \u2014 "Harden auth & security", "Add observability", "Scale the data layer", "Pay down test-coverage debt". NOT detailed tasks. NOT file-level. Each gets a short title and one-line \`why\`. If one of them is a concrete BUG to fix (something broken you saw in the code), add \`kind: "BUG"\` so it renders as a typed bug card. When \`hasFrontend\` is true, give each a \`layer\` too (\`"frontend" | "backend" | "fullstack"\`).
33
34
  - **overview**: one paragraph describing what this project is and its stack. This lands in AGENTS.md as the project intro.
34
35
  - **conventions**: 3\u20138 concrete rules a contributor MUST follow \u2014 build/test commands, where code goes, patterns, things easy to get wrong. Infer from actual files, not assumptions.
35
36
  - **snapshot** (optional but encouraged): \`{ tables, relations, endpoints }\` for the existing database. If the project uses Prisma, read \`prisma/schema.prisma\`. If SQLAlchemy, read the model files. If Django, read \`models.py\`. If you find no obvious schema source, skip the snapshot \u2014 don't fabricate.
@@ -87,7 +88,7 @@ The one caveat: if the user manually edited an INIT-source node on the canvas (e
87
88
  - **~ changed**: COMPONENT_X (role expanded to cover Y)
88
89
  - **schema**: + 2 new tables (TableA, TableB); + 3 new endpoints; \u2212 1 deprecated endpoint
89
90
  No need to wait for confirmation \u2014 just show the diff so the user sees what's about to land.
90
- 5. **Call \`beacon_init_persist\`** ONCE with the refreshed full analysis (same shape as init: \`components\`, \`roadmap\`, \`overview\`, \`conventions\`, \`snapshot\`). It replaces all init-source nodes and regenerates \`AGENTS.md\`. Bug flags already on a component survive the refresh (they're carried over by title); add \`bugs: [{ note }]\` for anything NEW you found worth investigating \u2014 identical open flags are not duplicated.
91
+ 5. **Call \`beacon_init_persist\`** ONCE with the refreshed full analysis (same shape as init: \`components\`, \`roadmap\`, \`overview\`, \`conventions\`, \`snapshot\`, \`hasFrontend\` \u2014 re-assert it, the stack may have changed). It replaces all init-source nodes and regenerates \`AGENTS.md\`. Bug flags already on a component survive the refresh (they're carried over by title); add \`bugs: [{ note }]\` for anything NEW you found worth investigating \u2014 identical open flags are not duplicated.
91
92
 
92
93
  ## What you should NOT do
93
94
 
@@ -166,6 +167,8 @@ When listing endpoints, give each \`uses: [{ table, access }]\` so the endpoint\
166
167
 
167
168
  EVERY feature MUST carry \`category\` (e.g. AUTH | SEARCH | DATA | INTEL | BILLING | \u2026; \`cluster\` is accepted as an alias) and \`priority\` (0 = P0 critical, 1 = P1 high, 2 = P2 medium, 3 = P3 low). Beacon REJECTS a plan whose features omit either \u2014 \`beacon_propose_plan\` returns the list of what's missing, and an ExitPlanMode \`\`\`beacon block is denied \u2014 so set both on every feature instead of relying on defaults.
168
169
 
170
+ When the workspace HAS A FRONTEND (Beacon knows \u2014 the agent set \`hasFrontend\` at init, or frontend files were detected), every feature must ALSO carry \`layer\`: \`"frontend" | "backend" | "fullstack"\` \u2014 which side of the stack the work lands on. Plans omitting it are REJECTED the same way category/priority are. It works on every surface that creates roadmap cards (\`beacon_propose_plan\`, the \`\`\`beacon block, \`beacon_start_feature\`, \`beacon_add_subtasks\` \u2014 sub-tasks default to the parent's layer) and on architecture components (\`beacon_describe_feature\` / \`beacon_init_persist\`). In a pure-backend repo, never set it \u2014 the boards don't show it there.
171
+
169
172
  REUSE before you create. Call \`beacon_map\` to see the features + categories that already exist. Beacon HARD-BLOCKS a feature that duplicates an existing one (it returns the existing feature to use instead) and one created without a category \u2014 so don't re-create work that's already on the board, and reuse an existing category rather than a near-synonym. \`category\` is the ONLY domain field. \`front\` (in \`beacon_start_feature\`) nests a feature UNDER an existing parent feature \u2014 it is NOT a domain tag; a \`front\` that matches no real feature is rejected.
170
173
 
171
174
  When listing features, give each \`dependsOn: ["Other feature title", \u2026]\` for any feature that must ship after another in the same plan. Beacon draws these as "depends on" links so the roadmap shows the dependency chain instead of loose, disconnected cards.