trybeacon 0.1.49 → 0.1.51

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 (431) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +22 -18
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/routes-manifest.json +26 -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.js.nft.json +1 -1
  18. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  19. package/.next/server/app/_not-found.html +1 -1
  20. package/.next/server/app/_not-found.rsc +11 -11
  21. package/.next/server/app/_not-found.segments/_full.segment.rsc +11 -11
  22. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  23. package/.next/server/app/_not-found.segments/_index.segment.rsc +11 -11
  24. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  25. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  26. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  27. package/.next/server/app/api/board-annotations/[id]/route.js +1 -1
  28. package/.next/server/app/api/board-annotations/[id]/route.js.nft.json +1 -1
  29. package/.next/server/app/api/board-annotations/route.js +1 -1
  30. package/.next/server/app/api/board-annotations/route.js.nft.json +1 -1
  31. package/.next/server/app/api/board-layout/route.js +1 -1
  32. package/.next/server/app/api/board-layout/route.js.nft.json +1 -1
  33. package/.next/server/app/api/bug-flags/[id]/route.js +1 -1
  34. package/.next/server/app/api/bug-flags/[id]/route.js.nft.json +1 -1
  35. package/.next/server/app/api/bug-flags/route.js +1 -1
  36. package/.next/server/app/api/bug-flags/route.js.nft.json +1 -1
  37. package/.next/server/app/api/code-graph/position/route.js +1 -1
  38. package/.next/server/app/api/code-graph/position/route.js.nft.json +1 -1
  39. package/.next/server/app/api/code-graph/route.js +1 -1
  40. package/.next/server/app/api/code-graph/route.js.nft.json +1 -1
  41. package/.next/server/app/api/context/feature/route.js +1 -1
  42. package/.next/server/app/api/context/feature/route.js.nft.json +1 -1
  43. package/.next/server/app/api/context/file/route.js +1 -1
  44. package/.next/server/app/api/context/file/route.js.nft.json +1 -1
  45. package/.next/server/app/api/context/route.js +2 -2
  46. package/.next/server/app/api/context/route.js.nft.json +1 -1
  47. package/.next/server/app/api/db/arrange/route.js +1 -1
  48. package/.next/server/app/api/db/arrange/route.js.nft.json +1 -1
  49. package/.next/server/app/api/db/backfill-access/route.js +1 -1
  50. package/.next/server/app/api/db/backfill-access/route.js.nft.json +1 -1
  51. package/.next/server/app/api/db/position/route.js +1 -1
  52. package/.next/server/app/api/db/position/route.js.nft.json +1 -1
  53. package/.next/server/app/api/db/prune-planned/route.js +1 -1
  54. package/.next/server/app/api/db/prune-planned/route.js.nft.json +1 -1
  55. package/.next/server/app/api/db/reconcile-endpoints/route.js +1 -1
  56. package/.next/server/app/api/db/reconcile-endpoints/route.js.nft.json +1 -1
  57. package/.next/server/app/api/db/relations/[id]/route.js +1 -1
  58. package/.next/server/app/api/db/relations/[id]/route.js.nft.json +1 -1
  59. package/.next/server/app/api/db/tables/[id]/route.js +1 -1
  60. package/.next/server/app/api/db/tables/[id]/route.js.nft.json +1 -1
  61. package/.next/server/app/api/draft/approve/route.js +1 -1
  62. package/.next/server/app/api/draft/approve/route.js.nft.json +1 -1
  63. package/.next/server/app/api/draft/route.js +1 -1
  64. package/.next/server/app/api/draft/route.js.nft.json +1 -1
  65. package/.next/server/app/api/draft/status/route.js +1 -1
  66. package/.next/server/app/api/draft/status/route.js.nft.json +1 -1
  67. package/.next/server/app/api/edges/[id]/route.js +1 -1
  68. package/.next/server/app/api/edges/[id]/route.js.nft.json +1 -1
  69. package/.next/server/app/api/edges/route.js +1 -1
  70. package/.next/server/app/api/edges/route.js.nft.json +1 -1
  71. package/.next/server/app/api/endpoints/[id]/route.js +1 -1
  72. package/.next/server/app/api/endpoints/[id]/route.js.nft.json +1 -1
  73. package/.next/server/app/api/entities/route.js +1 -1
  74. package/.next/server/app/api/entities/route.js.nft.json +1 -1
  75. package/.next/server/app/api/feedback/[id]/route.js +1 -1
  76. package/.next/server/app/api/feedback/[id]/route.js.nft.json +1 -1
  77. package/.next/server/app/api/feedback/[id]/vote/route.js +1 -1
  78. package/.next/server/app/api/feedback/[id]/vote/route.js.nft.json +1 -1
  79. package/.next/server/app/api/feedback/route.js +1 -1
  80. package/.next/server/app/api/feedback/route.js.nft.json +1 -1
  81. package/.next/server/app/api/flags/route.js +1 -1
  82. package/.next/server/app/api/flags/route.js.nft.json +1 -1
  83. package/.next/server/app/api/ingest/route.js +2 -2
  84. package/.next/server/app/api/ingest/route.js.nft.json +1 -1
  85. package/.next/server/app/api/init/route.js +2 -2
  86. package/.next/server/app/api/init/route.js.nft.json +1 -1
  87. package/.next/server/app/api/map/describe/route.js +2 -2
  88. package/.next/server/app/api/map/describe/route.js.nft.json +1 -1
  89. package/.next/server/app/api/map/files/route.js +1 -1
  90. package/.next/server/app/api/map/files/route.js.nft.json +1 -1
  91. package/.next/server/app/api/map/finish/route.js +1 -1
  92. package/.next/server/app/api/map/finish/route.js.nft.json +1 -1
  93. package/.next/server/app/api/map/route.js +1 -1
  94. package/.next/server/app/api/map/route.js.nft.json +1 -1
  95. package/.next/server/app/api/map/start/route.js +1 -1
  96. package/.next/server/app/api/map/start/route.js.nft.json +1 -1
  97. package/.next/server/app/api/map/touch-active/route.js +1 -1
  98. package/.next/server/app/api/map/touch-active/route.js.nft.json +1 -1
  99. package/.next/server/app/api/mention-search/route.js +1 -0
  100. package/.next/server/app/api/mention-search/route.js.nft.json +1 -0
  101. package/.next/server/app/api/mention-search/route_client-reference-manifest.js +1 -0
  102. package/.next/server/app/api/nodes/[id]/position/route.js +1 -1
  103. package/.next/server/app/api/nodes/[id]/position/route.js.nft.json +1 -1
  104. package/.next/server/app/api/nodes/[id]/route.js +1 -1
  105. package/.next/server/app/api/nodes/[id]/route.js.nft.json +1 -1
  106. package/.next/server/app/api/nodes/positions/route.js +1 -1
  107. package/.next/server/app/api/nodes/positions/route.js.nft.json +1 -1
  108. package/.next/server/app/api/nodes/route.js +1 -1
  109. package/.next/server/app/api/nodes/route.js.nft.json +1 -1
  110. package/.next/server/app/api/nodes/subtasks/route.js +1 -1
  111. package/.next/server/app/api/nodes/subtasks/route.js.nft.json +1 -1
  112. package/.next/server/app/api/notes/[id]/route.js +1 -1
  113. package/.next/server/app/api/notes/[id]/route.js.nft.json +1 -1
  114. package/.next/server/app/api/notes/route.js +1 -1
  115. package/.next/server/app/api/notes/route.js.nft.json +1 -1
  116. package/.next/server/app/api/open/route.js +1 -1
  117. package/.next/server/app/api/open/route.js.nft.json +1 -1
  118. package/.next/server/app/api/plan/annotations/route.js +3 -3
  119. package/.next/server/app/api/plan/annotations/route.js.nft.json +1 -1
  120. package/.next/server/app/api/plan/approve/route.js +2 -2
  121. package/.next/server/app/api/plan/approve/route.js.nft.json +1 -1
  122. package/.next/server/app/api/plan/history/route.js +1 -1
  123. package/.next/server/app/api/plan/history/route.js.nft.json +1 -1
  124. package/.next/server/app/api/plan/markdown/route.js +1 -1
  125. package/.next/server/app/api/plan/markdown/route.js.nft.json +1 -1
  126. package/.next/server/app/api/plan/presence/route.js +1 -1
  127. package/.next/server/app/api/plan/presence/route.js.nft.json +1 -1
  128. package/.next/server/app/api/plan/route.js +1 -1
  129. package/.next/server/app/api/plan/route.js.nft.json +1 -1
  130. package/.next/server/app/api/plan/verdict/route.js +1 -1
  131. package/.next/server/app/api/plan/verdict/route.js.nft.json +1 -1
  132. package/.next/server/app/api/preferences/route.js +1 -1
  133. package/.next/server/app/api/preferences/route.js.nft.json +1 -1
  134. package/.next/server/app/api/project-meta/route.js +1 -1
  135. package/.next/server/app/api/project-meta/route.js.nft.json +1 -1
  136. package/.next/server/app/api/reset/route.js +1 -1
  137. package/.next/server/app/api/reset/route.js.nft.json +1 -1
  138. package/.next/server/app/api/scope-guard/check/route.js +1 -1
  139. package/.next/server/app/api/scope-guard/check/route.js.nft.json +1 -1
  140. package/.next/server/app/api/share/create/route.js +1 -0
  141. package/.next/server/app/api/share/create/route.js.nft.json +1 -0
  142. package/.next/server/app/api/share/create/route_client-reference-manifest.js +1 -0
  143. package/.next/server/app/api/share/route.js +1 -0
  144. package/.next/server/app/api/share/route.js.nft.json +1 -0
  145. package/.next/server/app/api/share/route_client-reference-manifest.js +1 -0
  146. package/.next/server/app/api/stream/route.js +2 -2
  147. package/.next/server/app/api/stream/route.js.nft.json +1 -1
  148. package/.next/server/app/api/tab/nav/route.js +1 -1
  149. package/.next/server/app/api/tab/nav/route.js.nft.json +1 -1
  150. package/.next/server/app/api/tab/presence/route.js +1 -1
  151. package/.next/server/app/api/tab/presence/route.js.nft.json +1 -1
  152. package/.next/server/app/api/telemetry/route.js +1 -1
  153. package/.next/server/app/api/telemetry/route.js.nft.json +1 -1
  154. package/.next/server/app/api/telemetry/stats/route.js +1 -1
  155. package/.next/server/app/api/telemetry/stats/route.js.nft.json +1 -1
  156. package/.next/server/app/api/version/route.js +1 -1
  157. package/.next/server/app/api/version/route.js.nft.json +1 -1
  158. package/.next/server/app/api/workspace/activate/route.js +1 -1
  159. package/.next/server/app/api/workspace/activate/route.js.nft.json +1 -1
  160. package/.next/server/app/api/workspace/route.js +1 -1
  161. package/.next/server/app/api/workspace/route.js.nft.json +1 -1
  162. package/.next/server/app/apple-icon.png/route.js +1 -1
  163. package/.next/server/app/docs/page.js +2 -2
  164. package/.next/server/app/docs/page.js.nft.json +1 -1
  165. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  166. package/.next/server/app/docs.html +1 -1
  167. package/.next/server/app/docs.rsc +12 -12
  168. package/.next/server/app/docs.segments/_full.segment.rsc +12 -12
  169. package/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  170. package/.next/server/app/docs.segments/_index.segment.rsc +11 -11
  171. package/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
  172. package/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +2 -2
  173. package/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  174. package/.next/server/app/feedback/page.js +2 -2
  175. package/.next/server/app/feedback/page.js.nft.json +1 -1
  176. package/.next/server/app/feedback/page_client-reference-manifest.js +1 -1
  177. package/.next/server/app/feedback.html +1 -1
  178. package/.next/server/app/feedback.rsc +11 -11
  179. package/.next/server/app/feedback.segments/_full.segment.rsc +11 -11
  180. package/.next/server/app/feedback.segments/_head.segment.rsc +1 -1
  181. package/.next/server/app/feedback.segments/_index.segment.rsc +11 -11
  182. package/.next/server/app/feedback.segments/_tree.segment.rsc +2 -2
  183. package/.next/server/app/feedback.segments/feedback/__PAGE__.segment.rsc +1 -1
  184. package/.next/server/app/feedback.segments/feedback.segment.rsc +1 -1
  185. package/.next/server/app/help/page.js +2 -2
  186. package/.next/server/app/help/page.js.nft.json +1 -1
  187. package/.next/server/app/help/page_client-reference-manifest.js +1 -1
  188. package/.next/server/app/help.html +1 -1
  189. package/.next/server/app/help.rsc +13 -13
  190. package/.next/server/app/help.segments/_full.segment.rsc +13 -13
  191. package/.next/server/app/help.segments/_head.segment.rsc +1 -1
  192. package/.next/server/app/help.segments/_index.segment.rsc +11 -11
  193. package/.next/server/app/help.segments/_tree.segment.rsc +2 -2
  194. package/.next/server/app/help.segments/help/__PAGE__.segment.rsc +10 -12
  195. package/.next/server/app/help.segments/help.segment.rsc +1 -1
  196. package/.next/server/app/icon.svg/route.js +1 -1
  197. package/.next/server/app/index.html +1 -1
  198. package/.next/server/app/index.rsc +12 -12
  199. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  200. package/.next/server/app/index.segments/_full.segment.rsc +12 -12
  201. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  202. package/.next/server/app/index.segments/_index.segment.rsc +11 -11
  203. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  204. package/.next/server/app/map/page.js +2 -2
  205. package/.next/server/app/map/page.js.nft.json +1 -1
  206. package/.next/server/app/map/page_client-reference-manifest.js +1 -1
  207. package/.next/server/app/page.js +2 -2
  208. package/.next/server/app/page.js.nft.json +1 -1
  209. package/.next/server/app/page_client-reference-manifest.js +1 -1
  210. package/.next/server/app/plan/page.js +2 -2
  211. package/.next/server/app/plan/page.js.nft.json +1 -1
  212. package/.next/server/app/plan/page_client-reference-manifest.js +1 -1
  213. package/.next/server/app/s/[token]/page.js +2 -0
  214. package/.next/server/app/s/[token]/page.js.nft.json +1 -0
  215. package/.next/server/app/s/[token]/page_client-reference-manifest.js +1 -0
  216. package/.next/server/app/settings/page.js +2 -2
  217. package/.next/server/app/settings/page.js.nft.json +1 -1
  218. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  219. package/.next/server/app-paths-manifest.json +22 -18
  220. package/.next/server/chunks/1130.js +1 -1
  221. package/.next/server/chunks/1669.js +1 -0
  222. package/.next/server/chunks/2050.js +1 -0
  223. package/.next/server/chunks/249.js +1 -1
  224. package/.next/server/chunks/{3221.js → 2693.js} +1 -1
  225. package/.next/server/chunks/2942.js +1 -0
  226. package/.next/server/chunks/3098.js +1 -0
  227. package/.next/server/chunks/3254.js +1 -1
  228. package/.next/server/chunks/{2999.js → 3304.js} +65 -4
  229. package/.next/server/chunks/3622.js +1 -1
  230. package/.next/server/chunks/4046.js +3 -3
  231. package/.next/server/chunks/4307.js +1 -1
  232. package/.next/server/chunks/{4217.js → 4700.js} +19 -19
  233. package/.next/server/chunks/5841.js +1 -0
  234. package/.next/server/chunks/{4940.js → 7350.js} +1 -1
  235. package/.next/server/chunks/{8423.js → 9338.js} +8 -8
  236. package/.next/server/chunks/9683.js +1 -1
  237. package/.next/server/chunks/9734.js +1 -1
  238. package/.next/server/chunks/9884.js +2 -2
  239. package/.next/server/middleware-build-manifest.js +1 -1
  240. package/.next/server/middleware.js +1 -1
  241. package/.next/server/pages/404.html +1 -1
  242. package/.next/server/pages/500.html +1 -1
  243. package/.next/server/server-reference-manifest.js +1 -1
  244. package/.next/server/server-reference-manifest.json +1 -1
  245. package/.next/static/Etq8pxeFDTNRRYXdxo_DD/_buildManifest.js +1 -0
  246. package/.next/static/chunks/1099-208cc390a92efae0.js +62 -0
  247. package/.next/static/chunks/1175-715e4664e518ded4.js +1 -0
  248. package/.next/static/chunks/2231-379685a022444780.js +1 -0
  249. package/.next/static/chunks/{2500-15c373070714563d.js → 3021-ed52ee7b3f02e2cd.js} +1 -1
  250. package/.next/static/chunks/54a60aa6-0378818fce5a4dc5.js +82 -0
  251. package/.next/static/chunks/874-c750840a8644deb1.js +1 -0
  252. package/.next/static/chunks/9320-7bd45e3feba086b6.js +1 -0
  253. package/.next/static/chunks/9887-e8954568a4031ed3.js +74 -0
  254. package/.next/static/chunks/app/_global-error/page-548a84d85e061550.js +1 -0
  255. package/.next/static/chunks/app/api/board-annotations/[id]/route-548a84d85e061550.js +1 -0
  256. package/.next/static/chunks/app/api/board-annotations/route-548a84d85e061550.js +1 -0
  257. package/.next/static/chunks/app/api/board-layout/route-548a84d85e061550.js +1 -0
  258. package/.next/static/chunks/app/api/bug-flags/[id]/route-548a84d85e061550.js +1 -0
  259. package/.next/static/chunks/app/api/bug-flags/route-548a84d85e061550.js +1 -0
  260. package/.next/static/chunks/app/api/code-graph/position/route-548a84d85e061550.js +1 -0
  261. package/.next/static/chunks/app/api/code-graph/route-548a84d85e061550.js +1 -0
  262. package/.next/static/chunks/app/api/context/feature/route-548a84d85e061550.js +1 -0
  263. package/.next/static/chunks/app/api/context/file/route-548a84d85e061550.js +1 -0
  264. package/.next/static/chunks/app/api/context/route-548a84d85e061550.js +1 -0
  265. package/.next/static/chunks/app/api/db/arrange/route-548a84d85e061550.js +1 -0
  266. package/.next/static/chunks/app/api/db/backfill-access/route-548a84d85e061550.js +1 -0
  267. package/.next/static/chunks/app/api/db/position/route-548a84d85e061550.js +1 -0
  268. package/.next/static/chunks/app/api/db/prune-planned/route-548a84d85e061550.js +1 -0
  269. package/.next/static/chunks/app/api/db/reconcile-endpoints/route-548a84d85e061550.js +1 -0
  270. package/.next/static/chunks/app/api/db/relations/[id]/route-548a84d85e061550.js +1 -0
  271. package/.next/static/chunks/app/api/db/tables/[id]/route-548a84d85e061550.js +1 -0
  272. package/.next/static/chunks/app/api/draft/approve/route-548a84d85e061550.js +1 -0
  273. package/.next/static/chunks/app/api/draft/route-548a84d85e061550.js +1 -0
  274. package/.next/static/chunks/app/api/draft/status/route-548a84d85e061550.js +1 -0
  275. package/.next/static/chunks/app/api/edges/[id]/route-548a84d85e061550.js +1 -0
  276. package/.next/static/chunks/app/api/edges/route-548a84d85e061550.js +1 -0
  277. package/.next/static/chunks/app/api/endpoints/[id]/route-548a84d85e061550.js +1 -0
  278. package/.next/static/chunks/app/api/entities/route-548a84d85e061550.js +1 -0
  279. package/.next/static/chunks/app/api/feedback/[id]/route-548a84d85e061550.js +1 -0
  280. package/.next/static/chunks/app/api/feedback/[id]/vote/route-548a84d85e061550.js +1 -0
  281. package/.next/static/chunks/app/api/feedback/route-548a84d85e061550.js +1 -0
  282. package/.next/static/chunks/app/api/flags/route-548a84d85e061550.js +1 -0
  283. package/.next/static/chunks/app/api/ingest/route-548a84d85e061550.js +1 -0
  284. package/.next/static/chunks/app/api/init/route-548a84d85e061550.js +1 -0
  285. package/.next/static/chunks/app/api/map/describe/route-548a84d85e061550.js +1 -0
  286. package/.next/static/chunks/app/api/map/files/route-548a84d85e061550.js +1 -0
  287. package/.next/static/chunks/app/api/map/finish/route-548a84d85e061550.js +1 -0
  288. package/.next/static/chunks/app/api/map/route-548a84d85e061550.js +1 -0
  289. package/.next/static/chunks/app/api/map/start/route-548a84d85e061550.js +1 -0
  290. package/.next/static/chunks/app/api/map/touch-active/route-548a84d85e061550.js +1 -0
  291. package/.next/static/chunks/app/api/mention-search/route-548a84d85e061550.js +1 -0
  292. package/.next/static/chunks/app/api/nodes/[id]/position/route-548a84d85e061550.js +1 -0
  293. package/.next/static/chunks/app/api/nodes/[id]/route-548a84d85e061550.js +1 -0
  294. package/.next/static/chunks/app/api/nodes/positions/route-548a84d85e061550.js +1 -0
  295. package/.next/static/chunks/app/api/nodes/route-548a84d85e061550.js +1 -0
  296. package/.next/static/chunks/app/api/nodes/subtasks/route-548a84d85e061550.js +1 -0
  297. package/.next/static/chunks/app/api/notes/[id]/route-548a84d85e061550.js +1 -0
  298. package/.next/static/chunks/app/api/notes/route-548a84d85e061550.js +1 -0
  299. package/.next/static/chunks/app/api/open/route-548a84d85e061550.js +1 -0
  300. package/.next/static/chunks/app/api/plan/annotations/route-548a84d85e061550.js +1 -0
  301. package/.next/static/chunks/app/api/plan/approve/route-548a84d85e061550.js +1 -0
  302. package/.next/static/chunks/app/api/plan/history/route-548a84d85e061550.js +1 -0
  303. package/.next/static/chunks/app/api/plan/markdown/route-548a84d85e061550.js +1 -0
  304. package/.next/static/chunks/app/api/plan/presence/route-548a84d85e061550.js +1 -0
  305. package/.next/static/chunks/app/api/plan/route-548a84d85e061550.js +1 -0
  306. package/.next/static/chunks/app/api/plan/verdict/route-548a84d85e061550.js +1 -0
  307. package/.next/static/chunks/app/api/preferences/route-548a84d85e061550.js +1 -0
  308. package/.next/static/chunks/app/api/project-meta/route-548a84d85e061550.js +1 -0
  309. package/.next/static/chunks/app/api/reset/route-548a84d85e061550.js +1 -0
  310. package/.next/static/chunks/app/api/scope-guard/check/route-548a84d85e061550.js +1 -0
  311. package/.next/static/chunks/app/api/share/create/route-548a84d85e061550.js +1 -0
  312. package/.next/static/chunks/app/api/share/route-548a84d85e061550.js +1 -0
  313. package/.next/static/chunks/app/api/stream/route-548a84d85e061550.js +1 -0
  314. package/.next/static/chunks/app/api/tab/nav/route-548a84d85e061550.js +1 -0
  315. package/.next/static/chunks/app/api/tab/presence/route-548a84d85e061550.js +1 -0
  316. package/.next/static/chunks/app/api/telemetry/route-548a84d85e061550.js +1 -0
  317. package/.next/static/chunks/app/api/telemetry/stats/route-548a84d85e061550.js +1 -0
  318. package/.next/static/chunks/app/api/version/route-548a84d85e061550.js +1 -0
  319. package/.next/static/chunks/app/api/workspace/activate/route-548a84d85e061550.js +1 -0
  320. package/.next/static/chunks/app/api/workspace/route-548a84d85e061550.js +1 -0
  321. package/.next/static/chunks/app/docs/page-ae19d2e91ec24771.js +1 -0
  322. package/.next/static/chunks/app/layout-3115f8503ff00902.js +1 -0
  323. package/.next/static/chunks/app/map/page-07f6e0d7c4cac26c.js +1 -0
  324. package/.next/static/chunks/app/{page-541e900d67f17dae.js → page-a229992616b3a3de.js} +1 -1
  325. package/.next/static/chunks/app/plan/page-e314ca5940473e0e.js +1 -0
  326. package/.next/static/chunks/app/s/[token]/page-5fbceb666bceb88e.js +1 -0
  327. package/.next/static/chunks/next/dist/client/components/builtin/app-error-548a84d85e061550.js +1 -0
  328. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-548a84d85e061550.js +1 -0
  329. package/.next/static/chunks/next/dist/client/components/builtin/not-found-548a84d85e061550.js +1 -0
  330. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-548a84d85e061550.js +1 -0
  331. package/.next/static/css/d60eecd8c5676c16.css +1 -0
  332. package/.next/trace +42 -39
  333. package/.next/trace-build +1 -1
  334. package/.next/types/app/api/mention-search/route.ts +351 -0
  335. package/.next/types/app/api/share/create/route.ts +351 -0
  336. package/.next/types/app/api/share/route.ts +351 -0
  337. package/.next/types/app/s/[token]/page.ts +87 -0
  338. package/.next/types/routes.d.ts +6 -2
  339. package/.next/types/validator.ts +36 -0
  340. package/dist/bin/doctor.js +16 -6
  341. package/dist/bin/hook.js +16 -6
  342. package/dist/bin/mcp.js +47 -37
  343. package/dist/bin/plan.js +22 -12
  344. package/dist/bin/prompt.js +1 -1
  345. package/dist/bin/uninstall.js +16 -6
  346. package/dist/lib/assets.js +16 -6
  347. package/dist/lib/codex-install.js +16 -6
  348. package/dist/lib/global-install.js +16 -6
  349. package/package.json +4 -1
  350. package/.next/server/chunks/1341.js +0 -1
  351. package/.next/server/chunks/7331.js +0 -1
  352. package/.next/static/chunks/1439-260d1c3a9b3b79b3.js +0 -1
  353. package/.next/static/chunks/3343-af1292b51a276724.js +0 -1
  354. package/.next/static/chunks/54a60aa6-407808fee210eca2.js +0 -82
  355. package/.next/static/chunks/7323-480fb88e9d24f9e9.js +0 -1
  356. package/.next/static/chunks/7886-46eaf3a9533310f7.js +0 -74
  357. package/.next/static/chunks/app/_global-error/page-dc3f0f4fd9e88c4e.js +0 -1
  358. package/.next/static/chunks/app/api/board-annotations/[id]/route-dc3f0f4fd9e88c4e.js +0 -1
  359. package/.next/static/chunks/app/api/board-annotations/route-dc3f0f4fd9e88c4e.js +0 -1
  360. package/.next/static/chunks/app/api/board-layout/route-dc3f0f4fd9e88c4e.js +0 -1
  361. package/.next/static/chunks/app/api/bug-flags/[id]/route-dc3f0f4fd9e88c4e.js +0 -1
  362. package/.next/static/chunks/app/api/bug-flags/route-dc3f0f4fd9e88c4e.js +0 -1
  363. package/.next/static/chunks/app/api/code-graph/position/route-dc3f0f4fd9e88c4e.js +0 -1
  364. package/.next/static/chunks/app/api/code-graph/route-dc3f0f4fd9e88c4e.js +0 -1
  365. package/.next/static/chunks/app/api/context/feature/route-dc3f0f4fd9e88c4e.js +0 -1
  366. package/.next/static/chunks/app/api/context/file/route-dc3f0f4fd9e88c4e.js +0 -1
  367. package/.next/static/chunks/app/api/context/route-dc3f0f4fd9e88c4e.js +0 -1
  368. package/.next/static/chunks/app/api/db/arrange/route-dc3f0f4fd9e88c4e.js +0 -1
  369. package/.next/static/chunks/app/api/db/backfill-access/route-dc3f0f4fd9e88c4e.js +0 -1
  370. package/.next/static/chunks/app/api/db/position/route-dc3f0f4fd9e88c4e.js +0 -1
  371. package/.next/static/chunks/app/api/db/prune-planned/route-dc3f0f4fd9e88c4e.js +0 -1
  372. package/.next/static/chunks/app/api/db/reconcile-endpoints/route-dc3f0f4fd9e88c4e.js +0 -1
  373. package/.next/static/chunks/app/api/db/relations/[id]/route-dc3f0f4fd9e88c4e.js +0 -1
  374. package/.next/static/chunks/app/api/db/tables/[id]/route-dc3f0f4fd9e88c4e.js +0 -1
  375. package/.next/static/chunks/app/api/draft/approve/route-dc3f0f4fd9e88c4e.js +0 -1
  376. package/.next/static/chunks/app/api/draft/route-dc3f0f4fd9e88c4e.js +0 -1
  377. package/.next/static/chunks/app/api/draft/status/route-dc3f0f4fd9e88c4e.js +0 -1
  378. package/.next/static/chunks/app/api/edges/[id]/route-dc3f0f4fd9e88c4e.js +0 -1
  379. package/.next/static/chunks/app/api/edges/route-dc3f0f4fd9e88c4e.js +0 -1
  380. package/.next/static/chunks/app/api/endpoints/[id]/route-dc3f0f4fd9e88c4e.js +0 -1
  381. package/.next/static/chunks/app/api/entities/route-dc3f0f4fd9e88c4e.js +0 -1
  382. package/.next/static/chunks/app/api/feedback/[id]/route-dc3f0f4fd9e88c4e.js +0 -1
  383. package/.next/static/chunks/app/api/feedback/[id]/vote/route-dc3f0f4fd9e88c4e.js +0 -1
  384. package/.next/static/chunks/app/api/feedback/route-dc3f0f4fd9e88c4e.js +0 -1
  385. package/.next/static/chunks/app/api/flags/route-dc3f0f4fd9e88c4e.js +0 -1
  386. package/.next/static/chunks/app/api/ingest/route-dc3f0f4fd9e88c4e.js +0 -1
  387. package/.next/static/chunks/app/api/init/route-dc3f0f4fd9e88c4e.js +0 -1
  388. package/.next/static/chunks/app/api/map/describe/route-dc3f0f4fd9e88c4e.js +0 -1
  389. package/.next/static/chunks/app/api/map/files/route-dc3f0f4fd9e88c4e.js +0 -1
  390. package/.next/static/chunks/app/api/map/finish/route-dc3f0f4fd9e88c4e.js +0 -1
  391. package/.next/static/chunks/app/api/map/route-dc3f0f4fd9e88c4e.js +0 -1
  392. package/.next/static/chunks/app/api/map/start/route-dc3f0f4fd9e88c4e.js +0 -1
  393. package/.next/static/chunks/app/api/map/touch-active/route-dc3f0f4fd9e88c4e.js +0 -1
  394. package/.next/static/chunks/app/api/nodes/[id]/position/route-dc3f0f4fd9e88c4e.js +0 -1
  395. package/.next/static/chunks/app/api/nodes/[id]/route-dc3f0f4fd9e88c4e.js +0 -1
  396. package/.next/static/chunks/app/api/nodes/positions/route-dc3f0f4fd9e88c4e.js +0 -1
  397. package/.next/static/chunks/app/api/nodes/route-dc3f0f4fd9e88c4e.js +0 -1
  398. package/.next/static/chunks/app/api/nodes/subtasks/route-dc3f0f4fd9e88c4e.js +0 -1
  399. package/.next/static/chunks/app/api/notes/[id]/route-dc3f0f4fd9e88c4e.js +0 -1
  400. package/.next/static/chunks/app/api/notes/route-dc3f0f4fd9e88c4e.js +0 -1
  401. package/.next/static/chunks/app/api/open/route-dc3f0f4fd9e88c4e.js +0 -1
  402. package/.next/static/chunks/app/api/plan/annotations/route-dc3f0f4fd9e88c4e.js +0 -1
  403. package/.next/static/chunks/app/api/plan/approve/route-dc3f0f4fd9e88c4e.js +0 -1
  404. package/.next/static/chunks/app/api/plan/history/route-dc3f0f4fd9e88c4e.js +0 -1
  405. package/.next/static/chunks/app/api/plan/markdown/route-dc3f0f4fd9e88c4e.js +0 -1
  406. package/.next/static/chunks/app/api/plan/presence/route-dc3f0f4fd9e88c4e.js +0 -1
  407. package/.next/static/chunks/app/api/plan/route-dc3f0f4fd9e88c4e.js +0 -1
  408. package/.next/static/chunks/app/api/plan/verdict/route-dc3f0f4fd9e88c4e.js +0 -1
  409. package/.next/static/chunks/app/api/preferences/route-dc3f0f4fd9e88c4e.js +0 -1
  410. package/.next/static/chunks/app/api/project-meta/route-dc3f0f4fd9e88c4e.js +0 -1
  411. package/.next/static/chunks/app/api/reset/route-dc3f0f4fd9e88c4e.js +0 -1
  412. package/.next/static/chunks/app/api/scope-guard/check/route-dc3f0f4fd9e88c4e.js +0 -1
  413. package/.next/static/chunks/app/api/stream/route-dc3f0f4fd9e88c4e.js +0 -1
  414. package/.next/static/chunks/app/api/tab/nav/route-dc3f0f4fd9e88c4e.js +0 -1
  415. package/.next/static/chunks/app/api/tab/presence/route-dc3f0f4fd9e88c4e.js +0 -1
  416. package/.next/static/chunks/app/api/telemetry/route-dc3f0f4fd9e88c4e.js +0 -1
  417. package/.next/static/chunks/app/api/telemetry/stats/route-dc3f0f4fd9e88c4e.js +0 -1
  418. package/.next/static/chunks/app/api/version/route-dc3f0f4fd9e88c4e.js +0 -1
  419. package/.next/static/chunks/app/api/workspace/activate/route-dc3f0f4fd9e88c4e.js +0 -1
  420. package/.next/static/chunks/app/api/workspace/route-dc3f0f4fd9e88c4e.js +0 -1
  421. package/.next/static/chunks/app/docs/page-0c841cb9a7aa2f9a.js +0 -1
  422. package/.next/static/chunks/app/layout-1bc5f9fd4ce6bff9.js +0 -1
  423. package/.next/static/chunks/app/map/page-66d71744ae3363d7.js +0 -1
  424. package/.next/static/chunks/app/plan/page-e7d16fa2a3713a92.js +0 -1
  425. package/.next/static/chunks/next/dist/client/components/builtin/app-error-dc3f0f4fd9e88c4e.js +0 -1
  426. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-dc3f0f4fd9e88c4e.js +0 -1
  427. package/.next/static/chunks/next/dist/client/components/builtin/not-found-dc3f0f4fd9e88c4e.js +0 -1
  428. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-dc3f0f4fd9e88c4e.js +0 -1
  429. package/.next/static/css/629ab377241de9ca.css +0 -1
  430. package/.next/static/qeqVD-yeoYO_3C0pw9kHg/_buildManifest.js +0 -1
  431. /package/.next/static/{qeqVD-yeoYO_3C0pw9kHg → Etq8pxeFDTNRRYXdxo_DD}/_ssgManifest.js +0 -0
