@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,221 @@
1
+ import {
2
+ hasRepeatedPermissionDenial
3
+ } from "./chunk-J7ZE2JKP.js";
4
+ import {
5
+ createModelCapabilitySummary
6
+ } from "./chunk-PGNALDEH.js";
7
+ import {
8
+ formatDeferredToolsSystemReminder,
9
+ snapshotDeferredTools
10
+ } from "./chunk-I3NTAIMF.js";
11
+ import {
12
+ formatControlledMemoryForModel
13
+ } from "./chunk-LQTVYUT3.js";
14
+ import {
15
+ createSolutionCompletenessStatus,
16
+ projectRuntimeStatusForPrompt
17
+ } from "./chunk-K56D3X7S.js";
18
+ import {
19
+ truncateDisplay
20
+ } from "./chunk-OMZYPQVA.js";
21
+
22
+ // src/model-prompt-runtime.ts
23
+ var MEMORY_PROMPT_TOP_K = 3;
24
+ function createModelSystemPrompt(text, context, runtimeStatus, architectureDirective, worktreeContextSummary, failureLearningSummary, metaSchedulerDirective, gitStatusSummary) {
25
+ const solutionCompletenessWarning = updateSolutionCompletenessGate(text, context);
26
+ const deferredReminder = formatDeferredToolsSystemReminder(
27
+ context.language,
28
+ snapshotDeferredTools(context)
29
+ );
30
+ const worktreeContextLine = worktreeContextSummary && worktreeContextSummary.isWorktree === true ? `
31
+ WorktreeContext=${JSON.stringify(worktreeContextSummary)}` : "";
32
+ const failureLearningLine = failureLearningSummary && failureLearningSummary.count > 0 ? `
33
+ FailureLearningSummary=${failureLearningSummary.text}
34
+ FailureLearningRule=These are lessons from PAST real failures in this project, surfaced as risk hints only. They do NOT mean the current task has failed, is fixed, or is verified. Use them to double-check risky steps; never cite them as evidence that something is already done/fixed/verified. Say "history shows / may be related", not present-tense facts.` : "";
35
+ const metaSchedulerLine = metaSchedulerDirective ? `
36
+ ${metaSchedulerDirective}` : "";
37
+ const gitStatusLine = gitStatusSummary ? `
38
+ GitStatus=${gitStatusSummary}` : "";
39
+ let memorySummary;
40
+ if (context.lastMetaSchedulerDecision?.policyDecision.contextPlan?.includeMemory === false) {
41
+ memorySummary = "(memory skipped per scheduler policy)";
42
+ } else {
43
+ const _t0 = Date.now();
44
+ memorySummary = formatControlledMemoryForModel(context);
45
+ context.lastMetaSchedulerDecision?.internalEvents.push(`perf:memory_format_ms=${Date.now() - _t0}`);
46
+ }
47
+ return `${context.language === "en-US" ? "You are Linghun, an engineering AI coding assistant with tool-use capabilities. Answer in English by default unless the user explicitly requests another language. Use evidence before code claims; avoid unverified claims. Natural command execution is decided by local RuntimeStatus and Command Capability Catalog, not by guessing. Use real tool_use events when file/search/edit/bash/todo facts or actions are needed; never describe a tool call as text instead of using a tool event." : "\u4F60\u662F Linghun \u5DE5\u7A0B\u578B AI \u7F16\u7A0B\u52A9\u624B\uFF0C\u5177\u5907\u5DE5\u5177\u8C03\u7528\u80FD\u529B\u3002\u9ED8\u8BA4\u7528\u4E2D\u6587\u56DE\u7B54\uFF0C\u9664\u975E\u7528\u6237\u660E\u786E\u6307\u5B9A\u5176\u4ED6\u8BED\u8A00\u3002\u6D89\u53CA\u4EE3\u7801\u4E8B\u5B9E\u5FC5\u987B\u5148\u6709\u8BC1\u636E\uFF0C\u907F\u514D\u672A\u9A8C\u8BC1\u65AD\u8A00\u3002\u81EA\u7136\u8BED\u8A00\u547D\u4EE4\u662F\u5426\u53EF\u6267\u884C\u7531\u672C\u5730 RuntimeStatus \u4E0E Command Capability Catalog \u88C1\u51B3\uFF0C\u4E0D\u80FD\u9760\u6A21\u578B\u731C\u3002\u9700\u8981\u6587\u4EF6\u3001\u641C\u7D22\u3001\u7F16\u8F91\u3001Bash \u6216 Todo \u4E8B\u5B9E/\u52A8\u4F5C\u65F6\u5FC5\u987B\u4F7F\u7528\u771F\u5B9E tool_use \u4E8B\u4EF6\uFF0C\u4E0D\u8981\u7528\u6587\u672C\u5192\u5145\u5DE5\u5177\u8C03\u7528\u3002"}
48
+ ${context.language === "en-US" ? "OutputStyle=summary-first; use plain language on main screen, minimize internal jargon; error messages should suggest next steps; details/debug reserved for advanced info. In long or multi-tool tasks, use 1-2 natural lines at key points to say what you are inspecting, what you found, and what comes next; do not output raw tool protocol. For simple no-tool chat, stay concise. Default mature engineering for frontend/UI: clear information architecture, responsive layout, complete states (empty/error/loading), readability first." : "OutputStyle=summary-first; \u4E3B\u5C4F\u7528\u4EBA\u8BDD\u3001\u5C11\u5185\u90E8\u672F\u8BED\uFF1B\u9519\u8BEF\u63D0\u793A\u7ED9\u4E0B\u4E00\u6B65\uFF1Bdetails/debug \u4FDD\u7559\u9AD8\u7EA7\u4FE1\u606F\u3002\u957F\u4EFB\u52A1\u6216\u591A\u5DE5\u5177\u4EFB\u52A1\u4E2D\uFF0C\u5173\u952E\u8282\u70B9\u7528 1-2 \u884C\u81EA\u7136\u8BF4\u660E\u5F53\u524D\u67E5\u770B\u5BF9\u8C61\u3001\u521D\u6B65\u53D1\u73B0\u548C\u4E0B\u4E00\u6B65\uFF1B\u4E0D\u8981\u8F93\u51FA raw tool protocol\u3002\u7B80\u5355\u65E0\u5DE5\u5177\u95F2\u804A\u4FDD\u6301\u7B80\u6D01\u3002\u6D89\u53CA\u524D\u7AEF/UI \u5F00\u53D1\u65F6\u9ED8\u8BA4\u8981\u6C42\u6210\u719F\u65B9\u6848\uFF1A\u4FE1\u606F\u67B6\u6784\u6E05\u6670\u3001\u54CD\u5E94\u5F0F\u3001\u72B6\u6001\u5B8C\u6574\uFF08\u7A7A\u6001/\u9519\u8BEF\u6001/\u52A0\u8F7D\u6001\uFF09\u3001\u53EF\u8BFB\u6027\u4F18\u5148\uFF0C\u4E0D\u9700\u8981\u7528\u6237\u989D\u5916\u8BF4\u201C\u6210\u719F\u201D\u3002"}
49
+ ${context.language === "en-US" ? "EngineeringStructure=Do not pile logic into existing large files by default. Avoid god files, code blobs, overly long functions (>200 lines), deep nesting (>3 levels), and unbounded global state. Keep responsibility boundaries clear: UI/state/IO/provider/runner/permission/cache/verification. Prefer reusing existing project modules, helpers, presenters, and runtimes over creating a second system. Do not add zero-benefit abstractions for elegance. Each change must have a verifiable boundary (focused tests, typecheck, check). This is not authorization for large refactors." : "EngineeringStructure=\u9ED8\u8BA4\u4E0D\u628A\u903B\u8F91\u5806\u8FDB\u5DF2\u6709\u5927\u6587\u4EF6\u3002\u907F\u514D god file\u3001code blob\u3001\u8D85\u957F\u51FD\u6570\uFF08>200\u884C\uFF09\u3001\u6DF1\u5C42\u5D4C\u5957\uFF08>3\u5C42\uFF09\u3001\u65E0\u8FB9\u754C\u5168\u5C40\u72B6\u6001\u3002\u804C\u8D23\u8FB9\u754C\u4FDD\u6301\u6E05\u6670\uFF1AUI/\u72B6\u6001/IO/provider/runner/permission/cache/verification\u3002\u4F18\u5148\u590D\u7528\u9879\u76EE\u5DF2\u6709\u6A21\u5757\u3001helper\u3001presenter\u3001runtime\uFF0C\u4E0D\u65B0\u5EFA\u7B2C\u4E8C\u5957\u7CFB\u7EDF\u3002\u4E0D\u4E3A\u4E86\u4F18\u96C5\u65B0\u589E\u65E0\u6536\u76CA\u62BD\u8C61\u3002\u6BCF\u4E2A\u6539\u52A8\u8981\u6709\u53EF\u9A8C\u8BC1\u8FB9\u754C\uFF08focused tests\u3001typecheck\u3001check\uFF09\u3002\u8FD9\u4E0D\u662F\u6388\u6743\u5927\u91CD\u6784\u3002"}
50
+ ${context.language === "en-US" ? "ShellEnvironment=Respect the actual local OS and shell before proposing or running Bash commands. On Windows/PowerShell, prefer PowerShell cmdlets or Node one-liners for file discovery/transforms; do not use Unix-only pipelines such as find|sed|head unless those tools were verified in this environment." : "ShellEnvironment=\u6267\u884C\u6216\u5EFA\u8BAE Bash \u547D\u4EE4\u524D\u5FC5\u987B\u5C0A\u91CD\u5F53\u524D\u672C\u5730 OS \u548C shell\u3002Windows/PowerShell \u4E0B\u4F18\u5148\u4F7F\u7528 PowerShell cmdlet \u6216 Node one-liner \u505A\u6587\u4EF6\u53D1\u73B0/\u8F6C\u6362\uFF1B\u9664\u975E\u5DF2\u9A8C\u8BC1\u5F53\u524D\u73AF\u5883\u5B58\u5728\u8FD9\u4E9B\u5DE5\u5177\uFF0C\u4E0D\u8981\u4F7F\u7528 find|sed|head \u8FD9\u7C7B Unix-only \u7BA1\u7EBF\u3002"}
51
+ RuntimeIdentityRule=When the user asks in natural language about the current model (e.g. "what model are you", "current model"), answer with the model name only (for example "claude-opus-4-7"). Do not include provider, endpointProfile, route role, baseUrl, or any internal route field in the user-facing answer; do not write "(provider: ...)" or "openai-compatible" in parentheses. Only reveal provider/route/endpointProfile when the user explicitly asks about provider/route/endpoint, or runs /model doctor or /model route doctor. RuntimeStatusForModel does not contain provider/baseUrl/endpointProfile by default; they live in /model doctor.
52
+ PromptHygieneRule=The labelled context fields below (RuntimeStatusForModel, ControlledMemorySummary, MemoryBoundary, EvidenceSummary, CommandCapabilitySummary, SolutionCompleteness, FreshnessRule, FinalAnswerClaimSchema, FailureLearningSummary, MetaSchedulerForModel, GitStatus, etc.) are internal runtime context for your reasoning only. Never quote, paste, or restate these field labels or their raw contents to the user \u2014 not even when asked to "explain in plain words" or "translate". Answer in natural human language; if the user wants raw runtime/diagnostic detail, point them to /model doctor, /status, or /details.
53
+ RuntimeStatusForModel=${JSON.stringify(projectRuntimeStatusForPrompt(runtimeStatus) ?? runtimeStatus)}
54
+ ControlledMemorySummary=${memorySummary}
55
+ MemoryBoundary=acceptedOnly; topK=${MEMORY_PROMPT_TOP_K}; autoExtractionRuntime; dedicatedMemoryDir; manualLearnCandidateOnly; noSecretsOrFullDumps
56
+ EvidenceSummary=${createEvidenceSummaryForModel(context)}
57
+ FreshnessRule=When stating external/current facts (latest API version, prices, news, official site state) without web_source evidence in EvidenceSummary, mark them as unverified or call WebSearch/WebFetch first; do not present them as confirmed.
58
+ FinalAnswerClaimSchema=If your final answer contains high-risk claims, append one internal-only line at the end: LinghunFinalAnswerClaims: {"claims":[{"kind":"completion_pass","phrase":"tests passed"}]}. Allowed kind values: completion_claim, test_claim, file_change_claim, verification_claim, workflow_status_claim, agent_status_claim, completion_pass, code_fact, external_current_fact, ccb_parity, beta_readiness, git_operation, action_executed, architecture_boundary, completeness. Omit the line only when there are no high-risk claims. This line is for the local verifier and will be hidden from the main screen.
59
+ SolutionCompleteness=${JSON.stringify(context.solutionCompleteness)}${solutionCompletenessWarning ? `
60
+ ${solutionCompletenessWarning}` : ""}${architectureDirective ? `
61
+ ${architectureDirective}` : ""}${deferredReminder ? `
62
+ DeferredToolsReminder=${deferredReminder}` : ""}${worktreeContextLine}${gitStatusLine}${failureLearningLine}${metaSchedulerLine}
63
+ CommandCapabilitySummary=
64
+ ${createModelCapabilitySummary(24)}`;
65
+ }
66
+ function createEvidenceSummaryForModel(context) {
67
+ return JSON.stringify(
68
+ context.evidence.slice(0, 5).map((item) => ({
69
+ id: item.id,
70
+ kind: item.kind,
71
+ source: item.source,
72
+ summary: truncateDisplay(item.summary.replace(/\s+/g, " "), 180),
73
+ supportsClaims: item.supportsClaims.slice(0, 5)
74
+ }))
75
+ );
76
+ }
77
+ function updateSolutionCompletenessGate(text, context) {
78
+ void text;
79
+ const repeatedDenial = hasRepeatedPermissionDenial(context.permissions.recentDenied);
80
+ if (repeatedDenial) {
81
+ context.solutionCompleteness = {
82
+ ...createSolutionCompletenessStatus(),
83
+ triggerReason: "repeated_denial",
84
+ evidenceRefs: collectSolutionCompletenessEvidenceRefs(context),
85
+ nextRequiredOutput: "\u6700\u8FD1\u540C\u7C7B\u6743\u9650\u62D2\u7EDD\u5DF2\u8BB0\u5F55\uFF1B\u666E\u901A\u4EFB\u52A1\u7EE7\u7EED\u8D70 model/tool loop\uFF0C\u5FC5\u8981\u65F6\u7ED9\u77ED hint \u6216\u8BA9\u7528\u6237\u67E5\u770B /permissions recent\u3002"
86
+ };
87
+ }
88
+ if (!repeatedDenial) {
89
+ context.solutionCompleteness = createSolutionCompletenessStatus();
90
+ }
91
+ return "";
92
+ }
93
+ function collectSolutionCompletenessEvidenceRefs(context) {
94
+ const evidence = context.evidence.slice(0, 3).map((item) => item.id);
95
+ const denied = context.permissions.recentDenied.slice(0, 3).map((item) => `permission_denial:${item.toolName}:${item.mode}`);
96
+ return [...evidence, ...denied];
97
+ }
98
+ var INTERNAL_PROMPT_TOKENS = [
99
+ "RuntimeStatusForModel",
100
+ "RuntimeIdentityRule",
101
+ "ControlledMemorySummary",
102
+ "MemoryBoundary",
103
+ "EvidenceSummary",
104
+ "CommandCapabilitySummary",
105
+ "SolutionCompleteness",
106
+ "SYSTEMIC_GAP_WARNING",
107
+ "FreshnessRule",
108
+ "FinalAnswerClaimSchema",
109
+ "LinghunFinalAnswerClaims",
110
+ "FailureLearningSummary",
111
+ "FailureLearningRule",
112
+ "GitStatus",
113
+ "MetaSchedulerForModel",
114
+ "PolicyDecision",
115
+ "PolicyHint",
116
+ "CapabilitySignal",
117
+ "capabilitySignal",
118
+ "CapabilityPlan",
119
+ "capabilityPlan",
120
+ "CapabilityExecutionRequest",
121
+ "CapabilityExecutionResult",
122
+ "CapabilityRequest",
123
+ "CapabilityResult",
124
+ "AppConnectorManifest",
125
+ "AppConnectorState",
126
+ "AppConnectorAuthConfig",
127
+ "AppConnectorConnectionResult",
128
+ "AppConnectorDoctorResult",
129
+ "raw connector response",
130
+ "raw connector payload",
131
+ "raw connector request",
132
+ "raw app connector response",
133
+ "rawPayload",
134
+ "raw capability payload",
135
+ "raw capability request",
136
+ "raw capability result",
137
+ "UserStateDecision",
138
+ "userState",
139
+ "user_state",
140
+ "interactionPlan",
141
+ "verificationPlan",
142
+ "detailPlan",
143
+ "notificationPlan",
144
+ "memoryCandidate",
145
+ "permissionSignal",
146
+ "modelRouteSignal",
147
+ "verificationSignal",
148
+ "memorySignal",
149
+ "failureSignal",
150
+ "architectureSignal",
151
+ "platformSignal",
152
+ "budgetSignal",
153
+ "runtimeSignal",
154
+ "Typed policy route",
155
+ "Verification route",
156
+ "policy_decision",
157
+ "RuntimeStatus",
158
+ "RuntimeStatusForModel",
159
+ "gateId",
160
+ "raw evidence",
161
+ "raw tool_result",
162
+ "internal scheduler labels",
163
+ "meta_scheduler",
164
+ "WorktreeContext",
165
+ "DeferredToolsReminder",
166
+ "OutputStyle",
167
+ "EngineeringStructure",
168
+ "ShellEnvironment",
169
+ "autoExtractionRuntime",
170
+ "dedicatedMemoryDir",
171
+ "manualLearnCandidateOnly",
172
+ "noSecretsOrFullDumps",
173
+ "doNotWriteLongTermMemoryWithoutExplicitMemoryAccept"
174
+ ];
175
+ var INTERNAL_ASSIGNMENT_ONLY_TOKENS = ["confidence"];
176
+ var INTERNAL_TOOL_LABEL_REPLACEMENTS = [
177
+ ["RunVerification", { "zh-CN": "\u9A8C\u8BC1\u547D\u4EE4", "en-US": "verification command" }]
178
+ ];
179
+ function sanitizeMainScreenLeakage(text, language = "zh-CN") {
180
+ if (!text) return text;
181
+ const tokenAlternation = INTERNAL_PROMPT_TOKENS.join("|");
182
+ const assignmentOnlyAlternation = INTERNAL_ASSIGNMENT_ONLY_TOKENS.join("|");
183
+ const lineRe = new RegExp(
184
+ `^\\s*(?:${tokenAlternation}|${assignmentOnlyAlternation})\\s*[=:].*$`,
185
+ "u"
186
+ );
187
+ const naturalLanguageLeakRe = new RegExp(`\\b(?:${tokenAlternation})\\b`, "u");
188
+ const lines = text.split("\n");
189
+ let redacted = false;
190
+ const cleaned = lines.filter((line) => {
191
+ if (lineRe.test(line) || naturalLanguageLeakRe.test(line)) {
192
+ redacted = true;
193
+ return false;
194
+ }
195
+ return true;
196
+ });
197
+ let result = cleaned.join("\n");
198
+ for (const token of INTERNAL_PROMPT_TOKENS) {
199
+ if (result.includes(token)) {
200
+ result = result.split(token).join("");
201
+ redacted = true;
202
+ }
203
+ }
204
+ for (const [label, replacement] of INTERNAL_TOOL_LABEL_REPLACEMENTS) {
205
+ if (result.includes(label)) {
206
+ result = result.split(label).join(replacement[language]);
207
+ redacted = true;
208
+ }
209
+ }
210
+ result = result.replace(/\n{3,}/gu, "\n\n").trim();
211
+ if (!redacted) return text;
212
+ return result;
213
+ }
214
+
215
+ export {
216
+ createModelSystemPrompt,
217
+ createEvidenceSummaryForModel,
218
+ updateSolutionCompletenessGate,
219
+ collectSolutionCompletenessEvidenceRefs,
220
+ sanitizeMainScreenLeakage
221
+ };
@@ -0,0 +1,258 @@
1
+ import {
2
+ diagnoseConcreteRoute,
3
+ getRoleRoute,
4
+ getRouteBlockingProblems,
5
+ hasOpenAiCompatibleProviderSetupProblem,
6
+ inferProviderForRouteModel,
7
+ isDefaultExecutorRoute
8
+ } from "./chunk-2YL5VKJ5.js";
9
+
10
+ // src/tui-model-runtime.ts
11
+ import { randomUUID } from "crypto";
12
+ import { readFile } from "fs/promises";
13
+ import {
14
+ getProjectSettingsPath
15
+ } from "@linghun/config";
16
+ import {
17
+ DeepSeekProvider,
18
+ ModelGateway,
19
+ OpenAiCompatibleProvider,
20
+ resolveEffectiveEndpointProfile
21
+ } from "@linghun/providers";
22
+ import { normalizeDeepSeekModelName } from "@linghun/shared";
23
+ var MAX_ROUTE_DECISIONS = 50;
24
+ function shouldOfferUserScopedModelSetup(context) {
25
+ return !getProjectModelRouteProblem(context) && hasSelectedProviderConfigProblem(context);
26
+ }
27
+ async function getStartupProjectRouteProblem(context) {
28
+ const projectRoute = await readProjectExecutorRouteOverride(context.projectPath);
29
+ if (projectRoute) {
30
+ return getProjectModelRouteProblemForRoute(projectRoute, context);
31
+ }
32
+ return getProjectModelRouteProblem(context);
33
+ }
34
+ async function readProjectExecutorRouteOverride(projectPath) {
35
+ try {
36
+ const parsed = JSON.parse(await readFile(getProjectSettingsPath(projectPath), "utf8"));
37
+ return parsed.modelRoutes?.routes?.find((route) => route.role === "executor");
38
+ } catch {
39
+ return void 0;
40
+ }
41
+ }
42
+ function getProjectModelRouteProblem(context) {
43
+ const route = getRoleRoute(context.config, "executor");
44
+ if (isDefaultExecutorRoute(route, context.config)) return void 0;
45
+ return getProjectModelRouteProblemForRoute(route, context);
46
+ }
47
+ function getProjectModelRouteProblemForRoute(route, context) {
48
+ const providerId = route.provider || resolveProviderForModel(context.config, route.primaryModel);
49
+ const provider = context.config.providers[providerId];
50
+ if (!provider) {
51
+ return `executor route points to provider=${providerId || "unknown"}, but that provider is not configured`;
52
+ }
53
+ if (provider.type === "openai-compatible" && hasOpenAiCompatibleProviderSetupProblem(provider)) {
54
+ return void 0;
55
+ }
56
+ if (!route.primaryModel || route.primaryModel === "openai-compatible-model") {
57
+ return `executor route primaryModel=${route.primaryModel || "missing"} is not a concrete model`;
58
+ }
59
+ return void 0;
60
+ }
61
+ function hasSelectedProviderConfigProblem(context) {
62
+ const runtime = getSelectedModelRuntime(context);
63
+ const provider = context.config.providers[runtime.provider];
64
+ if (!provider) return true;
65
+ if (provider.type !== "openai-compatible") return !provider.apiKey || !provider.model;
66
+ return hasOpenAiCompatibleProviderSetupProblem(provider);
67
+ }
68
+ function getRuntimeStatusProvider(context) {
69
+ const runtime = getSelectedModelRuntime(context);
70
+ return runtime.provider;
71
+ }
72
+ function getActiveEndpointProfileLabel(context) {
73
+ const runtime = getSelectedModelRuntime(context);
74
+ const provider = context.config.providers[runtime.provider];
75
+ const decision = resolveEffectiveEndpointProfile({
76
+ requestEndpointProfile: void 0,
77
+ configEndpointProfile: provider?.endpointProfile,
78
+ configBaseUrl: provider?.baseUrl,
79
+ configModel: provider?.model,
80
+ requestModel: runtime.model
81
+ });
82
+ return decision.endpointProfile;
83
+ }
84
+ function resolveInitialModel(config) {
85
+ const executor = config.modelRoutes.routes.find((route) => route.role === "executor");
86
+ if (executor && !isDefaultExecutorRoute(executor, config) && executor.primaryModel) {
87
+ return executor.primaryModel;
88
+ }
89
+ const providerModel = executor?.provider ? config.providers[executor.provider]?.model : void 0;
90
+ return config.defaultModel || executor?.primaryModel || providerModel || resolveFirstProviderModel(config);
91
+ }
92
+ function getSelectedModelRuntime(context, role = "executor") {
93
+ const route = getRoleRoute(context.config, role);
94
+ const providerModel = route.provider ? context.config.providers[route.provider]?.model : void 0;
95
+ const effectivePrimaryModel = route.primaryModel || providerModel || "";
96
+ const useContextModel = role === "executor" && isDefaultExecutorRoute(route, context.config) && context.model && context.model !== effectivePrimaryModel;
97
+ const model = useContextModel ? context.model : effectivePrimaryModel || context.model;
98
+ const provider = useContextModel ? resolveProviderForModel(context.config, model) : route.provider || resolveProviderForModel(context.config, model);
99
+ const providerConfig = context.config.providers[provider];
100
+ const rawEndpointProfile = providerConfig?.endpointProfile ?? "chat_completions";
101
+ const endpointProfile = resolveEffectiveEndpointProfile({
102
+ requestEndpointProfile: void 0,
103
+ configEndpointProfile: rawEndpointProfile,
104
+ configBaseUrl: providerConfig?.baseUrl,
105
+ configModel: providerConfig?.model,
106
+ requestModel: model
107
+ }).endpointProfile;
108
+ const compatibilityProfile = providerConfig?.compatibilityProfile ?? (providerConfig?.type === "deepseek" ? "deepseek" : "strict_openai_compatible");
109
+ const reasoningLevel = providerConfig?.reasoningLevel;
110
+ const reasoningSent = Boolean(
111
+ reasoningLevel && (endpointProfile === "responses" || compatibilityProfile === "permissive_openai_compatible" || endpointProfile === "anthropic_messages")
112
+ );
113
+ return {
114
+ role,
115
+ provider,
116
+ model,
117
+ endpointProfile,
118
+ reasoningLevel,
119
+ reasoningStatus: formatReasoningEffectiveState(reasoningLevel, reasoningSent),
120
+ reasoningSent
121
+ };
122
+ }
123
+ function formatReasoningEffectiveState(reasoningLevel, reasoningSent) {
124
+ if (!reasoningLevel) {
125
+ return "\u672A\u751F\u6548";
126
+ }
127
+ return reasoningSent ? `effective/sent ${reasoningLevel}` : "ignored/unsupported/\u672A\u751F\u6548";
128
+ }
129
+ function resolveProviderForModel(config, model) {
130
+ const normalized = normalizeDeepSeekModelName(model);
131
+ const executor = config.modelRoutes.routes.find((route) => route.role === "executor");
132
+ if ((executor?.primaryModel === model || executor?.primaryModel === normalized) && executor.provider) {
133
+ return executor.provider;
134
+ }
135
+ if (config.defaultModel === model || config.defaultModel === normalized) {
136
+ for (const [providerId, provider] of Object.entries(config.providers)) {
137
+ if (provider.model === model || provider.model === normalized) return providerId;
138
+ }
139
+ }
140
+ for (const [providerId, provider] of Object.entries(config.providers)) {
141
+ if (provider.model === model || provider.model === normalized) {
142
+ return providerId;
143
+ }
144
+ }
145
+ return "unknown";
146
+ }
147
+ function resolveFirstProviderModel(config) {
148
+ for (const provider of Object.values(config.providers)) {
149
+ if (provider.model) return provider.model;
150
+ }
151
+ return "unknown";
152
+ }
153
+ function createModelGateway(config) {
154
+ return new ModelGateway(
155
+ Object.entries(config.providers).map(([id, provider]) => {
156
+ if (provider.type === "deepseek") {
157
+ return new DeepSeekProvider({ ...provider, id, displayName: "DeepSeek" });
158
+ }
159
+ return new OpenAiCompatibleProvider({ ...provider, id, displayName: "OpenAI compatible" });
160
+ })
161
+ );
162
+ }
163
+ function resolveRoleRoute(context, role, triggerReason) {
164
+ const baseRoute = getRoleRoute(context.config, role);
165
+ const effectivePrimaryModel = baseRoute.primaryModel || (baseRoute.provider ? context.config.providers[baseRoute.provider]?.model : void 0) || "";
166
+ const primaryProblems = diagnoseConcreteRoute(
167
+ baseRoute,
168
+ effectivePrimaryModel,
169
+ baseRoute.provider,
170
+ context.config
171
+ );
172
+ const primaryBlocking = getRouteBlockingProblems(primaryProblems);
173
+ let selectedProvider = baseRoute.provider;
174
+ let selectedModel = effectivePrimaryModel;
175
+ let stopConditions = primaryBlocking;
176
+ let fallbackUsed = false;
177
+ if (primaryBlocking.length > 0) {
178
+ for (const fallbackModel of baseRoute.fallbackModels) {
179
+ const fallbackProvider = inferProviderForRouteModel(fallbackModel, context.config);
180
+ const fallbackProblems = diagnoseConcreteRoute(
181
+ baseRoute,
182
+ fallbackModel,
183
+ fallbackProvider,
184
+ context.config
185
+ );
186
+ const fallbackBlocking = getRouteBlockingProblems(fallbackProblems);
187
+ if (fallbackBlocking.length === 0) {
188
+ selectedProvider = fallbackProvider;
189
+ selectedModel = fallbackModel;
190
+ stopConditions = [];
191
+ fallbackUsed = true;
192
+ break;
193
+ }
194
+ }
195
+ } else {
196
+ stopConditions = [];
197
+ }
198
+ const resolvedRoute = { ...baseRoute, provider: selectedProvider, primaryModel: selectedModel };
199
+ const repairSuggestions = createRouteRepairSuggestions(role, stopConditions, baseRoute);
200
+ const decision = {
201
+ id: `route-${randomUUID().slice(0, 8)}`,
202
+ triggerReason,
203
+ role,
204
+ selectedProvider: stopConditions.length > 0 ? "" : selectedProvider,
205
+ selectedModel: stopConditions.length > 0 ? "" : selectedModel,
206
+ fallbackCandidates: baseRoute.fallbackModels,
207
+ requiredCapabilities: baseRoute.requiredCapabilities,
208
+ maxCostCny: baseRoute.maxCostCny,
209
+ stopConditions,
210
+ repairSuggestions,
211
+ fallbackUsed,
212
+ budgetStop: false,
213
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
214
+ };
215
+ context.routeDecisions.unshift(decision);
216
+ context.routeDecisions = context.routeDecisions.slice(0, MAX_ROUTE_DECISIONS);
217
+ return { route: resolvedRoute, decision, usable: stopConditions.length === 0 };
218
+ }
219
+ function createRouteRepairSuggestions(role, stopConditions, route) {
220
+ if (stopConditions.length === 0) {
221
+ return [];
222
+ }
223
+ const suggestions = [`\u8FD0\u884C /model route set ${role} <model> \u8BBE\u7F6E\u53EF\u7528\u6A21\u578B`];
224
+ if (stopConditions.some((item) => item.includes("openai-compatible"))) {
225
+ suggestions.push(
226
+ "\u5728 .linghun/settings.json \u914D\u7F6E openai-compatible \u7684 baseUrl\u3001apiKey \u548C model"
227
+ );
228
+ }
229
+ if (stopConditions.some((item) => item.startsWith("\u80FD\u529B\u4E0D\u8DB3"))) {
230
+ suggestions.push(`\u9009\u62E9\u6EE1\u8DB3 ${route.requiredCapabilities.join("+")} capability \u7684\u6A21\u578B`);
231
+ }
232
+ if (route.fallbackModels.length === 0) {
233
+ suggestions.push("\u4E3A\u8BE5 role \u914D\u7F6E fallbackModels\uFF0C\u907F\u514D primary \u4E0D\u53EF\u7528\u65F6\u76F4\u63A5\u6682\u505C");
234
+ }
235
+ return suggestions;
236
+ }
237
+ function formatRoutePauseMessage(role, decision) {
238
+ return `${role} role \u8DEF\u7531\u6682\u505C\uFF1A${decision.stopConditions.join("\uFF1B")}\u3002\u4FEE\u590D\u5EFA\u8BAE\uFF1A${decision.repairSuggestions.join("\uFF1B")}\u3002\u4E0D\u4F1A\u5047\u88C5\u53EF\u7528\u3002`;
239
+ }
240
+
241
+ export {
242
+ shouldOfferUserScopedModelSetup,
243
+ getStartupProjectRouteProblem,
244
+ readProjectExecutorRouteOverride,
245
+ getProjectModelRouteProblem,
246
+ getProjectModelRouteProblemForRoute,
247
+ hasSelectedProviderConfigProblem,
248
+ getRuntimeStatusProvider,
249
+ getActiveEndpointProfileLabel,
250
+ resolveInitialModel,
251
+ getSelectedModelRuntime,
252
+ formatReasoningEffectiveState,
253
+ resolveProviderForModel,
254
+ createModelGateway,
255
+ resolveRoleRoute,
256
+ createRouteRepairSuggestions,
257
+ formatRoutePauseMessage
258
+ };
@@ -0,0 +1,91 @@
1
+ // src/turn-continuity-runtime.ts
2
+ var INITIAL_TRUST_SCORE = 50;
3
+ var MAX_TRUST_SCORE = 100;
4
+ var MIN_TRUST_SCORE = 0;
5
+ var RECENT_TASK_KIND_WINDOW = 5;
6
+ var RECENT_MESSAGE_LENGTH_WINDOW = 5;
7
+ function createInitialContinuityState() {
8
+ return {
9
+ consecutiveFailures: 0,
10
+ consecutiveSuccesses: 0,
11
+ dominantTaskKind: null,
12
+ taskDomainSwitched: false,
13
+ lastUserStateKind: "neutral",
14
+ userStatePersistence: 1,
15
+ totalTurns: 0,
16
+ messageLengthTrend: "stable",
17
+ trustScore: INITIAL_TRUST_SCORE
18
+ };
19
+ }
20
+ function updateTurnContinuity(prev, currentInput, recentTaskKinds, recentMessageLengths) {
21
+ const hadAnyFailure = currentInput.hadToolFailure || currentInput.hadProviderFailure || currentInput.hadVerificationFailure;
22
+ const consecutiveFailures = hadAnyFailure ? prev.consecutiveFailures + 1 : 0;
23
+ const hadSuccess = !hadAnyFailure && currentInput.lastVerificationStatus !== "fail" && currentInput.lastVerificationStatus !== "partial";
24
+ const consecutiveSuccesses = hadSuccess ? prev.consecutiveSuccesses + 1 : hadAnyFailure ? 0 : prev.consecutiveSuccesses;
25
+ const nextRecentTaskKinds = [...recentTaskKinds, currentInput.taskKind].slice(-RECENT_TASK_KIND_WINDOW);
26
+ const dominantTaskKind = computeDominant(nextRecentTaskKinds);
27
+ const taskDomainSwitched = prev.dominantTaskKind !== null && currentInput.taskKind !== prev.dominantTaskKind;
28
+ const userStatePersistence = currentInput.userStateKind === prev.lastUserStateKind ? prev.userStatePersistence + 1 : 1;
29
+ const nextRecentMessageLengths = [...recentMessageLengths, currentInput.userText.length].slice(
30
+ -RECENT_MESSAGE_LENGTH_WINDOW
31
+ );
32
+ const messageLengthTrend = computeMessageLengthTrend(nextRecentMessageLengths);
33
+ let trustScore = prev.trustScore;
34
+ if (currentInput.userCorrectedAssistant) {
35
+ trustScore = Math.max(MIN_TRUST_SCORE, trustScore - 8);
36
+ } else if (currentInput.hadProviderFailure) {
37
+ trustScore = Math.max(MIN_TRUST_SCORE, trustScore - 5);
38
+ } else if (currentInput.hadToolFailure) {
39
+ trustScore = Math.max(MIN_TRUST_SCORE, trustScore - 3);
40
+ } else if (hadSuccess && currentInput.lastVerificationStatus === "pass") {
41
+ trustScore = Math.min(MAX_TRUST_SCORE, trustScore + 2);
42
+ } else if (hadSuccess) {
43
+ trustScore = Math.min(MAX_TRUST_SCORE, trustScore + 1);
44
+ }
45
+ return {
46
+ state: {
47
+ consecutiveFailures,
48
+ consecutiveSuccesses,
49
+ dominantTaskKind,
50
+ taskDomainSwitched,
51
+ lastUserStateKind: currentInput.userStateKind,
52
+ userStatePersistence,
53
+ totalTurns: prev.totalTurns + 1,
54
+ messageLengthTrend,
55
+ trustScore
56
+ },
57
+ recentTaskKinds: nextRecentTaskKinds,
58
+ recentMessageLengths: nextRecentMessageLengths
59
+ };
60
+ }
61
+ function computeDominant(kinds) {
62
+ if (kinds.length === 0) return null;
63
+ const counts = /* @__PURE__ */ new Map();
64
+ let best = kinds[0];
65
+ let bestCount = 0;
66
+ for (const k of kinds) {
67
+ const c = (counts.get(k) ?? 0) + 1;
68
+ counts.set(k, c);
69
+ if (c > bestCount) {
70
+ bestCount = c;
71
+ best = k;
72
+ }
73
+ }
74
+ return best;
75
+ }
76
+ function computeMessageLengthTrend(lengths) {
77
+ if (lengths.length < 3) return "stable";
78
+ const firstHalf = lengths.slice(0, Math.floor(lengths.length / 2));
79
+ const secondHalf = lengths.slice(Math.floor(lengths.length / 2));
80
+ const firstAvg = firstHalf.reduce((a, b) => a + b, 0) / firstHalf.length;
81
+ const secondAvg = secondHalf.reduce((a, b) => a + b, 0) / secondHalf.length;
82
+ const ratio = firstAvg > 0 ? secondAvg / firstAvg : 1;
83
+ if (ratio < 0.7) return "shortening";
84
+ if (ratio > 1.3) return "lengthening";
85
+ return "stable";
86
+ }
87
+
88
+ export {
89
+ createInitialContinuityState,
90
+ updateTurnContinuity
91
+ };