@claudiolabs/claudin 1.1.30 → 1.1.31

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 (904) hide show
  1. package/dist/chunks/AgentTool-1.1.31-6e06310w.mjs +1 -0
  2. package/dist/chunks/App-1.1.31-bp57fthj.mjs +1 -0
  3. package/dist/chunks/ApproveApiKey-1.1.31-ptx7r5x2.mjs +1 -0
  4. package/dist/chunks/AutoModeOptInDialog-1.1.31-0d22j8k7.mjs +1 -0
  5. package/dist/chunks/BypassPermissionsModeDialog-1.1.31-v2cfafqt.mjs +1 -0
  6. package/dist/chunks/ClaudeMdExternalIncludesDialog-1.1.31-a8e8ar2n.mjs +1 -0
  7. package/dist/chunks/ConsoleOAuthFlow-1.1.31-zq76tmk2.mjs +1 -0
  8. package/dist/chunks/DiffDialog-1.1.31-r1mknqwv.mjs +6 -0
  9. package/dist/chunks/Doctor-1.1.31-t4n9k4nc.mjs +1 -0
  10. package/dist/chunks/ExplorerDialog-1.1.31-41a3c01z.mjs +6 -0
  11. package/dist/chunks/ITermBackend-1.1.31-y9f8hq45.mjs +1 -0
  12. package/dist/chunks/InvalidConfigDialog-1.1.31-xpdggxkf.mjs +1 -0
  13. package/dist/chunks/InvalidSettingsDialog-1.1.31-0bg1r1g6.mjs +1 -0
  14. package/dist/chunks/MigrationDialog-1.1.31-w8fpbc16.mjs +1 -0
  15. package/dist/chunks/Onboarding-1.1.31-23zjjspn.mjs +1 -0
  16. package/dist/chunks/ProviderManager-1.1.31-504qgqkc.mjs +1 -0
  17. package/dist/chunks/REPL-1.1.31-nyzbwycm.mjs +1 -0
  18. package/dist/chunks/ResumeConversation-1.1.31-dqkxr7bz.mjs +1 -0
  19. package/dist/chunks/SnapshotUpdateDialog-1.1.31-htqfbpbp.mjs +1 -0
  20. package/dist/chunks/TeleportProgress-1.1.31-27h2np2z.mjs +1 -0
  21. package/dist/chunks/TeleportRepoMismatchDialog-1.1.31-41nwynfk.mjs +1 -0
  22. package/dist/chunks/TeleportResumeWrapper-1.1.31-ea5827ce.mjs +1 -0
  23. package/dist/chunks/TmuxBackend-1.1.31-jvrhermf.mjs +9 -0
  24. package/dist/chunks/ToolSearchTool-1.1.31-c0sya3fj.mjs +1 -0
  25. package/dist/chunks/TrustDialog-1.1.31-28w5033t.mjs +1 -0
  26. package/dist/chunks/activeProvider-1.1.31-dbrkwgfw.mjs +1 -0
  27. package/dist/chunks/add-dir-1.1.31-r6x72g59.mjs +1 -0
  28. package/dist/chunks/agentTypes-1.1.31-kb6srdzm.mjs +1 -0
  29. package/dist/chunks/agents-1.1.31-1jetdejb.mjs +110 -0
  30. package/dist/chunks/agents-1.1.31-mfr4h93c.mjs +3 -0
  31. package/dist/chunks/api-1.1.31-hp3y91t9.mjs +1 -0
  32. package/dist/chunks/asciicast-1.1.31-t0xrwnqn.mjs +1 -0
  33. package/dist/chunks/auth-1.1.31-76rswxwe.mjs +1 -0
  34. package/dist/chunks/auth-1.1.31-yhv86kw0.mjs +1 -0
  35. package/dist/chunks/autoMode-1.1.31-qma18egk.mjs +52 -0
  36. package/dist/chunks/autoModeSetup-1.1.31-egrmqsva.mjs +44 -0
  37. package/dist/chunks/autoUpdater-1.1.31-417m125q.mjs +1 -0
  38. package/dist/chunks/backgroundHousekeeping-1.1.31-e5emh88x.mjs +1 -0
  39. package/dist/chunks/branch-1.1.31-bxrg1svq.mjs +4 -0
  40. package/dist/chunks/bridge-1.1.31-1rsj352r.mjs +2 -0
  41. package/dist/chunks/bridgeConfig-1.1.31-r9vnvw71.mjs +1 -0
  42. package/dist/chunks/bridgeEnabled-1.1.31-d9mxn4g0.mjs +1 -0
  43. package/dist/chunks/bridgeMain-1.1.31-7sf093b0.mjs +88 -0
  44. package/dist/chunks/bridgePointer-1.1.31-n1t53nem.mjs +1 -0
  45. package/dist/chunks/btw-1.1.31-skw1dhb5.mjs +1 -0
  46. package/dist/chunks/buddy-1.1.31-wtmggn5p.mjs +3 -0
  47. package/dist/chunks/cache-probe-1.1.31-pgss169p.mjs +21 -0
  48. package/dist/chunks/cacheStats-1.1.31-af3nkg2b.mjs +4 -0
  49. package/dist/chunks/caches-1.1.31-yvqtsfx3.mjs +1 -0
  50. package/dist/chunks/cd-1.1.31-9t47yj0z.mjs +3 -0
  51. package/dist/chunks/claudeDesktop-1.1.31-b7a99nfq.mjs +1 -0
  52. package/dist/chunks/claudemd-1.1.31-h72v8r12.mjs +1 -0
  53. package/dist/chunks/clear-1.1.31-ndp0q9t9.mjs +1 -0
  54. package/dist/chunks/clearTerminal-1.1.31-d6d2q7kn.mjs +1 -0
  55. package/dist/chunks/cli-1.1.31-03xjvk1e.mjs +3 -0
  56. package/dist/chunks/cli-1.1.31-0fnqd3bq.mjs +25 -0
  57. package/dist/chunks/cli-1.1.31-0mmyq6jx.mjs +2 -0
  58. package/dist/chunks/cli-1.1.31-0yagz4xw.mjs +2 -0
  59. package/dist/chunks/cli-1.1.31-1192t9cm.mjs +2 -0
  60. package/dist/chunks/cli-1.1.31-13cx7z8n.mjs +60 -0
  61. package/dist/chunks/cli-1.1.31-1dv9ay7v.mjs +2 -0
  62. package/dist/chunks/cli-1.1.31-1q4btmra.mjs +2 -0
  63. package/dist/chunks/cli-1.1.31-1qw0s3a8.mjs +2 -0
  64. package/dist/chunks/cli-1.1.31-1wxttnqr.mjs +2 -0
  65. package/dist/chunks/cli-1.1.31-2csxt0x3.mjs +2 -0
  66. package/dist/chunks/cli-1.1.31-2ffqcy85.mjs +2 -0
  67. package/dist/chunks/cli-1.1.31-2j93x895.mjs +24 -0
  68. package/dist/chunks/cli-1.1.31-2mfapzkq.mjs +2 -0
  69. package/dist/chunks/cli-1.1.31-2pdbmb7w.mjs +3 -0
  70. package/dist/chunks/cli-1.1.31-2zvm1tgs.mjs +2 -0
  71. package/dist/chunks/cli-1.1.31-312b3zf6.mjs +2 -0
  72. package/dist/chunks/cli-1.1.31-32mahfs2.mjs +2 -0
  73. package/dist/chunks/cli-1.1.31-3dy87m85.mjs +2 -0
  74. package/dist/chunks/cli-1.1.31-3ehzwm1n.mjs +2 -0
  75. package/dist/chunks/cli-1.1.31-3jzsv5dy.mjs +2 -0
  76. package/dist/chunks/cli-1.1.31-3s51hvv0.mjs +2 -0
  77. package/dist/chunks/cli-1.1.31-3zy5yd1t.mjs +133 -0
  78. package/dist/chunks/cli-1.1.31-44jshpbd.mjs +2 -0
  79. package/dist/chunks/cli-1.1.31-4awnya8e.mjs +2 -0
  80. package/dist/chunks/cli-1.1.31-4cp1xkaj.mjs +2 -0
  81. package/dist/chunks/cli-1.1.31-4ja5kbt5.mjs +4 -0
  82. package/dist/chunks/cli-1.1.31-4tneme0y.mjs +2 -0
  83. package/dist/chunks/cli-1.1.31-528vtf9a.mjs +2 -0
  84. package/dist/chunks/cli-1.1.31-52wt9w8w.mjs +15 -0
  85. package/dist/chunks/cli-1.1.31-556xnzb4.mjs +2 -0
  86. package/dist/chunks/cli-1.1.31-562nqgh7.mjs +2 -0
  87. package/dist/chunks/cli-1.1.31-58anwssk.mjs +2 -0
  88. package/dist/chunks/cli-1.1.31-5ab9cpbt.mjs +3 -0
  89. package/dist/chunks/cli-1.1.31-5kgkq6vm.mjs +2 -0
  90. package/dist/chunks/cli-1.1.31-5ma2m26d.mjs +2 -0
  91. package/dist/chunks/cli-1.1.31-5tgfa7xy.mjs +2 -0
  92. package/dist/chunks/cli-1.1.31-5xd2j6e7.mjs +2 -0
  93. package/dist/chunks/cli-1.1.31-612bpjx6.mjs +2 -0
  94. package/dist/chunks/cli-1.1.31-619zan4w.mjs +2 -0
  95. package/dist/chunks/cli-1.1.31-6m1k9909.mjs +2 -0
  96. package/dist/chunks/cli-1.1.31-6pxakyvg.mjs +2 -0
  97. package/dist/chunks/cli-1.1.31-6qm466ss.mjs +2 -0
  98. package/dist/chunks/cli-1.1.31-706cv7fx.mjs +2 -0
  99. package/dist/chunks/cli-1.1.31-7692zxpg.mjs +2 -0
  100. package/dist/chunks/cli-1.1.31-774jqp88.mjs +2 -0
  101. package/dist/chunks/cli-1.1.31-777381m0.mjs +34 -0
  102. package/dist/chunks/cli-1.1.31-7hmq6k3a.mjs +26 -0
  103. package/dist/chunks/cli-1.1.31-7wdp9ve5.mjs +3 -0
  104. package/dist/chunks/cli-1.1.31-8bcb1d1y.mjs +2 -0
  105. package/dist/chunks/cli-1.1.31-8esfq0f2.mjs +2 -0
  106. package/dist/chunks/cli-1.1.31-8h9zps1d.mjs +2 -0
  107. package/dist/chunks/cli-1.1.31-8sw4prf8.mjs +22 -0
  108. package/dist/chunks/cli-1.1.31-8syj0cmx.mjs +2 -0
  109. package/dist/chunks/cli-1.1.31-9493f46x.mjs +9 -0
  110. package/dist/chunks/cli-1.1.31-978dpg39.mjs +2 -0
  111. package/dist/chunks/cli-1.1.31-9a1gsrx2.mjs +24 -0
  112. package/dist/chunks/cli-1.1.31-9adq5rjd.mjs +2 -0
  113. package/dist/chunks/cli-1.1.31-9d5v98td.mjs +2 -0
  114. package/dist/chunks/cli-1.1.31-9e4vtbvh.mjs +3 -0
  115. package/dist/chunks/cli-1.1.31-9efpx64n.mjs +20 -0
  116. package/dist/chunks/cli-1.1.31-9gf60j86.mjs +2 -0
  117. package/dist/chunks/cli-1.1.31-9gzbwjb8.mjs +2 -0
  118. package/dist/chunks/cli-1.1.31-9m6ef5kb.mjs +2 -0
  119. package/dist/chunks/cli-1.1.31-9m6gmh2w.mjs +2 -0
  120. package/dist/chunks/cli-1.1.31-9x9gaa7g.mjs +2 -0
  121. package/dist/chunks/cli-1.1.31-a4vvez04.mjs +2 -0
  122. package/dist/chunks/cli-1.1.31-a5wav9hq.mjs +2 -0
  123. package/dist/chunks/cli-1.1.31-a611zwj5.mjs +10 -0
  124. package/dist/chunks/cli-1.1.31-adnn5x8c.mjs +16 -0
  125. package/dist/chunks/cli-1.1.31-afzdmcrq.mjs +2 -0
  126. package/dist/chunks/cli-1.1.31-ahbyaapz.mjs +12 -0
  127. package/dist/chunks/cli-1.1.31-aqm3wayg.mjs +2 -0
  128. package/dist/chunks/cli-1.1.31-b2pt6rsc.mjs +2 -0
  129. package/dist/chunks/cli-1.1.31-b7258j1y.mjs +2 -0
  130. package/dist/chunks/cli-1.1.31-b8rbgfhm.mjs +2 -0
  131. package/dist/chunks/cli-1.1.31-bdt0j0zj.mjs +4 -0
  132. package/dist/chunks/cli-1.1.31-bfsa3dvr.mjs +2 -0
  133. package/dist/chunks/cli-1.1.31-bx3e5rv6.mjs +3 -0
  134. package/dist/chunks/cli-1.1.31-c17g88x0.mjs +9 -0
  135. package/dist/chunks/cli-1.1.31-c9707zjx.mjs +63 -0
  136. package/dist/chunks/cli-1.1.31-can8wyac.mjs +2 -0
  137. package/dist/chunks/cli-1.1.31-cpay8r5h.mjs +2 -0
  138. package/dist/chunks/cli-1.1.31-cpeph4zm.mjs +6 -0
  139. package/dist/chunks/cli-1.1.31-d9sxj86f.mjs +2 -0
  140. package/dist/chunks/cli-1.1.31-dc4fq4s3.mjs +2 -0
  141. package/dist/chunks/cli-1.1.31-dctwr6q4.mjs +5 -0
  142. package/dist/chunks/cli-1.1.31-dcyx3536.mjs +39 -0
  143. package/dist/chunks/cli-1.1.31-dhecyw04.mjs +3 -0
  144. package/dist/chunks/cli-1.1.31-dmghye74.mjs +4 -0
  145. package/dist/chunks/cli-1.1.31-ek449yjc.mjs +6 -0
  146. package/dist/chunks/cli-1.1.31-emhqeb1g.mjs +2 -0
  147. package/dist/chunks/cli-1.1.31-eqfmzrxc.mjs +2 -0
  148. package/dist/chunks/cli-1.1.31-eqvc58gw.mjs +2 -0
  149. package/dist/chunks/cli-1.1.31-ewhwdszf.mjs +2 -0
  150. package/dist/chunks/cli-1.1.31-f1zfyp44.mjs +2 -0
  151. package/dist/chunks/cli-1.1.31-f2abkvxa.mjs +4 -0
  152. package/dist/chunks/cli-1.1.31-fbdr0297.mjs +2 -0
  153. package/dist/chunks/cli-1.1.31-fdjs93ba.mjs +2 -0
  154. package/dist/chunks/cli-1.1.31-fdk7yhs0.mjs +2 -0
  155. package/dist/chunks/cli-1.1.31-fjdb444f.mjs +7 -0
  156. package/dist/chunks/cli-1.1.31-fk787pkf.mjs +15 -0
  157. package/dist/chunks/cli-1.1.31-fpqqpyrw.mjs +3 -0
  158. package/dist/chunks/cli-1.1.31-fr8t4a7n.mjs +2 -0
  159. package/dist/chunks/cli-1.1.31-fy2x8k7r.mjs +2 -0
  160. package/dist/chunks/cli-1.1.31-g41zancj.mjs +3 -0
  161. package/dist/chunks/cli-1.1.31-g58b1jfa.mjs +5473 -0
  162. package/dist/chunks/cli-1.1.31-ggtvemxf.mjs +2 -0
  163. package/dist/chunks/cli-1.1.31-gk7te1jt.mjs +2 -0
  164. package/dist/chunks/cli-1.1.31-gq54djk0.mjs +2 -0
  165. package/dist/chunks/cli-1.1.31-h102y1at.mjs +8 -0
  166. package/dist/chunks/cli-1.1.31-h1sv3apa.mjs +4 -0
  167. package/dist/chunks/cli-1.1.31-h41m4yrw.mjs +2 -0
  168. package/dist/chunks/cli-1.1.31-h5a78vp8.mjs +2 -0
  169. package/dist/chunks/cli-1.1.31-hfdt80w2.mjs +50 -0
  170. package/dist/chunks/cli-1.1.31-hk88wxhm.mjs +2 -0
  171. package/dist/chunks/cli-1.1.31-hpxjvh3j.mjs +3 -0
  172. package/dist/chunks/cli-1.1.31-hvnwvzhh.mjs +58 -0
  173. package/dist/chunks/cli-1.1.31-j0fbn8aw.mjs +2 -0
  174. package/dist/chunks/cli-1.1.31-jfj1gvgy.mjs +2 -0
  175. package/dist/chunks/cli-1.1.31-jh2sb5nk.mjs +42 -0
  176. package/dist/chunks/cli-1.1.31-jnyr50hq.mjs +2 -0
  177. package/dist/chunks/cli-1.1.31-jwa8f70w.mjs +2 -0
  178. package/dist/chunks/cli-1.1.31-jyzz7q1c.mjs +2 -0
  179. package/dist/chunks/cli-1.1.31-k0zfy1nt.mjs +2 -0
  180. package/dist/chunks/cli-1.1.31-kfw3q4sp.mjs +133 -0
  181. package/dist/chunks/cli-1.1.31-kp8hq72m.mjs +2 -0
  182. package/dist/chunks/cli-1.1.31-kzh4darh.mjs +2 -0
  183. package/dist/chunks/cli-1.1.31-m5w2d13z.mjs +2 -0
  184. package/dist/chunks/cli-1.1.31-m9yqg6jg.mjs +2 -0
  185. package/dist/chunks/cli-1.1.31-mcekc48f.mjs +2 -0
  186. package/dist/chunks/cli-1.1.31-mtcbc6g3.mjs +4 -0
  187. package/dist/chunks/cli-1.1.31-n130x03f.mjs +2 -0
  188. package/dist/chunks/cli-1.1.31-n305h9qd.mjs +25 -0
  189. package/dist/chunks/cli-1.1.31-n4g6s1bz.mjs +2 -0
  190. package/dist/chunks/cli-1.1.31-n5vytp0f.mjs +2 -0
  191. package/dist/chunks/cli-1.1.31-nh2cfavp.mjs +2 -0
  192. package/dist/chunks/cli-1.1.31-njfyxwfr.mjs +2 -0
  193. package/dist/chunks/cli-1.1.31-nvecb8c6.mjs +2 -0
  194. package/dist/chunks/cli-1.1.31-nyvjx813.mjs +24 -0
  195. package/dist/chunks/cli-1.1.31-nyvz0ev8.mjs +5 -0
  196. package/dist/chunks/cli-1.1.31-p99fz46k.mjs +206 -0
  197. package/dist/chunks/cli-1.1.31-pb50hb6v.mjs +12 -0
  198. package/dist/chunks/cli-1.1.31-pg2ntz9b.mjs +17 -0
  199. package/dist/chunks/cli-1.1.31-pgde5349.mjs +2 -0
  200. package/dist/chunks/cli-1.1.31-pp98t7k8.mjs +2 -0
  201. package/dist/chunks/cli-1.1.31-ptvddvjv.mjs +2 -0
  202. package/dist/chunks/cli-1.1.31-pzz7j17y.mjs +3 -0
  203. package/dist/chunks/cli-1.1.31-q67trvk0.mjs +2 -0
  204. package/dist/chunks/cli-1.1.31-q6k8ems6.mjs +21 -0
  205. package/dist/chunks/cli-1.1.31-qj8vksz8.mjs +2 -0
  206. package/dist/chunks/cli-1.1.31-qq0sng13.mjs +2 -0
  207. package/dist/chunks/cli-1.1.31-qsftejzk.mjs +2 -0
  208. package/dist/chunks/cli-1.1.31-qv6x2hht.mjs +2 -0
  209. package/dist/chunks/cli-1.1.31-qyztdyg2.mjs +2 -0
  210. package/dist/chunks/cli-1.1.31-r5g0ns02.mjs +2 -0
  211. package/dist/chunks/cli-1.1.31-r7jps0tn.mjs +3 -0
  212. package/dist/chunks/cli-1.1.31-rqyqyvdn.mjs +2 -0
  213. package/dist/chunks/cli-1.1.31-rspa4dsq.mjs +6 -0
  214. package/dist/chunks/cli-1.1.31-rw3xn3tc.mjs +4 -0
  215. package/dist/chunks/cli-1.1.31-s1a6vw53.mjs +2 -0
  216. package/dist/chunks/cli-1.1.31-s1vgm3hb.mjs +2 -0
  217. package/dist/chunks/cli-1.1.31-s246tb6v.mjs +15 -0
  218. package/dist/chunks/cli-1.1.31-satbt91m.mjs +18 -0
  219. package/dist/chunks/cli-1.1.31-sc82f8hw.mjs +6 -0
  220. package/dist/chunks/cli-1.1.31-sn0x975f.mjs +24 -0
  221. package/dist/chunks/cli-1.1.31-sn2bmgwr.mjs +2 -0
  222. package/dist/chunks/cli-1.1.31-t2y2tkme.mjs +2 -0
  223. package/dist/chunks/cli-1.1.31-t6m64e0q.mjs +6 -0
  224. package/dist/chunks/cli-1.1.31-t96rrv1m.mjs +2 -0
  225. package/dist/chunks/cli-1.1.31-tc6xppyr.mjs +2 -0
  226. package/dist/chunks/cli-1.1.31-tctd36c8.mjs +2 -0
  227. package/dist/chunks/cli-1.1.31-thhdw5e1.mjs +2 -0
  228. package/dist/chunks/cli-1.1.31-v02fpzs5.mjs +2 -0
  229. package/dist/chunks/cli-1.1.31-v7nswcm8.mjs +2 -0
  230. package/dist/chunks/cli-1.1.31-var05xaf.mjs +2 -0
  231. package/dist/chunks/cli-1.1.31-vbch5rht.mjs +2 -0
  232. package/dist/chunks/cli-1.1.31-vf004w21.mjs +2 -0
  233. package/dist/chunks/cli-1.1.31-vhstdnfa.mjs +7 -0
  234. package/dist/chunks/cli-1.1.31-vphyv007.mjs +2 -0
  235. package/dist/chunks/cli-1.1.31-vpkbqj90.mjs +4 -0
  236. package/dist/chunks/cli-1.1.31-vr977n4j.mjs +2 -0
  237. package/dist/chunks/cli-1.1.31-w0vfcfhs.mjs +2 -0
  238. package/dist/chunks/cli-1.1.31-w225x38q.mjs +2 -0
  239. package/dist/chunks/cli-1.1.31-war7w6d7.mjs +2 -0
  240. package/dist/chunks/cli-1.1.31-wba64b2s.mjs +2 -0
  241. package/dist/chunks/cli-1.1.31-wfv9e9p4.mjs +2 -0
  242. package/dist/chunks/cli-1.1.31-wmt8ywr9.mjs +2 -0
  243. package/dist/chunks/cli-1.1.31-wnpf6e90.mjs +2 -0
  244. package/dist/chunks/cli-1.1.31-x1wr5k0p.mjs +2 -0
  245. package/dist/chunks/cli-1.1.31-x96s38b0.mjs +2 -0
  246. package/dist/chunks/cli-1.1.31-xqdypd2k.mjs +6 -0
  247. package/dist/chunks/cli-1.1.31-xv09f0k4.mjs +2 -0
  248. package/dist/chunks/cli-1.1.31-yte5f9f9.mjs +45 -0
  249. package/dist/chunks/cli-1.1.31-yz72mhbg.mjs +2 -0
  250. package/dist/chunks/cli-1.1.31-z3s1pnd3.mjs +1 -0
  251. package/dist/chunks/cli-1.1.31-z6qe8e42.mjs +2 -0
  252. package/dist/chunks/cli-1.1.31-z7hdz84q.mjs +17 -0
  253. package/dist/chunks/cli-1.1.31-zsjs5eq0.mjs +2 -0
  254. package/dist/chunks/cli-1.1.31-zvbpmw2y.mjs +2 -0
  255. package/dist/chunks/cli-1.1.31-zy7nrvt9.mjs +2 -0
  256. package/dist/chunks/cli-1.1.31-zzd4cheh.mjs +2 -0
  257. package/dist/chunks/client-1.1.31-3bn971t2.mjs +1 -0
  258. package/dist/chunks/color-1.1.31-n3q45hw4.mjs +1 -0
  259. package/dist/chunks/compact-1.1.31-zkekkcjq.mjs +3 -0
  260. package/dist/chunks/config-1.1.31-1t6yz96k.mjs +1 -0
  261. package/dist/chunks/config-1.1.31-enwx50r9.mjs +1 -0
  262. package/dist/chunks/constants-1.1.31-5peb81d1.mjs +1 -0
  263. package/dist/chunks/context-1.1.31-9crzemp8.mjs +1 -0
  264. package/dist/chunks/context-noninteractive-1.1.31-twqynyp7.mjs +1 -0
  265. package/dist/chunks/conversation-1.1.31-yw2es9kq.mjs +1 -0
  266. package/dist/chunks/copilotHeaders-1.1.31-axfr0ar5.mjs +1 -0
  267. package/dist/chunks/copy-1.1.31-y97hza01.mjs +9 -0
  268. package/dist/chunks/cost-1.1.31-wtp1fp62.mjs +1 -0
  269. package/dist/chunks/createSSHSession-1.1.31-tsfe2dea.mjs +1 -0
  270. package/dist/chunks/createSession-1.1.31-pddv01ds.mjs +1 -0
  271. package/dist/chunks/debug-1.1.31-5awffxcd.mjs +1 -0
  272. package/dist/chunks/defaultActionDeps-1.1.31-6a742vb3.mjs +1480 -0
  273. package/dist/chunks/desktop-1.1.31-zq54hfwy.mjs +2 -0
  274. package/dist/chunks/detectRepository-1.1.31-s6pe6c1x.mjs +1 -0
  275. package/dist/chunks/detection-1.1.31-zss1hfbq.mjs +1 -0
  276. package/dist/chunks/diff-1.1.31-ksj17xmk.mjs +1 -0
  277. package/dist/chunks/doctor-1.1.31-v4djfk2w.mjs +1 -0
  278. package/dist/chunks/doctorDiagnostic-1.1.31-gs3rsn7y.mjs +1 -0
  279. package/dist/chunks/earlyInput-1.1.31-s1vpzgtx.mjs +1 -0
  280. package/dist/chunks/effort-1.1.31-6z9vjdd8.mjs +13 -0
  281. package/dist/chunks/engine-1.1.31-rv1fs549.mjs +1 -0
  282. package/dist/chunks/envLessBridgeConfig-1.1.31-5p5f4zyz.mjs +1 -0
  283. package/dist/chunks/envUtils-1.1.31-ntcm9cr0.mjs +1 -0
  284. package/dist/chunks/environmentSelection-1.1.31-hh2weytc.mjs +1 -0
  285. package/dist/chunks/environments-1.1.31-yvgyx900.mjs +1 -0
  286. package/dist/chunks/errors-1.1.31-n434b94a.mjs +1 -0
  287. package/dist/chunks/exampleCommands-1.1.31-gntd6p22.mjs +1 -0
  288. package/dist/chunks/execFileNoThrow-1.1.31-s2n0jxqw.mjs +1 -0
  289. package/dist/chunks/exit-1.1.31-rgrjhztt.mjs +1 -0
  290. package/dist/chunks/explorer-1.1.31-cyken2c0.mjs +1 -0
  291. package/dist/chunks/export-1.1.31-nmjy9qp1.mjs +2 -0
  292. package/dist/chunks/fast-1.1.31-58c4aeze.mjs +1 -0
  293. package/dist/chunks/feedback-1.1.31-m0vj61dd.mjs +16 -0
  294. package/dist/chunks/git-1.1.31-9ytjvad9.mjs +1 -0
  295. package/dist/chunks/githubModelsCredentials-1.1.31-7pk651pz.mjs +1 -0
  296. package/dist/chunks/goal-1.1.31-2a9eh1dv.mjs +4 -0
  297. package/dist/chunks/headless-1.1.31-btcvy308.mjs +2 -0
  298. package/dist/chunks/heapdump-1.1.31-3d2namke.mjs +6 -0
  299. package/dist/chunks/help-1.1.31-sewrb4nb.mjs +1 -0
  300. package/dist/chunks/hookChains-1.1.31-72mrrs9j.mjs +3 -0
  301. package/dist/chunks/hooks-1.1.31-0gf2fwcn.mjs +1 -0
  302. package/dist/chunks/hooks-1.1.31-t1v6dwz6.mjs +79 -0
  303. package/dist/chunks/ide-1.1.31-rfvpxf98.mjs +3 -0
  304. package/dist/chunks/image-processor-napi-1.1.31-6m3111th.mjs +1 -0
  305. package/dist/chunks/import-1.1.31-n4khxgen.mjs +261 -0
  306. package/dist/chunks/inboundAttachments-1.1.31-js74nw49.mjs +1 -0
  307. package/dist/chunks/index-1.1.31-1d2w0stv.mjs +1 -0
  308. package/dist/chunks/index-1.1.31-7xyvb71n.mjs +1 -0
  309. package/dist/chunks/index-1.1.31-b35axgfq.mjs +1 -0
  310. package/dist/chunks/index-1.1.31-bb3ds6px.mjs +5 -0
  311. package/dist/chunks/index-1.1.31-d8kmfk8g.mjs +1 -0
  312. package/dist/chunks/index-1.1.31-djqjbcj1.mjs +1 -0
  313. package/dist/chunks/index-1.1.31-fbcpgjqr.mjs +1 -0
  314. package/dist/chunks/index-1.1.31-fzj8sx04.mjs +1 -0
  315. package/dist/chunks/index-1.1.31-h4jmtajm.mjs +9 -0
  316. package/dist/chunks/index-1.1.31-hxatxhrm.mjs +1 -0
  317. package/dist/chunks/index-1.1.31-jjp83m1j.mjs +1 -0
  318. package/dist/chunks/index-1.1.31-jk9pvxkr.mjs +1 -0
  319. package/dist/chunks/index-1.1.31-jy33bsc3.mjs +2 -0
  320. package/dist/chunks/index-1.1.31-kdnrzq4a.mjs +1 -0
  321. package/dist/chunks/index-1.1.31-kv3bfsq2.mjs +23 -0
  322. package/dist/chunks/index-1.1.31-mxjtqbfj.mjs +1 -0
  323. package/dist/chunks/index-1.1.31-p8xpgawg.mjs +1 -0
  324. package/dist/chunks/index-1.1.31-phw15bz8.mjs +1 -0
  325. package/dist/chunks/index-1.1.31-pr2zcv22.mjs +30 -0
  326. package/dist/chunks/index-1.1.31-q75y58jp.mjs +2 -0
  327. package/dist/chunks/index-1.1.31-qhsyqcg4.mjs +1 -0
  328. package/dist/chunks/index-1.1.31-tzvhzkcd.mjs +1 -0
  329. package/dist/chunks/index-1.1.31-wgdk68t3.mjs +9 -0
  330. package/dist/chunks/init-1.1.31-4ayzds5h.mjs +2 -0
  331. package/dist/chunks/initReplBridge-1.1.31-ebns690c.mjs +1 -0
  332. package/dist/chunks/ink-1.1.31-rx0229yp.mjs +1 -0
  333. package/dist/chunks/insights-1.1.31-t8z4k64x.mjs +870 -0
  334. package/dist/chunks/install-1.1.31-fvw0rbqj.mjs +1 -0
  335. package/dist/chunks/install-github-app-1.1.31-zmtxtda9.mjs +149 -0
  336. package/dist/chunks/install-slack-app-1.1.31-j04t1paw.mjs +1 -0
  337. package/dist/chunks/interactiveHelpers-1.1.31-xq2br8z8.mjs +1 -0
  338. package/dist/chunks/keybindings-1.1.31-a0dfh2gb.mjs +2 -0
  339. package/dist/chunks/knowledge-1.1.31-g087p4dy.mjs +2 -0
  340. package/dist/chunks/latestVersionCache-1.1.31-vyesmh7x.mjs +1 -0
  341. package/dist/chunks/loadAgentsDir-1.1.31-39mbd67g.mjs +1 -0
  342. package/dist/chunks/loadPluginHooks-1.1.31-7pnfkxj8.mjs +1 -0
  343. package/dist/chunks/log-1.1.31-75wjvmg7.mjs +1 -0
  344. package/dist/chunks/main-1.1.31-htavj2vh.mjs +1 -0
  345. package/dist/chunks/managedEnv-1.1.31-3t5j20s3.mjs +1 -0
  346. package/dist/chunks/mcp-1.1.31-g8q13cfk.mjs +1 -0
  347. package/dist/chunks/mcp-1.1.31-gnbrx51d.mjs +17 -0
  348. package/dist/chunks/mcp-1.1.31-tb2yw0fm.mjs +4 -0
  349. package/dist/chunks/mcpb-1.1.31-an4y7m57.mjs +1 -0
  350. package/dist/chunks/memory-1.1.31-6ebsap62.mjs +77 -0
  351. package/dist/chunks/model-1.1.31-dfs178qb.mjs +1 -0
  352. package/dist/chunks/model-1.1.31-yjsxjv0f.mjs +2 -0
  353. package/dist/chunks/node-1.1.31-4gqzhhpj.mjs +15 -0
  354. package/dist/chunks/node-1.1.31-bknsrjhq.mjs +1 -0
  355. package/dist/chunks/oauth-1.1.31-0dfgbykp.mjs +1 -0
  356. package/dist/chunks/openaiShim-1.1.31-bx5cgqc0.mjs +14 -0
  357. package/dist/chunks/output-style-1.1.31-fqg3pscb.mjs +1 -0
  358. package/dist/chunks/package-D2QZMRW7-1.1.31-tbwnz9re.mjs +1 -0
  359. package/dist/chunks/parseConnectUrl-1.1.31-htt07xve.mjs +1 -0
  360. package/dist/chunks/parser-1.1.31-22dqq9cd.mjs +1 -0
  361. package/dist/chunks/permissions-1.1.31-2jt71rmf.mjs +1 -0
  362. package/dist/chunks/permissions-1.1.31-8eevgx6v.mjs +3 -0
  363. package/dist/chunks/plan-1.1.31-sgds3thc.mjs +1 -0
  364. package/dist/chunks/plist-1.1.31-50ff60z2.mjs +1 -0
  365. package/dist/chunks/plugin-1.1.31-j5n91qc0.mjs +29 -0
  366. package/dist/chunks/pluginStartupCheck-1.1.31-28rvz0zj.mjs +1 -0
  367. package/dist/chunks/plugins-1.1.31-cq05wg0h.mjs +9 -0
  368. package/dist/chunks/preActionHook-1.1.31-xmrm67ge.mjs +2 -0
  369. package/dist/chunks/print-1.1.31-4n5d0cdk.mjs +57 -0
  370. package/dist/chunks/process-1.1.31-7c3jtep7.mjs +1 -0
  371. package/dist/chunks/processBashCommand-1.1.31-ycb3ehgr.mjs +1 -0
  372. package/dist/chunks/processSlashCommand-1.1.31-0bwjc7n4.mjs +9 -0
  373. package/dist/chunks/prompt-1.1.31-1krmkgep.mjs +1 -0
  374. package/dist/chunks/prompt-1.1.31-vsft6hz3.mjs +1 -0
  375. package/dist/chunks/prompts-1.1.31-jp2k44tp.mjs +1 -0
  376. package/dist/chunks/protocolHandler-1.1.31-yc5dejjn.mjs +13 -0
  377. package/dist/chunks/provider-1.1.31-sba30ytt.mjs +2 -0
  378. package/dist/chunks/providerProfiles-1.1.31-8g3p4ntd.mjs +1 -0
  379. package/dist/chunks/providerValidation-1.1.31-rnj0xtqw.mjs +6 -0
  380. package/dist/chunks/registerSubcommands-1.1.31-rtx2e9wp.mjs +26 -0
  381. package/dist/chunks/registry-1.1.31-ecyhakd2.mjs +1 -0
  382. package/dist/chunks/release-notes-1.1.31-gf017wax.mjs +5 -0
  383. package/dist/chunks/reload-plugins-1.1.31-de7agwmx.mjs +2 -0
  384. package/dist/chunks/remote-env-1.1.31-x3aaeh2d.mjs +1 -0
  385. package/dist/chunks/remoteBridgeCore-1.1.31-37k3bw33.mjs +1 -0
  386. package/dist/chunks/remoteSession-1.1.31-tkas2k4z.mjs +1 -0
  387. package/dist/chunks/rename-1.1.31-4q58stc8.mjs +1 -0
  388. package/dist/chunks/replBridgeHandle-1.1.31-64getkgv.mjs +1 -0
  389. package/dist/chunks/replLauncher-1.1.31-0n74v295.mjs +1 -0
  390. package/dist/chunks/resume-1.1.31-btzfzzf4.mjs +2 -0
  391. package/dist/chunks/rewind-1.1.31-9m2a508m.mjs +1 -0
  392. package/dist/chunks/rootOptions-1.1.31-bftj813f.mjs +1 -0
  393. package/dist/chunks/runWorkflowHeadless-1.1.31-tra2r0dx.mjs +10 -0
  394. package/dist/chunks/sandbox-adapter-1.1.31-6nyy2rag.mjs +1 -0
  395. package/dist/chunks/sandbox-toggle-1.1.31-h1n35f5k.mjs +1 -0
  396. package/dist/chunks/session-1.1.31-xb800b9s.mjs +2 -0
  397. package/dist/chunks/sessionFileAccessHooks-1.1.31-gkkyesrj.mjs +1 -0
  398. package/dist/chunks/sessionStorage-1.1.31-s7gez2t6.mjs +1 -0
  399. package/dist/chunks/settings-1.1.31-w7zfpg83.mjs +1 -0
  400. package/dist/chunks/setup-1.1.31-b6kjgetf.mjs +12 -0
  401. package/dist/chunks/sinks-1.1.31-g9n7r1nh.mjs +1 -0
  402. package/dist/chunks/skills-1.1.31-ag9r3asv.mjs +1 -0
  403. package/dist/chunks/startupProfiler-1.1.31-h19httmy.mjs +1 -0
  404. package/dist/chunks/startupUpdateCheck-1.1.31-f3g7de65.mjs +1 -0
  405. package/dist/chunks/state-1.1.31-tbc1c6c2.mjs +1 -0
  406. package/dist/chunks/stats-1.1.31-71xjrkax.mjs +1 -0
  407. package/dist/chunks/status-1.1.31-n65g11nc.mjs +1 -0
  408. package/dist/chunks/stickers-1.1.31-eze0atpf.mjs +1 -0
  409. package/dist/chunks/subprocessEnv-1.1.31-r788gbdf.mjs +1 -0
  410. package/dist/chunks/tasks-1.1.31-tbc0x51m.mjs +1 -0
  411. package/dist/chunks/teamHelpers-1.1.31-yt18sjr2.mjs +1 -0
  412. package/dist/chunks/teammateModeSnapshot-1.1.31-f3bgkc7m.mjs +1 -0
  413. package/dist/chunks/teleport-1.1.31-4mvcqr5j.mjs +1 -0
  414. package/dist/chunks/terminalSetup-1.1.31-y574v0gj.mjs +1 -0
  415. package/dist/chunks/theme-1.1.31-2nth8fxb.mjs +1 -0
  416. package/dist/chunks/thinkback-1.1.31-yt5309kx.mjs +1 -0
  417. package/dist/chunks/thinkback-play-1.1.31-n61vtr8q.mjs +1 -0
  418. package/dist/chunks/toolPool-1.1.31-2wrjcf13.mjs +1 -0
  419. package/dist/chunks/toolSearch-1.1.31-vr7hen30.mjs +1 -0
  420. package/dist/chunks/tools-1.1.31-xgrxwk7j.mjs +1 -0
  421. package/dist/chunks/trustedDevice-1.1.31-ad2f2kvj.mjs +1 -0
  422. package/dist/chunks/turndown.cjs-1.1.31-mtgg85tg.mjs +69 -0
  423. package/dist/chunks/types-1.1.31-ery244ea.mjs +1 -0
  424. package/dist/chunks/ultrareviewCommand-1.1.31-fs3fn2qp.mjs +4 -0
  425. package/dist/chunks/update-1.1.31-j79f7es2.mjs +72 -0
  426. package/dist/chunks/upload-1.1.31-ehqzz7x7.mjs +7 -0
  427. package/dist/chunks/upstreamproxy-1.1.31-z70ctdj3.mjs +14 -0
  428. package/dist/chunks/url-handler-napi-1.1.31-e0hbcnyw.mjs +1 -0
  429. package/dist/chunks/usage-1.1.31-qgmy1ktr.mjs +1 -0
  430. package/dist/chunks/util-1.1.31-jy81jvt3.mjs +1 -0
  431. package/dist/chunks/utils-1.1.31-3jpj59nn.mjs +1 -0
  432. package/dist/chunks/vim-1.1.31-wbbckx93.mjs +1 -0
  433. package/dist/chunks/watchLoop-1.1.31-v994wq2d.mjs +13 -0
  434. package/dist/chunks/watcher-1.1.31-zr0darq0.mjs +1 -0
  435. package/dist/chunks/wiki-1.1.31-7gcn31zm.mjs +132 -0
  436. package/dist/chunks/workflows-1.1.31-ek8twhyg.mjs +1 -0
  437. package/dist/chunks/worktree-1.1.31-krxr11er.mjs +1 -0
  438. package/dist/chunks/worktreeModeEnabled-1.1.31-m3t752mj.mjs +1 -0
  439. package/dist/chunks/wrapper-1.1.31-037s1v4h.mjs +7 -0
  440. package/dist/cli.mjs +2 -2
  441. package/package.json +9 -9
  442. package/dist/chunks/AgentTool-1.1.30-3wq8zzaa.mjs +0 -1
  443. package/dist/chunks/App-1.1.30-ywb53g2c.mjs +0 -1
  444. package/dist/chunks/ApproveApiKey-1.1.30-wtpe9n8e.mjs +0 -1
  445. package/dist/chunks/AssistantSessionChooser-1.1.30-776xks64.mjs +0 -1
  446. package/dist/chunks/AutoModeOptInDialog-1.1.30-bjm91hx0.mjs +0 -1
  447. package/dist/chunks/BypassPermissionsModeDialog-1.1.30-rcy7msd9.mjs +0 -1
  448. package/dist/chunks/ClaudeMdExternalIncludesDialog-1.1.30-bexsqxcb.mjs +0 -1
  449. package/dist/chunks/ConsoleOAuthFlow-1.1.30-jfhq3h4z.mjs +0 -1
  450. package/dist/chunks/DiffDialog-1.1.30-kqds97f2.mjs +0 -6
  451. package/dist/chunks/Doctor-1.1.30-48qzfckm.mjs +0 -1
  452. package/dist/chunks/ExplorerDialog-1.1.30-tfv4wc5m.mjs +0 -6
  453. package/dist/chunks/ITermBackend-1.1.30-z31ecx5v.mjs +0 -1
  454. package/dist/chunks/InvalidConfigDialog-1.1.30-f17w1kzx.mjs +0 -1
  455. package/dist/chunks/InvalidSettingsDialog-1.1.30-fzajgngq.mjs +0 -1
  456. package/dist/chunks/MigrationDialog-1.1.30-15c4h452.mjs +0 -1
  457. package/dist/chunks/Onboarding-1.1.30-xajg2p3r.mjs +0 -1
  458. package/dist/chunks/ProviderManager-1.1.30-8jrhxd1r.mjs +0 -1
  459. package/dist/chunks/REPL-1.1.30-74pzzw1d.mjs +0 -1
  460. package/dist/chunks/ResumeConversation-1.1.30-8bmshptz.mjs +0 -1
  461. package/dist/chunks/SnapshotUpdateDialog-1.1.30-v5fnwt30.mjs +0 -1
  462. package/dist/chunks/TeleportProgress-1.1.30-v55nsv7g.mjs +0 -1
  463. package/dist/chunks/TeleportRepoMismatchDialog-1.1.30-2hg56v1b.mjs +0 -1
  464. package/dist/chunks/TeleportResumeWrapper-1.1.30-r2hwd3a6.mjs +0 -1
  465. package/dist/chunks/TmuxBackend-1.1.30-y6hny4s2.mjs +0 -9
  466. package/dist/chunks/ToolSearchTool-1.1.30-cq18pvam.mjs +0 -1
  467. package/dist/chunks/TrustDialog-1.1.30-qp3cr0fk.mjs +0 -1
  468. package/dist/chunks/activeProvider-1.1.30-ydaqb760.mjs +0 -1
  469. package/dist/chunks/add-dir-1.1.30-gta8twv0.mjs +0 -1
  470. package/dist/chunks/agentTypes-1.1.30-rxcmv28v.mjs +0 -1
  471. package/dist/chunks/agents-1.1.30-d5hxfnnt.mjs +0 -3
  472. package/dist/chunks/agents-1.1.30-q3f25044.mjs +0 -110
  473. package/dist/chunks/api-1.1.30-30hng0e4.mjs +0 -1
  474. package/dist/chunks/asciicast-1.1.30-mhcedd5b.mjs +0 -1
  475. package/dist/chunks/assistant-1.1.30-1zxsr09t.mjs +0 -1
  476. package/dist/chunks/auth-1.1.30-mmymct98.mjs +0 -1
  477. package/dist/chunks/auth-1.1.30-ntfwzwxz.mjs +0 -1
  478. package/dist/chunks/autoMode-1.1.30-9jd1avyj.mjs +0 -52
  479. package/dist/chunks/autoModeSetup-1.1.30-8cnp296z.mjs +0 -44
  480. package/dist/chunks/autoUpdater-1.1.30-f0wbf5ha.mjs +0 -1
  481. package/dist/chunks/backgroundHousekeeping-1.1.30-b7t4y9th.mjs +0 -1
  482. package/dist/chunks/branch-1.1.30-x77nhthz.mjs +0 -4
  483. package/dist/chunks/bridge-1.1.30-scfmh172.mjs +0 -2
  484. package/dist/chunks/bridgeConfig-1.1.30-8hd92b6p.mjs +0 -1
  485. package/dist/chunks/bridgeEnabled-1.1.30-n5c6p8kd.mjs +0 -1
  486. package/dist/chunks/bridgeMain-1.1.30-9cpc29zx.mjs +0 -88
  487. package/dist/chunks/bridgePointer-1.1.30-gsa0eerc.mjs +0 -1
  488. package/dist/chunks/btw-1.1.30-gyh84rd1.mjs +0 -1
  489. package/dist/chunks/buddy-1.1.30-vzfs4xt1.mjs +0 -3
  490. package/dist/chunks/cache-probe-1.1.30-qjppzj5p.mjs +0 -21
  491. package/dist/chunks/cacheStats-1.1.30-w1c0ekr4.mjs +0 -4
  492. package/dist/chunks/caches-1.1.30-6rye5cdg.mjs +0 -1
  493. package/dist/chunks/cd-1.1.30-tn402589.mjs +0 -3
  494. package/dist/chunks/claudeDesktop-1.1.30-sm5ncwqz.mjs +0 -1
  495. package/dist/chunks/claudemd-1.1.30-36eyf63s.mjs +0 -1
  496. package/dist/chunks/clear-1.1.30-p5p9kp96.mjs +0 -1
  497. package/dist/chunks/clearTerminal-1.1.30-nrdembs6.mjs +0 -1
  498. package/dist/chunks/cli-1.1.30-053d5ph7.mjs +0 -2
  499. package/dist/chunks/cli-1.1.30-092dkm0p.mjs +0 -2
  500. package/dist/chunks/cli-1.1.30-0e0e9msg.mjs +0 -17
  501. package/dist/chunks/cli-1.1.30-0fz758j0.mjs +0 -2
  502. package/dist/chunks/cli-1.1.30-0qcyzbs1.mjs +0 -2
  503. package/dist/chunks/cli-1.1.30-0yafp3ky.mjs +0 -2
  504. package/dist/chunks/cli-1.1.30-1j4dyr5r.mjs +0 -2
  505. package/dist/chunks/cli-1.1.30-1k2bwved.mjs +0 -3
  506. package/dist/chunks/cli-1.1.30-1qczaqkt.mjs +0 -2
  507. package/dist/chunks/cli-1.1.30-1wfffyq2.mjs +0 -2
  508. package/dist/chunks/cli-1.1.30-1xmhk219.mjs +0 -2
  509. package/dist/chunks/cli-1.1.30-1ybfyckn.mjs +0 -2
  510. package/dist/chunks/cli-1.1.30-1zsgv3yp.mjs +0 -2
  511. package/dist/chunks/cli-1.1.30-2af3eeg6.mjs +0 -2
  512. package/dist/chunks/cli-1.1.30-2cmsx74f.mjs +0 -26
  513. package/dist/chunks/cli-1.1.30-2hw4vdpg.mjs +0 -2
  514. package/dist/chunks/cli-1.1.30-2pqs37e0.mjs +0 -3
  515. package/dist/chunks/cli-1.1.30-2y4yj9sd.mjs +0 -2
  516. package/dist/chunks/cli-1.1.30-2yd2af56.mjs +0 -50
  517. package/dist/chunks/cli-1.1.30-2zq3aea6.mjs +0 -2
  518. package/dist/chunks/cli-1.1.30-322advqh.mjs +0 -4
  519. package/dist/chunks/cli-1.1.30-3b1nw95m.mjs +0 -2
  520. package/dist/chunks/cli-1.1.30-3c6j35rs.mjs +0 -2
  521. package/dist/chunks/cli-1.1.30-3x86c2pa.mjs +0 -24
  522. package/dist/chunks/cli-1.1.30-489cr054.mjs +0 -2
  523. package/dist/chunks/cli-1.1.30-4d90v0pd.mjs +0 -6
  524. package/dist/chunks/cli-1.1.30-4kytbyxq.mjs +0 -15
  525. package/dist/chunks/cli-1.1.30-4t03vay7.mjs +0 -2
  526. package/dist/chunks/cli-1.1.30-4wqfr0ya.mjs +0 -2
  527. package/dist/chunks/cli-1.1.30-4zrfbe17.mjs +0 -2
  528. package/dist/chunks/cli-1.1.30-51kze0eh.mjs +0 -2
  529. package/dist/chunks/cli-1.1.30-569esepc.mjs +0 -60
  530. package/dist/chunks/cli-1.1.30-57b410qh.mjs +0 -25
  531. package/dist/chunks/cli-1.1.30-5cc6nada.mjs +0 -2
  532. package/dist/chunks/cli-1.1.30-5f76gnk2.mjs +0 -2
  533. package/dist/chunks/cli-1.1.30-5j2mdj81.mjs +0 -2
  534. package/dist/chunks/cli-1.1.30-5pn20fxz.mjs +0 -2
  535. package/dist/chunks/cli-1.1.30-5r9pakw5.mjs +0 -2
  536. package/dist/chunks/cli-1.1.30-63ndyxgm.mjs +0 -2
  537. package/dist/chunks/cli-1.1.30-6eaj3n76.mjs +0 -9
  538. package/dist/chunks/cli-1.1.30-6phpx599.mjs +0 -2
  539. package/dist/chunks/cli-1.1.30-6pp4z5px.mjs +0 -2
  540. package/dist/chunks/cli-1.1.30-7a064pfm.mjs +0 -2
  541. package/dist/chunks/cli-1.1.30-7bdj31x8.mjs +0 -2
  542. package/dist/chunks/cli-1.1.30-7dtpd1ra.mjs +0 -2
  543. package/dist/chunks/cli-1.1.30-7h45a0x6.mjs +0 -6
  544. package/dist/chunks/cli-1.1.30-7ma427qh.mjs +0 -8
  545. package/dist/chunks/cli-1.1.30-7q8f7mp7.mjs +0 -2
  546. package/dist/chunks/cli-1.1.30-84cemtwn.mjs +0 -4
  547. package/dist/chunks/cli-1.1.30-87zsgch6.mjs +0 -21
  548. package/dist/chunks/cli-1.1.30-8a5gwcde.mjs +0 -2
  549. package/dist/chunks/cli-1.1.30-8e36e2c1.mjs +0 -2
  550. package/dist/chunks/cli-1.1.30-8hcc4gax.mjs +0 -15
  551. package/dist/chunks/cli-1.1.30-8t3c3a4k.mjs +0 -20
  552. package/dist/chunks/cli-1.1.30-8vr9ea9g.mjs +0 -2
  553. package/dist/chunks/cli-1.1.30-8zyep40e.mjs +0 -2
  554. package/dist/chunks/cli-1.1.30-902jyjpx.mjs +0 -2
  555. package/dist/chunks/cli-1.1.30-917y0q4m.mjs +0 -2
  556. package/dist/chunks/cli-1.1.30-92t0b3hs.mjs +0 -2
  557. package/dist/chunks/cli-1.1.30-94vhzqcd.mjs +0 -2
  558. package/dist/chunks/cli-1.1.30-9685r12p.mjs +0 -2
  559. package/dist/chunks/cli-1.1.30-9h8mm4pg.mjs +0 -2
  560. package/dist/chunks/cli-1.1.30-9m8jc7as.mjs +0 -4
  561. package/dist/chunks/cli-1.1.30-9rn8qz9x.mjs +0 -2
  562. package/dist/chunks/cli-1.1.30-9s9qp1m7.mjs +0 -2
  563. package/dist/chunks/cli-1.1.30-a1phf5vm.mjs +0 -2
  564. package/dist/chunks/cli-1.1.30-a2ww16zh.mjs +0 -2
  565. package/dist/chunks/cli-1.1.30-a2xctbvc.mjs +0 -18
  566. package/dist/chunks/cli-1.1.30-amecp2v0.mjs +0 -3
  567. package/dist/chunks/cli-1.1.30-aqvjv0jh.mjs +0 -4
  568. package/dist/chunks/cli-1.1.30-aw93z4yt.mjs +0 -2
  569. package/dist/chunks/cli-1.1.30-b1mqmct7.mjs +0 -4
  570. package/dist/chunks/cli-1.1.30-bfqnz691.mjs +0 -2
  571. package/dist/chunks/cli-1.1.30-bgrp9j3q.mjs +0 -2
  572. package/dist/chunks/cli-1.1.30-bwdw42tf.mjs +0 -24
  573. package/dist/chunks/cli-1.1.30-bzjamz5p.mjs +0 -2
  574. package/dist/chunks/cli-1.1.30-c0b5kmhr.mjs +0 -2
  575. package/dist/chunks/cli-1.1.30-c2e2yeaj.mjs +0 -2
  576. package/dist/chunks/cli-1.1.30-c44kpd39.mjs +0 -2
  577. package/dist/chunks/cli-1.1.30-c70p43p6.mjs +0 -133
  578. package/dist/chunks/cli-1.1.30-c9xtenrd.mjs +0 -2
  579. package/dist/chunks/cli-1.1.30-ca1a9ntm.mjs +0 -2
  580. package/dist/chunks/cli-1.1.30-cb34mrvh.mjs +0 -2
  581. package/dist/chunks/cli-1.1.30-cgcdnarw.mjs +0 -2
  582. package/dist/chunks/cli-1.1.30-cjetc80p.mjs +0 -2
  583. package/dist/chunks/cli-1.1.30-cwc68erm.mjs +0 -2
  584. package/dist/chunks/cli-1.1.30-d3n6dp6r.mjs +0 -2
  585. package/dist/chunks/cli-1.1.30-d8chymja.mjs +0 -2
  586. package/dist/chunks/cli-1.1.30-d9sphwgb.mjs +0 -3
  587. package/dist/chunks/cli-1.1.30-dbbhdfn1.mjs +0 -2
  588. package/dist/chunks/cli-1.1.30-dv38qw87.mjs +0 -3
  589. package/dist/chunks/cli-1.1.30-dy1jvt4f.mjs +0 -2
  590. package/dist/chunks/cli-1.1.30-e0fcx44n.mjs +0 -2
  591. package/dist/chunks/cli-1.1.30-e15hq24m.mjs +0 -2
  592. package/dist/chunks/cli-1.1.30-eg5krttf.mjs +0 -2
  593. package/dist/chunks/cli-1.1.30-ehk76t59.mjs +0 -2
  594. package/dist/chunks/cli-1.1.30-em031y3s.mjs +0 -2
  595. package/dist/chunks/cli-1.1.30-endh0hmx.mjs +0 -2
  596. package/dist/chunks/cli-1.1.30-ensp6hjk.mjs +0 -2
  597. package/dist/chunks/cli-1.1.30-erqva8zn.mjs +0 -2
  598. package/dist/chunks/cli-1.1.30-etnn22zf.mjs +0 -2
  599. package/dist/chunks/cli-1.1.30-f6tarbyn.mjs +0 -2
  600. package/dist/chunks/cli-1.1.30-f8qnd0hw.mjs +0 -20
  601. package/dist/chunks/cli-1.1.30-f9cckkn6.mjs +0 -7
  602. package/dist/chunks/cli-1.1.30-f9tp1b8r.mjs +0 -6
  603. package/dist/chunks/cli-1.1.30-fa5djn9v.mjs +0 -2
  604. package/dist/chunks/cli-1.1.30-facztg9n.mjs +0 -133
  605. package/dist/chunks/cli-1.1.30-fct5wt67.mjs +0 -2
  606. package/dist/chunks/cli-1.1.30-fm4mj7wy.mjs +0 -2
  607. package/dist/chunks/cli-1.1.30-fpa799y4.mjs +0 -3
  608. package/dist/chunks/cli-1.1.30-fzan6qjf.mjs +0 -2
  609. package/dist/chunks/cli-1.1.30-g17zgmea.mjs +0 -3
  610. package/dist/chunks/cli-1.1.30-g3qd3ec3.mjs +0 -2
  611. package/dist/chunks/cli-1.1.30-g4c9mx6r.mjs +0 -2
  612. package/dist/chunks/cli-1.1.30-g9qsgq1r.mjs +0 -2
  613. package/dist/chunks/cli-1.1.30-gdmbygdz.mjs +0 -2
  614. package/dist/chunks/cli-1.1.30-gev0f31f.mjs +0 -24
  615. package/dist/chunks/cli-1.1.30-gk8x7f6m.mjs +0 -2
  616. package/dist/chunks/cli-1.1.30-gncy6j5b.mjs +0 -2
  617. package/dist/chunks/cli-1.1.30-gv4z21b9.mjs +0 -4
  618. package/dist/chunks/cli-1.1.30-gvp1pabq.mjs +0 -2
  619. package/dist/chunks/cli-1.1.30-h5yj1axw.mjs +0 -6
  620. package/dist/chunks/cli-1.1.30-h9pfkdf2.mjs +0 -2
  621. package/dist/chunks/cli-1.1.30-ha9qd4n4.mjs +0 -2
  622. package/dist/chunks/cli-1.1.30-he73pyqy.mjs +0 -2
  623. package/dist/chunks/cli-1.1.30-hncb22wm.mjs +0 -2
  624. package/dist/chunks/cli-1.1.30-hxy861gq.mjs +0 -2
  625. package/dist/chunks/cli-1.1.30-j29r8pgr.mjs +0 -4
  626. package/dist/chunks/cli-1.1.30-j2wahkcp.mjs +0 -6
  627. package/dist/chunks/cli-1.1.30-j46p2me4.mjs +0 -3
  628. package/dist/chunks/cli-1.1.30-jb34rbbt.mjs +0 -7
  629. package/dist/chunks/cli-1.1.30-jevxd0jk.mjs +0 -2
  630. package/dist/chunks/cli-1.1.30-jgxnrbme.mjs +0 -2
  631. package/dist/chunks/cli-1.1.30-jvqc1jfc.mjs +0 -2
  632. package/dist/chunks/cli-1.1.30-jyvb3jrk.mjs +0 -3
  633. package/dist/chunks/cli-1.1.30-kx2svwf6.mjs +0 -2
  634. package/dist/chunks/cli-1.1.30-kzbhw1mf.mjs +0 -2
  635. package/dist/chunks/cli-1.1.30-m5fx6y02.mjs +0 -2
  636. package/dist/chunks/cli-1.1.30-m5ta5zwh.mjs +0 -2
  637. package/dist/chunks/cli-1.1.30-m62yy9h8.mjs +0 -2
  638. package/dist/chunks/cli-1.1.30-mebteknr.mjs +0 -206
  639. package/dist/chunks/cli-1.1.30-mef66hvr.mjs +0 -10
  640. package/dist/chunks/cli-1.1.30-mgj06132.mjs +0 -2
  641. package/dist/chunks/cli-1.1.30-mpmg84pk.mjs +0 -3
  642. package/dist/chunks/cli-1.1.30-mz5a585j.mjs +0 -9
  643. package/dist/chunks/cli-1.1.30-n306djbd.mjs +0 -2
  644. package/dist/chunks/cli-1.1.30-naaxghkh.mjs +0 -2
  645. package/dist/chunks/cli-1.1.30-nhfsct38.mjs +0 -2
  646. package/dist/chunks/cli-1.1.30-p3m6d618.mjs +0 -2
  647. package/dist/chunks/cli-1.1.30-p63h2njx.mjs +0 -42
  648. package/dist/chunks/cli-1.1.30-p6bsj13y.mjs +0 -2
  649. package/dist/chunks/cli-1.1.30-pc2wp50b.mjs +0 -5504
  650. package/dist/chunks/cli-1.1.30-pc6nevmd.mjs +0 -2
  651. package/dist/chunks/cli-1.1.30-pez1sh7w.mjs +0 -2
  652. package/dist/chunks/cli-1.1.30-pg6jbgcq.mjs +0 -12
  653. package/dist/chunks/cli-1.1.30-pgx35gqd.mjs +0 -2
  654. package/dist/chunks/cli-1.1.30-pw08jvvr.mjs +0 -3
  655. package/dist/chunks/cli-1.1.30-pzp496y6.mjs +0 -2
  656. package/dist/chunks/cli-1.1.30-q00wdmf9.mjs +0 -2
  657. package/dist/chunks/cli-1.1.30-q51sf5gk.mjs +0 -2
  658. package/dist/chunks/cli-1.1.30-q8sd13v9.mjs +0 -2
  659. package/dist/chunks/cli-1.1.30-q8xgmv1x.mjs +0 -39
  660. package/dist/chunks/cli-1.1.30-qcwzchrc.mjs +0 -2
  661. package/dist/chunks/cli-1.1.30-qdnzwgr7.mjs +0 -2
  662. package/dist/chunks/cli-1.1.30-qjdmnkfj.mjs +0 -2
  663. package/dist/chunks/cli-1.1.30-qm4vn98q.mjs +0 -2
  664. package/dist/chunks/cli-1.1.30-qn71nvqn.mjs +0 -2
  665. package/dist/chunks/cli-1.1.30-qykdr3bk.mjs +0 -2
  666. package/dist/chunks/cli-1.1.30-r4ap6bq3.mjs +0 -4
  667. package/dist/chunks/cli-1.1.30-rdbwn1xc.mjs +0 -2
  668. package/dist/chunks/cli-1.1.30-rdgv4qpw.mjs +0 -2
  669. package/dist/chunks/cli-1.1.30-s27erhy7.mjs +0 -2
  670. package/dist/chunks/cli-1.1.30-s2b0zbj0.mjs +0 -1
  671. package/dist/chunks/cli-1.1.30-s7f7x42j.mjs +0 -2
  672. package/dist/chunks/cli-1.1.30-sdxgwxfm.mjs +0 -2
  673. package/dist/chunks/cli-1.1.30-sgm7bcet.mjs +0 -58
  674. package/dist/chunks/cli-1.1.30-sr3wnzt7.mjs +0 -17
  675. package/dist/chunks/cli-1.1.30-syea4bx7.mjs +0 -2
  676. package/dist/chunks/cli-1.1.30-t27wxks6.mjs +0 -6
  677. package/dist/chunks/cli-1.1.30-tc8vq728.mjs +0 -15
  678. package/dist/chunks/cli-1.1.30-tcz89gqa.mjs +0 -2
  679. package/dist/chunks/cli-1.1.30-tt85hxby.mjs +0 -25
  680. package/dist/chunks/cli-1.1.30-ty0pw373.mjs +0 -24
  681. package/dist/chunks/cli-1.1.30-vcexen3n.mjs +0 -2
  682. package/dist/chunks/cli-1.1.30-vda14n5e.mjs +0 -2
  683. package/dist/chunks/cli-1.1.30-vf6wrqmh.mjs +0 -2
  684. package/dist/chunks/cli-1.1.30-vhh5kt6v.mjs +0 -2
  685. package/dist/chunks/cli-1.1.30-vrgnzjd2.mjs +0 -2
  686. package/dist/chunks/cli-1.1.30-w9wdamqc.mjs +0 -34
  687. package/dist/chunks/cli-1.1.30-wfs29rd9.mjs +0 -12
  688. package/dist/chunks/cli-1.1.30-wgmdrp34.mjs +0 -2
  689. package/dist/chunks/cli-1.1.30-wjx6yhry.mjs +0 -2
  690. package/dist/chunks/cli-1.1.30-wmpgbhw0.mjs +0 -16
  691. package/dist/chunks/cli-1.1.30-x76str7r.mjs +0 -3
  692. package/dist/chunks/cli-1.1.30-x8wzmxay.mjs +0 -2
  693. package/dist/chunks/cli-1.1.30-x960htw5.mjs +0 -2
  694. package/dist/chunks/cli-1.1.30-xhk0n48x.mjs +0 -2
  695. package/dist/chunks/cli-1.1.30-xqb55m51.mjs +0 -2
  696. package/dist/chunks/cli-1.1.30-xrrzhx6s.mjs +0 -5
  697. package/dist/chunks/cli-1.1.30-xxvagrpc.mjs +0 -2
  698. package/dist/chunks/cli-1.1.30-y1pn2vb5.mjs +0 -2
  699. package/dist/chunks/cli-1.1.30-ycv7a9hg.mjs +0 -2
  700. package/dist/chunks/cli-1.1.30-ygdwz4ed.mjs +0 -4
  701. package/dist/chunks/cli-1.1.30-yt59tc1t.mjs +0 -2
  702. package/dist/chunks/cli-1.1.30-yw5qpt76.mjs +0 -2
  703. package/dist/chunks/cli-1.1.30-yy92v8yq.mjs +0 -63
  704. package/dist/chunks/cli-1.1.30-z1e7k65a.mjs +0 -5
  705. package/dist/chunks/cli-1.1.30-z9xfs5zq.mjs +0 -2
  706. package/dist/chunks/cli-1.1.30-zfz29t3v.mjs +0 -3
  707. package/dist/chunks/cli-1.1.30-zj3nk96z.mjs +0 -2
  708. package/dist/chunks/cli-1.1.30-zm2e2zvb.mjs +0 -2
  709. package/dist/chunks/cli-1.1.30-zpss0nht.mjs +0 -3
  710. package/dist/chunks/cli-1.1.30-zxkfqcvj.mjs +0 -2
  711. package/dist/chunks/cli-1.1.30-zych8w4z.mjs +0 -45
  712. package/dist/chunks/client-1.1.30-6xd07jrd.mjs +0 -1
  713. package/dist/chunks/color-1.1.30-yhxh49s0.mjs +0 -1
  714. package/dist/chunks/compact-1.1.30-wxxb111z.mjs +0 -3
  715. package/dist/chunks/config-1.1.30-4gdp5w7v.mjs +0 -1
  716. package/dist/chunks/config-1.1.30-s02sv9vf.mjs +0 -1
  717. package/dist/chunks/constants-1.1.30-g1xm727k.mjs +0 -1
  718. package/dist/chunks/context-1.1.30-pepgc836.mjs +0 -1
  719. package/dist/chunks/context-noninteractive-1.1.30-ahdmm09h.mjs +0 -1
  720. package/dist/chunks/conversation-1.1.30-93marv3a.mjs +0 -1
  721. package/dist/chunks/copilotHeaders-1.1.30-ypx3j03s.mjs +0 -1
  722. package/dist/chunks/copy-1.1.30-bsfx33za.mjs +0 -9
  723. package/dist/chunks/cost-1.1.30-rhgx2a0h.mjs +0 -1
  724. package/dist/chunks/createSSHSession-1.1.30-p5qve4c1.mjs +0 -1
  725. package/dist/chunks/createSession-1.1.30-rwvvv9na.mjs +0 -1
  726. package/dist/chunks/debug-1.1.30-j1zw0q5b.mjs +0 -1
  727. package/dist/chunks/defaultActionDeps-1.1.30-5gkcnqp5.mjs +0 -1481
  728. package/dist/chunks/desktop-1.1.30-rwbfgek7.mjs +0 -1
  729. package/dist/chunks/detectRepository-1.1.30-2xwvggy6.mjs +0 -1
  730. package/dist/chunks/detection-1.1.30-kkar89w6.mjs +0 -1
  731. package/dist/chunks/diff-1.1.30-t1r0x9g4.mjs +0 -1
  732. package/dist/chunks/doctor-1.1.30-cvqts45f.mjs +0 -1
  733. package/dist/chunks/doctorDiagnostic-1.1.30-smg0046q.mjs +0 -1
  734. package/dist/chunks/earlyInput-1.1.30-cpx4e858.mjs +0 -1
  735. package/dist/chunks/effort-1.1.30-jdxyeqz7.mjs +0 -13
  736. package/dist/chunks/engine-1.1.30-8qhtasfe.mjs +0 -1
  737. package/dist/chunks/envLessBridgeConfig-1.1.30-jnz4sy6x.mjs +0 -1
  738. package/dist/chunks/envUtils-1.1.30-y5dyaydm.mjs +0 -1
  739. package/dist/chunks/environmentSelection-1.1.30-w1z47qad.mjs +0 -1
  740. package/dist/chunks/environments-1.1.30-sjscvfn9.mjs +0 -1
  741. package/dist/chunks/errors-1.1.30-7cmbc98j.mjs +0 -1
  742. package/dist/chunks/exampleCommands-1.1.30-jx9hvt2q.mjs +0 -1
  743. package/dist/chunks/execFileNoThrow-1.1.30-dqrsra7k.mjs +0 -1
  744. package/dist/chunks/exit-1.1.30-m2yzbcth.mjs +0 -1
  745. package/dist/chunks/explorer-1.1.30-5tat30es.mjs +0 -1
  746. package/dist/chunks/export-1.1.30-545a0v8x.mjs +0 -2
  747. package/dist/chunks/extra-usage-1.1.30-5k9b4t6b.mjs +0 -1
  748. package/dist/chunks/extra-usage-noninteractive-1.1.30-h5fqbtg3.mjs +0 -1
  749. package/dist/chunks/fast-1.1.30-91wr1vy4.mjs +0 -1
  750. package/dist/chunks/feedback-1.1.30-36xrb399.mjs +0 -14
  751. package/dist/chunks/firstPartyEventLogger-1.1.30-be1ke8r3.mjs +0 -1
  752. package/dist/chunks/git-1.1.30-sxa8xf85.mjs +0 -1
  753. package/dist/chunks/githubModelsCredentials-1.1.30-m7a8kdwg.mjs +0 -1
  754. package/dist/chunks/goal-1.1.30-71sj2735.mjs +0 -4
  755. package/dist/chunks/growthbook-1.1.30-rx44zvrq.mjs +0 -1
  756. package/dist/chunks/headless-1.1.30-h98t9mfb.mjs +0 -2
  757. package/dist/chunks/heapdump-1.1.30-82m1rvjw.mjs +0 -6
  758. package/dist/chunks/help-1.1.30-vnsg1001.mjs +0 -1
  759. package/dist/chunks/hookChains-1.1.30-tc5ff3xr.mjs +0 -3
  760. package/dist/chunks/hooks-1.1.30-2sctf45c.mjs +0 -79
  761. package/dist/chunks/hooks-1.1.30-707b390t.mjs +0 -1
  762. package/dist/chunks/ide-1.1.30-e8neepsj.mjs +0 -3
  763. package/dist/chunks/image-processor-napi-1.1.30-gcqgfeec.mjs +0 -1
  764. package/dist/chunks/import-1.1.30-g0p9rj63.mjs +0 -261
  765. package/dist/chunks/inboundAttachments-1.1.30-a5p4ftqg.mjs +0 -1
  766. package/dist/chunks/index-1.1.30-00d73fwg.mjs +0 -1
  767. package/dist/chunks/index-1.1.30-0sdck5q1.mjs +0 -9
  768. package/dist/chunks/index-1.1.30-38597fv3.mjs +0 -5
  769. package/dist/chunks/index-1.1.30-3z58evcj.mjs +0 -1
  770. package/dist/chunks/index-1.1.30-5k081eyt.mjs +0 -1
  771. package/dist/chunks/index-1.1.30-8n15b4e3.mjs +0 -2
  772. package/dist/chunks/index-1.1.30-9nx8fm72.mjs +0 -1
  773. package/dist/chunks/index-1.1.30-9zfyk995.mjs +0 -23
  774. package/dist/chunks/index-1.1.30-ba27qy75.mjs +0 -1
  775. package/dist/chunks/index-1.1.30-cddndqaa.mjs +0 -1
  776. package/dist/chunks/index-1.1.30-cnbcr7zp.mjs +0 -1
  777. package/dist/chunks/index-1.1.30-f65yg5kz.mjs +0 -9
  778. package/dist/chunks/index-1.1.30-fwvhky1a.mjs +0 -1
  779. package/dist/chunks/index-1.1.30-hmnpjmd5.mjs +0 -1
  780. package/dist/chunks/index-1.1.30-nemv1gaj.mjs +0 -1
  781. package/dist/chunks/index-1.1.30-pnpy7v0s.mjs +0 -1
  782. package/dist/chunks/index-1.1.30-q4x054c8.mjs +0 -2
  783. package/dist/chunks/index-1.1.30-racdqjba.mjs +0 -1
  784. package/dist/chunks/index-1.1.30-scb66j47.mjs +0 -1
  785. package/dist/chunks/index-1.1.30-tfz6950h.mjs +0 -30
  786. package/dist/chunks/index-1.1.30-tx381qq5.mjs +0 -1
  787. package/dist/chunks/index-1.1.30-w4zhj1qd.mjs +0 -1
  788. package/dist/chunks/index-1.1.30-xxh224ea.mjs +0 -1
  789. package/dist/chunks/init-1.1.30-txzpz2vm.mjs +0 -1
  790. package/dist/chunks/initReplBridge-1.1.30-hkrhwfr3.mjs +0 -1
  791. package/dist/chunks/ink-1.1.30-av1t4b54.mjs +0 -1
  792. package/dist/chunks/insights-1.1.30-nbs0zndp.mjs +0 -870
  793. package/dist/chunks/install-1.1.30-kd3vnaat.mjs +0 -1
  794. package/dist/chunks/install-github-app-1.1.30-ea78ytf6.mjs +0 -149
  795. package/dist/chunks/install-slack-app-1.1.30-v2q1py01.mjs +0 -1
  796. package/dist/chunks/instrumentation-1.1.30-20686d7h.mjs +0 -1
  797. package/dist/chunks/interactiveHelpers-1.1.30-rd0zzjyp.mjs +0 -1
  798. package/dist/chunks/keybindings-1.1.30-157aap7w.mjs +0 -2
  799. package/dist/chunks/knowledge-1.1.30-4mcx1txk.mjs +0 -2
  800. package/dist/chunks/latestVersionCache-1.1.30-65qvjpys.mjs +0 -1
  801. package/dist/chunks/loadAgentsDir-1.1.30-nfrca2zv.mjs +0 -1
  802. package/dist/chunks/loadPluginHooks-1.1.30-wa8regkc.mjs +0 -1
  803. package/dist/chunks/log-1.1.30-nh81h0jz.mjs +0 -1
  804. package/dist/chunks/main-1.1.30-87zf4enf.mjs +0 -1
  805. package/dist/chunks/managedEnv-1.1.30-p38nd6r6.mjs +0 -1
  806. package/dist/chunks/mcp-1.1.30-egynhffm.mjs +0 -17
  807. package/dist/chunks/mcp-1.1.30-gaz9mgmq.mjs +0 -4
  808. package/dist/chunks/mcp-1.1.30-r6q89d8c.mjs +0 -1
  809. package/dist/chunks/mcpb-1.1.30-qxpx83j6.mjs +0 -1
  810. package/dist/chunks/memory-1.1.30-72gbfb3b.mjs +0 -77
  811. package/dist/chunks/model-1.1.30-7nsbqqvm.mjs +0 -2
  812. package/dist/chunks/model-1.1.30-f7d6dbt2.mjs +0 -1
  813. package/dist/chunks/node-1.1.30-nbnhkya6.mjs +0 -15
  814. package/dist/chunks/node-1.1.30-vaaf7x0g.mjs +0 -1
  815. package/dist/chunks/oauth-1.1.30-g201gbyg.mjs +0 -1
  816. package/dist/chunks/openaiShim-1.1.30-rz4xax1e.mjs +0 -14
  817. package/dist/chunks/output-style-1.1.30-ms4eck90.mjs +0 -1
  818. package/dist/chunks/package-D2QZMRW7-1.1.30-08c7mgpt.mjs +0 -1
  819. package/dist/chunks/parseConnectUrl-1.1.30-bd7ade4m.mjs +0 -1
  820. package/dist/chunks/parser-1.1.30-qe7n0vnw.mjs +0 -1
  821. package/dist/chunks/passes-1.1.30-3cz64bpa.mjs +0 -1
  822. package/dist/chunks/permissions-1.1.30-28z7ax7g.mjs +0 -3
  823. package/dist/chunks/permissions-1.1.30-vgtb4qf9.mjs +0 -1
  824. package/dist/chunks/plan-1.1.30-s865r5b5.mjs +0 -1
  825. package/dist/chunks/plist-1.1.30-pxa62mce.mjs +0 -1
  826. package/dist/chunks/plugin-1.1.30-6apj9sf8.mjs +0 -29
  827. package/dist/chunks/pluginStartupCheck-1.1.30-gmcab9kx.mjs +0 -1
  828. package/dist/chunks/plugins-1.1.30-40c7sagf.mjs +0 -9
  829. package/dist/chunks/preActionHook-1.1.30-q2g48qsk.mjs +0 -2
  830. package/dist/chunks/print-1.1.30-drvg0v0c.mjs +0 -57
  831. package/dist/chunks/process-1.1.30-f6y2msx6.mjs +0 -1
  832. package/dist/chunks/processBashCommand-1.1.30-5bzgcejg.mjs +0 -1
  833. package/dist/chunks/processSlashCommand-1.1.30-2bwd1kpt.mjs +0 -9
  834. package/dist/chunks/prompt-1.1.30-9rbbx5vr.mjs +0 -1
  835. package/dist/chunks/prompt-1.1.30-phmv317m.mjs +0 -1
  836. package/dist/chunks/prompts-1.1.30-1myv5ewh.mjs +0 -1
  837. package/dist/chunks/protocolHandler-1.1.30-d6jkd0dk.mjs +0 -13
  838. package/dist/chunks/provider-1.1.30-cwkzb2t8.mjs +0 -2
  839. package/dist/chunks/providerProfiles-1.1.30-qe0y7b6e.mjs +0 -1
  840. package/dist/chunks/providerValidation-1.1.30-rzg2nkx3.mjs +0 -6
  841. package/dist/chunks/rate-limit-options-1.1.30-4q04y9f7.mjs +0 -1
  842. package/dist/chunks/registerSubcommands-1.1.30-k3ar1dyg.mjs +0 -26
  843. package/dist/chunks/registry-1.1.30-epdyxcsa.mjs +0 -1
  844. package/dist/chunks/release-notes-1.1.30-k11yp5hh.mjs +0 -5
  845. package/dist/chunks/reload-plugins-1.1.30-n7qhqqr3.mjs +0 -2
  846. package/dist/chunks/remote-env-1.1.30-f8e03jpx.mjs +0 -1
  847. package/dist/chunks/remoteBridgeCore-1.1.30-fqankvvx.mjs +0 -1
  848. package/dist/chunks/remoteSession-1.1.30-fc5x1bz4.mjs +0 -1
  849. package/dist/chunks/rename-1.1.30-vw8eyfha.mjs +0 -1
  850. package/dist/chunks/replBridgeHandle-1.1.30-bagtg7fm.mjs +0 -1
  851. package/dist/chunks/replLauncher-1.1.30-318vaq80.mjs +0 -1
  852. package/dist/chunks/resume-1.1.30-jrj1wpvj.mjs +0 -2
  853. package/dist/chunks/rewind-1.1.30-z97mdn25.mjs +0 -1
  854. package/dist/chunks/rootOptions-1.1.30-ybrgmmyy.mjs +0 -1
  855. package/dist/chunks/runWorkflowHeadless-1.1.30-w3gn8w75.mjs +0 -10
  856. package/dist/chunks/sandbox-adapter-1.1.30-4rd9w5by.mjs +0 -1
  857. package/dist/chunks/sandbox-toggle-1.1.30-zmtfq25w.mjs +0 -1
  858. package/dist/chunks/session-1.1.30-sbykpbav.mjs +0 -2
  859. package/dist/chunks/sessionDiscovery-1.1.30-dd680nx7.mjs +0 -1
  860. package/dist/chunks/sessionFileAccessHooks-1.1.30-4rhdr018.mjs +0 -1
  861. package/dist/chunks/sessionStorage-1.1.30-cwb5a83p.mjs +0 -1
  862. package/dist/chunks/settings-1.1.30-xxee6nzb.mjs +0 -1
  863. package/dist/chunks/setup-1.1.30-p2wwqw6v.mjs +0 -12
  864. package/dist/chunks/sinks-1.1.30-phkc3yep.mjs +0 -1
  865. package/dist/chunks/skills-1.1.30-vsg5twx1.mjs +0 -1
  866. package/dist/chunks/startupProfiler-1.1.30-wa0xbx1z.mjs +0 -1
  867. package/dist/chunks/startupUpdateCheck-1.1.30-9cgnvwtt.mjs +0 -1
  868. package/dist/chunks/state-1.1.30-ge0kb9gr.mjs +0 -1
  869. package/dist/chunks/stats-1.1.30-n5w7ehyg.mjs +0 -1
  870. package/dist/chunks/status-1.1.30-snsvg4xb.mjs +0 -1
  871. package/dist/chunks/stickers-1.1.30-7ffpw08c.mjs +0 -1
  872. package/dist/chunks/subprocessEnv-1.1.30-5efpmhgz.mjs +0 -1
  873. package/dist/chunks/tasks-1.1.30-ykgkx7d8.mjs +0 -1
  874. package/dist/chunks/teamHelpers-1.1.30-cjjzmnj6.mjs +0 -1
  875. package/dist/chunks/teammateModeSnapshot-1.1.30-e2mh88ze.mjs +0 -1
  876. package/dist/chunks/teleport-1.1.30-9y1akw6m.mjs +0 -1
  877. package/dist/chunks/terminalSetup-1.1.30-mwbzfrfc.mjs +0 -1
  878. package/dist/chunks/theme-1.1.30-9dqykgv2.mjs +0 -1
  879. package/dist/chunks/thinkback-1.1.30-3pbzqt97.mjs +0 -1
  880. package/dist/chunks/thinkback-play-1.1.30-83akae4q.mjs +0 -1
  881. package/dist/chunks/toolPool-1.1.30-3kvrwtxa.mjs +0 -1
  882. package/dist/chunks/toolSearch-1.1.30-s60zcj4t.mjs +0 -1
  883. package/dist/chunks/tools-1.1.30-by0ddhf4.mjs +0 -1
  884. package/dist/chunks/trustedDevice-1.1.30-ecq2hfrc.mjs +0 -1
  885. package/dist/chunks/turndown.cjs-1.1.30-m5hyejns.mjs +0 -69
  886. package/dist/chunks/types-1.1.30-mrv5q877.mjs +0 -1
  887. package/dist/chunks/ultrareviewCommand-1.1.30-5etzjedp.mjs +0 -4
  888. package/dist/chunks/update-1.1.30-ax60cy72.mjs +0 -72
  889. package/dist/chunks/upgrade-1.1.30-hrny7f12.mjs +0 -1
  890. package/dist/chunks/upload-1.1.30-s0z8kw2s.mjs +0 -7
  891. package/dist/chunks/upstreamproxy-1.1.30-tkvbafsh.mjs +0 -14
  892. package/dist/chunks/url-handler-napi-1.1.30-enhczdhm.mjs +0 -1
  893. package/dist/chunks/usage-1.1.30-ew9dakf2.mjs +0 -1
  894. package/dist/chunks/util-1.1.30-knp77fm5.mjs +0 -1
  895. package/dist/chunks/utils-1.1.30-74ykpfac.mjs +0 -1
  896. package/dist/chunks/vim-1.1.30-y01vnb23.mjs +0 -1
  897. package/dist/chunks/watchLoop-1.1.30-sjecqqx4.mjs +0 -13
  898. package/dist/chunks/watcher-1.1.30-qnfq5sma.mjs +0 -1
  899. package/dist/chunks/wiki-1.1.30-qddcp6x2.mjs +0 -132
  900. package/dist/chunks/workflows-1.1.30-j5wcb76g.mjs +0 -1
  901. package/dist/chunks/worktree-1.1.30-m6gvqkc9.mjs +0 -1
  902. package/dist/chunks/worktreeModeEnabled-1.1.30-nma5ggmd.mjs +0 -1
  903. package/dist/chunks/wrapper-1.1.30-c8vm3try.mjs +0 -7
  904. /package/dist/chunks/{cli-1.1.30-vxh27fdj.mjs → cli-1.1.31-d930nxk6.mjs} +0 -0
@@ -0,0 +1,1480 @@
1
+ import"./cli-1.1.31-z3s1pnd3.mjs";import{B as xG,C as s,D as pg,E as _g,z as O}from"./cli-1.1.31-r7jps0tn.mjs";import"./cli-1.1.31-eqvc58gw.mjs";import{J as kI}from"./cli-1.1.31-h102y1at.mjs";import{Aa as zZ,xa as iZ,ya as FZ}from"./cli-1.1.31-tctd36c8.mjs";import{Ga as PG}from"./cli-1.1.31-7692zxpg.mjs";import"./cli-1.1.31-h1sv3apa.mjs";import"./cli-1.1.31-3jzsv5dy.mjs";import"./cli-1.1.31-fbdr0297.mjs";import{Za as WG}from"./cli-1.1.31-fr8t4a7n.mjs";import"./cli-1.1.31-s1a6vw53.mjs";import{Ob as aZ,Pb as fZ}from"./cli-1.1.31-vf004w21.mjs";import"./cli-1.1.31-zvbpmw2y.mjs";import{oc as dZ,pc as mY}from"./cli-1.1.31-3ehzwm1n.mjs";import"./cli-1.1.31-6pxakyvg.mjs";import"./cli-1.1.31-8bcb1d1y.mjs";import"./cli-1.1.31-v7nswcm8.mjs";import{Qc as Rg,Rc as tC}from"./cli-1.1.31-var05xaf.mjs";import"./cli-1.1.31-9x9gaa7g.mjs";import"./cli-1.1.31-fpqqpyrw.mjs";import"./cli-1.1.31-w0vfcfhs.mjs";import{Fg as sB,Gg as rB,Hg as OC}from"./cli-1.1.31-fjdb444f.mjs";import"./cli-1.1.31-9gzbwjb8.mjs";import{ti as fB,ui as iB,vi as yI,yi as MC}from"./cli-1.1.31-satbt91m.mjs";import{AA as PY,AG as xZ,Am as qI,As as qB,At as _I,Bo as dB,Bs as DB,CG as Pg,CP as EZ,Cs as $B,DP as TY,Dt as Cb,Eo as JB,Es as cC,Et as aI,Fs as PB,Ft as Yb,GG as Og,GR as DG,Hr as wI,IH as Sg,Io as RB,Ir as $Y,Iu as FY,JH as gY,JT as mg,Js as dC,KP as v,KT as Lg,Kl as TB,Kn as t,LK as IG,LP as f,LT as eC,Ll as EB,Ln as iG,Lv as DI,MK as Ub,Ml as VI,Mm as Gb,Mq as vB,Mv as Bb,Nl as pB,Nq as CC,Pl as SC,Px as WZ,QH as Tg,RH as WY,RP as dI,Rv as YZ,Sv as zY,Sx as QY,TL as rI,Uk as ZB,VS as vg,WL as tI,WS as Ug,Wk as lb,Wq as Kg,XP as pZ,Xk as bB,YL as eI,Yk as cb,Zk as CB,Zq as hg,_G as VZ,_k as db,aH as jY,aQ as Ag,ar as cI,cu as rG,dr as Fg,eJ as yZ,ek as mB,eo as gZ,fo as RY,go as RG,gr as zg,hB as XZ,hJ as NY,hM as GB,hT as _Z,hl as BI,hu as fI,iB as wY,il as vb,jJ as $G,jS as hZ,jT as nG,jp as CZ,ju as iI,kJ as QZ,kM as Vb,kN as HZ,kp as KY,ku as oI,lJ as $I,lS as p,lk as nB,lu as tG,mJ as PI,mk as LB,mu as nI,nJ as gb,nP as TZ,nS as FG,oJ as qZ,pJ as DZ,pN as AY,pu as Wb,qJ as $Z,qN as lZ,qo as ZZ,rJ as PZ,rN as vY,sB as VG,sK as BG,sL as qG,sN as cZ,sl as YB,so as bZ,tJ as OZ,tK as _B,tk as SI,tl as Jb,uB as oG,uK as aB,uN as UY,vK as uC,vp as FI,wk as SZ,wp as hY,yJ as OY,yL as TG,yk as DY,ym as MI,ys as xB,zA as uZ,zG as MZ,zm as xI,zs as lC,zu as zI}from"./cli-1.1.31-g58b1jfa.mjs";import{MT as aG,NT as Ib}from"./cli-1.1.31-6qm466ss.mjs";import"./cli-1.1.31-8h9zps1d.mjs";import{iU as sI,uU as Xb}from"./cli-1.1.31-52wt9w8w.mjs";import{AU as XY,yU as Eg}from"./cli-1.1.31-qyztdyg2.mjs";import"./cli-1.1.31-vphyv007.mjs";import{JU as MG,KU as HI,MU as Qg,NU as wg,OU as jg,RU as Ng}from"./cli-1.1.31-pg2ntz9b.mjs";import"./cli-1.1.31-1q4btmra.mjs";import"./cli-1.1.31-44jshpbd.mjs";import"./cli-1.1.31-2pdbmb7w.mjs";import{NV as uI,QV as eZ}from"./cli-1.1.31-yz72mhbg.mjs";import"./cli-1.1.31-6m1k9909.mjs";import"./cli-1.1.31-hpxjvh3j.mjs";import"./cli-1.1.31-978dpg39.mjs";import"./cli-1.1.31-pgde5349.mjs";import{HW as JZ,IW as RZ,KW as KZ,LW as LY}from"./cli-1.1.31-sn0x975f.mjs";import"./cli-1.1.31-4cp1xkaj.mjs";import"./cli-1.1.31-qq0sng13.mjs";import"./cli-1.1.31-vbch5rht.mjs";import"./cli-1.1.31-777381m0.mjs";import"./cli-1.1.31-13cx7z8n.mjs";import{RZ as vI,SZ as rZ}from"./cli-1.1.31-bx3e5rv6.mjs";import{WZ as LZ,ZZ as kZ,b0 as qY}from"./cli-1.1.31-wfv9e9p4.mjs";import"./cli-1.1.31-tc6xppyr.mjs";import"./cli-1.1.31-5kgkq6vm.mjs";import"./cli-1.1.31-556xnzb4.mjs";import"./cli-1.1.31-g41zancj.mjs";import"./cli-1.1.31-n130x03f.mjs";import"./cli-1.1.31-9m6ef5kb.mjs";import"./cli-1.1.31-r5g0ns02.mjs";import"./cli-1.1.31-t96rrv1m.mjs";import{p3 as YG,r3 as kg}from"./cli-1.1.31-eqfmzrxc.mjs";import{s3 as YY}from"./cli-1.1.31-9d5v98td.mjs";import"./cli-1.1.31-ek449yjc.mjs";import{$4 as hI,A5 as SG,A7 as $g,C7 as CY,K3 as eg,M3 as cY,M5 as kG,O4 as GZ,R5 as Jg,T5 as rC,U3 as cg,V3 as sC,Z5 as BZ,_5 as JY,a5 as IZ,b5 as dY,s5 as dg}from"./cli-1.1.31-adnn5x8c.mjs";import"./cli-1.1.31-ahbyaapz.mjs";import{Y7 as w,Z7 as cG}from"./cli-1.1.31-sc82f8hw.mjs";import"./cli-1.1.31-3zy5yd1t.mjs";import"./cli-1.1.31-jwa8f70w.mjs";import"./cli-1.1.31-q67trvk0.mjs";import"./cli-1.1.31-qv6x2hht.mjs";import"./cli-1.1.31-xqdypd2k.mjs";import"./cli-1.1.31-can8wyac.mjs";import"./cli-1.1.31-nyvjx813.mjs";import"./cli-1.1.31-cpeph4zm.mjs";import"./cli-1.1.31-5xd2j6e7.mjs";import"./cli-1.1.31-fdk7yhs0.mjs";import{$$ as lY,A$ as ig,B$ as HY,Bfa as gI,Eba as vG,Fba as NG,Gea as bG,Kba as UZ,Kha as i,Oea as pI,Q$ as QI,S$ as e,Sea as Zg,Sha as JG,T$ as og,Wea as _C,Z$ as RI,Zba as yB,aaa as hG,aca as eG,hfa as LG,ifa as sg,jaa as Dg,kga as mI,maa as JI,mba as AG,oba as zb,ofa as uG,qea as GG,qfa as rg,s$ as jG,tea as GI,uaa as UI,vaa as tZ,vha as lG,wfa as tg,x$ as EI,xca as mZ,yca as KI,yha as LI,zca as ng}from"./cli-1.1.31-p99fz46k.mjs";import{dia as AB,pia as bC,uia as ZG,yia as bY}from"./cli-1.1.31-vpkbqj90.mjs";import"./cli-1.1.31-mcekc48f.mjs";import"./cli-1.1.31-1wxttnqr.mjs";import{$ia as SB,Yia as gg,_ia as E,aja as ZI,bja as yC}from"./cli-1.1.31-c9707zjx.mjs";import{eja as lI,gja as nC}from"./cli-1.1.31-5tgfa7xy.mjs";import{Rja as AI,Sja as sZ}from"./cli-1.1.31-h5a78vp8.mjs";import{Aka as MB,Lka as jB,Ska as L,Tka as NB,Vja as fg,Vka as yG,Xja as yY,vka as CG}from"./cli-1.1.31-t6m64e0q.mjs";import{$ka as bb,Yka as sG}from"./cli-1.1.31-pp98t7k8.mjs";import{mla as EG,pla as vZ,qla as a,rla as _G,sla as wB,xla as wG}from"./cli-1.1.31-dmghye74.mjs";import{Dla as pG,Fla as dG,Lla as fG}from"./cli-1.1.31-wba64b2s.mjs";import{Jqa as NZ,Ula as OI,Uqa as lg,Voa as Vg,Woa as yg,Wqa as AZ,Xoa as Hg,Xpa as TI,Yqa as n,opa as XG,rma as NI,uma as jZ,xma as KG,zma as OG}from"./cli-1.1.31-b8rbgfhm.mjs";import"./cli-1.1.31-thhdw5e1.mjs";import"./cli-1.1.31-jh2sb5nk.mjs";import{hsa as ZY,msa as u}from"./cli-1.1.31-qj8vksz8.mjs";cG();sZ();n();gb();LI();iG();mI();rZ();fG();wG();Bb();tZ();eZ();nG();oG();Gb();Ib();import{readFileSync as jI}from"fs";import{resolve as QG}from"path";async function Zb(G,I,B,g){let{teammate:Z}=g,b=G;if(I.bare)process.env.CLAUDIN_SIMPLE="1";if(b==="code")console.warn(w.yellow("Tip: You can launch Claudin with just `claudin`")),b=void 0;let{debug:C=!1,debugToStderr:Y=!1,dangerouslySkipPermissions:W,allowDangerouslySkipPermissions:d=!1,tools:R=[],allowedTools:K=[],disallowedTools:J=[],mcpConfig:c=[],permissionMode:V,addDir:h=[],fallbackModel:X,betas:F=[],ide:z=!1,sessionId:N,includeHookEvents:U,includePartialMessages:y}=I;if(I.prefill)vI(I.prefill);let{agents:Q,agent:M,outputFormat:j,inputFormat:H}=I,A=I.verbose??e().verbose,P=I.print,x=I.init??!1,m=I.initOnly??!1,D=I.maintenance??!1;if(B.disableSlashCommands=I.disableSlashCommands||!1,B.taskListId=void 0,B.worktreeOption=aG()?I.worktree:void 0,B.worktreeName=typeof B.worktreeOption==="string"?B.worktreeOption:void 0,B.worktreeEnabled=B.worktreeOption!==void 0,B.worktreeName){let l=MI(B.worktreeName);if(l!==null)B.worktreePRNumber=l,B.worktreeName=void 0}if(B.tmuxEnabled=aG()&&I.tmux===!0,B.tmuxEnabled){if(!B.worktreeEnabled)process.stderr.write(w.red(`Error: --tmux requires --worktree
2
+ `)),process.exit(1);if(UI()==="windows")process.stderr.write(w.red(`Error: --tmux is not supported on Windows
3
+ `)),process.exit(1);if(!await xI())process.stderr.write(w.red(`Error: tmux is not installed.
4
+ ${qI()}
5
+ `)),process.exit(1)}if(t()){let l=kI(I);B.storedTeammateOpts=l;let HG=l.agentId||l.agentName||l.teamName,zG=l.agentId&&l.agentName&&l.teamName;if(HG&&!zG)process.stderr.write(w.red(`Error: --agent-id, --agent-name, and --team-name must all be provided together
6
+ `)),process.exit(1);if(l.agentId&&l.agentName&&l.teamName)Z.getTeammateUtils().setDynamicTeamContext?.({agentId:l.agentId,agentName:l.agentName,teamName:l.teamName,color:l.agentColor,planModeRequired:l.planModeRequired??!1,parentSessionId:l.parentSessionId});if(l.teammateMode)Z.getTeammateModeSnapshot().setCliTeammateModeOverride?.(l.teammateMode)}if(B.sdkUrl=I.sdkUrl??void 0,B.effectiveIncludePartialMessages=!!y||pG(process.env.CLAUDIN_INCLUDE_PARTIAL_MESSAGES),U||pG(process.env.CLAUDE_CODE_REMOTE))DI(!0);if(B.sdkUrl){if(!H)H="stream-json";if(!j)j="stream-json";if(I.verbose===void 0)A=!0;if(!I.print)P=!0}let $=I.teleport??null,k=I.remote,S=k===!0?"":k??null,q=I.remoteControl??I.rc,T=typeof q==="string"&&q.length>0?q:void 0;if(N){if((I.continue||I.resume)&&!I.forkSession)process.stderr.write(w.red(`Error: --session-id can only be used with --continue or --resume if --fork-session is also specified.
7
+ `)),process.exit(1);if(!B.sdkUrl){let l=VG(N);if(!l)process.stderr.write(w.red(`Error: Invalid session ID. Must be a valid UUID.
8
+ `)),process.exit(1);if(SI(l))process.stderr.write(w.red(`Error: Session ID ${l} is already in use.
9
+ `)),process.exit(1)}}if(B.fileSpecs=I.file,B.fileSpecs&&B.fileSpecs.length>0){let l=uI();if(!l)process.stderr.write(w.red(`Error: Session token required for file downloads. CLAUDE_CODE_SESSION_ACCESS_TOKEN must be set.
10
+ `)),process.exit(1);let HG=process.env.CLAUDE_CODE_REMOTE_SESSION_ID||NI(),zG=PI(B.fileSpecs);if(zG.length>0){let nZ={baseUrl:(lG()?.transport==="anthropic"?lG()?.baseUrl:void 0)||AI().BASE_API_URL,oauthToken:l,sessionId:HG};B.fileDownloadPromise=$I(zG,nZ)}}let r=XG();if(X&&I.model&&X===I.model)process.stderr.write(w.red(`Error: Fallback model cannot be the same as the main model. Please specify a different model for --fallback-model.
11
+ `)),process.exit(1);let o=I.systemPrompt;if(I.systemPromptFile){if(I.systemPrompt)process.stderr.write(w.red(`Error: Cannot use both --system-prompt and --system-prompt-file. Please use only one.
12
+ `)),process.exit(1);try{let l=QG(I.systemPromptFile);o=jI(l,"utf8")}catch(l){if(_G(l)==="ENOENT")process.stderr.write(w.red(`Error: System prompt file not found: ${QG(I.systemPromptFile)}
13
+ `)),process.exit(1);process.stderr.write(w.red(`Error reading system prompt file: ${a(l)}
14
+ `)),process.exit(1)}}let _=I.appendSystemPrompt;if(I.appendSystemPromptFile){if(I.appendSystemPrompt)process.stderr.write(w.red(`Error: Cannot use both --append-system-prompt and --append-system-prompt-file. Please use only one.
15
+ `)),process.exit(1);try{let l=QG(I.appendSystemPromptFile);_=jI(l,"utf8")}catch(l){if(_G(l)==="ENOENT")process.stderr.write(w.red(`Error: Append system prompt file not found: ${QG(I.appendSystemPromptFile)}
16
+ `)),process.exit(1);process.stderr.write(w.red(`Error reading append system prompt file: ${a(l)}
17
+ `)),process.exit(1)}}if(t()&&B.storedTeammateOpts?.agentId&&B.storedTeammateOpts?.agentName&&B.storedTeammateOpts?.teamName){let l=Z.getTeammatePromptAddendum().TEAMMATE_SYSTEM_PROMPT_ADDENDUM;_=_?`${_}
18
+
19
+ ${l}`:l}return{prompt:b,debug:C,debugToStderr:Y,dangerouslySkipPermissions:W,allowDangerouslySkipPermissions:d,baseTools:R,allowedTools:K,disallowedTools:J,mcpConfig:c,permissionModeCli:V,addDir:h,fallbackModel:X,betas:F,ide:z,sessionId:N,includeHookEvents:U,includePartialMessages:y,outputFormat:j,inputFormat:H,verbose:A,print:P,init:x,initOnly:m,maintenance:D,agentsJson:Q,agentCli:M,systemPrompt:o,appendSystemPrompt:_,teleport:$,remote:S,remoteControlOption:q,remoteControlName:T,isNonInteractiveSession:r}}cG();Yb();n();Cb();Wb();Xb();yG();fG();EI();Vb();bb();n();pI();import{resolve as yb}from"path";async function Hb(G,I){let{options:B,ctx:g,permissionModeCli:Z,dangerouslySkipPermissions:b,allowDangerouslySkipPermissions:C,baseTools:Y,allowedTools:W,disallowedTools:d,mcpConfig:R,addDir:K,isNonInteractiveSession:J,inputFormat:c,outputFormat:V}=G,{autoModeStateModule:h}=I,{mode:X,notification:F}=tI({permissionModeCli:Z,dangerouslySkipPermissions:b});if(TI(X==="bypassPermissions"),B.enableAutoMode||Z==="auto"||X==="auto"||!Z&&GB())h?.setAutoModeFlagCli(!0);let z={};if(R&&R.length>0){let D=R.map((S)=>S.trim()).filter((S)=>S.length>0),$={},k=[];for(let S of D){let q=null,T=[],r=jG(S);if(r){let o=iI({configObject:r,filePath:"command line",expandVars:!0,scope:"dynamic"});if(o.config)q=o.config.mcpServers;else T=o.errors}else{let o=yb(S),_=oI({filePath:o,expandVars:!0,scope:"dynamic"});if(_.config)q=_.config.mcpServers;else T=_.errors}if(T.length>0)k.push(...T);else if(q)$={...$,...q}}if(k.length>0){let S=k.map((q)=>`${q.path?q.path+": ":""}${q.message}`).join(`
20
+ `);L(`--mcp-config validation failed (${k.length} errors): ${S}`,{level:"error"}),process.stderr.write(`Error: Invalid MCP configuration:
21
+ ${S}
22
+ `),process.exit(1)}if(Object.keys($).length>0){let S=aI($,(r)=>({...r,scope:"dynamic"})),{allowed:q,blocked:T}=rG(S);if(T.length>0)process.stderr.write(`Warning: MCP ${bG(T.length,"server")} blocked by enterprise policy: ${T.join(", ")}
23
+ `);z={...z,...q}}}let N=B.strictMcpConfig||!1;if(tG()){if(N)process.stderr.write(w.red("You cannot use --strict-mcp-config when an enterprise MCP config is present")),process.exit(1);if(z&&!nI(z))process.stderr.write(w.red("You cannot dynamically configure MCP servers when an enterprise MCP config is present")),process.exit(1)}OI(K);let U=void 0,y=await eI({allowedToolsCli:W,disallowedToolsCli:d,baseToolsCli:Y,permissionMode:X,allowDangerouslySkipPermissions:C,addDirs:K}),Q=y.toolPermissionContext,{warnings:M,dangerousPermissions:j,overlyBroadBashPermissions:H}=y;if(j.length>0)Q=rI(Q);M.forEach((D)=>{console.error(D)}),sI();let A=J&&!N&&!tG()&&!dG()?_I().then((D)=>{let{allowed:$,blocked:k}=rG(D);if(k.length>0)process.stderr.write(`Warning: claude.ai MCP ${bG(k.length,"server")} blocked by enterprise policy: ${k.join(", ")}
24
+ `);return $}):Promise.resolve({});L("[STARTUP] Loading MCP configs...");let P=Date.now(),x={current:void 0},m=(N||dG()?Promise.resolve({servers:{},errors:[]}):fI(z)).then((D)=>{return x.current=Date.now()-P,D});if(c&&c!=="text"&&c!=="stream-json")console.error(`Error: Invalid input format "${c}".`),process.exit(1);if(c==="stream-json"&&V!=="stream-json")console.error("Error: --input-format=stream-json requires output-format=stream-json."),process.exit(1);if(g.sdkUrl){if(c!=="stream-json"||V!=="stream-json")console.error("Error: --sdk-url requires both --input-format=stream-json and --output-format=stream-json."),process.exit(1)}if(B.replayUserMessages){if(c!=="stream-json"||V!=="stream-json")console.error("Error: --replay-user-messages requires both --input-format=stream-json and --output-format=stream-json."),process.exit(1)}if(g.effectiveIncludePartialMessages){if(!J||V!=="stream-json")sG("Error: --include-partial-messages requires --print and --output-format=stream-json."),process.exit(1)}if(B.sessionPersistence===!1&&!J)sG("Error: --no-session-persistence can only be used with --print mode."),process.exit(1);return{permissionMode:X,permissionModeNotification:F,dynamicMcpConfig:z,strictMcpConfig:N,devChannels:U,toolPermissionContext:Q,overlyBroadBashPermissions:H,claudeaiConfigPromise:A,mcpConfigPromise:m,mcpConfigResolvedRef:x}}cG();n();Ag();eC();zg();Ng();iG();nC();yG();EI();JG();tC();rC();sC();n();nG();gI();oG();function IB(){}GI();db();cb();lb();Jb();eG();f();var BB=5,gB=30,Rb=`After you finish implementing the change:
25
+ 1. **Code review** — Invoke the \`${YB}\` tool with \`skill: "code-review"\` and \`args: "medium"\` to get a correctness-bug report on your changes, then fix every reported bug before moving on.
26
+ 2. **Run unit tests** — Run the project's test suite (check for package.json scripts, Makefile targets, or common commands like \`npm test\`, \`bun test\`, \`pytest\`, \`go test\`). If tests fail, fix them.
27
+ 3. **Test end-to-end** — Follow the e2e test recipe from the coordinator's prompt (below). If the recipe says to skip e2e for this unit, skip it.
28
+ 4. **Commit and push** — Commit all changes with a clear message, push the branch, and create a PR with \`gh pr create\`. Use a descriptive title. If \`gh\` is not available or the push fails, note it in your final message.
29
+ 5. **Report** — End with a single line: \`PR: <url>\` so the coordinator can track it. If no PR was created, end with \`PR: none — <reason>\`.`;function Kb(G){return`# Batch: Parallel Work Orchestration
30
+
31
+ You are orchestrating a large, parallelizable change across this codebase.
32
+
33
+ ## User Instruction
34
+
35
+ ${G}
36
+
37
+ ## Phase 1: Research and Plan (Plan Mode)
38
+
39
+ Call the \`${bB}\` tool now to enter plan mode, then:
40
+
41
+ 1. **Understand the scope.** Launch one or more subagents (in the foreground — you need their results) to deeply research what this instruction touches. Find all the files, patterns, and call sites that need to change. Understand the existing conventions so the migration is consistent.
42
+
43
+ 2. **Decompose into independent units.** Break the work into ${BB}–${gB} self-contained units. Each unit must:
44
+ - Be independently implementable in an isolated git worktree (no shared state with sibling units)
45
+ - Be mergeable on its own without depending on another unit's PR landing first
46
+ - Be roughly uniform in size (split large units, merge trivial ones)
47
+
48
+ Scale the count to the actual work: few files → closer to ${BB}; hundreds of files → closer to ${gB}. Prefer per-directory or per-module slicing over arbitrary file lists.
49
+
50
+ 3. **Determine the e2e test recipe.** Figure out how a worker can verify its change actually works end-to-end — not just that unit tests pass. Look for:
51
+ - A \`claude-in-chrome\` skill or browser-automation tool (for UI changes: click through the affected flow, screenshot the result)
52
+ - A \`tmux\` or CLI-verifier skill (for CLI changes: launch the app interactively, exercise the changed behavior)
53
+ - A dev-server + curl pattern (for API changes: start the server, hit the affected endpoints)
54
+ - An existing e2e/integration test suite the worker can run
55
+
56
+ If you cannot find a concrete e2e path, use the \`${CB}\` tool to ask the user how to verify this change end-to-end. Offer 2–3 specific options based on what you found (e.g., "Screenshot via chrome extension", "Run \`bun run dev\` and curl the endpoint", "No e2e — unit tests are sufficient"). Do not skip this — the workers cannot ask the user themselves.
57
+
58
+ Write the recipe as a short, concrete set of steps that a worker can execute autonomously. Include any setup (start a dev server, build first) and the exact command/interaction to verify.
59
+
60
+ 4. **Write the plan.** In your plan file, include:
61
+ - A summary of what you found during research
62
+ - A numbered list of work units — for each: a short title, the list of files/directories it covers, and a one-line description of the change
63
+ - The e2e test recipe (or "skip e2e because …" if the user chose that)
64
+ - The exact worker instructions you will give each agent (the shared template)
65
+
66
+ 5. Call \`${ZB}\` to present the plan for approval.
67
+
68
+ ## Phase 2: Spawn Workers (After Plan Approval)
69
+
70
+ Once the plan is approved, spawn one background agent per work unit using the \`${GG}\` tool. **All agents must use \`isolation: "worktree"\` and \`run_in_background: true\`.** Launch them all in a single message block so they run in parallel.
71
+
72
+ For each agent, the prompt must be fully self-contained. Include:
73
+ - The overall goal (the user's instruction)
74
+ - This unit's specific task (title, file list, change description — copied verbatim from your plan)
75
+ - Any codebase conventions you discovered that the worker needs to follow
76
+ - The e2e test recipe from your plan (or "skip e2e because …")
77
+ - The worker instructions below, copied verbatim:
78
+
79
+ \`\`\`
80
+ ${Rb}
81
+ \`\`\`
82
+
83
+ Use \`subagent_type: "Code"\` unless a more specific agent type fits.
84
+
85
+ ## Phase 3: Track Progress
86
+
87
+ After launching all workers, render an initial status table:
88
+
89
+ | # | Unit | Status | PR |
90
+ |---|------|--------|----|
91
+ | 1 | <title> | running | — |
92
+ | 2 | <title> | running | — |
93
+
94
+ As background-agent completion notifications arrive, parse the \`PR: <url>\` line from each agent's result and re-render the table with updated status (\`done\` / \`failed\`) and PR links. Keep a brief failure note for any agent that did not produce a PR.
95
+
96
+ When all agents have reported, render the final table and a one-line summary (e.g., "22/24 units landed as PRs").
97
+ `}var hb="This is not a git repository. The `/batch` command requires a git repo because it spawns agents in isolated git worktrees and creates PRs from each. Initialize a repo first, or run this from inside an existing one.",Fb=`Provide an instruction describing the batch change you want to make.
98
+
99
+ Examples:
100
+ /batch migrate from react to vue
101
+ /batch replace all uses of lodash with native equivalents
102
+ /batch add type annotations to all untyped function parameters`;function WB(){v({name:"batch",description:"Research and plan a large-scale change, then execute it in parallel across 5–30 isolated worktree agents that each open a PR.",whenToUse:"Use when the user wants to make a sweeping, mechanical change across many files (migrations, refactors, bulk renames) that can be decomposed into independent parallel units.",argumentHint:"<instruction>",userInvocable:!0,disableModelInvocation:!0,async getPromptForCommand(G){let I=G.trim();if(!I)return[{type:"text",text:Fb}];if(!await NG())return[{type:"text",text:hb}];return[{type:"text",text:Kb(I)}]}})}n();GI();Ub();vb();RB();f();zb();JG();eG();var Qb=60;function wb(G){let I=[];for(let B of G.split(`
103
+ `)){let g=B.trimEnd();if(!g)continue;let Z=g.split("\t");if(Z.length<3)continue;let[b,C,...Y]=Z,W=Y.join("\t");if(!W||b===void 0||C===void 0)continue;let d=b==="-"||C==="-";I.push({path:W,additions:d?0:Number.parseInt(b,10)||0,deletions:d?0:Number.parseInt(C,10)||0,binary:d,untracked:!1})}return I}function jb(G){return G.split(`
104
+ `).map((I)=>I.trimEnd()).filter(Boolean).map((I)=>({path:I,additions:0,deletions:0,binary:!1,untracked:!0}))}function Nb(G){let I=new Map;for(let B of G)for(let g of B){let Z=I.get(g.path);if(!Z){I.set(g.path,{...g});continue}Z.additions=Math.max(Z.additions,g.additions),Z.deletions=Math.max(Z.deletions,g.deletions),Z.binary=Z.binary||g.binary,Z.untracked=Z.untracked&&g.untracked}return[...I.values()].sort((B,g)=>{if(B.untracked!==g.untracked)return B.untracked?-1:1;if(B.untracked)return B.path.localeCompare(g.path);let Z=g.additions+g.deletions-(B.additions+B.deletions);return Z!==0?Z:B.path.localeCompare(g.path)})}function HB(G){let I=[G.range?`git diff ${G.range}`:"",G.includesWorkingTree?"git diff HEAD":""].filter(Boolean),B=G.files.slice(0,Qb),g=G.files.length-B.length,Z=B.map((W)=>{if(W.untracked)return`- ${W.path} (new file, untracked)`;if(W.binary)return`- ${W.path} (binary)`;return`- ${W.path} (+${W.additions} −${W.deletions})`});if(g>0)Z.push(`- …and ${g} more file${g===1?"":"s"}`);let b=`${G.files.length} file${G.files.length===1?"":"s"}`,C=G.files.some((W)=>W.untracked)?`
105
+ The files marked \`(new file, untracked)\` are NOT in the output of those
106
+ commands — git has never seen them. Read each one in full; it is part of the
107
+ change under review.
108
+ `:"";return`## Scope
109
+
110
+ ${I.length>0?`The diff under review is already resolved. Fetch it with exactly these commands —
111
+ every angle below must use the same range, do not substitute another one:
112
+
113
+ ${I.map((W)=>` ${W}`).join(`
114
+ `)}
115
+ `:`The change under review is entirely new files — there is no diff to fetch.
116
+ Read each file below in full.
117
+ `}
118
+ ${b}, +${G.totalAdditions} −${G.totalDeletions}:
119
+
120
+ ${Z.join(`
121
+ `)}
122
+ ${C}`}async function XB(G){let{stdout:I,code:B}=await AG(vG(),["diff","--numstat",...G],{preserveOutputOnError:!1});return B===0?wb(I):null}async function VB(G){let{code:I}=await AG(vG(),["rev-parse","--verify",G],{preserveOutputOnError:!1});return I===0}async function Ab(){let{stdout:G,code:I}=await AG(vG(),["ls-files","--others","--exclude-standard"],{preserveOutputOnError:!1});return I===0?jb(G):[]}async function lB(){try{if(!await NG())return null;let G=await yB(),I="";if(G&&await VB(G))I=`${G}...HEAD`;else if(await VB("HEAD~1"))I="HEAD~1";let B=I?await XB([I])??[]:[],g=await XB(["HEAD"])??[],Z=await Ab(),b=Nb([B,g,Z]);if(b.length===0)return null;return{range:B.length>0?I:"",includesWorkingTree:g.length>0,files:b,totalAdditions:b.reduce((C,Y)=>C+Y.additions,0),totalDeletions:b.reduce((C,Y)=>C+Y.deletions,0)}}catch(G){return i(G),null}}var mb={med:"medium"},Lb=new RegExp(`^(${RG.map((G)=>G.slice(0,3)).join("|")})[a-z]*$`,"i");function kb(G){let I=G.trim().toLowerCase(),B=mb[I]??I;return RG.includes(B)?B:void 0}function Sb(G){let I=G.trim().split(/\s+/).filter(Boolean),B=I[0]??"",g=!1,Z=!1,b=[];for(let W of I)if(/^--comment$/i.test(W))g=!0;else if(/^--fix$/i.test(W))Z=!0;else b.push(W);if(B.toLowerCase()==="ultra")return{explicit:void 0,target:b.slice(1).join(" "),comment:g,fix:Z,unrecognizedLevel:void 0,ultraFallback:!0};let C=b[0]??"",Y=kb(C);if(Y!==void 0)return{explicit:Y,target:b.slice(1).join(" "),comment:g,fix:Z,unrecognizedLevel:void 0,ultraFallback:!1};return{explicit:void 0,target:b.join(" "),comment:g,fix:Z,unrecognizedLevel:C&&Lb.test(C)?C:void 0,ultraFallback:!1}}function ub(G,I){let B=G.ultraFallback?"max":G.explicit,g=I?.options?.mainLoopModel,Z=I?.getAppState?.().effortValue,b=g?dB(g,B??Z):B??Z;if(b===void 0)return"medium";return JB(b)}var Mb=(G)=>`## Scope
123
+
124
+ Review target: \`${G}\`. Resolve it to a unified diff before anything else —
125
+ \`gh pr diff <n>\` for a PR number, \`git diff <branch>...HEAD\` for a branch,
126
+ \`git diff HEAD -- <path>\` for a path — and treat that diff as the review scope.
127
+ Every angle below must use that same diff.
128
+ `,xb="## Scope\n\nRun `git diff @{upstream}...HEAD` (or `git diff main...HEAD` / `git diff HEAD~1`\nif there's no upstream) to get the unified diff under review, plus\n`git diff HEAD` for uncommitted changes. Treat the union as the review scope,\nand use the same range for every angle below.\n";function qb(G,I){if(G.target)return Mb(G.target);return I?HB(I):xb}var Db=`### Angle A — line-by-line scan + language pitfalls
129
+
130
+ Read every hunk in the diff, line by line. Then Read the enclosing function for
131
+ each hunk — bugs in unchanged lines of a touched function are in scope (the PR
132
+ re-exposes or fails to fix them). For every line ask: what input, state, timing,
133
+ or platform makes this line wrong? Cover the language-agnostic defects and the
134
+ pitfalls specific to this diff's language/framework alike: inverted/wrong
135
+ condition, off-by-one, null/undefined deref, missing \`await\`, falsy-zero check,
136
+ wrong-variable copy-paste, error swallowed in a catch, unescaped regex
137
+ metachars, \`==\` coercion, closure-captured loop var, mutable default arg,
138
+ late-binding closure, nil-map write, range-var capture, SQL injection,
139
+ timezone/DST drift, float equality.
140
+ `,$b=`### Angle B — removed-behavior auditor
141
+
142
+ For every line the diff DELETES or replaces, name the invariant or behavior it
143
+ enforced, then search the new code for where that invariant is re-established.
144
+ If you can't find it, that's a candidate: a removed guard, a dropped error
145
+ path, a narrowed validation, a deleted test that was covering a real case.
146
+ `,Pb=`### Angle C — cross-file tracer
147
+
148
+ For each function the diff changes, find its callers (Grep for the symbol) and
149
+ check whether the change breaks any call site: a new precondition, a changed
150
+ return shape, a new exception, a timing/ordering dependency. Also check callees:
151
+ does a parallel change in the same PR make a call unsafe?
152
+ `,Ob=`### Angle D — wrapper/proxy correctness
153
+
154
+ When the PR adds or modifies a type that wraps another (cache, proxy, decorator,
155
+ adapter): check that every method routes to the wrapped instance and not back
156
+ through a registry/session/global — e.g. a caching provider holding a
157
+ \`delegate\` field that resolves IDs via \`session.get(...)\` instead of
158
+ \`delegate.get(...)\` will re-enter the cache or recurse. Also check that the
159
+ wrapper forwards all the methods the callers actually use.
160
+ `,UG=`### Angle Z — cleanup pass (reuse, simplification, efficiency, altitude)
161
+
162
+ The angles above hunt for bugs; this one hunts for cleanup in the changed code.
163
+ Cover four axes and tag each candidate with the axis it came from:
164
+
165
+ - **reuse** — new code that re-implements something the codebase already has.
166
+ Grep shared modules and files adjacent to the change, and name the existing
167
+ helper to call instead.
168
+ - **simplification** — unnecessary complexity the diff adds: redundant or
169
+ derivable state, copy-paste with slight variation, deep nesting, dead code
170
+ left behind. Name the simpler form that does the same job.
171
+ - **efficiency** — wasted work the diff introduces: redundant computation or
172
+ repeated I/O, independent operations run sequentially, blocking work added to
173
+ startup or a hot path. Also long-lived objects built from closures or captured
174
+ environments — they keep the entire enclosing scope alive for the object's
175
+ lifetime (a memory leak when that scope holds large values); prefer a
176
+ class/struct that copies only the fields it needs. Name the cheaper
177
+ alternative.
178
+ - **altitude** — a change implemented at the wrong depth, as a fragile bandaid.
179
+ Special cases layered on shared infrastructure are a sign the fix isn't deep
180
+ enough; prefer generalizing the underlying mechanism over adding special cases.
181
+
182
+ These use the same \`file\`/\`line\`/\`summary\` shape as the correctness angles; in
183
+ \`failure_scenario\`, state the concrete cost (what is duplicated, wasted, or
184
+ harder to maintain) instead of a crash. Correctness bugs always outrank cleanup
185
+ findings when the output cap forces a cut.
186
+ `,Tb=`Pass every candidate with a nameable failure scenario through — finders that
187
+ silently drop half-believed candidates bypass the verify step and are the
188
+ dominant cause of misses.
189
+ `,Eb=`- **CONFIRMED** — can name the inputs/state that trigger it and the wrong
190
+ output or crash. Quote the line.
191
+ - **PLAUSIBLE** — mechanism is real, trigger is uncertain (timing, env,
192
+ config). State what would confirm it.
193
+ - **REFUTED** — factually wrong (code doesn't say that) or guarded elsewhere.
194
+ Quote the line that proves it.`,pb=`**PLAUSIBLE by default** — do not refute a candidate for being "speculative" or
195
+ "depends on runtime state" when the state is realistic: concurrency races,
196
+ nil/undefined on a rare-but-reachable path (error handler, cold cache, missing
197
+ optional field), falsy-zero treated as missing, off-by-one on a boundary the
198
+ code does not exclude, retry storms / partial failures, regex/allowlist that
199
+ lost an anchor. These are PLAUSIBLE.
200
+
201
+ **REFUTED** only when constructible from the code: factually wrong (quote the
202
+ actual line); provably impossible (type/constant/invariant — show it); already
203
+ handled in this diff (cite the guard); or pure style with no observable effect.`,_b=(G)=>`## Phase 2 — Verify (batched by file)
204
+
205
+ Dedup candidates that point at the same line and mechanism, keeping the one with
206
+ the most concrete failure scenario. Then group the survivors **by file** and run
207
+ **one verifier per file** via the ${GG} tool: give it that file, its hunks,
208
+ and every candidate in it. It returns one verdict per candidate${G?", recall-biased":""}:
209
+
210
+ ${G?pb:Eb}
211
+
212
+ Keep CONFIRMED and PLAUSIBLE. Drop REFUTED.
213
+ `,ab=`## Phase 3 — Sweep for gaps
214
+
215
+ Run **one more finder** as a fresh reviewer who has the verified list. Re-read
216
+ the diff and enclosing functions looking ONLY for defects not already listed.
217
+ Do not re-derive or re-confirm anything already there — the job is gaps. Focus
218
+ on what the first pass tends to miss: moved/extracted code that dropped a guard
219
+ or anchor; second-tier footguns (dataclass default evaluated once, \`hash()\`
220
+ non-determinism, lock-scope shrink, predicate methods with side effects);
221
+ setup/teardown asymmetry in tests; config defaults flipped.
222
+
223
+ Surface **up to 8 additional candidates**, each naming a defect not already on
224
+ the list. If nothing new, return an empty sweep — do not pad.
225
+ `,fb=(G)=>`## Output
226
+
227
+ Report the findings with a **single ${IG} tool call** — do not
228
+ also print them as text. ${IG} is a deferred tool: if it is
229
+ not already in your tool list, load it first with ${BI}
230
+ (\`select:${IG}\`). Its schema names the fields; this is what
231
+ the schema can't say:
232
+
233
+ - Rank \`findings\` most-severe first, correctness before cleanup.
234
+ - Set \`verdict\` from the verify pass, \`category\` to the angle's axis, and
235
+ \`level\` to the review effort.
236
+ - Keep the ${G} most severe if more survive, and call it with an empty
237
+ \`findings\` array if nothing does.
238
+ `,II=[Db,$b,Pb],cB=[...II,Ob],ib={medium:{header:"`medium effort → 4 angles × 6 candidates → verify by file → ≤8 findings`",intro:`You are reviewing for **precision** at medium effort: every finding you surface
239
+ should be one a maintainer would act on.`,angles:[...II,UG],candidates:6,recall:!1,sweep:!1,maxFindings:8},high:{header:"`high effort → 4 angles × 6 candidates → verify by file (recall) → ≤10 findings`",intro:`You are reviewing for **recall** at high effort: catch every real bug a careful
240
+ reviewer would catch in one sitting. At this level, catching real bugs matters
241
+ more than avoiding false positives. Err on the side of surfacing.`,angles:[...II,UG],candidates:6,recall:!0,sweep:!1,maxFindings:10},xhigh:{header:"`xhigh effort → 5 angles × 8 candidates → verify by file (recall) → sweep → ≤15 findings`",intro:`You are reviewing for **recall** at extra-high effort: catch every real bug. At
242
+ this level, catching real bugs matters more than avoiding false positives — a
243
+ missed bug ships. Err on the side of surfacing.`,angles:[...cB,UG],candidates:8,recall:!0,sweep:!0,maxFindings:15},max:{header:"`max effort → 5 angles × 8 candidates → verify by file (recall) → sweep → ≤15 findings`",intro:`You are reviewing for **recall** at maximum effort: catch every real bug. At
244
+ this level, catching real bugs matters more than avoiding false positives — a
245
+ missed bug ships. Err on the side of surfacing.`,angles:[...cB,UG],candidates:8,recall:!0,sweep:!0,maxFindings:15}};function ob(G,I){let B=G.angles.length-1;return`${G.header}
246
+
247
+ ${G.intro}
248
+
249
+ ${I}
250
+ ## Phase 1 — Find candidates (${B} correctness angles + 1 cleanup angle, up to ${G.candidates} each)
251
+
252
+ Run **${G.angles.length} independent finder angles** via the ${GG} tool. Each surfaces
253
+ **up to ${G.candidates} candidate findings** with \`file\`, \`line\`, a one-line \`summary\`, and a
254
+ concrete \`failure_scenario\`. Do NOT let one angle's conclusions suppress
255
+ another's — if two angles flag the same line for different reasons, record both.
256
+
257
+ ${G.angles.join(`
258
+ `)}
259
+ ${Tb}
260
+ ${_b(G.recall)}${G.sweep?`
261
+ ${ab}`:""}
262
+ ${fb(G.maxFindings)}`}var nb=(G)=>`\`low effort → 1 diff pass → no verify → ≤4 findings\`
263
+
264
+ ${G}
265
+ ## Turn 1 — read
266
+
267
+ One tool call: read the diff named in the Scope section above. Skip test/fixture
268
+ hunks (\`test/\`, \`spec/\`, \`__tests__/\`, \`*_test.*\`, \`*.test.*\`,
269
+ \`fixtures/\`, \`testdata/\`) — test-file changes are not reviewed at this level.
270
+ No subagents, no full-file reads.
271
+
272
+ ## Turn 2 — findings
273
+
274
+ Flag runtime-correctness bugs visible from the hunk alone: inverted/wrong
275
+ condition, off-by-one, null/undefined deref where adjacent lines show the value
276
+ can be absent, removed guard, falsy-zero check, missing \`await\`,
277
+ wrong-variable copy-paste, error swallowed in a catch that should propagate.
278
+ Also flag — still from the hunk alone — new code that duplicates an existing
279
+ helper visible in the diff context, and dead code the diff leaves behind.
280
+
281
+ Do **not** flag style, naming, perf, missing tests, or anything outside the
282
+ hunk.
283
+
284
+ Output at most **4 findings**, most-severe first, one line each:
285
+ \`path/to/file.ext:123 — what's wrong and the concrete failure\`. If nothing
286
+ qualifies, output exactly \`(none)\`.
287
+ `,sb=`
288
+
289
+ ## Posting to GitHub (--comment)
290
+
291
+ The \`--comment\` flag was passed. In addition to producing the findings report
292
+ (the ${IG} call at medium+ effort, or the text list at
293
+ low effort), if the review target is a GitHub PR, post each finding as an inline
294
+ PR comment via \`gh api\` (repos/{owner}/{repo}/pulls/{pr}/comments; one call per
295
+ finding; include a suggestion block only when it fully fixes the issue). If
296
+ \`gh\` is not available in this session, or the target is not a PR, just produce
297
+ the findings report and note that \`--comment\` was ignored.
298
+ `,rb=`
299
+
300
+ ## Applying fixes (--fix)
301
+
302
+ The \`--fix\` flag was passed. After producing the findings report, apply the
303
+ findings to the working tree instead of stopping at the report: fix each one
304
+ directly — correctness bugs and reuse/simplification/efficiency cleanups alike.
305
+ Skip any finding whose fix would change intended behavior, require changes well
306
+ outside the reviewed diff, or that you judge to be a false positive — note the
307
+ skip rather than arguing with it. Then report each finding's outcome
308
+ (\`fixed\` / \`skipped\` / \`no_change_needed\`): at medium+ effort, re-call
309
+ ${IG} with the \`outcome\` field set on each finding; at
310
+ low effort, note it inline. Finish with a brief summary of what was fixed and
311
+ what was skipped.
312
+ `,tb=`
313
+
314
+ ## Headless output (non-interactive session)
315
+
316
+ You are running non-interactively (\`-p\`), where the ${IG}
317
+ render is not shown. After the tool call, print the same findings as a JSON array
318
+ to stdout — one object per finding with the schema's fields (\`file\`, \`line\`,
319
+ \`summary\`, \`failure_scenario\`), ranked most-severe first, \`[]\` if nothing
320
+ survived — so text-mode consumers still receive them.
321
+ `;function eb(G,I,B){let g=ub(G,I),Z="";if(G.ultraFallback)Z=`(ultra (cloud review) isn't available in Claudin — running a local ${g}-effort review${G.fix?" and applying its findings":""}.)
322
+ `;else if(G.unrecognizedLevel!==void 0)Z=`(Ignoring unrecognized effort "${G.unrecognizedLevel}"; valid: ${RG.join(", ")}. Using ${g}.)
323
+ `;let b=qb(G,B??null),C=g==="low"?nb(b):ob(ib[g],b),Y=g!=="low"&&XG()?tb:"";return`${Z}${C}${G.comment?sb:""}${G.fix?rb:""}${Y}`}function KB(){v({name:"code-review",description:"Review the current diff for correctness bugs and reuse/simplification/efficiency cleanups at the given effort level (low/medium: fewer, high-confidence findings; high→max: broader coverage, may include uncertain findings). Pass --comment to post findings as inline PR comments, or --fix to apply the findings to the working tree after the review.",whenToUse:"When the user wants changed/recent code reviewed for correctness bugs and reuse/simplification/efficiency cleanups.",argumentHint:`[${RG.join("|")}] [--fix] [--comment] [<target>]`,userInvocable:!0,disableModelInvocation:!1,allowedTools:[GG,BI,IG,"Read","Grep","Glob","Bash(git diff:*)","Bash(git status:*)","Bash(git log:*)","Bash(gh pr view:*)","Bash(gh pr diff:*)"],async getPromptForCommand(G,I){let B=Sb(G),g=B.target?null:await lB();return[{type:"text",text:eb(B,I,g)}]}})}f();var GC={skill:"skill",skills:"skill",command:"skill",rule:"rule",rules:"rule",agent:"agent",agents:"agent",subagent:"agent"},IC=`# Create Claudin Customizations
324
+
325
+ You are helping the user create or refine Claudin customizations. Follow this
326
+ workflow:
327
+
328
+ 1. **Intent** — Decide whether the user wants to *create* something new or
329
+ *refine* an existing artifact. If refining, Read the existing file first and
330
+ validate its frontmatter against the contract below before changing it.
331
+ 2. **Type** — Pick the right artifact for the job:
332
+ - **Skill**: a reusable workflow or reference knowledge, invoked on demand
333
+ (\`/<name>\` by the user, or auto-invoked by the model when relevant).
334
+ Costs nothing in context until invoked.
335
+ - **Rule**: always-on (or path-conditional) instructions loaded into
336
+ context automatically. Costs context every session — keep rules short.
337
+ - **Agent**: a subagent with its own system prompt, tool allowlist, and
338
+ context window, dispatched via the Agent tool for delegated work.
339
+ If the choice is ambiguous, ask the user with a one-line trade-off summary.
340
+ 3. **Scope** — Ask (or infer from the request) whether it belongs to the
341
+ project (\`.claudin/\` in the repo, shared via git) or to the user globally
342
+ (\`~/.claudin/\`, available in every project). Default: project for
343
+ repo-specific workflows/conventions, global for personal preferences.
344
+ 4. **Interview** — Ask only what you cannot infer: what should it do, when
345
+ should it trigger, which tools does it need, any inputs/arguments. Keep it
346
+ to one short round; if the current conversation already contains the
347
+ workflow being captured ("turn this into a skill"), extract the answers
348
+ from it instead of asking.
349
+ 5. **Draft & save** — Write the file at the correct path using the contract
350
+ for its type. Look at existing artifacts in the target directory first and
351
+ match their style; never overwrite an existing file without telling the
352
+ user.
353
+ 6. **Verify** — Confirm the artifact loads (see "Verifying" below) and show
354
+ the user the file plus a one-line usage example.
355
+
356
+ The description fields (\`description\`, \`when_to_use\`) are what the runtime
357
+ uses to decide auto-invocation and delegation — spend the most effort there.
358
+ Be specific about the trigger conditions, not just the capability.`,hB="## Skills\n\n**Location** (layout is mandatory — a loose `.md` at the root of `skills/`\nis ignored):\n- Project: `.claudin/skills/<name>/SKILL.md`\n- Global: `~/.claudin/skills/<name>/SKILL.md`\n- Nested categories work: `skills/<category>/<name>/SKILL.md`\n- Extra files (references, scripts) may live next to `SKILL.md` — discovery\n only picks up `SKILL.md`, so use sibling files for progressive disclosure\n and tell the skill body to Read them on demand.\n- `.claudin/commands/` also loads but is **deprecated** — always create\n skills, and offer to migrate if you find the user still has commands there.\n\n**Format** — YAML frontmatter + markdown body (the body becomes the prompt):\n\n```markdown\n---\nname: my-skill\ndescription: What it does AND when to use it — this drives auto-invocation.\n---\n\nInstructions for the model...\n```\n\n**Supported frontmatter** (anything else is ignored):\n| Key | Meaning |\n|---|---|\n| `name` | Display name (defaults to the directory name) |\n| `description` | What/when — shown in `/skills` and used for auto-invocation |\n| `when_to_use` | Extra trigger guidance (note: snake_case, unlike the other keys) |\n| `allowed-tools` | Tool allowlist while the skill runs, e.g. `Read, Bash(git diff:*)` |\n| `argument-hint` | Hint shown in the composer, e.g. `[pr-number]` |\n| `arguments` | Argument names as a space-separated string or YAML list of plain strings (e.g. `arguments: name repo`) — NOT a list of objects; each name becomes a `$<name>` placeholder |\n| `disable-model-invocation` | `true` = only the user can invoke (use for side-effectful workflows like deploys) |\n| `user-invocable` | `false` = model-only (hidden from `/` menu) |\n| `model` | Override model for this skill, or `inherit` |\n| `effort` | Effort level (`low`/`medium`/`high`/...) or an integer |\n| `context` | `fork` = run in a forked subagent instead of inline |\n| `agent` | Named agent to run the skill in (with `context: fork`) |\n| `paths` | Globs — makes the skill conditional, loaded when matching files are touched |\n| `hooks` | Skill-scoped hooks (same schema as settings.json hooks) |\n| `version` | Informational version string |\n\n**Body features**: `$ARGUMENTS` is replaced with the full invocation args,\n`$0`/`$ARGUMENTS[0]` with individual args, and `$<name>` with the\npositional arg matching `arguments`; `${CLAUDIN_SKILL_DIR}` resolves to the\nskill's directory (for referencing sibling scripts); `!` + backtick-wrapped\nshell commands are executed before the prompt is sent (gated by\n`allowed-tools`).\n\n**Gotchas**:\n- `SKILL.md` must be inside its own directory — `skills/foo.md` silently\n does not load.\n- Keep the body focused; move long reference material to sibling files.",FB='## Agents (subagents)\n\n**Location** — flat `.md` files, one agent per file:\n- Project: `.claudin/agents/<name>.md`\n- Global: `~/.claudin/agents/<name>.md`\n\n**Format** — the markdown body is the agent\'s **system prompt**:\n\n```markdown\n---\nname: my-reviewer\ndescription: Use this agent when the user asks for a security-focused review.\ntools: Read, Grep, Glob\n---\n\nYou are a security reviewer. Given a diff, you...\n```\n\n**Supported frontmatter**:\n| Key | Meaning |\n|---|---|\n| `name` | **Required** — the agent type used in Agent tool dispatch. Files without it are silently skipped |\n| `description` | **Required** — "when to delegate to this agent"; drives automatic delegation |\n| `tools` | Tool allowlist (comma list). Omit = all tools |\n| `disallowedTools` | Tools to remove from the allowlist |\n| `model` | ⚠️ **Not supported** in agent markdown — do not add it (common habit from other tools); the agent inherits the session model |\n| `color` | Accent color in the TUI |\n| `background` | `true` = always run as a background task |\n| `memory` | `user` \\| `project` \\| `local` — persistent agent memory scope (auto-adds Read/Write/Edit) |\n| `isolation` | `worktree` = run in an isolated git worktree |\n| `effort` | Effort level or integer |\n| `permissionMode` | Permission mode the agent runs under |\n| `maxTurns` | Turn budget (positive integer) |\n| `skills` | Skill names to preload into the agent |\n| `initialPrompt` | Text prepended to the agent\'s first user turn |\n| `mcpServers` | MCP servers by name reference or inline config |\n| `hooks` | Agent-scoped hooks |\n\n**Gotchas**:\n- Missing `name` or `description` → the file is treated as co-located\n documentation and skipped without an error.\n- Write `description` from the *dispatcher\'s* point of view ("Use this agent\n when...") — it is what the main model reads when deciding to delegate.\n- For interactive creation the `/agents` wizard also works; creating the\n `.md` directly is equivalent and reviewable in git.',zB='## Rules\n\n**Location** — plain markdown, nested subdirectories allowed:\n- Project: `.claudin/rules/<topic>.md`\n- Global: `~/.claudin/rules/<topic>.md`\n\n**Format** — markdown, auto-loaded into context. The only supported\nfrontmatter key is `paths`:\n\n```markdown\n---\npaths: src/api/**, src/services/api/**\n---\n\n# API conventions\n...\n```\n\n- No `paths` (or `paths: "**"`) → the rule is unconditional: loaded into\n every session. **It costs context every turn — keep it short and factual.**\n- With `paths` globs → conditional: activated only when files matching the\n globs are touched. Project-rule globs are relative to the directory\n containing `.claudin/`.\n\n**Gotchas**:\n- `alwaysApply`, `globs`, `description` frontmatter (Cursor/other tools) are\n **not supported** — only `paths`. Migrate `globs:` → `paths:`.\n- One topic per file; prefer several small conditional rules over one large\n unconditional one.\n- If guidance is only needed on demand, make it a skill instead of a rule.',BC=`## Verifying
359
+
360
+ - **Skills**: if the skills directory already existed when the session
361
+ started, a file watcher picks up the new skill within a few seconds — check
362
+ with \`/skills\` or by invoking \`/<name>\`. If you just created the
363
+ \`skills/\` directory itself, the watcher is not attached: tell the user to
364
+ restart the session.
365
+ - **Agents and rules**: loaded at session start — tell the user to restart
366
+ the session (agents also reload when the \`/agents\` wizard runs).
367
+ - Always show the user the final file path and how to invoke or trigger what
368
+ you created.`,gC={skill:hB,rule:zB,agent:FB};function ZC(G){let I=G.trim(),[B,...g]=I.split(/\s+/),Z=B?GC[B.toLowerCase()]:void 0,b=Z?[gC[Z]]:[hB,zB,FB],C=Z?g.join(" "):I,Y=C?`
369
+
370
+ ## User Request
371
+
372
+ ${Z?`Artifact type: ${Z}. `:""}${C}`:Z?`
373
+
374
+ ## User Request
375
+
376
+ Artifact type: ${Z}. Ask the user what it should do.`:"";return[IC,...b,BC].join(`
377
+
378
+ `)+Y}function QB(){v({name:"create",description:"Create or refine Claudin customizations — skills, rules, and custom agents — in the project (.claudin/) or global (~/.claudin/) structure.",whenToUse:"When the user wants to create, scaffold, improve, or fix a skill, rule, slash command, or custom agent/subagent for Claudin.",argumentHint:"[skill|rule|agent] [description]",userInvocable:!0,disableModelInvocation:!1,allowedTools:["Read","Write","Edit","Glob","Grep"],async getPromptForCommand(G){return[{type:"text",text:ZC(G)}]}})}CC();gI();yG();wG();bC();f();import{open as YC,stat as WC}from"fs/promises";var mG=20,XC=65536;function UB(){v({name:"debug",description:"Enable debug logging for this session and help diagnose issues",allowedTools:["Read","Grep","Glob"],argumentHint:"[issue description]",disableModelInvocation:!0,userInvocable:!0,async getPromptForCommand(G){let I=jB(),B=NB(),g;try{let C=await WC(B),Y=Math.min(C.size,XC),W=C.size-Y,d=await YC(B,"r");try{let{buffer:R,bytesRead:K}=await d.read({buffer:Buffer.alloc(Y),position:W}),J=R.toString("utf-8",0,K).split(`
379
+ `).slice(-mG).join(`
380
+ `);g=`Log size: ${AB(C.size)}
381
+
382
+ ### Last ${mG} lines
383
+
384
+ \`\`\`
385
+ ${J}
386
+ \`\`\``}finally{await d.close()}}catch(C){g=wB(C)?"No debug log exists yet — logging was just enabled.":`Failed to read last ${mG} lines of debug log: ${a(C)}`}return[{type:"text",text:`# Debug Skill
387
+
388
+ Help the user debug an issue they're encountering in this current Claudin session.
389
+ ${I?"":`
390
+ ## Debug Logging Just Enabled
391
+
392
+ Debug logging was OFF for this session until now. Nothing prior to this /debug invocation was captured.
393
+
394
+ Tell the user that debug logging is now active at \`${B}\`, ask them to reproduce the issue, then re-read the log. If they can't reproduce, they can also restart with \`claude --debug\` to capture logs from startup.
395
+ `}
396
+ ## Session Debug Log
397
+
398
+ The debug log for the current session is at: \`${B}\`
399
+
400
+ ${g}
401
+
402
+ For additional context, grep for [ERROR] and [WARN] lines across the full file.
403
+
404
+ ## Issue Description
405
+
406
+ ${G||"The user did not describe a specific issue. Read the debug log and summarize any errors, warnings, or notable issues."}
407
+
408
+ ## Settings
409
+
410
+ Remember that settings are in:
411
+ * user - ${LG("userSettings")}
412
+ * project - ${LG("projectSettings")}
413
+ * local - ${LG("localSettings")}
414
+
415
+ ## Instructions
416
+
417
+ 1. Review the user's issue description
418
+ 2. The last ${mG} lines show the debug file format. Look for [ERROR] and [WARN] entries, stack traces, and failure patterns across the file
419
+ 3. Consider launching the ${vB} subagent to understand the relevant Claudin features
420
+ 4. Explain what you found in plain language
421
+ 5. Suggest concrete fixes or next steps
422
+ `}]}})}LB();f();function VC(){return`# Fewer Permission Prompts
423
+
424
+ Look through my transcripts' MCP and bash tool calls, and based on those, make a prioritized list of patterns that I should add to my permission allowlist to reduce permission prompts. Focus on read-only commands.
425
+
426
+ The format for permissions is: \`Bash(foo*)\`, \`Bash(foo)\`, \`Bash(foo bar *)\`, \`mcp__slack__slack_read_thread\`, etc.
427
+
428
+ Then, add these to the project \`.claudin/settings.json\` under \`permissions.allow\`.
429
+
430
+ ## Steps
431
+
432
+ 1. **Locate transcripts.** Session transcripts live under \`${mB()}/<sanitized-cwd>/*.jsonl\` (this is Claudin's projects dir, honoring \`CLAUDIN_CONFIG_DIR\`). Each line is a JSON object. Tool calls appear as \`assistant\` messages with \`message.content[]\` entries of \`type: "tool_use"\`. The \`name\` field identifies the tool (e.g. \`"Bash"\`, \`"mcp__slack__slack_read_thread"\`); for Bash, \`input.command\` is the shell string.
433
+
434
+ Scan the recent transcripts across the projects dir — not just the current project — so the allowlist reflects their actual usage. Cap the scan at a reasonable number of recent sessions (e.g. 50 most-recently-modified JSONL files) so this stays fast.
435
+
436
+ 2. **Extract tool-call frequencies.**
437
+ - For \`Bash\` calls: parse \`input.command\`, take the leading command token (handling \`sudo\`, \`timeout\`, pipes, \`&&\`, env-var prefixes). Record the command + first subcommand pair (e.g. \`git status\`, \`gh pr view\`, \`ls\`, \`cat\`).
438
+ - For MCP calls: record the full tool name (e.g. \`mcp__slack__slack_read_thread\`).
439
+ - Count occurrences across the scanned transcripts.
440
+
441
+ 3. **Filter to read-only.** Keep only commands that don't mutate state. Examples of read-only: \`ls\`, \`cat\`, \`pwd\`, \`git status\`, \`git log\`, \`git diff\`, \`git show\`, \`git branch\`, \`rg\`, \`grep\`, \`find\`, \`head\`, \`tail\`, \`wc\`, \`file\`, \`which\`, \`echo\`, \`date\`, \`gh pr view\`, \`gh pr list\`, \`gh pr diff\`, \`gh issue view\`, \`gh issue list\`, \`gh run list\`, \`gh run view\`, \`gh api\` (GET), \`bun run typecheck\`, \`bun run lint\`, \`bun run test\` (for tests that don't mutate), \`docker ps\`, \`docker logs\`, \`kubectl get\`, \`kubectl describe\`, \`ps\`, \`top\`, \`df\`, \`du\`, \`env\`, \`printenv\`, any MCP tool with \`read\`/\`get\`/\`list\`/\`search\`/\`view\` in its name.
442
+
443
+ Drop anything that writes, deletes, renames, pushes, merges, installs, or runs a build/test that has side effects. When in doubt, leave it out.
444
+
445
+ **Never allowlist a pattern that grants arbitrary code execution.** A wildcard rule for any of these (e.g. \`Bash(python3:*)\`) is equivalent to allowing arbitrary code execution. This list is not exhaustive — apply the same rule to anything in the same category:
446
+ - Interpreters: \`python\`/\`python3\`, \`node\`, \`bun\`, \`deno\`, \`ruby\`, \`perl\`, \`php\`, \`lua\`, etc.
447
+ - Shells: \`bash\`, \`sh\`, \`zsh\`, \`fish\`, \`eval\`, \`exec\`, \`ssh\`, etc.
448
+ - Package runners: \`npx\`, \`bunx\`, \`uvx\`, \`uv run\`, etc.
449
+ - Task-runner wildcards: \`npm run *\`, \`yarn run *\`, \`pnpm run *\`, \`bun run *\`, \`make *\`, \`just *\`, \`cargo run *\`, \`go run *\`, etc. — an exact \`Bash(bun run typecheck)\` is fine, \`Bash(bun run *)\` is not
450
+ - \`gh api *\`, \`docker run\`/\`exec\`, \`kubectl exec\`, \`sudo\`, and similar
451
+
452
+ 4. **Drop commands Claudin already auto-allows.** These don't need an allowlist entry — they never prompt. If you see any of these in the transcripts, skip them; don't suggest them to the user.
453
+
454
+ - **Always auto-allowed (any args):** \`cal\`, \`uptime\`, \`cat\`, \`head\`, \`tail\`, \`wc\`, \`stat\`, \`strings\`, \`hexdump\`, \`od\`, \`nl\`, \`id\`, \`uname\`, \`free\`, \`df\`, \`du\`, \`locale\`, \`groups\`, \`nproc\`, \`basename\`, \`dirname\`, \`realpath\`, \`cut\`, \`paste\`, \`tr\`, \`column\`, \`tac\`, \`rev\`, \`fold\`, \`expand\`, \`unexpand\`, \`fmt\`, \`comm\`, \`cmp\`, \`numfmt\`, \`readlink\`, \`diff\`, \`true\`, \`false\`, \`sleep\`, \`which\`, \`type\`, \`expr\`, \`test\`, \`getconf\`, \`seq\`, \`tsort\`, \`pr\`, \`echo\`, \`printf\`, \`ls\`, \`cd\`, \`find\`.
455
+ - **Auto-allowed with zero args only:** \`pwd\`, \`whoami\`, \`alias\`.
456
+ - **Auto-allowed exact forms:** \`node -v\`, \`node --version\`, \`python --version\`, \`python3 --version\`, \`ip addr\`.
457
+ - **Auto-allowed with safe flags only (validated):** \`xargs\`, \`file\`, \`sed\` (read-only expressions), \`sort\`, \`man\`, \`help\`, \`netstat\`, \`ps\`, \`base64\`, \`grep\`, \`egrep\`, \`fgrep\`, \`sha256sum\`, \`sha1sum\`, \`md5sum\`, \`tree\`, \`date\`, \`hostname\`, \`info\`, \`lsof\`, \`pgrep\`, \`tput\`, \`ss\`, \`fd\`, \`fdfind\`, \`rg\`, \`jq\`, \`uniq\`, \`history\`, \`arch\`, \`ifconfig\`, \`pyright\`.
458
+ - **All git read-only subcommands:** \`git status\`, \`git log\`, \`git diff\`, \`git show\`, \`git blame\`, \`git branch\`, \`git tag\`, \`git remote\`, \`git ls-files\`, \`git ls-remote\`, \`git config --get\`, \`git rev-parse\`, \`git describe\`, \`git stash list\`, \`git reflog\`, \`git shortlog\`, \`git cat-file\`, \`git for-each-ref\`, \`git worktree list\`, etc.
459
+ - **All gh read-only subcommands:** \`gh pr view\`, \`gh pr list\`, \`gh pr diff\`, \`gh pr checks\`, \`gh pr status\`, \`gh issue view\`, \`gh issue list\`, \`gh issue status\`, \`gh run view\`, \`gh run list\`, \`gh workflow list\`, \`gh workflow view\`, \`gh repo view\`, \`gh release view\`, \`gh release list\`, \`gh api\` (GET), \`gh auth status\`, etc.
460
+ - **Docker read-only subcommands:** \`docker ps\`, \`docker images\`, \`docker logs\`, \`docker inspect\`.
461
+
462
+ Source of truth: \`src/tools/BashTool/readOnlyValidation.ts\` (\`COMMAND_ALLOWLIST\`, \`READONLY_COMMANDS\`, \`READONLY_COMMAND_REGEXES\`) and \`src/platform/shell/readOnlyCommandValidation.ts\` (\`GIT_READ_ONLY_COMMANDS\`, \`GH_READ_ONLY_COMMANDS\`, \`DOCKER_READ_ONLY_COMMANDS\`, \`RIPGREP_READ_ONLY_COMMANDS\`, \`PYRIGHT_READ_ONLY_COMMANDS\`). If you're in this repo and unsure whether a command is covered, grep these files rather than guessing.
463
+
464
+ 5. **Pick the pattern form.** Use the narrowest pattern that still covers the observed usage:
465
+ - If the user runs many variants (\`git log\`, \`git log --oneline\`, \`git log main..HEAD\`): use \`Bash(git log *)\` — note the space before \`*\`, which is required for prefix matching to work correctly.
466
+ - If a single exact invocation is common: use \`Bash(foo)\` with no wildcard.
467
+ - For MCP: use the full tool name verbatim (no wildcard needed; they're already specific).
468
+ - Never widen a pattern to the point that it conflicts with the rules above (no arbitrary code execution, no mutation/side effects).
469
+
470
+ 6. **Prioritize.** Rank by count descending. Drop anything that appeared fewer than ~3 times — not worth the allowlist entry. Cap the list at the top ~20 so the user can skim it.
471
+
472
+ 7. **Present the prioritized list to the user** as a markdown table with columns: rank, pattern, count, one-line description. Example:
473
+
474
+ | # | Pattern | Count | Notes |
475
+ |---|---------|-------|-------|
476
+ | 1 | \`Bash(git status *)\` | 142 | repo status checks |
477
+ | 2 | \`Bash(gh pr view *)\` | 87 | PR inspection |
478
+ | 3 | \`mcp__slack__slack_read_thread\` | 54 | Slack thread reads |
479
+
480
+ 8. **Merge into \`.claudin/settings.json\`** in the current project (not the user-level \`settings.json\`, not \`.claudin/settings.local.json\`). Create the file if it doesn't exist. Preserve existing keys and existing entries in \`permissions.allow\`; de-duplicate against what's already there; don't remove anything; don't reorder unrelated fields.
481
+
482
+ 9. **Report back.** Tell the user what you added (count + a few examples), what was already in the allowlist, and what you skipped and why (e.g. "dropped \`rm\` and \`git push\` — not read-only; dropped \`cat\`/\`ls\`/\`git status\` — already auto-allowed, no rule needed").
483
+
484
+ Do not add anything to \`permissions.deny\` or \`permissions.ask\`. Do not touch any other settings field.`}function kB(){v({name:"fewer-permission-prompts",description:"Scan recent transcripts for common read-only Bash/MCP calls and add a prioritized allowlist to the project's .claudin/settings.json to reduce permission prompts.",whenToUse:"When the user wants to cut down on permission prompts by allowlisting their frequent read-only commands.",userInvocable:!0,disableModelInvocation:!1,allowedTools:["Read","Grep","Glob","Edit","Write","Bash(ls:*)"],async getPromptForCommand(){return[{type:"text",text:VC()}]}})}lC();dC();cC();SB();yC();var bI=["Global","Chat","Autocomplete","Confirmation","Help","Transcript","HistorySearch","Task","ThemePicker","Settings","Tabs","Attachments","Footer","MessageSelector","DiffDialog","ModelPicker","Select","Plugin","Memory"],uB={Global:"Active everywhere, regardless of focus",Chat:"When the chat input is focused",Autocomplete:"When autocomplete menu is visible",Confirmation:"When a confirmation/permission dialog is shown",Help:"When the help overlay is open",Transcript:"When viewing the transcript",HistorySearch:"When searching command history (ctrl+r)",Task:"When a task/agent is running in the foreground",ThemePicker:"When the theme picker is open",Settings:"When the settings menu is open",Tabs:"When tab navigation is active",Attachments:"When navigating image attachments in a select dialog",Footer:"When footer indicators are focused",MessageSelector:"When the message selector (rewind) is open",DiffDialog:"When the diff dialog is open",ModelPicker:"When the model picker is open",Select:"When a select/list component is focused",Plugin:"When the plugin dialog is open",Memory:"When browsing a memory directory in /memory"},CI=["app:interrupt","app:exit","app:toggleTodos","app:toggleTranscript","app:toggleTeammatePreview","app:toggleTerminal","app:redraw","app:globalSearch","app:quickOpen","history:search","history:previous","history:next","chat:cancel","chat:killAgents","chat:cycleMode","chat:modelPicker","chat:fastMode","chat:thinkingToggle","chat:increaseEffort","chat:decreaseEffort","chat:submit","chat:newline","chat:undo","chat:externalEditor","chat:openDiff","chat:openExplorer","chat:stash","chat:focusPanel","chat:imagePaste","chat:messageActions","autocomplete:accept","autocomplete:dismiss","autocomplete:previous","autocomplete:next","confirm:yes","confirm:no","confirm:previous","confirm:next","confirm:nextField","confirm:previousField","confirm:cycleMode","confirm:toggle","confirm:toggleExplanation","tabs:next","tabs:previous","transcript:toggleShowAll","transcript:exit","historySearch:next","historySearch:accept","historySearch:cancel","historySearch:execute","task:background","theme:toggleSyntaxHighlighting","help:dismiss","attachments:next","attachments:previous","attachments:remove","attachments:exit","footer:up","footer:down","footer:next","footer:previous","footer:openSelected","footer:clearSelection","footer:close","messageSelector:up","messageSelector:down","messageSelector:top","messageSelector:bottom","messageSelector:select","diff:dismiss","diff:close","diff:previousSource","diff:nextSource","diff:focusList","diff:focusContent","diff:viewDetails","diff:previousFile","diff:nextFile","diff:nextTab","diff:refresh","diff:expandAll","diff:focusPrompt","diff:select","diff:focusSectionUp","diff:focusSectionDown","modelPicker:decreaseEffort","modelPicker:increaseEffort","select:next","select:previous","select:accept","select:cancel","select:search","select:toggleFavorite","plugin:toggle","plugin:install","memory:openFolder","memory:delete","permission:toggleDebug","settings:search","settings:retry","settings:close","settings:usageDay","settings:usageWeek","voice:pushToTalk"],HC=ZI(()=>E.object({context:E.enum(bI).describe("UI context where these bindings apply. Global bindings work everywhere."),bindings:E.record(E.string().describe('Keystroke pattern (e.g., "ctrl+k", "shift+tab")'),E.union([E.enum(CI),E.string().regex(/^command:[a-zA-Z0-9:\-_]+$/).describe('Command binding (e.g., "command:help", "command:compact"). Executes the slash command as if typed.'),E.null().describe("Set to null to unbind a default shortcut")]).describe("Action to trigger, command to invoke, or null to unbind")).describe("Map of keystroke patterns to actions")}).describe("A block of keybindings for a specific context")),X2=ZI(()=>E.object({$schema:E.string().optional().describe("JSON Schema URL for editor validation"),$docs:E.string().optional().describe("Documentation URL"),bindings:E.array(HC()).describe("Array of keybinding blocks by context")}).describe("Claudin keybindings configuration. Customize keyboard shortcuts by context."));MB();f();function JC(){return YI(["Context","Description"],bI.map((G)=>[`\`${G}\``,uB[G]]))}function RC(){let G={};for(let I of xB)for(let[B,g]of Object.entries(I.bindings))if(g){if(!G[g])G[g]={keys:[],context:I.context};G[g].keys.push(B)}return YI(["Action","Default Key(s)","Context"],CI.map((I)=>{let B=G[I],g=B?B.keys.map((b)=>`\`${b}\``).join(", "):"(none)",Z=B?B.context:KC(I);return[`\`${I}\``,g,Z]}))}function KC(G){let I=G.split(":")[0];return{app:"Global",history:"Global or Chat",chat:"Chat",autocomplete:"Autocomplete",confirm:"Confirmation",tabs:"Tabs",transcript:"Transcript",historySearch:"HistorySearch",task:"Task",theme:"ThemePicker",help:"Help",attachments:"Attachments",footer:"Footer",messageSelector:"MessageSelector",diff:"DiffDialog",modelPicker:"ModelPicker",select:"Select",permission:"Confirmation"}[I??""]??"Unknown"}function hC(){let G=[];G.push("### Non-rebindable (errors)");for(let I of qB)G.push(`- \`${I.key}\` — ${I.reason}`);G.push(""),G.push("### Terminal reserved (errors/warnings)");for(let I of DB)G.push(`- \`${I.key}\` — ${I.reason} (${I.severity==="error"?"will not work":"may conflict"})`);G.push(""),G.push("### macOS reserved (errors)");for(let I of $B)G.push(`- \`${I.key}\` — ${I.reason}`);return G.join(`
485
+ `)}var FC={$schema:"https://www.schemastore.org/claude-code-keybindings.json",$docs:"https://code.claude.com/docs/en/keybindings",bindings:[{context:"Chat",bindings:{"ctrl+e":"chat:externalEditor"}}]},zC={context:"Chat",bindings:{"ctrl+s":null}},QC={context:"Chat",bindings:{"ctrl+g":null,"ctrl+e":"chat:externalEditor"}},wC={context:"Global",bindings:{"ctrl+k ctrl+t":"app:toggleTodos"}},jC=["# Keybindings Skill","","Create or modify `~/.claudin/keybindings.json` to customize keyboard shortcuts.","","## CRITICAL: Read Before Write","","**Always read `~/.claudin/keybindings.json` first** (it may not exist yet). Merge changes with existing bindings — never replace the entire file.","","- Use **Edit** tool for modifications to existing files","- Use **Write** tool only if the file does not exist yet"].join(`
486
+ `),NC=["## File Format","","```json",CG(FC,null,2),"```","","Always include the `$schema` and `$docs` fields."].join(`
487
+ `),AC=["## Keystroke Syntax","","**Modifiers** (combine with `+`):","- `ctrl` (alias: `control`)","- `alt` (aliases: `opt`, `option`) — note: `alt` and `meta` are identical in terminals","- `shift`","- `meta` (aliases: `cmd`, `command`)","","**Special keys**: `escape`/`esc`, `enter`/`return`, `tab`, `space`, `backspace`, `delete`, `up`, `down`, `left`, `right`","","**Chords**: Space-separated keystrokes, e.g. `ctrl+k ctrl+s` (1-second timeout between keystrokes)","","**Examples**: `ctrl+shift+p`, `alt+enter`, `ctrl+k ctrl+n`"].join(`
488
+ `),vC=["## Unbinding Default Shortcuts","","Set a key to `null` to remove its default binding:","","```json",CG(zC,null,2),"```"].join(`
489
+ `),UC=["## How User Bindings Interact with Defaults","","- User bindings are **additive** — they are appended after the default bindings","- To **move** a binding to a different key: unbind the old key (`null`) AND add the new binding","- A context only needs to appear in the user's file if they want to change something in that context"].join(`
490
+ `),mC=["## Common Patterns","","### Rebind a key","To change the external editor shortcut from `ctrl+g` to `ctrl+e`:","```json",CG(QC,null,2),"```","","### Add a chord binding","```json",CG(wC,null,2),"```"].join(`
491
+ `),LC=["## Behavioral Rules","","1. Only include contexts the user wants to change (minimal overrides)","2. Validate that actions and contexts are from the known lists below","3. Warn the user proactively if they choose a key that conflicts with reserved shortcuts or common tools like tmux (`ctrl+b`) and screen (`ctrl+a`)","4. When adding a new binding for an existing action, the new binding is additive (existing default still works unless explicitly unbound)","5. To fully replace a default binding, unbind the old key AND add the new one"].join(`
492
+ `),kC=["## Validation with /doctor","",'The `/doctor` command includes a "Keybinding Configuration Issues" section that validates `~/.claudin/keybindings.json`.',"","### Common Issues and Fixes","",YI(["Issue","Cause","Fix"],[['`keybindings.json must have a "bindings" array`',"Missing wrapper object",'Wrap bindings in `{ "bindings": [...] }`'],['`"bindings" must be an array`',"`bindings` is not an array",'Set `"bindings"` to an array: `[{ context: ..., bindings: ... }]`'],['`Unknown context "X"`',"Typo or invalid context name","Use exact context names from the Available Contexts table"],['`Duplicate key "X" in Y bindings`',"Same key defined twice in one context","Remove the duplicate; JSON uses only the last value"],['`"X" may not work: ...`',"Key conflicts with terminal/OS reserved shortcut","Choose a different key (see Reserved Shortcuts section)"],['`Could not parse keystroke "X"`',"Invalid key syntax","Check syntax: use `+` between modifiers, valid key names"],['`Invalid action for "X"`',"Action value is not a string or null",'Actions must be strings like `"app:help"` or `null` to unbind']]),"","### Example /doctor Output","","```","Keybinding Configuration Issues","Location: ~/.claudin/keybindings.json",' └ [Error] Unknown context "chat"'," → Valid contexts: Global, Chat, Autocomplete, ...",' └ [Warning] "ctrl+c" may not work: Terminal interrupt (SIGINT)',"```","","**Errors** prevent bindings from working and must be fixed. **Warnings** indicate potential conflicts but the binding may still work."].join(`
493
+ `);function OB(){v({name:"keybindings-help",description:'Use when the user wants to customize keyboard shortcuts, rebind keys, add chord bindings, or modify ~/.claudin/keybindings.json. Examples: "rebind ctrl+s", "add a chord shortcut", "change the submit key", "customize keybindings".',allowedTools:["Read"],userInvocable:!1,isEnabled:PB,async getPromptForCommand(G){let I=JC(),B=RC(),g=hC(),Z=[jC,NC,AC,vC,UC,mC,LC,kC,`## Reserved Shortcuts
494
+
495
+ ${g}`,`## Available Contexts
496
+
497
+ ${I}`,`## Available Actions
498
+
499
+ ${B}`];if(G)Z.push(`## User Request
500
+
501
+ ${G}`);return[{type:"text",text:Z.join(`
502
+
503
+ `)}]}})}function YI(G,I){let B=G.map(()=>"---");return[`| ${G.join(" | ")} |`,`| ${B.join(" | ")} |`,...I.map((g)=>`| ${g.join(" | ")} |`)].join(`
504
+ `)}SC();uC();MC();f();var WI="Monitor";function xC(G){let I=G.toLowerCase();if(["s","sec","secs","second","seconds"].includes(I))return"s";if(["m","min","mins","minute","minutes"].includes(I))return"m";if(["h","hr","hrs","hour","hours"].includes(I))return"h";if(["d","day","days"].includes(I))return"d";return null}function XI(G){let I=G.trim().match(/^(\d+)\s*([a-zA-Z]+)$/);if(!I)return null;let B=Number.parseInt(I[1],10);if(!Number.isFinite(B)||B<1)return null;let g=xC(I[2]);if(!g)return null;return`${B}${g}`}function qC(G){let I=G.match(/^(.*?)(?:\s+every\s+)(\d+)\s*([a-zA-Z]+)\s*$/i);if(!I)return null;let B=XI(`${I[2]}${I[3]}`);if(!B)return null;return{prompt:I[1].trim(),interval:B}}function DC(G){let I=G.trim();if(!I)return{mode:"dynamic-maintenance"};let B=XI(I);if(B)return{mode:"fixed-maintenance",interval:B};let[g,...Z]=I.split(/\s+/),b=XI(g??"");if(b){let Y=Z.join(" ").trim();if(!Y)return{mode:"fixed-maintenance",interval:b};return{mode:"fixed-prompt",interval:b,prompt:Y}}let C=qC(I);if(C){if(!C.prompt)return{mode:"fixed-maintenance",interval:C.interval};return{mode:"fixed-prompt",interval:C.interval,prompt:C.prompt}}return{mode:"dynamic-prompt",prompt:I}}function $C(G){let I=G.prompt?`Use this prompt verbatim for both the immediate run and the recurring scheduled task:
505
+
506
+ --- BEGIN PROMPT ---
507
+ ${G.prompt}
508
+ --- END PROMPT ---
509
+ `:`This is a maintenance loop with no explicit prompt.
510
+
511
+ For the recurring scheduled task, use this exact one-line prompt body. It is a sentinel the runtime expands at delivery time (full maintenance instructions on the first fire and whenever loop.md changes, a short reminder afterwards), which keeps the long instruction text in the cached prefix. Pass it exactly — do not inline the instructions:
512
+
513
+ --- BEGIN SCHEDULED PROMPT ---
514
+ ${fB}
515
+ --- END SCHEDULED PROMPT ---
516
+
517
+ For the immediate run in step 4, follow this maintenance prompt:
518
+
519
+ --- BEGIN MAINTENANCE PROMPT ---
520
+ ${yI}
521
+ --- END MAINTENANCE PROMPT ---
522
+ `;return`# /loop — fixed recurring interval
523
+
524
+ The user invoked /loop with a fixed interval.
525
+
526
+ Requested interval: ${G.interval}
527
+
528
+ ${I}
529
+ ## Instructions
530
+
531
+ 1. Convert the requested interval to a recurring cron expression.
532
+ - Supported suffixes: s, m, h, d.
533
+ - Seconds must be rounded up to the nearest minute because cron has minute granularity.
534
+ - If the requested interval does not map cleanly to cron cadence, choose the nearest clean recurring interval and tell the user what you picked.
535
+ 2. Call ${VI} with:
536
+ - the recurring cron expression
537
+ - the scheduled prompt body above (for maintenance loops, the one-line sentinel exactly as given)
538
+ - recurring: true
539
+ - durable: false
540
+ 3. Briefly confirm what was scheduled, the cron expression, the human cadence, that recurring tasks auto-expire after ${TB} days, and that the user can cancel sooner with ${pB} using the returned job ID.
541
+ 4. Immediately execute the effective prompt now — do not wait for the first cron fire.
542
+ - If the effective prompt starts with a slash command, invoke it via the Skill tool.
543
+ - Otherwise, act on it directly.
544
+ `}function PC(G){let I=G.prompt?`Use this prompt verbatim as the effective prompt for this iteration:
545
+
546
+ --- BEGIN PROMPT ---
547
+ ${G.prompt}
548
+ --- END PROMPT ---
549
+ `:`This is a maintenance loop with no explicit prompt.
550
+
551
+ Determine the effective prompt in this order:
552
+ 1. If .claudin/loop.md exists, read it and use it.
553
+ 2. Otherwise, if ~/.claudin/loop.md exists, read it and use it.
554
+ 3. Otherwise, use this built-in maintenance prompt:
555
+
556
+ --- BEGIN MAINTENANCE PROMPT ---
557
+ ${yI}
558
+ --- END MAINTENANCE PROMPT ---
559
+ `,B=G.prompt?`/loop ${G.prompt}`:iB,g=G.prompt?"":" (a sentinel the runtime expands at delivery time — pass it exactly, do not inline the maintenance instructions)";return`# /loop — dynamic rescheduling
560
+
561
+ The user invoked /loop without a fixed interval — you pace the iterations yourself with ${BG}.
562
+
563
+ ${I}
564
+ ## Instructions
565
+
566
+ 1. Execute the effective prompt now.
567
+ - If it starts with a slash command, invoke it via the Skill tool.
568
+ - Otherwise, act on it directly.
569
+ 2. Then, as the LAST action of this turn, call ${BG} exactly once to schedule the next iteration:
570
+ - delaySeconds: choose it yourself per the pacing guidance in the ${BG} tool description. The runtime clamps to [${_B}, ${aB}] seconds.
571
+ - reason: one short sentence telling the user what delay you picked and why.
572
+ - prompt: set it to this exact text${g} so the next iteration stays in dynamic mode:
573
+
574
+ --- BEGIN SCHEDULED PROMPT ---
575
+ ${B}
576
+ --- END SCHEDULED PROMPT ---
577
+
578
+ 3. Only one wakeup is alive at a time — calling ${BG} again replaces the pending one. Do not use ${VI} in this mode.
579
+ 4. If the next iteration is gated on an external event the ${WI} tool can watch (a CI run, a deploy, an endpoint or file changing) and ${WI} is available in this session, arm a persistent ${WI} as the primary wake signal and use ${BG} only as a 1200–1800s fallback heartbeat.
580
+ 5. To end the loop (the task is complete, you are blocked on the user, or the user asked to stop), do not call ${BG} — and briefly tell the user the loop ended and why. If a wakeup is already pending from a previous turn (e.g. the user interrupted to ask you to stop), call ${BG} with cancel: true to kill it.
581
+ `}function oB(){v({name:"loop",description:"Run a prompt on a fixed interval or dynamically reschedule it, including bare maintenance-mode loops.",whenToUse:"When the user wants to poll for status, babysit a workflow, run recurring maintenance, or keep re-running a prompt within the current session.",argumentHint:"[interval] [prompt]",userInvocable:!0,isEnabled:EB,async getPromptForCommand(G){let I=DC(G);return[{type:"text",text:I.mode==="fixed-prompt"||I.mode==="fixed-maintenance"?$C(I):PC(I)}]}})}n();OC();LB();f();async function TC(){let G=KG(),I=nB(G),B;try{let{findings:g,unconditional:Z,unconditionalChars:b,filesChecked:C}=await sB({root:G}),Y=g.map((W)=>`- [${W.severity}] ${rB(G,W.file)}${W.line===void 0?"":`:${W.line}`} — ${W.message}
582
+ fix: ${W.fix}`);B=[`Checked ${C} rule file(s).`,Y.length>0?`
583
+ Mechanical findings (already computed — do not re-derive these):
584
+ ${Y.join(`
585
+ `)}`:"\nNo mechanical findings: every `paths:` matches at least one tracked file, no unsupported frontmatter keys, no stale path references in prose or inside a fenced block, no symbol attributed to a file that does not define it, and no size or `(N)` count off by enough to matter.",`
586
+ Always-loaded context: ${Z.length} file(s) totalling ${b.toLocaleString()} chars, paid on every turn — the root AGENTS.md/CLAUDE.md plus every rule with no \`paths:\`.`].join(`
587
+ `)}catch{B="The mechanical check could not run here. Inspect the rule frontmatter by hand."}return`# Refresh this project's rules
588
+
589
+ Reconcile \`.claudin/rules/\` with what this project actually looks like and
590
+ with what the agent actually reads. **Propose; do not rewrite.**
591
+
592
+ ## Rule health (computed for you)
593
+
594
+ ${B}
595
+
596
+ ## What you are looking for
597
+
598
+ The mechanical findings above cover the defects a checker can see. Your job is
599
+ the one it cannot: a rule that is *wrong* rather than broken. Concretely —
600
+
601
+ - a rule that names a directory for one thing when a same-named file holds
602
+ another (a \`context/\` of UI providers documented while \`context.ts\` holds
603
+ the system prompt is the case that motivated this skill);
604
+ - module-map entries whose described purpose no longer matches the code;
605
+ - files the agent opens constantly that no rule mentions.
606
+
607
+ ## Steps
608
+
609
+ 1. **Read every file under \`.claudin/rules/\`.** Note what each one claims:
610
+ which paths it names, and what it says they contain.
611
+
612
+ 2. **Mine this project's transcripts** at \`${I}/*.jsonl\`. Each line
613
+ is a JSON object; tool calls are \`assistant\` messages with
614
+ \`message.content[]\` entries of \`type: "tool_use"\`, where \`name\` is the tool
615
+ and \`input\` its arguments. Aggregate with a shell one-liner (jq or python3) —
616
+ **never read these files into context, they are large.**
617
+
618
+ Only the **orientation prefix** matters: the tool calls in a session before
619
+ its first \`Edit\`/\`Write\`/\`apply_patch\`. That is the stretch a navigation
620
+ rule could shorten. Rank files by the number of **distinct sessions** that
621
+ read them, not by raw call count — five reads in one investigation is not a
622
+ pattern.
623
+
624
+ Ignore sidechain files (sub-agent transcripts) and any path under a
625
+ scratch/tmp/fixture directory.
626
+
627
+ 3. **Diff the two.** Produce three lists:
628
+ - **Missing** — files in the top ~30 by distinct sessions that no rule names,
629
+ directly or via a directory it names.
630
+ - **Wrong** — anything a rule describes inaccurately. This is the valuable
631
+ list; verify each one by actually reading the file before claiming it.
632
+ Paths, symbol attributions and size/count claims are already covered
633
+ mechanically above, including inside fenced blocks — so spend your effort
634
+ on the half that is not: whether the *described purpose* of a module still
635
+ matches what it does.
636
+ - **Dead** — paths a rule names that no longer exist. Cross-check against the
637
+ mechanical findings above rather than re-deriving.
638
+
639
+ 4. **Propose; do not write anything.** \`.claudin/rules/\` is git-tracked and the
640
+ user decides what lands in it. Print the proposed diff and stop.
641
+
642
+ 5. **Know which half of \`.claudin/rules/search-strategy.md\` is yours**, which
643
+ depends on which kind of map it is.
644
+ - **Carries \`<!-- claudin:module-map -->\`** — generated. Its tree, its
645
+ \`(N)\` counts and its \`paths:\` frontmatter are refreshed automatically, so
646
+ proposing an edit to them spends the user's review on a change the next
647
+ session start discards. What survives is the \`←\` annotation on each entry:
648
+ keyed to the directory's full path, carried across every refresh, and
649
+ reading \`← TODO\` until somebody explains it.
650
+ - **No marker** — hand-written, like this repo's own. Only its numbers move
651
+ automatically; the tree is never restructured, because where a directory
652
+ belongs in a curated tree is judgment. A dead directory, a missing one, or
653
+ a described purpose that no longer matches the code are all yours to raise,
654
+ and they are the valuable part of this report.
655
+
656
+ 6. **Frontmatter, for any rule you propose.**
657
+ \`paths\` is the ONLY supported key — \`globs:\`/\`alwaysApply:\` are silently
658
+ ignored and would leave the rule unconditional, costing context on every
659
+ turn of every session.
660
+
661
+ ## Reporting
662
+
663
+ Lead with the counts (missing / wrong / dead), then the proposed diff as a
664
+ fenced block the user can apply. Be explicit about what you did **not** verify.
665
+
666
+ A caveat worth passing on: measured over 257 sessions in a mature repo, a
667
+ static top-50 file list covered only 33.4% of orientation reads, and 59.5% of
668
+ read paths appeared in exactly one session. Prefer a short, accurate map over a
669
+ long one — the value here is in what the rule gets *wrong*, not in its length.`}function tB(){v({name:"refresh-rules",description:"Reconcile .claudin/rules/ with the codebase and with what the agent actually reads, then propose corrections. Creates a navigation rule when the project has none and there is enough session history.",whenToUse:"When the user wants to check whether the project rules are still accurate, or wants a navigation rule for a project that has none.",userInvocable:!0,disableModelInvocation:!1,allowedTools:["Read","Grep","Glob","Write","Bash(ls:*)","Bash(jq:*)"],async getPromptForCommand(){return[{type:"text",text:await TC()}]}})}f();function gG(G){return Buffer.from(G,"base64").toString("utf8")}var eB={"examples/cli.md":gG("IyBWZXJpZnlpbmcgYSBDTEkgY2hhbmdlCgpUaGUgaGFuZGxlIGlzIGRpcmVjdCBpbnZvY2F0aW9uLiBUaGUgZXZpZGVuY2UgaXMgc3Rkb3V0L3N0ZGVyci9leGl0IGNvZGUuCgojIyBQYXR0ZXJuCgoxLiBCdWlsZCAoaWYgdGhlIENMSSBuZWVkcyBidWlsZGluZykKMi4gUnVuIHdpdGggYXJndW1lbnRzIHRoYXQgZXhlcmNpc2UgdGhlIGNoYW5nZWQgY29kZQozLiBDYXB0dXJlIG91dHB1dCBhbmQgZXhpdCBjb2RlCjQuIENvbXBhcmUgdG8gZXhwZWN0ZWQKCkNMSXMgYXJlIHVzdWFsbHkgdGhlIHNpbXBsZXN0IHRvIHZlcmlmeSDigJQgbm8gbGlmZWN5Y2xlLCBubyBwb3J0cy4KCiMjIFdvcmtlZCBleGFtcGxlCgoqKkRpZmY6KiogYWRkcyBhIGAtLWpzb25gIGZsYWcgdG8gdGhlIGBzdGF0dXNgIHN1YmNvbW1hbmQuIE5ldyBmbGFnCnBhcnNpbmcgaW4gYGNtZC9zdGF0dXMuZ29gLCBuZXcgb3V0cHV0IGJyYW5jaC4KCioqQ2xhaW0gKGNvbW1pdCBtc2cpOioqICJtYWNoaW5lLXJlYWRhYmxlIHN0YXR1cyBvdXRwdXQuIgoKKipJbmZlcmVuY2U6KiogYHRvb2wgc3RhdHVzIC0tanNvbmAgbm93IGV4aXN0cywgZW1pdHMgdmFsaWQgSlNPTiB3aXRoCnRoZSBzYW1lIGZpZWxkcyB0aGUgaHVtYW4gb3V0cHV0IHNob3dzLiBgdG9vbCBzdGF0dXNgIHdpdGhvdXQgdGhlIGZsYWcKaXMgdW5jaGFuZ2VkLgoKKipQbGFuOioqCjEuIEJ1aWxkCjIuIGB0b29sIHN0YXR1c2Ag4oaSIGh1bWFuIG91dHB1dCwgc2FtZSBhcyBiZWZvcmUgKG5vbi1yZWdyZXNzaW9uKQozLiBgdG9vbCBzdGF0dXMgLS1qc29uYCDihpIgdmFsaWQgSlNPTiwgcGFyc2VhYmxlCjQuIEpTT04gZmllbGRzIG1hdGNoIGh1bWFuIG91dHB1dCBmaWVsZHMKCioqRXhlY3V0ZToqKgpgYGBiYXNoCmdvIGJ1aWxkIC1vIC90bXAvdG9vbCAuL2NtZC90b29sCgovdG1wL3Rvb2wgc3RhdHVzCiMg4oaSIFN0YXR1czogaGVhbHRoeQojIOKGkiBVcHRpbWU6IDNoMTJtCiMg4oaSIENvbm5lY3Rpb25zOiA0NwoKL3RtcC90b29sIHN0YXR1cyAtLWpzb24KIyDihpIgeyJzdGF0dXMiOiJoZWFsdGh5IiwidXB0aW1lX3NlY29uZHMiOjExNTIwLCJjb25uZWN0aW9ucyI6NDd9CgovdG1wL3Rvb2wgc3RhdHVzIC0tanNvbiB8IGpxIC1lIC5zdGF0dXMKIyDihpIgImhlYWx0aHkiCiMgKGpxIC1lIGV4aXRzIG5vbnplcm8gaWYgdGhlIHBhdGggaXMgbnVsbC9mYWxzZSDigJQgY2hlYXAgdmFsaWRpdHkgY2hlY2spCgplY2hvICQ/CiMg4oaSIDAKYGBgCgoqKlZlcmRpY3Q6KiogUEFTUyDigJQgZmxhZyB3b3JrcywgSlNPTiBpcyB2YWxpZCwgZmllbGRzIGxpbmUgdXAuCgojIyBXaGF0IEZBSUwgbG9va3MgbGlrZQoKLSBgdW5rbm93biBmbGFnOiAtLWpzb25gIOKGkiBub3Qgd2lyZWQgdXAsIG9yIHlvdSdyZSBydW5uaW5nIGEgc3RhbGUgYnVpbGQKLSBPdXRwdXQgaXNuJ3QgdmFsaWQgSlNPTiAoYGpxYCBlcnJvcnMpIOKGkiBzZXJpYWxpemF0aW9uIGJ1ZwotIGB0b29sIHN0YXR1c2AgKG5vIGZsYWcpIGNoYW5nZWQg4oaSIHJlZ3Jlc3Npb247IHRoZSBkaWZmIHRvdWNoZWQgbW9yZQogIHRoYW4gaXQgc2hvdWxkCi0gSlNPTiBoYXMgZGlmZmVyZW50IGZpZWxkIG5hbWVzIHRoYW4gZXhwZWN0ZWQg4oaSIGNsYWltL2NvZGUgbWlzbWF0Y2gsCiAgbWlnaHQgYmUgZmluZSwgbm90ZSBpdAoKIyMgUmVhZGluZyBmcm9tIHN0ZGluLCBkZXN0cnVjdGl2ZSBjb21tYW5kcwoKSWYgdGhlIENMSSByZWFkcyBzdGRpbiDihpIgcGlwZSBpbiB0ZXN0IGRhdGEuCklmIGl0IHdyaXRlcyBmaWxlcyAvIGhpdHMgYSBuZXR3b3JrIC8gZGVsZXRlcyB0aGluZ3Mg4oaSIHBvaW50IGl0IGF0IGEKdG1wIGRpciAvIGEgbW9jayAvIGEgZHJ5LXJ1biBmbGFnLiBJZiB0aGVyZSdzIG5vIHNhZmUgbW9kZSBhbmQgdGhlCmRpZmYgdG91Y2hlcyB0aGUgZGVzdHJ1Y3RpdmUgcGF0aCwgc2F5IHNvIGFuZCB2ZXJpZnkgd2hhdCB5b3UgY2FuCmFyb3VuZCBpdC4K"),"examples/server.md":gG("IyBWZXJpZnlpbmcgYSBzZXJ2ZXIvQVBJIGNoYW5nZQoKVGhlIGhhbmRsZSBpcyBgY3VybGAgKG9yIGVxdWl2YWxlbnQpLiBUaGUgZXZpZGVuY2UgaXMgdGhlIHJlc3BvbnNlLgoKIyMgUGF0dGVybgoKMS4gU3RhcnQgdGhlIHNlcnZlciAoYmFja2dyb3VuZCwgd2l0aCBhIHJlYWRpbmVzcyBwb2xsIOKAlCBzZWUgYmVsb3cpCjIuIGBjdXJsYCB0aGUgcm91dGUgdGhlIGRpZmYgdG91Y2hlcywgd2l0aCBpbnB1dHMgdGhhdCBoaXQgdGhlIGNoYW5nZWQgYnJhbmNoCjMuIENhcHR1cmUgdGhlIGZ1bGwgcmVzcG9uc2UgKHN0YXR1cyArIGhlYWRlcnMgKyBib2R5KQo0LiBDb21wYXJlIHRvIGV4cGVjdGVkCgojIyBMaWZlY3ljbGUKCklmIHRoZXJlJ3MgYSBydW4tc2tpbGwgaXQgaGFuZGxlcyB0aGlzLiBJZiBub3Q6CgpgYGBiYXNoCjxzdGFydC1jb21tYW5kPiAmPiAvdG1wL3NlcnZlci5sb2cgJgpTRVJWRVJfUElEPSQhCmZvciBpIGluIHsxLi4zMH07IGRvIGN1cmwgLXNmIGxvY2FsaG9zdDpQT1JUL2hlYWx0aCA+L2Rldi9udWxsICYmIGJyZWFrOyBzbGVlcCAxOyBkb25lCiMgLi4uIHlvdXIgY3VybHMgLi4uCmtpbGwgJFNFUlZFUl9QSUQKYGBgCgpObyByZWFkaW5lc3MgZW5kcG9pbnQ/IFBvbGwgdGhlIHJvdXRlIHlvdSdyZSBhYm91dCB0byB0ZXN0IHVudGlsIGl0CnN0b3BzIHJldHVybmluZyBjb25uZWN0aW9uLXJlZnVzZWQsIHRoZW4gYWRkIGEgYmVhdC4KCiMjIFdvcmtlZCBleGFtcGxlCgoqKkRpZmY6KiogYWRkcyBhIGBSZXRyeS1BZnRlcmAgaGVhZGVyIHRvIDQyOSByZXNwb25zZXMgaW4gYHJhdGVMaW1pdC50c2AuCioqQ2xhaW0gKFBSIGJvZHkpOioqICJjbGllbnRzIGNhbiBub3cgYmFjayBvZmYgY29ycmVjdGx5LiIKCioqSW5mZXJlbmNlOioqIGhpdHRpbmcgdGhlIHJhdGUgbGltaXQgc2hvdWxkIG5vdyByZXR1cm4gYFJldHJ5LUFmdGVyOiA8bj5gCmluIHRoZSByZXNwb25zZSBoZWFkZXJzLiBJdCBkaWRuJ3QgYmVmb3JlLgoKKipQbGFuOioqCjEuIFN0YXJ0IHNlcnZlcgoyLiBIaXQgdGhlIHJhdGUtbGltaXRlZCBlbmRwb2ludCBlbm91Z2ggdGltZXMgdG8gdHJpZ2dlciA0MjkKMy4gQ2hlY2sgdGhlIDQyOSByZXNwb25zZSBoYXMgYFJldHJ5LUFmdGVyYCBoZWFkZXIKNC4gQ2hlY2sgdGhlIHZhbHVlIGlzIGEgcG9zaXRpdmUgaW50ZWdlcgoKKipFeGVjdXRlOioqCmBgYGJhc2gKIyB0cmlnZ2VyIHRoZSBsaW1pdCDigJQgMTAgZmFzdCByZXF1ZXN0cywgbGltaXQgaXMgNS9zZWMgcGVyIHRoZSBkaWZmCmZvciBpIGluIHsxLi4xMH07IGRvIGN1cmwgLXMgLW8gL2Rldi9udWxsIC13ICIle2h0dHBfY29kZX1cbiIgbG9jYWxob3N0OjMwMDAvYXBpL3RoaW5nOyBkb25lCiMg4oaSIDIwMCAyMDAgMjAwIDIwMCAyMDAgNDI5IDQyOSA0MjkgNDI5IDQyOQoKIyBjYXB0dXJlIHRoZSA0MjkgaGVhZGVycwpjdXJsIC1zaSBsb2NhbGhvc3Q6MzAwMC9hcGkvdGhpbmcgfCBoZWFkIC0yMAojIOKGkiBIVFRQLzEuMSA0MjkgVG9vIE1hbnkgUmVxdWVzdHMKIyDihpIgUmV0cnktQWZ0ZXI6IDEyCiMg4oaSIC4uLgpgYGAKCioqVmVyZGljdDoqKiBQQVNTIOKAlCBgUmV0cnktQWZ0ZXI6IDEyYCBwcmVzZW50LCBwb3NpdGl2ZSBpbnRlZ2VyLgoKIyMgV2hhdCBGQUlMIGxvb2tzIGxpa2UKCi0gSGVhZGVyIGFic2VudCDihpIgdGhlIGRpZmYgZGlkbid0IHRha2UgZWZmZWN0LCBvciB5b3UncmUgbm90IGFjdHVhbGx5CiAgaGl0dGluZyB0aGUgNDI5IHBhdGggKGNoZWNrIHRoZSBzdGF0dXMgY29kZSBmaXJzdCkKLSBIZWFkZXIgcHJlc2VudCBidXQgdmFsdWUgaXMgYE5hTmAgLyBgdW5kZWZpbmVkYCAvIG5lZ2F0aXZlIOKGkiB0aGUKICBsb2dpYyBpcyB3cm9uZwotIFlvdSBnb3QgMjAwcyBhbGwgdGhlIHdheSB0aHJvdWdoIOKGkiB5b3UgbmV2ZXIgdHJpZ2dlcmVkIHRoZSBjaGFuZ2VkCiAgcGF0aC4gVGlnaHRlbiB0aGUgcmVxdWVzdCBidXJzdCBvciBjaGVjayB0aGUgcmF0ZSBsaW1pdCBjb25maWcuCg==")},Gg={"examples/cli.md":gG("IyBFeGFtcGxlOiBDTEkgdG9vbAoKQ0xJcyBhcmUgdGhlIHNpbXBsZXN0IGNhc2Ug4oCUIHRoZXJlJ3MgdXN1YWxseSBubyBiYWNrZ3JvdW5kIHByb2Nlc3MgdG8KbWFuYWdlLCBubyBwb3J0cywgbm8gbGlmZWN5Y2xlLiBUaGUgc2tpbGwgZm9jdXNlcyBvbiAqKmluc3RhbGxhdGlvbioqLAoqKnJlcHJlc2VudGF0aXZlIGludm9jYXRpb25zKiosIGFuZCAqKnRlc3RpbmcqKi4KCiMjIFdoYXQgbWF0dGVycwoKLSAqKkhvdyB0byBnZXQgdGhlIGJpbmFyeSBvbiBgUEFUSGAuKiogSW5zdGFsbGVkIGdsb2JhbGx5PyBSdW4gdmlhCiAgYG5weGAvYHV2IHJ1bmA/IEJ1aWx0IHRvIGAuL3RhcmdldC9yZWxlYXNlL2Zvb2A/IEJlIGV4cGxpY2l0LgotICoqVHdvIG9yIHRocmVlIGV4YW1wbGUgaW52b2NhdGlvbnMqKiB0aGF0IGNvdmVyIHRoZSBtYWluIHVzZSBjYXNlcy4KICBJbmNsdWRlIGV4cGVjdGVkIG91dHB1dCBzbyBhIHJlYWRlciBjYW4gdGVsbCBpdCB3b3JrZWQuCi0gKipFeGl0IGNvZGVzKiogaWYgdGhleSdyZSBtZWFuaW5nZnVsIChlLmcuIGxpbnRlciByZXR1cm5zIDEgb24gZmluZGluZ3MpLgotICoqU3RkaW4gYmVoYXZpb3IqKiBpZiB0aGUgdG9vbCByZWFkcyBmcm9tIHN0ZGluLgoKIyMgRXhhbXBsZSBzbmlwcGV0Cgo+IC0tLQo+IG5hbWU6IHJ1bi1teXRvb2wKPiBkZXNjcmlwdGlvbjogQnVpbGQsIGluc3RhbGwsIGFuZCBydW4gbXl0b29sLiBVc2Ugd2hlbiBhc2tlZCB0byBydW4gbXl0b29sLCB0ZXN0IGl0LCBvciB2ZXJpZnkgaXQncyBpbnN0YWxsZWQgY29ycmVjdGx5Lgo+IC0tLQo+Cj4gIyMgU2V0dXAKPgo+IGBgYGJhc2gKPiBwaXAgaW5zdGFsbCAtZSAuCj4gYGBgCj4KPiBUaGlzIHB1dHMgYG15dG9vbGAgb24gUEFUSC4gVmVyaWZ5Ogo+Cj4gYGBgYmFzaAo+IG15dG9vbCAtLXZlcnNpb24KPiAjIOKGkiBteXRvb2wgMC4zLjEKPiBgYGAKPgo+ICMjIFJ1bgo+Cj4gUHJvY2VzcyBhIHNpbmdsZSBmaWxlOgo+Cj4gYGBgYmFzaAo+IG15dG9vbCBwcm9jZXNzIGlucHV0Lmpzb24KPiAjIOKGkiBQcm9jZXNzZWQgNDIgcmVjb3Jkcywgd3JvdGUgb3V0cHV0Lmpzb24KPiBgYGAKPgo+IFJlYWQgZnJvbSBzdGRpbiwgd3JpdGUgdG8gc3Rkb3V0Ogo+Cj4gYGBgYmFzaAo+IGNhdCBpbnB1dC5qc29uIHwgbXl0b29sIHByb2Nlc3MgLQo+IGBgYAo+Cj4gTGludCBhIGRpcmVjdG9yeSAoZXhpdHMgbm9uLXplcm8gb24gcHJvYmxlbXMpOgo+Cj4gYGBgYmFzaAo+IG15dG9vbCBsaW50IC4vc3JjCj4gZWNobyAkPyAgIyAwIGlmIGNsZWFuLCAxIGlmIGlzc3VlcyBmb3VuZAo+IGBgYAo+Cj4gIyMgVGVzdAo+Cj4gYGBgYmFzaAo+IHB5dGVzdAo+IGBgYAoKIyMgS2VlcCBpdCBzaG9ydAoKQSBDTEkncyBydW4gc2tpbGwgY2FuIGJlIHZlcnkgY29tcGFjdC4gRG9uJ3QgcGFkIGl0IHdpdGggZXZlcnkgZmxhZyDigJQKdGhlIGAtLWhlbHBgIG91dHB1dCBjb3ZlcnMgdGhhdC4gSnVzdCBzaG93IGVub3VnaCB0aGF0IGFuIGFnZW50IGNhbgooYSkgYnVpbGQgaXQsIChiKSBjb25maXJtIGl0IHdvcmtzLCAoYykgcnVuIHRoZSB0ZXN0cy4K"),"examples/electron.md":gG("IyBFeGFtcGxlOiBFbGVjdHJvbiAvIGRlc2t0b3AgR1VJIGFwcAoKRWxlY3Ryb24gYXBwcyBoYXZlIGEgd2luZG93LiBBIGZ1dHVyZSBhZ2VudCBpbiBhIGhlYWRsZXNzIGNvbnRhaW5lcgpjYW4ndCBzZWUgYSB3aW5kb3cuIFNvIHlvdXIgZGVsaXZlcmFibGUgaGVyZSBpcyBub3QgYSBtYXJrZG93biBmaWxlCnRoYXQgc2F5cyAiYG5wbSBzdGFydGAgb3BlbnMgYSB3aW5kb3ciIOKAlCBpdCdzIGEgKipkcml2ZXIgc2NyaXB0KiogdGhhdApsYXVuY2hlcyB0aGUgYXBwIHVuZGVyIHh2ZmIsIGV4cG9zZXMgYSBSRVBMIG9mIGNvbW1hbmRzIChjbGljaywgdHlwZSwKc2NyZWVuc2hvdCksIGFuZCBsZXRzIGFuIGFnZW50IHBva2UgdGhlIFVJIGJ5IHNlbmRpbmcgbGluZXMgb2YgdGV4dC4KClRoZSBza2lsbCdzIGBTS0lMTC5tZGAgdGhlbiBiZWNvbWVzIGEgc2hvcnQgbWFudWFsIGZvciB0aGF0IGRyaXZlci4KCiMjIFdoYXQgeW91J3JlIGJ1aWxkaW5nCgpgYGAKYXBwcy9kZXNrdG9wLwogIC5jbGF1ZGluL3NraWxscy9ydW4tZGVza3RvcC8KICAgIFNLSUxMLm1kICAgICAgICAgICAgICAg4oaQIHNob3J0LiAicnVuIHRoZSBkcml2ZXIsIGhlcmUgYXJlIHRoZSBjb21tYW5kcyIKICAgIGRyaXZlci5tanMgICAgICAgICAgICAg4oaQIFJFUEw6IHN0ZGluIGNvbW1hbmRzIOKGkiBQbGF5d3JpZ2h0IGFjdGlvbnMKYGBgCgpUaGUgZHJpdmVyIElTIHRoZSBwcm9kdWN0LiBXaXRob3V0IGl0LCB0aGUgc2tpbGwgZGVzY3JpYmVzIGEgR1VJIGFuCmFnZW50IGNhbiBuZXZlciB0b3VjaC4KCioqR3JhZHVhdGlvbiBwYXRoOioqIGlmIHRoZSBkcml2ZXIgZ3Jvd3MgbGF1bmNoIGhlbHBlcnMgdGhlIHByb2plY3QncwpyZWFsIGUyZSBzdWl0ZSB3YW50cyB0byBzaGFyZSwgbW92ZSBpdCB0byBgZTJlLXBsYXl3cmlnaHQvZHJpdmVyLm1qc2AKKG9yIGBzY3JpcHRzL2RyaXZlLm1qc2ApIGFuZCB1cGRhdGUgdGhlIHNraWxsJ3MgcGF0aHMuIFRoZSBza2lsbCBzdGF5cwphdCBgLmNsYXVkaW4vc2tpbGxzL3J1bi1kZXNrdG9wL2A7IHRoZSBkcml2ZXIgZmluZHMgYSBiZXR0ZXIgaG9tZS4KCiMjIFN0ZXAgMSDigJQgZ2V0IHRoZSBhcHAgdG8gbGF1bmNoIEFUIEFMTCB1bmRlciB4dmZiCgpUaGlzIGlzIHVzdWFsbHkgdGhlIGhhcmRlc3QgcGFydCBhbmQgcHJvZHVjZXMgbW9zdCBvZiB0aGUgR290Y2hhcy4gVGhlClJFQURNRSB3aWxsIHNheSAibWFjT1MvV2luZG93cyBvbmx5LiIgSWdub3JlIHRoYXQuIEluc3RhbGwgeHZmYiArIHRoZQpDaHJvbWl1bSBzaGFyZWQgbGlicywgZmluZCB0aGUgRWxlY3Ryb24gYmluYXJ5LCBhbmQgbGF1bmNoIGl0OgoKYGBgYmFzaAphcHQtZ2V0IGluc3RhbGwgLXkgeHZmYiBsaWJuc3MzIGxpYmdibTEgbGliYXNvdW5kMnQ2NCBsaWJndGstMy0wIFwKICBsaWJ4c3MxIGxpYnhrYmNvbW1vbjAgbGliYXRrLWJyaWRnZTIuMC0wIGxpYmN1cHMyIGxpYmRybTIKCiMgQnVpbGQgdGhlIGFwcCBmaXJzdC4gT2Z0ZW4gdGhlICJkZXYiIHNjcmlwdCBpcyBlbGVjdHJvbi1mb3JnZSB3aGljaAojIGRvZXMgYSBWaXRlL3dlYnBhY2sgYnVpbGQgVEhFTiBsYXVuY2hlcy4gWW91IHdhbnQganVzdCB0aGUgYnVpbGQ6Cm5wbSBpbnN0YWxsCm5weCBlbGVjdHJvbi1mb3JnZSBzdGFydCAmICAgIyBidWlsZHMgLnZpdGUvYnVpbGQvIG9yIGRpc3QvCnNsZWVwIDIwICYmIGtpbGwgJTEgICAgICAgICAgIyBraWxsIGl0IG9uY2UgYnVpbHQg4oCUIHlvdSdsbCBsYXVuY2ggeW91cnNlbGYKCiMgTm93IHRyeSB0aGUgcmF3IGxhdW5jaAp4dmZiLXJ1biAtYSBub2RlIC1lICIKICBjb25zdCB7IF9lbGVjdHJvbiB9ID0gcmVxdWlyZSgncGxheXdyaWdodC1jb3JlJyk7CiAgX2VsZWN0cm9uLmxhdW5jaCh7CiAgICBleGVjdXRhYmxlUGF0aDogJy4vbm9kZV9tb2R1bGVzL2VsZWN0cm9uL2Rpc3QvZWxlY3Ryb24nLAogICAgYXJnczogWyctLW5vLXNhbmRib3gnLCAnLiddLAogICAgdGltZW91dDogMzAwMDAsCiAgfSkudGhlbihhcHAgPT4gewogICAgY29uc29sZS5sb2coJ2xhdW5jaGVkLCB3aW5kb3dzOicsIGFwcC53aW5kb3dzKCkubWFwKHcgPT4gdy51cmwoKSkpOwogICAgcmV0dXJuIGFwcC5jbG9zZSgpOwogIH0pOwoiCmBgYAoKSXRlcmF0ZSB1bnRpbCBpdCBsYXVuY2hlcy4gRWFjaCBtaXNzaW5nIGAuc29gIOKGkiBvbmUgbW9yZSBgYXB0LWdldGAKcGFja2FnZSDihpIgb25lIG1vcmUgbGluZSBpbiBQcmVyZXF1aXNpdGVzLiBFYWNoIGxhdW5jaCB0aW1lb3V0IOKGkiBjaGVjawp0aGUgYG5vZGVDbGlJbnNwZWN0YCBmdXNlIGlzbid0IGRpc2FibGVkLCBjaGVjayB0aGUgYnVpbGQgb3V0cHV0IGV4aXN0cy4KCioqYC0tbm8tc2FuZGJveGAgaXMgYWxtb3N0IGFsd2F5cyBuZWVkZWQgaW4gY29udGFpbmVycy4qKiBFbGVjdHJvbidzCnNhbmRib3ggbmVlZHMgQ0FQX1NZU19BRE1JTiBvciB1c2VyIG5hbWVzcGFjZXMuIE5laXRoZXIgYnkgZGVmYXVsdC4KCiMjIFN0ZXAgMiDigJQgYnVpbGQgdGhlIFJFUEwgZHJpdmVyCgpPbmNlIHlvdSBjYW4gbGF1bmNoIGl0LCB0dXJuIHRoYXQgdGhyb3dhd2F5IHNjcmlwdCBpbnRvIGEgUkVQTC4gU3RhcnQKbWluaW1hbCDigJQgeW91IHdpbGwgYWRkIGNvbW1hbmRzIGFzIHlvdSBuZWVkIHRoZW0uICoqVGhlIFJFUEwgaXMgdGhlCnJpZ2h0IHNoYXBlKiogYmVjYXVzZSBhbiBhZ2VudCBjYW4gcnVuIGl0IGluc2lkZSB0bXV4IGFuZCBpdGVyYXRlCndpdGhvdXQgcmVsYXVuY2hpbmcgdGhlIChzbG93KSBhcHAgb24gZXZlcnkgaW50ZXJhY3Rpb24uCgpgYGBqYXZhc2NyaXB0Ci8vIC5jbGF1ZGluL3NraWxscy9ydW4tPHVuaXQ+L2RyaXZlci5tanMKLy8gUkVQTCBkcml2ZXIgZm9yIDxhcHA+LiBSdW4gdW5kZXIgeHZmYiBvbiBoZWFkbGVzcyBMaW51eC4KLy8gRGVzaWduZWQgZm9yIGFnZW50czogd3JhcCBpbiB0bXV4LCBzZW5kLWtleXMgY29tbWFuZHMsIGNhcHR1cmUtcGFuZSBvdXRwdXQuCmltcG9ydCB7IF9lbGVjdHJvbiBhcyBlbGVjdHJvbiB9IGZyb20gJ3BsYXl3cmlnaHQtY29yZSc7CmltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ25vZGU6cmVhZGxpbmUnOwppbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJzsKaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnOwoKY29uc3QgQVBQX0RJUiA9IHBhdGgucmVzb2x2ZShpbXBvcnQubWV0YS5kaXJuYW1lLCAnLi4vLi4vLi4nKTsKY29uc3QgU0hPVF9ESVIgPSBwcm9jZXNzLmVudi5TQ1JFRU5TSE9UX0RJUiB8fCAnL3RtcC9zaG90cyc7CmZzLm1rZGlyU3luYyhTSE9UX0RJUiwgeyByZWN1cnNpdmU6IHRydWUgfSk7CgpsZXQgYXBwID0gbnVsbDsKbGV0IHBhZ2UgPSBudWxsOyAgIC8vIHRoZSB3aW5kb3cvcGFnZSB5b3UgYWN0dWFsbHkgaW50ZXJhY3Qgd2l0aAoKY29uc3QgZWxlY3Ryb25CaW4gPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJwogID8gcGF0aC5qb2luKEFQUF9ESVIsICdub2RlX21vZHVsZXMvZWxlY3Ryb24vZGlzdC9FbGVjdHJvbi5hcHAvQ29udGVudHMvTWFjT1MvRWxlY3Ryb24nKQogIDogcGF0aC5qb2luKEFQUF9ESVIsICdub2RlX21vZHVsZXMvZWxlY3Ryb24vZGlzdC9lbGVjdHJvbicpOwoKY29uc3QgQ09NTUFORFMgPSB7CiAgYXN5bmMgbGF1bmNoKCkgewogICAgaWYgKGFwcCkgcmV0dXJuIGNvbnNvbGUubG9nKCdhbHJlYWR5IGxhdW5jaGVkJyk7CiAgICBhcHAgPSBhd2FpdCBlbGVjdHJvbi5sYXVuY2goewogICAgICBleGVjdXRhYmxlUGF0aDogZWxlY3Ryb25CaW4sCiAgICAgIGFyZ3M6IFsnLS1uby1zYW5kYm94JywgQVBQX0RJUl0sCiAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiwgRElTUExBWTogcHJvY2Vzcy5lbnYuRElTUExBWSB8fCAnOjk5JyB9LAogICAgICB0aW1lb3V0OiAzMF8wMDAsCiAgICB9KTsKICAgIC8vIEVsZWN0cm9uIGhhcyBubyBjbGVhbiAibG9hZGVkIiBzaWduYWwg4oCUIHRoaXMgc2xlZXAgaXMgYSBibGluZCBndWVzcy4KICAgIC8vIFJlcGxhY2Ugd2l0aCBhIHBvbGwgb25jZSB5b3Uga25vdyB3aGF0IHJlYWR5IGxvb2tzIGxpa2UgZm9yIHRoaXMgYXBwOgogICAgLy8gd2FpdCB1bnRpbCB3aW5kb3dzKCkgaW5jbHVkZXMgdGhlIGV4cGVjdGVkIFVSTCwgb3Igd2FpdEZvclNlbGVjdG9yIG9uIGZpcnN0V2luZG93KCkuCiAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgOF8wMDApKTsKICAgIC8vIEZpbmQgdGhlIHJlYWwgVUkgcGFnZS4gT2Z0ZW4gTk9UIGZpcnN0V2luZG93KCkg4oCUIG1heSBiZSBhCiAgICAvLyBzcGxhc2ggc2NyZWVuLCBvciB0aGUgcmVhbCBjb250ZW50IGlzIGluIGEgQnJvd3NlclZpZXcgb3ZlcmxheS4KICAgIHBhZ2UgPSBhcHAud2luZG93cygpLmZpbmQodyA9PiAhdy51cmwoKS5zdGFydHNXaXRoKCdkZXZ0b29sczovLycpKQogICAgICAgID8/IGF3YWl0IGFwcC5maXJzdFdpbmRvdygpOwogICAgY29uc29sZS5sb2coJ2xhdW5jaGVkLicsIGFwcC53aW5kb3dzKCkubGVuZ3RoLCAnd2luZG93czonKTsKICAgIGZvciAoY29uc3QgdyBvZiBhcHAud2luZG93cygpKSBjb25zb2xlLmxvZygnICcsIHcudXJsKCkpOwogIH0sCgogIGFzeW5jIHNzKG5hbWUpIHsKICAgIGlmICghcGFnZSkgcmV0dXJuIGNvbnNvbGUubG9nKCdFUlJPUjogbGF1bmNoIGZpcnN0Jyk7CiAgICBjb25zdCBmID0gcGF0aC5qb2luKFNIT1RfRElSLCAobmFtZSB8fCBgc3MtJHtEYXRlLm5vdygpfWApICsgJy5wbmcnKTsKICAgIGF3YWl0IHBhZ2Uuc2NyZWVuc2hvdCh7IHBhdGg6IGYgfSk7CiAgICBjb25zb2xlLmxvZygnc2NyZWVuc2hvdDonLCBmKTsKICB9LAoKICAvLyBDbGljayB2aWEgZXZhbHVhdGUoKSwgTk9UIGxvY2F0b3IuY2xpY2soKS4gSWYgdGhlIGNvbnRlbnQgbGl2ZXMgaW4gYQogIC8vIEJyb3dzZXJWaWV3IGxheWVyZWQgb3ZlciB0aGUgbWFpbiB3aW5kb3csIFBsYXl3cmlnaHQncyBjb29yZGluYXRlCiAgLy8gbWF0aCBoaXRzIHRoZSB3cm9uZyBsYXllci4gRE9NIC5jbGljaygpIGFsd2F5cyB3b3Jrcy4KICBhc3luYyBjbGljayhzZWwpIHsKICAgIGlmICghcGFnZSkgcmV0dXJuIGNvbnNvbGUubG9nKCdFUlJPUjogbGF1bmNoIGZpcnN0Jyk7CiAgICBjb25zdCByID0gYXdhaXQgcGFnZS5ldmFsdWF0ZShzID0+IHsKICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpOwogICAgICBpZiAoIWVsKSByZXR1cm4gJ05PVF9GT1VORCc7CiAgICAgIGVsLmNsaWNrKCk7IHJldHVybiAnT0snOwogICAgfSwgc2VsKTsKICAgIGNvbnNvbGUubG9nKCdjbGljaycsIHNlbCwgJ+KGkicsIHIpOwogIH0sCgogIGFzeW5jICdjbGljay10ZXh0Jyh0ZXh0KSB7CiAgICBpZiAoIXBhZ2UpIHJldHVybiBjb25zb2xlLmxvZygnRVJST1I6IGxhdW5jaCBmaXJzdCcpOwogICAgY29uc3QgciA9IGF3YWl0IHBhZ2UuZXZhbHVhdGUodCA9PiB7CiAgICAgIGNvbnN0IGVscyA9IFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24sIGEsIFtyb2xlPSJidXR0b24iXScpXTsKICAgICAgY29uc3QgZWwgPSBlbHMuZmluZChlID0+IGUudGV4dENvbnRlbnQ/LnRyaW0oKSA9PT0gdCkKICAgICAgICAgICAgICA/PyBlbHMuZmluZChlID0+IGUudGV4dENvbnRlbnQ/LmluY2x1ZGVzKHQpKTsKICAgICAgaWYgKCFlbCkgcmV0dXJuICdOT1RfRk9VTkQnOwogICAgICBlbC5jbGljaygpOyByZXR1cm4gJ09LOiAnICsgZWwudGFnTmFtZTsKICAgIH0sIHRleHQpOwogICAgY29uc29sZS5sb2coJ2NsaWNrLXRleHQnLCBKU09OLnN0cmluZ2lmeSh0ZXh0KSwgJ+KGkicsIHIpOwogIH0sCgogIGFzeW5jIHR5cGUodGV4dCkgIHsgaWYgKHBhZ2UpIGF3YWl0IHBhZ2Uua2V5Ym9hcmQudHlwZSh0ZXh0LCB7IGRlbGF5OiAzMCB9KTsgfSwKICBhc3luYyBwcmVzcyhrZXkpICB7IGlmIChwYWdlKSBhd2FpdCBwYWdlLmtleWJvYXJkLnByZXNzKGtleSk7IH0sCgogIGFzeW5jIHdhaXQoc2VsKSB7CiAgICBpZiAoIXBhZ2UpIHJldHVybiBjb25zb2xlLmxvZygnRVJST1I6IGxhdW5jaCBmaXJzdCcpOwogICAgdHJ5IHsgYXdhaXQgcGFnZS53YWl0Rm9yU2VsZWN0b3Ioc2VsLCB7IHRpbWVvdXQ6IDEwXzAwMCB9KTsgY29uc29sZS5sb2coJ2ZvdW5kOicsIHNlbCk7IH0KICAgIGNhdGNoIHsgY29uc29sZS5sb2coJ1RJTUVPVVQ6Jywgc2VsKTsgfQogIH0sCgogIGFzeW5jIGV2YWwoZXhwcikgewogICAgaWYgKCFwYWdlKSByZXR1cm4gY29uc29sZS5sb2coJ0VSUk9SOiBsYXVuY2ggZmlyc3QnKTsKICAgIHRyeSB7IGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGF3YWl0IHBhZ2UuZXZhbHVhdGUoZXhwcikpKTsgfQogICAgY2F0Y2ggKGUpIHsgY29uc29sZS5sb2coJ0VSUk9SOicsIGUubWVzc2FnZSk7IH0KICB9LAoKICBhc3luYyB0ZXh0KHNlbCkgewogICAgaWYgKCFwYWdlKSByZXR1cm4gY29uc29sZS5sb2coJ0VSUk9SOiBsYXVuY2ggZmlyc3QnKTsKICAgIGNvbnNvbGUubG9nKGF3YWl0IHBhZ2UuZXZhbHVhdGUoCiAgICAgIHMgPT4gKHMgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpIDogZG9jdW1lbnQuYm9keSk/LmlubmVyVGV4dCA/PyAnKG51bGwpJywKICAgICAgc2VsIHx8IG51bGwpKTsKICB9LAoKICAvLyBJbnRyb3NwZWN0aW9uOiBlc3NlbnRpYWwgZm9yIGZpZ3VyaW5nIG91dCB3aGljaCB3aW5kb3cvd2ViQ29udGVudHMKICAvLyBhY3R1YWxseSBoYXMgdGhlIFVJLiBFbGVjdHJvbiBhcHBzIG9mdGVuIHNwYXduIHNldmVyYWwuCiAgYXN5bmMgd2luZG93cygpIHsKICAgIGlmICghYXBwKSByZXR1cm4gY29uc29sZS5sb2coJ0VSUk9SOiBsYXVuY2ggZmlyc3QnKTsKICAgIGZvciAoY29uc3QgdyBvZiBhcHAud2luZG93cygpKSBjb25zb2xlLmxvZygnICcsIHcudXJsKCkpOwogICAgY29uc3Qgd2NzID0gYXdhaXQgYXBwLmV2YWx1YXRlKCh7IHdlYkNvbnRlbnRzIH0pID0+CiAgICAgIHdlYkNvbnRlbnRzLmdldEFsbFdlYkNvbnRlbnRzKCkubWFwKHcgPT4gKHsgaWQ6IHcuaWQsIHR5cGU6IHcuZ2V0VHlwZSgpLCB1cmw6IHcuZ2V0VVJMKCkgfSkpKTsKICAgIGNvbnNvbGUubG9nKCd3ZWJDb250ZW50czonKTsKICAgIGZvciAoY29uc3QgdyBvZiB3Y3MpIGNvbnNvbGUubG9nKGAgWyR7dy5pZH1dICR7dy50eXBlfTogJHt3LnVybH1gKTsKICB9LAoKICBhc3luYyBxdWl0KCkgeyBpZiAoYXBwKSBhd2FpdCBhcHAuY2xvc2UoKS5jYXRjaCgoKT0+e30pOyBhcHAgPSBudWxsOyBwYWdlID0gbnVsbDsgfSwKICBoZWxwKCkgeyBjb25zb2xlLmxvZygnY29tbWFuZHM6JywgT2JqZWN0LmtleXMoQ09NTUFORFMpLmpvaW4oJywgJykpOyB9LAp9OwoKLy8gU3RvcCBFbGVjdHJvbiBmcm9tIHN0ZWFsaW5nIHN0ZGluIOKAlCB1c2UgdGhlIHJhdyBmZC4KY29uc3Qgc3RkaW4gPSBmcy5jcmVhdGVSZWFkU3RyZWFtKG51bGwsIHsgZmQ6IGZzLm9wZW5TeW5jKCcvZGV2L3N0ZGluJywgJ3InKSB9KTsKY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2UoeyBpbnB1dDogc3RkaW4sIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsIHByb21wdDogJ2RyaXZlcj4gJyB9KTsKCnJsLm9uKCdsaW5lJywgYXN5bmMgbGluZSA9PiB7CiAgY29uc3QgW2NtZCwgLi4ucmVzdF0gPSBsaW5lLnRyaW0oKS5zcGxpdCgvXHMrLyk7CiAgaWYgKCFjbWQpIHJldHVybiBybC5wcm9tcHQoKTsKICBjb25zdCBmbiA9IENPTU1BTkRTW2NtZF07CiAgaWYgKCFmbikgeyBjb25zb2xlLmxvZygndW5rbm93bjonLCBjbWQsICfigJQgdHJ5OiBoZWxwJyk7IHJldHVybiBybC5wcm9tcHQoKTsgfQogIHRyeSB7IGF3YWl0IGZuKHJlc3Quam9pbignICcpKTsgfSBjYXRjaCAoZSkgeyBjb25zb2xlLmxvZygnRVJST1I6JywgZS5tZXNzYWdlKTsgfQogIGlmIChjbWQgPT09ICdxdWl0JykgeyBybC5jbG9zZSgpOyBwcm9jZXNzLmV4aXQoMCk7IH0KICBybC5wcm9tcHQoKTsKfSk7CnJsLm9uKCdjbG9zZScsIGFzeW5jICgpID0+IHsgYXdhaXQgQ09NTUFORFMucXVpdCgpOyBwcm9jZXNzLmV4aXQoMCk7IH0pOwoKY29uc29sZS5sb2coJzxhcHA+IGRyaXZlciDigJQgImhlbHAiIGZvciBjb21tYW5kcywgImxhdW5jaCIgdG8gc3RhcnQnKTsKcmwucHJvbXB0KCk7CmBgYAoKKipUaGlzIGlzIGEgc3RhcnRpbmcgc2tlbGV0b24uKiogQXMgeW91IHRyeSB0byByZWFjaCBpbnRlcmVzdGluZyBwYXJ0cwpvZiB0aGUgYXBwIHlvdSdsbCBhZGQgYXBwLXNwZWNpZmljIGNvbW1hbmRzOiBuYXZpZ2F0ZSB0byBhIHBhcnRpY3VsYXIKdmlldywgZm9jdXMgYSB3ZWlyZCBpbnB1dCB0eXBlLCBieXBhc3MgYW4gYXV0aCBnYXRlLCB3aGF0ZXZlci4gVGhvc2UKY29tbWFuZHMgZW5jb2RlIGhhcmQtd29uIGtub3dsZWRnZSDigJQga2VlcCB0aGVtLgoKIyMgU3RlcCAzIOKAlCB1c2UgaXQgeW91cnNlbGYsIHZpYSB0bXV4CgpSdW4gdGhlIGRyaXZlciB0aGUgc2FtZSB3YXkgdGhlIG5leHQgYWdlbnQgd2lsbDoKCmBgYGJhc2gKdG11eCBuZXctc2Vzc2lvbiAtZCAtcyBhcHAgLXggMjAwIC15IDUwCnRtdXggc2VuZC1rZXlzIC10IGFwcCAnY2QgL3dvcmtzcGFjZS9hcHBzL2Rlc2t0b3AgJiYgeHZmYi1ydW4gLWEgbm9kZSAuY2xhdWRpbi9za2lsbHMvcnVuLWRlc2t0b3AvZHJpdmVyLm1qcycgRW50ZXIKdGltZW91dCAyMCBiYXNoIC1jICd1bnRpbCB0bXV4IGNhcHR1cmUtcGFuZSAtdCBhcHAgLXAgfCBncmVwIC1xICJkcml2ZXI+IjsgZG8gc2xlZXAgMC4yOyBkb25lJwp0bXV4IHNlbmQta2V5cyAtdCBhcHAgJ2xhdW5jaCcgRW50ZXIKdGltZW91dCA2MCBiYXNoIC1jICd1bnRpbCB0bXV4IGNhcHR1cmUtcGFuZSAtdCBhcHAgLXAgfCBncmVwIC1xICJsYXVuY2hlZCI7IGRvIHNsZWVwIDAuMjsgZG9uZScKdG11eCBzZW5kLWtleXMgLXQgYXBwICdzcyAwMS1sYW5kaW5nJyBFbnRlcgp0aW1lb3V0IDEwIGJhc2ggLWMgJ3VudGlsIHRtdXggY2FwdHVyZS1wYW5lIC10IGFwcCAtcCB8IGdyZXAgLXEgInNjcmVlbnNob3Q6IjsgZG8gc2xlZXAgMC4yOyBkb25lJwp0bXV4IHNlbmQta2V5cyAtdCBhcHAgJ3dpbmRvd3MnIEVudGVyICAgICMgd2hpY2ggcGFnZSBoYXMgdGhlIHJlYWwgVUk/CnRtdXggY2FwdHVyZS1wYW5lIC10IGFwcCAtcApgYGAKClRoZW4gYWN0dWFsbHkgb3BlbiBgL3RtcC9zaG90cy8wMS1sYW5kaW5nLnBuZ2AuIElzIGl0IHRoZSBhcHA/IElzIGl0CmJsYW5rPyBJcyBpdCBhIGxvZ2luIHNjcmVlbj8gRWFjaCBvZiB0aGVzZSB0ZWxscyB5b3Ugd2hhdCB0byBkbyBuZXh0LgoKS2VlcCBnb2luZyDigJQgY2xpY2sgaW50byB0aGUgbWFpbiBmZWF0dXJlLCBmaWxsIGEgZm9ybSwgc2VlIHRoZSByZXN1bHQKc2hvdyB1cCwgc2NyZWVuc2hvdCBpdC4gVGhlIGRyaXZlciBncm93cyB3aGF0ZXZlciBjb21tYW5kcyB5b3UgbmVlZAooYGZvY3VzLWlucHV0YCwgYGdvdG8tc2V0dGluZ3NgLCBgbG9naW4tYXMtdGVzdC11c2VyYOKApikuIFdoZW4gb25lIHJlYWwKZmxvdyB3b3JrcyBlbmQtdG8tZW5kLCB5b3UncmUgZG9uZSBidWlsZGluZyBhbmQgcmVhZHkgdG8gd3JpdGUuCgojIyBTdGVwIDQg4oCUIHdyaXRlIFNLSUxMLm1kCgpLZWVwIGl0IHNob3J0LiBUaGUgZHJpdmVyIGlzIHRoZSBtZWF0OyBgU0tJTEwubWRgIGlzIHRoZSBtYW51YWwuClN0cnVjdHVyZSB0aGF0IHdvcmtzOgoKPiAtLS0KPiBuYW1lOiBydW4tZGVza3RvcAo+IGRlc2NyaXB0aW9uOiBCdWlsZCwgcnVuLCBhbmQgZHJpdmUgdGhlIDxhcHA+IEVsZWN0cm9uIGRlc2t0b3AgYXBwLiBVc2Ugd2hlbiBhc2tlZCB0byBzdGFydCB0aGUgZGVza3RvcCBhcHAsIHRha2UgYSBzY3JlZW5zaG90IG9mIGl0LCBidWlsZCBpdCwgb3IgaW50ZXJhY3Qgd2l0aCBpdHMgVUkuCj4gLS0tCj4KPiA8QXBwPiBpcyBhbiBFbGVjdHJvbiBkZXNrdG9wIGFwcC4gRm9yIGFnZW50L2F1dG9tYXRlZCB1c2UsIGRyaXZlIGl0Cj4gdmlhIHRoZSBQbGF5d3JpZ2h0IFJFUEwgYXQgYC5jbGF1ZGluL3NraWxscy9ydW4tZGVza3RvcC9kcml2ZXIubWpzYAo+IHVuZGVyIHh2ZmIuIExhdW5jaCBpcyBzbG93ICh+MTBzKSBhbmQgdGhlIGludGVyZXN0aW5nIFVJIGxpdmVzIGluIGEKPiBCcm93c2VyVmlldywgbm90IHRoZSBtYWluIHdpbmRvdyDigJQgdGhlIGRyaXZlciBoYW5kbGVzIGJvdGguCj4KPiBBbGwgcGF0aHMgYXJlIHJlbGF0aXZlIHRvIGBhcHBzL2Rlc2t0b3AvYC4KPgo+ICMjIFByZXJlcXVpc2l0ZXMKPgo+IGBgYGJhc2gKPiBhcHQtZ2V0IGluc3RhbGwgLXkgeHZmYiBsaWJuc3MzIGxpYmdibTEgbGliYXNvdW5kMnQ2NCBsaWJndGstMy0wIFwKPiAgIGxpYnhzczEgbGlieGtiY29tbW9uMCBsaWJhdGstYnJpZGdlMi4wLTAgbGliY3VwczIgbGliZHJtMgo+IGBgYAo+Cj4gIyMgQnVpbGQKPgo+IGBgYGJhc2gKPiBucG0gaW5zdGFsbAo+IG5weCBlbGVjdHJvbi1mb3JnZSBzdGFydCAgICMgYnVpbGRzIC52aXRlL2J1aWxkLyDigJQgQ3RybC1DIG9uY2UgYnVpbHQKPiAjIDxhbnkgcGF0Y2ggeW91IGhhZCB0byBhcHBseTogc2VkIGEgZmVhdHVyZSBnYXRlLCBldGMuPgo+IGBgYAo+Cj4gIyMgUnVuIChhZ2VudCBwYXRoKQo+Cj4gYGBgYmFzaAo+IGNkIGFwcHMvZGVza3RvcAo+IHh2ZmItcnVuIC1hIG5vZGUgLmNsYXVkaW4vc2tpbGxzL3J1bi1kZXNrdG9wL2RyaXZlci5tanMKPiBgYGAKPgo+IFdyYXAgaW4gdG11eCBmb3IgaW50ZXJhY3RpdmUgdXNlOgo+Cj4gYGBgYmFzaAo+IHRtdXggbmV3LXNlc3Npb24gLWQgLXMgYXBwIC14IDIwMCAteSA1MAo+IHRtdXggc2VuZC1rZXlzIC10IGFwcCAnY2QgYXBwcy9kZXNrdG9wICYmIHh2ZmItcnVuIC1hIG5vZGUgLmNsYXVkaW4vc2tpbGxzL3J1bi1kZXNrdG9wL2RyaXZlci5tanMnIEVudGVyCj4gdGltZW91dCAyMCBiYXNoIC1jICd1bnRpbCB0bXV4IGNhcHR1cmUtcGFuZSAtdCBhcHAgLXAgfCBncmVwIC1xICJkcml2ZXI+IjsgZG8gc2xlZXAgMC4yOyBkb25lJwo+IHRtdXggc2VuZC1rZXlzIC10IGFwcCAnbGF1bmNoJyBFbnRlcgo+IHRpbWVvdXQgNjAgYmFzaCAtYyAndW50aWwgdG11eCBjYXB0dXJlLXBhbmUgLXQgYXBwIC1wIHwgZ3JlcCAtcSAibGF1bmNoZWQiOyBkbyBzbGVlcCAwLjI7IGRvbmUnCj4gdG11eCBzZW5kLWtleXMgLXQgYXBwICdzcyBsYW5kaW5nJyBFbnRlcgo+IHRtdXggY2FwdHVyZS1wYW5lIC10IGFwcCAtcAo+IGBgYAo+Cj4gU2NyZWVuc2hvdHMgbGFuZCBpbiBgL3RtcC9zaG90cy9gIChvdmVycmlkZTogYFNDUkVFTlNIT1RfRElSYCkuCj4KPiAjIyMgQ29tbWFuZHMKPgo+IHwgY29tbWFuZCB8IHdoYXQgaXQgZG9lcyB8Cj4gfC0tLXwtLS18Cj4gfCBgbGF1bmNoYCB8IGxhdW5jaCB0aGUgYXBwLCB3YWl0IGZvciB3aW5kb3dzIHwKPiB8IGBzcyBbbmFtZV1gIHwgc2NyZWVuc2hvdCDihpIgYC90bXAvc2hvdHMvPG5hbWU+LnBuZ2AgfAo+IHwgYGNsaWNrIDxjc3Mtc2VsPmAgfCBjbGljayBlbGVtZW50ICh2aWEgRE9NLCBub3QgY29vcmRzIOKAlCBzZWUgR290Y2hhcykgfAo+IHwgYGNsaWNrLXRleHQgPHRleHQ+YCB8IGNsaWNrIGJ1dHRvbi9saW5rIGNvbnRhaW5pbmcgdGV4dCB8Cj4gfCBgdHlwZSA8dGV4dD5gIC8gYHByZXNzIDxrZXk+YCB8IGtleWJvYXJkIGlucHV0IHwKPiB8IGB3YWl0IDxjc3Mtc2VsPmAgfCB3YWl0IGZvciBlbGVtZW50LCAxMHMgdGltZW91dCB8Cj4gfCBgZXZhbCA8anM+YCB8IGV2YWx1YXRlIGluIHRoZSBwYWdlLCBwcmludCBKU09OIHwKPiB8IGB0ZXh0IFtjc3Mtc2VsXWAgfCBwcmludCBpbm5lclRleHQgfAo+IHwgYHdpbmRvd3NgIHwgbGlzdCBhbGwgd2luZG93cyArIHdlYkNvbnRlbnRzIChmaW5kIHRoZSByZWFsIFVJKSB8Cj4gfCBgcXVpdGAgfCBjbG9zZSBhcHAsIGV4aXQgfAo+Cj4gUGx1cyBhbnkgYXBwLXNwZWNpZmljIGNvbW1hbmRzIHlvdSBidWlsdDogYDx5b3VyLWNvbW1hbmQ+YCDigJQgPHdoYXQgaXQgZG9lcz4uCj4KPiAjIyBSdW4gKGh1bWFuIHBhdGgpCj4KPiBgYGBiYXNoCj4gbnBtIHN0YXJ0ICAgIyBvcGVucyBhIHdpbmRvdzsgdXNlbGVzcyBoZWFkbGVzcy4gQ3RybC1DIHRvIHF1aXQuCj4gYGBgCj4KPiAjIyBHb3RjaGFzCj4KPiAtICoqPHRoZSBzcGVjaWZpYyB3ZWlyZCB0aGluZyB5b3UgaGl0PioqIOKAlCA8d2h5PiDihpIgPGZpeC93b3JrYXJvdW5kPgo+IC0gPGV0Yy4g4oCUIG9ubHkgdGhpbmdzIHlvdSBhY3R1YWxseSBoaXQsIG5vdCBnZW5lcmljIGFkdmljZT4KPgo+ICMjIFRyb3VibGVzaG9vdGluZwo+Cj4gLSAqKkxhdW5jaCB0aW1lb3V0ICgzMHMpOioqIGJ1aWxkIG91dHB1dCBtaXNzaW5nPyDihpIgcmUtcnVuIHRoZSBidWlsZAo+ICAgc3RlcC4gYG5vZGVDbGlJbnNwZWN0YCBmdXNlIGRpc2FibGVkPyDihpIgUGxheXdyaWdodCBjYW4ndCBhdHRhY2g7Cj4gICBkb24ndCBkaXNhYmxlIHRoYXQgZnVzZSBpbiBkZXYgYnVpbGRzLgo+IC0gKioiTWlzc2luZyBYIHNlcnZlciI6KiogZm9yZ290IGB4dmZiLXJ1bmAuIEhlYWRsZXNzIExpbnV4IG5lZWRzIGl0Lgo+IC0gKipTdGFsZSBYdmZiIGxvY2tzOioqIGBybSAtZiAvdG1wLy5YKi1sb2NrOyBwa2lsbCBYdmZiYAo+IC0gPGFueXRoaW5nIGVsc2UgeW91IGFjdHVhbGx5IGhpdD4KCiMjIE9ic3RhY2xlcyB5b3Ugd2lsbCBoaXQgKGFuZCB0aGV5IGdvIGluIEdvdGNoYXMpCgpUaGVzZSBhcmUgcmVhbCBwYXR0ZXJucyBmcm9tIHJlYWwgRWxlY3Ryb24gYXBwcy4gWW91J2xsIGhpdCBzb21lIHN1YnNldDoKCi0gKipgZmlyc3RXaW5kb3coKWAgZ2l2ZXMgeW91IGEgc3BsYXNoL2xvYWRpbmcgc2NyZWVuLCoqIG5vdCB0aGUgYXBwLgogIFdhaXQgbG9uZ2VyLCBvciBmaW5kIHRoZSByaWdodCBwYWdlIGJ5IFVSTCwgb3Igd2FpdCBmb3IgYSBzcGVjaWZpYwogIHNlbGVjdG9yIHRoYXQgb25seSBhcHBlYXJzIHdoZW4gdGhlIGFwcCBpcyBhY3R1YWxseSByZWFkeS4KCi0gKipUaGUgcmVhbCBVSSBpcyBpbiBhIEJyb3dzZXJWaWV3LCBub3QgYSBCcm93c2VyV2luZG93LioqIFBsYXl3cmlnaHQKICBzZWVzIGl0IGFzIGEgc2VwYXJhdGUgIndpbmRvdyIgd2l0aCBhIGRpZmZlcmVudCBVUkwuIFRoZSBgd2luZG93c2AKICBjb21tYW5kIGV4aXN0cyBleGFjdGx5IGZvciBmaWd1cmluZyB0aGlzIG91dC4gYGdldEJyb3dzZXJWaWV3cygpYAogIG1heSBhbHNvIHJldHVybiBlbXB0eSBvbiBuZXdlciBFbGVjdHJvbiDigJQgdXNlCiAgYHdlYkNvbnRlbnRzLmdldEFsbFdlYkNvbnRlbnRzKClgIGluc3RlYWQuCgotICoqYGxvY2F0b3IuY2xpY2soKWAgY2xpY2tzIHRoZSB3cm9uZyB0aGluZy4qKiBQbGF5d3JpZ2h0IGNvbXB1dGVzCiAgY2xpY2sgY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIG1haW4gd2luZG93LiBJZiB5b3VyIGNvbnRlbnQgaXMgaW4KICBhIEJyb3dzZXJWaWV3IG92ZXJsYXksIHRob3NlIGNvb3JkaW5hdGVzIGhpdCB0aGUgd2luZG93IGJlaGluZCBpdC4KICBUaGUgZHJpdmVyIHNrZWxldG9uIHVzZXMgYHBhZ2UuZXZhbHVhdGUoZWwgPT4gZWwuY2xpY2soKSlgIGZvciB0aGlzCiAgcmVhc29uIOKAlCBET00gY2xpY2sgYnlwYXNzZXMgY29vcmRpbmF0ZXMgZW50aXJlbHkuCgotICoqRmVhdHVyZSBnYXRlcyBibG9jayB0aGUgdGhpbmcgeW91IG5lZWQgdG8gdGVzdC4qKiBUaGUgYXBwIGNoZWNrcyBhCiAgcGxhbiB0aWVyLCBvciBhbiBlbnYgZmxhZywgb3IgYSBmZWF0dXJlIGZsYWcgYmFrZWQgaW50byBTU1IgSFRNTC4KICBGaW5kIHdoZXJlIHRoZSBjaGVjayBoYXBwZW5zIChncmVwIHRoZSBidWlsdCBvdXRwdXQgZm9yIHRoZSBnYXRlCiAgbmFtZSkgYW5kIHBhdGNoIGl0IGZvciB5b3VyIGxvY2FsIHJ1biDigJQgYSBgc2VkYCBvbiB0aGUgYnVpbGQgb3V0cHV0LAogIGFuIGVudiB2YXIgb3ZlcnJpZGUsIG9yIChmb3IgU1NSLWVtYmVkZGVkIGZsYWdzKSBpbnRlcmNlcHQgdGhlCiAgcmVzcG9uc2UgdmlhIENEUCBgRmV0Y2guZW5hYmxlYCBhbmQgcmV3cml0ZSBpdCBpbi1mbGlnaHQuIERvY3VtZW50CiAgZXhhY3RseSB3aGF0IHlvdSBwYXRjaGVkIGFuZCB3aHkuCgotICoqY29udGVudEVkaXRhYmxlIGlucHV0cyoqIChQcm9zZU1pcnJvciwgVGlwdGFwLCBTbGF0ZSkgYXJlbid0CiAgYDx0ZXh0YXJlYT5gLiBgZmlsbCgpYCB3b24ndCB3b3JrLiBGb2N1cyB0aGUgZWxlbWVudCwgdGhlbiB1c2UKICBga2V5Ym9hcmQudHlwZSgpYC4gQWRkIGEgYGZvY3VzIDxzZWw+YCBjb21tYW5kIGlmIHRoZSBhcHAgaGFzIHRoZXNlLgoKLSAqKkVsZWN0cm9uIHN0ZWFscyBzdGRpbi4qKiBUaGUgYGZzLm9wZW5TeW5jKCcvZGV2L3N0ZGluJywgJ3InKWAgKwogIGBjcmVhdGVSZWFkU3RyZWFtYCB0cmljayBpbiB0aGUgc2tlbGV0b24gcHJvdGVjdHMgeW91ciBSRVBMJ3MgaW5wdXQuCgotICoqTmF0aXZlIG1vZHVsZXMgZmFpbCB0byBsb2FkKiogKGtleWNoYWluLCBub3RpZmljYXRpb25zLCBldGMuKS4KICBVc3VhbGx5IG5vbi1mYXRhbCDigJQgdGhlIGNvcmUgYXBwIHJ1bnMsIHRob3NlIGZlYXR1cmVzIG5vLW9wLiBOb3RlIGl0CiAgYW5kIG1vdmUgb24uCg=="),"examples/library.md":gG("IyBFeGFtcGxlOiBMaWJyYXJ5IC8gU0RLCgpMaWJyYXJpZXMgZG9uJ3QgaGF2ZSBhICJydW4iIHN0ZXAgaW4gdGhlIHByb2Nlc3Mgc2Vuc2Ug4oCUIHRoZXJlJ3Mgbm8Kc2VydmVyIHRvIHN0YXJ0LCBubyBDTEkgdG8gaW52b2tlLiBGb3IgbGlicmFyaWVzLCB0aGUgcnVuIHNraWxsIGlzIGFib3V0OgoKMS4gKipCdWlsZGluZyoqIHRoZSBsaWJyYXJ5IGZyb20gc291cmNlCjIuICoqUnVubmluZyB0aGUgdGVzdCBzdWl0ZSoqCjMuICoqQSBtaW5pbWFsIHdvcmtpbmcgZXhhbXBsZSoqIHRoYXQgZXhlcmNpc2VzIHRoZSBsaWJyYXJ5IGFuZCBwcm92ZXMKICAgaXQncyBpbnN0YWxsZWQgY29ycmVjdGx5CgpLZWVwIGl0IGJyaWVmLiBUaGUgdGVtcGxhdGUncyBCdWlsZCBhbmQgVGVzdCBzZWN0aW9ucyBkbyBtb3N0IG9mIHRoZSB3b3JrLgoKIyMgVGhlIHNtb2tlLXRlc3QgZXhhbXBsZQoKVGhlIG1haW4gbGlicmFyeS1zcGVjaWZpYyBhZGRpdGlvbiBpcyBhIHRpbnkgcHJvZ3JhbSAob3IgUkVQTCBzbmlwcGV0KQp0aGF0IGltcG9ydHMgdGhlIGxpYnJhcnkgYW5kIGRvZXMgb25lIHJlYWwgdGhpbmcuIFRoaXMgaXMgaG93IGFuIGFnZW50CmNvbmZpcm1zICJ5ZXMsIHRoZSBsaWJyYXJ5IGlzIHVzYWJsZSI6Cgo+ICMjIFZlcmlmeQo+Cj4gYGBgYmFzaAo+IHB5dGhvbiAtYyAnCj4gZnJvbSBteWxpYiBpbXBvcnQgQ2xpZW50Cj4gYyA9IENsaWVudCgpCj4gcHJpbnQoYy5waW5nKCkpCj4gJwo+ICMg4oaSIHBvbmcKPiBgYGAKCk9yIGZvciBhIGNvbXBpbGVkIGxhbmd1YWdlOgoKPiBgYGBiYXNoCj4gY2F0ID4gL3RtcC9zbW9rZS5nbyA8PEdPCj4gcGFja2FnZSBtYWluCj4gaW1wb3J0ICJleGFtcGxlLmNvbS9teWxpYiIKPiBmdW5jIG1haW4oKSB7IHByaW50bG4obXlsaWIuVmVyc2lvbigpKSB9Cj4gR08KPiBnbyBydW4gL3RtcC9zbW9rZS5nbwo+ICMg4oaSIHYxLjIuMwo+IGBgYAoKIyMgRXhhbXBsZSBzbmlwcGV0Cgo+IC0tLQo+IG5hbWU6IHJ1bi1teWxpYgo+IGRlc2NyaXB0aW9uOiBCdWlsZCwgaW5zdGFsbCwgYW5kIHRlc3QgbXlsaWIgZnJvbSBzb3VyY2UuIFVzZSB3aGVuIGFza2VkIHRvIHZlcmlmeSBteWxpYiB3b3JrcywgcnVuIGl0cyB0ZXN0cywgb3IgYnVpbGQgYSBkaXN0cmlidXRpb24uCj4gLS0tCj4KPiBgbXlsaWJgIGlzIGEgUHl0aG9uIGxpYnJhcnkg4oCUICJydW5uaW5nIiBpdCBtZWFucyBidWlsZGluZyBmcm9tIHNvdXJjZQo+IGFuZCBleGVjdXRpbmcgdGhlIHRlc3Qgc3VpdGUuCj4KPiAjIyBTZXR1cAo+Cj4gYGBgYmFzaAo+IHBpcCBpbnN0YWxsIC1lICcuW2Rldl0nCj4gYGBgCj4KPiAjIyBWZXJpZnkKPgo+IGBgYGJhc2gKPiBweXRob24gLWMgJ2ltcG9ydCBteWxpYjsgcHJpbnQobXlsaWIuX192ZXJzaW9uX18pJwo+ICMg4oaSIDIuMS4wCj4gYGBgCj4KPiAjIyBUZXN0Cj4KPiBgYGBiYXNoCj4gcHl0ZXN0Cj4gYGBgCj4KPiBTdWJzZXQgb2YgdGVzdHM6IGBweXRlc3QgdGVzdHMvdW5pdC9gLiBXaXRoIGNvdmVyYWdlOiBgcHl0ZXN0IC0tY292PW15bGliYC4KPgo+ICMjIEJ1aWxkIChkaXN0cmlidXRpb24pCj4KPiBgYGBiYXNoCj4gcGlwIGluc3RhbGwgYnVpbGQKPiBweXRob24gLW0gYnVpbGQKPiAjIOKGkiBkaXN0L215bGliLTIuMS4wLXB5My1ub25lLWFueS53aGwKPiBgYGAKCiMjIFRoaW5ncyB0byBjb25zaWRlciBkb2N1bWVudGluZwoKLSAqKkRldmVsb3BtZW50IG1vZGUgdnMgaW5zdGFsbGVkIG1vZGUuKiogYHBpcCBpbnN0YWxsIC1lIC5gIHZzCiAgYHBpcCBpbnN0YWxsIC5gIOKAlCBpZiBiZWhhdmlvciBkaWZmZXJzLCBzYXkgd2hpY2ggdG8gdXNlIGZvciB3aGF0LgotICoqT3B0aW9uYWwgZGVwZW5kZW5jaWVzLioqIGBbZGV2XWAsIGBbdGVzdF1gLCBgW2RvY3NdYCBleHRyYXMgYW5kIHdoZW4KICBlYWNoIGlzIG5lZWRlZC4KLSAqKkdlbmVyYXRlZCBjb2RlLioqIElmIHRoZXJlJ3MgYSBjb2RlZ2VuIHN0ZXAgKHByb3RvYnVmLCBPcGVuQVBJIGNsaWVudHMpLAogIGRvY3VtZW50IGl0IOKAlCBpdCdzIGFsbW9zdCBhbHdheXMgbWlzc2luZyBmcm9tIFJFQURNRXMuCg=="),"examples/playwright.md":gG("IyBFeGFtcGxlOiBCcm93c2VyLWRyaXZlbiB3ZWIgYXBwCgpZb3UgaGF2ZSBhIGRldiBzZXJ2ZXIgdGhhdCBzZXJ2ZXMgSFRNTCB0byBhIGJyb3dzZXIuIEFuIGFnZW50IGluIGEKaGVhZGxlc3MgY29udGFpbmVyIGNhbid0IG9wZW4gYSBicm93c2VyIHdpbmRvdyDigJQgc28gInJ1biB0aGUgYXBwIiBtZWFucwpsYXVuY2hpbmcgdGhlIGRldiBzZXJ2ZXIsIGRyaXZpbmcgYSBoZWFkbGVzcyBDaHJvbWl1bSBhZ2FpbnN0IGl0LCBhbmQKcHJvZHVjaW5nIGEgc2NyZWVuc2hvdCB0aGF0IHByb3ZlcyB0aGUgcGFnZSByZW5kZXJlZC4KCkRvbid0IHdyaXRlIGEgYnJvd3NlciBkcml2ZXIuIFVzZSBgY2hyb21pdW0tY2xpYC4KCiMjIERldiBzZXJ2ZXIKCkZpbmQgdGhlIGRldiBjb21tYW5kIChgcGFja2FnZS5qc29uYCBgc2NyaXB0cy5kZXZgLCBgTWFrZWZpbGVgLApSRUFETUUpLCBzdGFydCBpdCBpbiB0aGUgYmFja2dyb3VuZCwgYW5kIHdhaXQgZm9yIGl0IHRvIGFjdHVhbGx5IHNlcnZlOgoKYGBgYmFzaApucG0gcnVuIGRldiAmICAgIyBvciB5YXJuIGRldiwgcG5wbSBkZXYsIG1ha2Ugc2VydmUsIC4vZGV2LnNoCmVjaG8gJCEgPiAvdG1wL2Rldi5waWQKdGltZW91dCAzMCBiYXNoIC1jICd1bnRpbCBjdXJsIC1zZiBodHRwOi8vbG9jYWxob3N0OjMwMDAgPi9kZXYvbnVsbDsgZG8gc2xlZXAgMTsgZG9uZScKYGBgCgpEb24ndCBgc2xlZXAgNWAg4oCUIHBvbGwgdGhlIHBvcnQuIFN0b3Agd2l0aApga2lsbCAkKGNhdCAvdG1wL2Rldi5waWQpYCAob3IgYHBraWxsIC1mICducG0gcnVuIGRldidgKSBiZWZvcmUKcmVsYXVuY2hpbmcsIG9yIHRoZSBuZXh0IHJ1biBoaXRzIGBFQUREUklOVVNFYC4KCiMjIERyaXZlCgpgY2hyb21pdW0tY2xpYCBpcyBhIGhlYWRsZXNzLUNocm9taXVtIFJFUEwuIFBpcGUgYSBzY3JpcHQgdG8gc3RkaW46CgpgYGBiYXNoCmNocm9taXVtLWNsaSAtLXNlc3Npb24gYXBwIDw8J0VPRicKbmF2IGh0dHA6Ly9sb2NhbGhvc3Q6MzAwMAp3YWl0LWZvciB0ZXh0PURhc2hib2FyZApzY3JlZW5zaG90CmNsaWNrIGJ1dHRvbjpoYXMtdGV4dCgiTmV3IGl0ZW0iKQpmaWxsIGlucHV0W25hbWU9InRpdGxlIl0gU21va2UgdGVzdApwcmVzcyBFbnRlcgp3YWl0LWZvciB0ZXh0PVNtb2tlIHRlc3QKc2NyZWVuc2hvdApjb25zb2xlIC0tZXJyb3JzCkVPRgpgYGAKClNjcmVlbnNob3RzIGxhbmQgaW4gYGNocm9taXVtX2NsaS9zZXNzaW9ucy9hcHAvc2NyZWVuc2hvdHMvYCAobGF0ZXN0CnN5bWxpbmtlZCBhcyBgc2NyZWVuc2hvdC5wbmdgKS4gVGhhdCdzIHRoZSB3aG9sZSBsb29wOiBgbmF2YCDihpIKYHdhaXQtZm9yYCB0aGUgZWxlbWVudCB5b3UgbmVlZCDihpIgYWN0IChgY2xpY2tgIC8gYGZpbGxgIC8gYHR5cGVgIC8KYHByZXNzYCkg4oaSIGBzY3JlZW5zaG90YCDihpIgYGNvbnNvbGUgLS1lcnJvcnNgIHRvIGNoZWNrIG5vdGhpbmcgdGhyZXcuCkZ1bGwgY29tbWFuZCByZWZlcmVuY2U6IGBjaHJvbWl1bS1jbGlgIHNraWxsLCBvciBgaGVscGAgYXQgdGhlIHByb21wdC4KCkZvciBpdGVyYXRpdmUgZGVidWdnaW5nLCBydW4gaXQgdW5kZXIgdG11eCBhbmQgYHNlbmQta2V5c2Agb25lIGNvbW1hbmQKYXQgYSB0aW1lIOKAlCBzYW1lIGNvbW1hbmRzLCBzYW1lIHNlc3Npb24uCgoqKklmIGBjaHJvbWl1bS1jbGlgIGlzbid0IGF2YWlsYWJsZToqKiBhZGFwdApbZWxlY3Ryb24ubWRdKGVsZWN0cm9uLm1kKSdzIFJFUEwgZHJpdmVyIOKAlCB0aGUgc3RydWN0dXJlIGFuZCBjb21tYW5kcwp0cmFuc2ZlciwgYnV0IGl0J3MgYF9lbGVjdHJvbmAtc3BlY2lmaWM6CmltcG9ydCBgeyBjaHJvbWl1bSB9YCBpbnN0ZWFkLCBsYXVuY2ggd2l0aApgY2hyb21pdW0ubGF1bmNoKHsgYXJnczogWyctLW5vLXNhbmRib3gnXSB9KWAsIGFjcXVpcmUgdGhlIHBhZ2UgdmlhCmAoYXdhaXQgYXBwLm5ld0NvbnRleHQoKSkubmV3UGFnZSgpYCB0aGVuIGBnb3RvKClgIHlvdXIgZGV2IFVSTCwgYW5kCmRyb3AgdGhlIEVsZWN0cm9uLW9ubHkgd2luZG93IGludHJvc3BlY3Rpb24KKGAud2luZG93cygpYC9gLmZpcnN0V2luZG93KClgL3RoZSBgd2luZG93c2AgY29tbWFuZCkuCgojIyBXaGF0IHRvIHB1dCBpbiB0aGUgc2tpbGwKClRoZSBwcm9qZWN0LXNwZWNpZmljIGJpdHMgb25seS4gYGNocm9taXVtLWNsaWAgaGFuZGxlcyB0aGUgbWVjaGFuaWNzLgoKLSAqKkRldiBjb21tYW5kICsgcG9ydCArIHN0b3AuKiogVGhlIGV4YWN0IHN0YXJ0IGxpbmUsIGFueSBlbnYgdmFycyBpdAogIG5lZWRzLCBhbmQgdGhlIGBraWxsYC9gcGtpbGxgIHRvIHN0b3AgaXQuCi0gKipBdXRoLioqIFdoYXRldmVyIGdldHMgYSBsb2dnZWQtaW4gc2Vzc2lvbiDigJQgYSBgc2V0LWNvb2tpZWAgbGluZSwgYQogIGBmaWxsYC9gY2xpY2tgIGxvZ2luIHNlcXVlbmNlLCBvciBhIGhlbHBlciBzY3JpcHQgdGhhdCBkb2VzIHRoZSBBUEkKICBkYW5jZSBhbmQgZW1pdHMgdGhlIGNvb2tpZS4KLSAqKk9uZSByZXByZXNlbnRhdGl2ZSBpbnRlcmFjdGlvbi4qKiBOb3QgdGhlIHdob2xlIGFwcCDigJQgb25lIHBhdGggdGhhdAogIHByb3ZlcyBpdCdzIHJ1bm5pbmcsIGVuZGluZyBpbiBhIHNjcmVlbnNob3QuCi0gKipBcHAtc3BlY2lmaWMgZ290Y2hhcy4qKiBPbmx5IHRoZSBvbmVzIHlvdSBhY3R1YWxseSBoaXQuCgojIyBHb3RjaGFzIHRoYXQgcmVjdXIKCi0gKipSZWFjdCBjb250cm9sbGVkIGlucHV0cy4qKiBgZXZhbCBlbC52YWx1ZSA9ICfigKYnYCBkb2Vzbid0IGZpcmUKICBSZWFjdCdzIG9uQ2hhbmdlLiBVc2UgYGZpbGxgIC8gYHR5cGVgIOKAlCB0aGV5IGdvIHRocm91Z2ggUGxheXdyaWdodCdzCiAgaW5wdXQgcGlwZWxpbmUuCi0gKipXZWJzb2NrZXRzIC8gbG9uZy1wb2xsLioqIGB3YWl0LWlkbGVgIG5ldmVyIHNldHRsZXMuIGB3YWl0LWZvcmAgdGhlCiAgZWxlbWVudCB5b3UgYWN0dWFsbHkgbmVlZC4KLSAqKlNsb3cgZmlyc3QgcGFpbnQuKiogVml0ZS9OZXh0IGNvbXBpbGUgcm91dGVzIG9uIGRlbWFuZDsgdGhlIGZpcnN0CiAgYG5hdmAgY2FuIHRha2UgMTBzKy4gYHdhaXQtZm9yYCBoYW5kbGVzIGl0OyByYXcgYHNsZWVwYCBkb2Vzbid0LgotICoqYHNjcmVlbnNob3QtZWxlbWVudCA8c2VsPmAqKiBjcm9wcyB0byBvbmUgZWxlbWVudCDigJQgdXNlIGl0IHdoZW4gdGhlCiAgZGlmZiBpcyBpbiBhIHNwZWNpZmljIGNvbXBvbmVudCwgbm90IHRoZSB3aG9sZSBwYWdlLgotICoqQ2hlY2sgYGNvbnNvbGUgLS1lcnJvcnNgIGJlZm9yZSBkZWNsYXJpbmcgc3VjY2Vzcy4qKiBBIHBhZ2UgY2FuCiAgcmVuZGVyIGl0cyBzaGVsbCB3aGlsZSBldmVyeSBkYXRhIGZldGNoIDUwMHMuCg=="),"examples/server.md":gG("IyBFeGFtcGxlOiBXZWIgc2VydmVyIC8gQVBJCgpUaGUgZGlzdGluZ3Vpc2hpbmcgY29uY2VybiBmb3Igc2VydmVycyBpcyAqKmxpZmVjeWNsZSoqOiBhbiBhZ2VudCBuZWVkcyB0bwpzdGFydCB0aGUgc2VydmVyIGluIHRoZSBiYWNrZ3JvdW5kLCB2ZXJpZnkgaXQncyB1cCwgaW50ZXJhY3Qgd2l0aCBpdCwgdGhlbgpjbGVhbmx5IHNodXQgaXQgZG93bi4gQSBmb3JlZ3JvdW5kIGBucG0gc3RhcnRgIHRoYXQgYmxvY2tzIHRoZSBzaGVsbCBpcwp1c2VsZXNzIHRvIGFuIGFnZW50LgoKIyMgU3RydWN0dXJlIHRvIGZvbGxvdwoKQSBnb29kIHNlcnZlciBydW4gc2tpbGwgaGFzOgoKMS4gKipQcmVyZXF1aXNpdGVzICYgc2V0dXAqKiDigJQgc2FtZSBhcyBhbnkgcHJvamVjdC4KMi4gKipSdW4qKiDigJQgdGhlIGJhY2tncm91bmQtbGF1bmNoIHBhdHRlcm4gKGJlbG93KSwgbm90IGEgYmxvY2tpbmcgY29tbWFuZC4KMy4gKipWZXJpZnkqKiDigJQgYSBgY3VybGAgb3Igc2ltaWxhciB0aGF0IGNvbmZpcm1zIHRoZSBzZXJ2ZXIgaXMgYWN0dWFsbHkgdXAuCjQuICoqU3RvcCoqIOKAlCBob3cgdG8gY2xlYW5seSB0ZXJtaW5hdGUgdGhlIGJhY2tncm91bmQgcHJvY2Vzcy4KCklmIHRoZSBiYWNrZ3JvdW5kLWxhdW5jaCArIHJlYWRpbmVzcy1wb2xsICsgc21va2UtY3VybCBzZXF1ZW5jZSBpcyBtb3JlCnRoYW4gYSBjb3VwbGUgb2YgbGluZXMsIHB1dCBpdCBpbiBhIGBzbW9rZS5zaGAgaW5zaWRlIHRoZSBza2lsbCBkaXJlY3RvcnkKYW5kIGhhdmUgYFNLSUxMLm1kYCBzYXkgInJ1biB0aGUgc21va2Ugc2NyaXB0LiIgT25lIGNvbW1hbmQsIGV4aXQgY29kZQp0ZWxscyB5b3UgaWYgdGhlIHNlcnZlciBpcyBoZWFsdGh5LgoKIyMgQmFja2dyb3VuZC1sYXVuY2ggcGF0dGVybgoKRG9uJ3Qgd3JpdGU6Cgo+IGBgYGJhc2gKPiBucG0gc3RhcnQKPiBgYGAKClRoYXQgYmxvY2tzLiBJbnN0ZWFkLCBzaG93IGhvdyB0byBsYXVuY2ggaW4gdGhlIGJhY2tncm91bmQsIHdhaXQgZm9yCnJlYWRpbmVzcywgYW5kIGZpbmQgdGhlIFBJRCBsYXRlcjoKCj4gYGBgYmFzaAo+IG5wbSBzdGFydCAmPiAvdG1wL3NlcnZlci5sb2cgJgo+IFNFUlZFUl9QSUQ9JCEKPgo+ICMgV2FpdCBmb3IgdGhlIHNlcnZlciB0byBjb21lIHVwIChhZGp1c3QgdGltZW91dC9wb3J0IGFzIG5lZWRlZCkKPiBmb3IgaSBpbiB7MS4uMzB9OyBkbwo+ICAgY3VybCAtc2YgaHR0cDovL2xvY2FsaG9zdDozMDAwL2hlYWx0aCA+IC9kZXYvbnVsbCAmJiBicmVhawo+ICAgc2xlZXAgMQo+IGRvbmUKPiBgYGAKClRoZW4gdGhlIHZlcmlmaWNhdGlvbiBzdGVwOgoKPiBgYGBiYXNoCj4gY3VybCBodHRwOi8vbG9jYWxob3N0OjMwMDAvaGVhbHRoCj4gIyDihpIgeyJzdGF0dXMiOiJvayJ9Cj4gYGBgCgpBbmQgc3RvcHBpbmc6Cgo+IGBgYGJhc2gKPiBraWxsICRTRVJWRVJfUElECj4gIyBvciwgaWYgeW91J3ZlIGxvc3QgdGhlIFBJRDoKPiBwa2lsbCAtZiAibm9kZS4qc2VydmVyLmpzIgo+IGBgYAoKIyMgRGV0YWlscyB3b3J0aCBkb2N1bWVudGluZwoKLSAqKldoaWNoIHBvcnQuKiogTWFrZSBpdCBleHBsaWNpdCBhbmQgc2F5IGhvdyB0byBvdmVycmlkZSBpdCAoYFBPUlQ9NDAwMCBucG0gc3RhcnRgKS4KLSAqKldoYXQgInJlYWR5IiBsb29rcyBsaWtlLioqIEEgc3BlY2lmaWMgbG9nIGxpbmUgb3IgYSBoZWFsdGggZW5kcG9pbnQgdG8gaGl0LgotICoqUmVxdWlyZWQgZW52IHZhcnMuKiogRGF0YWJhc2UgVVJMLCBBUEkga2V5cywgZXRjLiDigJQgd2l0aCBhIHRlbXBsYXRlIGAuZW52YAogIGlmIHRoZSBsaXN0IGlzIGxvbmcuCi0gKipIb3QgcmVsb2FkIHZzIHByb2R1Y3Rpb24gbW9kZS4qKiBJZiB0aGV5IGRpZmZlciBtZWFuaW5nZnVsbHksIHNheSB3aGljaAogIHRvIHVzZSBhbmQgd2hlbi4KLSAqKkRlcGVuZGVudCBzZXJ2aWNlcy4qKiBJZiB0aGUgc2VydmVyIG5lZWRzIFJlZGlzL1Bvc3RncmVzL2V0Yy4sIGVpdGhlcgogIHBvaW50IGF0IGEgZG9ja2VyLWNvbXBvc2UgdGhhdCBicmluZ3MgdGhlbSB1cCwgb3IgaW5jbHVkZSB0aGUgYGRvY2tlciBydW5gCiAgY29tbWFuZCBkaXJlY3RseS4KCiMjIEV4YW1wbGUgc25pcHBldAoKSGVyZSdzIHdoYXQgYSBSdW4gc2VjdGlvbiBmb3IgYSB0eXBpY2FsIE5vZGUgQVBJIG1pZ2h0IGxvb2sgbGlrZToKCj4gIyMgUnVuCj4KPiBTdGFydCB0aGUgZGV2IHNlcnZlciBpbiB0aGUgYmFja2dyb3VuZDoKPgo+IGBgYGJhc2gKPiBucG0gcnVuIGRldiAmPiAvdG1wL2FwaS5sb2cgJgo+IGBgYAo+Cj4gVGhlIHNlcnZlciBsaXN0ZW5zIG9uIHBvcnQgMzAwMC4gV2FpdCBmb3IgaXQgdG8gYmUgcmVhZHksIHRoZW4gdmVyaWZ5Ogo+Cj4gYGBgYmFzaAo+IGZvciBpIGluIHsxLi4yMH07IGRvCj4gICBjdXJsIC1zZiBodHRwOi8vbG9jYWxob3N0OjMwMDAvaGVhbHRoICYmIGJyZWFrCj4gICBzbGVlcCAwLjUKPiBkb25lCj4gY3VybCBodHRwOi8vbG9jYWxob3N0OjMwMDAvaGVhbHRoCj4gIyDihpIgeyJzdGF0dXMiOiJvayIsInZlcnNpb24iOiIxLjIuMyJ9Cj4gYGBgCj4KPiBMb2dzIGFyZSBhdCBgL3RtcC9hcGkubG9nYC4gU3RvcCB3aXRoOgo+Cj4gYGBgYmFzaAo+IHBraWxsIC1mICJ0c3ggd2F0Y2ggc3JjL2luZGV4LnRzIgo+IGBgYAo+Cj4gIyMjIEVudmlyb25tZW50Cj4KPiB8IFZhcmlhYmxlIHwgUmVxdWlyZWQgfCBEZWZhdWx0IHwgTm90ZXMgfAo+IHwtLS18LS0tfC0tLXwtLS18Cj4gfCBgREFUQUJBU0VfVVJMYCB8IFllcyB8IOKAlCB8IFBvc3RncmVzIGNvbm5lY3Rpb24gc3RyaW5nIHwKPiB8IGBQT1JUYCB8IE5vIHwgYDMwMDBgIHwgfAo+IHwgYExPR19MRVZFTGAgfCBObyB8IGBpbmZvYCB8IGBkZWJ1Z2AgLyBgaW5mb2AgLyBgd2FybmAgLyBgZXJyb3JgIHwK"),"examples/tui.md":gG("IyBFeGFtcGxlOiBUVUkgLyBpbnRlcmFjdGl2ZSB0ZXJtaW5hbCBhcHAKCkludGVyYWN0aXZlIHRlcm1pbmFsIGFwcHMgKHRleHQgZWRpdG9ycywgUkVQTHMsIGN1cnNlcy1iYXNlZCBVSXMpIGNhbid0CmJlIGRyaXZlbiBkaXJlY3RseSBieSBhbiBhZ2VudCdzIGJhc2ggdG9vbCDigJQgdGhleSB0YWtlIG92ZXIgdGhlIHRlcm1pbmFsLgpUaGUgc2tpbGwgbXVzdCBzaG93IGhvdyB0byB3cmFwIHRoZW0gaW4gYHRtdXhgIHNvIHRoZSBhZ2VudCBjYW4gc2VuZAppbnB1dCwgY2FwdHVyZSBvdXRwdXQsIGFuZCB0YWtlIHNjcmVlbnNob3RzLgoKIyMgVGhlIHRtdXggcGF0dGVybgoKVGhpcyBpcyB0aGUgc3RhbmRhcmQgYXBwcm9hY2g6CgoxLiBTdGFydCB0aGUgVFVJIGluc2lkZSBhIGRldGFjaGVkIHRtdXggc2Vzc2lvbgoyLiBTZW5kIGtleXN0cm9rZXMgd2l0aCBgdG11eCBzZW5kLWtleXNgCjMuIFJlYWQgc2NyZWVuIGNvbnRlbnRzIHdpdGggYHRtdXggY2FwdHVyZS1wYW5lYAo0LiBDbGVhbiB1cCB3aXRoIGB0bXV4IGtpbGwtc2Vzc2lvbmAKClRoZSBza2lsbCdzIGBTS0lMTC5tZGAgc2hvdWxkIHByZXNlbnQgdGhpcyBhcyB0aGUgcHJpbWFyeSB3YXkgdG8gZHJpdmUKdGhlIGFwcC4gQSBzbWFsbCBgZHJpdmVyLnNoYCB0aGF0IHdyYXBzIHRoZSBsYXVuY2grYXR0YWNoIHNlcXVlbmNlIGNhbgpsaXZlIGluIHRoZSBza2lsbCBkaXJlY3RvcnksIGJ1dCBmb3IgbW9zdCBUVUlzIHRoZSByYXcgdG11eCBjb21tYW5kcyBpbgp0aGUgc2tpbGwgYm9keSBhcmUgZW5vdWdoLgoKIyMgRXhhbXBsZSBzbmlwcGV0Cgo+ICMjIFJ1biAoaW50ZXJhY3RpdmUsIGZvciBhZ2VudHMpCj4KPiBTdGFydCB0aGUgVFVJIGluc2lkZSB0bXV4Ogo+Cj4gYGBgYmFzaAo+IHRtdXggbmV3LXNlc3Npb24gLWQgLXMgYXBwIC14IDEyMCAteSA0MCAnLi9teWFwcCcKPiBgYGAKPgo+IFBvbGwgdW50aWwgdGhlIHJlYWR5IG1hcmtlciBhcHBlYXJzIChmYXN0ZXIgKyBtb3JlIHJlbGlhYmxlIHRoYW4gYSBmaXhlZCBzbGVlcCDigJQKPiByZXR1cm5zIHRoZSBpbnN0YW50IHRoZSBhcHAgaXMgdXAsIGZhaWxzIGxvdWRseSBpZiBpdCBpc24ndCk6Cj4KPiBgYGBiYXNoCj4gdGltZW91dCAxMCBiYXNoIC1jICd1bnRpbCB0bXV4IGNhcHR1cmUtcGFuZSAtdCBhcHAgLXAgfCBncmVwIC1xICJSZWFkeSI7IGRvIHNsZWVwIDAuMjsgZG9uZScKPiB0bXV4IGNhcHR1cmUtcGFuZSAtdCBhcHAgLXAKPiBgYGAKPgo+IFNlbmQgaW5wdXQgKHRoaXMgZXhhbXBsZSBuYXZpZ2F0ZXMgdG8gdGhlIFNldHRpbmdzIHNjcmVlbiBhbmQgdG9nZ2xlcwo+IGFuIG9wdGlvbik6Cj4KPiBgYGBiYXNoCj4gdG11eCBzZW5kLWtleXMgLXQgYXBwICdzJwo+IHRpbWVvdXQgNSBiYXNoIC1jICd1bnRpbCB0bXV4IGNhcHR1cmUtcGFuZSAtdCBhcHAgLXAgfCBncmVwIC1xICJTZXR0aW5ncyI7IGRvIHNsZWVwIDAuMjsgZG9uZScKPiB0bXV4IHNlbmQta2V5cyAtdCBhcHAgJ0Rvd24nICdEb3duJyAnU3BhY2UnICAjIG5hdmlnYXRlICsgdG9nZ2xlCj4gdGltZW91dCA1IGJhc2ggLWMgJ3VudGlsIHRtdXggY2FwdHVyZS1wYW5lIC10IGFwcCAtcCB8IGdyZXAgLXFGICJbeF0iOyBkbyBzbGVlcCAwLjI7IGRvbmUnCj4gdG11eCBjYXB0dXJlLXBhbmUgLXQgYXBwIC1wCj4gYGBgCj4KPiBJZiB5b3UgZmluZCB5b3Vyc2VsZiB3cml0aW5nIG1vcmUgdGhhbiBhIGNvdXBsZSBvZiB0aGVzZSBwb2xsIGxpbmVzLCBwdWxsCj4gdGhlbSBpbnRvIGEgYHdhaXRfZm9yKClgIGhlbHBlciBpbiBhIGBkcml2ZXIuc2hgIG5leHQgdG8gdGhlIHNraWxsLgo+Cj4gUXVpdDoKPgo+IGBgYGJhc2gKPiB0bXV4IHNlbmQta2V5cyAtdCBhcHAgJ3EnCj4gdG11eCBraWxsLXNlc3Npb24gLXQgYXBwIDI+L2Rldi9udWxsIHx8IHRydWUKPiBgYGAKPgo+ICMjIyBLZXkgcmVmZXJlbmNlCj4KPiB8IEtleSB8IEFjdGlvbiB8Cj4gfC0tLXwtLS18Cj4gfCBgamAgLyBga2Agb3IgYERvd25gIC8gYFVwYCB8IE5hdmlnYXRlIGxpc3QgfAo+IHwgYEVudGVyYCB8IFNlbGVjdCB8Cj4gfCBgc2AgfCBTZXR0aW5ncyB8Cj4gfCBgcWAgfCBRdWl0IHwKCiMjIERldGFpbHMgd29ydGggZG9jdW1lbnRpbmcKCi0gKipUZXJtaW5hbCBzaXplLioqIFNvbWUgVFVJcyBicmVhayBvciBoaWRlIGNvbnRlbnQgYXQgc21hbGwgd2lkdGhzLgogIFNwZWNpZnkgYSBrbm93bi1nb29kIHNpemUgaW4gdGhlIGB0bXV4IG5ldy1zZXNzaW9uIC14IC15YCBhcmdzLgotICoqU3RhcnR1cCB0aW1lLioqIFBvbGwgZm9yIGEgcmVhZHkgbWFya2VyIChgdW50aWwgdG11eCBjYXB0dXJlLXBhbmUgfCBncmVwIC1xIFhgKQogIHJhdGhlciB0aGFuIGEgZml4ZWQgYHNsZWVwIE5gIOKAlCByZXR1cm5zIHRoZSBpbnN0YW50IHRoZSBhcHAgaXMgdXAsIGFuZCBmYWlscwogIHVzZWZ1bGx5IHdoZW4gaXQgbmV2ZXIgZG9lcy4gU2F5IHdoYXQgc3RyaW5nIG1lYW5zIHJlYWR5LgotICoqS2V5YmluZGluZyByZWZlcmVuY2UuKiogQSB0YWJsZSBvZiB0aGUgbWFpbiBrZXlzLiBUaGlzIGlzIHRoZSAiQVBJIgogIG9mIGEgVFVJIOKAlCBhbiBhZ2VudCBuZWVkcyBpdCB0byBkcml2ZSB0aGUgYXBwLgotICoqRXhpdCBjbGVhbmx5LioqIFNob3cgdGhlIHF1aXQga2V5c3Ryb2tlICphbmQqIGB0bXV4IGtpbGwtc2Vzc2lvbmAgYXMKICBhIGZhbGxiYWNrLgotICoqQ29sb3IvdW5pY29kZSBxdWlya3MuKiogSWYgYGNhcHR1cmUtcGFuZWAgb3V0cHV0IGlzIGhhcmQgdG8gcmVhZCwKICBub3RlIGZsYWdzIHRoYXQgaGVscCAoYC1lYCBmb3IgZXNjYXBlIHNlcXVlbmNlcywgYC1KYCB0byBqb2luIHdyYXBwZWQKICBsaW5lcykuCgojIyBBbHNvIGRvY3VtZW50IHRoZSBkaXJlY3QgaW52b2NhdGlvbgoKRm9yIGEgaHVtYW4gcnVubmluZyB0aGUgYXBwIGludGVyYWN0aXZlbHksIHRtdXggaXMgb3ZlcmtpbGwuIEluY2x1ZGUKdGhlIG9uZS1saW5lciB0b286Cgo+ICMjIFJ1biAoZGlyZWN0LCBmb3IgaHVtYW5zKQo+Cj4gYGBgYmFzaAo+IC4vbXlhcHAKPiBgYGAKPgo+IFByZXNzIGBxYCB0byBxdWl0Lgo=")};var EC=`**Running means launching the actual app and interacting with it** —
670
+ not the test suite, not an \`import\` of an internal function and a
671
+ \`console.log\`. The app as a user (human or programmatic) would meet
672
+ it: the CLI at its command, the server at its socket, the GUI at its
673
+ window.
674
+
675
+ ## First: does a project skill already cover this?
676
+
677
+ A project skill that launches this app is the repo's verified path —
678
+ its author already cold-started from a Linux container and committed
679
+ what worked: the exact \`apt-get\` line, the env vars, the patches, the
680
+ driver. Use it instead of rediscovering.
681
+
682
+ \`\`\`bash
683
+ d=$PWD; while :; do
684
+ grep -Hm1 '^description:' "$d"/.claudin/skills/*/SKILL.md 2>/dev/null
685
+ [ -e "$d/.git" ] || [ "$d" = / ] && break
686
+ d=$(dirname "$d")
687
+ done
688
+ \`\`\`
689
+
690
+ - **One describes launching/driving this app** → read that SKILL.md
691
+ and follow it verbatim. Don't paraphrase; don't skip the patches.
692
+ - **Mega-repo, several plausible, no clear match** → ask the user
693
+ which unit to run.
694
+ - **Stale** (fails on mechanics unrelated to your task) → tell the
695
+ user.
696
+ - **Nothing about running** → fall back to the patterns below.
697
+
698
+ ## Otherwise: match the shape, use the pattern
699
+
700
+ Pick the row closest to your project. Each example walks through
701
+ launch + first interaction; ignore any trailing "write the skill"
702
+ section — you're using the recipe, not authoring one.
703
+
704
+ | Project type | Handle | Example |
705
+ |---|---|---|
706
+ | CLI tool | direct invocation, exit code, stdin/stdout | [examples/cli.md](examples/cli.md) |
707
+ | Web server / API | background launch + \`curl\` smoke | [examples/server.md](examples/server.md) |
708
+ | TUI / interactive terminal | tmux \`send-keys\` / \`capture-pane\` | [examples/tui.md](examples/tui.md) |
709
+ | Electron / desktop GUI | Playwright \`_electron\` REPL under xvfb | [examples/electron.md](examples/electron.md) |
710
+ | Browser-driven | dev server + \`chromium-cli\` script | [examples/playwright.md](examples/playwright.md) |
711
+ | Library / SDK | import-and-call smoke script at the package boundary | [examples/library.md](examples/library.md) |
712
+
713
+ If nothing fits, start from the closest match and adapt. For a web
714
+ app, [examples/playwright.md](examples/playwright.md) — drive it with
715
+ \`chromium-cli\`, no custom driver needed. For a desktop app,
716
+ [examples/electron.md](examples/electron.md) — it has the \`_electron\`
717
+ REPL driver skeleton and the tmux wrapping.
718
+
719
+ ## Drive it, don't just launch it
720
+
721
+ Launching with no interaction proves the entrypoint resolves. That's
722
+ not running the app — it's typechecking with extra steps. Drive it to
723
+ a point where a user would see something:
724
+
725
+ - CLI → type a representative command, check the exit code and output.
726
+ - Server → hit the route the diff touches with \`curl\`, read the body.
727
+ - TUI → \`send-keys\` a navigation, \`capture-pane\` the result.
728
+ - GUI → click the button, screenshot the window. **Look at the
729
+ screenshot.** A blank frame is a failure to launch.
730
+
731
+ If the fallback pattern didn't work out of the box — you had to
732
+ install packages, set env vars, patch config, or write a driver —
733
+ note that in your report so the work can be captured as a project
734
+ skill for next time. If it just worked, don't.`;function Ig(){v({name:"run",description:"Launch this project's app and drive it to confirm a change works in the real app (not just tests).",whenToUse:"When the user wants to run/start/screenshot the app, or confirm a change works end-to-end in the running app.",userInvocable:!0,disableModelInvocation:!1,files:Gg,async getPromptForCommand(){return[{type:"text",text:EC}]}})}GI();f();function pC(G){let I=G.trim(),B=I?`
735
+
736
+ ## Additional Focus
737
+
738
+ ${I}
739
+ `:"";return`# Simplify: Quality Cleanup of Changed Code
740
+
741
+ You are improving the quality of the changed code, not hunting for bugs. Review
742
+ it for reuse, simplification, efficiency, and altitude issues, then fix what you
743
+ find. Do not look for correctness bugs — that is what \`/code-review\` is for.
744
+
745
+ ## Phase 0 — Gather the diff
746
+
747
+ Run \`git diff @{upstream}...HEAD\` (or \`git diff main...HEAD\` / \`git diff HEAD~1\`
748
+ if there's no upstream) to get the unified diff under review. If there are
749
+ uncommitted changes, or the range diff is empty, also run \`git diff HEAD\` and
750
+ include the working-tree changes in scope — the review often runs before the
751
+ commit. If a PR number, branch name, or file path was passed as an argument,
752
+ review that target instead. Treat this diff as the review scope.
753
+
754
+ ## Phase 1 — Review (4 cleanup agents in parallel)
755
+
756
+ Use the ${GG} tool to launch **4 independent review agents**, all in
757
+ a single message so they run concurrently. Pass each agent the diff and one of
758
+ the four angles below. Each returns its findings with \`file\`, \`line\`, a
759
+ one-line \`summary\`, and the concrete cost (what is duplicated, wasted, or
760
+ harder to maintain).
761
+
762
+ ### Reuse
763
+
764
+ Flag new code that re-implements something the codebase
765
+ already has — Grep shared/utility modules and files adjacent to the change,
766
+ and name the existing helper to call instead.
767
+
768
+ ### Simplification
769
+
770
+ Flag unnecessary complexity the diff adds: redundant or derivable state,
771
+ copy-paste with slight variation, deep nesting, dead code left behind. Name
772
+ the simpler form that does the same job.
773
+
774
+ ### Efficiency
775
+
776
+ Flag wasted work the diff introduces: redundant computation or repeated I/O,
777
+ independent operations run sequentially, blocking work added to startup or
778
+ hot paths. Name the cheaper alternative.
779
+
780
+ ### Altitude
781
+
782
+ Check that each change is implemented at the right depth, not as a fragile
783
+ bandaid. Special cases layered on shared infrastructure are a sign the fix
784
+ isn't deep enough — prefer generalizing the underlying mechanism over adding
785
+ special cases.
786
+
787
+ ## Phase 2 — Apply the fixes
788
+
789
+ Wait for all four agents to complete, dedup findings that point at the same
790
+ line or mechanism, and fix each remaining one directly. Skip any finding whose
791
+ fix would change intended behavior, require changes well outside the reviewed
792
+ diff, or that you judge to be a false positive — note the skip rather than
793
+ arguing with it. Finish with a brief summary of what was fixed and what was
794
+ skipped (or confirm the code was already clean).${B}`}function Bg(){v({name:"simplify",description:"Clean up changed code for reuse, simplification, efficiency, and altitude, then apply the fixes. Quality only — use /code-review for correctness bugs.",whenToUse:"When the user wants the changed/recent code refactored for clarity and reuse (not bug-hunting).",argumentHint:"[focus]",userInvocable:!0,disableModelInvocation:!1,allowedTools:["Read","Grep","Glob","Edit","Bash(git diff:*)","Bash(git status:*)","Bash(git log:*)"],async getPromptForCommand(G){return[{type:"text",text:pC(G)}]}})}SB();_C();MB();f();function aC(){let G=gg(Zg(),{io:"input"});return CG(G,null,2)}var fC=`## Settings File Locations
795
+
796
+ Choose the appropriate file based on scope:
797
+
798
+ | File | Scope | Git | Use For |
799
+ |------|-------|-----|---------|
800
+ | \`~/.claudin/settings.json\` | Global | N/A | Personal preferences for all projects |
801
+ | \`.claudin/settings.json\` | Project | Commit | Team-wide hooks, permissions, plugins |
802
+ | \`.claudin/settings.local.json\` | Project | Gitignore | Personal overrides for this project |
803
+
804
+ Settings load in order: user → project → local (later overrides earlier).
805
+
806
+ ## Settings Schema Reference
807
+
808
+ ### Permissions
809
+ \`\`\`json
810
+ {
811
+ "permissions": {
812
+ "allow": ["Bash(npm:*)", "Edit(.claudin)", "Read"],
813
+ "deny": ["Bash(rm -rf:*)"],
814
+ "ask": ["Write(/etc/*)"],
815
+ "defaultMode": "default" | "plan" | "acceptEdits" | "dontAsk",
816
+ "additionalDirectories": ["/extra/dir"]
817
+ }
818
+ }
819
+ \`\`\`
820
+
821
+ **Permission Rule Syntax:**
822
+ - Exact match: \`"Bash(npm run test)"\`
823
+ - Prefix wildcard: \`"Bash(git:*)"\` - matches \`git status\`, \`git commit\`, etc.
824
+ - Tool only: \`"Read"\` - allows all Read operations
825
+
826
+ ### Environment Variables
827
+ \`\`\`json
828
+ {
829
+ "env": {
830
+ "DEBUG": "true",
831
+ "MY_API_KEY": "value"
832
+ }
833
+ }
834
+ \`\`\`
835
+
836
+ ### Model & Agent
837
+ \`\`\`json
838
+ {
839
+ "model": "sonnet", // or "opus", "haiku", full model ID
840
+ "agent": "agent-name",
841
+ "alwaysThinkingEnabled": true
842
+ }
843
+ \`\`\`
844
+
845
+ ### Attribution (Commits & PRs)
846
+ \`\`\`json
847
+ {
848
+ "attribution": {
849
+ "commit": "Custom commit trailer text",
850
+ "pr": "Custom PR description text"
851
+ }
852
+ }
853
+ \`\`\`
854
+ Set \`commit\` or \`pr\` to empty string \`""\` to hide that attribution.
855
+
856
+ ### MCP Server Management
857
+ \`\`\`json
858
+ {
859
+ "enableAllProjectMcpServers": true,
860
+ "enabledMcpjsonServers": ["server1", "server2"],
861
+ "disabledMcpjsonServers": ["blocked-server"]
862
+ }
863
+ \`\`\`
864
+
865
+ ### Plugins
866
+ \`\`\`json
867
+ {
868
+ "enabledPlugins": {
869
+ "formatter@anthropic-tools": true
870
+ }
871
+ }
872
+ \`\`\`
873
+ Plugin syntax: \`plugin-name@source\` where source is \`claude-code-marketplace\`, \`claude-plugins-official\`, or \`builtin\`.
874
+
875
+ ### Other Settings
876
+ - \`language\`: Preferred response language (e.g., "japanese")
877
+ - \`cleanupPeriodDays\`: Days to keep transcripts (default: 30; 0 disables persistence entirely)
878
+ - \`respectGitignore\`: Whether to respect .gitignore (default: true)
879
+ - \`spinnerTipsEnabled\`: Show tips in spinner
880
+ - \`spinnerVerbs\`: Customize spinner verbs (\`{ "mode": "append" | "replace", "verbs": [...] }\`)
881
+ - \`spinnerTipsOverride\`: Override spinner tips (\`{ "excludeDefault": true, "tips": ["Custom tip"] }\`)
882
+ - \`syntaxHighlightingDisabled\`: Disable diff highlighting
883
+ `,bg=`## Hooks Configuration
884
+
885
+ Hooks run commands at specific points in Claudin's lifecycle.
886
+
887
+ ### Hook Structure
888
+ \`\`\`json
889
+ {
890
+ "hooks": {
891
+ "EVENT_NAME": [
892
+ {
893
+ "matcher": "ToolName|OtherTool",
894
+ "hooks": [
895
+ {
896
+ "type": "command",
897
+ "command": "your-command-here",
898
+ "timeout": 60,
899
+ "statusMessage": "Running..."
900
+ }
901
+ ]
902
+ }
903
+ ]
904
+ }
905
+ }
906
+ \`\`\`
907
+
908
+ ### Hook Events
909
+
910
+ | Event | Matcher | Purpose |
911
+ |-------|---------|---------|
912
+ | PermissionRequest | Tool name | Run before permission prompt |
913
+ | PreToolUse | Tool name | Run before tool, can block |
914
+ | PostToolUse | Tool name | Run after successful tool |
915
+ | PostToolUseFailure | Tool name | Run after tool fails |
916
+ | Notification | Notification type | Run on notifications |
917
+ | Stop | - | Run when Claude stops (including clear, resume, compact) |
918
+ | PreCompact | "manual"/"auto" | Before compaction |
919
+ | PostCompact | "manual"/"auto" | After compaction (receives summary) |
920
+ | UserPromptSubmit | - | When user submits |
921
+ | SessionStart | - | When session starts |
922
+
923
+ **Common tool matchers:** \`Bash\`, \`Write\`, \`Edit\`, \`Read\`, \`Glob\`, \`Grep\`
924
+
925
+ ### Hook Types
926
+
927
+ **1. Command Hook** - Runs a shell command:
928
+ \`\`\`json
929
+ { "type": "command", "command": "prettier --write $FILE", "timeout": 30 }
930
+ \`\`\`
931
+
932
+ **2. Prompt Hook** - Evaluates a condition with LLM:
933
+ \`\`\`json
934
+ { "type": "prompt", "prompt": "Is this safe? $ARGUMENTS" }
935
+ \`\`\`
936
+ Only available for tool events: PreToolUse, PostToolUse, PermissionRequest.
937
+
938
+ **3. Agent Hook** - Runs an agent with tools:
939
+ \`\`\`json
940
+ { "type": "agent", "prompt": "Verify tests pass: $ARGUMENTS" }
941
+ \`\`\`
942
+ Only available for tool events: PreToolUse, PostToolUse, PermissionRequest.
943
+
944
+ ### Hook Input (stdin JSON)
945
+ \`\`\`json
946
+ {
947
+ "session_id": "abc123",
948
+ "tool_name": "Write",
949
+ "tool_input": { "file_path": "/path/to/file.txt", "content": "..." },
950
+ "tool_response": { "success": true } // PostToolUse only
951
+ }
952
+ \`\`\`
953
+
954
+ ### Hook JSON Output
955
+
956
+ Hooks can return JSON to control behavior:
957
+
958
+ \`\`\`json
959
+ {
960
+ "systemMessage": "Warning shown to user in UI",
961
+ "continue": false,
962
+ "stopReason": "Message shown when blocking",
963
+ "suppressOutput": false,
964
+ "decision": "block",
965
+ "reason": "Explanation for decision",
966
+ "hookSpecificOutput": {
967
+ "hookEventName": "PostToolUse",
968
+ "additionalContext": "Context injected back to model"
969
+ }
970
+ }
971
+ \`\`\`
972
+
973
+ **Fields:**
974
+ - \`systemMessage\` - Display a message to the user (all hooks)
975
+ - \`continue\` - Set to \`false\` to block/stop (default: true)
976
+ - \`stopReason\` - Message shown when \`continue\` is false
977
+ - \`suppressOutput\` - Hide stdout from transcript (default: false)
978
+ - \`decision\` - "block" for PostToolUse/Stop/UserPromptSubmit hooks (deprecated for PreToolUse, use hookSpecificOutput.permissionDecision instead)
979
+ - \`reason\` - Explanation for decision
980
+ - \`hookSpecificOutput\` - Event-specific output (must include \`hookEventName\`):
981
+ - \`additionalContext\` - Text injected into model context
982
+ - \`permissionDecision\` - "allow", "deny", or "ask" (PreToolUse only)
983
+ - \`permissionDecisionReason\` - Reason for the permission decision (PreToolUse only)
984
+ - \`updatedInput\` - Modified tool input (PreToolUse only)
985
+
986
+ ### Common Patterns
987
+
988
+ **Auto-format after writes:**
989
+ \`\`\`json
990
+ {
991
+ "hooks": {
992
+ "PostToolUse": [{
993
+ "matcher": "Write|Edit",
994
+ "hooks": [{
995
+ "type": "command",
996
+ "command": "jq -r '.tool_response.filePath // .tool_input.file_path' | { read -r f; prettier --write \\"$f\\"; } 2>/dev/null || true"
997
+ }]
998
+ }]
999
+ }
1000
+ }
1001
+ \`\`\`
1002
+
1003
+ **Log all bash commands:**
1004
+ \`\`\`json
1005
+ {
1006
+ "hooks": {
1007
+ "PreToolUse": [{
1008
+ "matcher": "Bash",
1009
+ "hooks": [{
1010
+ "type": "command",
1011
+ "command": "jq -r '.tool_input.command' >> ~/.claudin/bash-log.txt"
1012
+ }]
1013
+ }]
1014
+ }
1015
+ }
1016
+ \`\`\`
1017
+
1018
+ **Stop hook that displays message to user:**
1019
+
1020
+ Command must output JSON with \`systemMessage\` field:
1021
+ \`\`\`bash
1022
+ # Example command that outputs: {"systemMessage": "Session complete!"}
1023
+ echo '{"systemMessage": "Session complete!"}'
1024
+ \`\`\`
1025
+
1026
+ **Run tests after code changes:**
1027
+ \`\`\`json
1028
+ {
1029
+ "hooks": {
1030
+ "PostToolUse": [{
1031
+ "matcher": "Write|Edit",
1032
+ "hooks": [{
1033
+ "type": "command",
1034
+ "command": "jq -r '.tool_input.file_path // .tool_response.filePath' | grep -E '\\\\.(ts|js)$' && npm test || true"
1035
+ }]
1036
+ }]
1037
+ }
1038
+ }
1039
+ \`\`\`
1040
+ `,Cg=`## Constructing a Hook (with verification)
1041
+
1042
+ Given an event, matcher, target file, and desired behavior, follow this flow. Each step catches a different failure class — a hook that silently does nothing is worse than no hook.
1043
+
1044
+ 1. **Dedup check.** Read the target file. If a hook already exists on the same event+matcher, show the existing command and ask: keep it, replace it, or add alongside.
1045
+
1046
+ 2. **Construct the command for THIS project — don't assume.** The hook receives JSON on stdin. Build a command that:
1047
+ - Extracts any needed payload safely — use \`jq -r\` into a quoted variable or \`{ read -r f; ... "$f"; }\`, NOT unquoted \`| xargs\` (splits on spaces)
1048
+ - Invokes the underlying tool the way this project runs it (npx/bunx/yarn/pnpm? Makefile target? globally-installed?)
1049
+ - Skips inputs the tool doesn't handle (formatters often have \`--ignore-unknown\`; if not, guard by extension)
1050
+ - Stays RAW for now — no \`|| true\`, no stderr suppression. You'll wrap it after the pipe-test passes.
1051
+
1052
+ 3. **Pipe-test the raw command.** Synthesize the stdin payload the hook will receive and pipe it directly:
1053
+ - \`Pre|PostToolUse\` on \`Write|Edit\`: \`echo '{"tool_name":"Edit","tool_input":{"file_path":"<a real file from this repo>"}}' | <cmd>\`
1054
+ - \`Pre|PostToolUse\` on \`Bash\`: \`echo '{"tool_name":"Bash","tool_input":{"command":"ls"}}' | <cmd>\`
1055
+ - \`Stop\`/\`UserPromptSubmit\`/\`SessionStart\`: most commands don't read stdin, so \`echo '{}' | <cmd>\` suffices
1056
+
1057
+ Check exit code AND side effect (file actually formatted, test actually ran). If it fails you get a real error — fix (wrong package manager? tool not installed? jq path wrong?) and retest. Once it works, wrap with \`2>/dev/null || true\` (unless the user wants a blocking check).
1058
+
1059
+ 4. **Write the JSON.** Merge into the target file (schema shape in the "Hook Structure" section above). If this creates \`.claudin/settings.local.json\` for the first time, add it to .gitignore — the Write tool doesn't auto-gitignore it.
1060
+
1061
+ 5. **Validate syntax + schema in one shot:**
1062
+
1063
+ \`jq -e '.hooks.<event>[] | select(.matcher == "<matcher>") | .hooks[] | select(.type == "command") | .command' <target-file>\`
1064
+
1065
+ Exit 0 + prints your command = correct. Exit 4 = matcher doesn't match. Exit 5 = malformed JSON or wrong nesting. A broken settings.json silently disables ALL settings from that file — fix any pre-existing malformation too.
1066
+
1067
+ 6. **Prove the hook fires** — only for \`Pre|PostToolUse\` on a matcher you can trigger in-turn (\`Write|Edit\` via Edit, \`Bash\` via Bash). \`Stop\`/\`UserPromptSubmit\`/\`SessionStart\` fire outside this turn — skip to step 7.
1068
+
1069
+ For a **formatter** on \`PostToolUse\`/\`Write|Edit\`: introduce a detectable violation via Edit (two consecutive blank lines, bad indentation, missing semicolon — something this formatter corrects; NOT trailing whitespace, Edit strips that before writing), re-read, confirm the hook **fixed** it. For **anything else**: temporarily prefix the command in settings.json with \`echo "$(date) hook fired" >> /tmp/claude-hook-check.txt; \`, trigger the matching tool (Edit for \`Write|Edit\`, a harmless \`true\` for \`Bash\`), read the sentinel file.
1070
+
1071
+ **Always clean up** — revert the violation, strip the sentinel prefix — whether the proof passed or failed.
1072
+
1073
+ **If proof fails but pipe-test passed and \`jq -e\` passed**: the settings watcher isn't watching \`.claudin/\` — it only watches directories that had a settings file when this session started. The hook is written correctly. Tell the user to open \`/hooks\` once (reloads config) or restart — you can't do this yourself; \`/hooks\` is a user UI menu and opening it ends this turn.
1074
+
1075
+ 7. **Handoff.** Tell the user the hook is live (or needs \`/hooks\`/restart per the watcher caveat). Point them at \`/hooks\` to review, edit, or disable it later. The UI only shows "Ran N hooks" if a hook errors or is slow — silent success is invisible by design.
1076
+ `,iC=`# Update Config Skill
1077
+
1078
+ Modify Claudin configuration by updating settings.json files.
1079
+
1080
+ ## When Hooks Are Required (Not Memory)
1081
+
1082
+ If the user wants something to happen automatically in response to an EVENT, they need a **hook** configured in settings.json. Memory/preferences cannot trigger automated actions.
1083
+
1084
+ **These require hooks:**
1085
+ - "Before compacting, ask me what to preserve" → PreCompact hook
1086
+ - "After writing files, run prettier" → PostToolUse hook with Write|Edit matcher
1087
+ - "When I run bash commands, log them" → PreToolUse hook with Bash matcher
1088
+ - "Always run tests after code changes" → PostToolUse hook
1089
+
1090
+ **Hook events:** PreToolUse, PostToolUse, PreCompact, PostCompact, Stop, Notification, SessionStart
1091
+
1092
+ ## CRITICAL: Read Before Write
1093
+
1094
+ **Always read the existing settings file before making changes.** Merge new settings with existing ones - never replace the entire file.
1095
+
1096
+ ## CRITICAL: Use AskUserQuestion for Ambiguity
1097
+
1098
+ When the user's request is ambiguous, use AskUserQuestion to clarify:
1099
+ - Which settings file to modify (user/project/local)
1100
+ - Whether to add to existing arrays or replace them
1101
+ - Specific values when multiple options exist
1102
+
1103
+ ## Decision: Config Tool vs Direct Edit
1104
+
1105
+ **Use the Config tool** for these simple settings:
1106
+ - \`theme\`, \`editorMode\`, \`verbose\`, \`model\`
1107
+ - \`language\`, \`alwaysThinkingEnabled\`
1108
+ - \`permissions.defaultMode\`
1109
+
1110
+ **Edit settings.json directly** for:
1111
+ - Hooks (PreToolUse, PostToolUse, etc.)
1112
+ - Complex permission rules (allow/deny arrays)
1113
+ - Environment variables
1114
+ - MCP server configuration
1115
+ - Plugin configuration
1116
+
1117
+ ## Workflow
1118
+
1119
+ 1. **Clarify intent** - Ask if the request is ambiguous
1120
+ 2. **Read existing file** - Use Read tool on the target settings file
1121
+ 3. **Merge carefully** - Preserve existing settings, especially arrays
1122
+ 4. **Edit file** - Use Edit tool (if file doesn't exist, ask user to create it first)
1123
+ 5. **Confirm** - Tell user what was changed
1124
+
1125
+ ## Merging Arrays (Important!)
1126
+
1127
+ When adding to permission arrays or hook arrays, **merge with existing**, don't replace:
1128
+
1129
+ **WRONG** (replaces existing permissions):
1130
+ \`\`\`json
1131
+ { "permissions": { "allow": ["Bash(npm:*)"] } }
1132
+ \`\`\`
1133
+
1134
+ **RIGHT** (preserves existing + adds new):
1135
+ \`\`\`json
1136
+ {
1137
+ "permissions": {
1138
+ "allow": [
1139
+ "Bash(git:*)", // existing
1140
+ "Edit(.claudin)", // existing
1141
+ "Bash(npm:*)" // new
1142
+ ]
1143
+ }
1144
+ }
1145
+ \`\`\`
1146
+
1147
+ ${fC}
1148
+
1149
+ ${bg}
1150
+
1151
+ ${Cg}
1152
+
1153
+ ## Example Workflows
1154
+
1155
+ ### Adding a Hook
1156
+
1157
+ User: "Format my code after Claude writes it"
1158
+
1159
+ 1. **Clarify**: Which formatter? (prettier, gofmt, etc.)
1160
+ 2. **Read**: \`.claudin/settings.json\` (or create if missing)
1161
+ 3. **Merge**: Add to existing hooks, don't replace
1162
+ 4. **Result**:
1163
+ \`\`\`json
1164
+ {
1165
+ "hooks": {
1166
+ "PostToolUse": [{
1167
+ "matcher": "Write|Edit",
1168
+ "hooks": [{
1169
+ "type": "command",
1170
+ "command": "jq -r '.tool_response.filePath // .tool_input.file_path' | { read -r f; prettier --write \\"$f\\"; } 2>/dev/null || true"
1171
+ }]
1172
+ }]
1173
+ }
1174
+ }
1175
+ \`\`\`
1176
+
1177
+ ### Adding Permissions
1178
+
1179
+ User: "Allow npm commands without prompting"
1180
+
1181
+ 1. **Read**: Existing permissions
1182
+ 2. **Merge**: Add \`Bash(npm:*)\` to allow array
1183
+ 3. **Result**: Combined with existing allows
1184
+
1185
+ ### Environment Variables
1186
+
1187
+ User: "Set DEBUG=true"
1188
+
1189
+ 1. **Decide**: User settings (global) or project settings?
1190
+ 2. **Read**: Target file
1191
+ 3. **Merge**: Add to env object
1192
+ \`\`\`json
1193
+ { "env": { "DEBUG": "true" } }
1194
+ \`\`\`
1195
+
1196
+ ## Common Mistakes to Avoid
1197
+
1198
+ 1. **Replacing instead of merging** - Always preserve existing settings
1199
+ 2. **Wrong file** - Ask user if scope is unclear
1200
+ 3. **Invalid JSON** - Validate syntax after changes
1201
+ 4. **Forgetting to read first** - Always read before write
1202
+
1203
+ ## Troubleshooting Hooks
1204
+
1205
+ If a hook isn't running:
1206
+ 1. **Check the settings file** - Read ~/.claudin/settings.json or .claudin/settings.json
1207
+ 2. **Verify JSON syntax** - Invalid JSON silently fails
1208
+ 3. **Check the matcher** - Does it match the tool name? (e.g., "Bash", "Write", "Edit")
1209
+ 4. **Check hook type** - Is it "command", "prompt", or "agent"?
1210
+ 5. **Test the command** - Run the hook command manually to see if it works
1211
+ 6. **Use --debug** - Run \`claude --debug\` to see hook execution logs
1212
+ `;function Yg(){v({name:"update-config",description:'Use this skill to configure the Claudin harness via settings.json. Automated behaviors ("from now on when X", "each time X", "whenever X", "before/after X") require hooks configured in settings.json - the harness executes these, not Claude, so memory/preferences cannot fulfill them. Also use for: permissions ("allow X", "add permission", "move permission to"), env vars ("set X=Y"), hook troubleshooting, or any changes to settings.json/settings.local.json files. Examples: "allow npm commands", "add bq permission to global settings", "move permission to user settings", "set DEBUG=true", "when claude stops show X". For simple settings like theme/model, use Config tool.',allowedTools:["Read"],userInvocable:!0,async getPromptForCommand(G){if(G.startsWith("[hooks-only]")){let g=G.slice(12).trim(),Z=bg+`
1213
+
1214
+ `+Cg;if(g)Z+=`
1215
+
1216
+ ## Task
1217
+
1218
+ ${g}`;return[{type:"text",text:Z}]}let I=aC(),B=iC;if(B+=`
1219
+
1220
+ ## Full Settings JSON Schema
1221
+
1222
+ \`\`\`json
1223
+ ${I}
1224
+ \`\`\``,G)B+=`
1225
+
1226
+ ## User Request
1227
+
1228
+ ${G}`;return[{type:"text",text:B}]}})}f();var oC=`**Verification is runtime observation.** You build the app, run it,
1229
+ drive it to where the changed code executes, and capture what you
1230
+ see. That capture is your evidence. Nothing else is.
1231
+
1232
+ **Don't run tests. Don't typecheck.** Running them here proves you
1233
+ can run CI — not that the change works. Not as a warm-up,
1234
+ not "just to be sure," not as a regression sweep after. The time
1235
+ goes to running the app instead.
1236
+
1237
+ **Don't import-and-call.** \`import { foo } from './src/...'\` then
1238
+ \`console.log(foo(x))\` is a unit test you wrote. The function did what
1239
+ the function does — you knew that from reading it. The app never ran.
1240
+ Whatever calls \`foo\` in the real codebase ends at a CLI, a socket, or
1241
+ a window. Go there.
1242
+
1243
+ ## Find the change
1244
+
1245
+ The scope is what you're verifying — usually a diff, sometimes just
1246
+ "does X work." In a git repo, establish the full range (a branch may
1247
+ be many commits, or the change may still be uncommitted):
1248
+
1249
+ \`\`\`bash
1250
+ git log --oneline @{u}.. # count commits (if upstream set)
1251
+ git diff @{u}.. --stat # full range, not HEAD~1
1252
+ git diff origin/HEAD... --stat # no upstream: committed vs base
1253
+ git diff HEAD --stat # uncommitted: working tree vs HEAD
1254
+ gh pr diff # if in a PR context
1255
+ \`\`\`
1256
+
1257
+ State the commit count. Large diff truncating? Redirect to a file
1258
+ then Read it. Repo but no diff from any of these → say so, stop.
1259
+ **No repo → the scope is whatever the user named; ask if they
1260
+ didn't.**
1261
+
1262
+ **The diff is ground truth. Any description is a claim about it.**
1263
+ Read both. If they disagree, that's a finding.
1264
+
1265
+ ## Surface
1266
+
1267
+ The surface is where a user — human or programmatic — meets the
1268
+ change. That's where you observe.
1269
+
1270
+ | Change reaches | Surface | You |
1271
+ |---|---|---|
1272
+ | CLI / TUI | terminal | type the command, capture the pane — [example](examples/cli.md) |
1273
+ | Server / API | socket | send the request, capture the response — [example](examples/server.md) |
1274
+ | GUI | pixels | drive it under xvfb/Playwright, screenshot |
1275
+ | Library | package boundary | sample code through the public export — \`import pkg\`, not \`import ./src/...\` |
1276
+ | Prompt / agent config | the agent | run the agent, capture its behavior |
1277
+ | CI workflow | Actions | dispatch it, read the run |
1278
+
1279
+ **Internal function? Not a surface.** Something in the repo calls it
1280
+ and that caller ends at one of the rows above. Follow it there. A
1281
+ bash security gate's surface isn't the function's return value — it's
1282
+ the CLI prompting or auto-allowing when you type the command.
1283
+
1284
+ **No runtime surface at all** — docs-only, type declarations with no
1285
+ emit, build config that produces no behavioral diff — report
1286
+ **SKIP — no runtime surface: (reason).** Don't run tests to fill
1287
+ the space.
1288
+
1289
+ **Tests in the diff are the author's evidence, not a surface.** CI
1290
+ runs them. You'd be re-running CI. Tests-only PR → SKIP, one line.
1291
+ Mixed src+tests → verify the src, ignore the test files. Reading a
1292
+ test to learn what to check is fine — it's a spec. But then go run
1293
+ the app. Checking that assertions match source is code review.
1294
+
1295
+ ## Get a handle
1296
+
1297
+ **Check \`.claudin/skills/\` first — even if you already know how to
1298
+ build and run.** A matching \`verifier-*\` skill is the repo's
1299
+ evidence-capture protocol: it wraps the session so a reviewer can
1300
+ replay what you saw (recording, screenshots). Drive the surface
1301
+ without it and you get a verdict with no replay.
1302
+
1303
+ \`\`\`bash
1304
+ ls .claudin/skills/
1305
+ \`\`\`
1306
+
1307
+ - **\`verifier-*\` matching your surface** (CLI verifier for a CLI
1308
+ change, etc.) → invoke it with the Skill tool and follow its
1309
+ setup. Mismatched surface → skip that one, try the next. Stale
1310
+ verifier (fails on mechanics unrelated to the change) → ask the
1311
+ user whether to patch it; don't FAIL the change for verifier rot.
1312
+ - **\`run-*\` but no matching verifier** → use its build/launch
1313
+ primitives as your handle.
1314
+ - **Neither** → cold start from README/package.json/Makefile. Timebox
1315
+ ~15min. Stuck → BLOCKED with exactly where it stopped. Got through →
1316
+ note the working build/launch recipe so it can become a
1317
+ \`verifier-*\` skill.
1318
+
1319
+ ## Drive it
1320
+
1321
+ Smallest path that makes the changed code execute:
1322
+
1323
+ - Changed a flag? Run with it.
1324
+ - Changed a handler? Hit that route.
1325
+ - Changed error handling? Trigger the error.
1326
+ - Changed an internal function? Find the CLI command / request / render
1327
+ that reaches it. Run that.
1328
+
1329
+ **Read your plan back before running.** If every step is build /
1330
+ typecheck / run test file — you've planned a CI rerun, not a
1331
+ verification. Find a step that reaches the surface or report BLOCKED.
1332
+
1333
+ **The verdict is table stakes. Your observations are the signal.**
1334
+ A PASS with three sharp "hey, I noticed…" lines is worth more than a
1335
+ bare PASS. You're the only reviewer who actually *ran* the thing —
1336
+ anything that made you pause, work around, or go "huh" is information
1337
+ the author doesn't have. Don't filter for "is this a bug." Filter for
1338
+ "would I mention this if they were sitting next to me."
1339
+
1340
+ **End-to-end, through the real interface.** Pieces passing in
1341
+ isolation doesn't mean the flow works — seams are where bugs hide.
1342
+ If users click buttons, test by clicking buttons, not by curling the
1343
+ API underneath.
1344
+
1345
+ **Destructive path?** If the change touches code that deletes,
1346
+ publishes, sends, or writes outside the workspace and there's no
1347
+ dry-run or safe target, don't drive it live. Verify what you can
1348
+ around it and say which path you didn't exercise and why.
1349
+
1350
+ ## Push on it
1351
+
1352
+ The claim checked out — that's the first half. Confirming is step
1353
+ one, not the job. The description is what the author intended;
1354
+ your value is what they didn't.
1355
+
1356
+ You know exactly what changed. Probe *around* it, at the same
1357
+ surface you just drove:
1358
+
1359
+ - **New flag / option** → empty value, passed twice, combined with a
1360
+ conflicting flag, typo'd (does the error name it?)
1361
+ - **New handler / route** → wrong method, malformed body, missing
1362
+ required field, oversized payload
1363
+ - **Changed error path** → the adjacent errors it didn't touch —
1364
+ did the refactor catch them too, or only the one in the diff?
1365
+ - **Interactive / TUI** → Ctrl-C mid-op, resize the pane, paste
1366
+ garbage, rapid-fire the key, Esc at the wrong moment
1367
+ - **State / persistence** → do it twice, do it with stale state
1368
+ underneath, do it in two sessions at once
1369
+ - **Wander** → what's adjacent? What looked off while you were
1370
+ confirming? Go back to it.
1371
+
1372
+ These aren't a checklist — pick the ones the change points at. Stop
1373
+ when you've covered the obvious adjacents or hit something worth a
1374
+ ⚠️. A probe that finds nothing is still a step: "\uD83D\uDD0D passed \`--from ''\`
1375
+ → clean \`error: --from requires a value\`, exit 2." That the author
1376
+ didn't test it is exactly why it's worth knowing it holds.
1377
+
1378
+ Still not a test run. You're at the surface, typing what a user
1379
+ would type wrong.
1380
+
1381
+ ## Capture
1382
+
1383
+ Stdout, response bodies, screenshots, pane dumps. Captured output is
1384
+ evidence; your memory isn't. Something unexpected? Don't route around
1385
+ it — capture, note, decide if it's the change or the environment.
1386
+ Unrelated breakage is a finding, not noise.
1387
+
1388
+ Shared process state (tmux, ports, lockfiles) — isolate. \`tmux -L
1389
+ name\`, bind \`:0\`, \`mktemp -d\`. You share a namespace with your host.
1390
+
1391
+ ## Report
1392
+
1393
+ Inline, final message:
1394
+
1395
+ \`\`\`
1396
+ ## Verification: <one-line what changed>
1397
+
1398
+ **Verdict:** PASS | FAIL | BLOCKED | SKIP
1399
+
1400
+ **Claim:** <what it's supposed to do — your read of the diff and/or
1401
+ the stated claim; note any mismatch>
1402
+
1403
+ **Method:** <how you got a handle — which verifier/run skill, or
1404
+ cold start; what you launched>
1405
+
1406
+ ### Steps
1407
+
1408
+ Each step is one thing you did to the **running app** and what it
1409
+ showed. Build/install/checkout are setup, not steps. Test runs and
1410
+ typecheck don't belong here — they're CI's output.
1411
+
1412
+ 1. ✅/❌/⚠️/\uD83D\uDD0D <what you did to the running app> → <what you observed>
1413
+ <evidence: the app's own output — pane capture, response body,
1414
+ screenshot path>
1415
+
1416
+ \uD83D\uDD0D marks a probe — a step off the claim's happy path, trying to
1417
+ break it. At least one. A Steps list that's all ✅ and no \uD83D\uDD0D is a
1418
+ happy-path replay: still PASS, but you stopped at the first half.
1419
+
1420
+ **Screenshot / sample:** <the one frame a reviewer looks at to see
1421
+ the feature — image path for GUI/TUI, code block for library/API;
1422
+ omit for build/types-only>
1423
+
1424
+ ### Findings
1425
+ <Things you noticed. Not just bugs — friction, surprises, anything
1426
+ a first-time user would trip on. "Took three tries to find the right
1427
+ flag." "Error message on typo was unhelpful." "Default seems odd for
1428
+ the common case." "Works, but slower than I expected." Lower the bar:
1429
+ if it made you pause, it goes here. But the pause has to be yours,
1430
+ from running the app — not from reading the PR page. A red CI check,
1431
+ a review comment, someone else's bot: visible to anyone already, and
1432
+ you relaying it isn't an observation. Claim/diff mismatch, pre-existing
1433
+ breakage, and env notes also belong.
1434
+
1435
+ Each probe gets a line here even when it held — "\uD83D\uDD0D empty \`--from\`
1436
+ → clean error" tells the author what *was* covered, which they
1437
+ can't see from a bare PASS.
1438
+
1439
+ Lead with ⚠️ for lines worth interrupting the reviewer for; plain
1440
+ bullets are context. Empty is fine if nothing stuck out — but nothing
1441
+ sticking out is itself rare.>
1442
+ \`\`\`
1443
+
1444
+ **Verdicts:**
1445
+ - **PASS** — you ran the app, the change did what it should at its
1446
+ surface. Not: tests pass, builds clean, code looks right.
1447
+ - **FAIL** — you ran it and it doesn't. Or it breaks something else.
1448
+ Or claim and diff disagree materially.
1449
+ - **BLOCKED** — couldn't reach a state where the change is observable.
1450
+ Build broke, env missing a dep, handle wouldn't come up. Not a
1451
+ verdict on the change. Say exactly where it stopped.
1452
+ - **SKIP** — no runtime surface exists. Docs-only, types-only,
1453
+ tests-only. Nothing went wrong; there's just nothing here to run.
1454
+ One line why.
1455
+
1456
+ No partial pass. "3 of 4 passed" is FAIL until 4 passes or is
1457
+ explained away.
1458
+
1459
+ **When in doubt, FAIL.** False PASS ships broken code; false FAIL
1460
+ costs one more human look. Ambiguous output is FAIL with the raw
1461
+ capture attached — don't interpret.`;function Wg(){v({name:"verify",description:"Verify a change works by building the app, running it, driving it to the changed code, and capturing what you observe.",whenToUse:"When the user wants to confirm a fix/feature actually works at runtime (not just that tests pass).",userInvocable:!0,disableModelInvocation:!1,files:eB,async getPromptForCommand(){return[{type:"text",text:oC}]}})}function Xg(){Yg(),OB(),UB(),KB(),WB(),Bg(),Wg(),Ig(),kB(),QB(),tB(),oB()}async function GY(G){let{ctx:I,permissionMode:B,allowDangerouslySkipPermissions:g,sessionId:Z}=G;L("[STARTUP] Running setup()...");let b=Date.now(),{setup:C}=await import("./setup-1.1.31-b6kjgetf.mjs"),Y=lI();if(process.env.CLAUDE_CODE_ENTRYPOINT!=="local-agent")IB(),Xg();let W=C(Y,B,g,I.worktreeEnabled,I.worktreeName,I.tmuxEnabled,Z?VG(Z):void 0,I.worktreePRNumber),d=I.worktreeEnabled?null:dI(Y),R=I.worktreeEnabled?null:cI(Y);return d?.catch(()=>{}),R?.catch(()=>{}),await W,L(`[STARTUP] setup() completed in ${Date.now()-b}ms`),{preSetupCwd:Y,commandsPromise:d,agentDefsPromise:R}}async function IY(G){let{options:I,ctx:B,fallbackModel:g,preSetupCwd:Z,commandsPromise:b,agentDefsPromise:C}=G,Y=!!I.replayUserMessages;if(XG())Rg(),mg(),Lg(),cg();let W=I.name?.trim();if(W)Ug(W);let d=I.model==="default"?SG():I.model,R=g==="default"?SG():g,K=B.worktreeEnabled?lI():Z;L("[STARTUP] Loading commands and agents...");let J=Date.now(),[c,V]=await Promise.all([b??dI(K),C??cI(K)]);return L(`[STARTUP] Commands and agents loaded in ${Date.now()-J}ms`),{effectiveReplayUserMessages:Y,sessionNameArg:W,userSpecifiedModel:d,userSpecifiedFallbackModel:R,currentCwd:K,commands:c,agentDefinitionsResult:V}}async function BY(G,I){let{options:B,ctx:g,isNonInteractiveSession:Z,agentCli:b,agentsJson:C,userSpecifiedModel:Y,agentDefinitionsResult:W}=G,{systemPrompt:d,appendSystemPrompt:R,inputPrompt:K}=G,J=[];if(C)try{let y=jG(C);if(y)J=Fg(y,"flagSettings")}catch(y){i(y)}let c=[...W.allAgents,...J],V={...W,allAgents:c,activeAgents:hg(c)},h=b??uG().agent,X;if(h){if(X=V.activeAgents.find((y)=>y.agentType===h),!X)L(`Warning: agent "${h}" not found. Available agents: ${V.activeAgents.map((y)=>y.agentType).join(", ")}. Using default behavior.`)}if(lg(X?.agentType),X?.agentType)vg(X.agentType);if(Z&&X&&!d&&!Kg(X)){let y=X.getSystemPrompt();if(y)d=y}if(X?.initialPrompt){if(typeof K==="string")K=K?`${X.initialPrompt}
1462
+
1463
+ ${K}`:X.initialPrompt;else if(!K)K=X.initialPrompt}let F=Y;if(!F&&X?.model&&X.model!=="inherit")F=kG(X.model);yg(F),Hg(dg()||null);let z=Vg(),N=kG(z??SG()),U;if(MG()){let y=HI()?B.advisor:void 0;if(y){if(L(`[AdvisorTool] --advisor ${y}`),!Qg(N))process.stderr.write(w.red(`Error: The model "${N}" does not support the advisor tool.
1464
+ `)),process.exit(1);let Q=Jg(kG(y));if(!wg(Q))process.stderr.write(w.red(`Error: The model "${y}" cannot be used as an advisor.
1465
+ `)),process.exit(1)}if(U=HI()?y??jg():y,U)L(`[AdvisorTool] Advisor model: ${U}`)}if(t()&&g.storedTeammateOpts?.agentId&&g.storedTeammateOpts?.agentName&&g.storedTeammateOpts?.teamName&&g.storedTeammateOpts?.agentType){let y=V.activeAgents.find((Q)=>Q.agentType===g.storedTeammateOpts?.agentType);if(y){let Q;if(y.source==="built-in")L(`[teammate] Built-in agent ${g.storedTeammateOpts.agentType} - skipping custom prompt (not supported)`);else Q=y.getSystemPrompt();if(Q){let M=`
1466
+ # Custom Agent Instructions
1467
+ ${Q}`;R=R?`${R}
1468
+
1469
+ ${M}`:M}}else L(`[teammate] Custom agent ${g.storedTeammateOpts.agentType} not found in available agents`)}return{agentDefinitions:V,mainThreadAgentDefinition:X,cliAgents:J,agentSetting:h,effectiveModel:F,initialMainLoopModel:z,resolvedInitialModel:N,advisorModel:U,systemPrompt:d,appendSystemPrompt:R,inputPrompt:K}}cG();JI();Og();WY();zg();CY();yG();XY();var ag=ZY(YY(),1);gY();kg();async function ug(G,I){let{InvalidSettingsDialog:B}=await import("./InvalidSettingsDialog-1.1.31-0bg1r1g6.mjs");return xG(G,(g)=>YG(B,{settingsErrors:I.settingsErrors,onContinue:g,onExit:I.onExit}))}async function Mg(G){let{TeleportResumeWrapper:I}=await import("./TeleportResumeWrapper-1.1.31-ea5827ce.mjs");return xG(G,(B)=>YG(I,{onComplete:B,onCancel:()=>B(null),source:"cliArg"}))}async function xg(G,I){let{TeleportRepoMismatchDialog:B}=await import("./TeleportRepoMismatchDialog-1.1.31-41nwynfk.mjs");return xG(G,(g)=>YG(B,{targetRepo:I.targetRepo,initialPaths:I.initialPaths,onSelectPath:g,onCancel:()=>g(null)}))}async function qg(G,I,B,g){let[Z,{ResumeConversation:b},{App:C}]=await Promise.all([B,import("./ResumeConversation-1.1.31-dqkxr7bz.mjs"),import("./App-1.1.31-bp57fthj.mjs")]);await s(G,YG(C,{getFpsMetrics:I.getFpsMetrics,stats:I.stats,initialState:I.initialState,children:YG(Sg,{children:YG(b,{...g,worktreePaths:Z})})}))}bY();async function VY(G){let{permissionMode:I,allowDangerouslySkipPermissions:B,commands:g,devChannels:Z,remoteControlOption:b,mainThreadAgentDefinition:C}=G,Y=G.prompt,W=G.inputPrompt;ZG("trust_onboarding_start");let d=_g(!1),R=d.getFpsMetrics,K=d.stats;ZG("trust_render_ctx_ready");let{createRoot:J}=await import("./ink-1.1.31-rx0229yp.mjs");ZG("trust_ink_imported");let c=await J(d.renderOptions);ZG("trust_ink_root_created");let V=await pg(c,I,B,g,Z);ZG("trust_setup_screens_done");let h=!1;if(b!==void 0){let{getBridgeDisabledReason:F}=await import("./bridgeEnabled-1.1.31-d9mxn4g0.mjs"),z=await F();if(h=z===null,z)process.stderr.write(w.yellow(`${z}
1470
+ --rc flag ignored.
1471
+ `))}if(V&&typeof Y==="string"&&Y.trim().toLowerCase()==="/login")Y="";if(V)Tg(),Pg(),Eg(),Dg(),import("./trustedDevice-1.1.31-ad2f2kvj.mjs").then((F)=>{return F.clearTrustedDeviceToken(),F.enrollTrustedDevice()});try{let{getActiveProviderProfile:F,getProviderProfiles:z}=await import("./providerProfiles-1.1.31-8g3p4ntd.mjs");if(!(z().length>0||Boolean(F()))&&!V){let{showSetupDialog:U}=await import("./interactiveHelpers-1.1.31-xq2br8z8.mjs"),{ProviderManager:y}=await import("./ProviderManager-1.1.31-504qgqkc.mjs");await U(c,(Q)=>ag.default.createElement(y,{mode:"first-run",onDone:()=>Q()}))}}catch(F){L(`[provider-wizard] auto-wizard failed: ${F instanceof Error?F.message:String(F)}`)}try{let{tryGetActiveProvider:F}=await import("./activeProvider-1.1.31-dbrkwgfw.mjs");if(F()&&process.stdout.isTTY&&process.env.CLAUDIN_CLEAR_ON_START==="1"){let{clearTerminal:z}=await import("./clearTerminal-1.1.31-d6d2q7kn.mjs");process.stdout.write(z)}}catch(F){L(`[startup-clear] failed: ${F instanceof Error?F.message:String(F)}`)}ZG("trust_before_org_validation");let X=await $g();if(ZG("trust_after_org_validation"),!X.valid)await O(c,X.message);return{root:c,getFpsMetrics:R,stats:K,remoteControl:h,prompt:Y,inputPrompt:W}}jY();mI();yG();fG();JI();KY();mY();zY();QY();FY();LI();Ng();iG();JG();ng();LY();yY();vY();lY();RB();dY();FG();HY();DG();NY();cY();wY();JY();gI();pI();AY();RY();UY();hY();async function kY(G){let{ctx:I,root:B,isNonInteractiveSession:g,dynamicMcpConfig:Z,mcpConfigPromise:b}=G;if(process.exitCode!==void 0)return L("Graceful shutdown initiated, skipping further initialization"),{exited:!0};if(YZ())WZ();if(!g){let{errors:c}=rg(),V=c.filter((X)=>!X.mcpErrorMetadata),h=lG()?.transport;if(V.length>0&&h!=="openai_compat"&&h!=="codex_responses"&&h!=="github_copilot")await ug(B,{settingsErrors:V,onExit:()=>hZ(1)})}let C=hG("tengu_cicada_nap_ms",0),Y=e().startupPrefetchedAt??0,W=dG()||C>0&&Date.now()-Y<C;if(XZ(),BZ(),eg(),!W){let c=Y>0?` last ran ${Math.round((Date.now()-Y)/1000)}s ago`:"";if(L(`Starting background startup prefetches${c}`),CZ().catch((V)=>i(V)),dZ(),!hG("tengu_miraculo_the_bard",!1))IZ();else hI();if(C>0)QI((V)=>({...V,startupPrefetchedAt:Date.now()}))}else L(`Skipping startup prefetches, last ran ${Math.round((Date.now()-Y)/1000)}s ago`),hI();if(!g){let{refreshExampleCommands:c}=await import("./exampleCommands-1.1.31-gntd6p22.mjs");c()}let{servers:d}=await b,R={...d,...Z},K={},J={};for(let[c,V]of Object.entries(R)){let h=V;if(h.type==="sdk")K[c]=h;else J[c]=h}return{exited:!1,allMcpConfigs:R,sdkMcpConfigs:K,regularMcpConfigs:J}}function SY(G,I){let{options:B,ctx:g,isNonInteractiveSession:Z,regularMcpConfigs:b,claudeaiConfigPromise:C,mainThreadAgentDefinition:Y,resolvedInitialModel:W,initOnly:d,init:R,maintenance:K,toolPermissionContext:J,sessionNameArg:c}=G,V=Z?Promise.resolve({clients:[],tools:[],commands:[]}):zI(b),h=Z?Promise.resolve({clients:[],tools:[],commands:[]}):C.then((j)=>Object.keys(j).length>0?zI(j):{clients:[],tools:[],commands:[]}),X=Promise.all([V,h]).then(([j,H])=>({clients:[...j.clients,...H.clients],tools:FI([...j.tools,...H.tools],"name"),commands:FI([...j.commands,...H.commands],"name")})),F=d||R||K||Z||B.continue||B.resume?null:yZ("startup",{agentType:Y?.agentType,model:W}),z=[];X.catch(()=>{});let N=[],U=[],y=[],Q=gZ(),M=Q!==!1?{type:"adaptive"}:{type:"disabled"};if(B.thinking==="adaptive"||B.thinking==="enabled")Q=!0,M={type:"adaptive"};else if(B.thinking==="disabled")Q=!1,M={type:"disabled"};else{let j=process.env.MAX_THINKING_TOKENS?parseInt(process.env.MAX_THINKING_TOKENS,10):B.maxThinkingTokens;if(j!==void 0){if(j>0)Q=!0,M={type:"enabled",budgetTokens:j};else if(j===0)Q=!1,M={type:"disabled"}}}return RI("info","started",{version:"99.0.0",is_native_binary:ig()}),fg(async()=>{RI("info","exited")}),JZ().then((j)=>{if(!j)return;if(c)RZ(c);KZ().then((H)=>{})}),{mcpPromise:X,hooksPromise:F,hookMessages:z,mcpClients:N,mcpTools:U,mcpCommands:y,thinkingEnabled:Q,thinkingConfig:M}}function uY(G,I){let{options:B,ctx:g,agentSetting:Z,resolvedInitialModel:b,permissionModeNotification:C,overlyBroadBashPermissions:Y,toolPermissionContext:W,initialMainLoopModel:d,agentDefinitions:R,mainThreadAgentDefinition:K,verbose:J,remoteControl:c,remoteControlName:V,advisorModel:h,inputPrompt:X,thinkingEnabled:F,mcpTools:z}=G,{getTeammateUtils:N}=I,U=zZ(b),y=[];if(C)y.push({key:"permission-mode-notification",text:C,priority:"high"});if(U)y.push({key:"model-deprecation-warning",text:U,color:"warning",priority:"high"});if(Y.length>0){let m=KI(Y.map((S)=>S.ruleDisplay)),D=m.join(", "),$=KI(Y.map((S)=>S.sourceDisplay)).join(", "),k=m.length;y.push({key:"overly-broad-bash-notification",text:`${D} allow ${bG(k,"rule")} from ${$} ${bG(k,"was","were")} ignored — not available for Ants, please use auto-mode instead`,color:"warning",priority:"high"})}let Q=tg().ignoredSources;if(Q.length>0){let m=Q.map(($)=>sg($)).join(", "),D=Q.length;y.push({key:"ignored-auto-mode-settings",text:`autoMode rules in ${m} ${bG(D,"was","were")} ignored — settings inside the repository cannot configure auto mode. Run /auto-mode-setup to write them to your user settings.`,color:"warning",priority:"high"})}let M={...W,mode:t()&&N().isPlanModeRequired()?"plan":W.mode},j=!1,H=c||og()||g.kairosEnabled,A=!1,P={settings:uG(),tasks:{},agentNameRegistry:new Map,verbose:J??e().verbose??!1,mainLoopModel:d,mainLoopModelForSession:null,isBriefOnly:j,collapseSubagentProgress:e().collapseSubagentProgress??!0,expandedView:e().showSpinnerTree?"teammates":e().showExpandedTodos?"tasks":"none",showTeammateMessagePreview:t()?!1:void 0,selectedIPAgentIndex:-1,collapsedTaskGroups:[],seededTaskGroups:[],footerTasksCollapsed:!0,coordinatorTaskIndex:-1,viewSelectionMode:"none",pendingContainerStop:null,pendingMcpDisconnect:null,footerSelection:null,toolPermissionContext:M,agent:K?.agentType,agentDefinitions:R,mcp:{clients:[],tools:[],commands:[],resources:{},pluginReconnectKey:0},plugins:{enabled:[],disabled:[],commands:[],errors:[],installationStatus:{marketplaces:[],plugins:[]},needsRefresh:!1},statusLineText:void 0,kairosEnabled:g.kairosEnabled,remoteSessionUrl:void 0,remoteConnectionStatus:"connecting",remoteBackgroundTaskCount:0,replBridgeEnabled:H||A,replBridgeExplicit:c,replBridgeOutboundOnly:A,replBridgeConnected:!1,replBridgeSessionActive:!1,replBridgeReconnecting:!1,replBridgeConnectUrl:void 0,replBridgeSessionUrl:void 0,replBridgeEnvironmentId:void 0,replBridgeSessionId:void 0,replBridgeError:void 0,replBridgeInitialName:V,showRemoteCallout:!1,notifications:{current:null,queue:y},elicitation:{queue:[]},todos:{},remoteAgentTaskSuggestions:[],fileHistory:{snapshots:[],trackedFiles:new Set,snapshotSequence:0},attribution:lZ(),thinkingEnabled:F,promptSuggestionEnabled:HZ(),sessionHooks:new Map,inbox:{messages:[]},promptSuggestion:{text:null,promptId:null,shownAt:0,acceptedAt:0,generationRequestId:null},speculation:cZ,speculationSessionTimeSavedMs:0,workerSandboxPermissions:{queue:[],selectedIndex:0},pendingWorkerRequest:null,pendingSandboxRequest:null,authVersion:0,initialMessage:X?{message:qG({content:String(X)})}:null,effortValue:ZZ(B.effort)??bZ(),activeOverlays:new Set,fastMode:GZ(b),...MG()&&h&&{advisorModel:h},teamContext:FZ?.()};if(X)VZ(String(X));let x=z;return QI((m)=>({...m,numStartups:(m.numStartups??0)+1})),{initialState:P,initialTools:x}}JG();wG();QZ();FG();async function wZ(G){let{root:I,options:B,sessionConfig:g,resumeContext:Z,mainThreadAgentDefinitionRef:b,getFpsMetrics:C,stats:Y}=G,W=!1;try{let d=performance.now(),{clearSessionCaches:R}=await import("./caches-1.1.31-yvqtsfx3.mjs");R();let K=await $G(void 0,void 0);if(!K)return await O(I,"No conversation found to continue");let J=await PG(K,{forkSession:!!B.forkSession,includeAttribution:!0,transcriptPath:K.fullPath},Z);if(J.restoredAgentDef)b.current=J.restoredAgentDef;W=!0,await WG(I,{getFpsMetrics:C,stats:Y,initialState:J.initialState},{...g,mainThreadAgentDefinition:J.restoredAgentDef??b.current,initialMessages:J.messages,initialFileHistorySnapshots:J.fileHistorySnapshots,initialContentReplacements:J.contentReplacements,initialAgentName:J.agentName,initialAgentColor:J.agentColor},s)}catch(d){return i(d),await O(I,a(d),()=>p(1))}}n();FG();DG();n();FG();DG();cG();$Y();n();Ag();JI();DY();ng();QZ();wG();eG();TY();FG();yG();JG();DG();nG();PY();qY();OY();oG();Og();async function oZ(G){let{root:I,ctx:B,options:g,teleport:Z,remote:b,debug:C,debugToStderr:Y,commands:W,ide:d,mainThreadAgentDefinitionRef:R,thinkingConfig:K,sessionConfig:J,resumeContext:c,getFpsMetrics:V,stats:h,initialState:X}=G,{clearSessionCaches:F}=await import("./caches-1.1.31-yvqtsfx3.mjs");F();let z=null,N=void 0,U=VG(g.resume),y=void 0,Q=null,M=void 0;if(g.fromPr){if(g.fromPr===!0)M=!0;else if(typeof g.fromPr==="string")M=g.fromPr}if(g.resume&&typeof g.resume==="string"&&!U){let H=g.resume.trim();if(H){let A=await _Z(H,{exact:!0});if(A.length===1)Q=A[0],U=TZ(Q)??null;else y=H}}if(b!==null||Z){if(await MZ(),!xZ("allow_remote_sessions"))return await O(I,"Error: Remote sessions are disabled by your organization's policy.",()=>p(1))}if(b!==null){let H=b.length>0,A=hG("tengu_remote_backend",!1);if(!A&&!H)return await O(I,`Error: --remote requires a description.
1472
+ Usage: claudin --remote "your task description"`,()=>p(1));let P=await UZ(),x=await OZ(I,H?b:null,new AbortController().signal,P||void 0);if(!x)return await O(I,"Error: Unable to create remote session",()=>p(1));if(!A)process.stdout.write(`Created remote session: ${x.title}
1473
+ `),process.stdout.write(`View: ${wI(x.id)}?m=0
1474
+ `),process.stdout.write(`Resume with: claude --teleport ${x.id}
1475
+ `),await p(0),process.exit(0);AZ(!0),jZ(SZ(x.id));let m;try{m=await LZ()}catch(_){return i(vZ(_)),await O(I,`Error: ${a(_)||"Failed to authenticate"}`,()=>p(1))}let{getClaudeAIOAuthTokens:D}=await import("./auth-1.1.31-76rswxwe.mjs"),$=()=>D()?.accessToken??m.accessToken,k=iZ(x.id,$,m.orgUUID,H),S=`${wI(x.id)}?m=0`,q=TG(`/remote-control is active. Code in CLI or at ${S}`,"info"),T=H?qG({content:b}):null,r={...X,remoteSessionUrl:S},o=pZ(W);await WG(I,{getFpsMetrics:V,stats:h,initialState:r},{debug:C||Y,commands:o,initialTools:[],initialMessages:T?[q,T]:[q],mcpClients:[],autoConnectIdeFlag:d,mainThreadAgentDefinition:R.current,disableSlashCommands:B.disableSlashCommands,remoteSessionConfig:k,thinkingConfig:K},s);return}else if(Z){if(Z===!0||Z===""){L("selectAndResumeTeleportTask: Starting teleport flow...");let H=await Mg(I);if(!H)await p(0),process.exit(0);let{branchError:A}=await $Z(H.branch);z=DZ(H.log,A)}else if(typeof Z==="string")try{let H=await kZ(Z),A=await PZ(H);if(A.status==="mismatch"||A.status==="not_in_repo"){let m=A.sessionRepo;if(m){let D=aZ(m),$=await fZ(D);if($.length>0){let k=await xg(I,{targetRepo:m,initialPaths:$});if(k)process.chdir(k),uZ(k),OG(k);else await p(0)}else throw new EG(`You must run claude --teleport ${Z} from a checkout of ${m}.`,w.red(`You must run claude --teleport ${Z} from a checkout of ${w.bold(m)}.
1476
+ `))}}else if(A.status==="error")throw new EG(A.errorMessage||"Failed to validate session",w.red(`Error: ${A.errorMessage||"Failed to validate session"}
1477
+ `));await qZ();let{teleportWithProgress:P}=await import("./TeleportProgress-1.1.31-27h2np2z.mjs"),x=await P(I,Z);NZ({sessionId:Z}),z=x.messages}catch(H){if(H instanceof EG)process.stderr.write(H.formattedMessage+`
1478
+ `);else i(H),process.stderr.write(w.red(`Error: ${a(H)}
1479
+ `));await p(1)}}if(U){let H=U;try{let A=performance.now(),P=await $G(Q??H,void 0);if(!P)return await O(I,`No conversation found with session ID: ${H}`);let x=Q?.fullPath??P.fullPath;if(N=await PG(P,{forkSession:!!g.forkSession,sessionIdOverride:H,transcriptPath:x},c),N.restoredAgentDef)R.current=N.restoredAgentDef}catch(A){i(A),await O(I,a(A))}}if(B.fileDownloadPromise)try{let H=await B.fileDownloadPromise,A=mZ(H,(P)=>!P.success);if(A>0)process.stderr.write(w.yellow(`Warning: ${A}/${H.length} file(s) failed to download.
1480
+ `))}catch(H){return await O(I,`Error downloading files: ${a(H)}`)}let j=N??(Array.isArray(z)?{messages:z,fileHistorySnapshots:void 0,agentName:void 0,agentColor:void 0,restoredAgentDef:R.current,initialState:X,contentReplacements:void 0}:void 0);if(j)await WG(I,{getFpsMetrics:V,stats:h,initialState:j.initialState},{...J,mainThreadAgentDefinition:j.restoredAgentDef??R.current,initialMessages:j.messages,initialFileHistorySnapshots:j.fileHistorySnapshots,initialContentReplacements:j.contentReplacements,initialAgentName:j.agentName,initialAgentColor:j.agentColor},s);else await qg(I,{getFpsMetrics:V,stats:h,initialState:X},EZ(KG()),{...J,initialSearchQuery:y,forkSession:g.forkSession,filterByPr:M})}function EY(G){let I={debug:G.debug||G.debugToStderr,commands:[...G.commands,...G.mcpCommands],initialTools:G.initialTools,mcpClients:G.mcpClients,autoConnectIdeFlag:G.ide,mainThreadAgentDefinition:G.mainThreadAgentDefinition,disableSlashCommands:G.ctx.disableSlashCommands,dynamicMcpConfig:G.dynamicMcpConfig,strictMcpConfig:G.strictMcpConfig,systemPrompt:G.systemPrompt,appendSystemPrompt:G.appendSystemPrompt,taskListId:G.ctx.taskListId,thinkingConfig:G.thinkingConfig},B={modeApi:G.coordinatorModeModule,mainThreadAgentDefinition:G.mainThreadAgentDefinition,agentDefinitions:G.agentDefinitions,currentCwd:G.currentCwd,cliAgents:G.cliAgents,initialState:G.initialState};return{sessionConfig:I,resumeContext:B}}async function pY(G){let{root:I,ctx:B,options:g,debug:Z,debugToStderr:b,commands:C,ide:Y,teleport:W,remote:d,thinkingConfig:R,initialState:K,getFpsMetrics:J,stats:c}=G,V=G.mainThreadAgentDefinition,{sessionConfig:h,resumeContext:X}=EY({ctx:B,debug:Z,debugToStderr:b,commands:C,initialTools:G.initialTools,mcpClients:G.mcpClients,mcpCommands:G.mcpCommands,ide:Y,mainThreadAgentDefinition:V,dynamicMcpConfig:G.dynamicMcpConfig,strictMcpConfig:G.strictMcpConfig,systemPrompt:G.systemPrompt,appendSystemPrompt:G.appendSystemPrompt,thinkingConfig:R,coordinatorModeModule:G.coordinatorModeModule,agentDefinitions:G.agentDefinitions,currentCwd:G.currentCwd,cliAgents:G.cliAgents,initialState:K});if(g.continue){let N={current:V};return await wZ({root:I,options:g,sessionConfig:h,resumeContext:X,mainThreadAgentDefinitionRef:N,getFpsMetrics:J,stats:c}),V=N.current,{handled:!0,mainThreadAgentDefinition:V,sessionConfig:h}}let F=Z,z=b;if(g.resume||g.fromPr||W||d!==null){let N={current:V};return await oZ({root:I,ctx:B,options:g,teleport:W,remote:d,debug:F,debugToStderr:z,commands:C,ide:Y,mainThreadAgentDefinitionRef:N,thinkingConfig:R,sessionConfig:h,resumeContext:X,getFpsMetrics:J,stats:c,initialState:K}),V=N.current,{handled:!0,mainThreadAgentDefinition:V,sessionConfig:h}}return{handled:!1,mainThreadAgentDefinition:V,sessionConfig:h}}export{VY as runTrustAndOnboarding,kY as runPostHeadlessGuards,SY as runMcpHooksAndTelemetry,Hb as runMcpAndPerms,uY as runInteractiveStartupBlock,pY as runDefaultActionDispatch,GY as runActionSetup,IY as runActionPostSetup,BY as runActionAgentSetup,Zb as parseActionOptions};