trybeacon 0.1.71 → 0.1.73

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 (392) 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 +25 -21
  4. package/.next/build-manifest.json +3 -3
  5. package/.next/prerender-manifest.json +3 -3
  6. package/.next/routes-manifest.json +30 -6
  7. package/.next/server/app/_global-error/page.js +3 -3
  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/changes/comment/claim/route.js +1 -0
  33. package/.next/server/app/api/changes/comment/claim/route.js.nft.json +1 -0
  34. package/.next/server/app/api/changes/comment/claim/route_client-reference-manifest.js +1 -0
  35. package/.next/server/app/api/changes/comment/route.js +1 -0
  36. package/.next/server/app/api/changes/comment/route.js.nft.json +1 -0
  37. package/.next/server/app/api/changes/comment/route_client-reference-manifest.js +1 -0
  38. package/.next/server/app/api/changes/quality/route.js +1 -0
  39. package/.next/server/app/api/changes/quality/route.js.nft.json +1 -0
  40. package/.next/server/app/api/changes/quality/route_client-reference-manifest.js +1 -0
  41. package/.next/server/app/api/changes/route.js +1 -0
  42. package/.next/server/app/api/{flags → changes}/route.js.nft.json +1 -1
  43. package/.next/server/app/api/changes/route_client-reference-manifest.js +1 -0
  44. package/.next/server/app/api/changes/viewed/route.js +1 -0
  45. package/.next/server/app/api/changes/viewed/route.js.nft.json +1 -0
  46. package/.next/server/app/api/changes/viewed/route_client-reference-manifest.js +1 -0
  47. package/.next/server/app/api/code-graph/position/route.js +1 -1
  48. package/.next/server/app/api/code-graph/route.js +1 -1
  49. package/.next/server/app/api/context/feature/route.js +1 -1
  50. package/.next/server/app/api/context/file/route.js +1 -1
  51. package/.next/server/app/api/context/route.js +1 -9
  52. package/.next/server/app/api/context/route.js.nft.json +1 -1
  53. package/.next/server/app/api/db/arrange/route.js +1 -1
  54. package/.next/server/app/api/db/backfill-access/route.js +1 -1
  55. package/.next/server/app/api/db/position/route.js +1 -1
  56. package/.next/server/app/api/db/position/route.js.nft.json +1 -1
  57. package/.next/server/app/api/db/prune-planned/route.js +1 -1
  58. package/.next/server/app/api/db/reconcile-endpoints/route.js +1 -1
  59. package/.next/server/app/api/db/relations/[id]/route.js +1 -1
  60. package/.next/server/app/api/db/tables/[id]/route.js +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/edges/[id]/route.js +1 -1
  67. package/.next/server/app/api/edges/route.js +1 -1
  68. package/.next/server/app/api/edges/route.js.nft.json +1 -1
  69. package/.next/server/app/api/endpoints/[id]/route.js +1 -1
  70. package/.next/server/app/api/entities/route.js +1 -1
  71. package/.next/server/app/api/ingest/route.js +1 -9
  72. package/.next/server/app/api/ingest/route.js.nft.json +1 -1
  73. package/.next/server/app/api/init/route.js +1 -9
  74. package/.next/server/app/api/init/route.js.nft.json +1 -1
  75. package/.next/server/app/api/lesson/close/route.js +1 -1
  76. package/.next/server/app/api/lesson/presence/route.js +1 -1
  77. package/.next/server/app/api/lesson/questions/route.js +1 -1
  78. package/.next/server/app/api/lesson/route.js +1 -1
  79. package/.next/server/app/api/lesson/save/route.js +1 -1
  80. package/.next/server/app/api/lesson/verdict/route.js +1 -1
  81. package/.next/server/app/api/map/describe/route.js +1 -9
  82. package/.next/server/app/api/map/describe/route.js.nft.json +1 -1
  83. package/.next/server/app/api/map/files/route.js +1 -1
  84. package/.next/server/app/api/map/files/route.js.nft.json +1 -1
  85. package/.next/server/app/api/map/finish/route.js +1 -1
  86. package/.next/server/app/api/map/finish/route.js.nft.json +1 -1
  87. package/.next/server/app/api/map/route.js +1 -1
  88. package/.next/server/app/api/map/route.js.nft.json +1 -1
  89. package/.next/server/app/api/map/start/route.js +1 -1
  90. package/.next/server/app/api/map/start/route.js.nft.json +1 -1
  91. package/.next/server/app/api/map/touch-active/route.js +1 -1
  92. package/.next/server/app/api/map/touch-active/route.js.nft.json +1 -1
  93. package/.next/server/app/api/mention-search/route.js +1 -1
  94. package/.next/server/app/api/nodes/[id]/position/route.js +1 -1
  95. package/.next/server/app/api/nodes/[id]/position/route.js.nft.json +1 -1
  96. package/.next/server/app/api/nodes/[id]/route.js +1 -1
  97. package/.next/server/app/api/nodes/[id]/route.js.nft.json +1 -1
  98. package/.next/server/app/api/nodes/positions/route.js +1 -1
  99. package/.next/server/app/api/nodes/positions/route.js.nft.json +1 -1
  100. package/.next/server/app/api/nodes/route.js +1 -1
  101. package/.next/server/app/api/nodes/route.js.nft.json +1 -1
  102. package/.next/server/app/api/nodes/subtasks/route.js +1 -1
  103. package/.next/server/app/api/nodes/subtasks/route.js.nft.json +1 -1
  104. package/.next/server/app/api/notes/[id]/route.js +1 -1
  105. package/.next/server/app/api/notes/route.js +1 -1
  106. package/.next/server/app/api/open/route.js +1 -1
  107. package/.next/server/app/api/plan/annotations/route.js +3 -3
  108. package/.next/server/app/api/plan/approve/route.js +1 -9
  109. package/.next/server/app/api/plan/approve/route.js.nft.json +1 -1
  110. package/.next/server/app/api/plan/history/route.js +1 -1
  111. package/.next/server/app/api/plan/markdown/route.js +1 -1
  112. package/.next/server/app/api/plan/markdown/route.js.nft.json +1 -1
  113. package/.next/server/app/api/plan/presence/route.js +1 -1
  114. package/.next/server/app/api/plan/route.js +1 -1
  115. package/.next/server/app/api/plan/route.js.nft.json +1 -1
  116. package/.next/server/app/api/plan/verdict/route.js +1 -1
  117. package/.next/server/app/api/plan/verdict/route.js.nft.json +1 -1
  118. package/.next/server/app/api/preferences/route.js +1 -1
  119. package/.next/server/app/api/project-meta/route.js +1 -1
  120. package/.next/server/app/api/reset/route.js +1 -1
  121. package/.next/server/app/api/scope-guard/check/route.js +1 -1
  122. package/.next/server/app/api/scope-guard/check/route.js.nft.json +1 -1
  123. package/.next/server/app/api/share/create/route.js +1 -1
  124. package/.next/server/app/api/share/create/route.js.nft.json +1 -1
  125. package/.next/server/app/api/share/route.js +1 -1
  126. package/.next/server/app/api/stream/route.js +2 -2
  127. package/.next/server/app/api/tab/nav/route.js +1 -1
  128. package/.next/server/app/api/tab/presence/route.js +1 -1
  129. package/.next/server/app/api/telemetry/route.js +1 -1
  130. package/.next/server/app/api/telemetry/stats/route.js +1 -1
  131. package/.next/server/app/api/version/route.js +1 -1
  132. package/.next/server/app/api/workspace/activate/route.js +1 -1
  133. package/.next/server/app/api/workspace/route.js +1 -1
  134. package/.next/server/app/apple-icon.png/route.js +1 -1
  135. package/.next/server/app/docs/page.js +2 -2
  136. package/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  137. package/.next/server/app/docs.html +1 -1
  138. package/.next/server/app/docs.rsc +11 -11
  139. package/.next/server/app/docs.segments/_full.segment.rsc +11 -11
  140. package/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  141. package/.next/server/app/docs.segments/_index.segment.rsc +11 -11
  142. package/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
  143. package/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
  144. package/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  145. package/.next/server/app/help/page.js +2 -2
  146. package/.next/server/app/help/page_client-reference-manifest.js +1 -1
  147. package/.next/server/app/help.html +1 -1
  148. package/.next/server/app/help.rsc +11 -11
  149. package/.next/server/app/help.segments/_full.segment.rsc +11 -11
  150. package/.next/server/app/help.segments/_head.segment.rsc +1 -1
  151. package/.next/server/app/help.segments/_index.segment.rsc +11 -11
  152. package/.next/server/app/help.segments/_tree.segment.rsc +2 -2
  153. package/.next/server/app/help.segments/help/__PAGE__.segment.rsc +1 -1
  154. package/.next/server/app/help.segments/help.segment.rsc +1 -1
  155. package/.next/server/app/icon.svg/route.js +1 -1
  156. package/.next/server/app/index.html +1 -1
  157. package/.next/server/app/index.rsc +11 -11
  158. package/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  159. package/.next/server/app/index.segments/_full.segment.rsc +11 -11
  160. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  161. package/.next/server/app/index.segments/_index.segment.rsc +11 -11
  162. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  163. package/.next/server/app/learn/page.js +4 -4
  164. package/.next/server/app/learn/page.js.nft.json +1 -1
  165. package/.next/server/app/learn/page_client-reference-manifest.js +1 -1
  166. package/.next/server/app/map/page.js +2 -2
  167. package/.next/server/app/map/page.js.nft.json +1 -1
  168. package/.next/server/app/map/page_client-reference-manifest.js +1 -1
  169. package/.next/server/app/page.js +2 -2
  170. package/.next/server/app/page_client-reference-manifest.js +1 -1
  171. package/.next/server/app/plan/page.js +12 -2
  172. package/.next/server/app/plan/page.js.nft.json +1 -1
  173. package/.next/server/app/plan/page_client-reference-manifest.js +1 -1
  174. package/.next/server/app/s/[token]/page.js +2 -2
  175. package/.next/server/app/s/[token]/page.js.nft.json +1 -1
  176. package/.next/server/app/s/[token]/page_client-reference-manifest.js +1 -1
  177. package/.next/server/app/settings/page.js +2 -2
  178. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  179. package/.next/server/app-paths-manifest.json +25 -21
  180. package/.next/server/chunks/1130.js +1 -1
  181. package/.next/server/chunks/2025.js +1 -1
  182. package/.next/server/chunks/230.js +1 -0
  183. package/.next/server/chunks/2693.js +5 -0
  184. package/.next/server/chunks/4307.js +1 -1
  185. package/.next/server/chunks/6469.js +10 -0
  186. package/.next/server/chunks/8190.js +1 -0
  187. package/.next/server/chunks/8227.js +1 -0
  188. package/.next/server/chunks/8674.js +7 -0
  189. package/.next/server/middleware-build-manifest.js +1 -1
  190. package/.next/server/pages/404.html +1 -1
  191. package/.next/server/pages/500.html +1 -1
  192. package/.next/server/server-reference-manifest.js +1 -1
  193. package/.next/server/server-reference-manifest.json +1 -1
  194. package/.next/static/chunks/4853-0082a1e1b820a293.js +1 -0
  195. package/.next/static/chunks/5909-387573cddda35a48.js +1 -0
  196. package/.next/static/chunks/654-8e68a43e4c589e9c.js +1 -0
  197. package/.next/static/chunks/app/_global-error/page-5f4c3e6e9cc8e6c9.js +1 -0
  198. package/.next/static/chunks/app/api/board-annotations/[id]/route-5f4c3e6e9cc8e6c9.js +1 -0
  199. package/.next/static/chunks/app/api/board-annotations/route-5f4c3e6e9cc8e6c9.js +1 -0
  200. package/.next/static/chunks/app/api/board-layout/route-5f4c3e6e9cc8e6c9.js +1 -0
  201. package/.next/static/chunks/app/api/bug-flags/[id]/route-5f4c3e6e9cc8e6c9.js +1 -0
  202. package/.next/static/chunks/app/api/bug-flags/route-5f4c3e6e9cc8e6c9.js +1 -0
  203. package/.next/static/chunks/app/api/changes/comment/claim/route-5f4c3e6e9cc8e6c9.js +1 -0
  204. package/.next/static/chunks/app/api/changes/comment/route-5f4c3e6e9cc8e6c9.js +1 -0
  205. package/.next/static/chunks/app/api/changes/quality/route-5f4c3e6e9cc8e6c9.js +1 -0
  206. package/.next/static/chunks/app/api/changes/route-5f4c3e6e9cc8e6c9.js +1 -0
  207. package/.next/static/chunks/app/api/changes/viewed/route-5f4c3e6e9cc8e6c9.js +1 -0
  208. package/.next/static/chunks/app/api/code-graph/position/route-5f4c3e6e9cc8e6c9.js +1 -0
  209. package/.next/static/chunks/app/api/code-graph/route-5f4c3e6e9cc8e6c9.js +1 -0
  210. package/.next/static/chunks/app/api/context/feature/route-5f4c3e6e9cc8e6c9.js +1 -0
  211. package/.next/static/chunks/app/api/context/file/route-5f4c3e6e9cc8e6c9.js +1 -0
  212. package/.next/static/chunks/app/api/context/route-5f4c3e6e9cc8e6c9.js +1 -0
  213. package/.next/static/chunks/app/api/db/arrange/route-5f4c3e6e9cc8e6c9.js +1 -0
  214. package/.next/static/chunks/app/api/db/backfill-access/route-5f4c3e6e9cc8e6c9.js +1 -0
  215. package/.next/static/chunks/app/api/db/position/route-5f4c3e6e9cc8e6c9.js +1 -0
  216. package/.next/static/chunks/app/api/db/prune-planned/route-5f4c3e6e9cc8e6c9.js +1 -0
  217. package/.next/static/chunks/app/api/db/reconcile-endpoints/route-5f4c3e6e9cc8e6c9.js +1 -0
  218. package/.next/static/chunks/app/api/db/relations/[id]/route-5f4c3e6e9cc8e6c9.js +1 -0
  219. package/.next/static/chunks/app/api/db/tables/[id]/route-5f4c3e6e9cc8e6c9.js +1 -0
  220. package/.next/static/chunks/app/api/draft/approve/route-5f4c3e6e9cc8e6c9.js +1 -0
  221. package/.next/static/chunks/app/api/draft/route-5f4c3e6e9cc8e6c9.js +1 -0
  222. package/.next/static/chunks/app/api/draft/status/route-5f4c3e6e9cc8e6c9.js +1 -0
  223. package/.next/static/chunks/app/api/edges/[id]/route-5f4c3e6e9cc8e6c9.js +1 -0
  224. package/.next/static/chunks/app/api/edges/route-5f4c3e6e9cc8e6c9.js +1 -0
  225. package/.next/static/chunks/app/api/endpoints/[id]/route-5f4c3e6e9cc8e6c9.js +1 -0
  226. package/.next/static/chunks/app/api/entities/route-5f4c3e6e9cc8e6c9.js +1 -0
  227. package/.next/static/chunks/app/api/ingest/route-5f4c3e6e9cc8e6c9.js +1 -0
  228. package/.next/static/chunks/app/api/init/route-5f4c3e6e9cc8e6c9.js +1 -0
  229. package/.next/static/chunks/app/api/lesson/close/route-5f4c3e6e9cc8e6c9.js +1 -0
  230. package/.next/static/chunks/app/api/lesson/presence/route-5f4c3e6e9cc8e6c9.js +1 -0
  231. package/.next/static/chunks/app/api/lesson/questions/route-5f4c3e6e9cc8e6c9.js +1 -0
  232. package/.next/static/chunks/app/api/lesson/route-5f4c3e6e9cc8e6c9.js +1 -0
  233. package/.next/static/chunks/app/api/lesson/save/route-5f4c3e6e9cc8e6c9.js +1 -0
  234. package/.next/static/chunks/app/api/lesson/verdict/route-5f4c3e6e9cc8e6c9.js +1 -0
  235. package/.next/static/chunks/app/api/map/describe/route-5f4c3e6e9cc8e6c9.js +1 -0
  236. package/.next/static/chunks/app/api/map/files/route-5f4c3e6e9cc8e6c9.js +1 -0
  237. package/.next/static/chunks/app/api/map/finish/route-5f4c3e6e9cc8e6c9.js +1 -0
  238. package/.next/static/chunks/app/api/map/route-5f4c3e6e9cc8e6c9.js +1 -0
  239. package/.next/static/chunks/app/api/map/start/route-5f4c3e6e9cc8e6c9.js +1 -0
  240. package/.next/static/chunks/app/api/map/touch-active/route-5f4c3e6e9cc8e6c9.js +1 -0
  241. package/.next/static/chunks/app/api/mention-search/route-5f4c3e6e9cc8e6c9.js +1 -0
  242. package/.next/static/chunks/app/api/nodes/[id]/position/route-5f4c3e6e9cc8e6c9.js +1 -0
  243. package/.next/static/chunks/app/api/nodes/[id]/route-5f4c3e6e9cc8e6c9.js +1 -0
  244. package/.next/static/chunks/app/api/nodes/positions/route-5f4c3e6e9cc8e6c9.js +1 -0
  245. package/.next/static/chunks/app/api/nodes/route-5f4c3e6e9cc8e6c9.js +1 -0
  246. package/.next/static/chunks/app/api/nodes/subtasks/route-5f4c3e6e9cc8e6c9.js +1 -0
  247. package/.next/static/chunks/app/api/notes/[id]/route-5f4c3e6e9cc8e6c9.js +1 -0
  248. package/.next/static/chunks/app/api/notes/route-5f4c3e6e9cc8e6c9.js +1 -0
  249. package/.next/static/chunks/app/api/open/route-5f4c3e6e9cc8e6c9.js +1 -0
  250. package/.next/static/chunks/app/api/plan/annotations/route-5f4c3e6e9cc8e6c9.js +1 -0
  251. package/.next/static/chunks/app/api/plan/approve/route-5f4c3e6e9cc8e6c9.js +1 -0
  252. package/.next/static/chunks/app/api/plan/history/route-5f4c3e6e9cc8e6c9.js +1 -0
  253. package/.next/static/chunks/app/api/plan/markdown/route-5f4c3e6e9cc8e6c9.js +1 -0
  254. package/.next/static/chunks/app/api/plan/presence/route-5f4c3e6e9cc8e6c9.js +1 -0
  255. package/.next/static/chunks/app/api/plan/route-5f4c3e6e9cc8e6c9.js +1 -0
  256. package/.next/static/chunks/app/api/plan/verdict/route-5f4c3e6e9cc8e6c9.js +1 -0
  257. package/.next/static/chunks/app/api/preferences/route-5f4c3e6e9cc8e6c9.js +1 -0
  258. package/.next/static/chunks/app/api/project-meta/route-5f4c3e6e9cc8e6c9.js +1 -0
  259. package/.next/static/chunks/app/api/reset/route-5f4c3e6e9cc8e6c9.js +1 -0
  260. package/.next/static/chunks/app/api/scope-guard/check/route-5f4c3e6e9cc8e6c9.js +1 -0
  261. package/.next/static/chunks/app/api/share/create/route-5f4c3e6e9cc8e6c9.js +1 -0
  262. package/.next/static/chunks/app/api/share/route-5f4c3e6e9cc8e6c9.js +1 -0
  263. package/.next/static/chunks/app/api/stream/route-5f4c3e6e9cc8e6c9.js +1 -0
  264. package/.next/static/chunks/app/api/tab/nav/route-5f4c3e6e9cc8e6c9.js +1 -0
  265. package/.next/static/chunks/app/api/tab/presence/route-5f4c3e6e9cc8e6c9.js +1 -0
  266. package/.next/static/chunks/app/api/telemetry/route-5f4c3e6e9cc8e6c9.js +1 -0
  267. package/.next/static/chunks/app/api/telemetry/stats/route-5f4c3e6e9cc8e6c9.js +1 -0
  268. package/.next/static/chunks/app/api/version/route-5f4c3e6e9cc8e6c9.js +1 -0
  269. package/.next/static/chunks/app/api/workspace/activate/route-5f4c3e6e9cc8e6c9.js +1 -0
  270. package/.next/static/chunks/app/api/workspace/route-5f4c3e6e9cc8e6c9.js +1 -0
  271. package/.next/static/chunks/app/{layout-d3b7276f116dce46.js → layout-6e934a2850efd223.js} +1 -1
  272. package/.next/static/chunks/app/learn/page-a14eaf5143e2df55.js +7 -0
  273. package/.next/static/chunks/app/map/{page-5d73cd85ed62df7a.js → page-06282017c592fb3c.js} +1 -1
  274. package/.next/static/chunks/app/plan/page-41a3990cb858c5f2.js +11 -0
  275. package/.next/static/chunks/app/s/[token]/{page-4d3ed0a6a420eb44.js → page-a4deb16beff21840.js} +1 -1
  276. package/.next/static/chunks/app/settings/page-67cab634be8bfef2.js +1 -0
  277. package/.next/static/chunks/next/dist/client/components/builtin/app-error-5f4c3e6e9cc8e6c9.js +1 -0
  278. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-5f4c3e6e9cc8e6c9.js +1 -0
  279. package/.next/static/chunks/next/dist/client/components/builtin/not-found-5f4c3e6e9cc8e6c9.js +1 -0
  280. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-5f4c3e6e9cc8e6c9.js +1 -0
  281. package/.next/static/chunks/{webpack-de4a0d9611ec2cad.js → webpack-6c27b0ed1ac1459c.js} +1 -1
  282. package/.next/static/css/95dc31edc34789a7.css +1 -0
  283. package/.next/static/css/a5d17568738ef1e9.css +1 -0
  284. package/.next/static/mB9lqGEsIvB7tTvv9GU48/_buildManifest.js +1 -0
  285. package/.next/trace +45 -43
  286. package/.next/trace-build +1 -1
  287. package/.next/types/app/api/changes/comment/claim/route.ts +351 -0
  288. package/.next/types/app/api/changes/comment/route.ts +351 -0
  289. package/.next/types/app/api/changes/quality/route.ts +351 -0
  290. package/.next/types/app/api/{flags → changes}/route.ts +3 -3
  291. package/.next/types/app/api/changes/viewed/route.ts +351 -0
  292. package/.next/types/routes.d.ts +6 -2
  293. package/.next/types/validator.ts +45 -9
  294. package/bun.lock +54 -0
  295. package/dist/bin/doctor.js +33 -32
  296. package/dist/bin/guard.js +1 -1
  297. package/dist/bin/hook.js +33 -32
  298. package/dist/bin/mcp.js +43 -42
  299. package/dist/bin/plan.js +35 -34
  300. package/dist/bin/uninstall.js +34 -33
  301. package/dist/lib/assets.js +25 -24
  302. package/dist/lib/codex-install.js +32 -31
  303. package/dist/lib/global-install.js +33 -32
  304. package/package.json +3 -1
  305. package/plugin/skills/beacon-plan/SKILL.md +5 -4
  306. package/.next/server/app/api/flags/route.js +0 -1
  307. package/.next/server/app/api/flags/route_client-reference-manifest.js +0 -1
  308. package/.next/server/chunks/3098.js +0 -1
  309. package/.next/server/chunks/3221.js +0 -5
  310. package/.next/server/chunks/6810.js +0 -1
  311. package/.next/static/GjuqgbaZr9M0AGKgnA2hT/_buildManifest.js +0 -1
  312. package/.next/static/chunks/1052-151437e30240c959.js +0 -1
  313. package/.next/static/chunks/4853-946597034e74be36.js +0 -1
  314. package/.next/static/chunks/app/_global-error/page-93569b5eb93a61e9.js +0 -1
  315. package/.next/static/chunks/app/api/board-annotations/[id]/route-93569b5eb93a61e9.js +0 -1
  316. package/.next/static/chunks/app/api/board-annotations/route-93569b5eb93a61e9.js +0 -1
  317. package/.next/static/chunks/app/api/board-layout/route-93569b5eb93a61e9.js +0 -1
  318. package/.next/static/chunks/app/api/bug-flags/[id]/route-93569b5eb93a61e9.js +0 -1
  319. package/.next/static/chunks/app/api/bug-flags/route-93569b5eb93a61e9.js +0 -1
  320. package/.next/static/chunks/app/api/code-graph/position/route-93569b5eb93a61e9.js +0 -1
  321. package/.next/static/chunks/app/api/code-graph/route-93569b5eb93a61e9.js +0 -1
  322. package/.next/static/chunks/app/api/context/feature/route-93569b5eb93a61e9.js +0 -1
  323. package/.next/static/chunks/app/api/context/file/route-93569b5eb93a61e9.js +0 -1
  324. package/.next/static/chunks/app/api/context/route-93569b5eb93a61e9.js +0 -1
  325. package/.next/static/chunks/app/api/db/arrange/route-93569b5eb93a61e9.js +0 -1
  326. package/.next/static/chunks/app/api/db/backfill-access/route-93569b5eb93a61e9.js +0 -1
  327. package/.next/static/chunks/app/api/db/position/route-93569b5eb93a61e9.js +0 -1
  328. package/.next/static/chunks/app/api/db/prune-planned/route-93569b5eb93a61e9.js +0 -1
  329. package/.next/static/chunks/app/api/db/reconcile-endpoints/route-93569b5eb93a61e9.js +0 -1
  330. package/.next/static/chunks/app/api/db/relations/[id]/route-93569b5eb93a61e9.js +0 -1
  331. package/.next/static/chunks/app/api/db/tables/[id]/route-93569b5eb93a61e9.js +0 -1
  332. package/.next/static/chunks/app/api/draft/approve/route-93569b5eb93a61e9.js +0 -1
  333. package/.next/static/chunks/app/api/draft/route-93569b5eb93a61e9.js +0 -1
  334. package/.next/static/chunks/app/api/draft/status/route-93569b5eb93a61e9.js +0 -1
  335. package/.next/static/chunks/app/api/edges/[id]/route-93569b5eb93a61e9.js +0 -1
  336. package/.next/static/chunks/app/api/edges/route-93569b5eb93a61e9.js +0 -1
  337. package/.next/static/chunks/app/api/endpoints/[id]/route-93569b5eb93a61e9.js +0 -1
  338. package/.next/static/chunks/app/api/entities/route-93569b5eb93a61e9.js +0 -1
  339. package/.next/static/chunks/app/api/flags/route-93569b5eb93a61e9.js +0 -1
  340. package/.next/static/chunks/app/api/ingest/route-93569b5eb93a61e9.js +0 -1
  341. package/.next/static/chunks/app/api/init/route-93569b5eb93a61e9.js +0 -1
  342. package/.next/static/chunks/app/api/lesson/close/route-93569b5eb93a61e9.js +0 -1
  343. package/.next/static/chunks/app/api/lesson/presence/route-93569b5eb93a61e9.js +0 -1
  344. package/.next/static/chunks/app/api/lesson/questions/route-93569b5eb93a61e9.js +0 -1
  345. package/.next/static/chunks/app/api/lesson/route-93569b5eb93a61e9.js +0 -1
  346. package/.next/static/chunks/app/api/lesson/save/route-93569b5eb93a61e9.js +0 -1
  347. package/.next/static/chunks/app/api/lesson/verdict/route-93569b5eb93a61e9.js +0 -1
  348. package/.next/static/chunks/app/api/map/describe/route-93569b5eb93a61e9.js +0 -1
  349. package/.next/static/chunks/app/api/map/files/route-93569b5eb93a61e9.js +0 -1
  350. package/.next/static/chunks/app/api/map/finish/route-93569b5eb93a61e9.js +0 -1
  351. package/.next/static/chunks/app/api/map/route-93569b5eb93a61e9.js +0 -1
  352. package/.next/static/chunks/app/api/map/start/route-93569b5eb93a61e9.js +0 -1
  353. package/.next/static/chunks/app/api/map/touch-active/route-93569b5eb93a61e9.js +0 -1
  354. package/.next/static/chunks/app/api/mention-search/route-93569b5eb93a61e9.js +0 -1
  355. package/.next/static/chunks/app/api/nodes/[id]/position/route-93569b5eb93a61e9.js +0 -1
  356. package/.next/static/chunks/app/api/nodes/[id]/route-93569b5eb93a61e9.js +0 -1
  357. package/.next/static/chunks/app/api/nodes/positions/route-93569b5eb93a61e9.js +0 -1
  358. package/.next/static/chunks/app/api/nodes/route-93569b5eb93a61e9.js +0 -1
  359. package/.next/static/chunks/app/api/nodes/subtasks/route-93569b5eb93a61e9.js +0 -1
  360. package/.next/static/chunks/app/api/notes/[id]/route-93569b5eb93a61e9.js +0 -1
  361. package/.next/static/chunks/app/api/notes/route-93569b5eb93a61e9.js +0 -1
  362. package/.next/static/chunks/app/api/open/route-93569b5eb93a61e9.js +0 -1
  363. package/.next/static/chunks/app/api/plan/annotations/route-93569b5eb93a61e9.js +0 -1
  364. package/.next/static/chunks/app/api/plan/approve/route-93569b5eb93a61e9.js +0 -1
  365. package/.next/static/chunks/app/api/plan/history/route-93569b5eb93a61e9.js +0 -1
  366. package/.next/static/chunks/app/api/plan/markdown/route-93569b5eb93a61e9.js +0 -1
  367. package/.next/static/chunks/app/api/plan/presence/route-93569b5eb93a61e9.js +0 -1
  368. package/.next/static/chunks/app/api/plan/route-93569b5eb93a61e9.js +0 -1
  369. package/.next/static/chunks/app/api/plan/verdict/route-93569b5eb93a61e9.js +0 -1
  370. package/.next/static/chunks/app/api/preferences/route-93569b5eb93a61e9.js +0 -1
  371. package/.next/static/chunks/app/api/project-meta/route-93569b5eb93a61e9.js +0 -1
  372. package/.next/static/chunks/app/api/reset/route-93569b5eb93a61e9.js +0 -1
  373. package/.next/static/chunks/app/api/scope-guard/check/route-93569b5eb93a61e9.js +0 -1
  374. package/.next/static/chunks/app/api/share/create/route-93569b5eb93a61e9.js +0 -1
  375. package/.next/static/chunks/app/api/share/route-93569b5eb93a61e9.js +0 -1
  376. package/.next/static/chunks/app/api/stream/route-93569b5eb93a61e9.js +0 -1
  377. package/.next/static/chunks/app/api/tab/nav/route-93569b5eb93a61e9.js +0 -1
  378. package/.next/static/chunks/app/api/tab/presence/route-93569b5eb93a61e9.js +0 -1
  379. package/.next/static/chunks/app/api/telemetry/route-93569b5eb93a61e9.js +0 -1
  380. package/.next/static/chunks/app/api/telemetry/stats/route-93569b5eb93a61e9.js +0 -1
  381. package/.next/static/chunks/app/api/version/route-93569b5eb93a61e9.js +0 -1
  382. package/.next/static/chunks/app/api/workspace/activate/route-93569b5eb93a61e9.js +0 -1
  383. package/.next/static/chunks/app/api/workspace/route-93569b5eb93a61e9.js +0 -1
  384. package/.next/static/chunks/app/learn/page-bb7141041f6b6e08.js +0 -7
  385. package/.next/static/chunks/app/plan/page-6b546f1602bd1108.js +0 -1
  386. package/.next/static/chunks/app/settings/page-7e176d120b1effa9.js +0 -1
  387. package/.next/static/chunks/next/dist/client/components/builtin/app-error-93569b5eb93a61e9.js +0 -1
  388. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-93569b5eb93a61e9.js +0 -1
  389. package/.next/static/chunks/next/dist/client/components/builtin/not-found-93569b5eb93a61e9.js +0 -1
  390. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-93569b5eb93a61e9.js +0 -1
  391. package/.next/static/css/b51708465127fded.css +0 -1
  392. /package/.next/static/{GjuqgbaZr9M0AGKgnA2hT → mB9lqGEsIvB7tTvv9GU48}/_ssgManifest.js +0 -0
