trybeacon 0.1.65 → 0.1.67

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 (371) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.next/BUILD_ID +1 -1
  3. package/.next/app-path-routes-manifest.json +18 -11
  4. package/.next/build-manifest.json +2 -2
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/routes-manifest.json +42 -0
  7. package/.next/server/app/_global-error/page.js +2 -2
  8. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/_global-error.html +1 -1
  10. package/.next/server/app/_global-error.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  16. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  17. package/.next/server/app/_not-found/page.js +2 -2
  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/route.js +1 -1
  29. package/.next/server/app/api/board-layout/route.js +1 -1
  30. package/.next/server/app/api/bug-flags/[id]/route.js +1 -1
  31. package/.next/server/app/api/bug-flags/route.js +1 -1
  32. package/.next/server/app/api/code-graph/position/route.js +1 -1
  33. package/.next/server/app/api/code-graph/route.js +1 -1
  34. package/.next/server/app/api/context/feature/route.js +1 -1
  35. package/.next/server/app/api/context/file/route.js +1 -1
  36. package/.next/server/app/api/context/route.js +1 -1
  37. package/.next/server/app/api/db/arrange/route.js +1 -1
  38. package/.next/server/app/api/db/backfill-access/route.js +1 -1
  39. package/.next/server/app/api/db/position/route.js +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/endpoints/[id]/route.js +1 -1
  50. package/.next/server/app/api/entities/route.js +1 -1
  51. package/.next/server/app/api/feedback/[id]/route.js +1 -1
  52. package/.next/server/app/api/feedback/[id]/vote/route.js +1 -1
  53. package/.next/server/app/api/feedback/route.js +1 -1
  54. package/.next/server/app/api/flags/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/lesson/close/route.js +1 -0
  58. package/.next/server/app/api/lesson/close/route.js.nft.json +1 -0
  59. package/.next/server/app/api/lesson/close/route_client-reference-manifest.js +1 -0
  60. package/.next/server/app/api/lesson/presence/route.js +1 -0
  61. package/.next/server/app/api/lesson/presence/route.js.nft.json +1 -0
  62. package/.next/server/app/api/lesson/presence/route_client-reference-manifest.js +1 -0
  63. package/.next/server/app/api/lesson/questions/route.js +1 -0
  64. package/.next/server/app/api/lesson/questions/route.js.nft.json +1 -0
  65. package/.next/server/app/api/lesson/questions/route_client-reference-manifest.js +1 -0
  66. package/.next/server/app/api/lesson/route.js +1 -0
  67. package/.next/server/app/api/lesson/route.js.nft.json +1 -0
  68. package/.next/server/app/api/lesson/route_client-reference-manifest.js +1 -0
  69. package/.next/server/app/api/lesson/save/route.js +1 -0
  70. package/.next/server/app/api/lesson/save/route.js.nft.json +1 -0
  71. package/.next/server/app/api/lesson/save/route_client-reference-manifest.js +1 -0
  72. package/.next/server/app/api/lesson/verdict/route.js +1 -0
  73. package/.next/server/app/api/lesson/verdict/route.js.nft.json +1 -0
  74. package/.next/server/app/api/lesson/verdict/route_client-reference-manifest.js +1 -0
  75. package/.next/server/app/api/map/describe/route.js +2 -2
  76. package/.next/server/app/api/map/files/route.js +1 -1
  77. package/.next/server/app/api/map/finish/route.js +1 -1
  78. package/.next/server/app/api/map/route.js +1 -1
  79. package/.next/server/app/api/map/start/route.js +1 -1
  80. package/.next/server/app/api/map/touch-active/route.js +1 -1
  81. package/.next/server/app/api/mention-search/route.js +1 -1
  82. package/.next/server/app/api/nodes/[id]/position/route.js +1 -1
  83. package/.next/server/app/api/nodes/[id]/route.js +1 -1
  84. package/.next/server/app/api/nodes/positions/route.js +1 -1
  85. package/.next/server/app/api/nodes/route.js +1 -1
  86. package/.next/server/app/api/nodes/subtasks/route.js +1 -1
  87. package/.next/server/app/api/notes/[id]/route.js +1 -1
  88. package/.next/server/app/api/notes/route.js +1 -1
  89. package/.next/server/app/api/open/route.js +1 -1
  90. package/.next/server/app/api/plan/annotations/route.js +3 -3
  91. package/.next/server/app/api/plan/approve/route.js +2 -2
  92. package/.next/server/app/api/plan/history/route.js +1 -1
  93. package/.next/server/app/api/plan/markdown/route.js +1 -1
  94. package/.next/server/app/api/plan/presence/route.js +1 -1
  95. package/.next/server/app/api/plan/route.js +1 -1
  96. package/.next/server/app/api/plan/verdict/route.js +1 -1
  97. package/.next/server/app/api/preferences/route.js +1 -1
  98. package/.next/server/app/api/project-meta/route.js +1 -1
  99. package/.next/server/app/api/reset/route.js +1 -1
  100. package/.next/server/app/api/scope-guard/check/route.js +1 -1
  101. package/.next/server/app/api/share/create/route.js +1 -1
  102. package/.next/server/app/api/share/route.js +1 -1
  103. package/.next/server/app/api/stream/route.js +2 -2
  104. package/.next/server/app/api/tab/nav/route.js +1 -1
  105. package/.next/server/app/api/tab/presence/route.js +1 -1
  106. package/.next/server/app/api/telemetry/route.js +1 -1
  107. package/.next/server/app/api/telemetry/stats/route.js +1 -1
  108. package/.next/server/app/api/version/route.js +1 -1
  109. package/.next/server/app/api/workspace/activate/route.js +1 -1
  110. package/.next/server/app/api/workspace/route.js +1 -1
  111. package/.next/server/app/apple-icon.png/route.js +1 -1
  112. package/.next/server/app/docs/page.js +2 -2
  113. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  114. package/.next/server/app/docs.html +1 -1
  115. package/.next/server/app/docs.rsc +11 -11
  116. package/.next/server/app/docs.segments/_full.segment.rsc +11 -11
  117. package/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  118. package/.next/server/app/docs.segments/_index.segment.rsc +11 -11
  119. package/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
  120. package/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
  121. package/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  122. package/.next/server/app/feedback/page.js +2 -2
  123. package/.next/server/app/feedback/page_client-reference-manifest.js +1 -1
  124. package/.next/server/app/feedback.html +1 -1
  125. package/.next/server/app/feedback.rsc +11 -11
  126. package/.next/server/app/feedback.segments/_full.segment.rsc +11 -11
  127. package/.next/server/app/feedback.segments/_head.segment.rsc +1 -1
  128. package/.next/server/app/feedback.segments/_index.segment.rsc +11 -11
  129. package/.next/server/app/feedback.segments/_tree.segment.rsc +2 -2
  130. package/.next/server/app/feedback.segments/feedback/__PAGE__.segment.rsc +1 -1
  131. package/.next/server/app/feedback.segments/feedback.segment.rsc +1 -1
  132. package/.next/server/app/help/page.js +2 -2
  133. package/.next/server/app/help/page_client-reference-manifest.js +1 -1
  134. package/.next/server/app/help.html +1 -1
  135. package/.next/server/app/help.rsc +11 -11
  136. package/.next/server/app/help.segments/_full.segment.rsc +11 -11
  137. package/.next/server/app/help.segments/_head.segment.rsc +1 -1
  138. package/.next/server/app/help.segments/_index.segment.rsc +11 -11
  139. package/.next/server/app/help.segments/_tree.segment.rsc +2 -2
  140. package/.next/server/app/help.segments/help/__PAGE__.segment.rsc +1 -1
  141. package/.next/server/app/help.segments/help.segment.rsc +1 -1
  142. package/.next/server/app/icon.svg/route.js +1 -1
  143. package/.next/server/app/index.html +1 -1
  144. package/.next/server/app/index.rsc +12 -12
  145. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  146. package/.next/server/app/index.segments/_full.segment.rsc +12 -12
  147. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  148. package/.next/server/app/index.segments/_index.segment.rsc +11 -11
  149. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  150. package/.next/server/app/learn/page.js +8 -0
  151. package/.next/server/app/learn/page.js.nft.json +1 -0
  152. package/.next/server/app/learn/page_client-reference-manifest.js +1 -0
  153. package/.next/server/app/map/page.js +2 -2
  154. package/.next/server/app/map/page.js.nft.json +1 -1
  155. package/.next/server/app/map/page_client-reference-manifest.js +1 -1
  156. package/.next/server/app/page.js +2 -2
  157. package/.next/server/app/page_client-reference-manifest.js +1 -1
  158. package/.next/server/app/plan/page.js +2 -2
  159. package/.next/server/app/plan/page.js.nft.json +1 -1
  160. package/.next/server/app/plan/page_client-reference-manifest.js +1 -1
  161. package/.next/server/app/s/[token]/page.js +2 -2
  162. package/.next/server/app/s/[token]/page.js.nft.json +1 -1
  163. package/.next/server/app/s/[token]/page_client-reference-manifest.js +1 -1
  164. package/.next/server/app/settings/page.js +2 -2
  165. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  166. package/.next/server/app-paths-manifest.json +18 -11
  167. package/.next/server/chunks/2025.js +1 -0
  168. package/.next/server/chunks/2050.js +1 -1
  169. package/.next/server/chunks/2994.js +2 -2
  170. package/.next/server/chunks/4046.js +3 -3
  171. package/.next/server/chunks/4307.js +1 -1
  172. package/.next/server/chunks/5683.js +1 -0
  173. package/.next/server/chunks/{3284.js → 7720.js} +3 -3
  174. package/.next/server/chunks/9338.js +8 -8
  175. package/.next/server/middleware-build-manifest.js +1 -1
  176. package/.next/server/pages/404.html +1 -1
  177. package/.next/server/pages/500.html +1 -1
  178. package/.next/server/server-reference-manifest.js +1 -1
  179. package/.next/server/server-reference-manifest.json +1 -1
  180. package/.next/static/chunks/1276-b84f61ec9c0df862.js +1 -0
  181. package/.next/static/chunks/1a258343-954e0e6619585d3c.js +2 -0
  182. package/.next/static/chunks/{8915-fa61a860c63a7c85.js → 2059-fba06ba63ba64522.js} +3 -3
  183. package/.next/static/chunks/4607-a668ea431c41e60e.js +1 -0
  184. package/.next/static/chunks/4853-6dc402b4ce452fa5.js +1 -0
  185. package/.next/static/chunks/app/_global-error/page-2390ea0e69e5991f.js +1 -0
  186. package/.next/static/chunks/app/api/board-annotations/[id]/route-2390ea0e69e5991f.js +1 -0
  187. package/.next/static/chunks/app/api/board-annotations/route-2390ea0e69e5991f.js +1 -0
  188. package/.next/static/chunks/app/api/board-layout/route-2390ea0e69e5991f.js +1 -0
  189. package/.next/static/chunks/app/api/bug-flags/[id]/route-2390ea0e69e5991f.js +1 -0
  190. package/.next/static/chunks/app/api/bug-flags/route-2390ea0e69e5991f.js +1 -0
  191. package/.next/static/chunks/app/api/code-graph/position/route-2390ea0e69e5991f.js +1 -0
  192. package/.next/static/chunks/app/api/code-graph/route-2390ea0e69e5991f.js +1 -0
  193. package/.next/static/chunks/app/api/context/feature/route-2390ea0e69e5991f.js +1 -0
  194. package/.next/static/chunks/app/api/context/file/route-2390ea0e69e5991f.js +1 -0
  195. package/.next/static/chunks/app/api/context/route-2390ea0e69e5991f.js +1 -0
  196. package/.next/static/chunks/app/api/db/arrange/route-2390ea0e69e5991f.js +1 -0
  197. package/.next/static/chunks/app/api/db/backfill-access/route-2390ea0e69e5991f.js +1 -0
  198. package/.next/static/chunks/app/api/db/position/route-2390ea0e69e5991f.js +1 -0
  199. package/.next/static/chunks/app/api/db/prune-planned/route-2390ea0e69e5991f.js +1 -0
  200. package/.next/static/chunks/app/api/db/reconcile-endpoints/route-2390ea0e69e5991f.js +1 -0
  201. package/.next/static/chunks/app/api/db/relations/[id]/route-2390ea0e69e5991f.js +1 -0
  202. package/.next/static/chunks/app/api/db/tables/[id]/route-2390ea0e69e5991f.js +1 -0
  203. package/.next/static/chunks/app/api/draft/approve/route-2390ea0e69e5991f.js +1 -0
  204. package/.next/static/chunks/app/api/draft/route-2390ea0e69e5991f.js +1 -0
  205. package/.next/static/chunks/app/api/draft/status/route-2390ea0e69e5991f.js +1 -0
  206. package/.next/static/chunks/app/api/edges/[id]/route-2390ea0e69e5991f.js +1 -0
  207. package/.next/static/chunks/app/api/edges/route-2390ea0e69e5991f.js +1 -0
  208. package/.next/static/chunks/app/api/endpoints/[id]/route-2390ea0e69e5991f.js +1 -0
  209. package/.next/static/chunks/app/api/entities/route-2390ea0e69e5991f.js +1 -0
  210. package/.next/static/chunks/app/api/feedback/[id]/route-2390ea0e69e5991f.js +1 -0
  211. package/.next/static/chunks/app/api/feedback/[id]/vote/route-2390ea0e69e5991f.js +1 -0
  212. package/.next/static/chunks/app/api/feedback/route-2390ea0e69e5991f.js +1 -0
  213. package/.next/static/chunks/app/api/flags/route-2390ea0e69e5991f.js +1 -0
  214. package/.next/static/chunks/app/api/ingest/route-2390ea0e69e5991f.js +1 -0
  215. package/.next/static/chunks/app/api/init/route-2390ea0e69e5991f.js +1 -0
  216. package/.next/static/chunks/app/api/lesson/close/route-2390ea0e69e5991f.js +1 -0
  217. package/.next/static/chunks/app/api/lesson/presence/route-2390ea0e69e5991f.js +1 -0
  218. package/.next/static/chunks/app/api/lesson/questions/route-2390ea0e69e5991f.js +1 -0
  219. package/.next/static/chunks/app/api/lesson/route-2390ea0e69e5991f.js +1 -0
  220. package/.next/static/chunks/app/api/lesson/save/route-2390ea0e69e5991f.js +1 -0
  221. package/.next/static/chunks/app/api/lesson/verdict/route-2390ea0e69e5991f.js +1 -0
  222. package/.next/static/chunks/app/api/map/describe/route-2390ea0e69e5991f.js +1 -0
  223. package/.next/static/chunks/app/api/map/files/route-2390ea0e69e5991f.js +1 -0
  224. package/.next/static/chunks/app/api/map/finish/route-2390ea0e69e5991f.js +1 -0
  225. package/.next/static/chunks/app/api/map/route-2390ea0e69e5991f.js +1 -0
  226. package/.next/static/chunks/app/api/map/start/route-2390ea0e69e5991f.js +1 -0
  227. package/.next/static/chunks/app/api/map/touch-active/route-2390ea0e69e5991f.js +1 -0
  228. package/.next/static/chunks/app/api/mention-search/route-2390ea0e69e5991f.js +1 -0
  229. package/.next/static/chunks/app/api/nodes/[id]/position/route-2390ea0e69e5991f.js +1 -0
  230. package/.next/static/chunks/app/api/nodes/[id]/route-2390ea0e69e5991f.js +1 -0
  231. package/.next/static/chunks/app/api/nodes/positions/route-2390ea0e69e5991f.js +1 -0
  232. package/.next/static/chunks/app/api/nodes/route-2390ea0e69e5991f.js +1 -0
  233. package/.next/static/chunks/app/api/nodes/subtasks/route-2390ea0e69e5991f.js +1 -0
  234. package/.next/static/chunks/app/api/notes/[id]/route-2390ea0e69e5991f.js +1 -0
  235. package/.next/static/chunks/app/api/notes/route-2390ea0e69e5991f.js +1 -0
  236. package/.next/static/chunks/app/api/open/route-2390ea0e69e5991f.js +1 -0
  237. package/.next/static/chunks/app/api/plan/annotations/route-2390ea0e69e5991f.js +1 -0
  238. package/.next/static/chunks/app/api/plan/approve/route-2390ea0e69e5991f.js +1 -0
  239. package/.next/static/chunks/app/api/plan/history/route-2390ea0e69e5991f.js +1 -0
  240. package/.next/static/chunks/app/api/plan/markdown/route-2390ea0e69e5991f.js +1 -0
  241. package/.next/static/chunks/app/api/plan/presence/route-2390ea0e69e5991f.js +1 -0
  242. package/.next/static/chunks/app/api/plan/route-2390ea0e69e5991f.js +1 -0
  243. package/.next/static/chunks/app/api/plan/verdict/route-2390ea0e69e5991f.js +1 -0
  244. package/.next/static/chunks/app/api/preferences/route-2390ea0e69e5991f.js +1 -0
  245. package/.next/static/chunks/app/api/project-meta/route-2390ea0e69e5991f.js +1 -0
  246. package/.next/static/chunks/app/api/reset/route-2390ea0e69e5991f.js +1 -0
  247. package/.next/static/chunks/app/api/scope-guard/check/route-2390ea0e69e5991f.js +1 -0
  248. package/.next/static/chunks/app/api/share/create/route-2390ea0e69e5991f.js +1 -0
  249. package/.next/static/chunks/app/api/share/route-2390ea0e69e5991f.js +1 -0
  250. package/.next/static/chunks/app/api/stream/route-2390ea0e69e5991f.js +1 -0
  251. package/.next/static/chunks/app/api/tab/nav/route-2390ea0e69e5991f.js +1 -0
  252. package/.next/static/chunks/app/api/tab/presence/route-2390ea0e69e5991f.js +1 -0
  253. package/.next/static/chunks/app/api/telemetry/route-2390ea0e69e5991f.js +1 -0
  254. package/.next/static/chunks/app/api/telemetry/stats/route-2390ea0e69e5991f.js +1 -0
  255. package/.next/static/chunks/app/api/version/route-2390ea0e69e5991f.js +1 -0
  256. package/.next/static/chunks/app/api/workspace/activate/route-2390ea0e69e5991f.js +1 -0
  257. package/.next/static/chunks/app/api/workspace/route-2390ea0e69e5991f.js +1 -0
  258. package/.next/static/chunks/app/layout-9f0f4d8e4534a62e.js +1 -0
  259. package/.next/static/chunks/app/learn/page-03acad0a37068966.js +7 -0
  260. package/.next/static/chunks/app/map/{page-66ec4b62a4153de8.js → page-5cfad64d5feea695.js} +1 -1
  261. package/.next/static/chunks/app/plan/page-5eacb6b83bd4873d.js +1 -0
  262. package/.next/static/chunks/app/s/[token]/page-1a350cf50a45500c.js +1 -0
  263. package/.next/static/chunks/next/dist/client/components/builtin/app-error-2390ea0e69e5991f.js +1 -0
  264. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-2390ea0e69e5991f.js +1 -0
  265. package/.next/static/chunks/next/dist/client/components/builtin/not-found-2390ea0e69e5991f.js +1 -0
  266. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-2390ea0e69e5991f.js +1 -0
  267. package/.next/static/css/63986592e2be7d62.css +1 -0
  268. package/.next/static/hkOIw5DQW9WSwBwZrD8_9/_buildManifest.js +1 -0
  269. package/.next/trace +43 -42
  270. package/.next/trace-build +1 -1
  271. package/.next/types/app/api/lesson/close/route.ts +351 -0
  272. package/.next/types/app/api/lesson/presence/route.ts +351 -0
  273. package/.next/types/app/api/lesson/questions/route.ts +351 -0
  274. package/.next/types/app/api/lesson/route.ts +351 -0
  275. package/.next/types/app/api/lesson/save/route.ts +351 -0
  276. package/.next/types/app/api/lesson/verdict/route.ts +351 -0
  277. package/.next/types/app/learn/page.ts +87 -0
  278. package/.next/types/routes.d.ts +9 -2
  279. package/.next/types/validator.ts +63 -0
  280. package/dist/bin/beacon.js +14 -12
  281. package/dist/bin/doctor.js +97 -24
  282. package/dist/bin/hook.js +94 -21
  283. package/dist/bin/mcp.js +110 -35
  284. package/dist/bin/plan.js +94 -21
  285. package/dist/bin/uninstall.js +98 -25
  286. package/dist/lib/assets.js +84 -14
  287. package/dist/lib/codex-install.js +97 -24
  288. package/dist/lib/global-install.js +97 -24
  289. package/package.json +1 -1
  290. package/plugin/skills/beacon-explain/SKILL.md +70 -0
  291. package/.next/server/chunks/2813.js +0 -1
  292. package/.next/static/chunks/1a258343-6baccd9e573fdfaf.js +0 -2
  293. package/.next/static/chunks/3845-6fe7e66d4bf82eb5.js +0 -1
  294. package/.next/static/chunks/4491-0cd79f4195f4b111.js +0 -1
  295. package/.next/static/chunks/app/_global-error/page-548a84d85e061550.js +0 -1
  296. package/.next/static/chunks/app/api/board-annotations/[id]/route-548a84d85e061550.js +0 -1
  297. package/.next/static/chunks/app/api/board-annotations/route-548a84d85e061550.js +0 -1
  298. package/.next/static/chunks/app/api/board-layout/route-548a84d85e061550.js +0 -1
  299. package/.next/static/chunks/app/api/bug-flags/[id]/route-548a84d85e061550.js +0 -1
  300. package/.next/static/chunks/app/api/bug-flags/route-548a84d85e061550.js +0 -1
  301. package/.next/static/chunks/app/api/code-graph/position/route-548a84d85e061550.js +0 -1
  302. package/.next/static/chunks/app/api/code-graph/route-548a84d85e061550.js +0 -1
  303. package/.next/static/chunks/app/api/context/feature/route-548a84d85e061550.js +0 -1
  304. package/.next/static/chunks/app/api/context/file/route-548a84d85e061550.js +0 -1
  305. package/.next/static/chunks/app/api/context/route-548a84d85e061550.js +0 -1
  306. package/.next/static/chunks/app/api/db/arrange/route-548a84d85e061550.js +0 -1
  307. package/.next/static/chunks/app/api/db/backfill-access/route-548a84d85e061550.js +0 -1
  308. package/.next/static/chunks/app/api/db/position/route-548a84d85e061550.js +0 -1
  309. package/.next/static/chunks/app/api/db/prune-planned/route-548a84d85e061550.js +0 -1
  310. package/.next/static/chunks/app/api/db/reconcile-endpoints/route-548a84d85e061550.js +0 -1
  311. package/.next/static/chunks/app/api/db/relations/[id]/route-548a84d85e061550.js +0 -1
  312. package/.next/static/chunks/app/api/db/tables/[id]/route-548a84d85e061550.js +0 -1
  313. package/.next/static/chunks/app/api/draft/approve/route-548a84d85e061550.js +0 -1
  314. package/.next/static/chunks/app/api/draft/route-548a84d85e061550.js +0 -1
  315. package/.next/static/chunks/app/api/draft/status/route-548a84d85e061550.js +0 -1
  316. package/.next/static/chunks/app/api/edges/[id]/route-548a84d85e061550.js +0 -1
  317. package/.next/static/chunks/app/api/edges/route-548a84d85e061550.js +0 -1
  318. package/.next/static/chunks/app/api/endpoints/[id]/route-548a84d85e061550.js +0 -1
  319. package/.next/static/chunks/app/api/entities/route-548a84d85e061550.js +0 -1
  320. package/.next/static/chunks/app/api/feedback/[id]/route-548a84d85e061550.js +0 -1
  321. package/.next/static/chunks/app/api/feedback/[id]/vote/route-548a84d85e061550.js +0 -1
  322. package/.next/static/chunks/app/api/feedback/route-548a84d85e061550.js +0 -1
  323. package/.next/static/chunks/app/api/flags/route-548a84d85e061550.js +0 -1
  324. package/.next/static/chunks/app/api/ingest/route-548a84d85e061550.js +0 -1
  325. package/.next/static/chunks/app/api/init/route-548a84d85e061550.js +0 -1
  326. package/.next/static/chunks/app/api/map/describe/route-548a84d85e061550.js +0 -1
  327. package/.next/static/chunks/app/api/map/files/route-548a84d85e061550.js +0 -1
  328. package/.next/static/chunks/app/api/map/finish/route-548a84d85e061550.js +0 -1
  329. package/.next/static/chunks/app/api/map/route-548a84d85e061550.js +0 -1
  330. package/.next/static/chunks/app/api/map/start/route-548a84d85e061550.js +0 -1
  331. package/.next/static/chunks/app/api/map/touch-active/route-548a84d85e061550.js +0 -1
  332. package/.next/static/chunks/app/api/mention-search/route-548a84d85e061550.js +0 -1
  333. package/.next/static/chunks/app/api/nodes/[id]/position/route-548a84d85e061550.js +0 -1
  334. package/.next/static/chunks/app/api/nodes/[id]/route-548a84d85e061550.js +0 -1
  335. package/.next/static/chunks/app/api/nodes/positions/route-548a84d85e061550.js +0 -1
  336. package/.next/static/chunks/app/api/nodes/route-548a84d85e061550.js +0 -1
  337. package/.next/static/chunks/app/api/nodes/subtasks/route-548a84d85e061550.js +0 -1
  338. package/.next/static/chunks/app/api/notes/[id]/route-548a84d85e061550.js +0 -1
  339. package/.next/static/chunks/app/api/notes/route-548a84d85e061550.js +0 -1
  340. package/.next/static/chunks/app/api/open/route-548a84d85e061550.js +0 -1
  341. package/.next/static/chunks/app/api/plan/annotations/route-548a84d85e061550.js +0 -1
  342. package/.next/static/chunks/app/api/plan/approve/route-548a84d85e061550.js +0 -1
  343. package/.next/static/chunks/app/api/plan/history/route-548a84d85e061550.js +0 -1
  344. package/.next/static/chunks/app/api/plan/markdown/route-548a84d85e061550.js +0 -1
  345. package/.next/static/chunks/app/api/plan/presence/route-548a84d85e061550.js +0 -1
  346. package/.next/static/chunks/app/api/plan/route-548a84d85e061550.js +0 -1
  347. package/.next/static/chunks/app/api/plan/verdict/route-548a84d85e061550.js +0 -1
  348. package/.next/static/chunks/app/api/preferences/route-548a84d85e061550.js +0 -1
  349. package/.next/static/chunks/app/api/project-meta/route-548a84d85e061550.js +0 -1
  350. package/.next/static/chunks/app/api/reset/route-548a84d85e061550.js +0 -1
  351. package/.next/static/chunks/app/api/scope-guard/check/route-548a84d85e061550.js +0 -1
  352. package/.next/static/chunks/app/api/share/create/route-548a84d85e061550.js +0 -1
  353. package/.next/static/chunks/app/api/share/route-548a84d85e061550.js +0 -1
  354. package/.next/static/chunks/app/api/stream/route-548a84d85e061550.js +0 -1
  355. package/.next/static/chunks/app/api/tab/nav/route-548a84d85e061550.js +0 -1
  356. package/.next/static/chunks/app/api/tab/presence/route-548a84d85e061550.js +0 -1
  357. package/.next/static/chunks/app/api/telemetry/route-548a84d85e061550.js +0 -1
  358. package/.next/static/chunks/app/api/telemetry/stats/route-548a84d85e061550.js +0 -1
  359. package/.next/static/chunks/app/api/version/route-548a84d85e061550.js +0 -1
  360. package/.next/static/chunks/app/api/workspace/activate/route-548a84d85e061550.js +0 -1
  361. package/.next/static/chunks/app/api/workspace/route-548a84d85e061550.js +0 -1
  362. package/.next/static/chunks/app/layout-3115f8503ff00902.js +0 -1
  363. package/.next/static/chunks/app/plan/page-008565f9049d55c9.js +0 -1
  364. package/.next/static/chunks/app/s/[token]/page-1c10b26b300faffc.js +0 -1
  365. package/.next/static/chunks/next/dist/client/components/builtin/app-error-548a84d85e061550.js +0 -1
  366. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-548a84d85e061550.js +0 -1
  367. package/.next/static/chunks/next/dist/client/components/builtin/not-found-548a84d85e061550.js +0 -1
  368. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-548a84d85e061550.js +0 -1
  369. package/.next/static/css/f871d81e526502c1.css +0 -1
  370. package/.next/static/fwNWsob4GcVUD5_xV0f1h/_buildManifest.js +0 -1
  371. /package/.next/static/{fwNWsob4GcVUD5_xV0f1h → hkOIw5DQW9WSwBwZrD8_9}/_ssgManifest.js +0 -0