@@ -0,0 +1,351 @@
1
+ // File: /home/runner/work/beacon/beacon/app/api/share/route.ts
2
+ import * as entry from '../../../../../app/api/share/route.js'
3
+ import type { NextRequest } from 'next/server.js'
4
+
5
+ import type { InstantConfigForTypeCheckInternal } from 'next/dist/build/segment-config/app/app-segment-config.js'
6
+
7
+ type TEntry = typeof import('../../../../../app/api/share/route.js')
8
+
9
+ type SegmentParams<T extends Object = any> = T extends Record<string, any>
10
+ ? { [K in keyof T]: T[K] extends string ? string | string[] | undefined : never }
11
+ : T
12
+
13
+ // Check that the entry is a valid entry
14
+ checkFields<Diff<{
15
+ GET?: Function
16
+ HEAD?: Function
17
+ OPTIONS?: Function
18
+ POST?: Function
19
+ PUT?: Function
20
+ DELETE?: Function
21
+ PATCH?: Function
22
+ config?: {}
23
+ generateStaticParams?: Function
24
+ unstable_instant?: InstantConfigForTypeCheckInternal
25
+ unstable_dynamicStaleTime?: number
26
+ revalidate?: RevalidateRange<TEntry> | false
27
+ dynamic?: 'auto' | 'force-dynamic' | 'error' | 'force-static'
28
+ dynamicParams?: boolean
29
+ fetchCache?: 'auto' | 'force-no-store' | 'only-no-store' | 'default-no-store' | 'default-cache' | 'only-cache' | 'force-cache'
30
+ preferredRegion?: 'auto' | 'global' | 'home' | string | string[]
31
+ runtime?: 'nodejs' | 'experimental-edge' | 'edge'
32
+ maxDuration?: number
33
+
34
+ }, TEntry, ''>>()
35
+
36
+ type RouteContext = { params: Promise<SegmentParams> }
37
+ // Check the prop type of the entry function
38
+ if ('GET' in entry) {
39
+ checkFields<
40
+ Diff<
41
+ ParamCheck<Request | NextRequest>,
42
+ {
43
+ __tag__: 'GET'
44
+ __param_position__: 'first'
45
+ __param_type__: FirstArg<MaybeField<TEntry, 'GET'>>
46
+ },
47
+ 'GET'
48
+ >
49
+ >()
50
+ checkFields<
51
+ Diff<
52
+ ParamCheck<RouteContext>,
53
+ {
54
+ __tag__: 'GET'
55
+ __param_position__: 'second'
56
+ __param_type__: SecondArg<MaybeField<TEntry, 'GET'>>
57
+ },
58
+ 'GET'
59
+ >
60
+ >()
61
+
62
+ checkFields<
63
+ Diff<
64
+ {
65
+ __tag__: 'GET',
66
+ __return_type__: Response | void | never | Promise<Response | void | never>
67
+ },
68
+ {
69
+ __tag__: 'GET',
70
+ __return_type__: ReturnType<MaybeField<TEntry, 'GET'>>
71
+ },
72
+ 'GET'
73
+ >
74
+ >()
75
+ }
76
+ // Check the prop type of the entry function
77
+ if ('HEAD' in entry) {
78
+ checkFields<
79
+ Diff<
80
+ ParamCheck<Request | NextRequest>,
81
+ {
82
+ __tag__: 'HEAD'
83
+ __param_position__: 'first'
84
+ __param_type__: FirstArg<MaybeField<TEntry, 'HEAD'>>
85
+ },
86
+ 'HEAD'
87
+ >
88
+ >()
89
+ checkFields<
90
+ Diff<
91
+ ParamCheck<RouteContext>,
92
+ {
93
+ __tag__: 'HEAD'
94
+ __param_position__: 'second'
95
+ __param_type__: SecondArg<MaybeField<TEntry, 'HEAD'>>
96
+ },
97
+ 'HEAD'
98
+ >
99
+ >()
100
+
101
+ checkFields<
102
+ Diff<
103
+ {
104
+ __tag__: 'HEAD',
105
+ __return_type__: Response | void | never | Promise<Response | void | never>
106
+ },
107
+ {
108
+ __tag__: 'HEAD',
109
+ __return_type__: ReturnType<MaybeField<TEntry, 'HEAD'>>
110
+ },
111
+ 'HEAD'
112
+ >
113
+ >()
114
+ }
115
+ // Check the prop type of the entry function
116
+ if ('OPTIONS' in entry) {
117
+ checkFields<
118
+ Diff<
119
+ ParamCheck<Request | NextRequest>,
120
+ {
121
+ __tag__: 'OPTIONS'
122
+ __param_position__: 'first'
123
+ __param_type__: FirstArg<MaybeField<TEntry, 'OPTIONS'>>
124
+ },
125
+ 'OPTIONS'
126
+ >
127
+ >()
128
+ checkFields<
129
+ Diff<
130
+ ParamCheck<RouteContext>,
131
+ {
132
+ __tag__: 'OPTIONS'
133
+ __param_position__: 'second'
134
+ __param_type__: SecondArg<MaybeField<TEntry, 'OPTIONS'>>
135
+ },
136
+ 'OPTIONS'
137
+ >
138
+ >()
139
+
140
+ checkFields<
141
+ Diff<
142
+ {
143
+ __tag__: 'OPTIONS',
144
+ __return_type__: Response | void | never | Promise<Response | void | never>
145
+ },
146
+ {
147
+ __tag__: 'OPTIONS',
148
+ __return_type__: ReturnType<MaybeField<TEntry, 'OPTIONS'>>
149
+ },
150
+ 'OPTIONS'
151
+ >
152
+ >()
153
+ }
154
+ // Check the prop type of the entry function
155
+ if ('POST' in entry) {
156
+ checkFields<
157
+ Diff<
158
+ ParamCheck<Request | NextRequest>,
159
+ {
160
+ __tag__: 'POST'
161
+ __param_position__: 'first'
162
+ __param_type__: FirstArg<MaybeField<TEntry, 'POST'>>
163
+ },
164
+ 'POST'
165
+ >
166
+ >()
167
+ checkFields<
168
+ Diff<
169
+ ParamCheck<RouteContext>,
170
+ {
171
+ __tag__: 'POST'
172
+ __param_position__: 'second'
173
+ __param_type__: SecondArg<MaybeField<TEntry, 'POST'>>
174
+ },
175
+ 'POST'
176
+ >
177
+ >()
178
+
179
+ checkFields<
180
+ Diff<
181
+ {
182
+ __tag__: 'POST',
183
+ __return_type__: Response | void | never | Promise<Response | void | never>
184
+ },
185
+ {
186
+ __tag__: 'POST',
187
+ __return_type__: ReturnType<MaybeField<TEntry, 'POST'>>
188
+ },
189
+ 'POST'
190
+ >
191
+ >()
192
+ }
193
+ // Check the prop type of the entry function
194
+ if ('PUT' in entry) {
195
+ checkFields<
196
+ Diff<
197
+ ParamCheck<Request | NextRequest>,
198
+ {
199
+ __tag__: 'PUT'
200
+ __param_position__: 'first'
201
+ __param_type__: FirstArg<MaybeField<TEntry, 'PUT'>>
202
+ },
203
+ 'PUT'
204
+ >
205
+ >()
206
+ checkFields<
207
+ Diff<
208
+ ParamCheck<RouteContext>,
209
+ {
210
+ __tag__: 'PUT'
211
+ __param_position__: 'second'
212
+ __param_type__: SecondArg<MaybeField<TEntry, 'PUT'>>
213
+ },
214
+ 'PUT'
215
+ >
216
+ >()
217
+
218
+ checkFields<
219
+ Diff<
220
+ {
221
+ __tag__: 'PUT',
222
+ __return_type__: Response | void | never | Promise<Response | void | never>
223
+ },
224
+ {
225
+ __tag__: 'PUT',
226
+ __return_type__: ReturnType<MaybeField<TEntry, 'PUT'>>
227
+ },
228
+ 'PUT'
229
+ >
230
+ >()
231
+ }
232
+ // Check the prop type of the entry function
233
+ if ('DELETE' in entry) {
234
+ checkFields<
235
+ Diff<
236
+ ParamCheck<Request | NextRequest>,
237
+ {
238
+ __tag__: 'DELETE'
239
+ __param_position__: 'first'
240
+ __param_type__: FirstArg<MaybeField<TEntry, 'DELETE'>>
241
+ },
242
+ 'DELETE'
243
+ >
244
+ >()
245
+ checkFields<
246
+ Diff<
247
+ ParamCheck<RouteContext>,
248
+ {
249
+ __tag__: 'DELETE'
250
+ __param_position__: 'second'
251
+ __param_type__: SecondArg<MaybeField<TEntry, 'DELETE'>>
252
+ },
253
+ 'DELETE'
254
+ >
255
+ >()
256
+
257
+ checkFields<
258
+ Diff<
259
+ {
260
+ __tag__: 'DELETE',
261
+ __return_type__: Response | void | never | Promise<Response | void | never>
262
+ },
263
+ {
264
+ __tag__: 'DELETE',
265
+ __return_type__: ReturnType<MaybeField<TEntry, 'DELETE'>>
266
+ },
267
+ 'DELETE'
268
+ >
269
+ >()
270
+ }
271
+ // Check the prop type of the entry function
272
+ if ('PATCH' in entry) {
273
+ checkFields<
274
+ Diff<
275
+ ParamCheck<Request | NextRequest>,
276
+ {
277
+ __tag__: 'PATCH'
278
+ __param_position__: 'first'
279
+ __param_type__: FirstArg<MaybeField<TEntry, 'PATCH'>>
280
+ },
281
+ 'PATCH'
282
+ >
283
+ >()
284
+ checkFields<
285
+ Diff<
286
+ ParamCheck<RouteContext>,
287
+ {
288
+ __tag__: 'PATCH'
289
+ __param_position__: 'second'
290
+ __param_type__: SecondArg<MaybeField<TEntry, 'PATCH'>>
291
+ },
292
+ 'PATCH'
293
+ >
294
+ >()
295
+
296
+ checkFields<
297
+ Diff<
298
+ {
299
+ __tag__: 'PATCH',
300
+ __return_type__: Response | void | never | Promise<Response | void | never>
301
+ },
302
+ {
303
+ __tag__: 'PATCH',
304
+ __return_type__: ReturnType<MaybeField<TEntry, 'PATCH'>>
305
+ },
306
+ 'PATCH'
307
+ >
308
+ >()
309
+ }
310
+
311
+ // Check the arguments and return type of the generateStaticParams function
312
+ if ('generateStaticParams' in entry) {
313
+ checkFields<Diff<{ params: SegmentParams }, FirstArg<MaybeField<TEntry, 'generateStaticParams'>>, 'generateStaticParams'>>()
314
+ checkFields<Diff<{ __tag__: 'generateStaticParams', __return_type__: any[] | Promise<any[]> }, { __tag__: 'generateStaticParams', __return_type__: ReturnType<MaybeField<TEntry, 'generateStaticParams'>> }>>()
315
+ }
316
+
317
+ export interface PageProps {
318
+ params?: Promise<SegmentParams>
319
+ searchParams?: Promise<any>
320
+ }
321
+ export interface LayoutProps {
322
+ children?: React.ReactNode
323
+
324
+ params?: Promise<SegmentParams>
325
+ }
326
+
327
+ // =============
328
+ // Utility types
329
+ type RevalidateRange<T> = T extends { revalidate: any } ? NonNegative<T['revalidate']> : never
330
+
331
+ // If T is unknown or any, it will be an empty {} type. Otherwise, it will be the same as Omit<T, keyof Base>.
332
+ type OmitWithTag<T, K extends keyof any, _M> = Omit<T, K>
333
+ type Diff<Base, T extends Base, Message extends string = ''> = 0 extends (1 & T) ? {} : OmitWithTag<T, keyof Base, Message>
334
+
335
+ type FirstArg<T extends Function> = T extends (...args: [infer T, any]) => any ? unknown extends T ? any : T : never
336
+ type SecondArg<T extends Function> = T extends (...args: [any, infer T]) => any ? unknown extends T ? any : T : never
337
+ type MaybeField<T, K extends string> = T extends { [k in K]: infer G } ? G extends Function ? G : never : never
338
+
339
+ type ParamCheck<T> = {
340
+ __tag__: string
341
+ __param_position__: string
342
+ __param_type__: T
343
+ }
344
+
345
+ function checkFields<_ extends { [k in keyof any]: never }>() {}
346
+
347
+ // https://github.com/sindresorhus/type-fest
348
+ type Numeric = number | bigint
349
+ type Zero = 0 | 0n
350
+ type Negative<T extends Numeric> = T extends Zero ? never : `${T}` extends `-${string}` ? T : never
351
+ type NonNegative<T extends Numeric> = T extends Zero ? T : Negative<T> extends never ? T : '__invalid_negative_number__'
@@ -0,0 +1,87 @@
1
+ // File: /home/runner/work/beacon/beacon/app/s/[token]/page.tsx
2
+ import * as entry from '../../../../../app/s/[token]/page.js'
3
+ import type { ResolvingMetadata, ResolvingViewport } from 'next/dist/lib/metadata/types/metadata-interface.js'
4
+
5
+ import type { InstantConfigForTypeCheckInternal } from 'next/dist/build/segment-config/app/app-segment-config.js'
6
+
7
+ type TEntry = typeof import('../../../../../app/s/[token]/page.js')
8
+
9
+ type SegmentParams<T extends Object = any> = T extends Record<string, any>
10
+ ? { [K in keyof T]: T[K] extends string ? string | string[] | undefined : never }
11
+ : T
12
+
13
+ // Check that the entry is a valid entry
14
+ checkFields<Diff<{
15
+ default: Function
16
+ config?: {}
17
+ generateStaticParams?: Function
18
+ unstable_instant?: InstantConfigForTypeCheckInternal
19
+ unstable_dynamicStaleTime?: number
20
+ revalidate?: RevalidateRange<TEntry> | false
21
+ dynamic?: 'auto' | 'force-dynamic' | 'error' | 'force-static'
22
+ dynamicParams?: boolean
23
+ fetchCache?: 'auto' | 'force-no-store' | 'only-no-store' | 'default-no-store' | 'default-cache' | 'only-cache' | 'force-cache'
24
+ preferredRegion?: 'auto' | 'global' | 'home' | string | string[]
25
+ runtime?: 'nodejs' | 'experimental-edge' | 'edge'
26
+ maxDuration?: number
27
+
28
+ metadata?: any
29
+ generateMetadata?: Function
30
+ viewport?: any
31
+ generateViewport?: Function
32
+
33
+ }, TEntry, ''>>()
34
+
35
+
36
+ // Check the prop type of the entry function
37
+ checkFields<Diff<PageProps, FirstArg<TEntry['default']>, 'default'>>()
38
+
39
+ // Check the arguments and return type of the generateMetadata function
40
+ if ('generateMetadata' in entry) {
41
+ checkFields<Diff<PageProps, FirstArg<MaybeField<TEntry, 'generateMetadata'>>, 'generateMetadata'>>()
42
+ checkFields<Diff<ResolvingMetadata, SecondArg<MaybeField<TEntry, 'generateMetadata'>>, 'generateMetadata'>>()
43
+ }
44
+
45
+ // Check the arguments and return type of the generateViewport function
46
+ if ('generateViewport' in entry) {
47
+ checkFields<Diff<PageProps, FirstArg<MaybeField<TEntry, 'generateViewport'>>, 'generateViewport'>>()
48
+ checkFields<Diff<ResolvingViewport, SecondArg<MaybeField<TEntry, 'generateViewport'>>, 'generateViewport'>>()
49
+ }
50
+
51
+ // Check the arguments and return type of the generateStaticParams function
52
+ if ('generateStaticParams' in entry) {
53
+ checkFields<Diff<{ params: SegmentParams }, FirstArg<MaybeField<TEntry, 'generateStaticParams'>>, 'generateStaticParams'>>()
54
+ checkFields<Diff<{ __tag__: 'generateStaticParams', __return_type__: any[] | Promise<any[]> }, { __tag__: 'generateStaticParams', __return_type__: ReturnType<MaybeField<TEntry, 'generateStaticParams'>> }>>()
55
+ }
56
+
57
+ export interface PageProps {
58
+ params?: Promise<SegmentParams>
59
+ searchParams?: Promise<any>
60
+ }
61
+ export interface LayoutProps {
62
+ children?: React.ReactNode
63
+
64
+ params?: Promise<SegmentParams>
65
+ }
66
+
67
+ // =============
68
+ // Utility types
69
+ type RevalidateRange<T> = T extends { revalidate: any } ? NonNegative<T['revalidate']> : never
70
+
71
+ // If T is unknown or any, it will be an empty {} type. Otherwise, it will be the same as Omit<T, keyof Base>.
72
+ type OmitWithTag<T, K extends keyof any, _M> = Omit<T, K>
73
+ type Diff<Base, T extends Base, Message extends string = ''> = 0 extends (1 & T) ? {} : OmitWithTag<T, keyof Base, Message>
74
+
75
+ type FirstArg<T extends Function> = T extends (...args: [infer T, any]) => any ? unknown extends T ? any : T : never
76
+ type SecondArg<T extends Function> = T extends (...args: [any, infer T]) => any ? unknown extends T ? any : T : never
77
+ type MaybeField<T, K extends string> = T extends { [k in K]: infer G } ? G extends Function ? G : never : never
78
+
79
+
80
+
81
+ function checkFields<_ extends { [k in keyof any]: never }>() {}
82
+
83
+ // https://github.com/sindresorhus/type-fest
84
+ type Numeric = number | bigint
85
+ type Zero = 0 | 0n
86
+ type Negative<T extends Numeric> = T extends Zero ? never : `${T}` extends `-${string}` ? T : never
87
+ type NonNegative<T extends Numeric> = T extends Zero ? T : Negative<T> extends never ? T : '__invalid_negative_number__'
@@ -1,8 +1,8 @@
1
1
  // This file is generated automatically by Next.js