@@ -2,7 +2,7 @@
2
2
  // Do not edit this file manually
3
3
 
4
4
  type AppRoutes = "/" | "/docs" | "/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/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"
5
+ type AppRouteHandlerRoutes = "/api/board-annotations" | "/api/board-annotations/[id]" | "/api/board-layout" | "/api/bug-flags" | "/api/bug-flags/[id]" | "/api/changes" | "/api/changes/comment" | "/api/changes/comment/claim" | "/api/changes/quality" | "/api/changes/viewed" | "/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/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
@@ -17,6 +17,11 @@ interface ParamMap {
17
17
  "/api/board-layout": {}
18
18
  "/api/bug-flags": {}
19
19
  "/api/bug-flags/[id]": { "id": string; }
20
+ "/api/changes": {}
21
+ "/api/changes/comment": {}
22
+ "/api/changes/comment/claim": {}
23
+ "/api/changes/quality": {}
24
+ "/api/changes/viewed": {}
20
25
  "/api/code-graph": {}
21
26
  "/api/code-graph/position": {}
22
27
  "/api/context": {}
@@ -36,7 +41,6 @@ interface ParamMap {
36
41
  "/api/edges/[id]": { "id": string; }
37
42
  "/api/endpoints/[id]": { "id": string; }
38
43
  "/api/entities": {}
39
- "/api/flags": {}
40
44
  "/api/ingest": {}
41
45
  "/api/init": {}
42
46
  "/api/lesson": {}
@@ -164,6 +164,51 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
164
164
  type __Unused = __Check
165
165
  }
166
166
 
167
+ // Validate ../../app/api/changes/comment/claim/route.ts
168
+ {
169
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/changes/comment/claim">> = Specific
170
+ const handler = {} as typeof import("../../app/api/changes/comment/claim/route.js")
171
+ type __Check = __IsExpected<typeof handler>
172
+ // @ts-ignore
173
+ type __Unused = __Check
174
+ }
175
+
176
+ // Validate ../../app/api/changes/comment/route.ts
177
+ {
178
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/changes/comment">> = Specific
179
+ const handler = {} as typeof import("../../app/api/changes/comment/route.js")
180
+ type __Check = __IsExpected<typeof handler>
181
+ // @ts-ignore
182
+ type __Unused = __Check
183
+ }
184
+
185
+ // Validate ../../app/api/changes/quality/route.ts
186
+ {
187
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/changes/quality">> = Specific
188
+ const handler = {} as typeof import("../../app/api/changes/quality/route.js")
189
+ type __Check = __IsExpected<typeof handler>
190
+ // @ts-ignore
191
+ type __Unused = __Check
192
+ }
193
+
194
+ // Validate ../../app/api/changes/route.ts
195
+ {
196
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/changes">> = Specific
197
+ const handler = {} as typeof import("../../app/api/changes/route.js")
198
+ type __Check = __IsExpected<typeof handler>
199
+ // @ts-ignore
200
+ type __Unused = __Check
201
+ }
202
+
203
+ // Validate ../../app/api/changes/viewed/route.ts
204
+ {
205
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/changes/viewed">> = Specific
206
+ const handler = {} as typeof import("../../app/api/changes/viewed/route.js")
207
+ type __Check = __IsExpected<typeof handler>
208
+ // @ts-ignore
209
+ type __Unused = __Check
210
+ }
211
+
167
212
  // Validate ../../app/api/code-graph/position/route.ts
168
213
  {
169
214
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/code-graph/position">> = Specific
@@ -335,15 +380,6 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
335
380
  type __Unused = __Check
336
381
  }
337
382
 
338
- // Validate ../../app/api/flags/route.ts
339
- {
340
- type __IsExpected<Specific extends RouteHandlerConfig<"/api/flags">> = Specific
341
- const handler = {} as typeof import("../../app/api/flags/route.js")
342
- type __Check = __IsExpected<typeof handler>
343
- // @ts-ignore
344
- type __Unused = __Check
345
- }
346
-
347
383
  // Validate ../../app/api/ingest/route.ts
348
384
  {
349
385
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/ingest">> = Specific
package/bun.lock CHANGED
@@ -38,8 +38,10 @@
38
38
  "next": "16.2.7",
39
39
  "radix-ui": "^1.4.3",
40
40
  "react": "19.2.4",
41
+ "react-diff-view": "^3.3.3",
41
42
  "react-dom": "19.2.4",
42
43
  "react-hook-form": "^7.77.0",
44
+ "refractor": "^5.0.0",
43
45
  "server-only": "^0.0.1",
44
46
  "shadcn": "^4.10.0",
45
47
  "tailwind-merge": "^3.6.0",
@@ -669,12 +671,16 @@
669
671
 
670
672
  "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="],
671
673
 
674
+ "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="],
675
+
672
676
  "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="],
