@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,298 @@
1
+ import {
2
+ charWidth
3
+ } from "./chunk-APJIC2O5.js";
4
+
5
+ // src/startup-runtime.ts
6
+ import { homedir } from "os";
7
+ import { basename, relative } from "path";
8
+ import { clearLine, cursorTo, emitKeypressEvents } from "readline";
9
+ import { createInterface } from "readline/promises";
10
+ function writeLine(output, text) {
11
+ try {
12
+ output.write(`${text}
13
+ `);
14
+ } catch (error) {
15
+ if (isBenignWriteError(error)) {
16
+ return;
17
+ }
18
+ throw error;
19
+ }
20
+ }
21
+ function isBenignWriteError(error) {
22
+ const code = error && typeof error === "object" ? error.code : void 0;
23
+ return code === "EPIPE" || code === "ERR_STREAM_DESTROYED" || code === "ERR_STREAM_WRITE_AFTER_END";
24
+ }
25
+ function readOutputColumns(output) {
26
+ const columns = output.columns;
27
+ return typeof columns === "number" && Number.isFinite(columns) ? columns : 80;
28
+ }
29
+ function readOutputRows(output) {
30
+ const rows = output.rows;
31
+ return typeof rows === "number" && Number.isFinite(rows) ? rows : 24;
32
+ }
33
+ function truncateDisplay(text, maxWidth) {
34
+ let width = 0;
35
+ let result = "";
36
+ for (const char of stripAnsi(text)) {
37
+ const cw = charWidth(char);
38
+ if (width + cw > maxWidth) {
39
+ return `${result}\u2026`;
40
+ }
41
+ width += cw;
42
+ result += char;
43
+ }
44
+ return result;
45
+ }
46
+ function stripAnsi(text) {
47
+ const escapeChar = String.fromCharCode(27);
48
+ return text.replace(new RegExp(`${escapeChar}\\[[0-9;]*m`, "g"), "");
49
+ }
50
+ function uniqueStrings(items) {
51
+ return [...new Set(items)];
52
+ }
53
+ function sanitizeDiagnosticText(text) {
54
+ return text.replace(/prompt=[^\s&]+/giu, "prompt=***").replace(/api[_-]?key=[^\s&]+/giu, "api_key=***").replace(/Bearer\s+[A-Za-z0-9._~-]+/giu, "Bearer ***").replace(/sk-[A-Za-z0-9_-]+/gu, "sk-***");
55
+ }
56
+ function formatDisplayPath(path, projectPath) {
57
+ if (!path) return "-";
58
+ const normalized = path.replaceAll("\\", "/");
59
+ if (!isAbsoluteDisplayPath(normalized)) {
60
+ return normalized;
61
+ }
62
+ const project = projectPath?.replaceAll("\\", "/").replace(/\/+$/u, "");
63
+ if (project && (normalized === project || normalized.startsWith(`${project}/`))) {
64
+ const rel = relative(projectPath ?? "", path).replaceAll("\\", "/");
65
+ return rel && rel !== "" ? rel : ".";
66
+ }
67
+ const home = homedir().replaceAll("\\", "/").replace(/\/+$/u, "");
68
+ if (home && (normalized === home || normalized.startsWith(`${home}/`))) {
69
+ return `[user-home]/.../${basename(path)}`;
70
+ }
71
+ return `[local-path]/${basename(path)}`;
72
+ }
73
+ function isAbsoluteDisplayPath(path) {
74
+ return /^[A-Za-z]:\//u.test(path) || path.startsWith("/");
75
+ }
76
+ function sanitizeDisplayPaths(text, projectPath) {
77
+ let output = text;
78
+ const protectedSegments = [];
79
+ const protectSegment = (match) => {
80
+ const token = `__LINGHUN_DISPLAY_PATH_PROTECTED_${protectedSegments.length}__`;
81
+ protectedSegments.push(match);
82
+ return token;
83
+ };
84
+ output = output.replace(/\bhttps?:\/\/[^\r\n\s"'<>{}]+/giu, protectSegment).replace(/\bendpointPath=\/[^\r\n\s"'<>{}]+/giu, protectSegment).replace(/\bendpoint\s+path\s+\/[^\r\n\s"'<>{}]+/giu, protectSegment);
85
+ if (projectPath) {
86
+ const normalizedProject = createFlexiblePathPattern(projectPath);
87
+ output = output.replace(
88
+ new RegExp(`${normalizedProject}[^\r
89
+ \\s"'<>{}]*`, "giu"),
90
+ (match) => formatDisplayPath(match, projectPath)
91
+ );
92
+ }
93
+ const home = createFlexiblePathPattern(homedir());
94
+ output = output.replace(
95
+ new RegExp(`${home}[^\r
96
+ \\s"'<>{}]*`, "giu"),
97
+ (match) => formatDisplayPath(match, projectPath)
98
+ );
99
+ output = output.replace(
100
+ /[A-Za-z]:[\\/][^\r\n\s"'<>{}]+/gu,
101
+ (match) => formatDisplayPath(match, projectPath)
102
+ );
103
+ output = output.replace(
104
+ /(^|[\s([{:=,])((?:\/[^\r\n\s"'<>{}/]+){2,})/gu,
105
+ (_match, prefix, path) => `${prefix}${formatDisplayPath(path, projectPath)}`
106
+ );
107
+ protectedSegments.forEach((segment, index) => {
108
+ output = output.replaceAll(`__LINGHUN_DISPLAY_PATH_PROTECTED_${index}__`, segment);
109
+ });
110
+ return output;
111
+ }
112
+ function createFlexiblePathPattern(path) {
113
+ return escapeRegExp(path.replaceAll("\\", "/").replace(/\/+$/u, "")).replaceAll("/", "[\\\\/]");
114
+ }
115
+ function escapeRegExp(value) {
116
+ return value.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
117
+ }
118
+ function sanitizeUserFacingError(value) {
119
+ return sanitizeDiagnosticText(value).replace(/gateId=[^\s,;]+/giu, "gateId=***").replace(/request[_-]?id=[^\s,;]+/giu, "requestId=***").replace(/token=[^\s&]+/giu, "token=***").replace(/Authorization:\s*[^\s]+/giu, "Authorization: ***");
120
+ }
121
+ function formatError(error, language = "zh-CN") {
122
+ const rawMessage = error instanceof Error ? error.message : language === "en-US" ? "unknown error" : "\u672A\u77E5\u9519\u8BEF";
123
+ const message = sanitizeUserFacingError(rawMessage);
124
+ const suggestion = error instanceof Error && "suggestion" in error && typeof error.suggestion === "string" ? sanitizeUserFacingError(error.suggestion) : language === "en-US" ? "open the related details/debug command if you need the full trace" : "\u5982\u9700\u5B8C\u6574 trace\uFF0C\u8BF7\u6253\u5F00\u5BF9\u5E94 details/debug \u5165\u53E3";
125
+ if (language === "en-US") {
126
+ return [
127
+ "Something went wrong.",
128
+ `- what happened: ${message}`,
129
+ "- impact: the current action did not complete.",
130
+ `- next: ${suggestion}`,
131
+ "- details: use the related /details or doctor command for the full record."
132
+ ].join("\n");
133
+ }
134
+ return [
135
+ "\u51FA\u9519\u4E86\u3002",
136
+ `- \u53D1\u751F\u4E86\u4EC0\u4E48\uFF1A${message}`,
137
+ "- \u5F71\u54CD\u8303\u56F4\uFF1A\u5F53\u524D\u64CD\u4F5C\u672A\u5B8C\u6210\u3002",
138
+ `- \u4E0B\u4E00\u6B65\uFF1A${suggestion}`,
139
+ "- \u8BE6\u60C5\uFF1A\u7528\u5BF9\u5E94 /details \u6216 doctor \u547D\u4EE4\u67E5\u770B\u5B8C\u6574\u8BB0\u5F55\u3002"
140
+ ].join("\n");
141
+ }
142
+ function shouldEnterProductShellCandidate(input, output) {
143
+ if (process.env.LINGHUN_TUI_PLAIN === "1") return false;
144
+ if (process.env.TERM === "dumb") return false;
145
+ return input.isTTY === true && output.isTTY === true;
146
+ }
147
+ function formatProviderEnvWarning(reason, language) {
148
+ return language === "en-US" ? `provider.env could not be read: ${reason}. Fix it and restart Linghun, or run /model setup to reconfigure the user provider.` : `provider.env \u8BFB\u53D6\u5931\u8D25\uFF1A${reason}\u3002\u8BF7\u4FEE\u6B63\u540E\u91CD\u542F Linghun\uFF0C\u6216\u8FD0\u884C /model setup \u91CD\u65B0\u914D\u7F6E\u672C\u673A\u7528\u6237 provider\u3002`;
149
+ }
150
+ function formatProjectRouteProblem(problem, language) {
151
+ return language === "en-US" ? [
152
+ "Project model route needs attention.",
153
+ `- ${problem}`,
154
+ "- This is a project-scoped route/settings issue, not a reason to re-enter your user API key.",
155
+ "- Check /model doctor or update this repo's .linghun/settings.json route/model settings."
156
+ ].join("\n") : [
157
+ "\u9879\u76EE\u6A21\u578B\u8DEF\u7531\u9700\u8981\u5904\u7406\u3002",
158
+ `- ${problem}`,
159
+ "- \u8FD9\u662F\u5F53\u524D\u9879\u76EE\u7684 route/settings \u95EE\u9898\uFF0C\u4E0D\u662F\u8BA9\u4F60\u91CD\u590D\u586B\u5199\u672C\u673A\u7528\u6237 API key\u3002",
160
+ "- \u53EF\u7528 /model doctor \u68C0\u67E5\uFF0C\u6216\u8C03\u6574\u672C\u4ED3\u5E93 .linghun/settings.json \u91CC\u7684 route/model \u914D\u7F6E\u3002"
161
+ ].join("\n");
162
+ }
163
+ function formatUserScopedSetupNeeded(providerEnvPath, language) {
164
+ return language === "en-US" ? [
165
+ "Model setup needed: one-time setup for this computer.",
166
+ "- This saves provider settings in your user config, not in this repository.",
167
+ "- After saving once, other repositories will reuse the same user provider.env by default.",
168
+ '- Say "configure provider" or press Enter to start; /model setup remains the advanced recovery entry.',
169
+ `- User provider.env path: ${providerEnvPath}`
170
+ ].join("\n") : [
171
+ "\u9700\u8981\u914D\u7F6E\u6A21\u578B\uFF1A\u8FD9\u662F\u672C\u673A\u4E00\u6B21\u914D\u7F6E\uFF0C\u4E0D\u662F\u5F53\u524D\u4ED3\u5E93\u914D\u7F6E\u3002",
172
+ "- \u914D\u7F6E\u4F1A\u4FDD\u5B58\u5230\u672C\u673A\u7528\u6237\u76EE\u5F55\uFF0C\u4E0D\u4F1A\u5199\u5165\u8FD9\u4E2A\u4ED3\u5E93\u3002",
173
+ "- \u914D\u7F6E\u4E00\u6B21\u540E\uFF0C\u4E4B\u540E\u8FDB\u5165\u5176\u4ED6\u4ED3\u5E93\u4E5F\u4F1A\u9ED8\u8BA4\u590D\u7528\u540C\u4E00\u4E2A\u7528\u6237 provider.env\u3002",
174
+ "- \u53EF\u4EE5\u76F4\u63A5\u8BF4\u201C\u6211\u8981\u914D\u7F6E\u6A21\u578B\u201D\u6216\u6309 Enter \u5F00\u59CB\uFF1B/model setup \u4FDD\u7559\u4E3A\u9AD8\u7EA7/\u6062\u590D\u5165\u53E3\u3002",
175
+ `- \u7528\u6237 provider.env \u4F4D\u7F6E\uFF1A${providerEnvPath}`
176
+ ].join("\n");
177
+ }
178
+ function createShellLimitations(input) {
179
+ const limitations = [];
180
+ if (input.providerEnvWarning) {
181
+ limitations.push(
182
+ input.language === "en-US" ? "Provider env could not be read; run /model setup or /model doctor." : "provider.env \u8BFB\u53D6\u5931\u8D25\uFF1B\u53EF\u7528 /model setup \u6216 /model doctor \u5904\u7406\u3002"
183
+ );
184
+ }
185
+ return limitations;
186
+ }
187
+ async function* readInputLines(input, output, keyHandlers = {}) {
188
+ if (input.isTTY !== true) {
189
+ const chunks = [];
190
+ for await (const chunk of input) {
191
+ chunks.push(toInputBuffer(chunk));
192
+ }
193
+ const text = decodeInput(Buffer.concat(chunks));
194
+ for (const line of text.split(/\r?\n/)) {
195
+ yield line;
196
+ }
197
+ return;
198
+ }
199
+ if ("setEncoding" in input && typeof input.setEncoding === "function") {
200
+ input.setEncoding("utf8");
201
+ }
202
+ const rawInput = input;
203
+ const wasRaw = rawInput.isRaw === true;
204
+ if (typeof rawInput.setRawMode === "function") {
205
+ rawInput.setRawMode(true);
206
+ }
207
+ const rl = createInterface({ input, output });
208
+ const cleanupKeypress = installInputKeyHandlers(input, output, rl, keyHandlers);
209
+ const prompt = keyHandlers.prompt ?? "\u4F60> ";
210
+ let skipNextEmptyLine = false;
211
+ try {
212
+ output.write(prompt);
213
+ for await (const line of rl) {
214
+ if (skipNextEmptyLine && line.trim() === "") {
215
+ skipNextEmptyLine = false;
216
+ output.write(prompt);
217
+ continue;
218
+ }
219
+ yield line;
220
+ output.write(prompt);
221
+ }
222
+ } finally {
223
+ cleanupKeypress();
224
+ if (typeof rawInput.setRawMode === "function" && !wasRaw) {
225
+ rawInput.setRawMode(false);
226
+ }
227
+ rl.close();
228
+ }
229
+ function installInputKeyHandlers(target, out, readline, handlers) {
230
+ if (!handlers.onEsc && !handlers.onEnter && !handlers.onShiftTab) {
231
+ return () => void 0;
232
+ }
233
+ const onKeypress = (_str, key = {}) => {
234
+ if (key.name === "escape" && handlers.onEsc) {
235
+ void handlers.onEsc();
236
+ return;
237
+ }
238
+ if (key.name === "tab" && key.shift && handlers.onShiftTab) {
239
+ void handlers.onShiftTab();
240
+ return;
241
+ }
242
+ if (handlers.shouldMaskInput?.()) {
243
+ const currentLine = readline.line ?? "";
244
+ clearLine(out, 0);
245
+ cursorTo(out, 0);
246
+ out.write(`${prompt}${"*".repeat(currentLine.length)}`);
247
+ }
248
+ if (key.name === "return" && handlers.onEnter) {
249
+ const currentLine = readline.line ?? "";
250
+ if ((currentLine ?? "").trim() === "") {
251
+ skipNextEmptyLine = true;
252
+ void handlers.onEnter();
253
+ }
254
+ }
255
+ };
256
+ emitKeypressEvents(target);
257
+ target.on("keypress", onKeypress);
258
+ return () => target.off("keypress", onKeypress);
259
+ }
260
+ }
261
+ function toInputBuffer(chunk) {
262
+ if (Buffer.isBuffer(chunk)) {
263
+ return chunk;
264
+ }
265
+ if (chunk instanceof Uint8Array) {
266
+ return Buffer.from(chunk);
267
+ }
268
+ return Buffer.from(String(chunk), "utf8");
269
+ }
270
+ function decodeInput(bytes) {
271
+ const utf8 = new TextDecoder("utf-8", { fatal: false }).decode(bytes);
272
+ if (!utf8.includes("\uFFFD")) {
273
+ return utf8;
274
+ }
275
+ return new TextDecoder("gb18030", { fatal: false }).decode(bytes);
276
+ }
277
+
278
+ export {
279
+ writeLine,
280
+ readOutputColumns,
281
+ readOutputRows,
282
+ truncateDisplay,
283
+ stripAnsi,
284
+ uniqueStrings,
285
+ sanitizeDiagnosticText,
286
+ formatDisplayPath,
287
+ sanitizeDisplayPaths,
288
+ sanitizeUserFacingError,
289
+ formatError,
290
+ shouldEnterProductShellCandidate,
291
+ formatProviderEnvWarning,
292
+ formatProjectRouteProblem,
293
+ formatUserScopedSetupNeeded,
294
+ createShellLimitations,
295
+ readInputLines,
296
+ toInputBuffer,
297
+ decodeInput
298
+ };
@@ -0,0 +1,248 @@
1
+ // src/request-lifecycle-presenter.ts
2
+ function formatRequestActivity(phase, language, values = {}) {
3
+ const reportPath = values.reportPath ?? "report.md";
4
+ const toolName = values.toolName ?? "tool";
5
+ if (language === "en-US") {
6
+ if (phase === "request_started_report") {
7
+ return `Inspecting project evidence, then saving the report to ${reportPath}.`;
8
+ }
9
+ if (phase === "waiting_first_delta") {
10
+ return "Still waiting for the model. Use /interrupt to stop this request.";
11
+ }
12
+ if (phase === "tool_running") {
13
+ return `Running ${toolName}\u2026`;
14
+ }
15
+ if (phase === "continuing_after_tool") {
16
+ return "Continuing after the tool result\u2026";
17
+ }
18
+ if (phase === "permission_waiting") {
19
+ return "Waiting for your approval; the model request is paused.";
20
+ }
21
+ if (phase === "verifying_final_answer") {
22
+ return "Verifying the final answer before showing it.";
23
+ }
24
+ if (phase === "provider_retrying") {
25
+ const attempt = values.retryAttempt ?? 1;
26
+ const max = values.retryMax ?? 3;
27
+ const delay = values.retryDelaySec ?? 1;
28
+ return `Retrying (${attempt}/${max})\u2026 retry in ${delay}s`;
29
+ }
30
+ return "Thinking\u2026";
31
+ }
32
+ if (phase === "request_started_report") {
33
+ return `\u6B63\u5728\u68C0\u67E5\u9879\u76EE\u8BC1\u636E\uFF0C\u968F\u540E\u628A\u62A5\u544A\u4FDD\u5B58\u5230 ${reportPath}\u3002`;
34
+ }
35
+ if (phase === "waiting_first_delta") {
36
+ return "\u6A21\u578B\u4ECD\u5728\u7B49\u5F85\u54CD\u5E94\u3002\u53EF\u7528 /interrupt \u4E2D\u65AD\u672C\u6B21\u8BF7\u6C42\u3002";
37
+ }
38
+ if (phase === "tool_running") {
39
+ return `\u6B63\u5728\u8FD0\u884C ${toolName}\u2026`;
40
+ }
41
+ if (phase === "continuing_after_tool") {
42
+ return "\u5DE5\u5177\u7ED3\u679C\u5DF2\u56DE\u4F20\uFF0C\u6B63\u5728\u7EE7\u7EED\u751F\u6210\u2026";
43
+ }
44
+ if (phase === "permission_waiting") {
45
+ return "\u6B63\u5728\u7B49\u5F85\u4F60\u7684\u6279\u51C6\uFF1B\u6A21\u578B\u8BF7\u6C42\u5DF2\u6682\u505C\u3002";
46
+ }
47
+ if (phase === "verifying_final_answer") {
48
+ return "\u6B63\u5728\u9A8C\u8BC1\u6700\u7EC8\u56DE\u7B54\uFF0C\u9A8C\u8BC1\u540E\u518D\u663E\u793A\u3002";
49
+ }
50
+ if (phase === "provider_retrying") {
51
+ const attempt = values.retryAttempt ?? 1;
52
+ const max = values.retryMax ?? 3;
53
+ const delay = values.retryDelaySec ?? 1;
54
+ return `\u91CD\u8BD5\u4E2D (${attempt}/${max})\u2026${delay}s \u540E\u91CD\u8BD5`;
55
+ }
56
+ return "\u6B63\u5728\u601D\u8003\u2026";
57
+ }
58
+ function formatProviderFailurePrimary(error, language) {
59
+ const kind = classifyProviderFailure(error);
60
+ if (language === "en-US") {
61
+ if (kind === "rate_limit") {
62
+ return "The model service is rate limited. Slow down or retry later; a configured fallback model can be used when available. Run /model doctor for details.";
63
+ }
64
+ if (kind === "quota_or_balance_exhausted") {
65
+ return "The model service reported exhausted quota, credits, or account balance. Add billing or credits, or switch key/provider/model. Linghun has not queried your balance. Run /model doctor for details.";
66
+ }
67
+ if (kind === "reasoning_unsupported") {
68
+ return "This gateway or model does not accept reasoning params. Lower the reasoning level or switch the gateway/model. Run /model doctor for details.";
69
+ }
70
+ if (kind === "auth") {
71
+ return "The model service rejected the API key or permission. Check the key, account permissions, or selected provider/model. Run /model doctor for details.";
72
+ }
73
+ if (kind === "not_found") {
74
+ return "The endpoint or model was not found. Check the base URL, endpoint profile, and model name. Run /model doctor for details.";
75
+ }
76
+ if (kind === "gateway") {
77
+ return "The upstream model service or gateway is temporarily unavailable, so this request did not complete. Retry later or run /model doctor for details.";
78
+ }
79
+ if (kind === "transit") {
80
+ return "The response stream failed in transit, so this request did not complete. This is a service or network transport issue, not a local Linghun bug. Retry later or run /model doctor for details.";
81
+ }
82
+ if (kind === "timeout") {
83
+ return "The model took too long to respond, so this request did not complete. Retry later or run /model doctor for details.";
84
+ }
85
+ if (kind === "abort") {
86
+ return "This request was interrupted. Input is ready again.";
87
+ }
88
+ if (kind === "schema") {
89
+ return "The model service rejected the request shape: schema, tool choice, tool result, or reasoning settings are incompatible. Run /model doctor for details.";
90
+ }
91
+ return "The model request did not complete. Run /model doctor for details, then retry.";
92
+ }
93
+ if (kind === "rate_limit") {
94
+ return "\u6A21\u578B\u670D\u52A1\u89E6\u53D1\u9650\u6D41\u3002\u672C\u6B21\u8BF7\u6C42\u672A\u5B8C\u6210\uFF1B\u8BF7\u964D\u4F4E\u8BF7\u6C42\u9891\u7387\u6216\u7A0D\u540E\u91CD\u8BD5\u3002\u82E5\u5DF2\u914D\u7F6E\u5907\u7528\u6A21\u578B\uFF0CLinghun \u4F1A\u5C1D\u8BD5\u5207\u6362\u3002\u53EF\u8FD0\u884C /model doctor \u67E5\u770B\u8BE6\u60C5\u3002";
95
+ }
96
+ if (kind === "quota_or_balance_exhausted") {
97
+ return "\u6A21\u578B\u670D\u52A1\u8FD4\u56DE\u989D\u5EA6\u3001\u70B9\u6570\u6216\u8D26\u6237\u4F59\u989D\u4E0D\u8DB3\u3002\u672C\u6B21\u8BF7\u6C42\u672A\u5B8C\u6210\uFF1B\u8BF7\u5145\u503C\u6216\u68C0\u67E5\u8D26\u5355\uFF0C\u6216\u5207\u6362\u5BC6\u94A5\u3001\u670D\u52A1\u5546\u6216\u6A21\u578B\u3002Linghun \u6CA1\u6709\u67E5\u8BE2\u4F59\u989D\uFF0C\u53EA\u662F\u6839\u636E\u4E0A\u6E38\u9519\u8BEF\u5206\u7C7B\u3002\u53EF\u8FD0\u884C /model doctor \u67E5\u770B\u8BE6\u60C5\u3002";
98
+ }
99
+ if (kind === "reasoning_unsupported") {
100
+ return "\u5F53\u524D\u7F51\u5173\u6216\u6A21\u578B\u4E0D\u63A5\u53D7\u63A8\u7406\u53C2\u6570\u3002\u8BF7\u964D\u4F4E\u63A8\u7406\u7B49\u7EA7\u6216\u66F4\u6362\u7F51\u5173/\u6A21\u578B\u3002\u53EF\u8FD0\u884C /model doctor \u67E5\u770B\u8BE6\u60C5\u3002";
101
+ }
102
+ if (kind === "auth") {
103
+ return "\u6A21\u578B\u670D\u52A1\u62D2\u7EDD\u4E86\u5BC6\u94A5\u6216\u6743\u9650\u3002\u672C\u6B21\u8BF7\u6C42\u672A\u5B8C\u6210\uFF1B\u8BF7\u68C0\u67E5\u5BC6\u94A5\u3001\u8D26\u53F7\u6743\u9650\u6216\u5F53\u524D\u670D\u52A1\u5546/\u6A21\u578B\u914D\u7F6E\u3002\u53EF\u8FD0\u884C /model doctor \u67E5\u770B\u8BE6\u60C5\u3002";
104
+ }
105
+ if (kind === "not_found") {
106
+ return "\u63A5\u53E3\u6216\u6A21\u578B\u4E0D\u5B58\u5728\u3002\u672C\u6B21\u8BF7\u6C42\u672A\u5B8C\u6210\uFF1B\u8BF7\u68C0\u67E5\u670D\u52A1\u5730\u5740\u3001\u63A5\u53E3\u7C7B\u578B\u548C\u6A21\u578B\u540D\u79F0\u3002\u53EF\u8FD0\u884C /model doctor \u67E5\u770B\u8BE6\u60C5\u3002";
107
+ }
108
+ if (kind === "gateway") {
109
+ return "\u4E0A\u6E38\u6A21\u578B\u670D\u52A1\u6216\u7F51\u5173\u6682\u65F6\u5F02\u5E38\uFF0C\u672C\u6B21\u8BF7\u6C42\u672A\u5B8C\u6210\u3002\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u8FD0\u884C /model doctor \u67E5\u770B\u8BE6\u60C5\u3002";
110
+ }
111
+ if (kind === "transit") {
112
+ return "\u54CD\u5E94\u6D41\u4F20\u8F93\u5931\u8D25\uFF0C\u672C\u6B21\u8BF7\u6C42\u672A\u5B8C\u6210\u3002\u53EF\u80FD\u662F\u6A21\u578B\u670D\u52A1\u3001\u7F51\u5173\u4F20\u8F93\u6216\u672C\u5730\u517C\u5BB9\u5C42\u95EE\u9898\uFF1B\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u8FD0\u884C /model doctor \u548C /details evidence \u67E5\u770B\u8BE6\u60C5\u3002";
113
+ }
114
+ if (kind === "timeout") {
115
+ return "\u7B49\u5F85\u6A21\u578B\u54CD\u5E94\u8FC7\u4E45\uFF0C\u672C\u6B21\u8BF7\u6C42\u672A\u5B8C\u6210\u3002\u7A0D\u540E\u91CD\u8BD5\uFF0C\u6216\u8FD0\u884C /model doctor \u67E5\u770B\u8BE6\u60C5\u3002";
116
+ }
117
+ if (kind === "abort") {
118
+ return "\u5DF2\u4E2D\u65AD\u672C\u6B21\u8BF7\u6C42\uFF0C\u53EF\u4EE5\u7EE7\u7EED\u8F93\u5165\u3002";
119
+ }
120
+ if (kind === "schema") {
121
+ return "\u6A21\u578B\u670D\u52A1\u62D2\u7EDD\u4E86\u8BF7\u6C42\u683C\u5F0F\uFF1A\u63A5\u53E3\u7C7B\u578B\u3001\u5DE5\u5177\u9009\u62E9\u3001\u5DE5\u5177\u7ED3\u679C\u6216\u63A8\u7406\u8BBE\u7F6E\u4E0D\u517C\u5BB9\u3002\u8BF7\u8FD0\u884C /model doctor \u67E5\u770B\u8BE6\u60C5\u3002";
122
+ }
123
+ return "\u6A21\u578B\u8BF7\u6C42\u672A\u5B8C\u6210\u3002\u53EF\u8FD0\u884C /model doctor \u67E5\u770B\u8BE6\u60C5\u540E\u91CD\u8BD5\u3002";
124
+ }
125
+ function formatProviderFallbackAttemptSummary(input, language) {
126
+ if (language === "en-US") {
127
+ return `Fallback attempt: the primary model failed with ${formatProviderFailureKindLabel(input.reasonKind, language)}; trying a backup model.`;
128
+ }
129
+ return `\u6B63\u5728\u5C1D\u8BD5\u5907\u7528\u6A21\u578B\uFF1A\u4E3B\u6A21\u578B\u56E0${formatProviderFailureKindLabel(input.reasonKind, language)}\u5931\u8D25\uFF0C\u6B63\u5728\u5207\u6362\u3002`;
130
+ }
131
+ function formatProviderFailureKindLabel(kind, language) {
132
+ const labels = {
133
+ rate_limit: { zh: "\u9650\u6D41", en: "rate limit" },
134
+ quota_or_balance_exhausted: { zh: "\u989D\u5EA6\u6216\u4F59\u989D\u4E0D\u8DB3", en: "quota or balance exhausted" },
135
+ schema: { zh: "\u8BF7\u6C42\u683C\u5F0F\u4E0D\u517C\u5BB9", en: "schema/tool compatibility" },
136
+ auth: { zh: "\u5BC6\u94A5\u6216\u6743\u9650\u95EE\u9898", en: "API key or permission" },
137
+ not_found: { zh: "\u63A5\u53E3\u6216\u6A21\u578B\u4E0D\u5B58\u5728", en: "endpoint or model not found" },
138
+ gateway: { zh: "\u670D\u52A1\u7AEF\u6216\u7F51\u5173\u5F02\u5E38", en: "server or gateway failure" },
139
+ transit: { zh: "\u4F20\u8F93\u5931\u8D25", en: "stream or transit failure" },
140
+ timeout: { zh: "\u54CD\u5E94\u8D85\u65F6", en: "timeout" },
141
+ abort: { zh: "\u8BF7\u6C42\u5DF2\u4E2D\u65AD", en: "interrupted request" },
142
+ reasoning_unsupported: { zh: "\u63A8\u7406\u8BBE\u7F6E\u4E0D\u517C\u5BB9", en: "reasoning settings unsupported" },
143
+ generic: { zh: "\u6A21\u578B\u8BF7\u6C42\u5931\u8D25", en: "model request failure" }
144
+ };
145
+ const label = labels[kind] ?? labels.generic;
146
+ return language === "en-US" ? label.en : label.zh;
147
+ }
148
+ function formatProviderEmptyResponsePrimary(language) {
149
+ return language === "en-US" ? "The model returned no answer. Run /model doctor for details, then retry." : "\u6A21\u578B\u6CA1\u6709\u8FD4\u56DE\u6709\u6548\u56DE\u7B54\u3002\u53EF\u8FD0\u884C /model doctor \u67E5\u770B\u8BE6\u60C5\u540E\u91CD\u8BD5\u3002";
150
+ }
151
+ function formatProviderThinkingOnlyResponsePrimary(language) {
152
+ return language === "en-US" ? "The model returned a thinking stream but no final text. Retry, lower the reasoning level, or run /model doctor for details." : "\u6A21\u578B\u5DF2\u8FD4\u56DE\u601D\u8003\u6D41\u4F46\u6CA1\u6709\u6700\u7EC8\u6587\u672C\u3002\u8BF7\u91CD\u8BD5\u6216\u964D\u4F4E\u63A8\u7406\u7B49\u7EA7\uFF0C\u53EF\u8FD0\u884C /model doctor \u67E5\u770B\u8BE6\u60C5\u3002";
153
+ }
154
+ function formatReportEvidenceRequired(language) {
155
+ return language === "en-US" ? "Read key project evidence before writing the report. Mark missing README/package/config items as unconfirmed in the report." : "\u5199\u62A5\u544A\u524D\u9700\u8981\u5148\u8BFB\u53D6\u5173\u952E\u9879\u76EE\u8BC1\u636E\uFF1B\u672A\u53D1\u73B0 README/package/config \u65F6\uFF0C\u8BF7\u5728\u62A5\u544A\u4E2D\u6807\u8BB0\u4E3A\u672A\u786E\u8BA4\u3002";
156
+ }
157
+ function formatReportIncompletePrimary(path, language) {
158
+ return language === "en-US" ? `Report generation is blocked: no saved report was produced at ${path}.` : `\u62A5\u544A\u751F\u6210\u53D7\u963B\uFF1A\u5C1A\u672A\u5728 ${path} \u751F\u6210\u62A5\u544A\u6587\u4EF6\u3002`;
159
+ }
160
+ function classifyProviderFailure(error) {
161
+ const code = readStringField(error, "code");
162
+ const name = readStringField(error, "name");
163
+ const status = readNumberField(error, "status") ?? readNumberField(error, "statusCode");
164
+ const message = error instanceof Error ? error.message : readStringField(error, "message") ?? String(error ?? "");
165
+ const text = `${code ?? ""} ${name ?? ""} ${status ?? ""} ${message}`;
166
+ if (code === "PROVIDER_STREAM_DECODE_ERROR" || code === "PROVIDER_RETRY_EXHAUSTED" || code === "PROVIDER_NON_SSE_STREAM" || code === "PROVIDER_MALFORMED_STREAM" || code === "PROVIDER_PARTIAL_TOOL_CALL") {
167
+ return "transit";
168
+ }
169
+ if (code === "PROVIDER_QUOTA_EXHAUSTED" || /insufficient[_\s-]?quota|quota\s*(?:exhausted|exceeded|limit|reached)|credits?\s*(?:exhausted|used\s*up|insufficient|limit)|balance\s*(?:exhausted|insufficient|too\s*low|不足)|billing\s*(?:hard\s*limit|limit|required|payment)|payment[_\s-]?required|account\s+balance|余额不足|额度不足|欠费|充值/iu.test(
170
+ text
171
+ )) {
172
+ return "quota_or_balance_exhausted";
173
+ }
174
+ if (code === "PROVIDER_RATE_LIMITED" || status === 429 || /\brate\s*limit(?:ed)?\b|too many requests|请求过快|限流/iu.test(text)) {
175
+ return "rate_limit";
176
+ }
177
+ if (/thinking|extended_thinking|reasoning|unsupported_param|不支持.*推理|推理.*不支持/iu.test(text)) {
178
+ return "reasoning_unsupported";
179
+ }
180
+ if (/prompt[_\s-]?too[_\s-]?long|context[_\s-]?length|maximum context|input too large|上下文.*过长|提示词.*过长/iu.test(text)) {
181
+ return "schema";
182
+ }
183
+ if (/pdf[_\s-]?too[_\s-]?large|file too large|payload too large|request entity too large/iu.test(text)) {
184
+ return "schema";
185
+ }
186
+ if (/tool[_\s-]?use[_\s-]?mismatch|duplicate[_\s-]?tool[_\s-]?use[_\s-]?id|duplicate[_\s-]?tool[_\s-]?call|tool result.*mismatch|invalid tool_call_id/iu.test(text)) {
187
+ return "schema";
188
+ }
189
+ if (/overload|overloaded|server overloaded|capacity|temporarily overloaded|服务器.*过载/iu.test(text)) {
190
+ return "gateway";
191
+ }
192
+ if (/ssl|certificate|cert[_\s-]?error|tls handshake|self signed|证书/iu.test(text)) {
193
+ return "transit";
194
+ }
195
+ if (/crc|checksum|eventstream|event[-\s]?stream|stream\s*decode|decode\s*(?:error|failed|mismatch)|malformed\s*(?:sse|stream|chunk)|retry\s*exhausted|重试.*耗尽|流.*解码|解码.*失败/iu.test(
196
+ text
197
+ )) {
198
+ return "transit";
199
+ }
200
+ if (code === "PROVIDER_API_KEY_ERROR" || code === "PROVIDER_AUTH_ERROR" || status === 401 || status === 403 || /api\s*key|permission|forbidden|unauthorized|authentication|权限|鉴权|密钥/iu.test(text)) {
201
+ return "auth";
202
+ }
203
+ if (code === "PROVIDER_NOT_FOUND" || code === "MODEL_NOT_FOUND" || status === 404 || /not[_\s-]?found|model.*not.*found|endpoint.*not.*found|不存在|未找到/iu.test(text)) {
204
+ return "not_found";
205
+ }
206
+ if (/\b(?:502|503|504)\b/u.test(text) || code === "PROVIDER_SERVER_ERROR" || /an error occurred while processing your request|upstream.*(?:error|failed)|gateway.*(?:error|failed)|service unavailable/iu.test(
207
+ text
208
+ )) {
209
+ return "gateway";
210
+ }
211
+ if (/TIMEOUT|timeout|超时|等待.*过久/iu.test(text)) {
212
+ return "timeout";
213
+ }
214
+ if (/AbortError|aborted|abort|中断/iu.test(text) || code === "ABORT_ERR") {
215
+ return "abort";
216
+ }
217
+ if (code === "PROVIDER_BAD_REQUEST" || code === "MODEL_TOOLS_UNSUPPORTED" || code === "PROVIDER_PROFILE_MISMATCH" || /schema|tool_choice|tools?|tool_result|profile mismatch|endpointProfile|请求格式|工具.*不支持/iu.test(
218
+ text
219
+ )) {
220
+ return "schema";
221
+ }
222
+ if (code === "PROVIDER_STREAM_ERROR") {
223
+ return "transit";
224
+ }
225
+ return "generic";
226
+ }
227
+ function readStringField(value, key) {
228
+ if (!value || typeof value !== "object") return void 0;
229
+ const field = value[key];
230
+ return typeof field === "string" ? field : void 0;
231
+ }
232
+ function readNumberField(value, key) {
233
+ if (!value || typeof value !== "object") return void 0;
234
+ const field = value[key];
235
+ return typeof field === "number" ? field : void 0;
236
+ }
237
+
238
+ export {
239
+ formatRequestActivity,
240
+ formatProviderFailurePrimary,
241
+ formatProviderFallbackAttemptSummary,
242
+ formatProviderFailureKindLabel,
243
+ formatProviderEmptyResponsePrimary,
244
+ formatProviderThinkingOnlyResponsePrimary,
245
+ formatReportEvidenceRequired,
246
+ formatReportIncompletePrimary,
247
+ classifyProviderFailure
248
+ };