@linghun/tui 0.1.0

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 (692) hide show
  1. package/LICENSE +190 -0
  2. package/dist/agent-completion-finalizer.d.ts +31 -0
  3. package/dist/agent-completion-finalizer.d.ts.map +1 -0
  4. package/dist/agent-completion-finalizer.js +20 -0
  5. package/dist/agent-handoff-safety.d.ts +13 -0
  6. package/dist/agent-handoff-safety.d.ts.map +1 -0
  7. package/dist/agent-handoff-safety.js +43 -0
  8. package/dist/agent-workflow-registry.d.ts +45 -0
  9. package/dist/agent-workflow-registry.d.ts.map +1 -0
  10. package/dist/agent-workflow-registry.js +12 -0
  11. package/dist/architecture-boundary.d.ts +151 -0
  12. package/dist/architecture-boundary.d.ts.map +1 -0
  13. package/dist/architecture-boundary.js +24 -0
  14. package/dist/architecture-runtime.d.ts +56 -0
  15. package/dist/architecture-runtime.d.ts.map +1 -0
  16. package/dist/architecture-runtime.js +18 -0
  17. package/dist/background-control-runtime.d.ts +29 -0
  18. package/dist/background-control-runtime.d.ts.map +1 -0
  19. package/dist/background-control-runtime.js +148 -0
  20. package/dist/bash-subcommand-parser.d.ts +34 -0
  21. package/dist/bash-subcommand-parser.d.ts.map +1 -0
  22. package/dist/bash-subcommand-parser.js +8 -0
  23. package/dist/batch-tool-confirmation.d.ts +18 -0
  24. package/dist/batch-tool-confirmation.d.ts.map +1 -0
  25. package/dist/batch-tool-confirmation.js +100 -0
  26. package/dist/break-cache-runtime.d.ts +40 -0
  27. package/dist/break-cache-runtime.d.ts.map +1 -0
  28. package/dist/break-cache-runtime.js +17 -0
  29. package/dist/btw-runtime.d.ts +45 -0
  30. package/dist/btw-runtime.d.ts.map +1 -0
  31. package/dist/btw-runtime.js +14 -0
  32. package/dist/cache-command-runtime.d.ts +22 -0
  33. package/dist/cache-command-runtime.d.ts.map +1 -0
  34. package/dist/cache-command-runtime.js +33 -0
  35. package/dist/cache-freshness.d.ts +26 -0
  36. package/dist/cache-freshness.d.ts.map +1 -0
  37. package/dist/cache-freshness.js +14 -0
  38. package/dist/capability-runtime.d.ts +75 -0
  39. package/dist/capability-runtime.d.ts.map +1 -0
  40. package/dist/capability-runtime.js +97 -0
  41. package/dist/chunk-2FVEKTKN.js +86 -0
  42. package/dist/chunk-2YL5VKJ5.js +531 -0
  43. package/dist/chunk-3AKXDMVS.js +85 -0
  44. package/dist/chunk-3GCIXKCI.js +221 -0
  45. package/dist/chunk-3LT6OWQ2.js +258 -0
  46. package/dist/chunk-3XNUDLOM.js +91 -0
  47. package/dist/chunk-4EIC5BCT.js +475 -0
  48. package/dist/chunk-4EP3TUFF.js +238 -0
  49. package/dist/chunk-4I2NWBOM.js +117 -0
  50. package/dist/chunk-4K6UB524.js +443 -0
  51. package/dist/chunk-4T5DJW54.js +88 -0
  52. package/dist/chunk-4WHZ6JKD.js +8105 -0
  53. package/dist/chunk-5H7RRF7C.js +6 -0
  54. package/dist/chunk-64MJP6FK.js +558 -0
  55. package/dist/chunk-66BNE332.js +1617 -0
  56. package/dist/chunk-6CI6TKLN.js +50 -0
  57. package/dist/chunk-6RJVTUWI.js +16 -0
  58. package/dist/chunk-6SMM5CMP.js +100 -0
  59. package/dist/chunk-6USL33ZO.js +289 -0
  60. package/dist/chunk-7ZE5JFAZ.js +760 -0
  61. package/dist/chunk-AKPXMCVF.js +1373 -0
  62. package/dist/chunk-AO4CXI37.js +284 -0
  63. package/dist/chunk-APJIC2O5.js +150 -0
  64. package/dist/chunk-B4GQTZMT.js +607 -0
  65. package/dist/chunk-BFVPLGAC.js +93 -0
  66. package/dist/chunk-BOV4K7FP.js +588 -0
  67. package/dist/chunk-CFMSB6ST.js +59 -0
  68. package/dist/chunk-CFXB5SE5.js +502 -0
  69. package/dist/chunk-CRQORMFF.js +32 -0
  70. package/dist/chunk-CRSLDQOA.js +146 -0
  71. package/dist/chunk-CRW3636S.js +214 -0
  72. package/dist/chunk-D3UTL2QX.js +86 -0
  73. package/dist/chunk-D7TCSOAZ.js +331 -0
  74. package/dist/chunk-DDXS2RDZ.js +228 -0
  75. package/dist/chunk-DICVLZHH.js +144 -0
  76. package/dist/chunk-DNQN74CC.js +1186 -0
  77. package/dist/chunk-DTK5NBTV.js +912 -0
  78. package/dist/chunk-E72U7WW7.js +50 -0
  79. package/dist/chunk-EBACIBJP.js +356 -0
  80. package/dist/chunk-ECFLCY5V.js +530 -0
  81. package/dist/chunk-EORRZP3F.js +109 -0
  82. package/dist/chunk-F43AMWLZ.js +115 -0
  83. package/dist/chunk-F46N43MG.js +56 -0
  84. package/dist/chunk-F6TVBCZV.js +51 -0
  85. package/dist/chunk-FRIMDSRU.js +242 -0
  86. package/dist/chunk-FTAEPAVY.js +314 -0
  87. package/dist/chunk-GC55DMZV.js +156 -0
  88. package/dist/chunk-GCMH5P4W.js +422 -0
  89. package/dist/chunk-GDQQNPBP.js +251 -0
  90. package/dist/chunk-GKZYTPN2.js +279 -0
  91. package/dist/chunk-GLWTWEGX.js +272 -0
  92. package/dist/chunk-GMUCSNUD.js +586 -0
  93. package/dist/chunk-GTP2KPLY.js +167 -0
  94. package/dist/chunk-GW5YDCRZ.js +42 -0
  95. package/dist/chunk-H3T4EF5F.js +87 -0
  96. package/dist/chunk-HAEU6OTS.js +381 -0
  97. package/dist/chunk-HQIJGQYU.js +172 -0
  98. package/dist/chunk-HW2TBXVK.js +34 -0
  99. package/dist/chunk-HWD22O6F.js +94 -0
  100. package/dist/chunk-I3NTAIMF.js +280 -0
  101. package/dist/chunk-IN42UISW.js +372 -0
  102. package/dist/chunk-IWUIOLMF.js +82 -0
  103. package/dist/chunk-J7ZE2JKP.js +283 -0
  104. package/dist/chunk-JBLVBO3U.js +109 -0
  105. package/dist/chunk-JDWXC2OQ.js +800 -0
  106. package/dist/chunk-JGDIO2NF.js +74 -0
  107. package/dist/chunk-JHGWGH2C.js +182 -0
  108. package/dist/chunk-JLCPHVBN.js +42 -0
  109. package/dist/chunk-JO5ANTMR.js +6027 -0
  110. package/dist/chunk-JPXSFZFC.js +100 -0
  111. package/dist/chunk-JQCRCDOC.js +1195 -0
  112. package/dist/chunk-K4FSYBSY.js +41 -0
  113. package/dist/chunk-K56D3X7S.js +1225 -0
  114. package/dist/chunk-KI7C6ZOD.js +92 -0
  115. package/dist/chunk-KO64OFSG.js +58 -0
  116. package/dist/chunk-KQJHVJZB.js +227 -0
  117. package/dist/chunk-KTWV5JC5.js +59 -0
  118. package/dist/chunk-L4XXW6Y5.js +374 -0
  119. package/dist/chunk-L5GOCMZP.js +18 -0
  120. package/dist/chunk-LDABZV5V.js +278 -0
  121. package/dist/chunk-LHHKPGLX.js +903 -0
  122. package/dist/chunk-LL7LBRDL.js +60 -0
  123. package/dist/chunk-LQTVYUT3.js +421 -0
  124. package/dist/chunk-LVIM2PA7.js +663 -0
  125. package/dist/chunk-M4AIK2SP.js +215 -0
  126. package/dist/chunk-MLUIOBKL.js +420 -0
  127. package/dist/chunk-MOJL4X4L.js +47 -0
  128. package/dist/chunk-MVONSJEN.js +300 -0
  129. package/dist/chunk-N7G2X2LK.js +709 -0
  130. package/dist/chunk-NKFKOEYX.js +146 -0
  131. package/dist/chunk-NMNOAFFT.js +167 -0
  132. package/dist/chunk-NSIKYD3X.js +74 -0
  133. package/dist/chunk-O7EFPSMC.js +60 -0
  134. package/dist/chunk-O7S3HYE6.js +210 -0
  135. package/dist/chunk-OEYW3JE3.js +262 -0
  136. package/dist/chunk-OF3K3CU5.js +159 -0
  137. package/dist/chunk-OMZYPQVA.js +298 -0
  138. package/dist/chunk-OZMX3E35.js +248 -0
  139. package/dist/chunk-P277M7Z5.js +303 -0
  140. package/dist/chunk-P4CPRJLI.js +65 -0
  141. package/dist/chunk-PBIPV4LD.js +494 -0
  142. package/dist/chunk-PGNALDEH.js +2003 -0
  143. package/dist/chunk-PGWW3DVE.js +157 -0
  144. package/dist/chunk-QB4VWH7W.js +515 -0
  145. package/dist/chunk-QBCGAIU7.js +120 -0
  146. package/dist/chunk-QIU3FJPC.js +99 -0
  147. package/dist/chunk-QLRTQHTR.js +744 -0
  148. package/dist/chunk-QTDGRZMZ.js +171 -0
  149. package/dist/chunk-RBOQJFIZ.js +183 -0
  150. package/dist/chunk-RDGM4RUE.js +178 -0
  151. package/dist/chunk-RM5JDRCW.js +71 -0
  152. package/dist/chunk-RM5QMOFY.js +189 -0
  153. package/dist/chunk-RMLTVKOY.js +588 -0
  154. package/dist/chunk-RVY34HK4.js +79 -0
  155. package/dist/chunk-S3YWTBXL.js +43 -0
  156. package/dist/chunk-SJOS5PM6.js +64 -0
  157. package/dist/chunk-SOPYWTFV.js +90 -0
  158. package/dist/chunk-SQIBPLLV.js +15 -0
  159. package/dist/chunk-SRZIA6B4.js +136 -0
  160. package/dist/chunk-SYBNJZEL.js +250 -0
  161. package/dist/chunk-TFZEFIQT.js +17 -0
  162. package/dist/chunk-THZBFYAH.js +136 -0
  163. package/dist/chunk-TJLC3QAS.js +83 -0
  164. package/dist/chunk-TYF4GJR3.js +598 -0
  165. package/dist/chunk-UDQT5CWK.js +252 -0
  166. package/dist/chunk-UOHZQIVL.js +168 -0
  167. package/dist/chunk-URNQUECO.js +187 -0
  168. package/dist/chunk-UT2TYK2A.js +148 -0
  169. package/dist/chunk-UT5BOJKU.js +190 -0
  170. package/dist/chunk-V7GDHHBL.js +526 -0
  171. package/dist/chunk-VCSRBS47.js +133 -0
  172. package/dist/chunk-VIBENDE3.js +152 -0
  173. package/dist/chunk-VTQL23UM.js +302 -0
  174. package/dist/chunk-W3KHJNSH.js +281 -0
  175. package/dist/chunk-W6NU7ZAV.js +52 -0
  176. package/dist/chunk-WHFDDZHY.js +407 -0
  177. package/dist/chunk-WJWYRBWH.js +48 -0
  178. package/dist/chunk-WKMBK5UP.js +145 -0
  179. package/dist/chunk-WQMSRO4D.js +489 -0
  180. package/dist/chunk-WV6YJGZR.js +81 -0
  181. package/dist/chunk-WVAQYKGL.js +269 -0
  182. package/dist/chunk-X7A22JHP.js +106 -0
  183. package/dist/chunk-XFPNU42I.js +59 -0
  184. package/dist/chunk-YH6UIHNF.js +161 -0
  185. package/dist/chunk-YPQFSFYK.js +19 -0
  186. package/dist/chunk-YTQFOZRZ.js +110 -0
  187. package/dist/chunk-ZJK25VFP.js +506 -0
  188. package/dist/chunk-ZOSK2UEU.js +1555 -0
  189. package/dist/chunk-ZYSN7AWW.js +336 -0
  190. package/dist/chunk-ZZ2CNCXJ.js +282 -0
  191. package/dist/command-panel-runtime.d.ts +33 -0
  192. package/dist/command-panel-runtime.d.ts.map +1 -0
  193. package/dist/command-panel-runtime.js +80 -0
  194. package/dist/compact-cache-command-runtime.d.ts +38 -0
  195. package/dist/compact-cache-command-runtime.d.ts.map +1 -0
  196. package/dist/compact-cache-command-runtime.js +146 -0
  197. package/dist/compact-context.d.ts +35 -0
  198. package/dist/compact-context.d.ts.map +1 -0
  199. package/dist/compact-context.js +16 -0
  200. package/dist/compact-preflight-runtime.d.ts +46 -0
  201. package/dist/compact-preflight-runtime.d.ts.map +1 -0
  202. package/dist/compact-preflight-runtime.js +62 -0
  203. package/dist/connector-runtime.d.ts +72 -0
  204. package/dist/connector-runtime.d.ts.map +1 -0
  205. package/dist/connector-runtime.js +88 -0
  206. package/dist/context-estimator.d.ts +20 -0
  207. package/dist/context-estimator.d.ts.map +1 -0
  208. package/dist/context-estimator.js +18 -0
  209. package/dist/context-window-runtime.d.ts +12 -0
  210. package/dist/context-window-runtime.d.ts.map +1 -0
  211. package/dist/context-window-runtime.js +10 -0
  212. package/dist/deep-compact-runtime.d.ts +53 -0
  213. package/dist/deep-compact-runtime.d.ts.map +1 -0
  214. package/dist/deep-compact-runtime.js +35 -0
  215. package/dist/deferred-tools-catalog.d.ts +52 -0
  216. package/dist/deferred-tools-catalog.d.ts.map +1 -0
  217. package/dist/deferred-tools-catalog.js +42 -0
  218. package/dist/details-status-runtime.d.ts +48 -0
  219. package/dist/details-status-runtime.d.ts.map +1 -0
  220. package/dist/details-status-runtime.js +102 -0
  221. package/dist/evidence-runtime.d.ts +48 -0
  222. package/dist/evidence-runtime.d.ts.map +1 -0
  223. package/dist/evidence-runtime.js +92 -0
  224. package/dist/extension-command-runtime.d.ts +63 -0
  225. package/dist/extension-command-runtime.d.ts.map +1 -0
  226. package/dist/extension-command-runtime.js +67 -0
  227. package/dist/extension-slash-runtime.d.ts +11 -0
  228. package/dist/extension-slash-runtime.d.ts.map +1 -0
  229. package/dist/extension-slash-runtime.js +79 -0
  230. package/dist/external-editor-runtime.d.ts +32 -0
  231. package/dist/external-editor-runtime.d.ts.map +1 -0
  232. package/dist/external-editor-runtime.js +71 -0
  233. package/dist/failure-learning-command-runtime.d.ts +10 -0
  234. package/dist/failure-learning-command-runtime.d.ts.map +1 -0
  235. package/dist/failure-learning-command-runtime.js +78 -0
  236. package/dist/failure-learning-presenter.d.ts +6 -0
  237. package/dist/failure-learning-presenter.d.ts.map +1 -0
  238. package/dist/failure-learning-presenter.js +12 -0
  239. package/dist/failure-learning-runtime.d.ts +39 -0
  240. package/dist/failure-learning-runtime.d.ts.map +1 -0
  241. package/dist/failure-learning-runtime.js +39 -0
  242. package/dist/feature-flag-runtime.d.ts +8 -0
  243. package/dist/feature-flag-runtime.d.ts.map +1 -0
  244. package/dist/feature-flag-runtime.js +12 -0
  245. package/dist/feishu-long-connection-runtime.d.ts +12 -0
  246. package/dist/feishu-long-connection-runtime.d.ts.map +1 -0
  247. package/dist/feishu-long-connection-runtime.js +7 -0
  248. package/dist/final-answer-gate.d.ts +24 -0
  249. package/dist/final-answer-gate.d.ts.map +1 -0
  250. package/dist/final-answer-gate.js +26 -0
  251. package/dist/ghost-text.d.ts +16 -0
  252. package/dist/ghost-text.d.ts.map +1 -0
  253. package/dist/ghost-text.js +8 -0
  254. package/dist/git-branch-runtime.d.ts +14 -0
  255. package/dist/git-branch-runtime.d.ts.map +1 -0
  256. package/dist/git-branch-runtime.js +68 -0
  257. package/dist/git-command-runtime.d.ts +22 -0
  258. package/dist/git-command-runtime.d.ts.map +1 -0
  259. package/dist/git-command-runtime.js +89 -0
  260. package/dist/git-operation-runtime.d.ts +188 -0
  261. package/dist/git-operation-runtime.d.ts.map +1 -0
  262. package/dist/git-operation-runtime.js +45 -0
  263. package/dist/git-runtime.d.ts +113 -0
  264. package/dist/git-runtime.d.ts.map +1 -0
  265. package/dist/git-runtime.js +16 -0
  266. package/dist/git-slash-runtime.d.ts +38 -0
  267. package/dist/git-slash-runtime.d.ts.map +1 -0
  268. package/dist/git-slash-runtime.js +18 -0
  269. package/dist/git-tool-dispatch-runtime.d.ts +108 -0
  270. package/dist/git-tool-dispatch-runtime.d.ts.map +1 -0
  271. package/dist/git-tool-dispatch-runtime.js +25 -0
  272. package/dist/git-tool-runtime.d.ts +64 -0
  273. package/dist/git-tool-runtime.d.ts.map +1 -0
  274. package/dist/git-tool-runtime.js +36 -0
  275. package/dist/guard-wiring.d.ts +67 -0
  276. package/dist/guard-wiring.d.ts.map +1 -0
  277. package/dist/guard-wiring.js +21 -0
  278. package/dist/handoff-session-runtime.d.ts +11 -0
  279. package/dist/handoff-session-runtime.d.ts.map +1 -0
  280. package/dist/handoff-session-runtime.js +36 -0
  281. package/dist/index-result-presenter.d.ts +14 -0
  282. package/dist/index-result-presenter.d.ts.map +1 -0
  283. package/dist/index-result-presenter.js +28 -0
  284. package/dist/index-runtime.d.ts +64 -0
  285. package/dist/index-runtime.d.ts.map +1 -0
  286. package/dist/index-runtime.js +28 -0
  287. package/dist/index-tool-runtime.d.ts +44 -0
  288. package/dist/index-tool-runtime.d.ts.map +1 -0
  289. package/dist/index-tool-runtime.js +24 -0
  290. package/dist/index.d.ts +57 -0
  291. package/dist/index.d.ts.map +1 -0
  292. package/dist/index.js +2346 -0
  293. package/dist/job-agent-command-runtime.d.ts +127 -0
  294. package/dist/job-agent-command-runtime.d.ts.map +1 -0
  295. package/dist/job-agent-command-runtime.js +138 -0
  296. package/dist/job-runner-presenter.d.ts +32 -0
  297. package/dist/job-runner-presenter.d.ts.map +1 -0
  298. package/dist/job-runner-presenter.js +30 -0
  299. package/dist/job-runtime.d.ts +65 -0
  300. package/dist/job-runtime.d.ts.map +1 -0
  301. package/dist/job-runtime.js +88 -0
  302. package/dist/keybinding-runtime.d.ts +29 -0
  303. package/dist/keybinding-runtime.d.ts.map +1 -0
  304. package/dist/keybinding-runtime.js +14 -0
  305. package/dist/log-artifact.d.ts +55 -0
  306. package/dist/log-artifact.d.ts.map +1 -0
  307. package/dist/log-artifact.js +10 -0
  308. package/dist/mcp-index-command-runtime.d.ts +21 -0
  309. package/dist/mcp-index-command-runtime.d.ts.map +1 -0
  310. package/dist/mcp-index-command-runtime.js +18 -0
  311. package/dist/mcp-index-runtime.d.ts +106 -0
  312. package/dist/mcp-index-runtime.d.ts.map +1 -0
  313. package/dist/mcp-index-runtime.js +142 -0
  314. package/dist/mcp-sse-runtime.d.ts +13 -0
  315. package/dist/mcp-sse-runtime.d.ts.map +1 -0
  316. package/dist/mcp-sse-runtime.js +8 -0
  317. package/dist/mcp-stdio-runtime.d.ts +37 -0
  318. package/dist/mcp-stdio-runtime.d.ts.map +1 -0
  319. package/dist/mcp-stdio-runtime.js +15 -0
  320. package/dist/memory-command-runtime.d.ts +37 -0
  321. package/dist/memory-command-runtime.d.ts.map +1 -0
  322. package/dist/memory-command-runtime.js +88 -0
  323. package/dist/memory-eviction-runtime.d.ts +7 -0
  324. package/dist/memory-eviction-runtime.d.ts.map +1 -0
  325. package/dist/memory-eviction-runtime.js +12 -0
  326. package/dist/memory-extraction-runtime.d.ts +40 -0
  327. package/dist/memory-extraction-runtime.d.ts.map +1 -0
  328. package/dist/memory-extraction-runtime.js +20 -0
  329. package/dist/memory-rules-runtime.d.ts +15 -0
  330. package/dist/memory-rules-runtime.d.ts.map +1 -0
  331. package/dist/memory-rules-runtime.js +14 -0
  332. package/dist/meta-scheduler-complexity.d.ts +16 -0
  333. package/dist/meta-scheduler-complexity.d.ts.map +1 -0
  334. package/dist/meta-scheduler-complexity.js +37 -0
  335. package/dist/meta-scheduler-runtime.d.ts +288 -0
  336. package/dist/meta-scheduler-runtime.d.ts.map +1 -0
  337. package/dist/meta-scheduler-runtime.js +17 -0
  338. package/dist/model-command-runtime.d.ts +12 -0
  339. package/dist/model-command-runtime.d.ts.map +1 -0
  340. package/dist/model-command-runtime.js +84 -0
  341. package/dist/model-doctor-runtime.d.ts +81 -0
  342. package/dist/model-doctor-runtime.d.ts.map +1 -0
  343. package/dist/model-doctor-runtime.js +46 -0
  344. package/dist/model-loop-runtime.d.ts +189 -0
  345. package/dist/model-loop-runtime.d.ts.map +1 -0
  346. package/dist/model-loop-runtime.js +141 -0
  347. package/dist/model-prompt-runtime.d.ts +25 -0
  348. package/dist/model-prompt-runtime.d.ts.map +1 -0
  349. package/dist/model-prompt-runtime.js +33 -0
  350. package/dist/model-setup-runtime.d.ts +28 -0
  351. package/dist/model-setup-runtime.d.ts.map +1 -0
  352. package/dist/model-setup-runtime.js +26 -0
  353. package/dist/model-stream-runtime.d.ts +47 -0
  354. package/dist/model-stream-runtime.d.ts.map +1 -0
  355. package/dist/model-stream-runtime.js +136 -0
  356. package/dist/model-tool-runtime.d.ts +114 -0
  357. package/dist/model-tool-runtime.d.ts.map +1 -0
  358. package/dist/model-tool-runtime.js +144 -0
  359. package/dist/natural-command-bridge.d.ts +158 -0
  360. package/dist/natural-command-bridge.d.ts.map +1 -0
  361. package/dist/natural-command-bridge.js +36 -0
  362. package/dist/pending-details-presenter.d.ts +8 -0
  363. package/dist/pending-details-presenter.d.ts.map +1 -0
  364. package/dist/pending-details-presenter.js +12 -0
  365. package/dist/permission-approval-runtime.d.ts +28 -0
  366. package/dist/permission-approval-runtime.d.ts.map +1 -0
  367. package/dist/permission-approval-runtime.js +136 -0
  368. package/dist/permission-continuation-runtime.d.ts +90 -0
  369. package/dist/permission-continuation-runtime.d.ts.map +1 -0
  370. package/dist/permission-continuation-runtime.js +68 -0
  371. package/dist/permission-policy-engine.d.ts +51 -0
  372. package/dist/permission-policy-engine.d.ts.map +1 -0
  373. package/dist/permission-policy-engine.js +12 -0
  374. package/dist/permission-presenter.d.ts +13 -0
  375. package/dist/permission-presenter.d.ts.map +1 -0
  376. package/dist/permission-presenter.js +8 -0
  377. package/dist/persistent-history.d.ts +18 -0
  378. package/dist/persistent-history.d.ts.map +1 -0
  379. package/dist/persistent-history.js +126 -0
  380. package/dist/platform-security.d.ts +4 -0
  381. package/dist/platform-security.d.ts.map +1 -0
  382. package/dist/platform-security.js +10 -0
  383. package/dist/process-command-runtime.d.ts +9 -0
  384. package/dist/process-command-runtime.d.ts.map +1 -0
  385. package/dist/process-command-runtime.js +11 -0
  386. package/dist/process-guard.d.ts +56 -0
  387. package/dist/process-guard.d.ts.map +1 -0
  388. package/dist/process-guard.js +22 -0
  389. package/dist/prompt-command-runtime.d.ts +12 -0
  390. package/dist/prompt-command-runtime.d.ts.map +1 -0
  391. package/dist/prompt-command-runtime.js +10 -0
  392. package/dist/prompt-stash.d.ts +15 -0
  393. package/dist/prompt-stash.d.ts.map +1 -0
  394. package/dist/prompt-stash.js +8 -0
  395. package/dist/provider-circuit-breaker.d.ts +132 -0
  396. package/dist/provider-circuit-breaker.d.ts.map +1 -0
  397. package/dist/provider-circuit-breaker.js +31 -0
  398. package/dist/provider-loop-runtime.d.ts +18 -0
  399. package/dist/provider-loop-runtime.d.ts.map +1 -0
  400. package/dist/provider-loop-runtime.js +16 -0
  401. package/dist/remote-command-runtime.d.ts +47 -0
  402. package/dist/remote-command-runtime.d.ts.map +1 -0
  403. package/dist/remote-command-runtime.js +125 -0
  404. package/dist/remote-inbound-bridge-runtime.d.ts +152 -0
  405. package/dist/remote-inbound-bridge-runtime.d.ts.map +1 -0
  406. package/dist/remote-inbound-bridge-runtime.js +44 -0
  407. package/dist/remote-mcp-presenter.d.ts +5 -0
  408. package/dist/remote-mcp-presenter.d.ts.map +1 -0
  409. package/dist/remote-mcp-presenter.js +10 -0
  410. package/dist/remote-repl-bridge-runtime.d.ts +134 -0
  411. package/dist/remote-repl-bridge-runtime.d.ts.map +1 -0
  412. package/dist/remote-repl-bridge-runtime.js +20 -0
  413. package/dist/remote-transport.d.ts +50 -0
  414. package/dist/remote-transport.d.ts.map +1 -0
  415. package/dist/remote-transport.js +14 -0
  416. package/dist/request-lifecycle-presenter.d.ts +25 -0
  417. package/dist/request-lifecycle-presenter.d.ts.map +1 -0
  418. package/dist/request-lifecycle-presenter.js +22 -0
  419. package/dist/runner-runtime.d.ts +41 -0
  420. package/dist/runner-runtime.d.ts.map +1 -0
  421. package/dist/runner-runtime.js +35 -0
  422. package/dist/runtime-budget.d.ts +38 -0
  423. package/dist/runtime-budget.d.ts.map +1 -0
  424. package/dist/runtime-budget.js +78 -0
  425. package/dist/runtime-path-marker.d.ts +112 -0
  426. package/dist/runtime-path-marker.d.ts.map +1 -0
  427. package/dist/runtime-path-marker.js +18 -0
  428. package/dist/runtime-status-presenter.d.ts +22 -0
  429. package/dist/runtime-status-presenter.d.ts.map +1 -0
  430. package/dist/runtime-status-presenter.js +15 -0
  431. package/dist/runtime-status-snapshot.d.ts +52 -0
  432. package/dist/runtime-status-snapshot.d.ts.map +1 -0
  433. package/dist/runtime-status-snapshot.js +11 -0
  434. package/dist/runtime-utils.d.ts +2 -0
  435. package/dist/runtime-utils.d.ts.map +1 -0
  436. package/dist/runtime-utils.js +6 -0
  437. package/dist/shell/clipboard.d.ts +23 -0
  438. package/dist/shell/clipboard.d.ts.map +1 -0
  439. package/dist/shell/clipboard.js +8 -0
  440. package/dist/shell/components/AgentProgressTree.d.ts +9 -0
  441. package/dist/shell/components/AgentProgressTree.d.ts.map +1 -0
  442. package/dist/shell/components/AgentProgressTree.js +9 -0
  443. package/dist/shell/components/BackgroundTaskOverlay.d.ts +8 -0
  444. package/dist/shell/components/BackgroundTaskOverlay.d.ts.map +1 -0
  445. package/dist/shell/components/BackgroundTaskOverlay.js +8 -0
  446. package/dist/shell/components/BtwPanel.d.ts +16 -0
  447. package/dist/shell/components/BtwPanel.d.ts.map +1 -0
  448. package/dist/shell/components/BtwPanel.js +8 -0
  449. package/dist/shell/components/CommandPanel.d.ts +11 -0
  450. package/dist/shell/components/CommandPanel.d.ts.map +1 -0
  451. package/dist/shell/components/CommandPanel.js +8 -0
  452. package/dist/shell/components/Composer.d.ts +187 -0
  453. package/dist/shell/components/Composer.d.ts.map +1 -0
  454. package/dist/shell/components/Composer.js +99 -0
  455. package/dist/shell/components/ConfigPanel.d.ts +11 -0
  456. package/dist/shell/components/ConfigPanel.d.ts.map +1 -0
  457. package/dist/shell/components/ConfigPanel.js +8 -0
  458. package/dist/shell/components/CtrlOToExpand.d.ts +30 -0
  459. package/dist/shell/components/CtrlOToExpand.d.ts.map +1 -0
  460. package/dist/shell/components/CtrlOToExpand.js +16 -0
  461. package/dist/shell/components/HelpPanel.d.ts +19 -0
  462. package/dist/shell/components/HelpPanel.d.ts.map +1 -0
  463. package/dist/shell/components/HelpPanel.js +8 -0
  464. package/dist/shell/components/HistorySearchPanel.d.ts +14 -0
  465. package/dist/shell/components/HistorySearchPanel.d.ts.map +1 -0
  466. package/dist/shell/components/HistorySearchPanel.js +104 -0
  467. package/dist/shell/components/MessageMarkdown.d.ts +34 -0
  468. package/dist/shell/components/MessageMarkdown.d.ts.map +1 -0
  469. package/dist/shell/components/MessageMarkdown.js +18 -0
  470. package/dist/shell/components/MessageResponse.d.ts +14 -0
  471. package/dist/shell/components/MessageResponse.d.ts.map +1 -0
  472. package/dist/shell/components/MessageResponse.js +6 -0
  473. package/dist/shell/components/MouseInputRouter.d.ts +28 -0
  474. package/dist/shell/components/MouseInputRouter.d.ts.map +1 -0
  475. package/dist/shell/components/MouseInputRouter.js +84 -0
  476. package/dist/shell/components/NotificationStack.d.ts +19 -0
  477. package/dist/shell/components/NotificationStack.d.ts.map +1 -0
  478. package/dist/shell/components/NotificationStack.js +6 -0
  479. package/dist/shell/components/OutputLine.d.ts +19 -0
  480. package/dist/shell/components/OutputLine.d.ts.map +1 -0
  481. package/dist/shell/components/OutputLine.js +38 -0
  482. package/dist/shell/components/ProductBlock.d.ts +10 -0
  483. package/dist/shell/components/ProductBlock.d.ts.map +1 -0
  484. package/dist/shell/components/ProductBlock.js +12 -0
  485. package/dist/shell/components/ScrollViewport.d.ts +43 -0
  486. package/dist/shell/components/ScrollViewport.d.ts.map +1 -0
  487. package/dist/shell/components/ScrollViewport.js +86 -0
  488. package/dist/shell/components/SessionsPanel.d.ts +24 -0
  489. package/dist/shell/components/SessionsPanel.d.ts.map +1 -0
  490. package/dist/shell/components/SessionsPanel.js +8 -0
  491. package/dist/shell/components/ShellApp.d.ts +8 -0
  492. package/dist/shell/components/ShellApp.d.ts.map +1 -0
  493. package/dist/shell/components/ShellApp.js +45 -0
  494. package/dist/shell/components/ShortcutPanel.d.ts +14 -0
  495. package/dist/shell/components/ShortcutPanel.d.ts.map +1 -0
  496. package/dist/shell/components/ShortcutPanel.js +59 -0
  497. package/dist/shell/components/SlashSuggestions.d.ts +24 -0
  498. package/dist/shell/components/SlashSuggestions.d.ts.map +1 -0
  499. package/dist/shell/components/SlashSuggestions.js +7 -0
  500. package/dist/shell/components/StatusFooter.d.ts +30 -0
  501. package/dist/shell/components/StatusFooter.d.ts.map +1 -0
  502. package/dist/shell/components/StatusFooter.js +7 -0
  503. package/dist/shell/components/StatusTray.d.ts +9 -0
  504. package/dist/shell/components/StatusTray.d.ts.map +1 -0
  505. package/dist/shell/components/StatusTray.js +6 -0
  506. package/dist/shell/components/StructuredDiff.d.ts +9 -0
  507. package/dist/shell/components/StructuredDiff.d.ts.map +1 -0
  508. package/dist/shell/components/StructuredDiff.js +7 -0
  509. package/dist/shell/components/TaskListView.d.ts +9 -0
  510. package/dist/shell/components/TaskListView.d.ts.map +1 -0
  511. package/dist/shell/components/TaskListView.js +9 -0
  512. package/dist/shell/components/TaskSuggestionBar.d.ts +15 -0
  513. package/dist/shell/components/TaskSuggestionBar.d.ts.map +1 -0
  514. package/dist/shell/components/TaskSuggestionBar.js +8 -0
  515. package/dist/shell/components/UnseenMessagePill.d.ts +12 -0
  516. package/dist/shell/components/UnseenMessagePill.d.ts.map +1 -0
  517. package/dist/shell/components/UnseenMessagePill.js +6 -0
  518. package/dist/shell/components/WorkflowProgressView.d.ts +9 -0
  519. package/dist/shell/components/WorkflowProgressView.d.ts.map +1 -0
  520. package/dist/shell/components/WorkflowProgressView.js +9 -0
  521. package/dist/shell/components/useAnchoredCursor.d.ts +32 -0
  522. package/dist/shell/components/useAnchoredCursor.d.ts.map +1 -0
  523. package/dist/shell/components/useAnchoredCursor.js +6 -0
  524. package/dist/shell/hooks/useRenderThrottle.d.ts +2 -0
  525. package/dist/shell/hooks/useRenderThrottle.d.ts.map +1 -0
  526. package/dist/shell/hooks/useRenderThrottle.js +35 -0
  527. package/dist/shell/hooks/useScrollBatcher.d.ts +10 -0
  528. package/dist/shell/hooks/useScrollBatcher.d.ts.map +1 -0
  529. package/dist/shell/hooks/useScrollBatcher.js +23 -0
  530. package/dist/shell/hooks/useScrollRuntime.d.ts +2 -0
  531. package/dist/shell/hooks/useScrollRuntime.d.ts.map +1 -0
  532. package/dist/shell/hooks/useScrollRuntime.js +6 -0
  533. package/dist/shell/hyperlink-utils.d.ts +18 -0
  534. package/dist/shell/hyperlink-utils.d.ts.map +1 -0
  535. package/dist/shell/hyperlink-utils.js +8 -0
  536. package/dist/shell/ink-renderer.d.ts +18 -0
  537. package/dist/shell/ink-renderer.d.ts.map +1 -0
  538. package/dist/shell/ink-renderer.js +54 -0
  539. package/dist/shell/models/command-transcript-presenter.d.ts +73 -0
  540. package/dist/shell/models/command-transcript-presenter.d.ts.map +1 -0
  541. package/dist/shell/models/command-transcript-presenter.js +26 -0
  542. package/dist/shell/models/help-panel.d.ts +37 -0
  543. package/dist/shell/models/help-panel.d.ts.map +1 -0
  544. package/dist/shell/models/help-panel.js +10 -0
  545. package/dist/shell/models/permission-elevation.d.ts +65 -0
  546. package/dist/shell/models/permission-elevation.d.ts.map +1 -0
  547. package/dist/shell/models/permission-elevation.js +10 -0
  548. package/dist/shell/models/permission-explanation.d.ts +45 -0
  549. package/dist/shell/models/permission-explanation.d.ts.map +1 -0
  550. package/dist/shell/models/permission-explanation.js +14 -0
  551. package/dist/shell/models/session-panel.d.ts +22 -0
  552. package/dist/shell/models/session-panel.d.ts.map +1 -0
  553. package/dist/shell/models/session-panel.js +18 -0
  554. package/dist/shell/models/task-scroll-state.d.ts +24 -0
  555. package/dist/shell/models/task-scroll-state.d.ts.map +1 -0
  556. package/dist/shell/models/task-scroll-state.js +26 -0
  557. package/dist/shell/models/terminal-input-runtime.d.ts +37 -0
  558. package/dist/shell/models/terminal-input-runtime.d.ts.map +1 -0
  559. package/dist/shell/models/terminal-input-runtime.js +18 -0
  560. package/dist/shell/models/transcript-scroll-state.d.ts +57 -0
  561. package/dist/shell/models/transcript-scroll-state.d.ts.map +1 -0
  562. package/dist/shell/models/transcript-scroll-state.js +12 -0
  563. package/dist/shell/models/transcript-selection-state.d.ts +39 -0
  564. package/dist/shell/models/transcript-selection-state.d.ts.map +1 -0
  565. package/dist/shell/models/transcript-selection-state.js +25 -0
  566. package/dist/shell/models/wheel-acceleration.d.ts +52 -0
  567. package/dist/shell/models/wheel-acceleration.d.ts.map +1 -0
  568. package/dist/shell/models/wheel-acceleration.js +6 -0
  569. package/dist/shell/output-utils.d.ts +22 -0
  570. package/dist/shell/output-utils.d.ts.map +1 -0
  571. package/dist/shell/output-utils.js +12 -0
  572. package/dist/shell/plain-renderer.d.ts +12 -0
  573. package/dist/shell/plain-renderer.d.ts.map +1 -0
  574. package/dist/shell/plain-renderer.js +13 -0
  575. package/dist/shell/progress-views.d.ts +10 -0
  576. package/dist/shell/progress-views.d.ts.map +1 -0
  577. package/dist/shell/progress-views.js +17 -0
  578. package/dist/shell/stdout-flush-barrier.d.ts +39 -0
  579. package/dist/shell/stdout-flush-barrier.d.ts.map +1 -0
  580. package/dist/shell/stdout-flush-barrier.js +10 -0
  581. package/dist/shell/terminal-capability.d.ts +54 -0
  582. package/dist/shell/terminal-capability.d.ts.map +1 -0
  583. package/dist/shell/terminal-capability.js +10 -0
  584. package/dist/shell/terminal-interaction-runtime.d.ts +11 -0
  585. package/dist/shell/terminal-interaction-runtime.d.ts.map +1 -0
  586. package/dist/shell/terminal-interaction-runtime.js +38 -0
  587. package/dist/shell/terminal-state-recovery.d.ts +52 -0
  588. package/dist/shell/terminal-state-recovery.d.ts.map +1 -0
  589. package/dist/shell/terminal-state-recovery.js +11 -0
  590. package/dist/shell/text-utils.d.ts +40 -0
  591. package/dist/shell/text-utils.d.ts.map +1 -0
  592. package/dist/shell/text-utils.js +26 -0
  593. package/dist/shell/theme.d.ts +41 -0
  594. package/dist/shell/theme.d.ts.map +1 -0
  595. package/dist/shell/theme.js +8 -0
  596. package/dist/shell/types.d.ts +784 -0
  597. package/dist/shell/types.d.ts.map +1 -0
  598. package/dist/shell/types.js +0 -0
  599. package/dist/shell/view-model.d.ts +82 -0
  600. package/dist/shell/view-model.d.ts.map +1 -0
  601. package/dist/shell/view-model.js +48 -0
  602. package/dist/slash-command-runtime.d.ts +64 -0
  603. package/dist/slash-command-runtime.d.ts.map +1 -0
  604. package/dist/slash-command-runtime.js +186 -0
  605. package/dist/slash-dispatch.d.ts +48 -0
  606. package/dist/slash-dispatch.d.ts.map +1 -0
  607. package/dist/slash-dispatch.js +53 -0
  608. package/dist/startup-runtime.d.ts +48 -0
  609. package/dist/startup-runtime.d.ts.map +1 -0
  610. package/dist/startup-runtime.js +43 -0
  611. package/dist/terminal-readiness-presenter.d.ts +131 -0
  612. package/dist/terminal-readiness-presenter.d.ts.map +1 -0
  613. package/dist/terminal-readiness-presenter.js +16 -0
  614. package/dist/terminal-readiness-runtime.d.ts +5 -0
  615. package/dist/terminal-readiness-runtime.d.ts.map +1 -0
  616. package/dist/terminal-readiness-runtime.js +15 -0
  617. package/dist/terminal-setup-runtime.d.ts +34 -0
  618. package/dist/terminal-setup-runtime.d.ts.map +1 -0
  619. package/dist/terminal-setup-runtime.js +257 -0
  620. package/dist/tool-output-presenter.d.ts +38 -0
  621. package/dist/tool-output-presenter.d.ts.map +1 -0
  622. package/dist/tool-output-presenter.js +16 -0
  623. package/dist/tool-result-budget.d.ts +42 -0
  624. package/dist/tool-result-budget.d.ts.map +1 -0
  625. package/dist/tool-result-budget.js +11 -0
  626. package/dist/tui-agent-job-runtime.d.ts +38 -0
  627. package/dist/tui-agent-job-runtime.d.ts.map +1 -0
  628. package/dist/tui-agent-job-runtime.js +86 -0
  629. package/dist/tui-context-runtime.d.ts +426 -0
  630. package/dist/tui-context-runtime.d.ts.map +1 -0
  631. package/dist/tui-context-runtime.js +65 -0
  632. package/dist/tui-data-types.d.ts +923 -0
  633. package/dist/tui-data-types.d.ts.map +1 -0
  634. package/dist/tui-data-types.js +0 -0
  635. package/dist/tui-details-runtime.d.ts +25 -0
  636. package/dist/tui-details-runtime.d.ts.map +1 -0
  637. package/dist/tui-details-runtime.js +29 -0
  638. package/dist/tui-memory-runtime.d.ts +33 -0
  639. package/dist/tui-memory-runtime.d.ts.map +1 -0
  640. package/dist/tui-memory-runtime.js +58 -0
  641. package/dist/tui-messages.d.ts +4 -0
  642. package/dist/tui-messages.d.ts.map +1 -0
  643. package/dist/tui-messages.js +6 -0
  644. package/dist/tui-model-runtime.d.ts +30 -0
  645. package/dist/tui-model-runtime.d.ts.map +1 -0
  646. package/dist/tui-model-runtime.js +39 -0
  647. package/dist/tui-output-surface.d.ts +141 -0
  648. package/dist/tui-output-surface.d.ts.map +1 -0
  649. package/dist/tui-output-surface.js +55 -0
  650. package/dist/tui-permission-runtime.d.ts +62 -0
  651. package/dist/tui-permission-runtime.d.ts.map +1 -0
  652. package/dist/tui-permission-runtime.js +24 -0
  653. package/dist/tui-state-runtime.d.ts +21 -0
  654. package/dist/tui-state-runtime.d.ts.map +1 -0
  655. package/dist/tui-state-runtime.js +47 -0
  656. package/dist/turn-continuity-runtime.d.ts +30 -0
  657. package/dist/turn-continuity-runtime.d.ts.map +1 -0
  658. package/dist/turn-continuity-runtime.js +8 -0
  659. package/dist/undo-ring.d.ts +16 -0
  660. package/dist/undo-ring.d.ts.map +1 -0
  661. package/dist/undo-ring.js +12 -0
  662. package/dist/usage-stats-presenter.d.ts +17 -0
  663. package/dist/usage-stats-presenter.d.ts.map +1 -0
  664. package/dist/usage-stats-presenter.js +22 -0
  665. package/dist/user-state-signal-runtime.d.ts +33 -0
  666. package/dist/user-state-signal-runtime.d.ts.map +1 -0
  667. package/dist/user-state-signal-runtime.js +8 -0
  668. package/dist/verification-command-runtime.d.ts +25 -0
  669. package/dist/verification-command-runtime.d.ts.map +1 -0
  670. package/dist/verification-command-runtime.js +51 -0
  671. package/dist/verification-level.d.ts +93 -0
  672. package/dist/verification-level.d.ts.map +1 -0
  673. package/dist/verification-level.js +18 -0
  674. package/dist/workflow-agent-runtime-bridge.d.ts +169 -0
  675. package/dist/workflow-agent-runtime-bridge.d.ts.map +1 -0
  676. package/dist/workflow-agent-runtime-bridge.js +9 -0
  677. package/dist/workflow-command-runtime.d.ts +94 -0
  678. package/dist/workflow-command-runtime.d.ts.map +1 -0
  679. package/dist/workflow-command-runtime.js +114 -0
  680. package/dist/workflow-plan-schema.d.ts +161 -0
  681. package/dist/workflow-plan-schema.d.ts.map +1 -0
  682. package/dist/workflow-plan-schema.js +12 -0
  683. package/dist/workflow-planner-entry.d.ts +52 -0
  684. package/dist/workflow-planner-entry.d.ts.map +1 -0
  685. package/dist/workflow-planner-entry.js +328 -0
  686. package/dist/workflow-task-surface.d.ts +39 -0
  687. package/dist/workflow-task-surface.d.ts.map +1 -0
  688. package/dist/workflow-task-surface.js +7 -0
  689. package/dist/workspace-reference-cache.d.ts +110 -0
  690. package/dist/workspace-reference-cache.d.ts.map +1 -0
  691. package/dist/workspace-reference-cache.js +12 -0
  692. package/package.json +41 -0