673
677
 
674
678
  "@types/json5": ["@types/json5@0.0.29", "", {}, "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="],
675
679
 
676
680
  "@types/node": ["@types/node@20.19.41", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-ECymXOukMnOoVkC2bb1Vc/w/836DXncOg5m8Xj1RH7xSHZJWNYY6Zh7EH477vcnD5egKNNfy2RpNOmuChhFPgQ=="],
677
681
 
682
+ "@types/prismjs": ["@types/prismjs@1.26.6", "", {}, "sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw=="],
683
+
678
684
  "@types/react": ["@types/react@19.2.16", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-esJiCAnl0kfpNdE69f3So4WJUXy95dLZydX0KwK46riIHDzHM7O9Vtf9xCHW0PXIqvgqNrswl522kA/5yx+F4w=="],
679
685
 
680
686
  "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="],
@@ -683,6 +689,8 @@
683
689
 
684
690
  "@types/statuses": ["@types/statuses@2.0.6", "", {}, "sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA=="],
685
691
 
692
+ "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="],
693
+
686
694
  "@types/use-sync-external-store": ["@types/use-sync-external-store@0.0.6", "", {}, "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg=="],
687
695
 
688
696
  "@types/validate-npm-package-name": ["@types/validate-npm-package-name@4.0.2", "", {}, "sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw=="],
@@ -859,6 +867,12 @@
859
867
 
860
868
  "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="],
861
869
 
870
+ "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="],
871
+
872
+ "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="],
873
+
874
+ "character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="],
875
+
862
876
  "chart.js": ["chart.js@4.5.1", "", { "dependencies": { "@kurkle/color": "^0.3.0" } }, "sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw=="],
863
877
 
864
878
  "chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="],
@@ -869,6 +883,8 @@
869
883
 
870
884
  "classcat": ["classcat@5.0.5", "", {}, "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w=="],
871
885
 
886
+ "classnames": ["classnames@2.5.1", "", {}, "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="],
887
+
872
888
  "cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="],
873
889
 
874
890
  "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="],
@@ -887,6 +903,8 @@
887
903
 
888
904
  "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
889
905
 
906
+ "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="],
907
+
890
908
  "commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="],
891
909
 
892
910
  "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="],
@@ -947,6 +965,8 @@
947
965
 
948
966
  "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
949
967
 
968
+ "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="],
969
+
950
970
  "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="],
951
971
 
952
972
  "dedent": ["dedent@1.7.2", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA=="],
@@ -983,6 +1003,8 @@
983
1003
 
984
1004
  "diff": ["diff@8.0.4", "", {}, "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="],
985
1005
 
1006
+ "diff-match-patch": ["diff-match-patch@1.0.5", "", {}, "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw=="],
1007
+
986
1008
  "doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="],
987
1009
 
988
1010
  "dotenv": ["dotenv@17.4.2", "", {}, "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw=="],
@@ -1189,6 +1211,8 @@
1189
1211
 
1190
1212
  "giget": ["giget@3.2.0", "", { "bin": { "giget": "dist/cli.mjs" } }, "sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A=="],
1191
1213
 
1214
+ "gitdiff-parser": ["gitdiff-parser@0.3.1", "", {}, "sha512-YQJnY8aew65id8okGxKCksH3efDCJ9HzV7M9rsvd65habf39Pkh4cgYJ27AaoDMqo1X98pgNJhNMrm/kpV7UVQ=="],
1215
+
1192
1216
  "github-from-package": ["github-from-package@0.0.0", "", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="],
1193
1217
 
1194
1218
  "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="],
@@ -1221,6 +1245,10 @@
1221
1245
 
1222
1246
  "hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="],
1223
1247
 
1248
+ "hast-util-parse-selector": ["hast-util-parse-selector@4.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="],
1249
+
1250
+ "hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="],
1251
+
1224
1252
  "headers-polyfill": ["headers-polyfill@5.0.1", "", { "dependencies": { "@types/set-cookie-parser": "^2.4.10", "set-cookie-parser": "^3.0.1" } }, "sha512-1TJ6Fih/b8h5TIcv+1+Hw0PDQWJTKDKzFZzcKOiW1wJza3XoAQlkCuXLbymPYB8+ZQyw8mHvdw560e8zVFIWyA=="],
1225
1253
 
1226
1254
  "hermes-estree": ["hermes-estree@0.25.1", "", {}, "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw=="],
@@ -1257,6 +1285,10 @@
1257
1285
 
1258
1286
  "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="],
1259
1287
 
1288
+ "is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="],
1289
+
1290
+ "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="],
1291
+
1260
1292
  "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="],
1261
1293
 
1262
1294
  "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="],
@@ -1277,6 +1309,8 @@
1277
1309
 
1278
1310
  "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="],
1279
1311
 
1312
+ "is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="],
1313
+
1280
1314
  "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="],
1281
1315
 
1282
1316
  "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
@@ -1289,6 +1323,8 @@
1289
1323
 
1290
1324
  "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
1291
1325
 
1326
+ "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="],
1327
+
1292
1328
  "is-in-ssh": ["is-in-ssh@1.0.0", "", {}, "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw=="],
1293
1329
 
1294
1330
  "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="],
@@ -1415,6 +1451,8 @@
1415
1451
 
1416
1452
  "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="],
1417
1453
 
1454
+ "lodash": ["lodash@4.18.1", "", {}, "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="],
1455
+
1418
1456
  "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="],
1419
1457
 
1420
1458
  "log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="],
@@ -1545,6 +1583,8 @@
1545
1583
 
1546
1584
  "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="],
1547
1585
 
1586
+ "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="],
1587
+
1548
1588
  "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="],
1549
1589
 
1550
1590
  "parse-ms": ["parse-ms@4.0.0", "", {}, "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw=="],
@@ -1599,6 +1639,8 @@
1599
1639
 
1600
1640
  "proper-lockfile": ["proper-lockfile@4.1.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "retry": "^0.12.0", "signal-exit": "^3.0.2" } }, "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA=="],
1601
1641
 
1642
+ "property-information": ["property-information@7.2.0", "", {}, "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg=="],
1643
+
1602
1644
  "prosemirror-changeset": ["prosemirror-changeset@2.4.1", "", { "dependencies": { "prosemirror-transform": "^1.0.0" } }, "sha512-96WBLhOaYhJ+kPhLg3uW359Tz6I/MfcrQfL4EGv4SrcqKEMC1gmoGrXHecPE8eOwTVCJ4IwgfzM8fFad25wNfw=="],
1603
1645
 
1604
1646
  "prosemirror-commands": ["prosemirror-commands@1.7.1", "", { "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.10.2" } }, "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w=="],
@@ -1649,6 +1691,8 @@
1649
1691
 
1650
1692
  "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="],
1651
1693
 
1694
+ "react-diff-view": ["react-diff-view@3.3.3", "", { "dependencies": { "classnames": "^2.3.2", "diff-match-patch": "^1.0.5", "gitdiff-parser": "^0.3.1", "lodash": "^4.17.21", "shallow-equal": "^3.1.0", "warning": "^4.0.3" }, "peerDependencies": { "react": ">=16.14.0" } }, "sha512-CPveApk6n7ZbkW7T6PoptR7LWAvD9hohTHZ7WnKnu3GZkTfUB5rvg486apPo94iYVi4fZd3Nt+rtBZ5877exoQ=="],
1695
+
1652
1696
  "react-dom": ["react-dom@19.2.4", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ=="],
1653
1697
 
1654
1698
  "react-hook-form": ["react-hook-form@7.77.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-Sslh9YDYc0GDlWT/lxasnIduNo4v3yyvqRGvmGKUre5AFjDs/HV9/OafHGD8d+sB2yoL4UIL9L8X9i0WlZZebg=="],
@@ -1669,6 +1713,8 @@
1669
1713
 
1670
1714
  "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="],
1671
1715
 
1716
+ "refractor": ["refractor@5.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/prismjs": "^1.0.0", "hastscript": "^9.0.0", "parse-entities": "^4.0.0" } }, "sha512-QXOrHQF5jOpjjLfiNk5GFnWhRXvxjUVnlFxkeDmewR5sXkr3iM46Zo+CnRR8B+MDVqkULW4EcLVcRBNOPXHosw=="],
1717
+
1672
1718
  "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="],
1673
1719
 
1674
1720
  "remeda": ["remeda@2.33.4", "", {}, "sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ=="],
@@ -1735,6 +1781,8 @@
1735
1781
 
1736
1782
  "shadcn": ["shadcn@4.10.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/parser": "^7.28.0", "@babel/plugin-transform-typescript": "^7.28.0", "@babel/preset-typescript": "^7.27.1", "@dotenvx/dotenvx": "^1.48.4", "@modelcontextprotocol/sdk": "^1.26.0", "@types/validate-npm-package-name": "^4.0.2", "browserslist": "^4.26.2", "commander": "^14.0.0", "cosmiconfig": "^9.0.0", "dedent": "^1.6.0", "deepmerge": "^4.3.1", "diff": "^8.0.2", "execa": "^9.6.0", "fast-glob": "^3.3.3", "fs-extra": "^11.3.1", "fuzzysort": "^3.1.0", "https-proxy-agent": "^7.0.6", "kleur": "^4.1.5", "msw": "^2.10.4", "node-fetch": "^3.3.2", "open": "^11.0.0", "ora": "^8.2.0", "postcss": "^8.5.6", "postcss-selector-parser": "^7.1.0", "prompts": "^2.4.2", "recast": "^0.23.11", "stringify-object": "^5.0.0", "tailwind-merge": "^3.0.1", "ts-morph": "^26.0.0", "tsconfig-paths": "^4.2.0", "validate-npm-package-name": "^7.0.1", "zod": "^3.24.1", "zod-to-json-schema": "^3.24.6" }, "bin": { "shadcn": "dist/index.js" } }, "sha512-84IJhUsK0xqSCRJx3QxyZe2NpUXj2Nwk8Vc8Ow/tCOND3yz4CT6uU4655vqicNXhzG9Q1cyUt+TBl2SiCJwNgg=="],
