@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,663 @@
1
+ import {
2
+ redactedPath,
3
+ runCommandCapture
4
+ } from "./chunk-RVY34HK4.js";
5
+ import {
6
+ formatFeatureFlags,
7
+ getFeatureFlags
8
+ } from "./chunk-E72U7WW7.js";
9
+ import {
10
+ createHookState,
11
+ createPluginState,
12
+ createSkillState,
13
+ stableId
14
+ } from "./chunk-QLRTQHTR.js";
15
+ import {
16
+ getRuntimeStatusProvider
17
+ } from "./chunk-3LT6OWQ2.js";
18
+ import {
19
+ stableHash
20
+ } from "./chunk-4T5DJW54.js";
21
+ import {
22
+ formatError,
23
+ sanitizeDiagnosticText,
24
+ truncateDisplay
25
+ } from "./chunk-OMZYPQVA.js";
26
+
27
+ // src/extension-command-runtime.ts
28
+ import { randomUUID } from "crypto";
29
+ import { mkdir, mkdtemp, readFile, rm, stat, writeFile } from "fs/promises";
30
+ import { tmpdir } from "os";
31
+ import { basename, extname, join, resolve } from "path";
32
+ import { resetExtensionTrustForInstall, saveExtensionEnablement } from "@linghun/config";
33
+ function formatConfigOverview(context) {
34
+ const zh = context.language === "zh-CN";
35
+ const yes = zh ? "\u662F" : "yes";
36
+ const no = zh ? "\u5426" : "no";
37
+ const onOff = (b) => b ? yes : no;
38
+ const executor = context.config.modelRoutes.routes.find((r) => r.role === "executor");
39
+ const trust = context.config.workspaceTrust;
40
+ const trustLabel = trust.recorded ? trust.level === "trusted" ? zh ? "\u5DF2\u4FE1\u4EFB" : "trusted" : zh ? "\u53D7\u9650" : "restricted" : zh ? "\u672A\u8BB0\u5F55" : "unrecorded";
41
+ const mcpServers = context.config.mcp.enabledServers.join(", ") || (zh ? "\u65E0" : "none");
42
+ const indexStatus = context.index.status || (zh ? "\u672A\u77E5" : "unknown");
43
+ const cacheCount = context.cache.history.length;
44
+ const bgRunning = context.backgroundTasks.filter((t) => t.status === "running").length;
45
+ const skillsTrusted = context.skills.trustedIds.length;
46
+ const pluginsTrusted = context.plugins.trustedIds.length;
47
+ const remoteEnabled = Boolean(
48
+ context.config.remote?.enabled
49
+ );
50
+ if (zh) {
51
+ return [
52
+ "\u914D\u7F6E\u6982\u89C8\uFF08\u4E00\u7AD9\u5F0F\u53EA\u8BFB\uFF09",
53
+ `- \u8BED\u8A00\uFF1A${context.config.language}\uFF08\u7528 /language en-US \u5207\u6362\uFF09`,
54
+ `- \u6A21\u578B\uFF1A${context.model}\uFF08\u6267\u884C\u5668\u5DE5\u5177 ${onOff(Boolean(executor?.allowTools))}\uFF1B\u7528 /model\u3001/model doctor\u3001/model route \u67E5\u770B\u4E0E\u8BCA\u65AD\uFF09`,
55
+ `- \u6743\u9650\u6A21\u5F0F\uFF1A${context.permissionMode}\uFF08\u7528 /mode \u5207\u6362\uFF1B\u89C4\u5219\u7528 /permissions\uFF09`,
56
+ `- \u5DE5\u4F5C\u533A\u4FE1\u4EFB\uFF1A${trustLabel}\uFF08\u7528 /trust \u8C03\u6574\uFF09`,
57
+ `- \u7D22\u5F15\uFF1A${indexStatus}\uFF08\u7528 /index status\u3001/index doctor\u3001/index check\uFF09`,
58
+ `- MCP\uFF1A\u5DF2\u914D\u7F6E\u670D\u52A1 ${mcpServers}\uFF08\u7528 /mcp\u3001/mcp doctor\u3001/mcp tools\uFF09`,
59
+ "- \u8BB0\u5FC6\uFF1A\u7528 /memory\u3001/memory storage\u3001/memory review\u3001/memory learn",
60
+ `- \u7F13\u5B58\uFF1A\u5386\u53F2 ${cacheCount} \u6761\uFF08\u7528 /cache status\u3001/cache-log\u3001/usage\u3001/stats\uFF09`,
61
+ `- \u540E\u53F0\uFF1A\u8FD0\u884C\u4E2D ${bgRunning}\uFF08\u7528 /background\u3001/job\u3001/details\uFF09`,
62
+ `- \u8FDC\u7A0B\uFF1A${onOff(remoteEnabled)}\uFF08\u7528 /remote\uFF09`,
63
+ `- \u94A9\u5B50\uFF1A${onOff(context.hooks.enabled)}\uFF1B\u9879\u76EE\u4FE1\u4EFB ${onOff(context.hooks.projectTrusted)}\uFF08\u7528 /doctor hooks\uFF09`,
64
+ `- \u63D2\u4EF6\uFF1A\u53D1\u73B0 ${onOff(context.plugins.enabled)}\uFF1B\u4FE1\u4EFB id \u6570 ${pluginsTrusted}\uFF08\u7528 /plugins\u3001/plugins doctor\uFF09`,
65
+ `- \u6280\u80FD\uFF1A\u53D1\u73B0 ${onOff(context.skills.enabled)}\uFF1B\u4FE1\u4EFB id \u6570 ${skillsTrusted}\uFF08\u7528 /skills\u3001/skills status\uFF09`,
66
+ `- \u5DE5\u4F5C\u6D41\uFF1A\u53D1\u73B0 ${onOff(context.workflows.enabled)}\uFF08\u7528 /workflows\uFF09`,
67
+ "\u4E0B\u4E00\u6B65\uFF1A\u76F4\u63A5\u8F93\u5165\u5BF9\u5E94 slash \u8FDB\u5165\uFF1B\u7528 /features \u67E5\u770B\u9ED8\u8BA4\u529F\u80FD\u7B56\u7565\uFF0C\u7528 /help all \u67E5\u770B\u5B8C\u6574\u547D\u4EE4\u8868\u3002"
68
+ ].join("\n");
69
+ }
70
+ return [
71
+ "Configuration overview (one-stop read-only)",
72
+ `- language: ${context.config.language} (switch via /language en-US)`,
73
+ `- model: ${context.model} (executor tools ${onOff(Boolean(executor?.allowTools))}; use /model, /model doctor, /model route)`,
74
+ `- permission mode: ${context.permissionMode} (switch via /mode; rules via /permissions)`,
75
+ `- workspace trust: ${trustLabel} (adjust via /trust)`,
76
+ `- index: ${indexStatus} (use /index status, /index doctor, /index check)`,
77
+ `- MCP: configured servers ${mcpServers} (use /mcp, /mcp doctor, /mcp tools)`,
78
+ "- memory: use /memory, /memory storage, /memory review, /memory learn",
79
+ `- cache: history ${cacheCount} (use /cache status, /cache-log, /usage, /stats)`,
80
+ `- background: running ${bgRunning} (use /background, /job, /details)`,
81
+ `- remote: ${onOff(remoteEnabled)} (use /remote)`,
82
+ `- hooks: ${onOff(context.hooks.enabled)}; project trusted ${onOff(context.hooks.projectTrusted)} (use /doctor hooks)`,
83
+ `- plugins: discover ${onOff(context.plugins.enabled)}; trusted ids ${pluginsTrusted} (use /plugins, /plugins doctor)`,
84
+ `- skills: discover ${onOff(context.skills.enabled)}; trusted ids ${skillsTrusted} (use /skills, /skills status)`,
85
+ `- workflows: discover ${onOff(context.workflows.enabled)} (use /workflows)`,
86
+ "Next: type the slash to enter the panel. /features for default policy. /help all for the full command list."
87
+ ].join("\n");
88
+ }
89
+ function formatFeaturePolicy(context) {
90
+ return [
91
+ "Feature policy\uFF08default CCB-style posture\uFF09",
92
+ "Recommended foundation\uFF08default on / visible\uFF09",
93
+ `- language: ${context.config.language}; en-US available via /language en-US`,
94
+ `- model/tool loop: provider tools ${context.config.modelRoutes.routes.find((route) => route.role === "executor")?.allowTools ? "yes" : "no"}; evidence and long output are kept in details, available via /details`,
95
+ `- cache/stats: /cache status, /break-cache status, /usage, /stats; history ${context.cache.history.length}`,
96
+ `- model doctor: /model doctor and /model route doctor; provider ${getRuntimeStatusProvider(context)} model ${context.model}`,
97
+ "- index: status/search/architecture are readonly; init fast/refresh are safe local actions with safety scan; auto full-repo index on startup no",
98
+ `- codebase-memory MCP: discoverable/diagnosable via /mcp doctor; enabled servers ${context.config.mcp.enabledServers.join(",") || "none"}`,
99
+ `- permissions: project allowlist visible via /permissions; default mode ${context.permissionMode}`,
100
+ "Advanced/high-cost/automation\uFF08discoverable, not auto-run\uFF09",
101
+ "- memory: controlled extraction runtime on when learning is active; stable taxonomy memory writes only to dedicated memory dir; review via /memory review",
102
+ `- skills: discover manifests ${context.skills.enabled ? "yes" : "no"}; auto execute no; trusted ids ${context.skills.trustedIds.join(",") || "none"}`,
103
+ `- workflows: discover templates ${context.workflows.enabled ? "yes" : "no"}; auto run no; /workflows <name> only shows Start Gate`,
104
+ `- plugins: discover manifests ${context.plugins.enabled ? "yes" : "no"}; auto execute no; trusted ids ${context.plugins.trustedIds.join(",") || "none"}`,
105
+ "- agents/background: manual commands only; verifier auto fork no; coordinator/multi-worker unsupported",
106
+ "Dangerous defaults\uFF08off\uFF09",
107
+ "- mode switching: direct /mode and Shift+Tab cycling; switching modes does not bypass hard denies, path safety, or the permission pipeline",
108
+ `- hooks: enabled ${context.hooks.enabled ? "yes" : "no"}; project trusted ${context.hooks.projectTrusted ? "yes" : "no"}; auto execution no`,
109
+ "- auto accept all edits no; auto dependency install no; auto networking no; delete/rename/restore auto execution no",
110
+ "- plugin marketplace auto install/update no; remote bridge/control auto connect no; continuous phase progression no",
111
+ "Runtime feature flags\uFF08local, not remote GrowthBook\uFF09",
112
+ ...formatFeatureFlags(getFeatureFlags(context)),
113
+ "Unsupported / pending",
114
+ "- remote channels, voice, computer-use/browser control, daemon jobs, plugin marketplace, and AI sessions auto injection are not default features."
115
+ ].join("\n");
116
+ }
117
+ function formatSkills(context) {
118
+ const lines = [
119
+ "Skills\uFF08summary-first / load-on-demand\uFF09",
120
+ `- projectDir: ${context.skills.projectDir}`,
121
+ `- userDir: ${context.skills.userDir}`,
122
+ `- enabled: ${context.skills.enabled ? "yes" : "no"}`,
123
+ `- evolution candidates: ${context.skills.evolutionCandidates.length}\uFF08candidate only; auto enable no\uFF09`
124
+ ];
125
+ if (context.skills.lastError) {
126
+ lines.push(`- lastError: ${context.skills.lastError}`);
127
+ }
128
+ if (context.skills.skills.length === 0) {
129
+ lines.push(
130
+ "- none\uFF1A\u53EF\u8FD0\u884C /skills add \u67E5\u770B\u6CE8\u518C\u8DEF\u5F84\uFF0C\u6216 /skills install local <path> \u5B89\u88C5\u672C\u5730 skill manifest\u3002"
131
+ );
132
+ }
133
+ for (const skill of context.skills.skills) {
134
+ const error = skill.lastError ? `; last error ${skill.lastError}` : "";
135
+ lines.push(
136
+ `- ${skill.id}: ${skill.enabled ? "enabled" : "disabled"}; trusted ${skill.trusted ? "yes" : "no"}; source ${skill.source}; scope ${skill.scope}; version ${skill.version}; triggers ${skill.triggers.join(",") || "-"}; write ${skill.mayWrite ? "yes" : "no"}; bash ${skill.mayExecute ? "yes" : "no"}; network ${skill.mayNetwork ? "yes" : "no"}; summary ${skill.summary}${error}`
137
+ );
138
+ }
139
+ lines.push(
140
+ "- note: \u9ED8\u8BA4\u53EA\u52A0\u8F7D metadata/description/triggers/stable summary\uFF1B\u4E0D\u4F1A\u628A skill \u6B63\u6587\u585E\u8FDB prompt\uFF1Bevolution candidate \u53EA\u8BB0\u5F55\u5EFA\u8BAE\uFF0C\u4E0D\u5199\u6587\u4EF6\u3001\u4E0D\u542F\u7528\u3002"
141
+ );
142
+ return lines.join("\n");
143
+ }
144
+ function createSkillEvolutionCandidate(summary, source) {
145
+ return {
146
+ id: randomUUID(),
147
+ status: "candidate",
148
+ summary: truncateDisplay(summary.replace(/\s+/g, " "), 240),
149
+ triggerCondition: "repeated verified workflow success or explicit user request",
150
+ source,
151
+ risk: "medium",
152
+ suggestedPath: "manual-review-only; use /skills install local <path> after creating a trusted manifest",
153
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
154
+ };
155
+ }
156
+ function formatWorkflows(context) {
157
+ const isEn = context.language === "en-US";
158
+ return [
159
+ isEn ? "Workflows (local templates + real runner entry)" : "Workflows\uFF08\u672C\u5730\u6A21\u677F\u4E0E\u771F\u5B9E runner \u5165\u53E3\uFF09",
160
+ ...context.workflows.templates.map(
161
+ (item) => `- ${item.id}: purpose ${item.purpose}; risk ${item.risk}; writes files ${item.writesFiles ? "yes" : "no"}; validation ${item.recommendedValidation.join(" | ")}`
162
+ ),
163
+ isEn ? "- preview: /workflows plan <goal> generates preview only, no execution." : "- preview: /workflows plan <goal> \u53EA\u751F\u6210\u9884\u89C8\uFF0C\u4E0D\u6267\u884C\u3002",
164
+ isEn ? "- run: /workflows run <goal> reuses durable job runner, writes real task/transcript/report." : "- run: /workflows run <goal> \u590D\u7528 durable job runner\uFF0C\u5199\u5165\u771F\u5B9E task/transcript/report\u3002",
165
+ isEn ? "- gate: /workflows <name> enters start confirmation; write/bash/network/install still go through permission pipeline." : "- gate: /workflows <name> \u53EA\u8FDB\u5165\u542F\u52A8\u786E\u8BA4\u8BF4\u660E\uFF1B\u5199\u6587\u4EF6/Bash/\u8054\u7F51/\u5B89\u88C5\u4F9D\u8D56\u4ECD\u8D70\u6743\u9650\u7BA1\u9053\u3002"
166
+ ].join("\n");
167
+ }
168
+ function formatPlugins(context) {
169
+ const lines = [
170
+ "Plugins\uFF08\u672C\u5730 manifest loader\uFF09",
171
+ `- projectDir: ${context.plugins.projectDir}`,
172
+ `- userDir: ${context.plugins.userDir}`,
173
+ `- enabled: ${context.plugins.enabled ? "yes" : "no"}`
174
+ ];
175
+ if (context.plugins.lastError) {
176
+ lines.push(`- lastError: ${context.plugins.lastError}`);
177
+ }
178
+ if (context.plugins.plugins.length === 0) {
179
+ lines.push(
180
+ "- none\uFF1A\u628A\u672C\u5730 manifest \u653E\u5230 project/user plugins \u76EE\u5F55\uFF0C\u6216\u8FD0\u884C /plugins install local <path>\uFF1BGit/GitHub \u4EC5\u652F\u6301\u53D7\u63A7 metadata \u5B89\u88C5\u3002"
181
+ );
182
+ }
183
+ for (const plugin of context.plugins.plugins) {
184
+ lines.push(
185
+ `- ${plugin.id}: ${plugin.enabled ? "enabled" : "disabled"}; trusted ${plugin.trusted ? "yes" : "no"}; source ${plugin.source}; scope ${plugin.scope}; version ${plugin.version}; write ${plugin.mayWrite ? "yes" : "no"}; bash ${plugin.mayExecute ? "yes" : "no"}; network ${plugin.mayNetwork ? "yes" : "no"}; commands ${plugin.contributions.commands.join(",") || "-"}; hooks ${plugin.contributions.hooks.join(",") || "-"}; workflows ${plugin.contributions.workflows.join(",") || "-"}; skills ${plugin.contributions.skills.join(",") || "-"}`
186
+ );
187
+ }
188
+ lines.push("- note: plugin \u8D21\u732E\u9879\u7A33\u5B9A\u6392\u5E8F\uFF1B\u8D21\u732E\u5DE5\u5177\u4ECD\u8D70\u7EDF\u4E00\u6743\u9650\u7BA1\u9053\uFF0C\u52A0\u8F7D\u5931\u8D25\u9694\u79BB\u3002");
189
+ return lines.join("\n");
190
+ }
191
+ function formatPluginsDoctor(context) {
192
+ return [
193
+ "Plugins doctor",
194
+ `- manifest count: ${context.plugins.plugins.length}`,
195
+ `- disabled ids: ${context.plugins.disabledIds.join(",") || "none"}`,
196
+ `- trusted ids: ${context.plugins.trustedIds.join(",") || "none"}`,
197
+ ...context.plugins.plugins.map((plugin) => {
198
+ const risk = !plugin.trusted ? `BLOCK untrusted ${plugin.source}` : "ok";
199
+ const error = plugin.lastError ? `; last error ${plugin.lastError}` : "";
200
+ return `- ${plugin.id}: ${risk}; path ${plugin.path}; permissions ${plugin.permissions.join(",") || "none"}${error}`;
201
+ }),
202
+ "- boundary: \u4E0D\u6267\u884C\u8FDC\u7A0B\u5B89\u88C5/\u81EA\u52A8\u66F4\u65B0/\u5B8C\u6574\u6C99\u7BB1\uFF1B\u672A\u4FE1\u4EFB extension \u4E0D\u5F97\u5199\u6587\u4EF6\u3001\u8054\u7F51\u6216\u6267\u884C\u547D\u4EE4\u3002"
203
+ ].join("\n");
204
+ }
205
+ function formatHooksDoctor(context) {
206
+ const cacheImpact = stableHash(createExtensionFreshnessSummaryForDoctor(context));
207
+ const lines = [
208
+ "Hooks doctor",
209
+ `- hooks enabled: ${context.hooks.enabled ? "yes" : "no"}\uFF08\u9ED8\u8BA4\u5173\u95ED\uFF09`,
210
+ `- project trusted: ${context.hooks.projectTrusted ? "yes" : "no"}`,
211
+ `- timeout: ${context.hooks.timeoutMs}ms`,
212
+ `- output limit: ${context.hooks.outputLimitBytes} bytes`,
213
+ `- cache impact hash: ${cacheImpact}`
214
+ ];
215
+ if (context.hooks.hooks.length === 0) {
216
+ lines.push("- hooks: none");
217
+ }
218
+ for (const hook of context.hooks.hooks) {
219
+ lines.push(
220
+ `- ${hook.id}: event ${hook.event}; enabled ${hook.enabled ? "yes" : "no"}; trusted ${hook.trusted ? "yes" : "no"}; source ${hook.source}; scope ${hook.scope}; path ${hook.path}; timeout ${hook.timeoutMs}ms; output limit ${hook.outputLimitBytes} bytes; permissions ${hook.permissions.join(",") || "none"}; log ${hook.logPath ?? "-"}; last error ${hook.lastError ?? "none"}`
221
+ );
222
+ }
223
+ lines.push(
224
+ "- boundary: hook \u8BCA\u65AD\u53EA\u68C0\u67E5\u6765\u6E90\u3001\u8FB9\u754C\u548C\u53EF\u89C1\u72B6\u6001\uFF0C\u4E0D\u6267\u884C\u5B8C\u6574 hook \u811A\u672C\uFF1Bhook \u4E0D\u80FD\u7ED5\u8FC7\u6743\u9650\u7CFB\u7EDF\uFF1B\u5931\u8D25\u9694\u79BB\uFF1B\u663E\u793A\u8F93\u51FA\u6309 outputLimitBytes \u622A\u65AD\uFF0C\u5B8C\u6574\u8F93\u51FA\u53EA\u80FD\u5199 logPath\u3002"
225
+ );
226
+ return lines.join("\n");
227
+ }
228
+ function formatTrustNotice(kind, item) {
229
+ return [
230
+ `Trust notice\uFF1A\u5373\u5C06\u542F\u7528 ${kind} ${item.id}`,
231
+ `- source: ${item.source}`,
232
+ `- path: ${item.path}`,
233
+ `- version: ${item.version}`,
234
+ `- sourceUrl: ${item.lifecycle.sourceUrl ? sanitizeDiagnosticText(item.lifecycle.sourceUrl) : "-"}`,
235
+ `- ref/commit: ${item.lifecycle.ref ?? "-"}/${item.lifecycle.commit ?? "-"}`,
236
+ `- installedAt: ${item.lifecycle.installedAt ?? "unknown"}`,
237
+ `- permissions: ${item.permissions.join(",") || "none"}`,
238
+ `- trust: ${item.trusted ? "trusted" : "untrusted"}`,
239
+ `- may write ${item.mayWrite ? "yes" : "no"}; may execute ${item.mayExecute ? "yes" : "no"}; may network ${item.mayNetwork ? "yes" : "no"}`,
240
+ "- \u672A\u4FE1\u4EFB extension \u4E0D\u5F97\u5199\u6587\u4EF6\u3001\u8054\u7F51\u6216\u6267\u884C\u547D\u4EE4\uFF1B\u5B9E\u9645\u5DE5\u5177\u8C03\u7528\u4ECD\u8D70\u6743\u9650\u7BA1\u9053\u3002"
241
+ ].join("\n");
242
+ }
243
+ function formatExtensionStatus(kind, context) {
244
+ const items = kind === "skills" ? context.skills.skills : context.plugins.plugins;
245
+ const title = kind === "skills" ? "Skills Connect Lite status" : "Plugins Connect Lite status";
246
+ const disabledIds = kind === "skills" ? context.skills.disabledIds : context.plugins.disabledIds;
247
+ const trustedIds = kind === "skills" ? context.skills.trustedIds : context.plugins.trustedIds;
248
+ return [
249
+ title,
250
+ "- lifecycle: add/install, validate, enable/disable, remove/update, trust notice, doctor/status",
251
+ `- installed: ${items.length}`,
252
+ `- disabled ids: ${disabledIds.join(",") || "none"}`,
253
+ `- trusted ids: ${trustedIds.join(",") || "none"}`,
254
+ ...items.map((item) => {
255
+ const source = item.lifecycle.sourceUrl ? `source url ${sanitizeDiagnosticText(item.lifecycle.sourceUrl)}` : `local path ${redactedPath(item.lifecycle.localPath)}`;
256
+ return `- ${item.id}: ${item.enabled ? "enabled" : "disabled"}; trust ${item.lifecycle.trustLevel}; ${source}; ref ${item.lifecycle.ref ?? "-"}; commit ${item.lifecycle.commit ?? "-"}; permissions ${item.lifecycle.permissionSummary}; discovered ${item.lifecycle.discovered ? "yes" : "no"}; registered ${item.lifecycle.registered ? "yes" : "no"}; schema loaded ${item.lifecycle.schemaLoaded ? "yes" : "no"}; runtime ${item.lifecycle.runtimeVersion}${item.lastError ? `; load error ${truncateDisplay(item.lastError, 80)}` : ""}`;
257
+ }),
258
+ "- boundary: Git/GitHub \u5B89\u88C5\u53EA\u505A\u53D7\u63A7 clone/fetch \u548C manifest/SKILL.md \u8BFB\u53D6\uFF1B\u4E0D\u6267\u884C postinstall\u3001hook\u3001\u4ED3\u5E93\u811A\u672C\u6216\u7B2C\u4E09\u65B9\u4EE3\u7801\u3002"
259
+ ].join("\n");
260
+ }
261
+ function parseExtensionInstallRequest(args) {
262
+ const [first, second, ...remaining] = args;
263
+ if (!first) {
264
+ return null;
265
+ }
266
+ let source;
267
+ let locator;
268
+ let rest;
269
+ if (first === "local" || first === "git" || first === "github") {
270
+ if (!second) {
271
+ return null;
272
+ }
273
+ source = first;
274
+ locator = second;
275
+ rest = remaining;
276
+ } else if (first.startsWith("github:")) {
277
+ source = "github";
278
+ locator = first.slice("github:".length);
279
+ rest = [second, ...remaining].filter((item) => Boolean(item));
280
+ } else if (isGitLocator(first)) {
281
+ source = "git";
282
+ locator = first;
283
+ rest = [second, ...remaining].filter((item) => Boolean(item));
284
+ } else {
285
+ source = "local";
286
+ locator = first;
287
+ rest = [second, ...remaining].filter((item) => Boolean(item));
288
+ }
289
+ if (!locator) {
290
+ return null;
291
+ }
292
+ let scope = "project";
293
+ let ref;
294
+ let confirmNetwork = false;
295
+ for (let index = 0; index < rest.length; index += 1) {
296
+ const value = rest[index];
297
+ if (value === "--scope" && (rest[index + 1] === "project" || rest[index + 1] === "user")) {
298
+ scope = rest[index + 1];
299
+ index += 1;
300
+ continue;
301
+ }
302
+ if (value === "--ref" && rest[index + 1]) {
303
+ ref = rest[index + 1];
304
+ index += 1;
305
+ continue;
306
+ }
307
+ if (value === "--confirm-network") {
308
+ confirmNetwork = true;
309
+ }
310
+ }
311
+ return { source, locator, scope, ref, confirmNetwork };
312
+ }
313
+ function isGitLocator(value) {
314
+ return /^https?:\/\//iu.test(value) || /^git@/iu.test(value) || value.endsWith(".git");
315
+ }
316
+ function formatExtensionInstallGate(kind, request, command) {
317
+ return [
318
+ `Connect Lite Start Gate\uFF1A${kind} install ${request.source}`,
319
+ `- source: ${sanitizeDiagnosticText(request.locator)}`,
320
+ `- scope: ${request.scope}`,
321
+ `- ref: ${request.ref ?? "default"}`,
322
+ "- risk: network + third-party extension metadata; install \u524D\u53EA\u8BFB\u53D6 manifest / SKILL.md / metadata\u3002",
323
+ "- boundary: \u4E0D\u6267\u884C\u4ED3\u5E93\u811A\u672C\u3001postinstall\u3001hook\u3001\u4F9D\u8D56\u5B89\u88C5\u6216\u4EFB\u610F\u7B2C\u4E09\u65B9\u4EE3\u7801\u3002",
324
+ "- recovery: \u5931\u8D25\u4E0D\u4F1A\u8986\u76D6\u5DF2\u6709\u542F\u7528\u9879\uFF1B\u53EF\u8FD0\u884C status/doctor \u67E5\u770B\u6765\u6E90\u3001\u52A0\u8F7D\u9519\u8BEF\u548C\u4E0B\u4E00\u6B65\u3002",
325
+ "- permission: --confirm-network \u662F exact-command Start Gate confirmation\uFF0C\u4E0D\u662F\u5B8C\u6574 permission approval\uFF1B\u540E\u7EED\u5DE5\u5177/Bash/\u8054\u7F51\u4ECD\u8D70\u6743\u9650\u7BA1\u9053\uFF0C\u786E\u8BA4\u6267\u884C\u4F1A\u5199\u5165 audit event\u3002",
326
+ `- exact command: ${formatExtensionInstallExactCommand(command, request)}`
327
+ ].join("\n");
328
+ }
329
+ function formatExtensionInstallExactCommand(command, request) {
330
+ const parts = [command];
331
+ if (!/\supdate\s/u.test(command)) {
332
+ parts.push(request.source, request.locator);
333
+ if (request.scope !== "project") {
334
+ parts.push("--scope", request.scope);
335
+ }
336
+ }
337
+ if (request.ref) {
338
+ parts.push("--ref", request.ref);
339
+ }
340
+ parts.push("--confirm-network");
341
+ return parts.join(" ");
342
+ }
343
+ async function installExtensionFromRequest(kind, request, context, onNetworkConfirmed) {
344
+ const targetDir = getExtensionTargetDir(kind, request.scope, context);
345
+ await mkdir(targetDir, { recursive: true });
346
+ if (request.source === "local") {
347
+ const localPath = resolve(context.projectPath, request.locator);
348
+ const result = await installExtensionFromDirectory(kind, localPath, targetDir, {
349
+ localPath,
350
+ source: "local"
351
+ });
352
+ if (result.ok) {
353
+ context.config = await resetExtensionTrustForInstall(kind, result.id, context.projectPath);
354
+ }
355
+ return result;
356
+ }
357
+ if (request.confirmNetwork) {
358
+ await onNetworkConfirmed?.(
359
+ `connect_lite_network_start_gate_confirmed: kind ${kind}; source ${request.source}; scope ${request.scope}; ref ${request.ref ?? "default"}; locator ${sanitizeDiagnosticText(request.locator)}; boundary exact-command_start_gate_not_full_permission_approval`
360
+ );
361
+ }
362
+ if (!request.confirmNetwork) {
363
+ return { ok: false, summary: "network confirmation required" };
364
+ }
365
+ const sourceUrl = request.source === "github" ? githubRepoToUrl(request.locator) : request.locator;
366
+ if (!sourceUrl) {
367
+ return { ok: false, summary: "GitHub repo \u683C\u5F0F\u5E94\u4E3A owner/repo\uFF0C\u6216\u4F7F\u7528\u5B8C\u6574 Git URL\u3002" };
368
+ }
369
+ const tempRoot = await mkdtemp(join(tmpdir(), "linghun-connect-lite-"));
370
+ try {
371
+ const cloneArgs = ["-c", "core.hooksPath=/dev/null", "clone", "--depth", "1"];
372
+ if (request.ref) {
373
+ cloneArgs.push("--branch", request.ref);
374
+ }
375
+ cloneArgs.push("--", sourceUrl, tempRoot);
376
+ const clone = await runCommandCapture("git", cloneArgs, context.projectPath, 6e4);
377
+ if (clone.exitCode !== 0) {
378
+ return { ok: false, summary: `\u53D7\u63A7 git clone/fetch \u5931\u8D25\uFF1A${clone.summary}` };
379
+ }
380
+ const commit = await runCommandCapture(
381
+ "git",
382
+ ["-C", tempRoot, "rev-parse", "HEAD"],
383
+ context.projectPath,
384
+ 1e4
385
+ );
386
+ const result = await installExtensionFromDirectory(kind, tempRoot, targetDir, {
387
+ sourceUrl,
388
+ ref: request.ref,
389
+ commit: commit.exitCode === 0 ? commit.stdout.trim().slice(0, 40) : void 0
390
+ });
391
+ if (result.ok) {
392
+ context.config = await resetExtensionTrustForInstall(kind, result.id, context.projectPath);
393
+ }
394
+ return result;
395
+ } finally {
396
+ await rm(tempRoot, { recursive: true, force: true });
397
+ }
398
+ }
399
+ function githubRepoToUrl(locator) {
400
+ if (/^https?:\/\//iu.test(locator) || locator.endsWith(".git")) {
401
+ return locator;
402
+ }
403
+ if (/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/u.test(locator)) {
404
+ return `https://github.com/${locator}.git`;
405
+ }
406
+ return null;
407
+ }
408
+ function getExtensionTargetDir(kind, scope, context) {
409
+ if (kind === "skills") {
410
+ return scope === "project" ? context.skills.projectDir : context.skills.userDir;
411
+ }
412
+ return scope === "project" ? context.plugins.projectDir : context.plugins.userDir;
413
+ }
414
+ async function installExtensionFromDirectory(kind, sourcePath, targetDir, lifecycle) {
415
+ const manifest = await readExtensionSourceManifest(kind, sourcePath);
416
+ if (!manifest.ok) {
417
+ return manifest;
418
+ }
419
+ const id = stableId(manifest.value.id, basename(sourcePath, extname(sourcePath)));
420
+ const outputPath = join(targetDir, `${id}.json`);
421
+ const value = {
422
+ ...manifest.value,
423
+ id,
424
+ source: lifecycle.source ?? manifest.value.source ?? "third-party",
425
+ lifecycle: {
426
+ ...lifecycle,
427
+ installedAt: (/* @__PURE__ */ new Date()).toISOString(),
428
+ trustLevel: "untrusted"
429
+ }
430
+ };
431
+ await writeFile(outputPath, `${JSON.stringify(value, null, 2)}
432
+ `, "utf8");
433
+ return {
434
+ ok: true,
435
+ id,
436
+ summary: `\u5DF2\u5B89\u88C5 ${kind === "skills" ? "skill" : "plugin"} manifest\uFF1A${id}`
437
+ };
438
+ }
439
+ async function readExtensionSourceManifest(kind, sourcePath) {
440
+ const resolved = resolve(sourcePath);
441
+ const info = await stat(resolved).catch(() => null);
442
+ if (!info) {
443
+ return { ok: false, summary: `\u6765\u6E90\u4E0D\u5B58\u5728\uFF1A${redactedPath(resolved)}` };
444
+ }
445
+ const candidates = info.isDirectory() ? [
446
+ kind === "skills" ? "skill.json" : "plugin.json",
447
+ kind === "skills" ? "linghun-skill.json" : "linghun-plugin.json",
448
+ "manifest.json",
449
+ "metadata.json"
450
+ ].map((file) => join(resolved, file)) : [resolved];
451
+ for (const candidate of candidates) {
452
+ const content = await readFile(candidate, "utf8").catch(() => null);
453
+ if (!content) {
454
+ continue;
455
+ }
456
+ try {
457
+ const parsed = JSON.parse(content);
458
+ return { ok: true, value: parsed };
459
+ } catch (error) {
460
+ return {
461
+ ok: false,
462
+ summary: `manifest JSON \u65E0\u6548\uFF1A${redactedPath(candidate)} ${formatError(error)}`
463
+ };
464
+ }
465
+ }
466
+ if (kind === "skills" && info.isDirectory()) {
467
+ const markdown = await readFile(join(resolved, "SKILL.md"), "utf8").catch(() => null);
468
+ if (markdown) {
469
+ const title = markdown.match(/^#\s+(.+)$/mu)?.[1]?.trim() ?? basename(resolved);
470
+ const summary = markdown.split(/\r?\n/u).map((line) => line.trim()).find((line) => line && !line.startsWith("#"));
471
+ return {
472
+ ok: true,
473
+ value: {
474
+ id: stableId(title, basename(resolved)),
475
+ name: title,
476
+ description: summary ?? title,
477
+ summary: summary ?? title,
478
+ triggers: [],
479
+ permissions: ["read"]
480
+ }
481
+ };
482
+ }
483
+ }
484
+ return {
485
+ ok: false,
486
+ summary: "\u672A\u627E\u5230 manifest.json / metadata.json / skill.json / plugin.json\uFF1Bskill \u53EF\u63D0\u4F9B SKILL.md\u3002"
487
+ };
488
+ }
489
+ async function refreshExtensionState(kind, context) {
490
+ if (kind === "skills") {
491
+ context.skills = await createSkillState(context.config, context.projectPath);
492
+ return;
493
+ }
494
+ context.plugins = await createPluginState(context.config, context.projectPath);
495
+ context.hooks = await createHookState(context.config, context.projectPath);
496
+ }
497
+ async function removeExtension(kind, id, context) {
498
+ const item = kind === "skills" ? context.skills.skills.find((skill) => skill.id === id) : context.plugins.plugins.find((plugin) => plugin.id === id);
499
+ if (!item) {
500
+ return `\u672A\u627E\u5230 ${kind === "skills" ? "skill" : "plugin"}\uFF1A${id}`;
501
+ }
502
+ await rm(item.path, { force: true });
503
+ context.config = await saveExtensionEnablement(kind, id, false, context.projectPath);
504
+ await refreshExtensionState(kind, context);
505
+ return `\u5DF2\u79FB\u9664 ${kind === "skills" ? "skill" : "plugin"}\uFF1A${id}\uFF1B\u82E5\u9700\u8981\u6062\u590D\uFF0C\u8BF7\u4ECE\u539F source \u91CD\u65B0 install\u3002`;
506
+ }
507
+ async function updateExtension(kind, id, context, args, onNetworkConfirmed) {
508
+ const item = kind === "skills" ? context.skills.skills.find((skill) => skill.id === id) : context.plugins.plugins.find((plugin) => plugin.id === id);
509
+ if (!item) {
510
+ return `\u672A\u627E\u5230 ${kind === "skills" ? "skill" : "plugin"}\uFF1A${id}`;
511
+ }
512
+ const source = item.lifecycle.sourceUrl ? "git" : "local";
513
+ const refIndex = args.indexOf("--ref");
514
+ if (refIndex !== -1) {
515
+ const refValue = args[refIndex + 1];
516
+ if (refValue === void 0 || refValue.trim().length === 0 || refValue.startsWith("--")) {
517
+ return "--ref \u9700\u8981\u63D0\u4F9B\u975E\u7A7A ref\uFF0C\u4F8B\u5982 --ref v1.0.0\u3002";
518
+ }
519
+ }
520
+ const request = {
521
+ source,
522
+ locator: item.lifecycle.sourceUrl ?? item.lifecycle.localPath ?? item.path,
523
+ scope: item.scope,
524
+ ref: refIndex === -1 ? item.lifecycle.ref : args[refIndex + 1],
525
+ confirmNetwork: args.includes("--confirm-network")
526
+ };
527
+ if (source === "git" && !request.confirmNetwork) {
528
+ return formatExtensionInstallGate(kind, request, `/${kind} update ${id}`);
529
+ }
530
+ const result = await installExtensionFromRequest(kind, request, context, onNetworkConfirmed);
531
+ if (result.ok) {
532
+ await refreshExtensionState(kind, context);
533
+ return `\u5DF2\u66F4\u65B0 ${kind === "skills" ? "skill" : "plugin"}\uFF1A${id}\uFF1B${result.summary}`;
534
+ }
535
+ return result.summary;
536
+ }
537
+ function validateExtensionItems(kind, context, id) {
538
+ const items = kind === "skills" ? context.skills.skills : context.plugins.plugins;
539
+ const selected = id ? items.filter((item) => item.id === id) : items;
540
+ if (selected.length === 0) {
541
+ return id ? `\u672A\u627E\u5230 ${kind === "skills" ? "skill" : "plugin"}\uFF1A${id}` : `\u6CA1\u6709\u5DF2\u53D1\u73B0\u7684 ${kind} manifest\u3002`;
542
+ }
543
+ return [
544
+ `${kind === "skills" ? "Skills" : "Plugins"} validate`,
545
+ ...selected.map((item) => {
546
+ const problems = [];
547
+ if (!item.lifecycle.discovered) problems.push("not discovered");
548
+ if (!item.lifecycle.registered) problems.push("not registered");
549
+ if (!item.trusted) problems.push("untrusted");
550
+ if (!item.lifecycle.schemaLoaded) problems.push("schema not loaded");
551
+ if (item.lifecycle.runtimeVersion !== "compatible") problems.push("runtime incompatible");
552
+ if (item.lastError) problems.push("load error");
553
+ return `- ${item.id}: ${problems.length === 0 ? "ok" : problems.join("; ")}; next ${problems.length === 0 ? "enable/use explicit command" : `run /${kind} doctor, then validate/enable after fixing`}`;
554
+ })
555
+ ].join("\n");
556
+ }
557
+ function validateExtensionContributionExecution(kind, id, contribution, context) {
558
+ const item = kind === "skills" ? context.skills.skills.find((skill) => skill.id === id) : context.plugins.plugins.find((plugin2) => plugin2.id === id);
559
+ if (!item) {
560
+ return {
561
+ ok: false,
562
+ summary: `Connect Lite guard: ${kind}:${id} \u672A\u53D1\u73B0\uFF0C\u5DF2\u62D2\u7EDD\u6267\u884C\u3002\u8BF7\u5148 install/validate\u3002`
563
+ };
564
+ }
565
+ if (!item.enabled || !item.trusted) {
566
+ return {
567
+ ok: false,
568
+ summary: `Connect Lite guard: ${kind}:${id} \u672A\u542F\u7528\u6216\u672A\u4FE1\u4EFB\uFF0C\u5DF2\u62D2\u7EDD\u6267\u884C\u3002\u8BF7\u5148 validate/enable/doctor\u3002`
569
+ };
570
+ }
571
+ if (!item.lifecycle.discovered || !item.lifecycle.registered || !item.lifecycle.schemaLoaded) {
572
+ return {
573
+ ok: false,
574
+ summary: `Connect Lite guard: ${kind}:${id} \u5C1A\u672A\u5B8C\u6210 discover/register/schema load\uFF0C\u5DF2\u62D2\u7EDD\u6267\u884C\u3002\u8BF7\u5148 validate/doctor\u3002`
575
+ };
576
+ }
577
+ if (item.lifecycle.runtimeVersion !== "compatible") {
578
+ return {
579
+ ok: false,
580
+ summary: `Connect Lite guard: ${kind}:${id} runtime version ${item.lifecycle.runtimeVersion} \u4E0D\u517C\u5BB9\uFF0C\u5DF2\u62D2\u7EDD\u6267\u884C\u3002\u8BF7 update \u6216 disable\u3002`
581
+ };
582
+ }
583
+ if (kind === "skills") {
584
+ const skill = item;
585
+ if (!skill.triggers.includes(contribution)) {
586
+ return {
587
+ ok: false,
588
+ summary: `Connect Lite guard: skill:${id} \u672A\u6CE8\u518C\u89E6\u53D1\u9879 ${contribution}\uFF0C\u5DF2\u62D2\u7EDD\u76F2\u6267\u884C\u3002`
589
+ };
590
+ }
591
+ return { ok: true };
592
+ }
593
+ const plugin = item;
594
+ const contributions = Object.values(plugin.contributions).flat();
595
+ if (!contributions.includes(contribution)) {
596
+ return {
597
+ ok: false,
598
+ summary: `Connect Lite guard: plugin:${id} \u672A\u6CE8\u518C\u8D21\u732E\u9879 ${contribution}\uFF0C\u5DF2\u62D2\u7EDD\u76F2\u6267\u884C\u3002`
599
+ };
600
+ }
601
+ return { ok: true };
602
+ }
603
+ function createExtensionFreshnessSummaryForDoctor(context) {
604
+ return {
605
+ skills: context.skills.skills.map((skill) => ({
606
+ id: skill.id,
607
+ enabled: skill.enabled,
608
+ source: skill.source,
609
+ trusted: skill.trusted,
610
+ triggers: skill.triggers,
611
+ summary: skill.summary,
612
+ permissions: skill.permissions
613
+ })).sort((a, b) => a.id.localeCompare(b.id)),
614
+ workflows: context.workflows.templates.map((workflow) => ({
615
+ id: workflow.id,
616
+ risk: workflow.risk,
617
+ writesFiles: workflow.writesFiles,
618
+ validation: workflow.recommendedValidation
619
+ })).sort((a, b) => a.id.localeCompare(b.id)),
620
+ hooks: context.hooks.hooks.map((hook) => ({
621
+ id: hook.id,
622
+ event: hook.event,
623
+ enabled: hook.enabled,
624
+ trusted: hook.trusted,
625
+ permissions: hook.permissions
626
+ })).sort((a, b) => `${a.event}:${a.id}`.localeCompare(`${b.event}:${b.id}`)),
627
+ plugins: context.plugins.plugins.map((plugin) => ({
628
+ id: plugin.id,
629
+ enabled: plugin.enabled,
630
+ source: plugin.source,
631
+ trusted: plugin.trusted,
632
+ permissions: plugin.permissions,
633
+ contributions: plugin.contributions
634
+ })).sort((a, b) => a.id.localeCompare(b.id))
635
+ };
636
+ }
637
+
638
+ export {
639
+ formatConfigOverview,
640
+ formatFeaturePolicy,
641
+ formatSkills,
642
+ createSkillEvolutionCandidate,
643
+ formatWorkflows,
644
+ formatPlugins,
645
+ formatPluginsDoctor,
646
+ formatHooksDoctor,
647
+ formatTrustNotice,
648
+ formatExtensionStatus,
649
+ parseExtensionInstallRequest,
650
+ isGitLocator,
651
+ formatExtensionInstallGate,
652
+ formatExtensionInstallExactCommand,
653
+ installExtensionFromRequest,
654
+ githubRepoToUrl,
655
+ getExtensionTargetDir,
656
+ installExtensionFromDirectory,
657
+ readExtensionSourceManifest,
658
+ refreshExtensionState,
659
+ removeExtension,
660
+ updateExtension,
661
+ validateExtensionItems,
662
+ validateExtensionContributionExecution
663
+ };