@@ -0,0 +1,2003 @@
1
+ // src/natural-command-bridge.ts
2
+ import { randomUUID } from "crypto";
3
+ var SLASH_COMMAND_REGISTRY = [
4
+ { slash: "/help", capabilityId: "help", userVisible: true },
5
+ { slash: "/features", capabilityId: "features", userVisible: true },
6
+ { slash: "/capabilities", capabilityId: "capabilities", userVisible: true },
7
+ { slash: "/apps", capabilityId: "apps", userVisible: true },
8
+ { slash: "/language", capabilityId: "language", userVisible: true },
9
+ { slash: "/model", capabilityId: "model", userVisible: true },
10
+ { slash: "/vision", capabilityId: "vision", userVisible: true },
11
+ { slash: "/image", capabilityId: "image", userVisible: true },
12
+ { slash: "/skills", capabilityId: "skills", userVisible: true },
13
+ { slash: "/workflows", capabilityId: "workflows", userVisible: true },
14
+ { slash: "/plugins", capabilityId: "plugins", userVisible: true },
15
+ { slash: "/doctor", capabilityId: "readiness", userVisible: true },
16
+ { slash: "/problems", capabilityId: "problems", userVisible: true },
17
+ { slash: "/sessions", capabilityId: "sessions", userVisible: true },
18
+ { slash: "/resume", capabilityId: "resume", userVisible: true },
19
+ { slash: "/branch", capabilityId: "branch", userVisible: true },
20
+ // D.13R Git Readiness — 只读发现层入口(commit/reset/checkout/worktree add/remove
21
+ // 仍由用户通过 Bash 工具走现有 permission-policy-engine 四档权限链)。
22
+ { slash: "/git", capabilityId: "git", userVisible: true },
23
+ { slash: "/worktree", capabilityId: "worktree", userVisible: true },
24
+ { slash: "/checkpoint", capabilityId: "checkpoint", userVisible: true },
25
+ { slash: "/memory", capabilityId: "memory", userVisible: true },
26
+ { slash: "/mode", capabilityId: "mode", userVisible: true },
27
+ { slash: "/tab", capabilityId: "tab", userVisible: true },
28
+ { slash: "/esc", capabilityId: "esc", userVisible: true },
29
+ { slash: "/enter", capabilityId: "enter", userVisible: true },
30
+ { slash: "/trust", capabilityId: "trust", userVisible: true },
31
+ { slash: "/autopilot", capabilityId: "autopilot", userVisible: true },
32
+ { slash: "/brief", capabilityId: "brief", userVisible: true },
33
+ { slash: "/plan", capabilityId: "plan", userVisible: true },
34
+ { slash: "/permissions", capabilityId: "permissions", userVisible: true },
35
+ { slash: "/background", capabilityId: "background", userVisible: true },
36
+ { slash: "/job", capabilityId: "job", userVisible: true },
37
+ { slash: "/batch", capabilityId: "job", userVisible: true },
38
+ { slash: "/remote", capabilityId: "remote", userVisible: true },
39
+ { slash: "/details", capabilityId: "details", userVisible: true },
40
+ { slash: "/agents", capabilityId: "agents", userVisible: true },
41
+ { slash: "/fork", capabilityId: "fork", userVisible: true },
42
+ { slash: "/rewind", capabilityId: "rewind", userVisible: true },
43
+ { slash: "/btw", capabilityId: "btw", userVisible: true },
44
+ { slash: "/interrupt", capabilityId: "interrupt", userVisible: true },
45
+ { slash: "/claim-check", capabilityId: "claim-check", userVisible: true },
46
+ { slash: "/verify", capabilityId: "verify", userVisible: true },
47
+ { slash: "/review", capabilityId: "review", userVisible: true },
48
+ { slash: "/commit", capabilityId: "commit", userVisible: true, promptCommand: true },
49
+ { slash: "/init", capabilityId: "init", userVisible: true, promptCommand: true },
50
+ {
51
+ slash: "/security-review",
52
+ capabilityId: "security-review",
53
+ userVisible: true,
54
+ promptCommand: true
55
+ },
56
+ {
57
+ slash: "/commit-push-pr",
58
+ capabilityId: "commit-push-pr",
59
+ userVisible: true,
60
+ promptCommand: true
61
+ },
62
+ {
63
+ slash: "/init-verifiers",
64
+ capabilityId: "init-verifiers",
65
+ userVisible: true,
66
+ promptCommand: true
67
+ },
68
+ { slash: "/cache-log", capabilityId: "cache-log", userVisible: true },
69
+ { slash: "/cache", capabilityId: "cache", userVisible: true },
70
+ { slash: "/compact", capabilityId: "compact", userVisible: true },
71
+ { slash: "/context", capabilityId: "compact", userVisible: true },
72
+ { slash: "/break-cache", capabilityId: "break-cache", userVisible: true },
73
+ { slash: "/mcp", capabilityId: "mcp", userVisible: true },
74
+ { slash: "/index", capabilityId: "index", userVisible: true },
75
+ { slash: "/usage", capabilityId: "usage", userVisible: true },
76
+ { slash: "/stats", capabilityId: "stats", userVisible: true },
77
+ { slash: "/read", capabilityId: "read", userVisible: true },
78
+ { slash: "/write", capabilityId: "write", userVisible: true },
79
+ { slash: "/edit", capabilityId: "edit", userVisible: true },
80
+ { slash: "/multiedit", capabilityId: "multiedit", userVisible: true },
81
+ { slash: "/grep", capabilityId: "grep", userVisible: true },
82
+ { slash: "/glob", capabilityId: "glob", userVisible: true },
83
+ { slash: "/bash", capabilityId: "bash", userVisible: true },
84
+ { slash: "/todo", capabilityId: "todo", userVisible: true },
85
+ { slash: "/diff", capabilityId: "diff", userVisible: true },
86
+ { slash: "/config", capabilityId: "config", userVisible: true },
87
+ { slash: "/exit", capabilityId: "exit", userVisible: true },
88
+ { slash: "/shortcuts", capabilityId: "shortcuts", userVisible: true },
89
+ { slash: "/terminal-setup", capabilityId: "terminal-setup", userVisible: true },
90
+ {
91
+ slash: "/status",
92
+ capabilityId: "status",
93
+ userVisible: false,
94
+ hiddenReason: "status bar is emitted automatically"
95
+ }
96
+ ];
97
+ var USER_VISIBLE_SLASH_COMMANDS = SLASH_COMMAND_REGISTRY.filter((item) => item.userVisible).map(
98
+ (item) => item.slash
99
+ );
100
+ function findSlashCommandRegistryEntry(slash) {
101
+ return SLASH_COMMAND_REGISTRY.find((item) => item.slash === slash);
102
+ }
103
+ var COMMAND_CAPABILITY_DATA = [
104
+ cap(
105
+ "help",
106
+ "/help",
107
+ ["help", "\u5E2E\u52A9", "commands"],
108
+ "\u5E2E\u52A9",
109
+ "Help",
110
+ "\u663E\u793A\u547D\u4EE4\u6E05\u5355\u3002",
111
+ "Shows the command list.",
112
+ "\u4E86\u89E3\u53EF\u7528\u547D\u4EE4\u6216\u81EA\u7136\u8BED\u8A00\u6865\u80FD\u529B\u3002",
113
+ "Use for available commands or bridge capabilities.",
114
+ "readonly"
115
+ ),
116
+ cap(
117
+ "features",
118
+ "/features",
119
+ ["features", "feature policy", "\u529F\u80FD\u5F00\u5173", "\u9ED8\u8BA4\u529F\u80FD"],
120
+ "\u529F\u80FD\u7B56\u7565",
121
+ "Feature policy",
122
+ "\u663E\u793A\u9ED8\u8BA4\u529F\u80FD\u7B56\u7565\u3001\u63A8\u8350\u5E95\u5EA7\u3001\u9AD8\u7EA7/\u5371\u9669/\u672A\u652F\u6301\u8FB9\u754C\u3002",
123
+ "Shows default feature policy, recommended foundation, advanced/dangerous/unsupported boundaries.",
124
+ "\u6838\u5BF9\u9ED8\u8BA4\u529F\u80FD\u5F00\u5173\u3001\u81EA\u52A8\u6267\u884C\u8FB9\u754C\u548C\u6743\u9650\u98CE\u9669\u3002",
125
+ "Use to audit default feature switches, auto-run boundaries, and permission risk.",
126
+ "readonly"
127
+ ),
128
+ cap(
129
+ "capabilities",
130
+ "/capabilities",
131
+ ["capabilities", "capability", "app bridge", "\u5916\u90E8\u80FD\u529B", "\u5E94\u7528\u6865"],
132
+ "\u5916\u90E8\u80FD\u529B",
133
+ "Capabilities",
134
+ "\u67E5\u770B Capability Runtime \u7684\u53EF\u7528\u80FD\u529B\u3001\u8FDE\u63A5\u72B6\u6001\u548C mock \u6267\u884C\u5165\u53E3\u3002",
135
+ "Shows Capability Runtime entries, connection status, and mock execution entry.",
136
+ "\u9700\u8981\u67E5\u770B\u5916\u90E8 app/plugin/MCP \u80FD\u529B\u6865\u63A5\u3001doctor \u6216 mock capability \u65F6\u4F7F\u7528\u3002",
137
+ "Use for external app/plugin/MCP capability bridge discovery, doctor, or mock capability checks.",
138
+ "readonly",
139
+ { group: "diagnostics" }
140
+ ),
141
+ cap(
142
+ "apps",
143
+ "/apps",
144
+ ["apps", "connect app", "connector", "http connector", "\u8FDE\u63A5\u5E94\u7528", "\u5E94\u7528\u6865"],
145
+ "\u5E94\u7528\u8FDE\u63A5",
146
+ "Apps",
147
+ "\u8FDE\u63A5\u3001\u67E5\u770B\u3001\u8BCA\u65AD\u6216\u65AD\u5F00 Local HTTP Connector app\u3002",
148
+ "Connects, lists, diagnoses, or disconnects Local HTTP Connector apps.",
149
+ "\u9700\u8981\u628A\u672C\u5730\u5916\u90E8\u5E94\u7528\u63A5\u5165 Capability Runtime \u65F6\u4F7F\u7528\u3002",
150
+ "Use when connecting a local external app into Capability Runtime.",
151
+ "readonly",
152
+ { group: "diagnostics" }
153
+ ),
154
+ cap(
155
+ "language",
156
+ "/language",
157
+ ["\u8BED\u8A00", "language"],
158
+ "\u8BED\u8A00",
159
+ "Language",
160
+ "\u67E5\u770B\u6216\u5207\u6362\u754C\u9762\u8BED\u8A00\u3002",
161
+ "Shows or switches UI language.",
162
+ "\u9700\u8981\u4E2D\u82F1\u6587\u4F53\u9A8C\u8DDF\u968F\u504F\u597D\u65F6\u4F7F\u7528\u3002",
163
+ "Use when changing Chinese/English UI preference.",
164
+ "config_write",
165
+ { writesConfig: true }
166
+ ),
167
+ cap(
168
+ "model",
169
+ "/model",
170
+ ["\u6A21\u578B", "provider", "route", "what model", "current model"],
171
+ "\u6A21\u578B",
172
+ "Model",
173
+ "\u67E5\u770B\u5F53\u524D\u6A21\u578B\u4E0E\u89D2\u8272\u8DEF\u7531\uFF1B\u5207\u6362\u8DEF\u7531\u9700\u8981\u786E\u8BA4\u3002",
174
+ "Shows current model and role routes; route changes need confirmation.",
175
+ "\u8BE2\u95EE\u5F53\u524D\u6A21\u578B\u3001provider\u3001\u6A21\u578B\u98CE\u9669\u6216\u8DEF\u7531\u3002",
176
+ "Use for current model, provider, or model routing questions.",
177
+ "start_gate"
178
+ ),
179
+ cap(
180
+ "vision",
181
+ "/vision",
182
+ ["vision", "\u56FE\u7247", "image input"],
183
+ "\u89C6\u89C9\u8F93\u5165",
184
+ "Vision",
185
+ "\u8BB0\u5F55\u56FE\u7247\u89C2\u5BDF\u8BC1\u636E\uFF0C\u4E0D\u76F4\u63A5\u5199\u4EE3\u7801\u3002",
186
+ "Records vision evidence without direct code writes.",
187
+ "\u9700\u8981\u57FA\u4E8E\u56FE\u7247\u8DEF\u5F84\u751F\u6210 evidence\u3002",
188
+ "Use for image-path evidence capture.",
189
+ "start_gate"
190
+ ),
191
+ cap(
192
+ "image",
193
+ "/image",
194
+ ["generate image", "\u751F\u6210\u56FE\u7247"],
195
+ "\u56FE\u7247\u751F\u6210",
196
+ "Image",
197
+ "\u751F\u6210\u672C\u5730\u56FE\u7247\u8D44\u4EA7 metadata\u3002",
198
+ "Generates local image asset metadata.",
199
+ "\u9700\u8981\u56FE\u7247\u89D2\u8272\u751F\u6210\u8D44\u4EA7\u3002",
200
+ "Use for image-role asset generation.",
201
+ "start_gate"
202
+ ),
203
+ cap(
204
+ "skills",
205
+ "/skills",
206
+ ["skill", "skills", "\u6280\u80FD", "\u80FD\u529B"],
207
+ "\u6280\u80FD",
208
+ "Skills",
209
+ "\u5217\u51FA\u672C\u5730 skill \u6458\u8981\uFF1B\u542F\u7528\u7B2C\u4E09\u65B9 skill \u4E0D\u76F4\u901A\u3002",
210
+ "Lists local skill summaries; enabling third-party skills is not direct.",
211
+ "\u67E5\u770B\u6280\u80FD\u662F\u5426\u542F\u7528\u3001\u6709\u4EC0\u4E48\u6280\u80FD\u3001\u5982\u4F55\u6CE8\u518C\u6280\u80FD\u3002",
212
+ "Use to inspect skills or local registration paths.",
213
+ "start_gate"
214
+ ),
215
+ cap(
216
+ "workflows",
217
+ "/workflows",
218
+ [
219
+ "workflow",
220
+ "workflows",
221
+ "\u5DE5\u4F5C\u6D41",
222
+ "bug-fix",
223
+ "bug fix",
224
+ "plan workflow",
225
+ "workflow plan",
226
+ "\u5DE5\u4F5C\u6D41\u8BA1\u5212"
227
+ ],
228
+ "\u5DE5\u4F5C\u6D41",
229
+ "Workflows",
230
+ "\u5217\u51FA\u5DE5\u4F5C\u6D41\u6A21\u677F\uFF1B/workflows plan <\u76EE\u6807> \u751F\u6210\u8BA1\u5212\u9884\u89C8\u3002\u542F\u52A8\u6A21\u677F\u53EA\u5C55\u793A Start Gate\u3002",
231
+ "Lists workflow templates; /workflows plan <goal> generates a plan preview. Starting one only shows a Start Gate.",
232
+ "\u60F3\u77E5\u9053\u6709\u54EA\u4E9B\u5DE5\u4F5C\u6D41\u6216\u542F\u52A8 bug-fix/review \u6A21\u677F\uFF0C\u6216\u7528 /workflows plan \u751F\u6210\u8BA1\u5212\u9884\u89C8\u3002",
233
+ "Use to discover or start bug-fix/review workflows, or /workflows plan to generate a plan preview.",
234
+ "start_gate",
235
+ { runtimeStatusSubject: "workflow" }
236
+ ),
237
+ cap(
238
+ "plugins",
239
+ "/plugins",
240
+ ["plugin", "plugins", "\u63D2\u4EF6"],
241
+ "\u63D2\u4EF6",
242
+ "Plugins",
243
+ "\u5217\u51FA\u672C\u5730 plugin manifest \u4E0E\u8BCA\u65AD\uFF1B\u542F\u7528\u7B2C\u4E09\u65B9 plugin \u4E0D\u76F4\u901A\u3002",
244
+ "Lists local plugin manifests and doctor output; third-party enable is not direct.",
245
+ "\u67E5\u770B\u63D2\u4EF6\u72B6\u6001\u3001\u8D21\u732E\u9879\u3001\u52A0\u8F7D\u9519\u8BEF\u548C\u4FE1\u4EFB\u8FB9\u754C\u3002",
246
+ "Use for plugin state, contributions, load errors, and trust boundaries.",
247
+ "start_gate"
248
+ ),
249
+ cap(
250
+ "readiness",
251
+ "/doctor",
252
+ [
253
+ "doctor",
254
+ "doctor project",
255
+ "doctor runner",
256
+ "runner doctor",
257
+ "native runner",
258
+ "\u539F\u751F runner",
259
+ "readiness",
260
+ "ready",
261
+ "terminal readiness",
262
+ "project doctor",
263
+ "context picker",
264
+ "rollback coach",
265
+ "cost preview",
266
+ "drift linter",
267
+ "\u4F53\u68C0",
268
+ "\u5C31\u7EEA\u68C0\u67E5",
269
+ "\u9879\u76EE\u8BCA\u65AD",
270
+ "\u56DE\u6EDA\u5EFA\u8BAE",
271
+ "\u6210\u672C\u9884\u4F30",
272
+ "\u6F02\u79FB\u68C0\u67E5"
273
+ ],
274
+ "\u7EC8\u7AEF\u5C31\u7EEA\u8BCA\u65AD",
275
+ "Readiness doctor",
276
+ "\u663E\u793A\u672C\u5730/\u9759\u6001\u7EC8\u7AEF\u5C31\u7EEA\u3001Project Doctor\u3001drift/context/rollback/cost \u68C0\u67E5\uFF1B\u4E0D\u8FD0\u884C\u771F\u5B9E smoke\uFF0C\u4E5F\u4E0D\u58F0\u660E Beta PASS\u3002",
277
+ "Shows local/static terminal readiness plus Project Doctor, drift/context/rollback/cost checks; does not run real smoke or claim Beta PASS.",
278
+ "\u68C0\u67E5 provider\u3001index\u3001cache\u3001memory\u3001MCP\u3001background\u3001verification\u3001freshness\u3001project facts\u3001source-of-truth drift\u3001context refs\u3001rollback advice \u548C task cost \u8FB9\u754C\u3002",
279
+ "Use for provider, index, cache, memory, MCP, background, verification, freshness, project facts, source-of-truth drift, context refs, rollback advice, and task cost boundaries.",
280
+ "readonly"
281
+ ),
282
+ cap(
283
+ "problems",
284
+ "/problems",
285
+ ["problems", "problem panel", "\u95EE\u9898", "\u8BCA\u65AD\u95EE\u9898"],
286
+ "\u95EE\u9898\u9762\u677F",
287
+ "Problems",
288
+ "\u663E\u793A\u6765\u81EA verification/provider/background/freshness/index/project/drift/context/rollback/cost \u7684\u8F7B\u91CF\u95EE\u9898\u6458\u8981\u3002",
289
+ "Shows a lightweight problem summary from verification/provider/background/freshness/index/project/drift/context/rollback/cost.",
290
+ "\u67E5\u770B\u5F53\u524D\u963B\u585E\u3001\u8D85\u65F6\u3001stale\u3001provider failure\u3001\u9879\u76EE\u4E8B\u5B9E\u7F3A\u53E3\u3001\u6587\u6863\u6F02\u79FB\u6216\u7F3A\u5C11\u6765\u6E90\u8BC1\u636E\u7684\u95EE\u9898\u3002",
291
+ "Use for current blockers, timeouts, stale tasks, provider failures, project fact gaps, doc drift, or missing source evidence.",
292
+ "readonly"
293
+ ),
294
+ cap(
295
+ "hooks",
296
+ "/doctor",
297
+ ["hook", "hooks", "\u94A9\u5B50", "doctor hooks"],
298
+ "Hooks \u8BCA\u65AD",
299
+ "Hooks doctor",
300
+ "\u8BCA\u65AD hooks \u662F\u5426\u5F00\u542F\u3001\u6765\u6E90\u3001timeout\u3001\u65E5\u5FD7\u548C\u6743\u9650\u8FB9\u754C\uFF1B\u542F\u7528\u6216\u6267\u884C hook \u4E0D\u76F4\u901A\u3002",
301
+ "Diagnoses hook enablement, sources, timeout, logs, and permission boundary; hook enable/run is not direct.",
302
+ "\u8BE2\u95EE hook \u5F00\u6CA1\u5F00\u6216 hook \u98CE\u9669\u3002",
303
+ "Use when asking whether hooks are enabled or risky.",
304
+ "start_gate",
305
+ { hiddenReason: "listed as /doctor hooks in the readiness doctor help" }
306
+ ),
307
+ cap(
308
+ "sessions",
309
+ "/sessions",
310
+ ["sessions", "session list", "\u4F1A\u8BDD", "\u5386\u53F2\u4F1A\u8BDD"],
311
+ "\u4F1A\u8BDD\u5217\u8868",
312
+ "Sessions",
313
+ "\u5217\u51FA\u5F53\u524D\u9879\u76EE\u4F1A\u8BDD\u3002",
314
+ "Lists project sessions.",
315
+ "\u67E5\u770B\u5386\u53F2\u4F1A\u8BDD\u6216\u6062\u590D\u5165\u53E3\u3002",
316
+ "Use to inspect session history and resume options.",
317
+ "readonly"
318
+ ),
319
+ cap(
320
+ "resume",
321
+ "/resume",
322
+ ["resume", "\u6062\u590D", "continue", "last session"],
323
+ "\u6062\u590D\u4F1A\u8BDD",
324
+ "Resume",
325
+ "\u4ECE\u7ED3\u6784\u5316 handoff \u6062\u590D\u4F1A\u8BDD\uFF0C\u4E0D\u6CE8\u5165\u5B8C\u6574 transcript\u3002",
326
+ "Resumes from structured handoff without full transcript injection.",
327
+ "\u60F3\u6062\u590D\u4E0A\u6B21\u4F1A\u8BDD\u3002",
328
+ "Use to resume a prior session after a Start Gate.",
329
+ "start_gate"
330
+ ),
331
+ cap(
332
+ "branch",
333
+ "/branch",
334
+ ["branch", "\u5206\u652F", "branch session"],
335
+ "\u5206\u652F\u4F1A\u8BDD",
336
+ "Branch session",
337
+ "\u57FA\u4E8E handoff \u521B\u5EFA\u5206\u652F\u4F1A\u8BDD\u3002",
338
+ "Creates a branch session from handoff.",
339
+ "\u60F3\u8BD5\u9A8C\u53E6\u4E00\u6761\u601D\u8DEF\u3002",
340
+ "Use to try an alternate path after a Start Gate.",
341
+ "start_gate"
342
+ ),
343
+ cap(
344
+ "memory",
345
+ "/memory",
346
+ ["memory", "\u8BB0\u5FC6", "\u81EA\u52A8\u8BB0\u5FC6", "linghun.md"],
347
+ "\u8BB0\u5FC6",
348
+ "Memory",
349
+ "\u67E5\u770B LINGHUN.md\u3001\u5019\u9009/\u5DF2\u63A5\u53D7/\u7981\u7528\u8BB0\u5FC6\u3001\u53D7\u63A7\u6CE8\u5165\u7EDF\u8BA1\u548C\u5B58\u50A8\u8DEF\u5F84\uFF1Baccept/delete/disable \u9700\u660E\u786E\u547D\u4EE4\u3002",
350
+ "Shows LINGHUN.md, candidate/accepted/disabled memories, controlled injection stats, and storage paths; accept/delete/disable need explicit commands.",
351
+ "\u8BE2\u95EE\u8BB0\u5FC6\u662F\u5426\u5F00\u542F\u3001\u8BB0\u5FC6\u6570\u91CF\u3001\u5BA1\u67E5\u3001stats \u6216\u5B58\u50A8\u3002",
352
+ "Use for memory status, review, stats, and storage questions.",
353
+ "start_gate"
354
+ ),
355
+ cap(
356
+ "failures",
357
+ "/failures",
358
+ ["failures", "\u5931\u8D25\u5B66\u4E60", "failure learning", "lessons", "\u6559\u8BAD", "\u8E29\u5751"],
359
+ "\u5931\u8D25\u5B66\u4E60",
360
+ "Failure learning",
361
+ "\u67E5\u770B\u4ECE\u771F\u5B9E\u5931\u8D25\uFF08provider/\u5DE5\u5177/\u9A8C\u8BC1/git/\u6700\u7EC8\u56DE\u7B54\u964D\u7EA7/\u62A5\u544A\u5B88\u536B/\u5E76\u53D1\u4E0A\u9650\uFF09\u63D0\u53D6\u7684\u53EF\u590D\u7528\u6559\u8BAD\uFF1Bresolve/ignore \u9700\u660E\u786E\u547D\u4EE4\u3002",
362
+ "Shows reusable lessons from real failures (provider/tool/verification/git/final-gate/report-guard/resource-cap); resolve/ignore need explicit commands.",
363
+ "\u60F3\u67E5\u770B\u5386\u53F2\u5931\u8D25\u6559\u8BAD\u3001\u907F\u514D\u91CD\u590D\u8E29\u5751\uFF0C\u6216\u6807\u8BB0\u67D0\u6761\u5DF2\u89E3\u51B3/\u5FFD\u7565\u3002",
364
+ "Use to review past failure lessons or mark one resolved/ignored.",
365
+ "start_gate"
366
+ ),
367
+ cap(
368
+ "mode",
369
+ "/mode",
370
+ [
371
+ "mode",
372
+ "\u6743\u9650\u6A21\u5F0F",
373
+ "permission mode",
374
+ "full-access",
375
+ "full access",
376
+ "\u5B8C\u5168\u8BBF\u95EE",
377
+ "auto-review",
378
+ "auto review",
379
+ "auto mode",
380
+ "\u81EA\u52A8\u5BA1\u67E5",
381
+ "\u81EA\u52A8\u6A21\u5F0F",
382
+ "bypass",
383
+ "dontAsk",
384
+ "don't ask",
385
+ "\u514D\u786E\u8BA4"
386
+ ],
387
+ "\u6743\u9650\u6A21\u5F0F",
388
+ "Permission mode",
389
+ "\u67E5\u770B\u6216\u5207\u6362\u6743\u9650\u6A21\u5F0F\uFF1Bfull-access \u4E0D\u80FD\u81EA\u7136\u8BED\u8A00\u76F4\u901A\u3002",
390
+ "Shows or switches permission mode; full-access is never natural-language direct.",
391
+ "\u8BE2\u95EE\u5F53\u524D\u6743\u9650\u6A21\u5F0F\u6216\u60F3\u5207\u6362\u6A21\u5F0F\u3002",
392
+ "Use for current permission mode or switching mode.",
393
+ "start_gate"
394
+ ),
395
+ cap(
396
+ "tab",
397
+ "/tab",
398
+ ["shift tab", "tab", "\u5207\u6A21\u5F0F"],
399
+ "\u6A21\u5F0F\u5FAA\u73AF",
400
+ "Mode cycle",
401
+ "\u5FAA\u73AF\u5E38\u7528\u6743\u9650\u6A21\u5F0F\u3002",
402
+ "Cycles common permission modes.",
403
+ "\u53EA\u5728\u7528\u6237\u660E\u786E\u8981\u5207\u6362\u5E38\u7528\u6A21\u5F0F\u65F6\u4F7F\u7528\u3002",
404
+ "Use only when explicitly cycling common modes.",
405
+ "start_gate"
406
+ ),
407
+ cap(
408
+ "esc",
409
+ "/esc",
410
+ ["esc", "escape", "\u53D6\u6D88\u5F53\u524D\u4EA4\u4E92", "cancel pending"],
411
+ "\u53D6\u6D88\u5F53\u524D\u4EA4\u4E92",
412
+ "Cancel pending",
413
+ "\u53D6\u6D88\u7B49\u5F85\u4E2D\u7684\u8F93\u5165\u3001\u786E\u8BA4\u3001\u6743\u9650\u3001\u8BA1\u5212\u6216\u6301\u7EED\u63A8\u8FDB\u786E\u8BA4\uFF1B\u4E0D\u4F1A\u53D6\u6D88\u5DF2\u6267\u884C\u5DE5\u5177\u3002",
414
+ "Cancels pending input, confirmation, permission, plan, or autopilot approval; does not cancel tools that already ran.",
415
+ "\u9700\u8981\u53D6\u6D88\u5F53\u524D\u7B49\u5F85\u786E\u8BA4\u7684\u4EA4\u4E92\u3002",
416
+ "Use to cancel the current pending interaction.",
417
+ "start_gate"
418
+ ),
419
+ cap(
420
+ "enter",
421
+ "/enter",
422
+ ["enter", "\u786E\u8BA4\u5F53\u524D\u9009\u62E9", "confirm pending"],
423
+ "\u786E\u8BA4\u5F53\u524D\u9009\u62E9",
424
+ "Confirm pending",
425
+ "\u786E\u8BA4\u5F53\u524D\u663E\u5F0F\u9009\u62E9\uFF1B\u9700\u8981\u7CBE\u786E\u786E\u8BA4\u7684\u5371\u9669\u52A8\u4F5C\u4ECD\u4E0D\u4F1A\u653E\u884C\u3002",
426
+ "Confirms the current explicit choice; exact-confirmation actions remain protected.",
427
+ "\u9700\u8981\u7528\u7B49\u4EF7 Enter \u8DEF\u5F84\u786E\u8BA4\u5F53\u524D\u9009\u62E9\u3002",
428
+ "Use as the Enter-equivalent confirmation path.",
429
+ "start_gate"
430
+ ),
431
+ cap(
432
+ "trust",
433
+ "/trust",
434
+ [
435
+ "trust",
436
+ "workspace trust",
437
+ "trust this folder",
438
+ "trust this project",
439
+ "\u4FE1\u4EFB\u5DE5\u4F5C\u533A",
440
+ "\u4FE1\u4EFB\u8FD9\u4E2A\u9879\u76EE",
441
+ "\u8C03\u6574\u5DE5\u4F5C\u533A\u4FE1\u4EFB",
442
+ "restricted",
443
+ "untrust"
444
+ ],
445
+ "\u5DE5\u4F5C\u533A\u4FE1\u4EFB",
446
+ "Workspace trust",
447
+ "\u67E5\u770B\u6216\u8BBE\u7F6E\u5F53\u524D\u5DE5\u4F5C\u533A trust / restricted / untrusted \u8FB9\u754C\u3002",
448
+ "Shows or sets workspace trust / restricted / untrusted boundaries.",
449
+ "\u9700\u8981\u67E5\u770B\u6216\u8C03\u6574\u5F53\u524D\u9879\u76EE\u7684\u4FE1\u4EFB\u72B6\u6001\u3002",
450
+ "Use for workspace trust state and boundaries.",
451
+ "start_gate"
452
+ ),
453
+ cap(
454
+ "autopilot",
455
+ "/autopilot",
456
+ ["autopilot", "\u6301\u7EED\u63A8\u8FDB", "\u7EE7\u7EED\u505A", "\u4E0D\u7528\u6BCF\u6B65\u90FD\u95EE"],
457
+ "\u6301\u7EED\u63A8\u8FDB",
458
+ "Bounded autopilot",
459
+ "\u57FA\u4E8E\u73B0\u6709 durable job \u542F\u52A8\u6709\u9884\u7B97\u3001\u53EF\u6682\u505C/\u53D6\u6D88\u7684\u6301\u7EED\u63A8\u8FDB\u3002",
460
+ "Starts bounded progress on existing durable jobs with budgets and pause/cancel controls.",
461
+ "\u7528\u6237\u660E\u786E\u8981\u6C42\u6301\u7EED\u63A8\u8FDB\u6216\u4E0D\u7528\u6BCF\u6B65\u90FD\u95EE\u3002",
462
+ "Use only when the user explicitly asks for bounded continued progress.",
463
+ "start_gate"
464
+ ),
465
+ cap(
466
+ "brief",
467
+ "/brief",
468
+ ["brief", "\u7B80\u6D01\u6A21\u5F0F", "quiet mode", "less noise"],
469
+ "\u7B80\u6D01\u6A21\u5F0F",
470
+ "Brief mode",
471
+ "\u5207\u6362 TUI \u7B80\u6D01\u6A21\u5F0F\uFF1A\u6291\u5236 thinking spinner\u3001\u9690\u85CF\u6D41\u5F0F\u9884\u89C8\u3001\u51CF\u5C11\u89C6\u89C9\u566A\u97F3\u3002",
472
+ "Toggles brief mode: suppresses thinking spinner, hides streaming preview, reduces visual noise.",
473
+ "\u9700\u8981\u51CF\u5C11 TUI \u8F93\u51FA\u566A\u97F3\u6216\u4E13\u6CE8\u6A21\u5F0F\u3002",
474
+ "Use to reduce TUI output noise or focus mode.",
475
+ "readonly",
476
+ { modelInvocable: false, bridgeSafe: false }
477
+ ),
478
+ cap(
479
+ "plan",
480
+ "/plan",
481
+ ["plan", "\u8BA1\u5212", "\u65B9\u6848"],
482
+ "\u8BA1\u5212\u6A21\u5F0F",
483
+ "Plan",
484
+ "\u751F\u6210\u6216\u786E\u8BA4\u7ED3\u6784\u5316\u65B9\u6848\u3002",
485
+ "Generates or accepts structured plans.",
486
+ "\u9700\u8981\u5148\u89C4\u5212\u518D\u6267\u884C\u3002",
487
+ "Use when planning before execution.",
488
+ "start_gate"
489
+ ),
490
+ cap(
491
+ "permissions",
492
+ "/permissions",
493
+ ["permission", "permissions", "\u6743\u9650", "allow", "deny"],
494
+ "\u6743\u9650\u89C4\u5219",
495
+ "Permissions",
496
+ "\u67E5\u770B\u6743\u9650\u89C4\u5219\uFF1B\u589E\u5220\u89C4\u5219\u5FC5\u987B\u8D70\u914D\u7F6E\u5199\u5165/\u5BA1\u6279\u8FB9\u754C\u3002",
497
+ "Shows permission rules; add/remove follows config-write/approval boundary.",
498
+ "\u67E5\u770B\u6743\u9650\u3001\u6700\u8FD1\u62D2\u7EDD\u6216\u89C4\u5219\u98CE\u9669\u3002",
499
+ "Use for permissions, recent denials, and rule risks.",
500
+ "dangerous",
501
+ { entersPermissionPipeline: true }
502
+ ),
503
+ cap(
504
+ "background",
505
+ "/background",
506
+ ["background", "\u540E\u53F0", "long task", "\u957F\u4EFB\u52A1"],
507
+ "\u540E\u53F0\u4EFB\u52A1",
508
+ "Background",
509
+ "\u67E5\u770B\u540E\u53F0\u4EFB\u52A1\u6458\u8981\u3001\u8F93\u51FA\u8DEF\u5F84\u548C\u53D6\u6D88\u5165\u53E3\u3002",
510
+ "Shows background task summaries, output paths, and cancellation entry.",
511
+ "\u8BE2\u95EE\u957F\u4EFB\u52A1\u72B6\u6001\u3001\u65E5\u5FD7\u3001\u53D6\u6D88\u65B9\u5F0F\u3002",
512
+ "Use for long-task state, logs, and cancel hints.",
513
+ "readonly",
514
+ { runtimeStatusSubject: "background" }
515
+ ),
516
+ cap(
517
+ "job",
518
+ "/job",
519
+ ["job", "durable job", "\u957F\u671F\u4EFB\u52A1", "\u672C\u5730\u4EFB\u52A1", "\u4EFB\u52A1\u62A5\u544A"],
520
+ "\u672C\u5730 Job",
521
+ "Local job",
522
+ "\u7BA1\u7406\u672C\u5730 durable job \u7684 list/run/pause/resume/cancel/status/logs/report\uFF1B\u590D\u7528\u540E\u53F0\u4EFB\u52A1\u548C evidence \u8FB9\u754C\u3002",
523
+ "Manages local durable job list/run/pause/resume/cancel/status/logs/report while reusing background-task and evidence boundaries.",
524
+ "\u67E5\u770B\u6216\u63A7\u5236\u957F\u671F job\u3001\u9884\u7B97\u3001agent \u5206\u914D\u3001\u6682\u505C\u539F\u56E0\u548C\u65E5\u5FD7\u3002",
525
+ "Use for long-running job state, budget, agent assignment, pause reason, and logs.",
526
+ "start_gate",
527
+ { runtimeStatusSubject: "job" }
528
+ ),
529
+ cap(
530
+ "remote",
531
+ "/remote",
532
+ ["remote", "\u8FDC\u7A0B", "\u98DE\u4E66", "lark", "feishu", "\u9489\u9489", "dingtalk", "\u4F01\u4E1A\u5FAE\u4FE1", "wecom"],
533
+ "\u8FDC\u7A0B\u901A\u9053",
534
+ "Remote channels",
535
+ "\u8BBE\u7F6E\u3001\u8BCA\u65AD\u6216\u6D4B\u8BD5\u4F01\u4E1A\u5FAE\u4FE1/\u98DE\u4E66/\u9489\u9489\u8FDC\u7A0B\u901A\u9053\uFF1B\u9ED8\u8BA4\u5173\u95ED\uFF0C\u53EA\u53D1\u9001\u8131\u654F\u6458\u8981\u3001\u5BA1\u6279\u8BF7\u6C42\u548C\u7ED3\u679C\u62A5\u544A\u3002",
536
+ "Sets up, diagnoses, or tests WeCom/Feishu/DingTalk remote channels; disabled by default and sends redacted summaries, approvals, and reports only.",
537
+ "\u9700\u8981\u8FDE\u63A5\u6216\u6392\u67E5\u8FDC\u7A0B\u901A\u77E5/\u5BA1\u6279\u901A\u9053\u3002",
538
+ "Use for remote notification/approval setup or diagnostics.",
539
+ "start_gate"
540
+ ),
541
+ cap(
542
+ "details",
543
+ "/details",
544
+ ["details", "\u8BE6\u60C5", "evidence", "\u8BC1\u636E"],
545
+ "\u8BE6\u60C5",
546
+ "Details",
547
+ "\u67E5\u770B evidence\u3001\u540E\u53F0\u4EFB\u52A1\u548C\u88C1\u526A\u8BE6\u60C5\u6458\u8981\uFF0C\u4E0D\u628A\u5927\u8F93\u51FA\u585E\u56DE\u4E3B\u5C4F\u3002",
548
+ "Shows evidence, background tasks, and trimmed details without dumping large output into the main view.",
549
+ "\u67E5\u770B\u8BC1\u636E\u3001\u5DE5\u5177\u8BE6\u60C5\u6216\u540E\u53F0\u8BE6\u60C5\u3002",
550
+ "Use to inspect evidence, tool details, or background details.",
551
+ "readonly"
552
+ ),
553
+ cap(
554
+ "agents",
555
+ "/agents",
556
+ ["agent", "agents", "\u667A\u80FD\u4F53", "subagent", "stop all agents", "\u505C\u6B62\u6240\u6709\u667A\u80FD\u4F53"],
557
+ "Agent",
558
+ "Agents",
559
+ "\u67E5\u770B agent \u72B6\u6001\u3001transcript\u3001usage \u548C\u53D6\u6D88\u5165\u53E3\u3002",
560
+ "Lists agent state, transcript, usage, and cancel entry.",
561
+ "\u67E5\u770B\u6216\u89E3\u91CA agent \u72B6\u6001\u3002",
562
+ "Use to inspect or explain agent state.",
563
+ "readonly",
564
+ { runtimeStatusSubject: "agent" }
565
+ ),
566
+ cap(
567
+ "fork",
568
+ "/fork",
569
+ ["fork", "\u5F00 agent", "start agent", "verifier agent", "planner agent"],
570
+ "\u6D3E\u751F Agent",
571
+ "Fork agent",
572
+ "\u4ECE\u88C1\u526A handoff \u6D3E\u751F agent\uFF1B\u957F\u4EFB\u52A1\u5FC5\u987B Start Gate\u3002",
573
+ "Forks an agent from trimmed handoff; long tasks require Start Gate.",
574
+ "\u60F3\u5F00 explorer/planner/verifier/worker agent\u3002",
575
+ "Use to start explorer/planner/verifier/worker agents.",
576
+ "start_gate"
577
+ ),
578
+ cap(
579
+ "rewind",
580
+ "/rewind",
581
+ ["rewind", "restore", "\u56DE\u6EDA", "\u6062\u590D\u68C0\u67E5\u70B9"],
582
+ "\u56DE\u6EDA",
583
+ "Rewind",
584
+ "\u5217\u51FA\u6216\u6062\u590D checkpoint\uFF1Brestore \u4E0D\u81EA\u7136\u8BED\u8A00\u76F4\u901A\u3002",
585
+ "Lists or restores checkpoints; restore is never direct through natural language.",
586
+ "\u67E5\u770B checkpoint \u6216\u7406\u89E3\u6062\u590D\u98CE\u9669\u3002",
587
+ "Use for checkpoints and restore risk explanation.",
588
+ "dangerous"
589
+ ),
590
+ // D.13R Git / Worktree / Stable Point Maturity Sweep — 三个只读发现入口。
591
+ // 与 /index、/cache 同级别 readonly 状态命令;不会执行任何 git mutating 操作。
592
+ // 真正的 git commit / reset / checkout / worktree add/remove 由用户通过 Bash
593
+ // 工具触发,走 permission-policy-engine 现有四档权限链(Bash + decidePermission)。
594
+ cap(
595
+ "git",
596
+ "/git",
597
+ ["git", "git status", "git stable", "git worktree", "\u7A33\u5B9A\u70B9", "stable point"],
598
+ "Git \u72B6\u6001",
599
+ "Git status",
600
+ "\u53EA\u8BFB\u63A2\u6D4B\uFF1A\u5F53\u524D branch\u3001clean/dirty\u3001\u6539\u52A8\u6570\u3001HEAD\u3001\u7A33\u5B9A\u70B9\u5EFA\u8BAE\u3001worktree \u6458\u8981\u3002",
601
+ "Read-only probe: current branch, clean/dirty, change count, HEAD, stable-point hint, worktree summary.",
602
+ "\u67E5\u770B git \u72B6\u6001\u3001\u51B3\u5B9A\u8981\u4E0D\u8981\u505A\u7A33\u5B9A\u70B9\u63D0\u4EA4\u3002",
603
+ "Use to inspect git status and decide whether to record a stable point.",
604
+ "readonly"
605
+ ),
606
+ cap(
607
+ "worktree",
608
+ "/worktree",
609
+ ["worktree", "git worktree", "\u5DE5\u4F5C\u6811"],
610
+ "Git Worktree",
611
+ "Git Worktree",
612
+ "\u53EA\u8BFB\u5217\u51FA git worktree\uFF1Badd/remove/switch \u4E0D\u5728\u6B64\u5904\u6267\u884C\uFF08\u8D70 Bash + \u6743\u9650\uFF09\u3002",
613
+ "Read-only listing of git worktrees; add/remove/switch are not performed here (use Bash + permission).",
614
+ "\u67E5\u770B\u5F53\u524D worktree\u3001\u5176\u4ED6 worktree \u5217\u8868\u3002",
615
+ "Use to inspect current and sibling worktrees.",
616
+ "readonly"
617
+ ),
618
+ cap(
619
+ "checkpoint",
620
+ "/checkpoint",
621
+ ["checkpoint", "snapshot", "stable point", "\u7A33\u5B9A\u70B9", "checkpoint stable"],
622
+ "Linghun \u5FEB\u7167",
623
+ "Linghun checkpoint",
624
+ "\u67E5\u770B Linghun snapshot checkpoint \u5217\u8868\u4E0E stable-point \u5EFA\u8BAE\uFF1B\u4E0D\u662F git reset\u3002",
625
+ "Inspect Linghun snapshot checkpoints and stable-point hints; not a git reset.",
626
+ "\u67E5\u770B Linghun \u5185\u90E8\u5FEB\u7167\u6216\u83B7\u53D6\u7A33\u5B9A\u70B9\u5EFA\u8BAE\u3002",
627
+ "Use to inspect Linghun internal snapshots or get stable-point hints.",
628
+ "readonly"
629
+ ),
630
+ cap(
631
+ "btw",
632
+ "/btw",
633
+ ["btw", "\u4E34\u65F6\u63D2\u95EE", "side question"],
634
+ "\u4E34\u65F6\u63D2\u95EE",
635
+ "Temporary question",
636
+ "\u56DE\u7B54\u4E34\u65F6\u95EE\u9898\uFF0C\u4E0D\u6539 Todo/Plan/checkpoint\u3002",
637
+ "Answers a side question without changing Todo/Plan/checkpoints.",
638
+ "\u957F\u4EFB\u52A1\u4E2D\u4E34\u65F6\u95EE\u4E00\u4E2A\u4E0D\u6539\u53D8\u72B6\u6001\u7684\u95EE\u9898\u3002",
639
+ "Use for a side question that should not alter state.",
640
+ "readonly"
641
+ ),
642
+ cap(
643
+ "interrupt",
644
+ "/interrupt",
645
+ ["interrupt", "cancel", "\u4E2D\u65AD", "\u505C\u6B62"],
646
+ "\u4E2D\u65AD",
647
+ "Interrupt",
648
+ "\u6807\u8BB0\u5F53\u524D\u957F\u4EFB\u52A1\u53D6\u6D88\u3002",
649
+ "Marks the current long task cancelled.",
650
+ "\u8981\u4E2D\u65AD\u6B63\u5728\u8FD0\u884C\u7684\u957F\u4EFB\u52A1\u3002",
651
+ "Use to cancel a running long task.",
652
+ "start_gate"
653
+ ),
654
+ cap(
655
+ "claim-check",
656
+ "/claim-check",
657
+ ["claim", "\u6838\u67E5", "\u8BC1\u636E"],
658
+ "\u7ED3\u8BBA\u6838\u67E5",
659
+ "Claim check",
660
+ "\u964D\u7EA7\u7F3A\u8BC1\u636E\u7ED3\u8BBA\u3002",
661
+ "Downgrades unsupported claims.",
662
+ "\u9700\u8981\u6838\u67E5\u56DE\u7B54\u662F\u5426\u6709\u8BC1\u636E\u3002",
663
+ "Use to check whether a claim has evidence.",
664
+ "readonly"
665
+ ),
666
+ cap(
667
+ "verify",
668
+ "/verify",
669
+ ["verify", "\u9A8C\u8BC1", "test", "typecheck"],
670
+ "\u9A8C\u8BC1",
671
+ "Verify",
672
+ "\u751F\u6210\u6216\u8FD0\u884C\u9A8C\u8BC1\u8BA1\u5212\u3002",
673
+ "Generates or runs verification.",
674
+ "\u60F3\u8DD1\u6D4B\u8BD5\u3001typecheck\u3001build \u6216 verifier\u3002",
675
+ "Use for tests, typecheck, build, or verifier checks.",
676
+ "start_gate"
677
+ ),
678
+ cap(
679
+ "review",
680
+ "/review",
681
+ ["review", "\u4EE3\u7801\u5BA1\u67E5", "\u5BA1\u67E5"],
682
+ "\u5BA1\u67E5",
683
+ "Review",
684
+ "\u5BA1\u67E5 diff\u3001\u98CE\u9669\u548C\u9A8C\u8BC1\u8BC1\u636E\u3002",
685
+ "Reviews diff, risks, and verification evidence.",
686
+ "\u60F3\u505A\u4E00\u6B21 review \u6216\u770B\u98CE\u9669\u3002",
687
+ "Use for review or risk inspection.",
688
+ "start_gate"
689
+ ),
690
+ cap(
691
+ "commit",
692
+ "/commit",
693
+ ["commit", "git commit", "\u63D0\u4EA4"],
694
+ "\u63D0\u4EA4\u52A9\u624B",
695
+ "Commit assistant",
696
+ "\u6A21\u578B\u9A71\u52A8\u68C0\u67E5 diff \u5E76\u51C6\u5907\u63D0\u4EA4\u8BA1\u5212\u3002",
697
+ "Model-driven diff review and commit planning.",
698
+ "\u60F3\u68C0\u67E5\u5F53\u524D\u6539\u52A8\u5E76\u51C6\u5907\u63D0\u4EA4\u3002",
699
+ "Use to inspect current changes and prepare a commit.",
700
+ "start_gate",
701
+ { modelInvocable: true }
702
+ ),
703
+ cap(
704
+ "init",
705
+ "/init",
706
+ ["init", "\u521D\u59CB\u5316", "\u9879\u76EE\u8BF4\u660E"],
707
+ "\u521D\u59CB\u5316\u9879\u76EE\u8BF4\u660E",
708
+ "Init project instructions",
709
+ "\u6A21\u578B\u9A71\u52A8\u63A2\u7D22\u9879\u76EE\u5E76\u8349\u62DF Linghun \u9879\u76EE\u8BF4\u660E\u3002",
710
+ "Model-driven project exploration and instruction drafting.",
711
+ "\u9700\u8981\u521D\u59CB\u5316\u9879\u76EE\u89C4\u5219\u6216\u8BF4\u660E\u6587\u4EF6\u3002",
712
+ "Use to initialize project rules or instruction files.",
713
+ "start_gate",
714
+ { modelInvocable: true }
715
+ ),
716
+ cap(
717
+ "security-review",
718
+ "/security-review",
719
+ ["security review", "\u5B89\u5168\u5BA1\u67E5", "\u5B89\u5168"],
720
+ "\u5B89\u5168\u5BA1\u67E5",
721
+ "Security review",
722
+ "\u6A21\u578B\u9A71\u52A8\u5BA1\u67E5 diff \u4E2D\u7684\u5B89\u5168\u98CE\u9669\u3002",
723
+ "Model-driven security review of the current diff.",
724
+ "\u9700\u8981\u68C0\u67E5\u6CE8\u5165\u3001XSS\u3001RCE\u3001\u9274\u6743\u6216\u5BC6\u94A5\u6CC4\u6F0F\u98CE\u9669\u3002",
725
+ "Use to check injection, XSS, RCE, auth, or secret leakage risks.",
726
+ "start_gate",
727
+ { modelInvocable: true }
728
+ ),
729
+ cap(
730
+ "commit-push-pr",
731
+ "/commit-push-pr",
732
+ ["commit push pr", "pr", "pull request"],
733
+ "\u63D0\u4EA4\u63A8\u9001 PR",
734
+ "Commit, push, PR",
735
+ "\u6A21\u578B\u9A71\u52A8\u5206\u652F\u3001\u63D0\u4EA4\u3001\u63A8\u9001\u4E0E PR \u521B\u5EFA\u6D41\u7A0B\u3002",
736
+ "Model-driven branch, commit, push, and PR flow.",
737
+ "\u9700\u8981\u628A\u5F53\u524D\u6539\u52A8\u6574\u7406\u6210 PR\u3002",
738
+ "Use to package current changes into a PR.",
739
+ "start_gate",
740
+ { modelInvocable: true }
741
+ ),
742
+ cap(
743
+ "init-verifiers",
744
+ "/init-verifiers",
745
+ ["init verifiers", "\u9A8C\u8BC1\u5668", "verification setup"],
746
+ "\u521D\u59CB\u5316\u9A8C\u8BC1\u5668",
747
+ "Init verifiers",
748
+ "\u6A21\u578B\u9A71\u52A8\u53D1\u73B0\u9879\u76EE\u9A8C\u8BC1\u547D\u4EE4\u5E76\u8349\u62DF\u9A8C\u8BC1\u5668\u8BF4\u660E\u3002",
749
+ "Model-driven verifier discovery and instruction drafting.",
750
+ "\u9700\u8981\u5EFA\u7ACB\u9879\u76EE\u9A8C\u8BC1\u5165\u53E3\u6216 verifier \u8BF4\u660E\u3002",
751
+ "Use to set up project verification entries or verifier instructions.",
752
+ "start_gate",
753
+ { modelInvocable: true }
754
+ ),
755
+ cap(
756
+ "cache-log",
757
+ "/cache-log",
758
+ ["cache log", "\u7F13\u5B58\u65E5\u5FD7"],
759
+ "\u7F13\u5B58\u65E5\u5FD7",
760
+ "Cache log",
761
+ "\u67E5\u770B\u6216\u5BFC\u51FA\u6700\u8FD1 cache usage \u8BB0\u5F55\u3002",
762
+ "Shows or exports recent cache usage records.",
763
+ "\u9700\u8981\u5BF9\u8D26 cache usage \u6216\u5BFC\u51FA\u65E5\u5FD7\u3002",
764
+ "Use for cache usage reconciliation or export.",
765
+ "config_write",
766
+ { writesConfig: true }
767
+ ),
768
+ cap(
769
+ "cache",
770
+ "/cache",
771
+ ["cache", "\u7F13\u5B58", "hit rate", "cache hit rate", "\u547D\u4E2D\u7387"],
772
+ "\u7F13\u5B58",
773
+ "Cache",
774
+ "\u67E5\u770B cache \u547D\u4E2D\u7387\u4E0E freshness\uFF1Brefresh \u9700\u786E\u8BA4\u3002",
775
+ "Shows cache hit rate and freshness; refresh needs confirmation.",
776
+ "\u8BE2\u95EE\u7F13\u5B58\u547D\u4E2D\u7387\u3001\u9884\u70ED\u6216\u5237\u65B0\u3002",
777
+ "Use for cache hit rate, warmup, or refresh.",
778
+ "start_gate"
779
+ ),
780
+ cap(
781
+ "compact",
782
+ "/compact",
783
+ ["compact", "\u538B\u7F29", "\u4E0A\u4E0B\u6587\u538B\u7F29", "microcompact"],
784
+ "\u4E0A\u4E0B\u6587\u538B\u7F29",
785
+ "Compact",
786
+ "\u67E5\u770B\u6216\u6267\u884C\u53D7\u63A7 Context Compact\uFF1Aprovider \u8BF7\u6C42\u524D\u53EF\u5199\u5165\u8131\u654F\u6458\u8981\u548C\u8FB9\u754C\uFF0C\u4E0D\u6267\u884C\u5DE5\u5177\u3001\u4E0D\u5199\u9879\u76EE\u6587\u4EF6\u3001\u4E0D\u5199\u957F\u671F\u8BB0\u5FC6\u3002",
787
+ "Shows or runs controlled Context Compact: provider preflight can inject a redacted summary and boundary; no tools, project file writes, or long-term memory writes.",
788
+ "\u9700\u8981\u67E5\u770B\u4E0A\u4E0B\u6587\u538B\u529B\u3001\u538B\u7F29\u6458\u8981\u3001pairing \u5B89\u5168\u6216 compact \u8FB9\u754C\u3002",
789
+ "Use for context pressure, compact summary, pairing safety, or compact boundary status.",
790
+ "readonly"
791
+ ),
792
+ cap(
793
+ "break-cache",
794
+ "/break-cache",
795
+ ["break cache", "freshness", "\u7F13\u5B58\u7834\u574F"],
796
+ "\u7F13\u5B58\u7834\u574F\u8BCA\u65AD",
797
+ "Break-cache",
798
+ "\u67E5\u770B cache freshness hash \u53D8\u5316\u3002",
799
+ "Shows cache freshness hash changes.",
800
+ "\u6392\u67E5\u4E3A\u4EC0\u4E48\u7F13\u5B58\u547D\u4E2D\u4E0B\u964D\u3002",
801
+ "Use to diagnose cache hit-rate drops.",
802
+ "readonly"
803
+ ),
804
+ cap(
805
+ "mcp",
806
+ "/mcp",
807
+ ["mcp", "server", "tools"],
808
+ "MCP",
809
+ "MCP",
810
+ "\u67E5\u770B MCP server \u72B6\u6001\u548C\u7A33\u5B9A\u5DE5\u5177\u6458\u8981\u3002",
811
+ "Shows MCP server status and stable tool summaries.",
812
+ "\u8BE2\u95EE MCP \u662F\u5426\u53EF\u7528\u6216\u6709\u54EA\u4E9B\u5DE5\u5177\u3002",
813
+ "Use for MCP availability and tool summaries.",
814
+ "readonly"
815
+ ),
816
+ cap(
817
+ "index",
818
+ "/index",
819
+ [
820
+ "index",
821
+ "\u7D22\u5F15",
822
+ "codebase",
823
+ "architecture",
824
+ "search code",
825
+ "build index",
826
+ "\u66F4\u65B0\u7D22\u5F15",
827
+ "\u5237\u65B0\u7D22\u5F15",
828
+ "\u91CD\u5EFA\u7D22\u5F15"
829
+ ],
830
+ "\u4EE3\u7801\u7D22\u5F15",
831
+ "Index",
832
+ "status/search/architecture \u4E3A\u53EA\u8BFB\uFF1Binit fast/refresh \u662F\u5E26\u5B89\u5168\u626B\u63CF\u7684\u672C\u5730\u5B89\u5168\u52A8\u4F5C\uFF1Brebuild/force \u9700\u8981\u7CBE\u786E\u786E\u8BA4\u3002",
833
+ "Status/search/architecture are read-only; init fast/refresh are safe local actions with a safety scan; rebuild/force requires exact confirmation.",
834
+ "\u8BE2\u95EE\u53EA\u8BFB\u7D22\u5F15\u72B6\u6001\u3001\u641C\u7D22\u4EE3\u7801\u3001\u67B6\u6784\u6458\u8981\uFF1B\u666E\u901A init fast/refresh \u53EF\u5B89\u5168\u6267\u884C\uFF0C\u91CD\u5EFA\u6216 force \u9700\u7CBE\u786E\u786E\u8BA4\u3002",
835
+ "Use for read-only index status/search/architecture; normal init fast/refresh can run safely, while rebuild or force needs exact confirmation.",
836
+ "start_gate"
837
+ ),
838
+ cap(
839
+ "usage",
840
+ "/usage",
841
+ ["usage", "token", "tokens", "\u7528\u91CF"],
842
+ "\u7528\u91CF",
843
+ "Usage",
844
+ "\u67E5\u770B token/cache usage \u6458\u8981\u3002",
845
+ "Shows token/cache usage summary.",
846
+ "\u8BE2\u95EE token\u3001usage \u6216\u8D26\u5355\u53E3\u5F84\u3002",
847
+ "Use for token/cache usage questions.",
848
+ "readonly"
849
+ ),
850
+ cap(
851
+ "stats",
852
+ "/stats",
853
+ ["stats", "statistics", "\u7EDF\u8BA1"],
854
+ "\u7EDF\u8BA1",
855
+ "Stats",
856
+ "\u67E5\u770B\u672C\u5730 cache/cost \u7EDF\u8BA1\u3002",
857
+ "Shows local cache/cost statistics.",
858
+ "\u67E5\u770B\u603B\u4F53\u7EDF\u8BA1\u6216 endpoint \u805A\u5408\u3002",
859
+ "Use for overall stats or endpoint grouping.",
860
+ "readonly"
861
+ ),
862
+ cap(
863
+ "read",
864
+ "/read",
865
+ [
866
+ "read",
867
+ "\u8BFB\u53D6",
868
+ "\u770B\u6587\u4EF6",
869
+ "open file",
870
+ "\u9879\u76EE\u89C4\u5219",
871
+ "\u672C\u4ED3\u5E93\u89C4\u5219",
872
+ "linghun.md",
873
+ "project rules"
874
+ ],
875
+ "\u8BFB\u53D6\u6587\u4EF6",
876
+ "Read file",
877
+ "\u8BFB\u53D6\u6587\u4EF6\u5185\u5BB9\u3002",
878
+ "Reads file content.",
879
+ "\u81EA\u7136\u8BED\u8A00\u8BE2\u95EE\u600E\u4E48\u770B\u6587\u4EF6\u65F6\u89E3\u91CA\uFF1B\u9879\u76EE\u89C4\u5219\u8BFB\u53D6\u8D70\u53EA\u8BFB\u8DEF\u5F84\u3002",
880
+ "Explain file reading; project-rules reads use a read-only path.",
881
+ "tool_permission",
882
+ { entersPermissionPipeline: true }
883
+ ),
884
+ cap(
885
+ "write",
886
+ "/write",
887
+ ["write", "\u5199\u6587\u4EF6", "create file"],
888
+ "\u5199\u6587\u4EF6",
889
+ "Write file",
890
+ "\u5199\u5165\u6587\u4EF6\uFF0C\u5FC5\u987B\u8D70\u6743\u9650\u7BA1\u9053\u3002",
891
+ "Writes files through the permission pipeline.",
892
+ "\u53EA\u7528\u4E8E\u89E3\u91CA\u98CE\u9669\u6216\u663E\u5F0F slash \u547D\u4EE4\uFF1B\u81EA\u7136\u8BED\u8A00\u4E0D\u80FD\u76F4\u901A\u3002",
893
+ "Use only for risk explanation or explicit slash commands; no natural direct execution.",
894
+ "dangerous",
895
+ { entersPermissionPipeline: true }
896
+ ),
897
+ cap(
898
+ "edit",
899
+ "/edit",
900
+ ["edit", "\u4FEE\u6539", "replace"],
901
+ "\u7F16\u8F91",
902
+ "Edit",
903
+ "\u552F\u4E00\u66FF\u6362\u7F16\u8F91\uFF0C\u5FC5\u987B\u8D70\u6743\u9650\u7BA1\u9053\u3002",
904
+ "Performs unique replacement edits through the permission pipeline.",
905
+ "\u53EA\u7528\u4E8E\u89E3\u91CA\u7F16\u8F91\u98CE\u9669\u6216\u663E\u5F0F slash \u547D\u4EE4\u3002",
906
+ "Use only to explain edit risk or explicit slash commands.",
907
+ "dangerous",
908
+ { entersPermissionPipeline: true }
909
+ ),
910
+ cap(
911
+ "multiedit",
912
+ "/multiedit",
913
+ ["multiedit", "multi edit", "\u6279\u91CF\u7F16\u8F91"],
914
+ "\u6279\u91CF\u7F16\u8F91",
915
+ "MultiEdit",
916
+ "\u591A\u5904\u7F16\u8F91\uFF0C\u5FC5\u987B\u8D70\u6743\u9650\u7BA1\u9053\u3002",
917
+ "Performs multiple edits through the permission pipeline.",
918
+ "\u53EA\u7528\u4E8E\u89E3\u91CA\u6279\u91CF\u7F16\u8F91\u98CE\u9669\u6216\u663E\u5F0F slash \u547D\u4EE4\u3002",
919
+ "Use only to explain multi-edit risk or explicit slash commands.",
920
+ "dangerous",
921
+ { entersPermissionPipeline: true }
922
+ ),
923
+ cap(
924
+ "grep",
925
+ "/grep",
926
+ ["grep", "search", "\u641C\u7D22", "\u67E5\u627E", "TODO"],
927
+ "\u641C\u7D22\u6587\u672C",
928
+ "Search text",
929
+ "\u641C\u7D22\u6587\u672C\u5339\u914D\u3002",
930
+ "Searches text matches.",
931
+ "\u60F3\u641C\u7D22\u4EE3\u7801\u3001TODO \u6216\u9519\u8BEF\u4FE1\u606F\u3002",
932
+ "Use to search code, TODOs, or error messages.",
933
+ "tool_permission",
934
+ { entersPermissionPipeline: true }
935
+ ),
936
+ cap(
937
+ "glob",
938
+ "/glob",
939
+ ["glob", "find files", "\u5339\u914D\u6587\u4EF6", "\u6587\u4EF6\u5217\u8868", "\u6309\u6A21\u5F0F\u627E\u6587\u4EF6", "\u6A21\u5F0F\u627E\u6587\u4EF6"],
940
+ "\u5339\u914D\u6587\u4EF6",
941
+ "Match files",
942
+ "\u6309 glob \u5339\u914D\u6587\u4EF6\u8DEF\u5F84\u3002",
943
+ "Matches file paths by glob.",
944
+ "\u60F3\u627E\u6587\u4EF6\u540D\u6216\u6309\u6A21\u5F0F\u5217\u6587\u4EF6\u3002",
945
+ "Use to find files by name or pattern.",
946
+ "tool_permission",
947
+ { entersPermissionPipeline: true }
948
+ ),
949
+ cap(
950
+ "bash",
951
+ "/bash",
952
+ ["bash", "run command", "\u8FD0\u884C\u547D\u4EE4", "npm install", "install dependency"],
953
+ "Shell \u547D\u4EE4",
954
+ "Shell command",
955
+ "\u6267\u884C shell \u547D\u4EE4\uFF0C\u5FC5\u987B\u6743\u9650\u5BA1\u6279\u3002",
956
+ "Runs shell commands through approval.",
957
+ "\u81EA\u7136\u8BED\u8A00\u53EA\u80FD\u89E3\u91CA\u98CE\u9669\u548C\u5BA1\u6279\u8981\u6C42\uFF0C\u4E0D\u80FD\u76F4\u901A\u6267\u884C\u3002",
958
+ "Natural language may only explain risk and approval requirements.",
959
+ "dangerous",
960
+ { entersPermissionPipeline: true }
961
+ ),
962
+ cap(
963
+ "todo",
964
+ "/todo",
965
+ ["todo", "\u4EFB\u52A1", "task list"],
966
+ "\u4EFB\u52A1",
967
+ "Todo",
968
+ "\u67E5\u770B\u6216\u66F4\u65B0\u4F1A\u8BDD\u4EFB\u52A1\u5217\u8868\u3002",
969
+ "Shows or updates the session task list.",
970
+ "\u9700\u8981\u53EF\u89C1\u4EFB\u52A1\u8FDB\u5EA6\u3002",
971
+ "Use for visible task progress.",
972
+ "start_gate"
973
+ ),
974
+ cap(
975
+ "diff",
976
+ "/diff",
977
+ ["diff", "changed files", "\u5DEE\u5F02", "\u6539\u52A8"],
978
+ "Diff",
979
+ "Diff",
980
+ "\u663E\u793A\u672C\u8F6E\u5DE5\u5177\u6539\u52A8\u6458\u8981\u3002",
981
+ "Shows current tool-change summary.",
982
+ "\u60F3\u770B\u6539\u4E86\u4EC0\u4E48\u6216 show me the diff\u3002",
983
+ "Use to inspect current changes.",
984
+ "readonly"
985
+ ),
986
+ cap(
987
+ "exit",
988
+ "/exit",
989
+ ["exit", "quit", "\u9000\u51FA"],
990
+ "\u9000\u51FA",
991
+ "Exit",
992
+ "\u9000\u51FA REPL\u3002",
993
+ "Exits the REPL.",
994
+ "\u9700\u8981\u7ED3\u675F\u5F53\u524D REPL\u3002",
995
+ "Use to end the REPL.",
996
+ "start_gate"
997
+ ),
998
+ cap(
999
+ "config",
1000
+ "/config",
1001
+ ["config", "\u914D\u7F6E", "settings", "\u8BBE\u7F6E", "configuration"],
1002
+ "\u914D\u7F6E\u6982\u89C8",
1003
+ "Config overview",
1004
+ "\u6982\u89C8\u5F53\u524D model/permission/language/index/MCP/memory/cache/background/remote/hooks/plugins/skills/workflows \u7684\u73B0\u72B6\u4E0E\u4E0B\u4E00\u6B65\u3002",
1005
+ "Shows the current state and next actions for model/permission/language/index/MCP/memory/cache/background/remote/hooks/plugins/skills/workflows.",
1006
+ "\u60F3\u4E00\u6B21\u770B\u6E05\u695A LingHun \u7684\u5F53\u524D\u914D\u7F6E\u6001\u52BF\u3002",
1007
+ "Use when surveying current LingHun configuration posture.",
1008
+ "readonly"
1009
+ ),
1010
+ cap(
1011
+ "status",
1012
+ "/status",
1013
+ ["status", "\u72B6\u6001\u680F"],
1014
+ "\u72B6\u6001\u680F",
1015
+ "Status",
1016
+ "\u5185\u90E8\u72B6\u6001\u680F\u8F93\u51FA\u5165\u53E3\u3002",
1017
+ "Internal status-bar output entry.",
1018
+ "\u901A\u5E38\u7531\u7CFB\u7EDF\u81EA\u52A8\u8F93\u51FA\uFF1B\u53EF\u7528\u4E8E\u8C03\u8BD5\u77ED\u72B6\u6001\u3002",
1019
+ "Usually emitted automatically; useful for short status debugging.",
1020
+ "readonly",
1021
+ {
1022
+ hiddenReason: "not listed in /help; status bar is emitted automatically",
1023
+ runtimeStatusSubject: "current_work"
1024
+ }
1025
+ ),
1026
+ cap(
1027
+ "shortcuts",
1028
+ "/shortcuts",
1029
+ ["shortcuts", "\u5FEB\u6377\u952E", "keybindings", "keys", "bindings"],
1030
+ "\u5FEB\u6377\u952E",
1031
+ "Shortcuts",
1032
+ "\u663E\u793A\u5F53\u524D\u53EF\u7528\u7684\u952E\u76D8\u5FEB\u6377\u952E\u3002",
1033
+ "Shows available keyboard shortcuts.",
1034
+ "\u60F3\u67E5\u770B\u5FEB\u6377\u952E\u6216\u4E0D\u8BB0\u5F97\u67D0\u4E2A\u7ED1\u5B9A\u3002",
1035
+ "Use when looking up keybindings or a forgotten shortcut.",
1036
+ "readonly",
1037
+ { group: "diagnostics" }
1038
+ ),
1039
+ cap(
1040
+ "terminal-setup",
1041
+ "/terminal-setup",
1042
+ ["terminal-setup", "\u7EC8\u7AEF\u914D\u7F6E", "terminal setup", "keybinding config"],
1043
+ "\u7EC8\u7AEF\u914D\u7F6E",
1044
+ "Terminal setup",
1045
+ "\u68C0\u6D4B\u7EC8\u7AEF\u73AF\u5883\u5E76\u8F93\u51FA\u914D\u7F6E\u5EFA\u8BAE\u3002",
1046
+ "Detects terminal environment and outputs configuration guidance.",
1047
+ "\u7EC8\u7AEF\u884C\u4E3A\u5F02\u5E38\u6216\u9700\u8981\u914D\u7F6E\u5FEB\u6377\u952E\u3002",
1048
+ "Use when terminal behavior is unexpected or keybindings need configuring.",
1049
+ "readonly",
1050
+ { group: "diagnostics" }
1051
+ )
1052
+ ];
1053
+ var _sortedCatalogCache;
1054
+ function getCommandCapabilityCatalog() {
1055
+ if (!_sortedCatalogCache) {
1056
+ _sortedCatalogCache = [...COMMAND_CAPABILITY_DATA].sort(
1057
+ (a, b) => a.slash.localeCompare(b.slash) || a.id.localeCompare(b.id)
1058
+ );
1059
+ }
1060
+ return [..._sortedCatalogCache];
1061
+ }
1062
+ function validateCommandCapabilityCoverage(dispatchSlashes = USER_VISIBLE_SLASH_COMMANDS) {
1063
+ const catalog = getCommandCapabilityCatalog();
1064
+ const registry = SLASH_COMMAND_REGISTRY;
1065
+ const missingFromRegistry = dispatchSlashes.filter(
1066
+ (slash) => !registry.some((item) => item.slash === slash && item.userVisible)
1067
+ );
1068
+ const missingFromCatalog = dispatchSlashes.filter((slash) => {
1069
+ const entry = registry.find((item) => item.slash === slash && item.userVisible);
1070
+ return !entry || !catalog.some((item) => item.id === entry.capabilityId && item.userInvocable);
1071
+ });
1072
+ const registryWithoutCatalog = registry.filter(
1073
+ (entry) => !catalog.some((item) => item.id === entry.capabilityId)
1074
+ );
1075
+ const invalidHidden = catalog.filter((item) => item.hiddenReason !== void 0 && item.hiddenReason.trim() === "").map((item) => item.id);
1076
+ return [
1077
+ ...missingFromRegistry.map((slash) => `dispatch missing registry ${slash}`),
1078
+ ...missingFromCatalog.map((slash) => `dispatch missing catalog ${slash}`),
1079
+ ...registryWithoutCatalog.map((entry) => `registry missing catalog ${entry.slash}`),
1080
+ ...invalidHidden.map((id) => `hidden reason missing ${id}`)
1081
+ ];
1082
+ }
1083
+ function inferCommandGroup(id, slash) {
1084
+ if (["read", "write", "edit", "multiedit", "grep", "glob", "bash", "todo", "diff"].includes(id)) {
1085
+ return "edit";
1086
+ }
1087
+ if (["index", "mcp"].includes(id)) {
1088
+ return "index-mcp";
1089
+ }
1090
+ if (["memory", "permissions"].includes(id)) {
1091
+ return "memory-rules";
1092
+ }
1093
+ if (["agents", "fork", "background", "job", "remote", "sessions", "resume", "branch"].includes(id)) {
1094
+ return "agents-jobs";
1095
+ }
1096
+ if ([
1097
+ "readiness",
1098
+ "problems",
1099
+ "details",
1100
+ "verify",
1101
+ "review",
1102
+ "cache",
1103
+ "cache-log",
1104
+ "break-cache",
1105
+ "usage",
1106
+ "stats",
1107
+ "claim-check",
1108
+ "hooks",
1109
+ "rewind",
1110
+ // D.13R: git readiness 的三个只读发现入口归到 diagnostics 组,
1111
+ // 与 /cache、/cache-log 同级(status 类只读命令)。
1112
+ "git",
1113
+ "worktree",
1114
+ "checkpoint"
1115
+ ].includes(id)) {
1116
+ return "diagnostics";
1117
+ }
1118
+ if (slash === "/exit") {
1119
+ return "exit";
1120
+ }
1121
+ return "core";
1122
+ }
1123
+ function getUserVisibleCommandCapabilities() {
1124
+ const visible = new Set(
1125
+ SLASH_COMMAND_REGISTRY.filter((item) => item.userVisible).map((item) => item.capabilityId)
1126
+ );
1127
+ return getCommandCapabilityCatalog().filter(
1128
+ (item) => visible.has(item.id) && item.userInvocable && !item.hiddenReason
1129
+ );
1130
+ }
1131
+ function buildRuntimeStatusForModel(context) {
1132
+ const latest = context.cache.history.at(-1);
1133
+ const freshness = latest?.freshness ?? context.cache.lastFreshness;
1134
+ return {
1135
+ memory: {
1136
+ linghunMd: context.memory.projectRulesError ? "unreadable" : context.memory.projectRulesExists ? "found" : "missing",
1137
+ candidates: context.memory.candidates.length,
1138
+ accepted: context.memory.accepted.length,
1139
+ autoAccept: false
1140
+ },
1141
+ index: {
1142
+ status: context.index.status,
1143
+ projectName: context.index.projectName ?? null,
1144
+ changedFiles: context.index.changedFiles ?? null
1145
+ },
1146
+ cache: {
1147
+ latestHitRate: latest?.hitRate ?? null,
1148
+ changedKeys: (freshness?.changedKeys ?? []).slice(0, 8)
1149
+ },
1150
+ model: { provider: context.provider ?? "unknown", name: context.model },
1151
+ permissionMode: context.permissionMode,
1152
+ extensions: {
1153
+ skills: { enabled: context.skills.enabled, count: context.skills.skills.length },
1154
+ plugins: { enabled: context.plugins.enabled, count: context.plugins.plugins.length },
1155
+ hooks: { enabled: context.hooks.enabled, count: context.hooks.hooks.length }
1156
+ }
1157
+ };
1158
+ }
1159
+ var _capabilitySummaryCache = /* @__PURE__ */ new Map();
1160
+ function createModelCapabilitySummary(limit = 30) {
1161
+ const cached = _capabilitySummaryCache.get(limit);
1162
+ if (cached !== void 0) return cached;
1163
+ const result = getCommandCapabilityCatalog().filter((item) => item.modelInvocable || item.bridgeSafe).slice(0, limit).map((item) => `${item.slash} ${item.titleEn}: risk ${item.risk}; ${item.whenToUseEn}`).join("\n");
1164
+ _capabilitySummaryCache.set(limit, result);
1165
+ return result;
1166
+ }
1167
+ function routeNaturalIntent(text, preferredLanguage = "zh-CN") {
1168
+ const language = detectInputLanguage(text, preferredLanguage);
1169
+ const normalized = normalizeIntentText(text);
1170
+ const mentionedSlash = /\/[a-z-]+/iu.exec(text)?.[0];
1171
+ const catalog = getCommandCapabilityCatalog();
1172
+ const explicit = mentionedSlash ? findExplicitSlashCapability(catalog, mentionedSlash, normalized) : void 0;
1173
+ const classification = classifyNaturalControlIntent(normalized);
1174
+ const inquiry = classification.inquiry;
1175
+ const dangerous = classification.dangerousReason;
1176
+ const scored = catalog.map((capability2) => ({ capability: capability2, score: scoreCapability(capability2, normalized, text) })).filter((item) => item.score > 0).sort((a, b) => b.score - a.score || a.capability.slash.localeCompare(b.capability.slash));
1177
+ let scoredAdjusted = scored;
1178
+ if (!explicit && inquiry === "doctor" && scored.length >= 2 && scored[0]?.capability.id === "config") {
1179
+ const doctorTarget = scored.find(
1180
+ (item) => isFirstBatchStatusCapability(item.capability.id) && scored[0] !== void 0 && scored[0].score - item.score < 1.5
1181
+ );
1182
+ if (doctorTarget) {
1183
+ scoredAdjusted = [
1184
+ doctorTarget,
1185
+ ...scored.filter((item) => item.capability.id !== doctorTarget.capability.id)
1186
+ ];
1187
+ }
1188
+ }
1189
+ const candidates = uniqueCapabilities([
1190
+ ...explicit ? [explicit] : [],
1191
+ ...scoredAdjusted.map((item) => item.capability)
1192
+ ]).slice(0, 5);
1193
+ const capability = explicit ?? candidates[0];
1194
+ const topScore = explicit ? Math.max(8, scoredAdjusted[0]?.score ?? 0) : scoredAdjusted[0]?.score ?? 0;
1195
+ const secondScore = scoredAdjusted[1]?.score ?? 0;
1196
+ const currentWorkCapability = findCurrentWorkStatusCapability(catalog, normalized, inquiry);
1197
+ if (!explicit && currentWorkCapability) {
1198
+ return createIntent(
1199
+ "execute_readonly",
1200
+ currentWorkCapability,
1201
+ 0.9,
1202
+ "current work runtime status",
1203
+ uniqueCapabilities([currentWorkCapability, ...candidates]),
1204
+ language,
1205
+ inquiry,
1206
+ normalized
1207
+ );
1208
+ }
1209
+ if (!capability) {
1210
+ return {
1211
+ action: "model",
1212
+ confidence: 0,
1213
+ reason: "no catalog match",
1214
+ candidates: [],
1215
+ language,
1216
+ inquiry,
1217
+ runtimeIntent: extractRuntimeIntent(void 0, inquiry),
1218
+ riskHandler: "model"
1219
+ };
1220
+ }
1221
+ if (inquiry === "status" && isFirstBatchStatusCapability(capability.id)) {
1222
+ return createIntent(
1223
+ "execute_readonly",
1224
+ capability,
1225
+ Math.min(1, Math.max(0.7, topScore / 5)),
1226
+ "readonly status",
1227
+ candidates,
1228
+ language,
1229
+ inquiry,
1230
+ normalized
1231
+ );
1232
+ }
1233
+ if (inquiry === "doctor" && isFirstBatchStatusCapability(capability.id)) {
1234
+ return createIntent(
1235
+ "execute_readonly",
1236
+ capability,
1237
+ Math.min(1, Math.max(0.75, topScore / 5)),
1238
+ "readonly doctor",
1239
+ candidates,
1240
+ language,
1241
+ inquiry,
1242
+ normalized
1243
+ );
1244
+ }
1245
+ if (inquiry === "read" && capability.id === "read") {
1246
+ return createIntent(
1247
+ "execute_readonly",
1248
+ capability,
1249
+ Math.min(1, Math.max(0.75, topScore / 5)),
1250
+ "readonly project rules",
1251
+ candidates,
1252
+ language,
1253
+ inquiry,
1254
+ normalized
1255
+ );
1256
+ }
1257
+ if (!explicit && isMcpIndexControlRequest(normalized, capability.id)) {
1258
+ return createIntent(
1259
+ "answer",
1260
+ capability,
1261
+ Math.min(1, Math.max(0.82, topScore / 5)),
1262
+ "mcp index control plane handled locally",
1263
+ candidates,
1264
+ language,
1265
+ "usage",
1266
+ normalized
1267
+ );
1268
+ }
1269
+ if (!explicit && capability.id === "index" && classification.indexAction === "rebuild") {
1270
+ return createIntent(
1271
+ "start_gate",
1272
+ capability,
1273
+ Math.min(1, Math.max(0.85, topScore / 5)),
1274
+ "rebuild index requires exact confirmation",
1275
+ candidates,
1276
+ language,
1277
+ "execute",
1278
+ normalized
1279
+ );
1280
+ }
1281
+ if (capability.id === "mode" && extractPermissionMode(normalized) === "full-access") {
1282
+ return createIntent(
1283
+ "start_gate",
1284
+ capability,
1285
+ 0.95,
1286
+ "full-access requires exact confirmation",
1287
+ candidates,
1288
+ language,
1289
+ "execute",
1290
+ normalized
1291
+ );
1292
+ }
1293
+ if (dangerous && isDangerousNaturalTarget(capability.id)) {
1294
+ return createIntent(
1295
+ "permission_pipeline",
1296
+ capability,
1297
+ 0.92,
1298
+ dangerous,
1299
+ candidates,
1300
+ language,
1301
+ "execute",
1302
+ normalized
1303
+ );
1304
+ }
1305
+ if (!explicit && capability.id === "index" && !["usage", "risk"].includes(inquiry) && classification.indexAction === "safe") {
1306
+ return createIntent(
1307
+ "safe_local_action",
1308
+ capability,
1309
+ Math.min(1, Math.max(0.8, topScore / 5)),
1310
+ "safe local index action",
1311
+ candidates,
1312
+ language,
1313
+ "execute",
1314
+ normalized
1315
+ );
1316
+ }
1317
+ if (!explicit && capability.id === "agents" && isAgentCancelIntent(normalized)) {
1318
+ return createIntent(
1319
+ "start_gate",
1320
+ capability,
1321
+ Math.min(1, Math.max(0.85, topScore / 5)),
1322
+ "agent cancel requires confirmation",
1323
+ candidates,
1324
+ language,
1325
+ "execute",
1326
+ normalized
1327
+ );
1328
+ }
1329
+ if (!explicit && !isNaturalControlPlaneIntent(capability.id, normalized, inquiry)) {
1330
+ return {
1331
+ action: "model",
1332
+ confidence: Math.min(1, topScore / 5),
1333
+ reason: "ordinary development request",
1334
+ candidates,
1335
+ language,
1336
+ inquiry,
1337
+ runtimeIntent: extractRuntimeIntent(void 0, inquiry),
1338
+ riskHandler: "model"
1339
+ };
1340
+ }
1341
+ if (!explicit && ["autopilot", "job", "background"].includes(capability.id) && topScore >= 5) {
1342
+ const action = capability.id === "autopilot" ? "start_gate" : "execute_readonly";
1343
+ return createIntent(
1344
+ action,
1345
+ capability,
1346
+ Math.min(1, topScore / 8),
1347
+ `${capability.id} natural route`,
1348
+ candidates,
1349
+ language,
1350
+ inquiry,
1351
+ normalized
1352
+ );
1353
+ }
1354
+ if (!explicit && topScore < 2.2) {
1355
+ return createIntent(
1356
+ "ask_clarify",
1357
+ capability,
1358
+ topScore / 5,
1359
+ "low confidence",
1360
+ candidates,
1361
+ language,
1362
+ inquiry,
1363
+ normalized
1364
+ );
1365
+ }
1366
+ if (!explicit && candidates.length > 1 && Math.abs(topScore - secondScore) < 0.6) {
1367
+ return createIntent(
1368
+ "ask_clarify",
1369
+ capability,
1370
+ topScore / 6,
1371
+ "multiple close candidates",
1372
+ candidates,
1373
+ language,
1374
+ inquiry,
1375
+ normalized
1376
+ );
1377
+ }
1378
+ if (!explicit && isAmbiguousCapabilityList(normalized, candidates)) {
1379
+ return createIntent(
1380
+ "ask_clarify",
1381
+ capability,
1382
+ Math.min(0.8, topScore / 6),
1383
+ "ambiguous capability list",
1384
+ candidates,
1385
+ language,
1386
+ inquiry,
1387
+ normalized
1388
+ );
1389
+ }
1390
+ if (isUsageOrRiskQuestion(normalized, inquiry) || explicit) {
1391
+ return createIntent(
1392
+ "answer",
1393
+ capability,
1394
+ 1,
1395
+ "catalog question",
1396
+ candidates,
1397
+ language,
1398
+ inquiry,
1399
+ normalized
1400
+ );
1401
+ }
1402
+ if (capability.readonly && isStatusLike(normalized, capability)) {
1403
+ return createIntent(
1404
+ "execute_readonly",
1405
+ capability,
1406
+ Math.min(1, topScore / 5),
1407
+ "readonly status",
1408
+ candidates,
1409
+ language,
1410
+ inquiry,
1411
+ normalized
1412
+ );
1413
+ }
1414
+ if (capability.risk === "dangerous") {
1415
+ return createIntent(
1416
+ "permission_pipeline",
1417
+ capability,
1418
+ Math.min(1, topScore / 5),
1419
+ "dangerous natural language cannot execute directly",
1420
+ candidates,
1421
+ language,
1422
+ "execute",
1423
+ normalized
1424
+ );
1425
+ }
1426
+ return createIntent(
1427
+ "start_gate",
1428
+ capability,
1429
+ Math.min(1, topScore / 5),
1430
+ capability.risk === "tool_permission" ? "tool permission path requires confirmation" : "start gate required",
1431
+ candidates,
1432
+ language,
1433
+ "execute",
1434
+ normalized
1435
+ );
1436
+ }
1437
+ function formatNaturalClarification(intent) {
1438
+ const zh = intent.language === "zh-CN";
1439
+ const lines = zh ? ["\u6211\u4E0D\u786E\u5B9A\u4F60\u60F3\u505A\u54EA\u4EF6\u4E8B\u3002\u8BF7\u9009\u62E9\u4E00\u4E2A\u81EA\u7136\u8BED\u8A00\u65B9\u5411\uFF1A"] : ["I am not sure which action you want. Please choose one natural-language direction:"];
1440
+ for (const item of intent.candidates.slice(0, 3)) {
1441
+ const title = zh ? item.titleZh : item.titleEn;
1442
+ const when = zh ? item.whenToUseZh : item.whenToUseEn;
1443
+ const risk = formatHumanRisk(item, intent.language);
1444
+ lines.push(
1445
+ zh ? `- \u67E5\u770B/\u5904\u7406\u300C${title}\u300D\uFF1A${when} \u98CE\u9669\uFF1A${risk}` : `- View/handle ${title}: ${when} Risk: ${risk}`
1446
+ );
1447
+ }
1448
+ lines.push(
1449
+ zh ? "\u5982\u679C\u4F60\u53EA\u662F\u60F3\u804A\u5929\u6216\u8BF4\u660E\u9700\u6C42\uFF0C\u53EF\u4EE5\u76F4\u63A5\u8865\u5145\u4E00\u53E5\u76EE\u6807\uFF1B\u6211\u4E0D\u4F1A\u731C\u6D4B\u6267\u884C\u3002" : "If you only want to chat or describe a task, add the goal in plain language; I will not guess and execute."
1450
+ );
1451
+ return lines.join("\n");
1452
+ }
1453
+ function formatCapabilityAnswer(intent) {
1454
+ const c = intent.capability;
1455
+ if (!c) return "";
1456
+ const zh = intent.language === "zh-CN";
1457
+ const description = zh ? c.descriptionZh : c.descriptionEn;
1458
+ const when = zh ? c.whenToUseZh : c.whenToUseEn;
1459
+ const risk = formatRiskLine(c, intent.language);
1460
+ const equivalent = intent.command ?? createNaturalEquivalentCommand(c, "");
1461
+ return zh ? [
1462
+ `${c.slash}\uFF1A${c.titleZh}`,
1463
+ `- \u7528\u9014\uFF1A${description}`,
1464
+ `- \u4F55\u65F6\u4F7F\u7528\uFF1A${when}`,
1465
+ `- \u98CE\u9669\uFF1A${risk}`,
1466
+ `- \u7B49\u4EF7\u547D\u4EE4\uFF1A${equivalent}`,
1467
+ `- \u81EA\u7136\u8BED\u8A00\u6865\uFF1A${c.bridgeSafe ? "\u53EF\u89E3\u91CA/\u53EF\u8FDB\u5165\u5B89\u5168\u8DEF\u5F84" : "\u4E0D\u53EF\u76F4\u901A"}`
1468
+ ].join("\n") : [
1469
+ `${c.slash}: ${c.titleEn}`,
1470
+ `- Purpose: ${description}`,
1471
+ `- When to use: ${when}`,
1472
+ `- Risk: ${risk}`,
1473
+ `- Equivalent command: ${equivalent}`,
1474
+ `- Natural bridge: ${c.bridgeSafe ? "can explain / enter safe path" : "not direct"}`
1475
+ ].join("\n");
1476
+ }
1477
+ function formatNaturalPermissionBlock(intent) {
1478
+ const c = intent.capability;
1479
+ if (!c) return "";
1480
+ const command = intent.command ?? createNaturalEquivalentCommand(c, "");
1481
+ if (intent.language === "en-US") {
1482
+ return [
1483
+ `Blocked natural-language direct execution: ${c.titleEn}`,
1484
+ `- Exact action: ${command}`,
1485
+ `- Risk: ${formatHumanRisk(c, intent.language)}`,
1486
+ "- Scope: current project or the command-specific target; config/permission/tool effects must be reviewed before execution.",
1487
+ "- Reason: request came from the Natural Command Bridge; bridge/workflow/agent/plugin/hook/remote paths can only create gates or permission requests.",
1488
+ "- Rollback: inspect /diff, checkpoint, config state, or disable the affected extension before accepting follow-up changes.",
1489
+ "- Choices: type the explicit slash command locally, enter a Start Gate, or reject and provide feedback; plain natural-language confirmation is not enough.",
1490
+ "- Start Gate does not replace the existing permission pipeline.",
1491
+ "- I did not execute it."
1492
+ ].join("\n");
1493
+ }
1494
+ return [
1495
+ `\u5DF2\u963B\u6B62\u81EA\u7136\u8BED\u8A00\u76F4\u901A\uFF1A${c.titleZh}`,
1496
+ `- \u7CBE\u786E\u52A8\u4F5C\uFF1A${command}`,
1497
+ `- \u98CE\u9669\uFF1A${formatHumanRisk(c, intent.language)}`,
1498
+ "- \u8303\u56F4\uFF1A\u5F53\u524D\u9879\u76EE\u6216\u547D\u4EE4\u6307\u5B9A\u76EE\u6807\uFF1B\u914D\u7F6E\u3001\u6743\u9650\u3001\u5DE5\u5177\u5F71\u54CD\u5FC5\u987B\u5728\u6267\u884C\u524D\u590D\u6838\u3002",
1499
+ "- \u539F\u56E0\uFF1A\u8BF7\u6C42\u6765\u81EA Natural Command Bridge\uFF1B\u81EA\u7136\u8BED\u8A00\u6865\u3001workflow\u3001agent\u3001plugin\u3001hook\u3001remote \u53EA\u80FD\u751F\u6210\u786E\u8BA4\u95E8\u6216\u6743\u9650\u8BF7\u6C42\u3002",
1500
+ "- \u56DE\u6EDA\u65B9\u5F0F\uFF1A\u5148\u67E5\u770B /diff\u3001checkpoint\u3001\u914D\u7F6E\u72B6\u6001\uFF0C\u6216\u7981\u7528\u53D7\u5F71\u54CD\u6269\u5C55\uFF0C\u518D\u63A5\u53D7\u540E\u7EED\u53D8\u66F4\u3002",
1501
+ "- \u9009\u62E9\uFF1A\u5728\u672C\u5730\u663E\u5F0F\u8F93\u5165 slash command\u3001\u8FDB\u5165 Start Gate\uFF0C\u6216\u62D2\u7EDD\u5E76\u63D0\u4F9B\u53CD\u9988\uFF1B\u666E\u901A\u81EA\u7136\u8BED\u8A00\u786E\u8BA4\u4E0D\u591F\u3002",
1502
+ "- Start Gate \u4E0D\u66FF\u4EE3\u73B0\u6709\u6743\u9650\u5BA1\u6279\u7BA1\u9053\u3002",
1503
+ "- \u672C\u6B21\u6CA1\u6709\u6267\u884C\u3002"
1504
+ ].join("\n");
1505
+ }
1506
+ function createPendingNaturalCommand(intent, context, now = /* @__PURE__ */ new Date()) {
1507
+ const c = intent.capability;
1508
+ const command = intent.command ?? (c ? createNaturalEquivalentCommand(c, "") : "");
1509
+ if (!c || !command || intent.action !== "start_gate") return null;
1510
+ const createdAt = now.toISOString();
1511
+ const expiresAt = new Date(now.getTime() + 9e4).toISOString();
1512
+ return {
1513
+ gateId: `ng-${randomUUID().slice(0, 8)}`,
1514
+ capabilityId: c.id,
1515
+ source: "natural",
1516
+ exactCommand: command,
1517
+ command,
1518
+ risk: c.risk,
1519
+ scope: `current project ${context.projectPath}`,
1520
+ createdAt,
1521
+ expiresAt,
1522
+ requiresExactConfirmation: requiresExactNaturalConfirmation(c, command)
1523
+ };
1524
+ }
1525
+ function formatNaturalStartGate(intent, context, gate = createPendingNaturalCommand(intent, context)) {
1526
+ const c = intent.capability;
1527
+ const exactHint = gate?.requiresExactConfirmation ? intent.language === "en-US" ? "To continue, type the exact slash command; plain `yes` is not accepted for this action." : "\u5982\u8981\u7EE7\u7EED\uFF0C\u8BF7\u8F93\u5165\u7CBE\u786E slash command\uFF1B\u8FD9\u4E2A\u52A8\u4F5C\u4E0D\u80FD\u53EA\u56DE\u590D\u201C\u786E\u8BA4\u201D\u6216 yes\u3002" : intent.language === "en-US" ? "Reply `yes` to continue, or type anything else to cancel." : "\u56DE\u590D `\u786E\u8BA4` \u7EE7\u7EED\uFF1B\u8F93\u5165\u5176\u4ED6\u5185\u5BB9\u5219\u53D6\u6D88\u3002";
1528
+ if (c?.id === "trust") {
1529
+ return intent.language === "en-US" ? [
1530
+ "I recognized that you want to adjust workspace trust. Authorize?",
1531
+ "- Yes: continue to the safe confirmation path.",
1532
+ "- No: cancel; no workspace trust change is made.",
1533
+ "- Details: show what workspace trust can allow and which safety boundaries still apply."
1534
+ ].join("\n") : [
1535
+ "\u6211\u8BC6\u522B\u5230\u4F60\u60F3\u8C03\u6574\u5DE5\u4F5C\u533A\u4FE1\u4EFB\u3002\u662F\u5426\u6388\u6743\uFF1F",
1536
+ "- Yes\uFF1A\u7EE7\u7EED\u8FDB\u5165\u5B89\u5168\u786E\u8BA4\u8DEF\u5F84\u3002",
1537
+ "- No\uFF1A\u53D6\u6D88\uFF1B\u4E0D\u6539\u53D8\u5DE5\u4F5C\u533A\u4FE1\u4EFB\u3002",
1538
+ "- Details\uFF1A\u67E5\u770B workspace trust \u53EF\u5141\u8BB8\u4EC0\u4E48\uFF0C\u4EE5\u53CA\u54EA\u4E9B\u5B89\u5168\u8FB9\u754C\u4ECD\u7136\u751F\u6548\u3002"
1539
+ ].join("\n");
1540
+ }
1541
+ if (intent.language === "en-US") {
1542
+ return [
1543
+ `Ready to prepare: ${c?.titleEn ?? "command"}.`,
1544
+ "Protected follow-up actions still require their own approval.",
1545
+ exactHint
1546
+ ].join("\n");
1547
+ }
1548
+ return [
1549
+ `\u53EF\u4EE5\u51C6\u5907\u6267\u884C\uFF1A${c?.titleZh ?? "\u547D\u4EE4"}\u3002`,
1550
+ "\u540E\u7EED\u53D7\u4FDD\u62A4\u64CD\u4F5C\u4ECD\u4F1A\u5355\u72EC\u5BA1\u6279\u3002",
1551
+ exactHint
1552
+ ].join("\n");
1553
+ }
1554
+ function isNaturalGateExpired(gate, now = /* @__PURE__ */ new Date()) {
1555
+ return Date.parse(gate.expiresAt) <= now.getTime();
1556
+ }
1557
+ function matchesNaturalGateConfirmation(gate, text, now = /* @__PURE__ */ new Date()) {
1558
+ if (isNaturalGateExpired(gate, now)) return "expired";
1559
+ const normalized = text.trim();
1560
+ if (gate.requiresExactConfirmation) {
1561
+ return normalized === gate.exactCommand ? "confirmed" : "exact_required";
1562
+ }
1563
+ return /^(yes|y|confirm|确认|是|执行|继续)$/iu.test(normalized) ? "confirmed" : "cancelled";
1564
+ }
1565
+ function requiresExactNaturalConfirmation(c, command) {
1566
+ return c.risk === "dangerous" || c.writesConfig || c.entersPermissionPipeline || ["workflows", "fork"].includes(c.id) || /\b(refresh|init|enable|accept|delete|restore|bypass|full-access|dontask|dontAsk|add|remove|install|job|remote|hook)\b|刷新|建立|启用|接受|删除|恢复|完全访问|免确认|安装依赖/u.test(
1567
+ command
1568
+ );
1569
+ }
1570
+ function formatHumanRisk(c, language) {
1571
+ if (!c)
1572
+ return language === "en-US" ? "Unknown risk; do not continue if unsure." : "\u98CE\u9669\u672A\u77E5\uFF1B\u4E0D\u786E\u5B9A\u65F6\u4E0D\u8981\u7EE7\u7EED\u3002";
1573
+ if (c.risk === "dangerous") {
1574
+ return language === "en-US" ? "High risk. This cannot run directly from natural language and must stay behind explicit confirmation and the permission pipeline." : "\u9AD8\u98CE\u9669\u3002\u4E0D\u80FD\u7531\u81EA\u7136\u8BED\u8A00\u76F4\u901A\u6267\u884C\uFF0C\u5FC5\u987B\u4FDD\u7559\u7CBE\u786E\u786E\u8BA4\u548C\u6743\u9650\u7BA1\u9053\u3002";
1575
+ }
1576
+ if (c.risk === "tool_permission") {
1577
+ return language === "en-US" ? "May use tools or touch project state. It will still enter the tool permission flow before any protected action." : "\u53EF\u80FD\u4F7F\u7528\u5DE5\u5177\u6216\u89E6\u53CA\u9879\u76EE\u72B6\u6001\uFF1B\u4EFB\u4F55\u53D7\u4FDD\u62A4\u52A8\u4F5C\u4ECD\u4F1A\u8FDB\u5165\u5DE5\u5177\u6743\u9650\u5BA1\u6279\u3002";
1578
+ }
1579
+ if (c.risk === "config_write") {
1580
+ return language === "en-US" ? "May change Linghun configuration. Review the exact command and keep a rollback path before continuing." : "\u53EF\u80FD\u4FEE\u6539 Linghun \u914D\u7F6E\uFF1B\u7EE7\u7EED\u524D\u8BF7\u786E\u8BA4\u7CBE\u786E\u547D\u4EE4\uFF0C\u5E76\u4FDD\u7559\u56DE\u6EDA\u8DEF\u5F84\u3002";
1581
+ }
1582
+ if (c.risk === "start_gate") {
1583
+ if (c.id === "index") {
1584
+ return language === "en-US" ? "Status/search/architecture are read-only. Init fast/refresh are safe local actions that run a safety scan before building the local code index. Rebuild/force requires exact confirmation. It should not modify source files." : "status/search/architecture \u4E3A\u53EA\u8BFB\uFF1Binit fast/refresh \u662F\u5E26\u5B89\u5168\u626B\u63CF\u7684\u672C\u5730\u5B89\u5168\u52A8\u4F5C\uFF0C\u4F1A\u751F\u6210\u672C\u5730\u4EE3\u7801\u7D22\u5F15\uFF1Brebuild/force \u9700\u8981\u7CBE\u786E\u786E\u8BA4\uFF1B\u4E0D\u5E94\u4FEE\u6539\u6E90\u7801\u3002";
1585
+ }
1586
+ return language === "en-US" ? "Requires a Start Gate before the equivalent command starts; later protected actions still need approval." : "\u9700\u8981\u5148\u901A\u8FC7 Start Gate \u624D\u4F1A\u542F\u52A8\u7B49\u4EF7\u547D\u4EE4\uFF1B\u540E\u7EED\u53D7\u4FDD\u62A4\u52A8\u4F5C\u4ECD\u9700\u5BA1\u6279\u3002";
1587
+ }
1588
+ return language === "en-US" ? "Read-only local state check." : "\u53EA\u8BFB\u672C\u5730\u72B6\u6001\u68C0\u67E5\u3002";
1589
+ }
1590
+ function formatRiskLine(c, language) {
1591
+ const details = [
1592
+ `risk ${c.risk}`,
1593
+ `readonly ${c.readonly ? "yes" : "no"}`,
1594
+ `start gate ${c.requiresStartGate ? "yes" : "no"}`,
1595
+ `writes config ${c.writesConfig ? "yes" : "no"}`,
1596
+ `permission pipeline ${c.entersPermissionPipeline ? "yes" : "no"}`
1597
+ ];
1598
+ const reason = c.risk === "dangerous" ? language === "en-US" ? "cannot run directly from natural language" : "\u4E0D\u80FD\u7531\u81EA\u7136\u8BED\u8A00\u76F4\u901A\u6267\u884C" : c.risk === "tool_permission" ? language === "en-US" ? "must enter tool permission pipeline" : "\u5FC5\u987B\u8FDB\u5165\u5DE5\u5177\u6743\u9650\u7BA1\u9053" : c.risk === "start_gate" ? language === "en-US" ? "requires Start Gate confirmation" : "\u9700\u8981 Start Gate \u786E\u8BA4" : language === "en-US" ? "read-only local state" : "\u53EA\u8BFB\u672C\u5730\u72B6\u6001";
1599
+ return `${details.join(", ")} \xB7 ${reason}`;
1600
+ }
1601
+ function cap(id, slash, aliases, titleZh, titleEn, descriptionZh, descriptionEn, whenToUseZh, whenToUseEn, risk, options = {}) {
1602
+ const readonly = risk === "readonly" || options.readonly === true;
1603
+ return {
1604
+ id,
1605
+ slash,
1606
+ aliases,
1607
+ group: options.group ?? inferCommandGroup(id, slash),
1608
+ titleZh,
1609
+ titleEn,
1610
+ descriptionZh,
1611
+ descriptionEn,
1612
+ whenToUseZh,
1613
+ whenToUseEn,
1614
+ risk,
1615
+ readonly,
1616
+ modelInvocable: options.modelInvocable ?? readonly,
1617
+ userInvocable: options.userInvocable ?? true,
1618
+ requiresStartGate: options.requiresStartGate ?? ["start_gate", "config_write", "dangerous"].includes(risk),
1619
+ writesConfig: options.writesConfig ?? risk === "config_write",
1620
+ entersPermissionPipeline: options.entersPermissionPipeline ?? (risk === "tool_permission" || risk === "dangerous"),
1621
+ bridgeSafe: options.bridgeSafe ?? (readonly || risk === "start_gate" || risk === "tool_permission"),
1622
+ hiddenReason: options.hiddenReason,
1623
+ runtimeStatusSubject: options.runtimeStatusSubject
1624
+ };
1625
+ }
1626
+ function createIntent(action, capability, confidence, reason, candidates, language, inquiry, normalized = "") {
1627
+ return {
1628
+ action,
1629
+ capability,
1630
+ confidence,
1631
+ command: createNaturalEquivalentCommand(capability, normalized),
1632
+ reason,
1633
+ candidates,
1634
+ language,
1635
+ inquiry,
1636
+ runtimeIntent: extractRuntimeIntent(capability, inquiry),
1637
+ riskHandler: action === "ask_clarify" ? "clarify" : action === "safe_local_action" ? "safe_local_action" : capability.risk
1638
+ };
1639
+ }
1640
+ function extractRuntimeIntent(capability, inquiry) {
1641
+ if (inquiry !== "status") return { kind: "none" };
1642
+ return capability?.runtimeStatusSubject ? { kind: "runtime_status_query", subject: capability.runtimeStatusSubject } : { kind: "none" };
1643
+ }
1644
+ function findCurrentWorkStatusCapability(catalog, normalized, inquiry) {
1645
+ if (inquiry !== "status" || !isCurrentWorkStatusQuestion(normalized)) return void 0;
1646
+ return catalog.find((item) => item.id === "status");
1647
+ }
1648
+ function isCurrentWorkStatusQuestion(text) {
1649
+ return /(?:当前|现在|目前).*(?:在做什么|做什么|在做|做到哪|进展|进度|任务状态|工作状态)|^(?:当前|现在|目前)状态$|(?:进展|进度).*(?:怎么样|如何|到哪|状态)|(?:current|latest)\s+(?:work|task|status|progress)|(?:what|where).*(?:doing|working on|progress)/u.test(
1650
+ text
1651
+ ) && !/模型|model|provider|权限|permission|cache|缓存|index|索引|memory|记忆/u.test(text);
1652
+ }
1653
+ function detectInputLanguage(text, preferred) {
1654
+ if (preferred === "en-US") return "en-US";
1655
+ return /[\u4e00-\u9fff]/u.test(text) ? "zh-CN" : "en-US";
1656
+ }
1657
+ function normalizeIntentText(text) {
1658
+ return text.toLowerCase().replace(/[??。!!,,::()()]/gu, " ").replace(/\s+/gu, " ").trim();
1659
+ }
1660
+ function classifyNaturalControlIntent(text) {
1661
+ const projectRulesRead = /项目规则|本仓库规则|linghun\.md|project rules/u.test(text);
1662
+ const indexAction = classifyIndexAction(text);
1663
+ const actionRequest = isActionRequest(text);
1664
+ return {
1665
+ inquiry: classifyInquiry(text, projectRulesRead, actionRequest),
1666
+ dangerousReason: classifyDangerousReason(text),
1667
+ indexAction,
1668
+ projectRulesRead,
1669
+ actionRequest
1670
+ };
1671
+ }
1672
+ function classifyInquiry(text, projectRulesRead, actionRequest) {
1673
+ if (isCurrentWorkStatusQuestion(text)) return "status";
1674
+ if (/是否|开了吗|enabled|status|状态|当前|现在|什么模型|哪个模型|用的哪个|命中|hit rate|list|有哪些|what model|current model|好了没|好了么|已经.*是吧|已经.*了吗|ready|就绪/u.test(
1675
+ text
1676
+ )) {
1677
+ return "status";
1678
+ }
1679
+ if (/key|api key|configured|connected|working|doctor|诊断|配好了吗|配置正常|配置.*问题|为什么不能用|不能用|连上了吗|可用吗/u.test(
1680
+ text
1681
+ )) {
1682
+ return "doctor";
1683
+ }
1684
+ if (projectRulesRead) return "read";
1685
+ if (/风险|危险|safe|risk|danger/u.test(text)) return "risk";
1686
+ if (/怎么|如何|用途|干什么|what does|how do i|how to|what is/u.test(text)) return "usage";
1687
+ return actionRequest ? "execute" : "howto";
1688
+ }
1689
+ function detectInquiry(text) {
1690
+ return classifyNaturalControlIntent(text).inquiry;
1691
+ }
1692
+ function findExplicitSlashCapability(catalog, slash, normalized) {
1693
+ if (slash === "/doctor" && /hook|hooks|钩子/u.test(normalized)) {
1694
+ return catalog.find((item) => item.id === "hooks");
1695
+ }
1696
+ const registryEntry = SLASH_COMMAND_REGISTRY.find(
1697
+ (item) => item.slash === slash && item.userVisible
1698
+ );
1699
+ return catalog.find((item) => item.id === registryEntry?.capabilityId) ?? catalog.find((item) => item.slash === slash);
1700
+ }
1701
+ function classifyDangerousReason(text) {
1702
+ if (/直接|force|强制|full-access|full access|完全访问|bypass|npm install|pnpm add|install dependency|安装依赖|接受所有|accept all|delete memory|restore|hook|remote|job/u.test(
1703
+ text
1704
+ )) {
1705
+ return "high-risk wording";
1706
+ }
1707
+ return null;
1708
+ }
1709
+ function isDangerousNaturalTarget(id) {
1710
+ return [
1711
+ "write",
1712
+ "edit",
1713
+ "multiedit",
1714
+ "bash",
1715
+ "permissions",
1716
+ "rewind",
1717
+ "plugins",
1718
+ "skills",
1719
+ "index",
1720
+ "cache",
1721
+ "memory",
1722
+ "hooks",
1723
+ "mode"
1724
+ ].includes(id);
1725
+ }
1726
+ function isMcpIndexControlRequest(text, capabilityId) {
1727
+ return (capabilityId === "mcp" || capabilityId === "index") && /mcp/u.test(text) && /索引|index/u.test(text) && /打开|开启|启用|enable|turn on/u.test(text);
1728
+ }
1729
+ function classifyIndexAction(text) {
1730
+ if (/重建|重新索引|重做索引|清空.*重建|force rebuild|rebuild|reindex/u.test(text)) {
1731
+ return "rebuild";
1732
+ }
1733
+ if (/(?:帮我|请)?.*(?:更新|刷新|同步).*索引|refresh the project index|update the project index|sync the project index/u.test(
1734
+ text
1735
+ ) || /(?:帮我|请)?.*(?:建立|初始化|创建).*索引|build the index|init index|create index/u.test(text)) {
1736
+ return "safe";
1737
+ }
1738
+ return null;
1739
+ }
1740
+ function isNaturalControlPlaneIntent(id, text, inquiry) {
1741
+ const classification = classifyNaturalControlIntent(text);
1742
+ if (["status", "doctor", "usage", "risk", "read"].includes(inquiry)) return true;
1743
+ if (id === "read") return classification.projectRulesRead;
1744
+ if (id === "index") return classification.indexAction === "safe";
1745
+ if (id === "mode" && extractPermissionMode(text)) return true;
1746
+ if (id === "trust") return true;
1747
+ if (id === "workflows" && /plan|计划|规划/u.test(text)) return true;
1748
+ if (["autopilot", "job", "background"].includes(id)) {
1749
+ return /持续推进|继续做|不用每步都问|autopilot|本地任务|长期任务|任务报告|durable job|job report|后台|background|长任务|long task/u.test(
1750
+ text
1751
+ );
1752
+ }
1753
+ if (id === "agents") {
1754
+ return /agent|agents|智能体|subagent|停止|停掉|取消|interrupt|cancel|stop|kill|有哪些|list|状态|status/u.test(
1755
+ text
1756
+ );
1757
+ }
1758
+ return ["model", "cache", "memory", "mode", "readiness"].includes(id) && !classification.actionRequest;
1759
+ }
1760
+ function isFirstBatchStatusCapability(id) {
1761
+ return [
1762
+ "memory",
1763
+ "index",
1764
+ "cache",
1765
+ "model",
1766
+ "mode",
1767
+ "workflows",
1768
+ "skills",
1769
+ "plugins",
1770
+ "hooks",
1771
+ "readiness",
1772
+ "sessions",
1773
+ "resume",
1774
+ "branch"
1775
+ ].includes(id);
1776
+ }
1777
+ function isActionRequest(text) {
1778
+ if (/好了没|好了么|已经.*是吧|已经.*了吗|ready/u.test(text)) return false;
1779
+ return /帮我|请|直接|打开|建立|恢复|停止|停掉|取消|build|start|create|run|enable|accept|force|switch|set|resume|stop|cancel|kill|interrupt/u.test(
1780
+ text
1781
+ );
1782
+ }
1783
+ function scoreCapability(capability, normalized, original) {
1784
+ let score = 0;
1785
+ const hay = `${capability.id} ${capability.slash} ${capability.aliases.join(" ")} ${capability.titleZh} ${capability.titleEn} ${capability.descriptionZh} ${capability.descriptionEn} ${capability.whenToUseZh} ${capability.whenToUseEn}`.toLowerCase();
1786
+ for (const token of splitIntentTokens(normalized)) {
1787
+ if (token.length < 2) continue;
1788
+ if (hay.includes(token)) score += token.length > 4 ? 1.2 : 0.7;
1789
+ }
1790
+ if (original.includes(capability.slash)) score += 6;
1791
+ for (const alias of capability.aliases) {
1792
+ const lower = alias.toLowerCase();
1793
+ if (normalized.includes(lower)) score += 3;
1794
+ }
1795
+ if (capability.id === "readiness" && /readiness|就绪|体检|terminal readiness|project doctor|doctor project|context picker|rollback coach|cost preview|drift linter|项目诊断|回滚建议|成本预估|漂移检查/u.test(
1796
+ normalized
1797
+ ))
1798
+ score += 6;
1799
+ if (capability.id === "hooks" && /hook|钩子/u.test(normalized)) score += 3;
1800
+ if (capability.id === "workflows" && /bug-fix|bug fix|工作流|workflow|workflow plan|工作流计划/u.test(normalized))
1801
+ score += 3;
1802
+ if (capability.id === "workflows" && /plan|计划|规划/u.test(normalized) && /workflow|工作流/u.test(normalized))
1803
+ score += 5;
1804
+ if (capability.id === "cache" && /缓存|命中|hit rate|cache/u.test(normalized)) score += 3;
1805
+ if (capability.id === "memory" && /记忆|memory/u.test(normalized)) score += 3;
1806
+ if (capability.id === "index" && /索引|index|搜索代码|search code|architecture|更新|刷新|重建|重新索引|重做索引|同步索引/u.test(
1807
+ normalized
1808
+ ))
1809
+ score += 3;
1810
+ if (capability.id === "read" && /项目规则|本仓库规则|linghun\.md|project rules/u.test(normalized))
1811
+ score += 8;
1812
+ if (capability.id === "model" && /模型|model|provider|claude|deepseek|gpt|route|路由/u.test(normalized))
1813
+ score += 4;
1814
+ if (capability.id === "mode" && /权限模式|permission mode|full-access|full access|完全访问|bypass|auto-review|auto review|自动审查|自动模式|accept edits|acceptedits|auto|dontask|don't ask|plan mode/u.test(
1815
+ normalized
1816
+ ))
1817
+ score += 5;
1818
+ if (capability.id === "diff" && /diff|改动|差异/u.test(normalized)) score += 3;
1819
+ if (capability.id === "review" && /review|审查/u.test(normalized)) score += 3;
1820
+ if (capability.id === "grep" && /搜索代码|search code|搜索.*todo/u.test(normalized)) score += 5;
1821
+ if (capability.id === "todo" && /todo|任务|task/u.test(normalized) && !/搜索代码|search code|搜索.*todo|本地任务|长期任务|任务报告|后台任务|长任务|durable job|job/u.test(
1822
+ normalized
1823
+ ))
1824
+ score += 4;
1825
+ if (capability.id === "background" && /后台|background|长任务|long task/u.test(normalized))
1826
+ score += 6;
1827
+ if (capability.id === "autopilot" && /持续推进|继续做|不用每步都问|autopilot/u.test(normalized))
1828
+ score += 6;
1829
+ if (capability.id === "job" && /本地任务|长期任务|durable job|job report/u.test(normalized))
1830
+ score += 6;
1831
+ if (capability.id === "job" && /^任务报告$/u.test(normalized)) score += 6;
1832
+ if (capability.id === "remote" && /远程|remote|飞书|lark|feishu|钉钉|dingtalk|企业微信|wecom/u.test(normalized))
1833
+ score += 6;
1834
+ if (capability.id === "glob" && /按模式找文件|模式找文件|find files|匹配文件/u.test(normalized))
1835
+ score += 4;
1836
+ if (capability.id === "fork" && /agent|智能体|verifier/u.test(normalized)) score += 2;
1837
+ return score;
1838
+ }
1839
+ function splitIntentTokens(text) {
1840
+ const ascii = text.match(/[a-z0-9_.\/-]+/giu) ?? [];
1841
+ const zh = text.match(/[\u4e00-\u9fff]{2,}/gu) ?? [];
1842
+ return [...ascii, ...zh];
1843
+ }
1844
+ function uniqueCapabilities(items) {
1845
+ const seen = /* @__PURE__ */ new Set();
1846
+ return items.filter((item) => {
1847
+ if (seen.has(item.id)) return false;
1848
+ seen.add(item.id);
1849
+ return true;
1850
+ });
1851
+ }
1852
+ function isUsageOrRiskQuestion(text, inquiry) {
1853
+ return inquiry === "usage" || inquiry === "risk" || /干什么|what does|危险|risk|how do i|怎么/u.test(text);
1854
+ }
1855
+ function isAmbiguousCapabilityList(text, candidates) {
1856
+ const inquiry = detectInquiry(text);
1857
+ if (candidates.length < 2 || inquiry === "status" || inquiry === "doctor" || inquiry === "read" || isActionRequest(text) || Boolean(extractPermissionMode(text)) || isUsageOrRiskQuestion(text, inquiry) || !/^[\u4e00-\u9fff]{4,}$/u.test(text)) {
1858
+ return false;
1859
+ }
1860
+ const matched = candidates.filter(
1861
+ (item) => item.aliases.some((alias) => alias.length >= 2 && text.includes(alias.toLowerCase()))
1862
+ );
1863
+ return matched.length >= 2;
1864
+ }
1865
+ function isStatusLike(text, capability) {
1866
+ return capability.readonly || /状态|status|当前|enabled|开了吗|命中|hit rate|list|有哪些|what model/u.test(text);
1867
+ }
1868
+ function isAgentCancelIntent(text) {
1869
+ return /停止|停掉|取消|interrupt|cancel|stop|kill/u.test(text);
1870
+ }
1871
+ function createNaturalEquivalentCommand(capability, normalized) {
1872
+ if (capability.id === "hooks") return "/doctor hooks";
1873
+ if (capability.id === "cache") {
1874
+ return normalized.includes("refresh") || normalized.includes("\u5237\u65B0") || normalized.includes("\u9884\u70ED") ? "/cache refresh" : "/cache status";
1875
+ }
1876
+ if (capability.id === "index") {
1877
+ if (/好了没|好了么|已经.*是吧|已经.*了吗|已经建立了吗|ready|status|状态/u.test(normalized)) {
1878
+ return "/index status";
1879
+ }
1880
+ if (/重建|重新索引|重做索引|rebuild|reindex/u.test(normalized))
1881
+ return "/index refresh --confirm-rebuild";
1882
+ if (/更新|刷新|同步索引|refresh|update|sync/u.test(normalized)) return "/index refresh";
1883
+ if (/build|建立|初始化|创建|init|create/u.test(normalized)) return "/index init fast";
1884
+ if (/architecture|架构/u.test(normalized)) return "/index architecture";
1885
+ if (/search|搜索|查找|todo/u.test(normalized)) return "/index search <query>";
1886
+ return "/index status";
1887
+ }
1888
+ if (capability.id === "workflows") {
1889
+ if (/plan|计划|规划/u.test(normalized)) {
1890
+ const planGoal = normalized.replace(/.*(?:plan|计划|规划)\s*/u, "").trim();
1891
+ return planGoal ? `/workflows plan ${planGoal}` : "/workflows plan";
1892
+ }
1893
+ const workflow = extractWorkflowName(normalized);
1894
+ return workflow ? `/workflows ${workflow}` : "/workflows";
1895
+ }
1896
+ if (capability.id === "fork") {
1897
+ const role = extractAgentRole(normalized);
1898
+ return role ? `/fork ${role} <task>` : "/fork <explorer|planner|verifier|worker> <task>";
1899
+ }
1900
+ if (capability.id === "agents") {
1901
+ if (/停止所有|全部停止|停掉所有|取消所有|全部取消|stop all|cancel all|kill all/u.test(normalized)) {
1902
+ return "/agents cancel all";
1903
+ }
1904
+ if (/停止|停掉|取消|interrupt|cancel|stop|kill/u.test(normalized)) return "/agents cancel <id>";
1905
+ return "/agents";
1906
+ }
1907
+ if (capability.id === "permissions" && /add|remove|添加|删除/u.test(normalized))
1908
+ return "/permissions add|remove ...";
1909
+ if (capability.id === "mode") {
1910
+ const mode = extractPermissionMode(normalized);
1911
+ return mode ? `/mode ${mode}` : "/mode";
1912
+ }
1913
+ if (capability.id === "trust") {
1914
+ return "/trust status";
1915
+ }
1916
+ if (capability.id === "autopilot") {
1917
+ return "/autopilot";
1918
+ }
1919
+ if (capability.id === "model") {
1920
+ if (/key|api key|configured|connected|working|doctor|诊断|配好了吗|配置正常|配置.*问题|为什么不能用|不能用|连上了吗|可用吗/u.test(
1921
+ normalized
1922
+ )) {
1923
+ return "/model route doctor";
1924
+ }
1925
+ if (/route|路由/u.test(normalized)) return "/model route";
1926
+ const candidate = extractModelCandidate(normalized);
1927
+ return candidate ? `/model route set executor ${candidate}` : "/model";
1928
+ }
1929
+ if (capability.id === "branch") {
1930
+ const purpose = extractBranchPurpose(normalized);
1931
+ return purpose ? `/branch ${purpose}` : "/branch";
1932
+ }
1933
+ if (capability.id === "bash" && /npm install/u.test(normalized)) return "/bash npm install";
1934
+ if (capability.id === "read" && /项目规则|本仓库规则|linghun\.md|project rules/u.test(normalized))
1935
+ return "/read LINGHUN.md";
1936
+ return capability.slash;
1937
+ }
1938
+ function extractPermissionMode(text) {
1939
+ if (/full-access|full access|完全访问|bypass|绕过/u.test(text)) return "full-access";
1940
+ if (/auto-review|auto review|自动审查|自动模式|自动审批|acceptedits|accept edits|接受编辑|\bauto\b/u.test(
1941
+ text
1942
+ ))
1943
+ return "auto-review";
1944
+ if (/dontask|don't ask|dont ask|不询问/u.test(text)) return "default";
1945
+ if (/plan|计划/u.test(text)) return "plan";
1946
+ if (/default|默认/u.test(text)) return "default";
1947
+ return null;
1948
+ }
1949
+ function extractWorkflowName(text) {
1950
+ const names = [
1951
+ "bug-fix",
1952
+ "review",
1953
+ "refactor-plan",
1954
+ "doc-to-code",
1955
+ "design-to-code",
1956
+ "release-note"
1957
+ ];
1958
+ for (const name of names) {
1959
+ if (text.includes(name)) return name;
1960
+ }
1961
+ if (/bug fix|修 bug|修复 bug/u.test(text)) return "bug-fix";
1962
+ if (/审查|代码审查/u.test(text)) return "review";
1963
+ if (/重构/u.test(text)) return "refactor-plan";
1964
+ if (/文档.*代码|doc to code/u.test(text)) return "doc-to-code";
1965
+ if (/设计.*代码|design to code/u.test(text)) return "design-to-code";
1966
+ if (/release|发布说明/u.test(text)) return "release-note";
1967
+ return null;
1968
+ }
1969
+ function extractAgentRole(text) {
1970
+ if (/explorer|探索|查代码/u.test(text)) return "explorer";
1971
+ if (/planner|计划|规划/u.test(text)) return "planner";
1972
+ if (/verifier|验证|复检/u.test(text)) return "verifier";
1973
+ if (/worker|执行|实现/u.test(text)) return "worker";
1974
+ return null;
1975
+ }
1976
+ function extractModelCandidate(text) {
1977
+ const match = /(?:set|switch to|切到|换到|使用)\s+([a-z0-9_.:-]+)/iu.exec(text);
1978
+ return match?.[1] && !["model", "route"].includes(match[1]) ? match[1] : null;
1979
+ }
1980
+ function extractBranchPurpose(text) {
1981
+ const match = /(?:branch|分支)(?: session)?\s+(.+)$/iu.exec(text);
1982
+ if (!match?.[1]) return null;
1983
+ return match[1].trim().slice(0, 80) || null;
1984
+ }
1985
+
1986
+ export {
1987
+ SLASH_COMMAND_REGISTRY,
1988
+ findSlashCommandRegistryEntry,
1989
+ getCommandCapabilityCatalog,
1990
+ validateCommandCapabilityCoverage,
1991
+ getUserVisibleCommandCapabilities,
1992
+ buildRuntimeStatusForModel,
1993
+ createModelCapabilitySummary,
1994
+ routeNaturalIntent,
1995
+ formatNaturalClarification,
1996
+ formatCapabilityAnswer,
1997
+ formatNaturalPermissionBlock,
1998
+ createPendingNaturalCommand,
1999
+ formatNaturalStartGate,
2000
+ isNaturalGateExpired,
2001
+ matchesNaturalGateConfirmation,
2002
+ formatRiskLine
2003
+ };