@@ -0,0 +1,87 @@
1
+ // File: /home/runner/work/beacon/beacon/app/learn/page.tsx
2
+ import * as entry from '../../../../app/learn/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/learn/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" | "/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"
4
+ type AppRoutes = "/" | "/docs" | "/feedback" | "/help" | "/learn" | "/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/lesson" | "/api/lesson/close" | "/api/lesson/presence" | "/api/lesson/questions" | "/api/lesson/save" | "/api/lesson/verdict" | "/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
@@ -42,6 +42,12 @@ interface ParamMap {
42
42
  "/api/flags": {}
43
43
  "/api/ingest": {}
44
44
  "/api/init": {}
45
+ "/api/lesson": {}
46
+ "/api/lesson/close": {}
47
+ "/api/lesson/presence": {}
48
+ "/api/lesson/questions": {}
49
+ "/api/lesson/save": {}
50
+ "/api/lesson/verdict": {}
45
51
  "/api/map": {}
46
52
  "/api/map/describe": {}
47
53
  "/api/map/files": {}
@@ -81,6 +87,7 @@ interface ParamMap {
81
87
  "/docs": {}
82
88
  "/feedback": {}
83
89
  "/help": {}
90
+ "/learn": {}
84
91
  "/map": {}
85
92
  "/plan": {}
86
93
  "/s/[token]": { "token": string; }
@@ -74,6 +74,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
74
74
  type __Unused = __Check
75
75
  }
76
76
 
77
+ // Validate ../../app/learn/page.tsx
78
+ {
79
+ type __IsExpected<Specific extends AppPageConfig<"/learn">> = Specific
80
+ const handler = {} as typeof import("../../app/learn/page.js")
81
+ type __Check = __IsExpected<typeof handler>
82
+ // @ts-ignore
83
+ type __Unused = __Check
84
+ }
85
+
77
86
  // Validate ../../app/map/page.tsx
78
87
  {
79
88
  type __IsExpected<Specific extends AppPageConfig<"/map">> = Specific
@@ -389,6 +398,60 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
389
398
  type __Unused = __Check
390
399
  }
391
400
 
401
+ // Validate ../../app/api/lesson/close/route.ts
402
+ {
403
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/lesson/close">> = Specific
404
+ const handler = {} as typeof import("../../app/api/lesson/close/route.js")
405
+ type __Check = __IsExpected<typeof handler>
406
+ // @ts-ignore
407
+ type __Unused = __Check
408
+ }
409
+
410
+ // Validate ../../app/api/lesson/presence/route.ts
411
+ {
412
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/lesson/presence">> = Specific
413
+ const handler = {} as typeof import("../../app/api/lesson/presence/route.js")
414
+ type __Check = __IsExpected<typeof handler>
415
+ // @ts-ignore
416
+ type __Unused = __Check
417
+ }
418
+
419
+ // Validate ../../app/api/lesson/questions/route.ts
420
+ {
421
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/lesson/questions">> = Specific
422
+ const handler = {} as typeof import("../../app/api/lesson/questions/route.js")
423
+ type __Check = __IsExpected<typeof handler>
424
+ // @ts-ignore
425
+ type __Unused = __Check
426
+ }
427
+
428
+ // Validate ../../app/api/lesson/route.ts
429
+ {
430
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/lesson">> = Specific
431
+ const handler = {} as typeof import("../../app/api/lesson/route.js")
432
+ type __Check = __IsExpected<typeof handler>
433
+ // @ts-ignore
434
+ type __Unused = __Check
435
+ }
436
+
437
+ // Validate ../../app/api/lesson/save/route.ts
438
+ {
439
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/lesson/save">> = Specific
440
+ const handler = {} as typeof import("../../app/api/lesson/save/route.js")
441
+ type __Check = __IsExpected<typeof handler>
442
+ // @ts-ignore
443
+ type __Unused = __Check
444
+ }
445
+
446
+ // Validate ../../app/api/lesson/verdict/route.ts
447
+ {
448
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/lesson/verdict">> = Specific
449
+ const handler = {} as typeof import("../../app/api/lesson/verdict/route.js")
450
+ type __Check = __IsExpected<typeof handler>
451
+ // @ts-ignore
452
+ type __Unused = __Check
453
+ }
454
+
392
455
  // Validate ../../app/api/map/describe/route.ts
393
456
  {
394
457
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/map/describe">> = Specific
@@ -1,20 +1,22 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- import{execSync as C,spawn as c}from"child_process";import{existsSync as k,mkdirSync as d,openSync as p,readFileSync as f,writeFileSync as l}from"fs";import{homedir as t,platform as _}from"os";import{basename as n,dirname as L,join as B}from"path";import{fileURLToPath as a}from"url";var w=L(a(import.meta.url)),P=n(L(w))==="dist",j=P?L(L(w)):L(w),y=process.cwd(),A=process.env.BEACON_HOME||B(t(),".beacon"),R=B(A,"server.json"),T=process.env.PORT||"4319";if(!process.env.CLAUDE_PLUGIN_ROOT&&k(B(j,".claude-plugin","plugin.json")))process.env.CLAUDE_PLUGIN_ROOT=j;if(!process.env.BEACON_MIGRATIONS_DIR)process.env.BEACON_MIGRATIONS_DIR=B(j,"drizzle");function $(z){if(!P)return B(j,z);return B(j,"dist",z.replace(/\.ts$/,".js"))}var q=process.argv[2];if(q==="mcp")await import($("bin/mcp.ts"));else if(q==="hook")await import($("bin/hook.ts"));else if(q==="guard")await import($("bin/guard.ts"));else if(q==="plan")await import($("bin/plan.ts"));else if(q==="prompt")await import($("bin/prompt.ts"));else if(q==="stop-hook")await import($("bin/stop-hook.ts"));else if(q==="stop")m();else if(q==="remove")await import($("bin/remove.ts"));else if(q==="setup")await x(O()||y);else if(q==="ensure")await e();else if(q==="init-persist")await s(process.argv[3]);else if(q==="doctor")await import($("bin/doctor.ts"));else if(q==="uninstall")await import($("bin/uninstall.ts"));else if(q==="update")await Zz(process.argv.includes("--force")||process.argv.includes("-f"));else if(q==="telemetry")await Xz(process.argv[3]);else if(q==="version"||q==="--version"||q==="-v")console.log(S());else await zz();async function x(z,X=!1){let{installInitSkill:Z,installRefreshSkill:J,installCodexRepoSkills:K,ensureMcp:Q,ensureWorkflowDoc:G}=await import($("lib/assets.ts")),{selfHealGlobal:M,isPluginManaged:I}=await import($("lib/global-install.ts")),{codexDetected:N}=await import($("lib/codex-install.ts")),Y=await M();if(I())return{initSkill:"",refreshSkill:"",mcp:{path:"",added:!1,updated:!1},codexSkills:[],heal:Y};let W=Z(z),H=J(z);G(z);let V=Q(z),F=N()?K(z):[];if(X){if(V.added||V.updated)console.log(`[beacon] ${V.added?"registered":"updated"} Beacon MCP in ${V.path} \u2014 restart your agent CLI`+(V.updated?" to apply the longer plan-review timeout.":" to use @beacon mentions."))}else{console.log(`
4
- \u25C9 Beacon setup \xB7 ${z}`),console.log(` \u2713 skill: ${W}`),console.log(` \u2713 skill: ${H}`);for(let v of F)console.log(` \u2713 skill: ${v}`);console.log(` ${V.added?"\u2713 added ":"\xB7 kept "} Beacon MCP in ${V.path}`),console.log(` \u2192 in this repo, run /beacon-init in your agent (Claude Code or Codex) to map the repo.
5
- `)}return{initSkill:W,refreshSkill:H,mcp:V,codexSkills:F,heal:Y}}async function s(z){let X=O()||y,{idForPath:Z,isRegistrableWorkspacePath:J,BEACON_WS_PATH_HEADER:K}=await import($("lib/workspaces.ts"));if(!J(X))console.error(`[beacon] refusing to init ${X} \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 Q="";try{Q=f(z??0,"utf8").trim()}catch(Y){console.error(`[beacon] could not read the init analysis ${z?`from ${z}`:"from stdin"}: ${Y instanceof Error?Y.message:Y}`),process.exit(1)}if(!Q)console.error("[beacon] empty init analysis \u2014 pass the JSON as a file argument (`beacon init-persist analysis.json`) or on stdin."),process.exit(1);await x(X,!0);let G=await D(),M=Z(X),I;try{I=await fetch(`http://localhost:${G}/api/init`,{method:"POST",headers:{"content-type":"application/json","x-beacon-workspace":M,[K]:X},body:Q})}catch(Y){console.error(`[beacon] could not reach the Beacon daemon on port ${G}: ${Y instanceof Error?Y.message:Y}`),process.exit(1)}let N=await I.text();if(!I.ok)console.error(`[beacon] init failed (HTTP ${I.status}): ${N}`),process.exit(1);console.log(`[beacon] mapped ${X} into Beacon: ${N}`),console.log(`[beacon] open the panel \u2192 http://localhost:${G}/map`)}function O(){try{return C("git rev-parse --show-toplevel",{cwd:y,stdio:["ignore","pipe","ignore"]}).toString().trim()}catch{return""}}function h(z){try{return process.kill(z,0),!0}catch{return!1}}function E(z){try{return JSON.parse(f(z,"utf8"))}catch{return null}}async function b(z){try{return(await fetch(z)).ok}catch{return!1}}async function i(z,X=60){for(let Z=0;Z<X;Z++){if(await b(z))return!0;await new Promise((J)=>setTimeout(J,500))}return!1}function o(z){d(A,{recursive:!0});let X=p(B(A,"server.log"),"a"),Z={...process.env,PORT:z,BEACON_NO_OPEN:"1",BEACON_MIGRATIONS_DIR:B(j,"drizzle")};delete Z.BEACON_REPO,delete Z.BEACON_DATA_DIR,delete Z.DATABASE_URL;let K=c("bun",P?["run","start"]:["run","dev"],{cwd:j,env:Z,detached:!0,stdio:["ignore",X,X]});K.unref();let Q={pid:K.pid??0,port:z};return l(R,JSON.stringify(Q)),Q}async function D(){let z=E(R);if(z&&h(z.pid)&&await b(`http://localhost:${z.port}/api/workspace`))return z.port;let{findAvailablePort:X}=await import($("lib/daemon-port.ts")),Z=String(await X(Number(T)));console.log(Z===T?"[beacon] starting the Beacon server\u2026":`[beacon] port ${T} is busy \u2014 starting the Beacon server on port ${Z}\u2026`);let{port:J}=o(Z);if(!await i(`http://localhost:${J}/api/workspace`))console.log("[beacon] (server is taking a while \u2014 it may still be compiling)");return J}function r(z){if(process.env.BEACON_NO_OPEN)return;let X=_()==="darwin"?"open":_()==="win32"?"start":"xdg-open";try{C(`${X} "${z}"`,{stdio:"ignore"})}catch{}}async function e(){let z=O()||y,{registerWorkspaceExplicit:X,idForPath:Z,ensureWorkspaceDb:J,isRegistrableWorkspacePath:K}=await import($("lib/workspaces.ts"));if(!K(z))return;let Q=Z(z);await J(Q),X(z);let G=await D();console.log(`[beacon] ready \u2192 http://localhost:${G}/map?ws=${Q}`)}async function zz(){let z=O()||y,{registerWorkspaceExplicit:X,idForPath:Z,dataDirFor:J,ensureWorkspaceDb:K,isRegistrableWorkspacePath:Q}=await import($("lib/workspaces.ts"));if(!Q(z))console.error(`[beacon] refusing to open Beacon in ${z} \u2014 that's your home directory, not a project.
7
- `+" cd into a repo (or run `git init` there) and try again."),process.exit(1);let G=Z(z),M=J(G),I=!k(B(M,"db.sqlite"));if(I)console.log(`[beacon] first run for ${z} \u2014 creating database\u2026`);let N=await K(G);if(!N.ok)console.error(`[beacon] failed to provision database: ${N.error}`);if(I)console.log("[beacon] tip: already have code here? run `/beacon-init` in your agent (Claude Code or Codex) to map the project.");let{heal:Y}=await x(z,!0),W=[];if(Y.skillsAdded.length)W.push(`skills ${Y.skillsAdded.join(", ")}`);if(Y.hooksAdded)W.push(`${Y.hooksAdded} Claude Code hook${Y.hooksAdded===1?"":"s"}`);if(Y.claudeMdBlockTouched)W.push("global CLAUDE.md block");if(W.length)console.log(`[beacon] wired into ~/.claude/: ${W.join(" + ")}.`);let H=Y.codex;if(H){let U=[];if(H.skillsAdded.length)U.push(`skills ${H.skillsAdded.join(", ")}`);if(H.hooksAdded)U.push(`${H.hooksAdded} Codex hook${H.hooksAdded===1?"":"s"}`);if(H.agentsMdBlockTouched)U.push("global AGENTS.md block");if(H.mcp.added)U.push("MCP entry in config.toml");if(U.length)console.log(`[beacon] wired into ~/.codex/: ${U.join(" + ")}.`);if(H.mcp.error)console.log(`[beacon] codex MCP not wired: ${H.mcp.error}`)}try{let U=await import($("lib/telemetry.ts"));if(!U.telemetryStatus().machineId){let g=U.telemetryStatus().enabled;console.log(`[beacon] telemetry: Beacon sends an anonymous heartbeat (random machine id, version, OS,
3
+ import{execSync as F,spawn as c}from"child_process";import{existsSync as f,mkdirSync as d,openSync as p,readFileSync as h,writeFileSync as t}from"fs";import{homedir as l,platform as C}from"os";import{basename as a,dirname as v,join as V}from"path";import{fileURLToPath as n}from"url";var T=v(n(import.meta.url)),E=a(v(T))==="dist",j=E?v(v(T)):v(T),O=process.cwd(),R=process.env.BEACON_HOME||V(l(),".beacon"),x=V(R,"server.json"),A=process.env.PORT||"4319",s=/[\\/]\.claude[\\/]plugins[\\/]/.test(T);if(!process.env.CLAUDE_PLUGIN_ROOT&&s&&f(V(j,".claude-plugin","plugin.json")))process.env.CLAUDE_PLUGIN_ROOT=j;if(!process.env.BEACON_MIGRATIONS_DIR)process.env.BEACON_MIGRATIONS_DIR=V(j,"drizzle");function $(z){if(!E)return V(j,z);return V(j,"dist",z.replace(/\.ts$/,".js"))}var q=process.argv[2];if(q==="mcp")await import($("bin/mcp.ts"));else if(q==="hook")await import($("bin/hook.ts"));else if(q==="guard")await import($("bin/guard.ts"));else if(q==="plan")await import($("bin/plan.ts"));else if(q==="prompt")await import($("bin/prompt.ts"));else if(q==="stop-hook")await import($("bin/stop-hook.ts"));else if(q==="stop")u();else if(q==="remove")await import($("bin/remove.ts"));else if(q==="setup")await P(_()||O);else if(q==="ensure")await zz();else if(q==="init-persist")await i(process.argv[3]);else if(q==="doctor")await import($("bin/doctor.ts"));else if(q==="uninstall")await import($("bin/uninstall.ts"));else if(q==="update")await $z(process.argv.includes("--force")||process.argv.includes("-f"));else if(q==="telemetry")await Zz(process.argv[3]);else if(q==="version"||q==="--version"||q==="-v")console.log(S());else await Xz();async function P(z,X=!1){let{installInitSkill:Z,installRefreshSkill:J,installCodexRepoSkills:K,ensureMcp:Y,ensureWorkflowDoc:G}=await import($("lib/assets.ts")),{selfHealGlobal:M,isPluginManaged:B}=await import($("lib/global-install.ts")),{codexDetected:N}=await import($("lib/codex-install.ts")),Q=await M();if(B())return{initSkill:"",refreshSkill:"",mcp:{path:"",added:!1,updated:!1},codexSkills:[],heal:Q};let{isRegistrableWorkspacePath:W}=await import($("lib/workspaces.ts"));if(!W(z))return{initSkill:"",refreshSkill:"",mcp:{path:"",added:!1,updated:!1},codexSkills:[],heal:Q};let H=Z(z),w=J(z);G(z);let I=Y(z),L=N()?K(z):[];if(X){if(I.added||I.updated)console.log(`[beacon] ${I.added?"registered":"updated"} Beacon MCP in ${I.path} \u2014 restart your agent CLI`+(I.updated?" to apply the longer plan-review timeout.":" to use @beacon mentions."))}else{console.log(`
4
+ \u25C9 Beacon setup \xB7 ${z}`),console.log(` \u2713 skill: ${H}`),console.log(` \u2713 skill: ${w}`);for(let y of L)console.log(` \u2713 skill: ${y}`);console.log(` ${I.added?"\u2713 added ":"\xB7 kept "} Beacon MCP in ${I.path}`),console.log(` \u2192 in this repo, run /beacon-init in your agent (Claude Code or Codex) to map the repo.
5
+ `)}return{initSkill:H,refreshSkill:w,mcp:I,codexSkills:L,heal:Q}}async function i(z){let X=_()||O,{idForPath:Z,isRegistrableWorkspacePath:J,BEACON_WS_PATH_HEADER:K}=await import($("lib/workspaces.ts"));if(!J(X))console.error(`[beacon] refusing to init ${X} \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 Y="";try{Y=h(z??0,"utf8").trim()}catch(Q){console.error(`[beacon] could not read the init analysis ${z?`from ${z}`:"from stdin"}: ${Q instanceof Error?Q.message:Q}`),process.exit(1)}if(!Y)console.error("[beacon] empty init analysis \u2014 pass the JSON as a file argument (`beacon init-persist analysis.json`) or on stdin."),process.exit(1);await P(X,!0);let G=await k(),M=Z(X),B;try{B=await fetch(`http://localhost:${G}/api/init`,{method:"POST",headers:{"content-type":"application/json","x-beacon-workspace":M,[K]:X},body:Y})}catch(Q){console.error(`[beacon] could not reach the Beacon daemon on port ${G}: ${Q instanceof Error?Q.message:Q}`),process.exit(1)}let N=await B.text();if(!B.ok)console.error(`[beacon] init failed (HTTP ${B.status}): ${N}`),process.exit(1);console.log(`[beacon] mapped ${X} into Beacon: ${N}`),console.log(`[beacon] open the panel \u2192 http://localhost:${G}/map`)}function _(){try{return F("git rev-parse --show-toplevel",{cwd:O,stdio:["ignore","pipe","ignore"]}).toString().trim()}catch{return""}}function b(z){try{return process.kill(z,0),!0}catch{return!1}}function D(z){try{return JSON.parse(h(z,"utf8"))}catch{return null}}async function m(z){try{return(await fetch(z)).ok}catch{return!1}}async function o(z,X=60){for(let Z=0;Z<X;Z++){if(await m(z))return!0;await new Promise((J)=>setTimeout(J,500))}return!1}function r(z){d(R,{recursive:!0});let X=p(V(R,"server.log"),"a"),Z={...process.env,PORT:z,BEACON_NO_OPEN:"1",BEACON_MIGRATIONS_DIR:V(j,"drizzle")};delete Z.BEACON_REPO,delete Z.BEACON_DATA_DIR,delete Z.DATABASE_URL;let K=c("bun",E?["run","start"]:["run","dev"],{cwd:j,env:Z,detached:!0,stdio:["ignore",X,X]});K.unref();let Y={pid:K.pid??0,port:z};return t(x,JSON.stringify(Y)),Y}async function k(){let z=D(x);if(z&&b(z.pid)&&await m(`http://localhost:${z.port}/api/workspace`))return z.port;let{findAvailablePort:X}=await import($("lib/daemon-port.ts")),Z=String(await X(Number(A)));console.log(Z===A?"[beacon] starting the Beacon server\u2026":`[beacon] port ${A} is busy \u2014 starting the Beacon server on port ${Z}\u2026`);let{port:J}=r(Z);if(!await o(`http://localhost:${J}/api/workspace`))console.log("[beacon] (server is taking a while \u2014 it may still be compiling)");return J}function e(z){if(process.env.BEACON_NO_OPEN)return;let X=C()==="darwin"?"open":C()==="win32"?"start":"xdg-open";try{F(`${X} "${z}"`,{stdio:"ignore"})}catch{}}async function zz(){let z=_()||O,{registerWorkspaceExplicit:X,idForPath:Z,ensureWorkspaceDb:J,isRegistrableWorkspacePath:K}=await import($("lib/workspaces.ts"));if(!K(z))return;let Y=Z(z);await J(Y),X(z);let G=await k();console.log(`[beacon] ready \u2192 http://localhost:${G}/map?ws=${Y}`)}async function Xz(){let z=_()||O,{registerWorkspaceExplicit:X,idForPath:Z,dataDirFor:J,ensureWorkspaceDb:K,isRegistrableWorkspacePath:Y}=await import($("lib/workspaces.ts"));if(!Y(z))console.error(`[beacon] refusing to open Beacon in ${z} \u2014 that's your home directory, not a project.
7
+ `+" cd into a repo (or run `git init` there) and try again."),process.exit(1);let G=Z(z),M=J(G),B=!f(V(M,"db.sqlite"));if(B)console.log(`[beacon] first run for ${z} \u2014 creating database\u2026`);let N=await K(G);if(!N.ok)console.error(`[beacon] failed to provision database: ${N.error}`);if(B)console.log("[beacon] tip: already have code here? run `/beacon-init` in your agent (Claude Code or Codex) to map the project.");let{heal:Q}=await P(z,!0),W=[];if(Q.skillsAdded.length)W.push(`skills ${Q.skillsAdded.join(", ")}`);if(Q.hooksAdded)W.push(`${Q.hooksAdded} Claude Code hook${Q.hooksAdded===1?"":"s"}`);if(Q.claudeMdBlockTouched)W.push("global CLAUDE.md block");if(W.length)console.log(`[beacon] wired into ~/.claude/: ${W.join(" + ")}.`);let H=Q.codex;if(H){let U=[];if(H.skillsAdded.length)U.push(`skills ${H.skillsAdded.join(", ")}`);if(H.hooksAdded)U.push(`${H.hooksAdded} Codex hook${H.hooksAdded===1?"":"s"}`);if(H.agentsMdBlockTouched)U.push("global AGENTS.md block");if(H.mcp.added)U.push("MCP entry in config.toml");if(U.length)console.log(`[beacon] wired into ~/.codex/: ${U.join(" + ")}.`);if(H.mcp.error)console.log(`[beacon] codex MCP not wired: ${H.mcp.error}`)}try{let U=await import($("lib/telemetry.ts"));if(!U.telemetryStatus().machineId){let g=U.telemetryStatus().enabled;console.log(`[beacon] telemetry: Beacon sends an anonymous heartbeat (random machine id, version, OS,
8
8
  `+` architecture \u2014 never repo names, paths, or code) at most every 12h to count
9
9
  `+` active installs. Opt out: \`beacon telemetry off\`, BEACON_TELEMETRY_DISABLED=1,
10
- or DO_NOT_TRACK=1. Details: beacon telemetry status.${g?"":" (currently disabled by your env)"}`),U.ensureTelemetryId()}}catch{}X(z);let F=`http://localhost:${await D()}`,v=`/map?ws=${G}`,u=`${F}/api/workspace/activate?id=${G}&redirect=${encodeURIComponent(v)}`;if(console.log(`
10
+ or DO_NOT_TRACK=1. Details: beacon telemetry status.${g?"":" (currently disabled by your env)"}`),U.ensureTelemetryId()}}catch{}X(z);let I=`http://localhost:${await k()}`,L=`/map?ws=${G}`,y=`${I}/api/workspace/activate?id=${G}&redirect=${encodeURIComponent(L)}`;if(console.log(`
11
11
  \u25C9 Beacon
12
12
  repo: ${z}
13
13
  data: ${M}
14
- url: ${F}
15
- `),console.log(" (the server keeps running in the background \u2014 `beacon stop` to stop it)\n"),await fetch(`${F}/api/tab/presence`,{headers:{"x-beacon-workspace":G}}).then((U)=>U.json()).then((U)=>!!U?.live).catch(()=>!1))await fetch(`${F}/api/tab/nav`,{method:"POST",headers:{"content-type":"application/json","x-beacon-workspace":G},body:JSON.stringify({path:v})}).catch(()=>{}),console.log(` \u21BB reusing your open Beacon tab \u2014 switch to your browser.
16
- `);else r(u)}function S(){return E(B(j,"package.json"))?.version??"0.0.0"}async function Xz(z){let X=await import($("lib/telemetry.ts"));if(z==="on"||z==="off"){X.setTelemetryEnabled(z==="on"),console.log(`[beacon] telemetry ${z==="on"?"enabled":"disabled"}.`);return}if(z&&z!=="status")console.error("usage: beacon telemetry [on|off|status]"),process.exit(1);let Z=X.telemetryStatus(),J=Z.reason==="env:BEACON_TELEMETRY_DISABLED"?" (BEACON_TELEMETRY_DISABLED=1)":Z.reason==="env:DO_NOT_TRACK"?" (DO_NOT_TRACK)":Z.reason==="preference"?" (beacon telemetry off)":"";if(console.log(`
14
+ url: ${I}
15
+ `),console.log(" (the server keeps running in the background \u2014 `beacon stop` to stop it)\n"),await fetch(`${I}/api/tab/presence`,{headers:{"x-beacon-workspace":G}}).then((U)=>U.json()).then((U)=>!!U?.live).catch(()=>!1))await fetch(`${I}/api/tab/nav`,{method:"POST",headers:{"content-type":"application/json","x-beacon-workspace":G},body:JSON.stringify({path:L})}).catch(()=>{}),console.log(` \u21BB reusing your open Beacon tab \u2014 switch to your browser.
16
+ `);else e(y)}function S(){return D(V(j,"package.json"))?.version??"0.0.0"}async function Zz(z){let X=await import($("lib/telemetry.ts"));if(z==="on"||z==="off"){X.setTelemetryEnabled(z==="on"),console.log(`[beacon] telemetry ${z==="on"?"enabled":"disabled"}.`);return}if(z&&z!=="status")console.error("usage: beacon telemetry [on|off|status]"),process.exit(1);let Z=X.telemetryStatus(),J=Z.reason==="env:BEACON_TELEMETRY_DISABLED"?" (BEACON_TELEMETRY_DISABLED=1)":Z.reason==="env:DO_NOT_TRACK"?" (DO_NOT_TRACK)":Z.reason==="preference"?" (beacon telemetry off)":"";if(console.log(`
17
17
  \u25C9 Beacon telemetry: ${Z.enabled?"enabled":"disabled"}${J}`),console.log(` machine id: ${Z.machineId??"(not generated yet \u2014 created on first `beacon` run)"}`),Z.machineId)console.log(` payload: ${JSON.stringify(X.heartbeatPayload(S()))}`);console.log(` sent at most every 12h while the daemon runs \u2014 never repo names, paths, or code.
18
- `+" toggle: `beacon telemetry on|off` \xB7 env: BEACON_TELEMETRY_DISABLED=1 or DO_NOT_TRACK=1\n")}async function Zz(z){let X=S(),{INSTALL_COMMAND:Z,NPM_LATEST_URL:J}=await import($("lib/release.ts"));if(_()==="win32"){console.log(`[beacon] current version v${X}.`),console.log(`[beacon] on Windows, update with your package manager:
19
- npm i -g trybeacon@latest`);return}let K=null;try{let Q=await fetch(J);if(Q.ok)K=(await Q.json()).version??null}catch{}if(K&&!z){let{isNewerVersion:Q}=await import($("lib/semver.ts"));if(!Q(K,X)){console.log(`[beacon] already on the latest version (v${X}).`),console.log(" run `beacon update --force` to reinstall anyway.");return}}console.log(K?`[beacon] updating Beacon v${X} \u2192 v${K}\u2026`:`[beacon] reinstalling Beacon (current v${X})\u2026`);try{C(Z,{stdio:"inherit"})}catch{console.error(`[beacon] update failed. Run it manually:
20
- ${Z}`),process.exitCode=1;return}m(),console.log("[beacon] updated. Run `beacon` to relaunch on the new version.")}function m(){let z=E(R);if(z&&h(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.")}
18
+ `+" toggle: `beacon telemetry on|off` \xB7 env: BEACON_TELEMETRY_DISABLED=1 or DO_NOT_TRACK=1\n")}async function $z(z){let X=S(),{INSTALL_COMMAND:Z,NPM_LATEST_URL:J}=await import($("lib/release.ts"));if(C()==="win32"){console.log(`[beacon] current version v${X}.`),console.log(`[beacon] on Windows, update with your package manager:
19
+ npm i -g trybeacon@latest`);return}let K=null;try{let Y=await fetch(J);if(Y.ok)K=(await Y.json()).version??null}catch{}if(K&&!z){let{isNewerVersion:Y}=await import($("lib/semver.ts"));if(!Y(K,X)){console.log(`[beacon] already on the latest version (v${X}).`),console.log(" run `beacon update --force` to reinstall anyway.");return}}console.log(K?`[beacon] updating Beacon v${X} \u2192 v${K}\u2026`:`[beacon] reinstalling Beacon (current v${X})\u2026`);try{F(Z,{stdio:"inherit"})}catch{console.error(`[beacon] update failed. Run it manually:
20
+ ${Z}`),process.exitCode=1;return}try{F("beacon setup",{stdio:"inherit"})}catch{}await Qz(),u(),console.log("[beacon] updated. Run `beacon` to relaunch on the new version.")}async function Qz(){let{installedBeaconPlugin:z}=await import($("lib/global-install.ts")),X=z();if(!X)return;try{F("command -v claude",{stdio:"ignore"})}catch{console.log(`[beacon] Beacon plugin detected \u2014 update it with:
21
+ claude plugin update ${X.key}`);return}console.log(`[beacon] updating the Beacon Claude Code plugin (${X.key})\u2026`);try{if(X.marketplace)F(`claude plugin marketplace update ${X.marketplace}`,{stdio:"inherit"});F(`claude plugin update ${X.key}`,{stdio:"inherit"}),console.log("[beacon] plugin updated \u2014 restart your agent to apply.")}catch{console.log(`[beacon] couldn't auto-update the plugin. Run:
22
+ claude plugin update ${X.key}`)}}function u(){let z=D(x);if(z&&b(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.")}