1737
1783
 
1784
+ "shallow-equal": ["shallow-equal@3.1.0", "", {}, "sha512-pfVOw8QZIXpMbhBWvzBISicvToTiM5WBF1EeAUZDDSb5Dt29yl4AYbyywbJFSEsRUMr7gJaxqCdr4L3tQf9wVg=="],
1785
+
1738
1786
  "sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="],
1739
1787
 
1740
1788
  "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
@@ -1763,6 +1811,8 @@
1763
1811
 
1764
1812
  "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="],
1765
1813
 
1814
+ "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="],
1815
+
1766
1816
  "sqlstring": ["sqlstring@2.3.3", "", {}, "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg=="],
1767
1817
 
1768
1818
  "stable-hash": ["stable-hash@0.0.5", "", {}, "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA=="],
@@ -1901,6 +1951,8 @@
1901
1951
 
1902
1952
  "w3c-keyname": ["w3c-keyname@2.2.8", "", {}, "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ=="],
1903
1953
 
1954
+ "warning": ["warning@4.0.3", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w=="],
1955
+
1904
1956
  "web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="],
1905
1957
 
1906
1958
  "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
@@ -2127,6 +2179,8 @@
2127
2179
 
2128
2180
  "ora/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="],
2129
2181
 
2182
+ "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="],
2183
+
2130
2184
  "prebuild-install/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
2131
2185
 
2132
2186
  "prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="],
