@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,607 @@
1
+ import {
2
+ redactedPath
3
+ } from "./chunk-RVY34HK4.js";
4
+ import {
5
+ formatJobRunnerInline
6
+ } from "./chunk-UDQT5CWK.js";
7
+ import {
8
+ isRecord
9
+ } from "./chunk-QLRTQHTR.js";
10
+ import {
11
+ sanitizeDiagnosticText
12
+ } from "./chunk-OMZYPQVA.js";
13
+
14
+ // src/runner-runtime.ts
15
+ import { spawn, spawnSync } from "child_process";
16
+ import { constants, accessSync, existsSync } from "fs";
17
+ import { mkdir, readFile } from "fs/promises";
18
+ import { basename, dirname, join, resolve } from "path";
19
+ import { fileURLToPath } from "url";
20
+ var NATIVE_RUNNER_VERSION_TIMEOUT_MS = 2e3;
21
+ var NATIVE_RUNNER_START_STATE_WAIT_MS = 1500;
22
+ var NATIVE_RUNNER_APPROVED_TASK_HEARTBEAT_MS = 100;
23
+ var CLI_BUNDLED_ROOT_ENV = "LINGHUN_CLI_BUNDLED_ROOT";
24
+ var NATIVE_RUNNER_BUNDLED_PLATFORM_ARCHES = /* @__PURE__ */ new Set([
25
+ "win32-x64",
26
+ "linux-x64",
27
+ "darwin-arm64",
28
+ "darwin-x64"
29
+ ]);
30
+ var NATIVE_RUNNER_PROCESS_GUARD_CONTRACT = [
31
+ "Windows native runner SHOULD use a Job Object with kill-on-job-close for supervised children.",
32
+ "Unix native runner SHOULD create and manage a child process group, then kill that group on stop/exit.",
33
+ "Parent death cleanup is only proven by a real native runner smoke; Node tests do not prove orphan cleanup."
34
+ ];
35
+ var _runnerPids = /* @__PURE__ */ new Map();
36
+ var NATIVE_RUNNER_APPROVED_TASK_SCRIPT = [
37
+ "const durationMs = Number(process.argv[1] || '1000');",
38
+ "const heartbeatMs = 100;",
39
+ "const startedAt = Date.now();",
40
+ "let tick = 0;",
41
+ "console.log(JSON.stringify({ kind: 'linghun-approved-runner-task', status: 'started', tick, elapsedMs: 0 }));",
42
+ "const timer = setInterval(() => {",
43
+ " tick += 1;",
44
+ " const elapsedMs = Date.now() - startedAt;",
45
+ " console.log(JSON.stringify({ kind: 'linghun-approved-runner-task', status: elapsedMs >= durationMs ? 'completed' : 'heartbeat', tick, elapsedMs }));",
46
+ " if (elapsedMs >= durationMs) {",
47
+ " clearInterval(timer);",
48
+ " process.exitCode = 0;",
49
+ " }",
50
+ "}, heartbeatMs);"
51
+ ].join("\n");
52
+ function stringValue(value, fallback) {
53
+ return typeof value === "string" && value.length > 0 ? value : fallback;
54
+ }
55
+ function resolveNativeRunner(config) {
56
+ const runner = config.nativeRunner;
57
+ const bundledCandidate = getBundledNativeRunnerCandidate();
58
+ const base = {
59
+ processGuardContract: NATIVE_RUNNER_PROCESS_GUARD_CONTRACT,
60
+ bundledCandidateRef: bundledCandidate.ref,
61
+ platform: process.platform,
62
+ arch: process.arch,
63
+ platformArch: bundledCandidate.platformArch,
64
+ nodeFallback: "available"
65
+ };
66
+ if (!runner.enabled) {
67
+ return {
68
+ status: "disabled",
69
+ enabled: false,
70
+ source: "disabled",
71
+ pathRef: "disabled",
72
+ ...base,
73
+ nextAction: "Native runner is disabled; Node/TUI remains the fallback for durable jobs."
74
+ };
75
+ }
76
+ const resolvedPath = resolveNativeRunnerPath(runner, bundledCandidate);
77
+ if (!resolvedPath) {
78
+ return {
79
+ status: "unavailable",
80
+ enabled: true,
81
+ source: runner.source,
82
+ pathRef: "missing",
83
+ ...base,
84
+ lastError: runner.source === "bundled" && !bundledCandidate.supported ? `bundled runner platform is not supported: ${bundledCandidate.platformArch}` : "runner path is not configured",
85
+ nextAction: runner.source === "bundled" ? "Install a Linghun package with a bundled runner for this platform, or keep using Node fallback." : "Configure a project-local/custom runner path for development, or keep using Node fallback."
86
+ };
87
+ }
88
+ if (!existsSync(resolvedPath) || !isExecutableNativeRunnerCandidate(resolvedPath)) {
89
+ return {
90
+ status: "unavailable",
91
+ enabled: true,
92
+ source: runner.source,
93
+ path: resolvedPath,
94
+ pathRef: redactedPath(resolvedPath),
95
+ ...base,
96
+ lastError: "runner binary is missing or not executable",
97
+ nextAction: runner.source === "bundled" ? "Bundled runner is unavailable; reinstall/repair Linghun or continue with Node fallback." : "Repair runner execution permissions or keep using Node fallback."
98
+ };
99
+ }
100
+ const versionCommand = createNativeRunnerCommand(resolvedPath, ["version"]);
101
+ const version = spawnSync(versionCommand.command, versionCommand.args, {
102
+ cwd: dirname(resolvedPath),
103
+ encoding: "utf8",
104
+ timeout: NATIVE_RUNNER_VERSION_TIMEOUT_MS,
105
+ windowsHide: true
106
+ });
107
+ const raw = `${version.stdout ?? ""}
108
+ ${version.stderr ?? ""}`.trim();
109
+ if (version.error || version.status !== 0) {
110
+ return {
111
+ status: "unavailable",
112
+ enabled: true,
113
+ source: runner.source,
114
+ path: resolvedPath,
115
+ pathRef: redactedPath(resolvedPath),
116
+ ...base,
117
+ lastError: sanitizeDiagnosticText(
118
+ version.error instanceof Error ? version.error.message : raw || "version probe failed"
119
+ ),
120
+ nextAction: "Repair runner execution permissions or keep using Node fallback."
121
+ };
122
+ }
123
+ const parsed = parseRunnerJson(raw);
124
+ const protocol = stringValue(parsed.protocol, "unknown");
125
+ const runnerVersion = stringValue(parsed.version, "unknown");
126
+ if (protocol !== runner.expectedProtocol) {
127
+ return {
128
+ status: "protocol_mismatch",
129
+ enabled: true,
130
+ source: runner.source,
131
+ path: resolvedPath,
132
+ pathRef: redactedPath(resolvedPath),
133
+ version: runnerVersion,
134
+ protocol,
135
+ ...base,
136
+ lastError: `protocol mismatch: expected ${runner.expectedProtocol}, got ${protocol}`,
137
+ nextAction: "Use a compatible bundled/project-local runner build, or continue with Node fallback."
138
+ };
139
+ }
140
+ return {
141
+ status: "available",
142
+ enabled: true,
143
+ source: runner.source,
144
+ path: resolvedPath,
145
+ pathRef: redactedPath(resolvedPath),
146
+ version: runnerVersion,
147
+ protocol,
148
+ ...base,
149
+ nextAction: "Native runner may supervise approved durable job specs; Node fallback remains available."
150
+ };
151
+ }
152
+ function resolveNativeRunnerPath(runner, bundledCandidate) {
153
+ if (runner.source === "bundled") {
154
+ return bundledCandidate.path;
155
+ }
156
+ if (runner.path) {
157
+ return resolve(runner.path);
158
+ }
159
+ return void 0;
160
+ }
161
+ function getBundledNativeRunnerCandidate() {
162
+ const platformArch = getNativeRunnerPlatformArch();
163
+ const supported = NATIVE_RUNNER_BUNDLED_PLATFORM_ARCHES.has(platformArch);
164
+ const targetPlatform = platformArch.split("-")[0];
165
+ const names = targetPlatform === "win32" ? ["linghun-native-runner.exe", "linghun-native-runner.cjs"] : ["linghun-native-runner", "linghun-native-runner.cjs"];
166
+ const rootCandidates = getBundledNativeRunnerRoots();
167
+ for (const root of rootCandidates) {
168
+ for (const name of names) {
169
+ const candidate = join(root, platformArch, name);
170
+ if (existsSync(candidate)) {
171
+ return {
172
+ path: candidate,
173
+ ref: `bundled:${platformArch}/${name}`,
174
+ platformArch,
175
+ supported
176
+ };
177
+ }
178
+ }
179
+ }
180
+ return {
181
+ path: supported && rootCandidates[0] ? join(rootCandidates[0], platformArch, names[0] ?? "linghun-native-runner") : void 0,
182
+ ref: `bundled:${platformArch}/${names[0] ?? "linghun-native-runner"}`,
183
+ platformArch,
184
+ supported
185
+ };
186
+ }
187
+ function getNativeRunnerPlatformArch() {
188
+ const override = process.env.LINGHUN_NATIVE_RUNNER_PLATFORM_ARCH_TEST;
189
+ if (override && NATIVE_RUNNER_BUNDLED_PLATFORM_ARCHES.has(override)) {
190
+ return override;
191
+ }
192
+ return `${process.platform}-${process.arch}`;
193
+ }
194
+ function getBundledNativeRunnerRoots() {
195
+ const roots = [];
196
+ if (process.env.LINGHUN_NATIVE_RUNNER_BUNDLED_DIR) {
197
+ roots.push(process.env.LINGHUN_NATIVE_RUNNER_BUNDLED_DIR);
198
+ }
199
+ if (process.env[CLI_BUNDLED_ROOT_ENV]) {
200
+ roots.push(join(process.env[CLI_BUNDLED_ROOT_ENV], "native-runner"));
201
+ }
202
+ const moduleDir = dirname(fileURLToPath(import.meta.url));
203
+ roots.push(join(moduleDir, "..", "bundled", "native-runner"));
204
+ roots.push(join(moduleDir, "bundled", "native-runner"));
205
+ roots.push(join(moduleDir, "..", "native-runner"));
206
+ roots.push(join(moduleDir, "native-runner"));
207
+ return roots;
208
+ }
209
+ function isExecutableNativeRunnerCandidate(path) {
210
+ try {
211
+ accessSync(
212
+ path,
213
+ process.platform === "win32" ? constants.R_OK : constants.R_OK | constants.X_OK
214
+ );
215
+ return true;
216
+ } catch {
217
+ return false;
218
+ }
219
+ }
220
+ function parseRunnerJson(raw) {
221
+ for (const line of raw.split(/\r?\n/u).filter(Boolean).reverse()) {
222
+ try {
223
+ const parsed = JSON.parse(line);
224
+ if (isRecord(parsed)) return parsed;
225
+ } catch {
226
+ }
227
+ }
228
+ return {};
229
+ }
230
+ function createNativeRunnerCommand(runnerPath, args) {
231
+ if (runnerPath.endsWith(".js") || runnerPath.endsWith(".cjs") || runnerPath.endsWith(".mjs")) {
232
+ return { command: process.execPath, args: [runnerPath, ...args] };
233
+ }
234
+ return { command: runnerPath, args };
235
+ }
236
+ function formatNativeRunnerProcessGuardContract() {
237
+ return NATIVE_RUNNER_PROCESS_GUARD_CONTRACT.map(
238
+ (line) => `- process guard contract: ${line}`
239
+ ).join("\n");
240
+ }
241
+ function formatApprovedRunnerSpecLine(job) {
242
+ const spec = job.runner?.spec;
243
+ if (!spec) {
244
+ return `- approved spec: none
245
+ ${formatNativeRunnerProcessGuardContract()}`;
246
+ }
247
+ return [
248
+ `- approved spec: id=${spec.id}; taskKind=${spec.approvedTaskKind}; cwdRef=${redactedPath(spec.cwd)}; timeoutMs=${spec.timeoutMs}; expectedProtocol=${spec.expectedProtocol}; envAllowlist=${spec.envAllowlist.join(",") || "none"}; redactedEnvRefs=${spec.redactedEnvRefs.join(",") || "none"}; evidenceRefs=${spec.evidenceRefs.join(",") || "none"}; logRefs=state/stdout/stderr/jobLog/fullOutput/report`,
249
+ formatNativeRunnerProcessGuardContract()
250
+ ].join("\n");
251
+ }
252
+ function createApprovedRunnerJobSpec(context, job, resolution) {
253
+ const runnerRoot = join(dirname(job.logPath), "runner");
254
+ return {
255
+ id: job.id,
256
+ approvedTaskKind: "durable_job_supervisor",
257
+ cwd: context.projectPath,
258
+ envAllowlist: [],
259
+ redactedEnvRefs: ["PATH:runtime-only"],
260
+ timeoutMs: Math.min(job.timeoutMs, context.config.nativeRunner.timeoutMs),
261
+ logPaths: {
262
+ state: join(runnerRoot, job.id, "state.json"),
263
+ stdout: join(runnerRoot, job.id, "stdout.log"),
264
+ stderr: join(runnerRoot, job.id, "stderr.log"),
265
+ jobLog: job.logPath,
266
+ fullOutput: job.fullOutputPath,
267
+ report: job.reportPath
268
+ },
269
+ expectedProtocol: resolution.protocol ?? context.config.nativeRunner.expectedProtocol,
270
+ permissionRef: job.permissionPolicy,
271
+ evidenceRefs: job.evidenceRefs.map((item) => item.id),
272
+ runnerRoot
273
+ };
274
+ }
275
+ async function startRunnerForDurableJob(context, job, deps) {
276
+ const resolution = resolveNativeRunner(context.config);
277
+ const spec = createApprovedRunnerJobSpec(context, job, resolution);
278
+ const result = await startApprovedRunnerSpec(context, spec, resolution);
279
+ const now = (/* @__PURE__ */ new Date()).toISOString();
280
+ job.runner = {
281
+ enabled: resolution.enabled,
282
+ status: result.status,
283
+ resolution: resolution.status,
284
+ adapter: result.adapter,
285
+ protocol: result.protocol ?? resolution.protocol,
286
+ version: result.version ?? resolution.version,
287
+ pathRef: resolution.pathRef,
288
+ spec,
289
+ startedAt: now,
290
+ updatedAt: now,
291
+ completedAt: result.status === "completed" || result.status === "node_fallback" ? now : void 0,
292
+ heartbeatAt: result.heartbeatAt,
293
+ logRefs: result.logRefs,
294
+ lastError: result.lastError,
295
+ fallbackReason: result.fallbackReason,
296
+ nextAction: result.status === "node_fallback" ? "Node/TUI fallback is active; runner fallback is non-PASS and visible in report/background." : result.status === "running" ? "Native runner is supervising an approved long-running task; verification remains partial until verified separately." : "Native runner reached a terminal lifecycle state; verification remains partial until verified separately."
297
+ };
298
+ await deps.appendJobLog(
299
+ job,
300
+ `runner adapter ${job.runner.adapter}; status ${job.runner.status}; resolution ${job.runner.resolution}; fallback ${job.runner.fallbackReason ?? "none"}`
301
+ );
302
+ }
303
+ async function startApprovedRunnerSpec(_context, spec, resolution) {
304
+ if (resolution.status !== "available" || !resolution.path) {
305
+ return {
306
+ status: "node_fallback",
307
+ adapter: "node",
308
+ protocol: resolution.protocol,
309
+ version: resolution.version,
310
+ lastError: resolution.lastError,
311
+ fallbackReason: resolution.status
312
+ };
313
+ }
314
+ await mkdir(spec.runnerRoot, { recursive: true });
315
+ const taskDurationMs = spec.timeoutMs <= NATIVE_RUNNER_APPROVED_TASK_HEARTBEAT_MS * 8 ? spec.timeoutMs + NATIVE_RUNNER_APPROVED_TASK_HEARTBEAT_MS * 5 : 1200;
316
+ const startCommand = createNativeRunnerCommand(resolution.path, [
317
+ "start",
318
+ "--id",
319
+ spec.id,
320
+ "--root",
321
+ spec.runnerRoot,
322
+ "--timeout-ms",
323
+ String(spec.timeoutMs),
324
+ "--heartbeat-ms",
325
+ String(NATIVE_RUNNER_APPROVED_TASK_HEARTBEAT_MS),
326
+ "--",
327
+ process.execPath,
328
+ "-e",
329
+ NATIVE_RUNNER_APPROVED_TASK_SCRIPT,
330
+ String(taskDurationMs)
331
+ ]);
332
+ let child;
333
+ let spawnError;
334
+ try {
335
+ child = spawn(startCommand.command, startCommand.args, {
336
+ cwd: spec.cwd,
337
+ detached: true,
338
+ stdio: "ignore",
339
+ windowsHide: true
340
+ });
341
+ child.once("error", (error) => {
342
+ spawnError = sanitizeDiagnosticText(error instanceof Error ? error.message : String(error));
343
+ });
344
+ child.unref();
345
+ if (child.pid) _runnerPids.set(spec.id, child.pid);
346
+ } catch (error) {
347
+ return {
348
+ status: "node_fallback",
349
+ adapter: "node",
350
+ protocol: resolution.protocol,
351
+ version: resolution.version,
352
+ lastError: sanitizeDiagnosticText(error instanceof Error ? error.message : String(error)),
353
+ fallbackReason: "start_failed"
354
+ };
355
+ }
356
+ const state = await waitForRunnerState(spec, NATIVE_RUNNER_START_STATE_WAIT_MS);
357
+ if (!state) {
358
+ const failed = await new Promise((resolve2) => {
359
+ if (child.exitCode !== null) {
360
+ resolve2(true);
361
+ return;
362
+ }
363
+ child.once("exit", () => resolve2(true));
364
+ setTimeout(() => resolve2(false), 25);
365
+ });
366
+ return {
367
+ status: "node_fallback",
368
+ adapter: "node",
369
+ protocol: resolution.protocol,
370
+ version: resolution.version,
371
+ lastError: spawnError ? `runner spawn error: ${spawnError}` : failed ? "runner start failed before writing observable state" : "runner did not write observable state before startup timeout",
372
+ fallbackReason: "start_failed"
373
+ };
374
+ }
375
+ const status = mapNativeRunnerStatus(stringValue(state.status, "running"));
376
+ return {
377
+ status,
378
+ adapter: "native",
379
+ protocol: stringValue(state.protocol, resolution.protocol ?? "unknown"),
380
+ version: resolution.version,
381
+ heartbeatAt: runnerHeartbeatValue(state),
382
+ logRefs: runnerLogRefs(spec, state),
383
+ lastError: status === "failed" ? sanitizeDiagnosticText(stringValue(state.error, "runner start failed")) : void 0
384
+ };
385
+ }
386
+ async function waitForRunnerState(spec, timeoutMs) {
387
+ const started = Date.now();
388
+ while (Date.now() - started <= timeoutMs) {
389
+ const state = await readRunnerState(spec);
390
+ if (state) return state;
391
+ await new Promise((resolve2) => setTimeout(resolve2, 25));
392
+ }
393
+ return void 0;
394
+ }
395
+ async function readRunnerState(spec) {
396
+ try {
397
+ const parsed = JSON.parse(await readFile(spec.logPaths.state, "utf8"));
398
+ return isRecord(parsed) ? parsed : void 0;
399
+ } catch {
400
+ return void 0;
401
+ }
402
+ }
403
+ function runnerHeartbeatValue(state) {
404
+ const heartbeatAt = state.heartbeatAt;
405
+ if (typeof heartbeatAt === "number" || typeof heartbeatAt === "string") {
406
+ return String(heartbeatAt);
407
+ }
408
+ const updatedAt = state.updatedAt;
409
+ return typeof updatedAt === "number" || typeof updatedAt === "string" ? String(updatedAt) : void 0;
410
+ }
411
+ function runnerLogRefs(spec, state) {
412
+ return {
413
+ state: "state.json",
414
+ stdout: safeRunnerLogRef(state.stdoutPath, spec.logPaths.stdout),
415
+ stderr: safeRunnerLogRef(state.stderrPath, spec.logPaths.stderr)
416
+ };
417
+ }
418
+ function safeRunnerLogRef(value, fallbackPath) {
419
+ const fallback = basename(fallbackPath);
420
+ if (typeof value !== "string" || value.trim().length === 0) {
421
+ return isSafeRunnerRelativeLogRef(fallback) ? fallback : "log";
422
+ }
423
+ const ref = sanitizeDiagnosticText(value.trim());
424
+ if (isSafeRunnerRelativeLogRef(ref)) {
425
+ return ref;
426
+ }
427
+ const redactedBasename = ref.replaceAll("\\", "/").split("/").filter(Boolean).at(-1);
428
+ if (redactedBasename && isSafeRunnerRelativeLogRef(redactedBasename)) {
429
+ return `present:${redactedBasename}`;
430
+ }
431
+ return isSafeRunnerRelativeLogRef(fallback) ? `present:${fallback}` : "present:log";
432
+ }
433
+ function isSafeRunnerRelativeLogRef(ref) {
434
+ return /^[A-Za-z0-9._-]+$/u.test(ref) && !ref.includes("..") && !ref.includes(":");
435
+ }
436
+ function mapNativeRunnerStatus(status) {
437
+ if (status === "timeout") return "timeout";
438
+ if (status === "cancelled") return "cancelled";
439
+ if (status === "failed" || status === "duplicate" || status === "missing") return "failed";
440
+ if (status === "running") return "running";
441
+ if (status === "completed") return "completed";
442
+ return "failed";
443
+ }
444
+ function refreshRunnerStatusForJob(context, job, deps) {
445
+ if (!job.runner?.spec || job.runner.adapter !== "native") return;
446
+ const resolution = resolveNativeRunner(context.config);
447
+ if (resolution.status !== "available" || !resolution.path) {
448
+ markJobRunnerFallback(job, resolution.status, resolution.lastError ?? resolution.status);
449
+ return;
450
+ }
451
+ const statusCommand = createNativeRunnerCommand(resolution.path, [
452
+ "status",
453
+ "--id",
454
+ job.runner.spec.id,
455
+ "--root",
456
+ job.runner.spec.runnerRoot
457
+ ]);
458
+ const status = spawnSync(statusCommand.command, statusCommand.args, {
459
+ encoding: "utf8",
460
+ timeout: NATIVE_RUNNER_VERSION_TIMEOUT_MS,
461
+ windowsHide: true
462
+ });
463
+ const raw = `${status.stdout ?? ""}
464
+ ${status.stderr ?? ""}`.trim();
465
+ if (status.error || status.status !== 0) {
466
+ markJobRunnerFallback(job, "available", raw || "runner status failed", "status_failed");
467
+ return;
468
+ }
469
+ const parsed = parseRunnerJson(raw);
470
+ const mapped = mapNativeRunnerStatus(stringValue(parsed.status, job.runner.status));
471
+ const now = (/* @__PURE__ */ new Date()).toISOString();
472
+ job.runner.status = mapped;
473
+ job.runner.updatedAt = now;
474
+ job.runner.heartbeatAt = runnerHeartbeatValue(parsed) ?? job.runner.heartbeatAt;
475
+ job.runner.logRefs = runnerLogRefs(job.runner.spec, parsed);
476
+ if (mapped !== "running") job.runner.completedAt ??= now;
477
+ if (mapped === "timeout" || mapped === "cancelled" || mapped === "failed") {
478
+ job.status = mapped;
479
+ job.pauseReason = `runner_${mapped}`;
480
+ job.updatedAt = now;
481
+ job.endedAt = now;
482
+ job.result = {
483
+ status: mapped,
484
+ summary: `Native runner reported ${mapped}; no PASS evidence generated.`,
485
+ facts: [formatJobRunnerInline(job)],
486
+ evidenceRefs: job.evidenceRefs.map((item) => item.id),
487
+ generatedAt: now
488
+ };
489
+ deps.rescheduleDurableJobAgents(job);
490
+ }
491
+ }
492
+ async function stopRunnerForDurableJob(context, job, deps) {
493
+ if (!job.runner?.spec || job.runner.adapter !== "native") {
494
+ markJobRunnerTerminal(job, "cancelled", "node fallback or no native runner to stop");
495
+ return;
496
+ }
497
+ const resolution = resolveNativeRunner(context.config);
498
+ let stopRequested = false;
499
+ let fallbackKillAttempted = false;
500
+ if (resolution.status === "available" && resolution.path) {
501
+ const stopCommand = createNativeRunnerCommand(resolution.path, [
502
+ "stop",
503
+ "--id",
504
+ job.runner.spec.id,
505
+ "--root",
506
+ job.runner.spec.runnerRoot
507
+ ]);
508
+ spawnSync(stopCommand.command, stopCommand.args, {
509
+ encoding: "utf8",
510
+ timeout: NATIVE_RUNNER_VERSION_TIMEOUT_MS,
511
+ windowsHide: true
512
+ });
513
+ stopRequested = true;
514
+ } else {
515
+ const pid = _runnerPids.get(job.runner.spec.id);
516
+ if (pid !== void 0) {
517
+ try {
518
+ if (process.platform === "win32") {
519
+ spawnSync("taskkill", ["/pid", String(pid), "/t", "/f"], { windowsHide: true });
520
+ } else {
521
+ try {
522
+ process.kill(-pid, "SIGKILL");
523
+ } catch {
524
+ process.kill(pid, "SIGKILL");
525
+ }
526
+ }
527
+ fallbackKillAttempted = true;
528
+ } catch {
529
+ }
530
+ }
531
+ }
532
+ _runnerPids.delete(job.runner.spec.id);
533
+ markJobRunnerTerminal(job, "cancelled", "user_cancelled");
534
+ await deps.appendJobLog(
535
+ job,
536
+ stopRequested ? "runner stop --id requested; cancelled is non-PASS" : fallbackKillAttempted ? "runner binary unavailable; fallback pid/taskkill used; cancelled is non-PASS" : "runner stop unavailable; no pid/taskkill fallback available; cancelled is non-PASS"
537
+ );
538
+ }
539
+ function markJobRunnerTerminal(job, status, reason) {
540
+ const now = (/* @__PURE__ */ new Date()).toISOString();
541
+ const shouldSyncActiveJob = job.status === "created" || job.status === "running" || job.status === "sleeping";
542
+ if (shouldSyncActiveJob && (status === "cancelled" || status === "timeout" || status === "failed" || status === "stale")) {
543
+ job.status = status;
544
+ job.pauseReason = `runner_${status}`;
545
+ job.updatedAt = now;
546
+ job.endedAt = now;
547
+ job.result = {
548
+ status,
549
+ summary: `Native runner moved to ${status}; no PASS evidence generated.`,
550
+ facts: [sanitizeDiagnosticText(reason), formatJobRunnerInline(job)],
551
+ evidenceRefs: job.evidenceRefs.map((item) => item.id),
552
+ generatedAt: now
553
+ };
554
+ }
555
+ job.runner = {
556
+ enabled: job.runner?.enabled ?? false,
557
+ status,
558
+ resolution: job.runner?.resolution ?? "unavailable",
559
+ adapter: job.runner?.adapter ?? "node",
560
+ protocol: job.runner?.protocol,
561
+ version: job.runner?.version,
562
+ pathRef: job.runner?.pathRef,
563
+ spec: job.runner?.spec,
564
+ startedAt: job.runner?.startedAt,
565
+ updatedAt: now,
566
+ completedAt: now,
567
+ heartbeatAt: job.runner?.heartbeatAt,
568
+ logRefs: job.runner?.logRefs,
569
+ lastError: sanitizeDiagnosticText(reason),
570
+ fallbackReason: job.runner?.fallbackReason,
571
+ nextAction: "Inspect /job report and logs; runner terminal states are not verification PASS."
572
+ };
573
+ }
574
+ function markJobRunnerFallback(job, resolution, reason, fallbackReason = resolution) {
575
+ const now = (/* @__PURE__ */ new Date()).toISOString();
576
+ job.runner = {
577
+ enabled: job.runner?.enabled ?? true,
578
+ status: "node_fallback",
579
+ resolution,
580
+ adapter: "node",
581
+ protocol: job.runner?.protocol,
582
+ version: job.runner?.version,
583
+ pathRef: job.runner?.pathRef,
584
+ spec: job.runner?.spec,
585
+ startedAt: job.runner?.startedAt,
586
+ updatedAt: now,
587
+ completedAt: now,
588
+ heartbeatAt: job.runner?.heartbeatAt,
589
+ logRefs: job.runner?.logRefs,
590
+ lastError: sanitizeDiagnosticText(reason),
591
+ fallbackReason,
592
+ nextAction: "Node/TUI fallback is active; runner fallback is non-PASS and visible in report/background."
593
+ };
594
+ }
595
+
596
+ export {
597
+ NATIVE_RUNNER_PROCESS_GUARD_CONTRACT,
598
+ resolveNativeRunner,
599
+ formatNativeRunnerProcessGuardContract,
600
+ formatApprovedRunnerSpecLine,
601
+ createApprovedRunnerJobSpec,
602
+ startRunnerForDurableJob,
603
+ refreshRunnerStatusForJob,
604
+ stopRunnerForDurableJob,
605
+ markJobRunnerTerminal,
606
+ markJobRunnerFallback
607
+ };
@@ -0,0 +1,93 @@
1
+ // src/index-tool-runtime.ts
2
+ var INDEX_STATUS_INSPECT = "IndexStatusInspect";
3
+ var INDEX_REFRESH = "IndexRefresh";
4
+ var INDEX_REPAIR = "IndexRepair";
5
+ var INDEX_TOOL_NAMES = [
6
+ INDEX_STATUS_INSPECT,
7
+ INDEX_REFRESH,
8
+ INDEX_REPAIR
9
+ ];
10
+ function isIndexToolName(name) {
11
+ return INDEX_TOOL_NAMES.includes(name);
12
+ }
13
+ function isMutatingIndexTool(name) {
14
+ return name === INDEX_REFRESH || name === INDEX_REPAIR;
15
+ }
16
+ function createIndexToolDefinitions() {
17
+ return [
18
+ {
19
+ name: INDEX_STATUS_INSPECT,
20
+ description: "Inspect the current codebase-memory index status for this project (refreshes the status read, but does NOT rebuild the index). Read-only and safe to call without confirmation. Returns enabled/status/projectName/nodes/edges. Use this when the user asks whether the index is ready or what its current state is. Do NOT claim the index was refreshed \u2014 this only reads status.",
21
+ inputSchema: {
22
+ type: "object",
23
+ additionalProperties: false,
24
+ properties: {
25
+ reason: { type: "string" }
26
+ }
27
+ }
28
+ },
29
+ {
30
+ name: INDEX_REFRESH,
31
+ description: "Refresh (rebuild) the codebase-memory index for this project, reusing the controlled /index refresh path. This writes workspace-local index artifacts and runs the index runtime. Permission behavior: default asks for confirmation; auto-review may directly run an ordinary workspace refresh; plan refuses mutating execution; dangerous repair, persistent ignore changes, path-boundary, shell/network/install/delete risks still go through the permission pipeline. Call this tool to actually refresh the index when the user asks to update/refresh/rebuild the index. Do NOT claim the index was refreshed unless this tool returns success.",
32
+ inputSchema: {
33
+ type: "object",
34
+ additionalProperties: false,
35
+ properties: {
36
+ force: { type: "boolean" },
37
+ reason: { type: "string" }
38
+ }
39
+ }
40
+ },
41
+ {
42
+ name: INDEX_REPAIR,
43
+ description: "Persist index skip suggestions after a refresh automatically skipped large/generated files: append the missing ignore entries (.linghunignore/.cbmignore) and then refresh, reusing the controlled /index repair path. Permission behavior: default asks before writing; auto-review can proceed only when the workspace-local ignore/index write is low risk; plan refuses mutating execution; dangerous or path-boundary changes still ask/deny through the permission pipeline. Only meaningful when skip suggestions exist. Call this tool to actually repair-and-refresh; do NOT claim it succeeded without a success result.",
44
+ inputSchema: {
45
+ type: "object",
46
+ additionalProperties: false,
47
+ properties: {
48
+ reason: { type: "string" }
49
+ }
50
+ }
51
+ }
52
+ ];
53
+ }
54
+ function asRecord(input) {
55
+ return input && typeof input === "object" && !Array.isArray(input) ? input : {};
56
+ }
57
+ function parseIndexRefreshInput(input) {
58
+ const obj = asRecord(input);
59
+ return {
60
+ force: typeof obj.force === "boolean" ? obj.force : void 0,
61
+ reason: typeof obj.reason === "string" ? obj.reason : void 0
62
+ };
63
+ }
64
+ function summarizeIndexStatusInspect(status, projectName, nodes, edges, language) {
65
+ const isEn = language === "en-US";
66
+ const project = projectName ?? (isEn ? "(not selected)" : "\uFF08\u672A\u9009\u4E2D\uFF09");
67
+ const counts = nodes !== void 0 || edges !== void 0 ? isEn ? `; graph ${nodes ?? "-"} node(s), ${edges ?? "-"} edge(s)` : `\uFF1B\u56FE ${nodes ?? "-"} \u4E2A\u8282\u70B9\u3001${edges ?? "-"} \u6761\u8FB9` : "";
68
+ return isEn ? `Index status inspected (not refreshed): status ${status}; project ${project}${counts}.` : `\u5DF2\u68C0\u67E5\u7D22\u5F15\u72B6\u6001\uFF08\u672A\u5237\u65B0\uFF09\uFF1A\u72B6\u6001 ${status}\uFF1B\u9879\u76EE ${project}${counts}\u3002`;
69
+ }
70
+ function summarizeIndexRefreshOutcome(action, status, language) {
71
+ const isEn = language === "en-US";
72
+ if (status === "stale") {
73
+ if (action === "repair") {
74
+ return isEn ? "Index repair ran and refresh was attempted; current status is still stale." : "\u7D22\u5F15\u4FEE\u590D\u5DF2\u6267\u884C\u5E76\u5C1D\u8BD5\u5237\u65B0\uFF1B\u5F53\u524D\u72B6\u6001\u4ECD\u4E3A stale\u3002";
75
+ }
76
+ return isEn ? "Index refresh ran; current status is still stale." : "\u7D22\u5F15\u5237\u65B0\u5DF2\u6267\u884C\uFF1B\u5F53\u524D\u72B6\u6001\u4ECD\u4E3A stale\u3002";
77
+ }
78
+ const label = action === "repair" ? isEn ? "repaired and refreshed" : "\u5DF2\u4FEE\u590D\u5E76\u5237\u65B0" : isEn ? "refreshed" : "\u5DF2\u5237\u65B0";
79
+ return isEn ? `Index ${label}: status ${status}.` : `\u7D22\u5F15${label}\uFF1A\u72B6\u6001 ${status}\u3002`;
80
+ }
81
+
82
+ export {
83
+ INDEX_STATUS_INSPECT,
84
+ INDEX_REFRESH,
85
+ INDEX_REPAIR,
86
+ INDEX_TOOL_NAMES,
87
+ isIndexToolName,
88
+ isMutatingIndexTool,
89
+ createIndexToolDefinitions,
90
+ parseIndexRefreshInput,
91
+ summarizeIndexStatusInspect,
92
+ summarizeIndexRefreshOutcome
93
+ };