2
2
  // Do not edit this file manually
3
3
 
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/flags" | "/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/scope-guard/check" | "/api/stream" | "/api/tab/nav" | "/api/tab/presence" | "/api/telemetry" | "/api/telemetry/stats" | "/api/version" | "/api/workspace" | "/api/workspace/activate"
4
+ type AppRoutes = "/" | "/docs" | "/feedback" | "/help" | "/map" | "/plan" | "/s/[token]" | "/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/flags" | "/api/ingest" | "/api/init" | "/api/map" | "/api/map/describe" | "/api/map/files" | "/api/map/finish" | "/api/map/start" | "/api/map/touch-active" | "/api/mention-search" | "/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/scope-guard/check" | "/api/share" | "/api/share/create" | "/api/stream" | "/api/tab/nav" | "/api/tab/presence" | "/api/telemetry" | "/api/telemetry/stats" | "/api/version" | "/api/workspace" | "/api/workspace/activate"
6
6
  type PageRoutes = never
7
7
  type LayoutRoutes = "/"
8
8
  type RedirectRoutes = never
@@ -48,6 +48,7 @@ interface ParamMap {
48
48
  "/api/map/finish": {}
49
49
  "/api/map/start": {}
50
50
  "/api/map/touch-active": {}
51
+ "/api/mention-search": {}
51
52
  "/api/nodes": {}
52
53
  "/api/nodes/[id]": { "id": string; }
53
54
  "/api/nodes/[id]/position": { "id": string; }
@@ -67,6 +68,8 @@ interface ParamMap {
67
68
  "/api/project-meta": {}
68
69
  "/api/reset": {}
69
70
  "/api/scope-guard/check": {}
71
+ "/api/share": {}
72
+ "/api/share/create": {}
70
73
  "/api/stream": {}
71
74
  "/api/tab/nav": {}
72
75
  "/api/tab/presence": {}
@@ -80,6 +83,7 @@ interface ParamMap {
80
83
  "/help": {}
81
84
  "/map": {}
82
85
  "/plan": {}
86
+ "/s/[token]": { "token": string; }
83
87
  "/settings": {}
84
88
  }
85
89
 
@@ -101,6 +101,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
101
101
  type __Unused = __Check
102
102
  }
103
103
 
104
+ // Validate ../../app/s/[token]/page.tsx
105
+ {
106
+ type __IsExpected<Specific extends AppPageConfig<"/s/[token]">> = Specific
107
+ const handler = {} as typeof import("../../app/s/[token]/page.js")
108
+ type __Check = __IsExpected<typeof handler>
109
+ // @ts-ignore
110
+ type __Unused = __Check
111
+ }
112
+
104
113
  // Validate ../../app/settings/page.tsx
105
114
  {
106
115
  type __IsExpected<Specific extends AppPageConfig<"/settings">> = Specific
@@ -434,6 +443,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
434
443
  type __Unused = __Check
435
444
  }
436
445
 
446
+ // Validate ../../app/api/mention-search/route.ts
447
+ {
448
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/mention-search">> = Specific
449
+ const handler = {} as typeof import("../../app/api/mention-search/route.js")
450
+ type __Check = __IsExpected<typeof handler>
451
+ // @ts-ignore
452
+ type __Unused = __Check
453
+ }
454
+
437
455
  // Validate ../../app/api/nodes/[id]/position/route.ts
438
456
  {
439
457
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/nodes/[id]/position">> = Specific
@@ -605,6 +623,24 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
605
623
  type __Unused = __Check
606
624
  }
607
625
 
626
+ // Validate ../../app/api/share/create/route.ts
627
+ {
628
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/share/create">> = Specific
629
+ const handler = {} as typeof import("../../app/api/share/create/route.js")
630
+ type __Check = __IsExpected<typeof handler>
631
+ // @ts-ignore
632
+ type __Unused = __Check
633
+ }
634
+
635
+ // Validate ../../app/api/share/route.ts
636
+ {
637
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/share">> = Specific
638
+ const handler = {} as typeof import("../../app/api/share/route.js")
639
+ type __Check = __IsExpected<typeof handler>
640
+ // @ts-ignore
641
+ type __Unused = __Check
642
+ }
643
+
608
644
  // Validate ../../app/api/stream/route.ts
609
645
  {
610
646
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/stream">> = Specific
@@ -71,7 +71,7 @@ Beacon was already initialized in this repo (\`/beacon-init\` ran at some point)
71
71
 
72
72
  ## What gets preserved vs replaced
73
73
 
74
- The \`beacon_init_persist\` tool **replaces only init-derived nodes** (\`source=INIT\`). A curated architecture node (created by \`beacon_describe_feature\` or by hand) whose title matches a component in your refreshed analysis is **merged in place** \u2014 your fresh \`domain\`/\`role\`/\`plain\`/\`layer\`/\`files\` land on it, but it keeps its source, position, status, and bug flags, and no duplicate INIT node is created. Curated nodes your analysis does NOT mention survive untouched, as do hand-edited tables, custom positions, notes, and draft feature plans. So you can re-run this freely.
74
+ The \`beacon_init_persist\` tool **replaces only init-derived nodes** (\`source=INIT\`). A curated architecture node (created by \`beacon_feature\` action:done or by hand) whose title matches a component in your refreshed analysis is **merged in place** \u2014 your fresh \`domain\`/\`role\`/\`plain\`/\`layer\`/\`files\` land on it, but it keeps its source, position, status, and bug flags, and no duplicate INIT node is created. Curated nodes your analysis does NOT mention survive untouched, as do hand-edited tables, custom positions, notes, and draft feature plans. So you can re-run this freely.
75
75
 
76
76
  The one caveat: if the user manually edited an INIT-source node on the canvas (e.g., renamed it, rewrote its role), that edit IS overwritten when you re-persist \u2014 and a renamed node no longer title-matches, so it survives as its own card. If the user mentions hand-curated INIT nodes, ask whether they want those carried into the new analysis verbatim.
77
77
 
@@ -175,13 +175,23 @@ When listing endpoints, give each \`uses: [{ table, access }]\` so the endpoint\
175
175
 
176
176
  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.
177
177
 
178
- 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.
178
+ 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_feature\` \u2014 sub-tasks default to the parent's layer) and on architecture components (\`beacon_feature\` action:done / \`beacon_init_persist\`). In a pure-backend repo, never set it \u2014 the boards don't show it there.
179
179
 
180
- 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.
180
+ ### Adding a card directly \u2014 \`beacon_feature\` (no review gate)
181
+
182
+ To put a card on the board WITHOUT the plan-review flow, call \`beacon_feature\` \u2014 ONE tool for a feature's whole lifecycle:
183
+ - \`{ action: "add" }\` creates a card in a SINGLE call. It defaults to \`status: "backlog"\` (a PENDING item you're NOT working on yet); pass \`status: "active"\` to start it IN_PROGRESS now. A title that matches an existing card returns \`exists\` (reuse it) \u2014 \`add\` never activates or demotes a card already on the board.
184
+ - \`{ action: "start" }\` marks an existing card IN_PROGRESS (create-or-flag).
185
+ - \`{ action: "subtasks" }\` adds child tasks under a card.
186
+ - \`{ action: "done" }\` completes feature(s) and registers the files/architecture touched.
187
+
188
+ A NEW card REQUIRES \`category\` + \`priority\` (and \`layer\` where the workspace has a frontend). Use \`beacon_propose_plan\` / \`beacon_present_plan\` only when you want the user to REVIEW before the card lands.
189
+
190
+ REUSE before you create. Call \`beacon_map\` FIRST \u2014 it lists every card with its \`category\`, \`priority\`, \`layer\` and \`status\`, so you reuse an existing category (don't invent a near-synonym) and spot duplicates WITHOUT calling \`beacon_entities\`. Beacon HARD-BLOCKS a feature that duplicates an existing one (it returns the existing feature to use instead) and one created without a category. \`category\` is the ONLY domain field. \`front\` (in \`beacon_feature\`) nests a card UNDER an existing parent feature \u2014 it is NOT a domain tag; a \`front\` that matches no real feature is rejected.
181
191
 
182
192
  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.
183
193
 
184
- A roadmap item that is a BUG to fix (not a feature to build) should carry \`kind: "BUG"\` \u2014 it renders as a typed bug card. This works everywhere roadmap cards are created: \`beacon_propose_plan\` features, the \`\`\`beacon block, \`beacon_start_feature\` (when the user says they're starting on a bug), \`beacon_add_subtasks\` items (a bug discovered mid-work), and \`beacon_init_persist\` roadmap items. Default is FEATURE.
194
+ A roadmap item that is a BUG to fix (not a feature to build) should carry \`kind: "BUG"\` \u2014 it renders as a typed bug card. This works everywhere roadmap cards are created: \`beacon_propose_plan\` features, the \`\`\`beacon block, \`beacon_feature\` (add/start when the user is working on a bug; or \`subtasks\` items for a bug discovered mid-work), and \`beacon_init_persist\` roadmap items. Default is FEATURE.
185
195
 
186
196
  ### 2b. Presenting a plan in plan mode (ExitPlanMode)
187
197
 
@@ -199,11 +209,11 @@ Beacon extracts it deterministically and **strips the block from the prose** (it
199
209
 
200
210
  ### 3. At the end, register the work \u2014 in ONE call
201
211
 
202
- Call \`beacon_describe_feature\` **ONCE** with a \`features\` array \u2014 one entry per feature the plan created \u2014 each with the files you touched and a short markdown description. This flips each one to **Done** \u2014 including its sub-tasks (the cascade completes every PENDING/IN_PROGRESS child; a sub-task you did NOT finish must be set BLOCKED or CANCELLED before registering, so it survives visibly) \u2014 and keeps \`beacon_context_for_feature\` accurate for the next session.
212
+ Call \`beacon_feature({ action: "done" })\` **ONCE** with a \`features\` array \u2014 one entry per feature the plan created \u2014 each with the files you touched and a short markdown description. This flips each one to **Done** \u2014 including its sub-tasks (the cascade completes every PENDING/IN_PROGRESS child; a sub-task you did NOT finish must be set BLOCKED or CANCELLED before registering, so it survives visibly) \u2014 and keeps \`beacon_context_for_feature\` accurate for the next session.
203
213
 
204
214
  Key each entry by its node \`id\`: the ids are handed back to you when the plan is approved (in the approval message / additionalContext), so you don't fuzzy-match titles or pay a disambiguation round-trip. If you don't have an id, \`title\` still works.
205
215
 
206
- Register them all in that single batched call. If a plan added five features, that's ONE \`beacon_describe_feature\` call with five entries \u2014 NOT five calls, and NOT just an umbrella ("Harden auth"), which leaves the individual features stuck on **Pending**.
216
+ Register them all in that single batched call. If a plan added five features, that's ONE \`beacon_feature({ action: "done" })\` call with five entries \u2014 NOT five calls, and NOT just an umbrella ("Harden auth"), which leaves the individual features stuck on **Pending**.
207
217
 
208
218
  If the feature added or materially changed a REAL architectural component (a subsystem \u2014 NOT a file), also pass \`architecture: [{ title, domain, role, \u2026 }]\` so the Architecture map stays accurate. It upserts curated components by title; never list files as components. If you found a bug or something worth investigating in a component's code, add \`bugs: [{ note }]\` to its architecture entry \u2014 it renders as a bug flag on the node (attributed to the agent); identical open flags are not duplicated. Only flag what you actually saw in the code.
209
219
 
package/dist/bin/hook.js CHANGED
@@ -71,7 +71,7 @@ Beacon was already initialized in this repo (\`/beacon-init\` ran at some point)
71
71
 
72
72
  ## What gets preserved vs replaced
73
73
 
74
- The \`beacon_init_persist\` tool **replaces only init-derived nodes** (\`source=INIT\`). A curated architecture node (created by \`beacon_describe_feature\` or by hand) whose title matches a component in your refreshed analysis is **merged in place** \u2014 your fresh \`domain\`/\`role\`/\`plain\`/\`layer\`/\`files\` land on it, but it keeps its source, position, status, and bug flags, and no duplicate INIT node is created. Curated nodes your analysis does NOT mention survive untouched, as do hand-edited tables, custom positions, notes, and draft feature plans. So you can re-run this freely.
74
+ The \`beacon_init_persist\` tool **replaces only init-derived nodes** (\`source=INIT\`). A curated architecture node (created by \`beacon_feature\` action:done or by hand) whose title matches a component in your refreshed analysis is **merged in place** \u2014 your fresh \`domain\`/\`role\`/\`plain\`/\`layer\`/\`files\` land on it, but it keeps its source, position, status, and bug flags, and no duplicate INIT node is created. Curated nodes your analysis does NOT mention survive untouched, as do hand-edited tables, custom positions, notes, and draft feature plans. So you can re-run this freely.
75
75
 
76
76
  The one caveat: if the user manually edited an INIT-source node on the canvas (e.g., renamed it, rewrote its role), that edit IS overwritten when you re-persist \u2014 and a renamed node no longer title-matches, so it survives as its own card. If the user mentions hand-curated INIT nodes, ask whether they want those carried into the new analysis verbatim.
77
77
 
@@ -175,13 +175,23 @@ When listing endpoints, give each \`uses: [{ table, access }]\` so the endpoint\
175
175
 
176
176
  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.
177
177
 
178
- 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.
178
+ 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_feature\` \u2014 sub-tasks default to the parent's layer) and on architecture components (\`beacon_feature\` action:done / \`beacon_init_persist\`). In a pure-backend repo, never set it \u2014 the boards don't show it there.
179
179
 
180
- 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.
180
+ ### Adding a card directly \u2014 \`beacon_feature\` (no review gate)
181
+
182
+ To put a card on the board WITHOUT the plan-review flow, call \`beacon_feature\` \u2014 ONE tool for a feature's whole lifecycle:
183
+ - \`{ action: "add" }\` creates a card in a SINGLE call. It defaults to \`status: "backlog"\` (a PENDING item you're NOT working on yet); pass \`status: "active"\` to start it IN_PROGRESS now. A title that matches an existing card returns \`exists\` (reuse it) \u2014 \`add\` never activates or demotes a card already on the board.
184
+ - \`{ action: "start" }\` marks an existing card IN_PROGRESS (create-or-flag).
185
+ - \`{ action: "subtasks" }\` adds child tasks under a card.
186
+ - \`{ action: "done" }\` completes feature(s) and registers the files/architecture touched.
187
+
188
+ A NEW card REQUIRES \`category\` + \`priority\` (and \`layer\` where the workspace has a frontend). Use \`beacon_propose_plan\` / \`beacon_present_plan\` only when you want the user to REVIEW before the card lands.
189
+
190
+ REUSE before you create. Call \`beacon_map\` FIRST \u2014 it lists every card with its \`category\`, \`priority\`, \`layer\` and \`status\`, so you reuse an existing category (don't invent a near-synonym) and spot duplicates WITHOUT calling \`beacon_entities\`. Beacon HARD-BLOCKS a feature that duplicates an existing one (it returns the existing feature to use instead) and one created without a category. \`category\` is the ONLY domain field. \`front\` (in \`beacon_feature\`) nests a card UNDER an existing parent feature \u2014 it is NOT a domain tag; a \`front\` that matches no real feature is rejected.
181
191
 
182
192
  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.
183
193
 
184
- A roadmap item that is a BUG to fix (not a feature to build) should carry \`kind: "BUG"\` \u2014 it renders as a typed bug card. This works everywhere roadmap cards are created: \`beacon_propose_plan\` features, the \`\`\`beacon block, \`beacon_start_feature\` (when the user says they're starting on a bug), \`beacon_add_subtasks\` items (a bug discovered mid-work), and \`beacon_init_persist\` roadmap items. Default is FEATURE.
194
+ A roadmap item that is a BUG to fix (not a feature to build) should carry \`kind: "BUG"\` \u2014 it renders as a typed bug card. This works everywhere roadmap cards are created: \`beacon_propose_plan\` features, the \`\`\`beacon block, \`beacon_feature\` (add/start when the user is working on a bug; or \`subtasks\` items for a bug discovered mid-work), and \`beacon_init_persist\` roadmap items. Default is FEATURE.
185
195
 
186
196
  ### 2b. Presenting a plan in plan mode (ExitPlanMode)
187
197
 
@@ -199,11 +209,11 @@ Beacon extracts it deterministically and **strips the block from the prose** (it
199
209
 
200
210
  ### 3. At the end, register the work \u2014 in ONE call
201
211
 
202
- Call \`beacon_describe_feature\` **ONCE** with a \`features\` array \u2014 one entry per feature the plan created \u2014 each with the files you touched and a short markdown description. This flips each one to **Done** \u2014 including its sub-tasks (the cascade completes every PENDING/IN_PROGRESS child; a sub-task you did NOT finish must be set BLOCKED or CANCELLED before registering, so it survives visibly) \u2014 and keeps \`beacon_context_for_feature\` accurate for the next session.
212
+ Call \`beacon_feature({ action: "done" })\` **ONCE** with a \`features\` array \u2014 one entry per feature the plan created \u2014 each with the files you touched and a short markdown description. This flips each one to **Done** \u2014 including its sub-tasks (the cascade completes every PENDING/IN_PROGRESS child; a sub-task you did NOT finish must be set BLOCKED or CANCELLED before registering, so it survives visibly) \u2014 and keeps \`beacon_context_for_feature\` accurate for the next session.
203
213
 
204
214
  Key each entry by its node \`id\`: the ids are handed back to you when the plan is approved (in the approval message / additionalContext), so you don't fuzzy-match titles or pay a disambiguation round-trip. If you don't have an id, \`title\` still works.
205
215
 
206
- Register them all in that single batched call. If a plan added five features, that's ONE \`beacon_describe_feature\` call with five entries \u2014 NOT five calls, and NOT just an umbrella ("Harden auth"), which leaves the individual features stuck on **Pending**.
216
+ Register them all in that single batched call. If a plan added five features, that's ONE \`beacon_feature({ action: "done" })\` call with five entries \u2014 NOT five calls, and NOT just an umbrella ("Harden auth"), which leaves the individual features stuck on **Pending**.
207
217
 
208
218
  If the feature added or materially changed a REAL architectural component (a subsystem \u2014 NOT a file), also pass \`architecture: [{ title, domain, role, \u2026 }]\` so the Architecture map stays accurate. It upserts curated components by title; never list files as components. If you found a bug or something worth investigating in a component's code, add \`bugs: [{ note }]\` to its architecture entry \u2014 it renders as a bug flag on the node (attributed to the agent); identical open flags are not duplicated. Only flag what you actually saw in the code.
209
219