@@ -1,22 +1,22 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var uZ=Object.defineProperty;var gZ=(Q)=>Q;function EZ(Q,Z){this[Q]=gZ.bind(null,Z)}var BQ=(Q,Z)=>{for(var $ in Z)uZ(Q,$,{get:Z[$],enumerable:!0,configurable:!0,set:EZ.bind(Z,$)})};var F=(Q,Z)=>()=>(Q&&(Z=Q(Q=0)),Z);var n0=1500,s0=480000,t0=1800000,S=3600000,a0=3000;var pQ=()=>{};var KQ={};BQ(KQ,{removeRepoAssets:()=>LZ,installRefreshSkill:()=>IZ,installPlanSkill:()=>OZ,installInitSkill:()=>DZ,installExplainSkill:()=>yZ,installCodexRepoSkills:()=>bZ,ensureWorkflowDoc:()=>_Z,ensureMcp:()=>kZ,auditRepo:()=>xQ,REFRESH_SKILL:()=>GQ,PLAN_SKILL:()=>lQ,INIT_SKILL:()=>NQ,EXPLAIN_SKILL:()=>nQ});import{existsSync as R,mkdirSync as I,readFileSync as K,rmSync as h,writeFileSync as N}from"fs";import{join as X}from"path";function DZ(Q){let Z=X(Q,".claude","skills","beacon-init");I(Z,{recursive:!0});let $=X(Z,"SKILL.md");return N($,NQ),$}function IZ(Q){let Z=X(Q,".claude","skills","beacon-refresh");I(Z,{recursive:!0});let $=X(Z,"SKILL.md");return N($,GQ),$}function OZ(Q){let Z=X(Q,".claude","skills","beacon-plan");I(Z,{recursive:!0});let $=X(Z,"SKILL.md");return N($,lQ),$}function yZ(Q){let Z=X(Q,".claude","skills","beacon-explain");I(Z,{recursive:!0});let $=X(Z,"SKILL.md");return N($,nQ),$}function bZ(Q){let Z=[];for(let $ of AZ){let J=X(Q,".agents","skills",$.name);I(J,{recursive:!0});let Y=X(J,"SKILL.md");N(Y,$.body()),Z.push(Y)}return Z}function _Z(Q){let Z=X(Q,"AGENTS.md"),$="";try{$=K(Z,"utf8")}catch{}let J=new RegExp(`${m}[\\s\\S]*?${PQ}`);$=J.test($)?$.replace(J,cQ):`${$.trim()}
4
-
5
- ${cQ}
6
- `.trimStart(),N(Z,$.endsWith(`
7
- `)?$:`${$}
8
- `);let Y=X(Q,"CLAUDE.md"),V="";try{V=K(Y,"utf8")}catch{}if(!/@AGENTS\.md/.test(V))N(Y,`${V?`${V.trim()}
9
-
10
- `:""}@AGENTS.md
11
- `)}function kZ(Q){let Z=X(Q,".mcp.json"),$={};try{$=JSON.parse(K(Z,"utf8"))}catch{}$.mcpServers=$.mcpServers??{};let J=$.mcpServers.beacon;if(J){if(!J.timeout||J.timeout<S)return J.timeout=S,N(Z,JSON.stringify($,null,2)+`
3
+ var gZ=Object.defineProperty;var IZ=(Q)=>Q;function DZ(Q,Z){this[Q]=IZ.bind(null,Z)}var BQ=(Q,Z)=>{for(var $ in Z)gZ(Q,$,{get:Z[$],enumerable:!0,configurable:!0,set:DZ.bind(Z,$)})};var R=(Q,Z)=>()=>(Q&&(Z=Q(Q=0)),Z);var t0=1500,a0=480000,d0=1800000,S=3600000,r0=3000;var cQ=()=>{};var CQ={};BQ(CQ,{stripAgentsPointer:()=>tQ,removeRepoAssets:()=>mZ,installRefreshSkill:()=>AZ,installPlanSkill:()=>yZ,installInitSkill:()=>OZ,installExplainSkill:()=>bZ,installCodexRepoSkills:()=>kZ,ensureWorkflowDoc:()=>LZ,ensureMcp:()=>SZ,contextDocTargets:()=>KQ,auditRepo:()=>xQ,REFRESH_SKILL:()=>GQ,PLAN_SKILL:()=>nQ,INIT_SKILL:()=>NQ,EXPLAIN_SKILL:()=>sQ});import{existsSync as x,mkdirSync as D,readFileSync as C,rmSync as m,writeFileSync as N}from"fs";import{join as X}from"path";function OZ(Q){let Z=X(Q,".claude","skills","beacon-init");D(Z,{recursive:!0});let $=X(Z,"SKILL.md");return N($,NQ),$}function AZ(Q){let Z=X(Q,".claude","skills","beacon-refresh");D(Z,{recursive:!0});let $=X(Z,"SKILL.md");return N($,GQ),$}function yZ(Q){let Z=X(Q,".claude","skills","beacon-plan");D(Z,{recursive:!0});let $=X(Z,"SKILL.md");return N($,nQ),$}function bZ(Q){let Z=X(Q,".claude","skills","beacon-explain");D(Z,{recursive:!0});let $=X(Z,"SKILL.md");return N($,sQ),$}function kZ(Q){let Z=[];for(let $ of _Z){let J=X(Q,".agents","skills",$.name);D(J,{recursive:!0});let Y=X(J,"SKILL.md");N(Y,$.body()),Z.push(Y)}return Z}function KQ(Q){let Z=X(Q,"AGENTS.md"),$=X(Q,"CLAUDE.md"),J=x(Z),Y=x($);if(!J&&!Y)return[Z,$];let V=[];if(J)V.push(Z);if(Y)V.push($);return V}function tQ(Q){let Z=X(Q,"CLAUDE.md");if(!x(Z))return;let $=C(Z,"utf8"),J=$.split(`
4
+ `).filter((Y)=>!/^\s*@\.?\/?AGENTS\.md\s*$/.test(Y)).join(`
5
+ `).trim();if(J&&J!==$.trim())N(Z,`${J}
6
+ `)}function LZ(Q){let Z=new RegExp(`${h}[\\s\\S]*?${PQ}`);for(let $ of KQ(Q)){let J="";try{J=C($,"utf8")}catch{}J=Z.test(J)?J.replace(Z,lQ):`${J.trim()}
7
+
8
+ ${lQ}
9
+ `.trimStart(),N($,J.endsWith(`
10
+ `)?J:`${J}
11
+ `)}tQ(Q)}function SZ(Q){let Z=X(Q,".mcp.json"),$={};try{$=JSON.parse(C(Z,"utf8"))}catch{}$.mcpServers=$.mcpServers??{};let J=$.mcpServers.beacon;if(J){if(!J.timeout||J.timeout<S)return J.timeout=S,N(Z,JSON.stringify($,null,2)+`
12
12
  `),{path:Z,added:!1,updated:!0};return{path:Z,added:!1,updated:!1}}return $.mcpServers.beacon={command:"beacon",args:["mcp"],timeout:S},N(Z,JSON.stringify($,null,2)+`
13
- `),{path:Z,added:!0,updated:!1}}function xQ(Q){let Z=X(Q,".mcp.json"),$=!1;try{$=!!JSON.parse(K(Z,"utf8")).mcpServers?.beacon}catch{}let J=!1;try{J=K(X(Q,"AGENTS.md"),"utf8").includes(m)}catch{}let Y=!1;try{Y=/@AGENTS\.md/.test(K(X(Q,"CLAUDE.md"),"utf8"))}catch{}return{repo:Q,mcpRegistered:$,agentsMdBlock:J,claudeMdImport:Y,skills:{"beacon-init":R(X(Q,".claude","skills","beacon-init","SKILL.md")),"beacon-refresh":R(X(Q,".claude","skills","beacon-refresh","SKILL.md"))},codexSkills:{"beacon-init":R(X(Q,".agents","skills","beacon-init","SKILL.md")),"beacon-refresh":R(X(Q,".agents","skills","beacon-refresh","SKILL.md"))}}}function LZ(Q){let Z=[];for(let z of["beacon-init","beacon-refresh","beacon-db-design"]){let U=X(Q,".claude","skills",z);if(R(U))h(U,{recursive:!0,force:!0}),Z.push(z)}for(let z of["beacon-init","beacon-refresh"]){let U=X(Q,".agents","skills",z);if(R(U))h(U,{recursive:!0,force:!0}),Z.push(`codex:${z}`)}let $=!1,J=X(Q,".mcp.json");try{let z=JSON.parse(K(J,"utf8"));if(z.mcpServers?.beacon){if(delete z.mcpServers.beacon,$=!0,z.mcpServers&&Object.keys(z.mcpServers).length===0)delete z.mcpServers;if(Object.keys(z).length===0)h(J,{force:!0});else N(J,JSON.stringify(z,null,2)+`
14
- `)}}catch{}let Y=!1,V=X(Q,"AGENTS.md");try{let z=K(V,"utf8"),U=new RegExp(`\\n?${m}[\\s\\S]*?${PQ}\\n?`);if(U.test(z)){let vQ=z.replace(U,`
13
+ `),{path:Z,added:!0,updated:!1}}function xQ(Q){let Z=X(Q,".mcp.json"),$=!1;try{$=!!JSON.parse(C(Z,"utf8")).mcpServers?.beacon}catch{}let J=KQ(Q).some((Y)=>{try{return C(Y,"utf8").includes(h)}catch{return!1}});return{repo:Q,mcpRegistered:$,workflowBlock:J,skills:{"beacon-init":x(X(Q,".claude","skills","beacon-init","SKILL.md")),"beacon-refresh":x(X(Q,".claude","skills","beacon-refresh","SKILL.md"))},codexSkills:{"beacon-init":x(X(Q,".agents","skills","beacon-init","SKILL.md")),"beacon-refresh":x(X(Q,".agents","skills","beacon-refresh","SKILL.md"))}}}function mZ(Q){let Z=[];for(let z of["beacon-init","beacon-refresh","beacon-db-design"]){let U=X(Q,".claude","skills",z);if(x(U))m(U,{recursive:!0,force:!0}),Z.push(z)}for(let z of["beacon-init","beacon-refresh"]){let U=X(Q,".agents","skills",z);if(x(U))m(U,{recursive:!0,force:!0}),Z.push(`codex:${z}`)}let $=!1,J=X(Q,".mcp.json");try{let z=JSON.parse(C(J,"utf8"));if(z.mcpServers?.beacon){if(delete z.mcpServers.beacon,$=!0,z.mcpServers&&Object.keys(z.mcpServers).length===0)delete z.mcpServers;if(Object.keys(z).length===0)m(J,{force:!0});else N(J,JSON.stringify(z,null,2)+`
14
+ `)}}catch{}let Y=!1,V=new RegExp(`\\n?${h}[\\s\\S]*?${PQ}\\n?`);for(let z of[X(Q,"AGENTS.md"),X(Q,"CLAUDE.md")])try{let U=C(z,"utf8");if(V.test(U)){let vQ=U.replace(V,`
15
15
  `).replace(/\n{3,}/g,`
16
16
 
17
- `).trimStart();N(V,vQ.endsWith(`
17
+ `).trimStart();N(z,vQ.endsWith(`
18
18
  `)?vQ:`${vQ}
19
- `),Y=!0}}catch{}let q=!1,H=X(Q,"CLAUDE.md");try{let z=K(H,"utf8"),U=z.replace(/^[ \t]*@AGENTS\.md[ \t]*\n?/m,"");if(U!==z){if(!U.trim())h(H,{force:!0});else N(H,U);q=!0}}catch{}return{skillsRemoved:Z,mcpUnregistered:$,agentsBlockRemoved:Y,claudeImportRemoved:q}}var NQ=`---
19
+ `),Y=!0}}catch{}let q=!1,H=X(Q,"CLAUDE.md");try{let z=C(H,"utf8"),U=z.replace(/^[ \t]*@AGENTS\.md[ \t]*\n?/m,"");if(U!==z){if(!U.trim())m(H,{force:!0});else N(H,U);q=!0}}catch{}return{skillsRemoved:Z,mcpUnregistered:$,agentsBlockRemoved:Y,claudeImportRemoved:q}}var NQ=`---
20
20
  name: beacon-init
21
21
  description: Read this repository and map its architecture, schema, and roadmap into Beacon (the local visual planning panel). Use when the user runs /beacon-init, asks to "set up Beacon for this repo", or asks to initialize/bootstrap Beacon's map of this codebase.
22
22
  ---
@@ -110,7 +110,7 @@ The one caveat: if the user manually edited an INIT-source node on the canvas (e
110
110
  If \`beacon_entities\` or \`beacon_init_persist\` isn't available, the Beacon panel isn't running in this repo. Tell the user to run \`beacon\` here first, then re-invoke /beacon-refresh.
111
111
 
112
112
  After the tool returns, report the final counts plus a one-line summary of the diff you surfaced.
113
- `,lQ=`---
113
+ `,nQ=`---
114
114
  name: beacon-plan
115
115
  description: Present your current plan or approach to the user on Beacon's /plan canvas for review \u2014 instead of asking for approval in prose. Use when the user says "present the plan", "show me the plan", "let me see it / the plan", or whenever you are about to end a turn asking whether to proceed with a plan, design, or approach.
116
116
  ---
@@ -139,10 +139,11 @@ board on /plan. The board is built ONLY from the block \u2014 prose is never par
139
139
  table/endpoint/feature you mention in the prose into the block, or that board will be empty.
140
140
 
141
141
  - **Declare your scope.** List the repo-relative files this plan will touch in a top-level
142
- \`"contract"\` array in the block (or the \`contract\` arg of \`beacon_propose_plan\`). When the user
143
- has the plan scope-guard enabled, those files are frozen at approval and you're held to them while
144
- implementing \u2014 editing an undeclared file pauses for the user's authorization (which then adds it
145
- to the contract). Harmless when the guard is off. Declare the files you genuinely expect to edit.
142
+ \`"contract"\` array in the block (or the \`contract\` arg of \`beacon_propose_plan\`). Those files are
143
+ frozen at approval and you're held to them while implementing \u2014 editing an undeclared file pauses
144
+ for the user's authorization (which then adds it to the contract), and the /plan Changes view
145
+ groups your edits On-plan vs Strayed against them. Declare the files you genuinely expect to edit
146
+ (if omitted, the scope is inferred from the files you name in backticks).
146
147
 
147
148
  \`beacon_present_plan\` opens /plan and BLOCKS until the user clicks Approve / Discard / submits
148
149
  feedback, then returns their verdict. Implement code or migrations ONLY after it returns approval.
@@ -158,7 +159,7 @@ If it returns feedback, revise and call it again.
158
159
  If \`beacon_present_plan\` isn't available, the panel isn't wired here \u2014 fall back to ExitPlanMode
159
160
  with the same \`\`\`beacon block (Claude Code only; Codex has no ExitPlanMode), or tell the user to
160
161
  run \`beacon\` in this repo once.
161
- `,nQ=`---
162
+ `,sQ=`---
162
163
  name: beacon-explain
163
164
  description: Teach the user part of THIS codebase as an interactive visual lesson on Beacon's /learn page \u2014 a concept map + plain-English narrative they can question \u2014 instead of a wall of text. Use when the user says "explain", "teach me", "walk me through", "how does X work", or "help me understand the Y category".
164
165
  ---
@@ -228,7 +229,7 @@ so the learner sees the table IN CONTEXT, wired to the code that uses it.
228
229
  Every answer must ADD understanding (rationale, trade-off) \u2014 never just restate the question. Expand
229
230
  the narrative or add nodes where it helps. Keep looping until the tool reports the user saved or closed
230
231
  the lesson.
231
- `,AZ,m="<!-- beacon:workflow:start -->",PQ="<!-- beacon:workflow:end -->",cQ;var p=F(()=>{pQ();AZ=[{name:"beacon-init",body:()=>NQ},{name:"beacon-refresh",body:()=>GQ}];cQ=`${m}
232
+ `,_Z,h="<!-- beacon:workflow:start -->",PQ="<!-- beacon:workflow:end -->",lQ;var p=R(()=>{cQ();_Z=[{name:"beacon-init",body:()=>NQ},{name:"beacon-refresh",body:()=>GQ}];lQ=`${h}
232
233
  ## Beacon \u2014 feature workflow
233
234
 
234
235
  This project uses Beacon (a local planning/visualization panel; run \`beacon\` to open it). When you start work on a FEATURE \u2014 whether referenced via an \`@beacon:feature://\u2026\` mention, an \`@beacon:note://\u2026\` note the user wrote in the Notes panel (treat its checkbox \`- [ ]\` todos as subtasks and order features by their dependencies), or just described in chat \u2014 follow these steps in order:
@@ -300,18 +301,18 @@ Register them all in that single batched call. If a plan added five features, th
300
301
  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.
301
302
 
302
303
  Pull raw planning data anytime with \`beacon_entities\` (features / architecture / tables / endpoints).
303
- ${PQ}`});import{existsSync as c,mkdirSync as CQ,readdirSync as SZ,readFileSync as u,rmSync as hZ,writeFileSync as l}from"fs";import{dirname as sQ,join as C}from"path";function tQ(){return!!process.env.CLAUDE_PLUGIN_ROOT}function n(Q=process.env.HOME||process.env.USERPROFILE||""){if(!Q)return null;let Z=C(Q,".claude","plugins");if(!c(Z))return null;let $=[Z];for(let J=0;J<3&&$.length;J++){let Y=[];for(let V of $){let q=C(V,".claude-plugin","plugin.json");try{if(c(q)&&JSON.parse(u(q,"utf8")).name==="beacon")return V}catch{}try{for(let H of SZ(V,{withFileTypes:!0}))if(H.isDirectory())Y.push(C(V,H.name))}catch{}}$=Y}return null}function aQ(Q){return n(Q)!==null}function mZ(Q){return/[\\/]\.claude[\\/]plugins[\\/]/.test(Q)}function pZ(Q=process.env.HOME||process.env.USERPROFILE||""){if(!Q)return null;try{let Z=JSON.parse(u(C(Q,".claude","plugins","installed_plugins.json"),"utf8"));for(let $ of Object.keys(Z.plugins??{}))if(/^beacon@/.test($))return{key:$,marketplace:$.split("@")[1]??""}}catch{}return null}function MQ(Q){try{return JSON.parse(u(Q,"utf8"))}catch{return{}}}function dQ(Q,Z){CQ(sQ(Q),{recursive:!0}),l(Q,JSON.stringify(Z,null,2)+`
304
- `)}function t(Q,Z){let $=MQ(Q);$.hooks=$.hooks??{},$.hooks[Z.event]=$.hooks[Z.event]??[];let J=$.hooks[Z.event];if(J.some((V)=>V.matcher===Z.matcher&&V.hooks?.some((q)=>q.command===Z.command)))return!1;return J.push({matcher:Z.matcher,hooks:[{type:"command",command:Z.command}]}),dQ(Q,$),!0}function a(Q,Z){return(MQ(Q).hooks?.[Z.event]??[]).some((Y)=>Y.hooks?.some((V)=>V.command===Z.command))}function d(Q,Z){let $=MQ(Q),J=$.hooks?.[Z.event];if(!J)return!1;let Y=!1,V=J.map((q)=>{let H=q.hooks?.length??0,z=(q.hooks??[]).filter((U)=>U.command!==Z.command);if(z.length!==H)Y=!0;return{...q,hooks:z}}).filter((q)=>(q.hooks??[]).length>0);if(!Y)return!1;if(V.length)$.hooks[Z.event]=V;else delete $.hooks[Z.event];if($.hooks&&Object.keys($.hooks).length===0)delete $.hooks;return dQ(Q,$),!0}function r(Q,Z,$,J){let Y=`${Z}
304
+ ${PQ}`});import{existsSync as c,mkdirSync as MQ,readdirSync as hZ,readFileSync as u,rmSync as pZ,writeFileSync as l}from"fs";import{dirname as aQ,join as M}from"path";function dQ(){return!!process.env.CLAUDE_PLUGIN_ROOT}function n(Q=process.env.HOME||process.env.USERPROFILE||""){if(!Q)return null;let Z=M(Q,".claude","plugins");if(!c(Z))return null;let $=[Z];for(let J=0;J<3&&$.length;J++){let Y=[];for(let V of $){let q=M(V,".claude-plugin","plugin.json");try{if(c(q)&&JSON.parse(u(q,"utf8")).name==="beacon")return V}catch{}try{for(let H of hZ(V,{withFileTypes:!0}))if(H.isDirectory())Y.push(M(V,H.name))}catch{}}$=Y}return null}function rQ(Q){return n(Q)!==null}function cZ(Q){return/[\\/]\.claude[\\/]plugins[\\/]/.test(Q)}function lZ(Q=process.env.HOME||process.env.USERPROFILE||""){if(!Q)return null;try{let Z=JSON.parse(u(M(Q,".claude","plugins","installed_plugins.json"),"utf8"));for(let $ of Object.keys(Z.plugins??{}))if(/^beacon@/.test($))return{key:$,marketplace:$.split("@")[1]??""}}catch{}return null}function wQ(Q){try{return JSON.parse(u(Q,"utf8"))}catch{return{}}}function oQ(Q,Z){MQ(aQ(Q),{recursive:!0}),l(Q,JSON.stringify(Z,null,2)+`
305
+ `)}function t(Q,Z){let $=wQ(Q);$.hooks=$.hooks??{},$.hooks[Z.event]=$.hooks[Z.event]??[];let J=$.hooks[Z.event];if(J.some((V)=>V.matcher===Z.matcher&&V.hooks?.some((q)=>q.command===Z.command)))return!1;return J.push({matcher:Z.matcher,hooks:[{type:"command",command:Z.command}]}),oQ(Q,$),!0}function a(Q,Z){return(wQ(Q).hooks?.[Z.event]??[]).some((Y)=>Y.hooks?.some((V)=>V.command===Z.command))}function d(Q,Z){let $=wQ(Q),J=$.hooks?.[Z.event];if(!J)return!1;let Y=!1,V=J.map((q)=>{let H=q.hooks?.length??0,z=(q.hooks??[]).filter((U)=>U.command!==Z.command);if(z.length!==H)Y=!0;return{...q,hooks:z}}).filter((q)=>(q.hooks??[]).length>0);if(!Y)return!1;if(V.length)$.hooks[Z.event]=V;else delete $.hooks[Z.event];if($.hooks&&Object.keys($.hooks).length===0)delete $.hooks;return oQ(Q,$),!0}function r(Q,Z,$,J){let Y=`${Z}
305
306
  ${J.trim()}
306
307
  ${$}`,V="";try{V=u(Q,"utf8")}catch{}let q=new RegExp(`${Z}[\\s\\S]*?${$}`);V=q.test(V)?V.replace(q,Y):V.trim()?`${V.trim()}
307
308
 
308
309
  ${Y}
309
310
  `:`${Y}
310
- `,CQ(sQ(Q),{recursive:!0}),l(Q,V.endsWith(`
311
+ `,MQ(aQ(Q),{recursive:!0}),l(Q,V.endsWith(`
311
312
  `)?V:`${V}
312
313
  `)}function O(Q,Z){try{return u(Q,"utf8").includes(Z)}catch{return!1}}function o(Q,Z,$){let J="";try{J=u(Q,"utf8")}catch{return!1}let Y=new RegExp(`${Z}[\\s\\S]*?${$}\\n?`);if(!Y.test(J))return!1;let V=J.replace(Y,"").replace(/\n{3,}/g,`
313
314
 
314
- `).trimStart();return l(Q,V),!0}function i(Q,Z,$){let J=C(Q,Z);CQ(J,{recursive:!0});let Y=C(J,"SKILL.md");return l(Y,$),Y}function y(Q,Z){return c(C(Q,Z,"SKILL.md"))}function e(Q,Z){let $=C(Q,Z);if(!c($))return!1;return hZ($,{recursive:!0,force:!0}),!0}var B,s=`## Beacon (visual planning panel)
315
+ `).trimStart();return l(Q,V),!0}function i(Q,Z,$){let J=M(Q,Z);MQ(J,{recursive:!0});let Y=M(J,"SKILL.md");return l(Y,$),Y}function A(Q,Z){return c(M(Q,Z,"SKILL.md"))}function e(Q,Z){let $=M(Q,Z);if(!c($))return!1;return pZ($,{recursive:!0,force:!0}),!0}var v,s=`## Beacon (visual planning panel)
315
316
 
316
317
  This machine has Beacon installed \u2014 a local visual planning surface for the terminal-side
317
318
  agent. Beacon proposes feature plans (roadmap features + DB schema + endpoints) via MCP,
@@ -335,19 +336,19 @@ the user reviews on a canvas at /plan, and feedback flows back as the next round
335
336
  Feedback bundles inline annotations on the markdown PLUS any edits the user made directly
336
337
  on the /map and /db boards (added features, attached subtasks, edited columns, new
337
338
  endpoints). Treat board edits as the user's revision intent \u2014 re-propose matching them
338
- verbatim. Do NOT implement until the tool returns approval.`;var wQ=F(()=>{B=["beacon-init","beacon-refresh","beacon-plan","beacon-explain"]});import{mkdirSync as cZ,renameSync as lZ,rmSync as nZ,writeFileSync as sZ}from"fs";import{dirname as tZ}from"path";function QQ(Q,Z){cZ(tZ(Q),{recursive:!0});let $=`${Q}.tmp`;try{sZ($,Z),lZ($,Q)}catch(J){throw nZ($,{force:!0}),J}}function Y1(Q,Z,$=!1){QQ(Q,JSON.stringify(Z,null,$?2:void 0))}var rQ=()=>{};var JZ={};BQ(JZ,{setupCodexAssets:()=>rZ,removeCodexMcp:()=>$Z,removeCodexArtifacts:()=>oZ,hasCodexMcp:()=>RQ,ensureCodexMcp:()=>ZZ,codexMcpProblem:()=>uQ,codexDetected:()=>VQ,auditCodex:()=>gQ,CODEX_HOOKS:()=>f});import{readFileSync as YQ}from"fs";import{homedir as aZ}from"os";import{join as _}from"path";function oQ(){return process.env.HOME||process.env.USERPROFILE||aZ()}function VQ(){if(process.env.BEACON_CODEX==="1")return!0;if(process.env.BEACON_CODEX==="0")return!1;if(fQ===void 0)fQ=Bun.which("codex")!==null;return fQ}function b(Q){try{return Bun.TOML.parse(Q)}catch{return null}}function RQ(){try{return Boolean(b(YQ(g(),"utf8"))?.mcp_servers?.beacon)}catch{return!1}}function uQ(){let Q="";try{Q=YQ(g(),"utf8")}catch{return null}let Z=b(Q);if(!Z)return`~/.codex/config.toml does not parse \u2014 ${A}`;if(Z.mcp_servers?.beacon)return null;if(/^\s*mcp_servers\s*=/m.test(Q))return`mcp_servers is an inline table \u2014 ${A}`;return null}function ZZ(){let Q="",Z=!1;try{Q=YQ(g(),"utf8"),Z=!0}catch{}if(Z){let V=b(Q);if(!V)return{added:!1,error:`~/.codex/config.toml does not parse \u2014 ${A}`};if(V.mcp_servers?.beacon)return{added:!1};if(/^\s*mcp_servers\s*=/m.test(Q))return{added:!1,error:`mcp_servers is an inline table \u2014 ${A}`}}let $=!Q?"":Q.endsWith(`
339
+ verbatim. Do NOT implement until the tool returns approval.`;var fQ=R(()=>{v=["beacon-init","beacon-refresh","beacon-plan","beacon-explain"]});import{mkdirSync as nZ,renameSync as sZ,rmSync as tZ,writeFileSync as aZ}from"fs";import{dirname as dZ}from"path";function QQ(Q,Z){nZ(dZ(Q),{recursive:!0});let $=`${Q}.tmp`;try{aZ($,Z),sZ($,Q)}catch(J){throw tZ($,{force:!0}),J}}function z1(Q,Z,$=!1){QQ(Q,JSON.stringify(Z,null,$?2:void 0))}var iQ=()=>{};var VZ={};BQ(VZ,{setupCodexAssets:()=>iZ,removeCodexMcp:()=>YZ,removeCodexArtifacts:()=>eZ,hasCodexMcp:()=>uQ,ensureCodexMcp:()=>JZ,codexMcpProblem:()=>EQ,codexDetected:()=>VQ,auditCodex:()=>gQ,CODEX_HOOKS:()=>T});import{readFileSync as YQ}from"fs";import{homedir as rZ}from"os";import{join as _}from"path";function eQ(){return process.env.HOME||process.env.USERPROFILE||rZ()}function VQ(){if(process.env.BEACON_CODEX==="1")return!0;if(process.env.BEACON_CODEX==="0")return!1;if(TQ===void 0)TQ=Bun.which("codex")!==null;return TQ}function b(Q){try{return Bun.TOML.parse(Q)}catch{return null}}function uQ(){try{return Boolean(b(YQ(E(),"utf8"))?.mcp_servers?.beacon)}catch{return!1}}function EQ(){let Q="";try{Q=YQ(E(),"utf8")}catch{return null}let Z=b(Q);if(!Z)return`~/.codex/config.toml does not parse \u2014 ${y}`;if(Z.mcp_servers?.beacon)return null;if(/^\s*mcp_servers\s*=/m.test(Q))return`mcp_servers is an inline table \u2014 ${y}`;return null}function JZ(){let Q="",Z=!1;try{Q=YQ(E(),"utf8"),Z=!0}catch{}if(Z){let V=b(Q);if(!V)return{added:!1,error:`~/.codex/config.toml does not parse \u2014 ${y}`};if(V.mcp_servers?.beacon)return{added:!1};if(/^\s*mcp_servers\s*=/m.test(Q))return{added:!1,error:`mcp_servers is an inline table \u2014 ${y}`}}let $=!Q?"":Q.endsWith(`
339
340
  `)?`
340
341
  `:`
341
342
 
342
- `,J=Q+$+dZ;if(b(J)?.mcp_servers?.beacon?.command!=="beacon")return{added:!1,error:`could not safely append [mcp_servers.beacon] \u2014 ${A}`};return QQ(g(),J),{added:!0}}function $Z(){let Q="";try{Q=YQ(g(),"utf8")}catch{return{removed:!1}}let Z=Q.split(`
343
- `),$=Z.indexOf(eQ);if($===-1)return{removed:!1,skipped:RQ()};let J=Z.indexOf(QZ,$);if(J===-1)return{removed:!1,skipped:!0};Z.splice($,J-$+1);let Y=Z.join(`
343
+ `,J=Q+$+oZ;if(b(J)?.mcp_servers?.beacon?.command!=="beacon")return{added:!1,error:`could not safely append [mcp_servers.beacon] \u2014 ${y}`};return QQ(E(),J),{added:!0}}function YZ(){let Q="";try{Q=YQ(E(),"utf8")}catch{return{removed:!1}}let Z=Q.split(`
344
+ `),$=Z.indexOf(ZZ);if($===-1)return{removed:!1,skipped:uQ()};let J=Z.indexOf($Z,$);if(J===-1)return{removed:!1,skipped:!0};Z.splice($,J-$+1);let Y=Z.join(`
344
345
  `).replace(/\n{3,}/g,`
345
346
 
346
- `).replace(/^\n+/,"");if(b(Y)===null)return{removed:!1,skipped:!0};return QQ(g(),Y),{removed:!0}}async function rZ(){let{INIT_SKILL:Q,REFRESH_SKILL:Z,PLAN_SKILL:$,EXPLAIN_SKILL:J}=await Promise.resolve().then(() => (p(),KQ)),Y={"beacon-init":Q,"beacon-refresh":Z,"beacon-plan":$,"beacon-explain":J},V=[];for(let U of B){if(!y($Q(),U))V.push(U);i($Q(),U,Y[U])}let q=0;for(let U of f)if(t(FQ(),{event:U.event,matcher:U.matcher,command:U.command}))q++;let H=O(ZQ(),JQ);r(ZQ(),JQ,iQ,s);let z=ZZ();return{skillsAdded:V,hooksAdded:q,agentsMdBlockTouched:!H,mcp:z}}function gQ(){let Q={};for(let $ of B)Q[$]=y($Q(),$);let Z={};for(let $ of f)Z[$.event]=a(FQ(),{event:$.event,command:$.command});return{detected:VQ(),skills:Q,hooks:Z,agentsMdBlock:O(ZQ(),JQ),mcp:RQ()}}function oZ(){let Q=[];for(let Y of B)if(e($Q(),Y))Q.push(Y);let Z=0;for(let Y of f)if(d(FQ(),{event:Y.event,command:Y.command}))Z++;let $=o(ZQ(),JQ,iQ),J=$Z();return{skillsRemoved:Q,hooksRemoved:Z,agentsMdBlockRemoved:$,mcpRemoved:J.removed,mcpSkipped:J.skipped}}var TQ=()=>_(oQ(),".codex"),FQ=()=>_(TQ(),"hooks.json"),g=()=>_(TQ(),"config.toml"),ZQ=()=>_(TQ(),"AGENTS.md"),$Q=()=>_(oQ(),".agents","skills"),JQ="<!-- beacon:global:start -->",iQ="<!-- beacon:global:end -->",f,fQ,eQ="# beacon:start (managed by Beacon \u2014 `beacon uninstall` removes this block)",QZ="# beacon:end",dZ,A="add it manually: codex mcp add beacon -- beacon mcp";var EQ=F(()=>{wQ();rQ();f=[{event:"PostToolUse",matcher:"apply_patch",command:"beacon hook",description:"Report file edits to Beacon's active feature so the map stays fresh."},{event:"UserPromptSubmit",matcher:"*",command:"beacon prompt",description:"On feature-y prompts in a Beacon-wired repo, remind the agent to run the context\u2192propose\u2192describe loop (no-op otherwise)."},{event:"Stop",matcher:"*",command:"beacon stop-hook",description:"When the agent ends a turn asking for plan approval in prose, nudge it to present the plan on Beacon's /plan canvas."}];dZ=`${eQ}
347
+ `).replace(/^\n+/,"");if(b(Y)===null)return{removed:!1,skipped:!0};return QQ(E(),Y),{removed:!0}}async function iZ(){let{INIT_SKILL:Q,REFRESH_SKILL:Z,PLAN_SKILL:$,EXPLAIN_SKILL:J}=await Promise.resolve().then(() => (p(),CQ)),Y={"beacon-init":Q,"beacon-refresh":Z,"beacon-plan":$,"beacon-explain":J},V=[];for(let U of v){if(!A($Q(),U))V.push(U);i($Q(),U,Y[U])}let q=0;for(let U of T)if(t(RQ(),{event:U.event,matcher:U.matcher,command:U.command}))q++;let H=O(ZQ(),JQ);r(ZQ(),JQ,QZ,s);let z=JZ();return{skillsAdded:V,hooksAdded:q,agentsMdBlockTouched:!H,mcp:z}}function gQ(){let Q={};for(let $ of v)Q[$]=A($Q(),$);let Z={};for(let $ of T)Z[$.event]=a(RQ(),{event:$.event,command:$.command});return{detected:VQ(),skills:Q,hooks:Z,agentsMdBlock:O(ZQ(),JQ),mcp:uQ()}}function eZ(){let Q=[];for(let Y of v)if(e($Q(),Y))Q.push(Y);let Z=0;for(let Y of T)if(d(RQ(),{event:Y.event,command:Y.command}))Z++;let $=o(ZQ(),JQ,QZ),J=YZ();return{skillsRemoved:Q,hooksRemoved:Z,agentsMdBlockRemoved:$,mcpRemoved:J.removed,mcpSkipped:J.skipped}}var FQ=()=>_(eQ(),".codex"),RQ=()=>_(FQ(),"hooks.json"),E=()=>_(FQ(),"config.toml"),ZQ=()=>_(FQ(),"AGENTS.md"),$Q=()=>_(eQ(),".agents","skills"),JQ="<!-- beacon:global:start -->",QZ="<!-- beacon:global:end -->",T,TQ,ZZ="# beacon:start (managed by Beacon \u2014 `beacon uninstall` removes this block)",$Z="# beacon:end",oZ,y="add it manually: codex mcp add beacon -- beacon mcp";var IQ=R(()=>{fQ();iQ();T=[{event:"PostToolUse",matcher:"apply_patch",command:"beacon hook",description:"Report file edits to Beacon's active feature so the map stays fresh."},{event:"UserPromptSubmit",matcher:"*",command:"beacon prompt",description:"On feature-y prompts in a Beacon-wired repo, remind the agent to run the context\u2192propose\u2192describe loop (no-op otherwise)."},{event:"Stop",matcher:"*",command:"beacon stop-hook",description:"When the agent ends a turn asking for plan approval in prose, nudge it to present the plan on Beacon's /plan canvas."}];oZ=`${ZZ}
347
348
  [mcp_servers.beacon]
348
349
  command = "beacon"
349
350
  args = ["mcp"]
350
- ${QZ}
351
- `});var UZ={};BQ(UZ,{provisionDb:()=>w0});import{createClient as H0}from"@libsql/client";import{drizzle as j0}from"drizzle-orm/libsql";import{migrate as v0}from"drizzle-orm/libsql/migrator";import{readMigrationFiles as B0}from"drizzle-orm/migrator";import{dirname as AQ,join as N0}from"path";import{fileURLToPath as G0}from"url";async function XQ(Q,Z){return(await Q.execute({sql:"SELECT 1 FROM sqlite_master WHERE type='table' AND name = ?",args:[Z]})).rows.length>0}async function C0(Q,Z){let $=await Q.execute(`PRAGMA table_info("${Z}")`);return new Set($.rows.map((J)=>String(J.name)))}async function XZ(Q){if(!await XQ(Q,"__drizzle_migrations"))return 0;let Z=await Q.execute('SELECT count(*) AS n FROM "__drizzle_migrations"');return Number(Z.rows[0]?.n??0)}async function M0(Q){for(let[Z,$]of Object.entries(K0)){if(!await XQ(Q,Z))continue;let J=await C0(Q,Z);for(let Y of $){if(!J.has(Y))continue;await Q.execute(`UPDATE "${Z}" SET "${Y}" = CAST((julianday("${Y}") - 2440587.5) * 86400000 AS INTEGER) WHERE typeof("${Y}") = 'text'`)}}}async function w0(Q,Z=x0){let $=H0({url:Q});try{await $.execute("PRAGMA journal_mode = WAL;"),await $.execute("PRAGMA foreign_keys = ON;"),await $.execute("PRAGMA busy_timeout = 5000;");let J=await XQ($,"__drizzle_migrations"),Y=await XQ($,"Node"),V=!1;if(Y&&!J){let H=B0({migrationsFolder:Z})[0];if(H)await $.execute('CREATE TABLE IF NOT EXISTS "__drizzle_migrations" (id SERIAL PRIMARY KEY, hash text NOT NULL, created_at numeric)'),await $.execute({sql:'INSERT INTO "__drizzle_migrations" ("hash", "created_at") VALUES (?, ?)',args:[H.hash,H.folderMillis]}),V=!0}let q=await XZ($);if(await v0(j0($),{migrationsFolder:Z}),await XZ($)>q)V=!0;return await M0($),{migrated:V}}finally{$.close()}}var P0,x0,K0;var WZ=F(async()=>{P0=AQ(AQ(AQ(G0(import.meta.url)))),x0=process.env.BEACON_MIGRATIONS_DIR||N0(P0,"drizzle"),K0={Node:["createdAt","updatedAt"],Note:["createdAt","updatedAt"],DbTable:["createdAt","updatedAt"],Endpoint:["createdAt","updatedAt"],DraftTable:["createdAt"],SyncState:["codeGraphSyncedAt","updatedAt"],AppSetting:["updatedAt"],ProjectMeta:["updatedAt"],CodeFile:["updatedAt"]}});wQ();import{existsSync as iZ}from"fs";import{homedir as eZ}from"os";import{join as zQ}from"path";function Q0(){return process.env.HOME||process.env.USERPROFILE||eZ()}var qQ=()=>zQ(Q0(),".claude"),DQ=()=>zQ(qQ(),"skills"),IQ=()=>zQ(qQ(),"settings.json"),OQ=()=>zQ(qQ(),"CLAUDE.md"),yQ="<!-- beacon:global:start -->",YZ="<!-- beacon:global:end -->";var Z0=s,E=[{event:"PreToolUse",matcher:"Edit|Write|MultiEdit",command:"beacon guard",description:"Gate edits against the active plan's scope contract (when the scope-guard flag is on): in-scope \u2192 allow, off-scope \u2192 ask the user to authorize. No-op + fail-open otherwise."},{event:"PostToolUse",matcher:"Edit|Write|MultiEdit",command:"beacon hook",description:"Report file edits to Beacon's active feature so the map stays fresh."},{event:"PermissionRequest",matcher:"ExitPlanMode",command:"beacon plan",description:"Pipe the agent's plan markdown into Beacon's /plan canvas for review."},{event:"UserPromptSubmit",matcher:"*",command:"beacon prompt",description:"On feature-y prompts in a Beacon-wired repo, remind the agent to run the context\u2192propose\u2192describe loop (no-op otherwise)."},{event:"Stop",matcher:"*",command:"beacon stop-hook",description:"When the agent ends a turn asking for plan approval in prose (instead of presenting it), nudge it to present the plan on Beacon's /plan canvas. Bounded by stop_hook_active \u2014 at most one nudge."}];function $0(Q,Z){return i(DQ(),Q,Z)}function VZ(Q){return y(DQ(),Q)}function J0(Q){return e(DQ(),Q)}function Y0(Q){return t(IQ(),Q)}function V0(Q){return a(IQ(),Q)}function z0(Q){return d(IQ(),Q)}function q0(Q){r(OQ(),yQ,YZ,Q)}function zZ(){return O(OQ(),yQ)}function X0(){return o(OQ(),yQ,YZ)}function qZ(){let Q={};for(let $ of B)Q[$]=VZ($);let Z={};for(let $ of E)Z[$.event]=V0({event:$.event,command:$.command});return{homeExists:iZ(qQ()),skills:Q,hooks:Z,claudeMdBlock:zZ()}}async function U0(){let{INIT_SKILL:Q,REFRESH_SKILL:Z,PLAN_SKILL:$,EXPLAIN_SKILL:J}=await Promise.resolve().then(() => (p(),KQ)),Y={"beacon-init":Q,"beacon-refresh":Z,"beacon-plan":$,"beacon-explain":J},V=[];for(let z of B){if(!VZ(z))V.push(z);$0(z,Y[z])}let q=0;for(let z of E)if(Y0({event:z.event,matcher:z.matcher,command:z.command}))q++;let H=zZ();return q0(Z0),{skillsAdded:V,hooksAdded:q,claudeMdBlockTouched:!H}}async function N1(){if(tQ())return{ok:!0,skipped:"plugin",skillsAdded:[],hooksAdded:0,claudeMdBlockTouched:!1};let Q;if(aQ()){try{W0()}catch{}Q={ok:!0,skipped:"plugin-present",skillsAdded:[],hooksAdded:0,claudeMdBlockTouched:!1}}else try{Q={ok:!0,...await U0()}}catch(Z){Q={ok:!1,error:Z instanceof Error?Z.message:String(Z),skillsAdded:[],hooksAdded:0,claudeMdBlockTouched:!1}}try{let Z=await Promise.resolve().then(() => (EQ(),JZ));if(Z.codexDetected())Q.codex={ok:!0,...await Z.setupCodexAssets()}}catch(Z){Q.codex={ok:!1,error:Z instanceof Error?Z.message:String(Z),skillsAdded:[],hooksAdded:0,agentsMdBlockTouched:!1,mcp:{added:!1}}}return Q}function W0(){let Q=[];for(let J of B)if(J0(J))Q.push(J);let Z=0;for(let J of E)if(z0(J))Z++;let $=X0();return{skillsRemoved:Q,hooksRemoved:Z,claudeMdBlockRemoved:$}}import{AsyncLocalStorage as f0}from"async_hooks";import{spawnSync as T0}from"child_process";import{createHash as F0}from"crypto";import{existsSync as jZ,mkdirSync as k,readFileSync as _Q,writeFileSync as kQ}from"fs";import{homedir as vZ}from"os";import{basename as R0,join as M,parse as u0,resolve as HZ}from"path";function P(){return process.env.BEACON_HOME||M(vZ(),".beacon")}function LQ(){return M(P(),"workspaces.json")}function UQ(Q){return F0("sha256").update(Q).digest("hex").slice(0,12)}function E1(Q=process.cwd()){let Z=T0("git",["rev-parse","--show-toplevel"],{cwd:Q,stdio:["ignore","pipe","ignore"]});if(Z.status===0){let $=Z.stdout?.toString().trim();if($)return $}return Q}function BZ(Q){let Z=HZ(Q);return Z!==HZ(vZ())&&Z!==u0(Z).root}function NZ(){return M(P(),"deleted.json")}function SQ(){try{let Q=JSON.parse(_Q(NZ(),"utf8"));return Array.isArray(Q)?Q:[]}catch{return[]}}function GZ(Q){k(P(),{recursive:!0}),kQ(NZ(),JSON.stringify(Q,null,2))}function PZ(Q){return SQ().includes(Q)}function D1(Q){let Z=SQ();if(!Z.includes(Q))GZ([...Z,Q])}function g0(Q){let Z=SQ();if(Z.includes(Q))GZ(Z.filter(($)=>$!==Q))}function WQ(Q){return M(P(),Q)}function E0(Q){return`file:${M(WQ(Q),"db.sqlite")}`}function L(){try{let Q=JSON.parse(_Q(LQ(),"utf8"));return Array.isArray(Q)?Q:[]}catch{return[]}}function hQ(Q){k(P(),{recursive:!0}),kQ(LQ(),JSON.stringify(Q,null,2))}function HQ(){return L().sort((Q,Z)=>Z.lastOpenedAt.localeCompare(Q.lastOpenedAt))}function T(Q){return L().find((Z)=>Z.id===Q)??null}function xZ(Q,Z,$=new Date().toISOString()){if(!BZ(Q))throw Error(`beacon: refusing to register a non-repo path as a workspace: ${Q}`);let J=UQ(Q);if(PZ(J))throw Error(`beacon: workspace ${J} (${Q}) was deleted \u2014 run \`beacon\` or /beacon-init to re-add it`);let Y=L(),V=Y.find((z)=>z.id===J),q={id:J,path:Q,name:Z||V?.name||R0(Q),lastOpenedAt:$},H=[q,...Y.filter((z)=>z.id!==J)];return k(WQ(J),{recursive:!0}),hQ(H),q}function I1(Q,Z){return g0(UQ(Q)),xZ(Q,Z)}function O1(Q,Z=new Date().toISOString()){let $=L(),J=$.find((Y)=>Y.id===Q);if(!J)return;J.lastOpenedAt=Z,hQ($)}function y1(Q){if(hQ(L().filter((Z)=>Z.id!==Q)),mQ()===Q)D0(HQ()[0]?.id??null)}function KZ(){return M(P(),"active")}function mQ(){try{return _Q(KZ(),"utf8").trim()||null}catch{return null}}function D0(Q){k(P(),{recursive:!0}),kQ(KZ(),Q??"")}function A1(){let Q=mQ();return Q?T(Q):null}function b1(){let Q=y0()??mQ();return Q?T(Q):null}function _1(Q){return T(Q)?.path??null}function k1(){return jZ(LQ())}var CZ="beacon_ws";function MZ(Q,Z){let $=Q.headers.get("cookie");if(!$)return null;for(let J of $.split(";")){let Y=J.indexOf("=");if(Y===-1)continue;if(J.slice(0,Y).trim()===Z)return decodeURIComponent(J.slice(Y+1).trim())}return null}function L1(Q){let Z=Q.headers.get("x-beacon-workspace");if(Z&&T(Z))return Z;let $=MZ(Q,CZ);if($&&T($))return $;return I0()}function I0(){let Q=HQ();return Q.length===1?Q[0].id:null}var O0="x-beacon-workspace-path";async function S1(Q){let Z=Q.headers.get("x-beacon-workspace");if(Z&&T(Z))return Z;let $=Q.headers.get(O0);if($&&BZ($)&&!PZ(UQ($))&&(!Z||UQ($)===Z)){let Y=xZ($);return await A0(Y.id),Y.id}let J=MZ(Q,CZ);if(J&&T(J))return J;return null}var wZ=new f0;function h1(Q,Z){return Q?wZ.run(Q,Z):Z()}function y0(){return wZ.getStore()??null}var bQ=new Set;function m1(Q){bQ.delete(M(WQ(Q),"db.sqlite"))}async function A0(Q){let Z=WQ(Q),$=M(Z,"db.sqlite"),J=jZ($);if(J&&bQ.has($))return{ok:!0,created:!1,migrated:!1};try{k(Z,{recursive:!0});let{provisionDb:Y}=await WZ().then(() => UZ),V=await Y(E0(Q));return bQ.add($),{ok:!0,created:!J,migrated:J&&V.migrated}}catch(Y){return{ok:!1,created:!1,migrated:!1,error:Y instanceof Error?Y.message:String(Y)}}}p();EQ();import{execSync as b0,spawnSync as TZ}from"child_process";import{existsSync as _0,readFileSync as k0}from"fs";import{join as FZ}from"path";var W=(Q)=>`\x1B[32m\u2713\x1B[0m ${Q}`,j=(Q)=>`\x1B[31m\u2717\x1B[0m ${Q}`,x=(Q)=>`\x1B[2m${Q}\x1B[0m`,D=(Q)=>`
352
- \x1B[1m${Q}\x1B[0m`;function L0(){try{return b0("git rev-parse --show-toplevel",{cwd:process.cwd(),stdio:["ignore","pipe","ignore"]}).toString().trim()}catch{return""}}function S0(){let Q=FZ(P(),"server.json");try{let Z=JSON.parse(k0(Q,"utf8"));if(!Z.pid)return j("daemon: no server.json yet");try{return process.kill(Z.pid,0),W(`daemon running (pid ${Z.pid}, port ${Z.port??"?"})`)}catch{return j(`daemon NOT running (server.json stale: pid ${Z.pid})`)}}catch{return j("daemon: no server.json (never started)")}}function h0(){let Q=TZ("bun",["--version"],{stdio:["ignore","pipe","ignore"]});if(Q.status===0)return W(`bun ${Q.stdout.toString().trim()}`);return j("bun NOT found on PATH (required to run Beacon)")}function m0(){return L0()||process.cwd()}var jQ=m0(),w=qZ(),RZ=HQ(),p0=RZ.some((Q)=>Q.path===jQ),v=p0||_0(FZ(jQ,".mcp.json"))?xQ(jQ):null;console.log(D("Beacon \xB7 doctor"));console.log(D("Runtime"));console.log(` ${h0()}`);console.log(` ${S0()}`);console.log(` ${W(`home: ${P()}`)}`);console.log(` ${W(`workspaces registered: ${RZ.length}`)}`);console.log(D("Global (~/.claude/)"));for(let Q of B)console.log(` ${w.skills[Q]?W(`skill ${Q}`):j(`skill ${Q} \u2014 missing`)}`);for(let Q of E)console.log(` ${w.hooks[Q.event]?W(`hook ${Q.event} \u2192 ${Q.command}`):j(`hook ${Q.event} \u2192 ${Q.command} \u2014 missing`)} ${x(Q.description)}`);console.log(` ${w.claudeMdBlock?W("global CLAUDE.md block"):j("global CLAUDE.md block \u2014 missing (every Claude session won't auto-discover Beacon)")}`);console.log(D("Plugin (Claude Code)"));var fZ=n();if(fZ)if(console.log(` ${W(`installed as a Claude Code plugin \u2192 ${fZ}`)}`),console.log(` ${x("the plugin owns the Claude-side skills/hooks/MCP")}`),w.hooks.PostToolUse||B.some((Q)=>w.skills[Q]))console.log(` ${x("npm-global ~/.claude entries still present \u2014 they'll be removed automatically on the next `beacon` run (run `beacon` once to deconflict now).")}`);else console.log(` ${W("npm-global ~/.claude layer stepped aside \u2014 no double-registration")}`);else console.log(` ${x("not installed as a Claude Code plugin (using the npm `trybeacon` CLI).")}`);console.log(D("Codex (~/.codex/ + ~/.agents/)"));var G=VQ()?gQ():null;if(!G)console.log(` ${x("codex not on PATH \u2014 Codex integration inactive (wires automatically once codex is installed)")}`);else{let Q=TZ("codex",["--version"],{stdio:["ignore","pipe","ignore"]});console.log(` ${Q.status===0?W(`codex ${Q.stdout.toString().trim()}`):x("codex version unavailable (BEACON_CODEX override?)")}`);for(let $ of B)console.log(` ${G.skills[$]?W(`skill ${$} (~/.agents/skills)`):j(`skill ${$} (~/.agents/skills) \u2014 missing`)}`);for(let $ of f)console.log(` ${G.hooks[$.event]?W(`hook ${$.event} \u2192 ${$.command}`):j(`hook ${$.event} \u2192 ${$.command} \u2014 missing`)} ${x($.description)}`);console.log(` ${G.agentsMdBlock?W("global ~/.codex/AGENTS.md block"):j("global ~/.codex/AGENTS.md block \u2014 missing")}`);let Z=uQ();console.log(` ${G.mcp?W("config.toml has [mcp_servers.beacon]"):j(`config.toml missing [mcp_servers.beacon]${Z?` \u2014 ${Z}`:""}`)}`)}console.log(D(`Current repo (${jQ})`));if(!v)console.log(` ${x("not registered with Beacon and no .mcp.json \u2014 run `beacon` here to wire it.")}`);else if(console.log(` ${v.mcpRegistered?W(".mcp.json has beacon entry"):j(".mcp.json missing beacon entry")}`),console.log(` ${v.agentsMdBlock?W("AGENTS.md has Beacon workflow block"):j("AGENTS.md missing Beacon workflow block")}`),console.log(` ${v.claudeMdImport?W("CLAUDE.md @-imports AGENTS.md"):j("CLAUDE.md does NOT @-import AGENTS.md")}`),console.log(` ${v.skills["beacon-init"]?W("skill beacon-init (repo)"):j("skill beacon-init (repo) \u2014 missing")}`),console.log(` ${v.skills["beacon-refresh"]?W("skill beacon-refresh (repo)"):j("skill beacon-refresh (repo) \u2014 missing")}`),G)console.log(` ${v.codexSkills["beacon-init"]?W("skill beacon-init (.agents/skills)"):j("skill beacon-init (.agents/skills) \u2014 missing")}`),console.log(` ${v.codexSkills["beacon-refresh"]?W("skill beacon-refresh (.agents/skills)"):j("skill beacon-refresh (.agents/skills) \u2014 missing")}`);var c0=B.some((Q)=>!w.skills[Q])||E.some((Q)=>!w.hooks[Q.event])||!w.claudeMdBlock||(G?B.some((Q)=>!G.skills[Q])||f.some((Q)=>!G.hooks[Q.event])||!G.agentsMdBlock||!G.mcp:!1)||(v?!v.mcpRegistered||!v.agentsMdBlock||!v.claudeMdImport||!v.skills["beacon-init"]||!v.skills["beacon-refresh"]||(G?!v.codexSkills["beacon-init"]||!v.codexSkills["beacon-refresh"]:!1):!1);if(c0)console.log(`
353
- ${x("Fix everything marked \u2717 by running")} \x1B[1mbeacon\x1B[0m ${x("in this repo.")}`);console.log();
351
+ ${$Z}
352
+ `});var HZ={};BQ(HZ,{provisionDb:()=>T0});import{createClient as v0}from"@libsql/client";import{drizzle as B0}from"drizzle-orm/libsql";import{migrate as N0}from"drizzle-orm/libsql/migrator";import{readMigrationFiles as G0}from"drizzle-orm/migrator";import{dirname as bQ,join as P0}from"path";import{fileURLToPath as K0}from"url";async function XQ(Q,Z){return(await Q.execute({sql:"SELECT 1 FROM sqlite_master WHERE type='table' AND name = ?",args:[Z]})).rows.length>0}async function w0(Q,Z){let $=await Q.execute(`PRAGMA table_info("${Z}")`);return new Set($.rows.map((J)=>String(J.name)))}async function WZ(Q){if(!await XQ(Q,"__drizzle_migrations"))return 0;let Z=await Q.execute('SELECT count(*) AS n FROM "__drizzle_migrations"');return Number(Z.rows[0]?.n??0)}async function f0(Q){for(let[Z,$]of Object.entries(M0)){if(!await XQ(Q,Z))continue;let J=await w0(Q,Z);for(let Y of $){if(!J.has(Y))continue;await Q.execute(`UPDATE "${Z}" SET "${Y}" = CAST((julianday("${Y}") - 2440587.5) * 86400000 AS INTEGER) WHERE typeof("${Y}") = 'text'`)}}}async function T0(Q,Z=C0){let $=v0({url:Q});try{await $.execute("PRAGMA journal_mode = WAL;"),await $.execute("PRAGMA foreign_keys = ON;"),await $.execute("PRAGMA busy_timeout = 5000;");let J=await XQ($,"__drizzle_migrations"),Y=await XQ($,"Node"),V=!1;if(Y&&!J){let H=G0({migrationsFolder:Z})[0];if(H)await $.execute('CREATE TABLE IF NOT EXISTS "__drizzle_migrations" (id SERIAL PRIMARY KEY, hash text NOT NULL, created_at numeric)'),await $.execute({sql:'INSERT INTO "__drizzle_migrations" ("hash", "created_at") VALUES (?, ?)',args:[H.hash,H.folderMillis]}),V=!0}let q=await WZ($);if(await N0(B0($),{migrationsFolder:Z}),await WZ($)>q)V=!0;return await f0($),{migrated:V}}finally{$.close()}}var x0,C0,M0;var jZ=R(async()=>{x0=bQ(bQ(bQ(K0(import.meta.url)))),C0=process.env.BEACON_MIGRATIONS_DIR||P0(x0,"drizzle"),M0={Node:["createdAt","updatedAt"],Note:["createdAt","updatedAt"],DbTable:["createdAt","updatedAt"],Endpoint:["createdAt","updatedAt"],DraftTable:["createdAt"],SyncState:["codeGraphSyncedAt","updatedAt"],AppSetting:["updatedAt"],ProjectMeta:["updatedAt"],CodeFile:["updatedAt"]}});fQ();import{existsSync as Q0}from"fs";import{homedir as Z0}from"os";import{join as zQ}from"path";function $0(){return process.env.HOME||process.env.USERPROFILE||Z0()}var qQ=()=>zQ($0(),".claude"),DQ=()=>zQ(qQ(),"skills"),OQ=()=>zQ(qQ(),"settings.json"),AQ=()=>zQ(qQ(),"CLAUDE.md"),yQ="<!-- beacon:global:start -->",zZ="<!-- beacon:global:end -->";var J0=s,g=[{event:"PreToolUse",matcher:"Edit|Write|MultiEdit",command:"beacon guard",description:"Gate edits against the active plan's scope contract: in-scope \u2192 allow, off-scope \u2192 ask the user to authorize. Fail-open when there's no active contract."},{event:"PostToolUse",matcher:"Edit|Write|MultiEdit",command:"beacon hook",description:"Report file edits to Beacon's active feature so the map stays fresh."},{event:"PermissionRequest",matcher:"ExitPlanMode",command:"beacon plan",description:"Pipe the agent's plan markdown into Beacon's /plan canvas for review."},{event:"UserPromptSubmit",matcher:"*",command:"beacon prompt",description:"On feature-y prompts in a Beacon-wired repo, remind the agent to run the context\u2192propose\u2192describe loop (no-op otherwise)."},{event:"Stop",matcher:"*",command:"beacon stop-hook",description:"When the agent ends a turn asking for plan approval in prose (instead of presenting it), nudge it to present the plan on Beacon's /plan canvas. Bounded by stop_hook_active \u2014 at most one nudge."}];function Y0(Q,Z){return i(DQ(),Q,Z)}function qZ(Q){return A(DQ(),Q)}function V0(Q){return e(DQ(),Q)}function z0(Q){return t(OQ(),Q)}function q0(Q){return a(OQ(),Q)}function X0(Q){return d(OQ(),Q)}function U0(Q){r(AQ(),yQ,zZ,Q)}function XZ(){return O(AQ(),yQ)}function W0(){return o(AQ(),yQ,zZ)}function UZ(){let Q={};for(let $ of v)Q[$]=qZ($);let Z={};for(let $ of g)Z[$.event]=q0({event:$.event,command:$.command});return{homeExists:Q0(qQ()),skills:Q,hooks:Z,claudeMdBlock:XZ()}}async function H0(){let{INIT_SKILL:Q,REFRESH_SKILL:Z,PLAN_SKILL:$,EXPLAIN_SKILL:J}=await Promise.resolve().then(() => (p(),CQ)),Y={"beacon-init":Q,"beacon-refresh":Z,"beacon-plan":$,"beacon-explain":J},V=[];for(let z of v){if(!qZ(z))V.push(z);Y0(z,Y[z])}let q=0;for(let z of g)if(z0({event:z.event,matcher:z.matcher,command:z.command}))q++;let H=XZ();return U0(J0),{skillsAdded:V,hooksAdded:q,claudeMdBlockTouched:!H}}async function P1(){if(dQ())return{ok:!0,skipped:"plugin",skillsAdded:[],hooksAdded:0,claudeMdBlockTouched:!1};let Q;if(rQ()){try{j0()}catch{}Q={ok:!0,skipped:"plugin-present",skillsAdded:[],hooksAdded:0,claudeMdBlockTouched:!1}}else try{Q={ok:!0,...await H0()}}catch(Z){Q={ok:!1,error:Z instanceof Error?Z.message:String(Z),skillsAdded:[],hooksAdded:0,claudeMdBlockTouched:!1}}try{let Z=await Promise.resolve().then(() => (IQ(),VZ));if(Z.codexDetected())Q.codex={ok:!0,...await Z.setupCodexAssets()}}catch(Z){Q.codex={ok:!1,error:Z instanceof Error?Z.message:String(Z),skillsAdded:[],hooksAdded:0,agentsMdBlockTouched:!1,mcp:{added:!1}}}return Q}function j0(){let Q=[];for(let J of v)if(V0(J))Q.push(J);let Z=0;for(let J of g)if(X0(J))Z++;let $=W0();return{skillsRemoved:Q,hooksRemoved:Z,claudeMdBlockRemoved:$}}import{AsyncLocalStorage as F0}from"async_hooks";import{spawnSync as R0}from"child_process";import{createHash as u0}from"crypto";import{existsSync as BZ,mkdirSync as k,readFileSync as kQ,writeFileSync as LQ}from"fs";import{homedir as NZ}from"os";import{basename as E0,join as w,parse as g0,resolve as vZ}from"path";function P(){return process.env.BEACON_HOME||w(NZ(),".beacon")}function SQ(){return w(P(),"workspaces.json")}function UQ(Q){return u0("sha256").update(Q).digest("hex").slice(0,12)}function D1(Q=process.cwd()){let Z=R0("git",["rev-parse","--show-toplevel"],{cwd:Q,stdio:["ignore","pipe","ignore"]});if(Z.status===0){let $=Z.stdout?.toString().trim();if($)return $}return Q}function GZ(Q){let Z=vZ(Q);return Z!==vZ(NZ())&&Z!==g0(Z).root}function PZ(){return w(P(),"deleted.json")}function mQ(){try{let Q=JSON.parse(kQ(PZ(),"utf8"));return Array.isArray(Q)?Q:[]}catch{return[]}}function KZ(Q){k(P(),{recursive:!0}),LQ(PZ(),JSON.stringify(Q,null,2))}function xZ(Q){return mQ().includes(Q)}function O1(Q){let Z=mQ();if(!Z.includes(Q))KZ([...Z,Q])}function I0(Q){let Z=mQ();if(Z.includes(Q))KZ(Z.filter(($)=>$!==Q))}function WQ(Q){return w(P(),Q)}function D0(Q){return`file:${w(WQ(Q),"db.sqlite")}`}function L(){try{let Q=JSON.parse(kQ(SQ(),"utf8"));return Array.isArray(Q)?Q:[]}catch{return[]}}function hQ(Q){k(P(),{recursive:!0}),LQ(SQ(),JSON.stringify(Q,null,2))}function HQ(){return L().sort((Q,Z)=>Z.lastOpenedAt.localeCompare(Q.lastOpenedAt))}function F(Q){return L().find((Z)=>Z.id===Q)??null}function CZ(Q,Z,$=new Date().toISOString()){if(!GZ(Q))throw Error(`beacon: refusing to register a non-repo path as a workspace: ${Q}`);let J=UQ(Q);if(xZ(J))throw Error(`beacon: workspace ${J} (${Q}) was deleted \u2014 run \`beacon\` or /beacon-init to re-add it`);let Y=L(),V=Y.find((z)=>z.id===J),q={id:J,path:Q,name:Z||V?.name||E0(Q),lastOpenedAt:$},H=[q,...Y.filter((z)=>z.id!==J)];return k(WQ(J),{recursive:!0}),hQ(H),q}function A1(Q,Z){return I0(UQ(Q)),CZ(Q,Z)}function y1(Q,Z=new Date().toISOString()){let $=L(),J=$.find((Y)=>Y.id===Q);if(!J)return;J.lastOpenedAt=Z,hQ($)}function b1(Q){if(hQ(L().filter((Z)=>Z.id!==Q)),pQ()===Q)O0(HQ()[0]?.id??null)}function MZ(){return w(P(),"active")}function pQ(){try{return kQ(MZ(),"utf8").trim()||null}catch{return null}}function O0(Q){k(P(),{recursive:!0}),LQ(MZ(),Q??"")}function _1(){let Q=pQ();return Q?F(Q):null}function k1(){let Q=b0()??pQ();return Q?F(Q):null}function L1(Q){return F(Q)?.path??null}function S1(){return BZ(SQ())}var wZ="beacon_ws";function fZ(Q,Z){let $=Q.headers.get("cookie");if(!$)return null;for(let J of $.split(";")){let Y=J.indexOf("=");if(Y===-1)continue;if(J.slice(0,Y).trim()===Z)return decodeURIComponent(J.slice(Y+1).trim())}return null}function m1(Q){let Z=Q.headers.get("x-beacon-workspace");if(Z&&F(Z))return Z;let $=fZ(Q,wZ);if($&&F($))return $;return A0()}function A0(){let Q=HQ();return Q.length===1?Q[0].id:null}var y0="x-beacon-workspace-path";async function h1(Q){let Z=Q.headers.get("x-beacon-workspace");if(Z&&F(Z))return Z;let $=Q.headers.get(y0);if($&&GZ($)&&!xZ(UQ($))&&(!Z||UQ($)===Z)){let Y=CZ($);return await _0(Y.id),Y.id}let J=fZ(Q,wZ);if(J&&F(J))return J;return null}var TZ=new F0;function p1(Q,Z){return Q?TZ.run(Q,Z):Z()}function b0(){return TZ.getStore()??null}var _Q=new Set;function c1(Q){_Q.delete(w(WQ(Q),"db.sqlite"))}async function _0(Q){let Z=WQ(Q),$=w(Z,"db.sqlite"),J=BZ($);if(J&&_Q.has($))return{ok:!0,created:!1,migrated:!1};try{k(Z,{recursive:!0});let{provisionDb:Y}=await jZ().then(() => HZ),V=await Y(D0(Q));return _Q.add($),{ok:!0,created:!J,migrated:J&&V.migrated}}catch(Y){return{ok:!1,created:!1,migrated:!1,error:Y instanceof Error?Y.message:String(Y)}}}p();IQ();import{execSync as k0,spawnSync as RZ}from"child_process";import{existsSync as L0,readFileSync as S0}from"fs";import{join as uZ}from"path";var W=(Q)=>`\x1B[32m\u2713\x1B[0m ${Q}`,j=(Q)=>`\x1B[31m\u2717\x1B[0m ${Q}`,K=(Q)=>`\x1B[2m${Q}\x1B[0m`,I=(Q)=>`
353
+ \x1B[1m${Q}\x1B[0m`;function m0(){try{return k0("git rev-parse --show-toplevel",{cwd:process.cwd(),stdio:["ignore","pipe","ignore"]}).toString().trim()}catch{return""}}function h0(){let Q=uZ(P(),"server.json");try{let Z=JSON.parse(S0(Q,"utf8"));if(!Z.pid)return j("daemon: no server.json yet");try{return process.kill(Z.pid,0),W(`daemon running (pid ${Z.pid}, port ${Z.port??"?"})`)}catch{return j(`daemon NOT running (server.json stale: pid ${Z.pid})`)}}catch{return j("daemon: no server.json (never started)")}}function p0(){let Q=RZ("bun",["--version"],{stdio:["ignore","pipe","ignore"]});if(Q.status===0)return W(`bun ${Q.stdout.toString().trim()}`);return j("bun NOT found on PATH (required to run Beacon)")}function c0(){return m0()||process.cwd()}var jQ=c0(),f=UZ(),EZ=HQ(),l0=EZ.some((Q)=>Q.path===jQ),B=l0||L0(uZ(jQ,".mcp.json"))?xQ(jQ):null;console.log(I("Beacon \xB7 doctor"));console.log(I("Runtime"));console.log(` ${p0()}`);console.log(` ${h0()}`);console.log(` ${W(`home: ${P()}`)}`);console.log(` ${W(`workspaces registered: ${EZ.length}`)}`);console.log(I("Global (~/.claude/)"));for(let Q of v)console.log(` ${f.skills[Q]?W(`skill ${Q}`):j(`skill ${Q} \u2014 missing`)}`);for(let Q of g)console.log(` ${f.hooks[Q.event]?W(`hook ${Q.event} \u2192 ${Q.command}`):j(`hook ${Q.event} \u2192 ${Q.command} \u2014 missing`)} ${K(Q.description)}`);console.log(` ${f.claudeMdBlock?W("global CLAUDE.md block"):j("global CLAUDE.md block \u2014 missing (every Claude session won't auto-discover Beacon)")}`);console.log(I("Plugin (Claude Code)"));var FZ=n();if(FZ)if(console.log(` ${W(`installed as a Claude Code plugin \u2192 ${FZ}`)}`),console.log(` ${K("the plugin owns the Claude-side skills/hooks/MCP")}`),f.hooks.PostToolUse||v.some((Q)=>f.skills[Q]))console.log(` ${K("npm-global ~/.claude entries still present \u2014 they'll be removed automatically on the next `beacon` run (run `beacon` once to deconflict now).")}`);else console.log(` ${W("npm-global ~/.claude layer stepped aside \u2014 no double-registration")}`);else console.log(` ${K("not installed as a Claude Code plugin (using the npm `trybeacon` CLI).")}`);console.log(I("Codex (~/.codex/ + ~/.agents/)"));var G=VQ()?gQ():null;if(!G)console.log(` ${K("codex not on PATH \u2014 Codex integration inactive (wires automatically once codex is installed)")}`);else{let Q=RZ("codex",["--version"],{stdio:["ignore","pipe","ignore"]});console.log(` ${Q.status===0?W(`codex ${Q.stdout.toString().trim()}`):K("codex version unavailable (BEACON_CODEX override?)")}`);for(let $ of v)console.log(` ${G.skills[$]?W(`skill ${$} (~/.agents/skills)`):j(`skill ${$} (~/.agents/skills) \u2014 missing`)}`);for(let $ of T)console.log(` ${G.hooks[$.event]?W(`hook ${$.event} \u2192 ${$.command}`):j(`hook ${$.event} \u2192 ${$.command} \u2014 missing`)} ${K($.description)}`);console.log(` ${G.agentsMdBlock?W("global ~/.codex/AGENTS.md block"):j("global ~/.codex/AGENTS.md block \u2014 missing")}`);let Z=EQ();console.log(` ${G.mcp?W("config.toml has [mcp_servers.beacon]"):j(`config.toml missing [mcp_servers.beacon]${Z?` \u2014 ${Z}`:""}`)}`)}console.log(I(`Current repo (${jQ})`));if(!B)console.log(` ${K("not registered with Beacon and no .mcp.json \u2014 run `beacon` here to wire it.")}`);else if(console.log(` ${B.mcpRegistered?W(".mcp.json has beacon entry"):j(".mcp.json missing beacon entry")}`),console.log(` ${B.workflowBlock?W("AGENTS.md / CLAUDE.md has Beacon workflow block"):j("AGENTS.md / CLAUDE.md missing Beacon workflow block")}`),console.log(` ${B.skills["beacon-init"]?W("skill beacon-init (repo)"):j("skill beacon-init (repo) \u2014 missing")}`),console.log(` ${B.skills["beacon-refresh"]?W("skill beacon-refresh (repo)"):j("skill beacon-refresh (repo) \u2014 missing")}`),G)console.log(` ${B.codexSkills["beacon-init"]?W("skill beacon-init (.agents/skills)"):j("skill beacon-init (.agents/skills) \u2014 missing")}`),console.log(` ${B.codexSkills["beacon-refresh"]?W("skill beacon-refresh (.agents/skills)"):j("skill beacon-refresh (.agents/skills) \u2014 missing")}`);var n0=v.some((Q)=>!f.skills[Q])||g.some((Q)=>!f.hooks[Q.event])||!f.claudeMdBlock||(G?v.some((Q)=>!G.skills[Q])||T.some((Q)=>!G.hooks[Q.event])||!G.agentsMdBlock||!G.mcp:!1)||(B?!B.mcpRegistered||!B.workflowBlock||!B.skills["beacon-init"]||!B.skills["beacon-refresh"]||(G?!B.codexSkills["beacon-init"]||!B.codexSkills["beacon-refresh"]:!1):!1);if(n0)console.log(`
354
+ ${K("Fix everything marked \u2717 by running")} \x1B[1mbeacon\x1B[0m ${K("in this repo.")}`);console.log();