tianshu-harness 3.27.0 → 3.28.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 (264) hide show
  1. package/README.en.md +14 -12
  2. package/README.ja.md +13 -11
  3. package/README.ko.md +13 -11
  4. package/README.md +102 -21
  5. package/dist/{account-3FMZDNGA.js → account-4M3HLPMS.js} +10 -4
  6. package/dist/{account-login-KW7KXROU.js → account-login-4ACKFTTH.js} +19 -10
  7. package/dist/{account-status-DK2PETHW.js → account-status-U2AY7KW5.js} +10 -10
  8. package/dist/agent/worker-process/child.js +157 -125
  9. package/dist/{browser-cli-FLNY5ZHI.js → browser-cli-X67WAZDD.js} +6 -4
  10. package/dist/{browser-readiness-LWVGSBD5.js → browser-readiness-L24XIPQ3.js} +7 -5
  11. package/dist/{build-backends-3U4ZJHWF.js → build-backends-GVZC7NLX.js} +8 -7
  12. package/dist/{build-options-66Y4ZE7C.js → build-options-OPTCFDFQ.js} +2 -2
  13. package/dist/{chain-SFW6YTIG.js → chain-XNY5PRGN.js} +6 -4
  14. package/dist/{checkpoint-EVQWU2AC.js → checkpoint-VWAVRV66.js} +4 -4
  15. package/dist/chunk-2DIPHKWL.js +57 -0
  16. package/dist/{chunk-IPAZZLYS.js → chunk-2FW5XF5W.js} +7 -7
  17. package/dist/{chunk-QBQS7VL6.js → chunk-2GFWQIOC.js} +2 -2
  18. package/dist/{chunk-PI37ALQR.js → chunk-2VABOSFU.js} +11 -11
  19. package/dist/{chunk-MJQ55WZZ.js → chunk-2YF5JR7U.js} +21 -19
  20. package/dist/{chunk-B5WBNTBA.js → chunk-32B76K5V.js} +127 -12
  21. package/dist/{chunk-2VYRLULP.js → chunk-37WHEV35.js} +2 -2
  22. package/dist/{chunk-UAS2P5YN.js → chunk-3AYQYOUH.js} +3 -3
  23. package/dist/{chunk-EXKORBKC.js → chunk-3FTOULUT.js} +9 -5
  24. package/dist/{chunk-CI4R6P2B.js → chunk-3I5K7XOZ.js} +1 -1
  25. package/dist/{chunk-OXMIV4WE.js → chunk-3L6Y25YS.js} +46 -8
  26. package/dist/chunk-3SN2NDCD.js +82 -0
  27. package/dist/{chunk-ZDIFBJFT.js → chunk-3SRRU6OC.js} +1 -1
  28. package/dist/{chunk-Z3QE7TZM.js → chunk-3V275PK3.js} +75 -1
  29. package/dist/{chunk-2XN7PM4N.js → chunk-3Y4IEZI6.js} +7 -2
  30. package/dist/{chunk-ADK6OD5V.js → chunk-4FATPZA2.js} +1 -1
  31. package/dist/{chunk-5GGOGLSN.js → chunk-4I2HDYJG.js} +0 -3
  32. package/dist/{chunk-PJWIC4TW.js → chunk-4J2EDRAB.js} +47 -27
  33. package/dist/chunk-4RCVGE32.js +79 -0
  34. package/dist/{chunk-JCI57APA.js → chunk-4WCNAMB4.js} +8 -8
  35. package/dist/{chunk-NSRCNWFI.js → chunk-57HPAJ6W.js} +18 -16
  36. package/dist/{chunk-N65LICMZ.js → chunk-5E4GX7T4.js} +116 -3
  37. package/dist/{chunk-DTYYBHDD.js → chunk-5SX4GKCO.js} +2 -2
  38. package/dist/{chunk-37OXTQCP.js → chunk-5YO66O2E.js} +10 -11
  39. package/dist/{chunk-KX22RD6R.js → chunk-65QNOPDF.js} +1 -1
  40. package/dist/{chunk-DZ6UOJ5D.js → chunk-6ERFWPB4.js} +1 -1
  41. package/dist/chunk-6FMBZBKW.js +76 -0
  42. package/dist/{chunk-2ZAZTVNZ.js → chunk-6JRPKNKJ.js} +31 -6
  43. package/dist/{chunk-P5KJURUR.js → chunk-6RFGPSBE.js} +1 -1
  44. package/dist/{chunk-JQL6WFIR.js → chunk-6WIKFTC6.js} +9 -2
  45. package/dist/{chunk-7ZQR5SJ6.js → chunk-6ZOMHLFK.js} +3 -3
  46. package/dist/{chunk-P6RBPB5S.js → chunk-72OWKRYJ.js} +450 -73
  47. package/dist/{chunk-CWURIDZI.js → chunk-72X5JC6W.js} +10 -10
  48. package/dist/{chunk-QL7XQBU6.js → chunk-7DRPI6JG.js} +50 -31
  49. package/dist/{chunk-CM3GNP3F.js → chunk-7JGO72GP.js} +2 -2
  50. package/dist/{chunk-2X4QWTJ7.js → chunk-7KJ4RHGC.js} +2 -2
  51. package/dist/{chunk-IWVLQJIT.js → chunk-7UHT4DNU.js} +45 -15
  52. package/dist/{chunk-GZOQFWMP.js → chunk-A2WIYFPK.js} +1 -94
  53. package/dist/{chunk-2CIA45NF.js → chunk-ANNUB42O.js} +133 -36
  54. package/dist/{login-flow-TESFLU3H.js → chunk-AYXLLZ32.js} +4 -15
  55. package/dist/{chunk-VAV6JHGO.js → chunk-B6QROCL3.js} +24 -1
  56. package/dist/{chunk-4JI3L5WH.js → chunk-BL6AUZFU.js} +14171 -17316
  57. package/dist/{chunk-5KDRFFYH.js → chunk-BUGJXEWB.js} +3 -3
  58. package/dist/chunk-C3VWIS6E.js +58 -0
  59. package/dist/{chunk-GR2LY3D5.js → chunk-C64TOHBA.js} +6 -4
  60. package/dist/{chunk-PAIHG2UD.js → chunk-CBWGKABT.js} +156 -298
  61. package/dist/chunk-CLMR65F6.js +42 -0
  62. package/dist/{chunk-ODBM65LR.js → chunk-CPSK2UFG.js} +2 -4
  63. package/dist/{chunk-TPFNB6PT.js → chunk-CW3BNU4N.js} +2 -2
  64. package/dist/chunk-DICPSNI6.js +4007 -0
  65. package/dist/chunk-DLVSLSMB.js +209 -0
  66. package/dist/{chunk-INACHRXN.js → chunk-DMBVNURF.js} +668 -2560
  67. package/dist/chunk-DNQKHTOO.js +99 -0
  68. package/dist/chunk-DUSS7YB7.js +154 -0
  69. package/dist/chunk-DYNRVXOJ.js +230 -0
  70. package/dist/{chunk-ZVUCNFTE.js → chunk-E7EXVZ2M.js} +17 -6
  71. package/dist/{chunk-RWA23GMM.js → chunk-E7PFSNWI.js} +1 -1
  72. package/dist/{chunk-REBDJ2DK.js → chunk-EA7MH2AU.js} +5 -7
  73. package/dist/{chunk-3GN57FKM.js → chunk-EAC4KND4.js} +2 -2
  74. package/dist/{chunk-TWNHOSDT.js → chunk-EBCWNV2X.js} +2 -2
  75. package/dist/{chunk-IRZISA2G.js → chunk-EHONGTY5.js} +1 -1
  76. package/dist/{chunk-RMLYK7Q5.js → chunk-EJM5MQJ5.js} +2 -2
  77. package/dist/chunk-ELRBJQRU.js +272 -0
  78. package/dist/{chunk-SDGVJ554.js → chunk-EV23IWAR.js} +33 -89
  79. package/dist/{chunk-EPKTIOED.js → chunk-EWALQ6XG.js} +1 -1
  80. package/dist/{chunk-RV4KPWEU.js → chunk-F3SWYKNE.js} +2 -2
  81. package/dist/{chunk-DBSJJWRE.js → chunk-FDRKCB4R.js} +8 -2
  82. package/dist/{chunk-C4BAI4KE.js → chunk-FLDTEVLQ.js} +2 -2
  83. package/dist/{chunk-QARAGUXX.js → chunk-FRGTCSFE.js} +1 -1
  84. package/dist/{chunk-RU5ST7OA.js → chunk-FT3YIFU7.js} +840 -4504
  85. package/dist/{chunk-DRNEQMPD.js → chunk-FZRXG2UM.js} +115 -41
  86. package/dist/{chunk-K2JLA7G6.js → chunk-GIZ2FP22.js} +3 -3
  87. package/dist/{chunk-SSBOZKER.js → chunk-GUNVSTJ5.js} +111 -35
  88. package/dist/{chunk-ZMZCZNKU.js → chunk-H2XROHW4.js} +30 -11
  89. package/dist/{chunk-EGEI2RQA.js → chunk-HIPV7W5E.js} +310 -37
  90. package/dist/{chunk-NGEWJ4DF.js → chunk-HPRV75YA.js} +22 -5
  91. package/dist/{chunk-SEEFGFCZ.js → chunk-HS4VIUD7.js} +7 -79
  92. package/dist/{chunk-G4FU2DI5.js → chunk-IIYKBQIH.js} +248 -243
  93. package/dist/{chunk-MOZPLHSU.js → chunk-IJBFTQ6N.js} +1 -1
  94. package/dist/{chunk-H2UK46BU.js → chunk-IPYFCVXK.js} +5 -5
  95. package/dist/{chunk-MPZZGW7G.js → chunk-JIRTLMSM.js} +98 -24
  96. package/dist/{chunk-KIV4AGPM.js → chunk-JIVDECEB.js} +1 -1
  97. package/dist/{chunk-ZNC5T65N.js → chunk-JIVTST33.js} +1 -1
  98. package/dist/{chunk-RK3JHWPT.js → chunk-JZZUOL4B.js} +1 -1
  99. package/dist/{chunk-P3YG3HEO.js → chunk-K2AI6FTQ.js} +2 -2
  100. package/dist/{chunk-DXY5P57D.js → chunk-KCNW2SCC.js} +5988 -2274
  101. package/dist/{chunk-WFW7X2XH.js → chunk-KIG73CYV.js} +15 -8
  102. package/dist/{chunk-TYHWWRPA.js → chunk-KJGU7NFB.js} +50 -37
  103. package/dist/{chunk-JCFWOULR.js → chunk-KL4F2FYA.js} +1 -1
  104. package/dist/{chunk-GHVMWF2I.js → chunk-KROWAFVZ.js} +2 -2
  105. package/dist/{chunk-JSXWIWWJ.js → chunk-L4REHO7N.js} +1 -1
  106. package/dist/chunk-LC4HE2X5.js +60 -0
  107. package/dist/{chunk-BUIMGNDD.js → chunk-LCRH7DHL.js} +1 -1
  108. package/dist/{chunk-U7DF3HSB.js → chunk-LKEOBAJC.js} +3 -5
  109. package/dist/{chunk-N2FYSHGF.js → chunk-LPDK4E3E.js} +5 -79
  110. package/dist/{chunk-7UAZVVUE.js → chunk-LPYOO7VH.js} +1 -1
  111. package/dist/{chunk-BSECIPAQ.js → chunk-M66PYSTZ.js} +1 -1
  112. package/dist/{chunk-TI5PMDHA.js → chunk-MCG3OM3I.js} +1 -1
  113. package/dist/{chunk-FWO5JAWP.js → chunk-MEXOGWZ3.js} +106 -17
  114. package/dist/chunk-MIF4PWBM.js +3981 -0
  115. package/dist/{chunk-V3HROJN4.js → chunk-MQLSWJ4V.js} +1 -1
  116. package/dist/{chunk-JXVN7D4K.js → chunk-MSVG3BXX.js} +3 -36
  117. package/dist/{chunk-BXNWVP45.js → chunk-MTXTRV2W.js} +943 -1368
  118. package/dist/{chunk-ADIVZ2D5.js → chunk-MUIODEN6.js} +1 -1
  119. package/dist/{chunk-6TRMNFB6.js → chunk-MURWTM53.js} +5 -4
  120. package/dist/{chunk-4TYBQRSL.js → chunk-MVDG3YDU.js} +183 -62
  121. package/dist/{chunk-SUOXBSW3.js → chunk-MYPGAYBJ.js} +87 -32
  122. package/dist/{chunk-76IBOWQR.js → chunk-N53R6347.js} +1 -1
  123. package/dist/{chunk-AERM3VGP.js → chunk-NM2BMKTN.js} +1 -1
  124. package/dist/{chunk-2FRRZ5K6.js → chunk-NRCQ6743.js} +69 -12
  125. package/dist/{chunk-NYDTN5W4.js → chunk-NSHETV6T.js} +1 -1
  126. package/dist/{chunk-FEPR35TK.js → chunk-O2UNPITE.js} +204 -182
  127. package/dist/{chunk-35OLL4BN.js → chunk-O53YXSHY.js} +58 -23
  128. package/dist/{chunk-FHFKPGDO.js → chunk-ODFN54G6.js} +1 -1
  129. package/dist/{chunk-ESPUVUT4.js → chunk-OMMI5P4R.js} +1 -1
  130. package/dist/chunk-OWKCXUP5.js +114 -0
  131. package/dist/{chunk-7FW3I7WC.js → chunk-P5X23XMQ.js} +1 -1
  132. package/dist/{chunk-2EBWGAXD.js → chunk-PCY7PHW3.js} +1 -1
  133. package/dist/{chunk-FL4CIO5T.js → chunk-PEH3Z2C4.js} +2 -2
  134. package/dist/{chunk-2IAXMPTP.js → chunk-Q2A7U3WW.js} +1 -1
  135. package/dist/{chunk-WUF5IOFK.js → chunk-QIEZ6W4A.js} +56 -10
  136. package/dist/{chunk-BO5MRC5F.js → chunk-QLWBICQC.js} +47 -40
  137. package/dist/{chunk-AE4JGSIT.js → chunk-QNF6KSRC.js} +3 -3
  138. package/dist/{chunk-7FVNC2ZO.js → chunk-QXWUXOXW.js} +6 -6
  139. package/dist/{chunk-3L6VC5CO.js → chunk-R7VPAGWE.js} +15 -6
  140. package/dist/chunk-RHUBRUTP.js +764 -0
  141. package/dist/{chunk-4UZYEDDP.js → chunk-RMRUWBSS.js} +57 -6
  142. package/dist/{chunk-S4K4L6IM.js → chunk-RO7A6HGV.js} +1 -1
  143. package/dist/{chunk-FAYHO63O.js → chunk-RWCX2NBM.js} +1 -1
  144. package/dist/{chunk-SADUBMAH.js → chunk-RXYIEGV5.js} +40 -22
  145. package/dist/{chunk-722LQO64.js → chunk-SEWM6XQK.js} +1 -1
  146. package/dist/chunk-SHVSHGLZ.js +94 -0
  147. package/dist/{chunk-RE6DPG2X.js → chunk-SN3YM7LW.js} +2 -2
  148. package/dist/{chunk-2HDP7RMR.js → chunk-SYAAYS7L.js} +1 -1
  149. package/dist/{chunk-TP5GXQKN.js → chunk-T5Q6VJOD.js} +3 -3
  150. package/dist/{chunk-URRZCCIO.js → chunk-T7QJCGUP.js} +724 -46
  151. package/dist/{chunk-GD4ZNZ7W.js → chunk-TBS6TJXJ.js} +1 -1
  152. package/dist/{chunk-3C3R7JXY.js → chunk-TD7WHMO5.js} +44 -1
  153. package/dist/{chunk-6ANPK33S.js → chunk-TDV2J2EC.js} +1 -1
  154. package/dist/{chunk-JMDXQTIY.js → chunk-TKIAH7YX.js} +1 -1
  155. package/dist/{chunk-SAXK6LVF.js → chunk-TU5JNOKW.js} +7 -1
  156. package/dist/chunk-TUZRL7NL.js +3467 -0
  157. package/dist/{chunk-O5VZQKCB.js → chunk-TWHHPGO4.js} +2779 -1000
  158. package/dist/{chunk-ZGGCEXDC.js → chunk-TZCG6QH5.js} +1 -1
  159. package/dist/{chunk-A56IBV6E.js → chunk-UKUN2DUS.js} +4 -4
  160. package/dist/chunk-UZN56VGE.js +2423 -0
  161. package/dist/{chunk-SXNZ3VPO.js → chunk-V5UFY27B.js} +25 -116
  162. package/dist/chunk-VDNFYUCB.js +2342 -0
  163. package/dist/chunk-W2KBHCOW.js +1865 -0
  164. package/dist/{chunk-G3TX7BJQ.js → chunk-WVWJW3VL.js} +3 -5
  165. package/dist/{logs-cli-CV2U5P5U.js → chunk-WYYQAN26.js} +7 -96
  166. package/dist/{chunk-EXUE5W2F.js → chunk-X5KGKW52.js} +1 -1
  167. package/dist/chunk-XFG2BR6O.js +489 -0
  168. package/dist/{chunk-IJ6JWKGB.js → chunk-Y74EUXQZ.js} +6 -8
  169. package/dist/{chunk-AHH5U5ML.js → chunk-YGPL7L66.js} +1 -1
  170. package/dist/{chunk-CA4PCUY7.js → chunk-ZHNX6AA5.js} +31 -242
  171. package/dist/{chunk-VUVVHZPO.js → chunk-ZHWIJIZ4.js} +6 -6
  172. package/dist/cli/entry.js +72 -10
  173. package/dist/{connector-MAZVNKBV.js → connector-HPNPFBPG.js} +14 -10
  174. package/dist/context-FV45E32T.js +39 -0
  175. package/dist/council-convene-JFWV245C.js +58 -0
  176. package/dist/create-agent-config-PSBSEKET.js +59 -0
  177. package/dist/cvm-ledger-6I4N36TX.js +86 -0
  178. package/dist/default-registry-XPTPJ5FI.js +78 -0
  179. package/dist/deliver-task-Y77RUVIJ.js +68 -0
  180. package/dist/delivery-gate-v2-CQA3GYOH.js +31 -0
  181. package/dist/{domain-knowledge-store-BUSWJNFC.js → domain-knowledge-store-2VA3PPU4.js} +4 -4
  182. package/dist/fetch-core-MIKWMOXT.js +17 -0
  183. package/dist/galaxy-6M3MYN5M.js +102 -0
  184. package/dist/{goal-criteria-D2NLKTJO.js → goal-criteria-CJVU2CGS.js} +27 -26
  185. package/dist/{goal-persist-NRCHF6WM.js → goal-persist-EZJMU2ZS.js} +4 -4
  186. package/dist/{goal-tracker-FXMJ2GVK.js → goal-tracker-YI2KMZEU.js} +8 -4
  187. package/dist/{headless-YCYOO4PY.js → headless-KVL4PAQZ.js} +3 -3
  188. package/dist/headless-coordinator-V7OWD7GN.js +101 -0
  189. package/dist/{inject-U55SMB6A.js → inject-VHKZ6RAR.js} +1 -1
  190. package/dist/log-locations-WKVJGDQA.js +18 -0
  191. package/dist/login-flow-Y3GUFPW7.js +26 -0
  192. package/dist/logs-cli-OW23TKR5.js +105 -0
  193. package/dist/loop-VKUWRPO5.js +86 -0
  194. package/dist/main.js +34751 -1770
  195. package/dist/{manager-KEAMKRUQ.js → manager-4XGT5XXV.js} +15 -12
  196. package/dist/{manager-UASNPP5J.js → manager-YKUYKZVB.js} +633 -168
  197. package/dist/{meridian-indexer-2OSWGPLB.js → meridian-indexer-JKB5P4M3.js} +6 -6
  198. package/dist/{native-resolver-PN34UIVV.js → native-resolver-GA7LG3SF.js} +2 -2
  199. package/dist/office-xml-extract-IS54N3ET.js +109 -0
  200. package/dist/{ownership-ledger-E3WIEKPL.js → ownership-ledger-LS5IW2Z4.js} +2 -2
  201. package/dist/package.json +2 -0
  202. package/dist/{path-grants-IMIWG5MJ.js → path-grants-IPDK63QY.js} +7 -7
  203. package/dist/{paths-PZCXDIBR.js → paths-NYQNYI5C.js} +2 -4
  204. package/dist/{plan-fact-anchors-LMVQZCW5.js → plan-fact-anchors-IXOXBQBA.js} +2 -2
  205. package/dist/{plan-store-ODLTTPFB.js → plan-store-URWVJY4W.js} +2 -2
  206. package/dist/{plan-templates-42MSU325.js → plan-templates-FQT5W2E3.js} +3 -5
  207. package/dist/plugin-loader-SV5HNLD5.js +24 -0
  208. package/dist/{prefix-budget-62OV5HQC.js → prefix-budget-7YCI6AZT.js} +2 -2
  209. package/dist/{project-trust-VGFYHJL3.js → project-trust-6ZHRPW4O.js} +8 -4
  210. package/dist/provider-cli-CGHQSWFO.js +40 -0
  211. package/dist/{providers-XQYTAVPK.js → providers-FZG36YGD.js} +2 -2
  212. package/dist/{proxy-resolver-V2Y6534D.js → proxy-resolver-UHQACXBS.js} +2 -2
  213. package/dist/{recovery-cli-KPGY6FY3.js → recovery-cli-RVZYAOCX.js} +1 -1
  214. package/dist/{review-discipline-MNSYCST5.js → review-discipline-6TFJVGKP.js} +2 -2
  215. package/dist/{review-router-D2V7C4M6.js → review-router-ODPRNQCA.js} +5 -5
  216. package/dist/serve-6P6GZICK.js +143 -0
  217. package/dist/{serve-agent-RW6S3C3G.js → serve-agent-HPSKWFYZ.js} +171 -148
  218. package/dist/{session-persist-EZJZAM4V.js → session-persist-H5BXNFZM.js} +9 -9
  219. package/dist/{session-registry-6XUD5C4Y.js → session-registry-ZKSO5E3O.js} +2 -2
  220. package/dist/{skill-loader-KKFWLM6P.js → skill-loader-YHKYUMPX.js} +4 -4
  221. package/dist/spawn-git-DSNIMFBL.js +32 -0
  222. package/dist/{sse-EYUTBWUK.js → sse-BLNK5HE2.js} +3 -3
  223. package/dist/starflow-EGNDG3FH.js +30 -0
  224. package/dist/{streamableHttp-V67CNJMO.js → streamableHttp-KGKKHPWT.js} +3 -3
  225. package/dist/{task-contract-WNYKYAEE.js → task-contract-R2AT6DPC.js} +3 -3
  226. package/dist/{task-ledger-3K4TJIER.js → task-ledger-DPWB7HXC.js} +4 -2
  227. package/dist/team-orchestrate-KUP76N7O.js +67 -0
  228. package/dist/{title-extract-QX4XGCYN.js → title-extract-4KFJP7QN.js} +1 -1
  229. package/dist/{todo-KJBCXBN2.js → todo-SV3J3BBL.js} +12 -12
  230. package/dist/{todo-store-EVMVALBU.js → todo-store-6SUTQOXB.js} +3 -3
  231. package/dist/tool-preset-MEHN3JJS.js +26 -0
  232. package/dist/{tool-tiers-GD742YBN.js → tool-tiers-IF3LWOF5.js} +2 -2
  233. package/dist/{turndown.es-OI55K6C3.js → turndown.es-MJFEUPW2.js} +1 -1
  234. package/dist/{verification-attribution-SEAN6IQT.js → verification-attribution-CCEHCHIP.js} +3 -2
  235. package/dist/{volatile-git-MBTST7RA.js → volatile-git-5YV23NIF.js} +2 -2
  236. package/dist/wave-checkpoint-AA4OAAIA.js +39 -0
  237. package/dist/{web-cli-IWVBFUNL.js → web-cli-OHIJAIAG.js} +9 -9
  238. package/dist/{web-search-62XPBLMB.js → web-search-QJ5F3D6Z.js} +15 -13
  239. package/dist/workers/cpu-worker.js +35 -4
  240. package/dist/{workflow-runner-LEK7JG5K.js → workflow-runner-WNIQWGST.js} +2 -4
  241. package/dist/{worktree-baseline-MA35E556.js → worktree-baseline-LPFXMGIN.js} +2 -2
  242. package/package.json +4 -2
  243. package/dist/chunk-66JPZSGX.js +0 -55
  244. package/dist/chunk-UXNLELW6.js +0 -25
  245. package/dist/chunk-VNLKEACR.js +0 -32431
  246. package/dist/chunk-ZKFBH4JM.js +0 -3913
  247. package/dist/context-SZWJHKQC.js +0 -38
  248. package/dist/council-convene-2DU64ADZ.js +0 -53
  249. package/dist/create-agent-config-ZA3MO2HK.js +0 -57
  250. package/dist/default-registry-VLKHDRUT.js +0 -72
  251. package/dist/deliver-task-6A3DVXCG.js +0 -64
  252. package/dist/delivery-gate-v2-WE65XQ2L.js +0 -29
  253. package/dist/fetch-core-KHXET7ZJ.js +0 -16
  254. package/dist/galaxy-V35QYHDR.js +0 -93
  255. package/dist/headless-coordinator-BICCMMUJ.js +0 -92
  256. package/dist/loop-KGLDXEHU.js +0 -78
  257. package/dist/plugin-loader-CLSBWW57.js +0 -23
  258. package/dist/provider-cli-DNQB5JPG.js +0 -39
  259. package/dist/serve-72DJIPUR.js +0 -176
  260. package/dist/spawn-git-W4MM4RCI.js +0 -31
  261. package/dist/starflow-P7ZFXJHD.js +0 -29
  262. package/dist/team-orchestrate-2XRCAX76.js +0 -64
  263. package/dist/tool-preset-DOFMAXN4.js +0 -25
  264. package/dist/wave-checkpoint-DYBNFNBE.js +0 -39
package/README.en.md CHANGED
@@ -25,7 +25,7 @@
25
25
  <img src="https://img.shields.io/github/v/release/huiliyi37/Tianshu-harness?color=8B5CF6&label=Release&logo=github&style=for-the-badge" alt="GitHub release">
26
26
  <img src="https://img.shields.io/badge/License-Apache%202.0-3B5BDB?style=for-the-badge&logo=apache" alt="License">
27
27
  <img src="https://img.shields.io/badge/TypeScript-Strict-blue?style=for-the-badge&logo=typescript" alt="TypeScript">
28
- <img src="https://img.shields.io/badge/Tests-16%2C000%2B%20Passed-green?style=for-the-badge&logo=testinglibrary" alt="Tests">
28
+ <img src="https://img.shields.io/badge/Tests-19%2C000%2B%20Passed-green?style=for-the-badge&logo=testinglibrary" alt="Tests">
29
29
  <a href="https://discord.gg/XjWTATCHB"><img src="https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Discord"></a>
30
30
  <a href="https://atomgit.com/huiliyi37/Tianshu-harness"><img src="https://atomgit.com/huiliyi37/Tianshu-harness/star/badge.svg" alt="AtomGit Star"></a>
31
31
  <a href="https://github.com/huiliyi37/Tianshu-harness/releases"><img src="https://img.shields.io/github/downloads/huiliyi37/Tianshu-harness/total?logo=github&label=downloads" alt="GitHub downloads"></a>
@@ -44,7 +44,7 @@
44
44
  > **Tianshu** is a TypeScript coding-agent runtime: one agent kernel shared by a **terminal TUI** and a **desktop GUI**. It is built to let models do continuous multi-step engineering work — with cognitive guardrails, multi-agent orchestration, and a DeepSeek V4 prefix-cache-friendly design for cost-efficient long sessions.
45
45
 
46
46
  - **One kernel, two surfaces** — a pure-ANSI terminal TUI (`tianshu`) and a Tauri desktop app (macOS / Windows / Linux) share the same agent core, so capabilities stay consistent across interfaces.
47
- - **Cognitive Virtual Machine (CVM)** — 72 runtime hooks across 5 lifecycle phases put an observable, correctable cognitive layer between model output and real tool actions ([A/B evidence](docs/CVM运行时对Agent模型的实证影响.md)).
47
+ - **Cognitive Virtual Machine (CVM)** — 75 runtime hooks across 5 lifecycle phases put an observable, correctable cognitive layer between model output and real tool actions ([A/B evidence](docs/CVM运行时对Agent模型的实证影响.md)).
48
48
  - **Multi-agent orchestration** — from lightweight `/scout` reconnaissance and parallel `/team` execution to `/council` multi-model review and `/galaxy` multi-dimensional attack, complex work runs in waves with review gates.
49
49
  - **Unified project memory** — project knowledge lives in `.rivet/knowledge/memory.jsonl`; automatic injection is limited to governance/constraint/preference memories, while old failures and docs stay explicit-recall-only so they cannot hijack new questions.
50
50
  - **Prefix-cache first** — frozen prefix + incremental appendix + boundary compaction sustain a measured steady-state **95–99% prefix-cache hit rate** on DeepSeek V4.
@@ -113,7 +113,7 @@ CVM doesn't make the model "smarter"; it adds four layers of defense in depth:
113
113
  Layer 1: Belief constitution (static prompt) → "you should question, verify, refuse" [A/B proven]
114
114
  Layer 2: Courage Hook (preTurn) → encourage independent judgment [A/B proven]
115
115
  Layer 3: Sensorium (per turn, <1ms) → 6-dim state sensing drives strategy [Wave 7-8 proven]
116
- Layer 4: RuntimeHookPipeline (72 hooks) → trap-and-emulate regressed behaviors [always on]
116
+ Layer 4: RuntimeHookPipeline (75 hooks) → trap-and-emulate regressed behaviors [always on]
117
117
  ```
118
118
 
119
119
  ### Independent cognition: star domains are not role-play
@@ -132,14 +132,15 @@ Once the degradations are intercepted layer by layer, models begin to express th
132
132
 
133
133
  | Metric | Value |
134
134
  |--------|-------|
135
- | CLI source (TypeScript, excl. tests) | 1,078 files / 257,623 lines |
136
- | Test code | 1,361 files / 256,001 lines |
137
- | Test cases (node:test, static declarations) | **16,471**, test : source ≈ **0.99 : 1** |
138
- | Total commits | **6,178** on main (repo created 2026-05-15, 105 days in) |
135
+ | `src/` source (TypeScript, excl. tests) | ~1,256 files / ~300k lines (`agent/` alone is 483 files) |
136
+ | `src/` tests | ~1,592 files / ~310k lines (node:test, ~1:1 with source) |
137
+ | `desktop/src` | ~450 files / ~96k lines (React), plus ~11k lines of Rust |
138
+ | `vscode-extension/src` | 17 files / ~2,700 lines |
139
+ | Commits | **8,008** total (created 2026-05-15, ~4.5 months; 1,769 in the last 30 days) |
139
140
  | Type checking | `tsc` strict + `noUncheckedIndexedAccess` |
140
141
  | Prefix-cache hit rate | 95–99% steady state, measured on long sessions |
141
142
 
142
- Agent core logic (multi-turn loops, tool pipelines, context compaction) is notoriously hard to test, and most open-source agents ship with thin coverage. This project maintains a near 1:1 test-to-source ratio, and every incident fix ships with a regression test — the ratio has held between 0.93:1 and 0.99:1 as the codebase grew (the table above is a measured snapshot as of 2026-08-28). Full methodology, growth milestones, and reproduction commands: [Engineering Metrics](docs/engineering-metrics.md).
143
+ Agent core logic (multi-turn loops, tool pipelines, context compaction) is notoriously hard to test, and most open-source agents ship with thin coverage. This project keeps tests roughly equal to source, and every incident fix ships with a regression test — the ratio has stayed near 1:1 as the codebase grew (earlier slices sat between 0.93:1 and 0.99:1; this table is a rounded snapshot as of 2026-09-30). Full methodology, growth milestones, and reproduction commands: [Engineering Metrics](docs/engineering-metrics.md).
143
144
 
144
145
  ### Tianshu vs. MiMo-Code vs. Claude Code
145
146
 
@@ -148,7 +149,7 @@ Agent core logic (multi-turn loops, tool pipelines, context compaction) is notor
148
149
  | Dimension | Tianshu | MiMo-Code | Claude Code |
149
150
  | :--- | :--- | :--- | :--- |
150
151
  | **Core focus** | Cognitive runtime (CVM) | Product experience / ecosystem | Enterprise coding agent |
151
- | **Runtime hook layer** | 72 conditionally-assembled hook modules × 5 phases | standard agent loop | user-configurable hooks |
152
+ | **Runtime hook layer** | 75 conditionally-assembled hook modules × 5 phases | standard agent loop | user-configurable hooks |
152
153
  | **Prefix-cache tuning** | Deeply tuned for DeepSeek V4 (95–99% steady-state) | provider default | Anthropic prompt caching |
153
154
  | **Self-perception** | Continuous cognitive-state vector | — | — |
154
155
  | **Cross-session memory** | Unified project memory + adaptive recall + session-scoped pheromones | SQLite + MEMORY.md | project memory |
@@ -592,6 +593,7 @@ The desktop app builds a visual interaction layer on top of the TUI's full capab
592
593
  - **Adaptive sidecar memory** — heap cap auto-tiers by machine RAM (8G→2G / 16G→4G / 32G→6G / 64G+→8G; override via `RIVET_SIDECAR_HEAP_MB`); machines with ≤8GB auto-enable the lean resource tier.
593
594
  - **Watchdog auto-recovery** — auto-continues on boundary stalls; the desktop timeline shows recovery events (⟳ auto-recover / ⏹ quota exhausted).
594
595
  - **Multi-session concurrency** — a tab bar manages multiple sessions, each with its own cwd + model + approval mode.
596
+ - **WSL connected runtime** (Windows) — one click to connect to the runtime running inside WSL; sessions, file access and command execution all happen on the Linux side. Disconnecting cleans up the WSL-side process automatically. The two sides upgrade independently — see the [Desktop User Guide](docs/desktop-guide.md).
595
597
  - **Feature panels** (left rail `⌘1…9` to switch): Mission Control (multi-session console), Inbox, Automations (scheduled tasks), Skills / Hooks management, Git / GitHub, Changes (diff review), Delegation (fleet tree & team-wave DAG), Cockpit.
596
598
  - **Popout window** — pop a single conversation thread into its own window for multi-screen parallel work.
597
599
  - **JobsDock / TodoDock** — a persistent background-task dock (expand logs / kill / open in terminal) and a cross-tab persistent todo dock.
@@ -855,7 +857,7 @@ Node.js 24 · TypeScript strict (`noUncheckedIndexedAccess`) · T9 ANSI renderin
855
857
 
856
858
  ```bash
857
859
  npm run typecheck # typecheck
858
- npm test # all tests (16,000+ cases)
860
+ npm test # all tests (19,000+ cases)
859
861
  npm run build # tsup bundle + staged native/wasm payload
860
862
  node dist/cli/entry.js # launch TUI
861
863
  node dist/cli/entry.js -p "fix the typo" # headless mode
@@ -1054,9 +1056,9 @@ Write only the fields you want to override; defaults are deep-merged. Full schem
1054
1056
  - **Security vulnerabilities** → [Report privately](https://github.com/huiliyi37/Tianshu-harness/security/advisories/new) (do not open a public issue)
1055
1057
  - **Contributing** → See [CONTRIBUTING.md](CONTRIBUTING.md)
1056
1058
  - **Support guide** → See SUPPORT.md
1057
- - **WeChat group** → 「天枢 harness 交流群」 — scan the QR code below to join (QR codes expire every 7 days; leave a note in Discussions once expired):
1059
+ - **WeChat group** → 「天枢 harness 交流群5群」 — scan the QR code below to join (QR codes expire every 7 days; leave a note in Discussions once expired):
1058
1060
 
1059
- <img src="docs/brand/assets/wechat-group-qr.png" width="280" alt="Tianshu Harness WeChat group QR code">
1061
+ <img src="docs/brand/assets/wechat-group-qr.png" width="280" alt="Tianshu Harness WeChat group 5 QR code">
1060
1062
 
1061
1063
  > Note: a maintainer needs to enable Discussions in `Settings → General → Discussions` first.
1062
1064
 
package/README.ja.md CHANGED
@@ -29,7 +29,7 @@
29
29
  <img src="https://img.shields.io/github/v/release/huiliyi37/Tianshu-harness?color=8B5CF6&label=Release&logo=github&style=for-the-badge" alt="GitHub release">
30
30
  <img src="https://img.shields.io/badge/License-Apache%202.0-3B5BDB?style=for-the-badge&logo=apache" alt="License">
31
31
  <img src="https://img.shields.io/badge/TypeScript-Strict-blue?style=for-the-badge&logo=typescript" alt="TypeScript">
32
- <img src="https://img.shields.io/badge/Tests-16%2C000%2B%20Passed-green?style=for-the-badge&logo=testinglibrary" alt="Tests">
32
+ <img src="https://img.shields.io/badge/Tests-19%2C000%2B%20Passed-green?style=for-the-badge&logo=testinglibrary" alt="Tests">
33
33
  <a href="https://discord.gg/XjWTATCHB"><img src="https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Discord"></a>
34
34
  <a href="https://atomgit.com/huiliyi37/Tianshu-harness"><img src="https://atomgit.com/huiliyi37/Tianshu-harness/star/badge.svg" alt="AtomGit Star"></a>
35
35
  <a href="https://github.com/huiliyi37/Tianshu-harness/releases"><img src="https://img.shields.io/github/downloads/huiliyi37/Tianshu-harness/total?logo=github&label=downloads" alt="GitHub downloads"></a>
@@ -48,7 +48,7 @@
48
48
  > **天枢**は TypeScript で書かれたコーディングエージェントのランタイムです。**ターミナル TUI** と**デスクトップ GUI** が同一カーネルを共有し、モデルが質問に答えるだけでなく、認知的ガードレール・マルチエージェントオーケストレーション・DeepSeek V4 のプレフィックスキャッシュ向けに設計された低コストの長大セッションを備え、多段階のコーディング作業を継続的に完遂できるようにします。
49
49
 
50
50
  - **ターミナル × デスクトップ、一つのカーネル** —— 純 ANSI 自前 TUI(`tianshu`)と Tauri デスクトップ(macOS / Windows / Linux)が同一エージェントカーネルを共有。両端で能力は一致し、利用シーンに応じて切り替えられます。
51
- - **認知仮想マシン(CVM)** —— 5 大フェーズにまたがる 72 のランタイムフックが、モデル出力と実際のアクションの間に観測可能で修正可能な認知レイヤーを挟みます([A/B 実証](docs/CVM运行时对Agent模型的实证影响.md))。
51
+ - **認知仮想マシン(CVM)** —— 5 大フェーズにまたがる 75 のランタイムフックが、モデル出力と実際のアクションの間に観測可能で修正可能な認知レイヤーを挟みます([A/B 実証](docs/CVM运行时对Agent模型的实证影响.md))。
52
52
  - **マルチエージェントオーケストレーション** —— 軽量な `/scout` 読み取り専用偵察、並行 `/team` 施工から、`/council` の複数席会診、`/galaxy` の多次元攻略まで。複雑なタスクは波(wave)単位で実行し、波ごとに検収します。
53
53
  - **統一プロジェクトメモリ** —— プロジェクト知識は `.rivet/knowledge/memory.jsonl` に書き込まれます。自動注入はガバナンス/制約系メモリに限定され、過去の問題やドキュメントは明示的な recall 経由のみ——新しいタスクを乗っ取りません。
54
54
  - **プレフィックスキャッシュ最優先** —— フリーズしたプレフィックス+インクリメンタル appendix+境界圧縮により、DeepSeek V4 の長大セッションで実測の定常ヒット率 **95–99%** を維持し、token コストを大幅に削減します。
@@ -116,7 +116,7 @@ CVM はモデルを「より賢く」するのではなく、4 層の防御深
116
116
  Layer 1: 信念憲法(static prompt) → 「疑問を持ち、検証し、拒否せよ」 [A/B 検証済み]
117
117
  Layer 2: Courage Hook(preTurn) → 高確信時に独立判断を促す [A/B 検証済み]
118
118
  Layer 3: Sensorium(毎 turn <1ms) → 六次元状態感知で戦略切替を駆動 [Wave 7-8 検証済み]
119
- Layer 4: RuntimeHookPipeline(72 hooks)→ trap-and-emulate で退化行動をインターセプト [全パイプライン稼働中]
119
+ Layer 4: RuntimeHookPipeline(75 hooks)→ trap-and-emulate で退化行動をインターセプト [全パイプライン稼働中]
120
120
  ```
121
121
 
122
122
  ### 独立した認知:星域はロールプレイではない
@@ -135,14 +135,15 @@ Layer 4: RuntimeHookPipeline(72 hooks)→ trap-and-emulate で退化行動
135
135
 
136
136
  | 指標 | 数値 |
137
137
  |------|------|
138
- | CLI ソースコード(TypeScript、テスト除く) | 1,078 ファイル / 257,623 行 |
139
- | テストコード | 1,361 ファイル / 256,001 行 |
140
- | テストケース(node:test、静的宣言ベース) | **16,471**、テスト : ソース ≈ **0.99 : 1** |
141
- | 累計コミット | **6,178**(main ブランチ;2026-05-15 リポジトリ作成、105 日) |
138
+ | `src/` ソース(TypeScript、テスト除く) | 約 1,256 ファイル / 30 万行(最大の `agent/` は 483 ファイル) |
139
+ | `src/` テスト | 約 1,592 ファイル / 31 万行(node:test、ソースと約 1:1) |
140
+ | `desktop/src` | 約 450 ファイル / 9.6 万行(React)、別途 Rust 約 1.1 万行 |
141
+ | `vscode-extension/src` | 17 ファイル / 約 2,700 行 |
142
+ | 累計コミット | **8,008**(2026-05-15 作成、約 4.5 か月;直近 30 日で 1,769) |
142
143
  | 型チェック | `tsc` strict + `noUncheckedIndexedAccess` |
143
144
  | プレフィックスキャッシュヒット率 | 長大セッションの定常実測 95–99% |
144
145
 
145
- コーディングエージェントのコアロジック(マルチターンループ、ツールパイプライン、コンテキスト圧縮)はテスト困難で有名で、オープンソースのエージェントプロジェクトは一般にテストカバレッジが薄いものです——本プロジェクトはテストとソースを同量に保ち、障害修正には必ず回帰テストを付けています。テスト:ソース行数比は長期にわたり 0.93–0.99 を維持し、規模拡大でも薄まっていません(上表は 2026-08-28 実測スナップショット)。完全な統計口径・イテレーションマイルストーン・再現コマンドは [エンジニアリング品質指標](docs/engineering-metrics.md) を参照。
146
+ コーディングエージェントのコアロジック(マルチターンループ、ツールパイプライン、コンテキスト圧縮)はテスト困難で有名で、オープンソースのエージェントプロジェクトは一般にテストカバレッジが薄いものです——本プロジェクトはテストとソースを同量に保ち、障害修正には必ず回帰テストを付けています。テスト:ソース行数比は 1:1 付近を維持し、規模拡大でも薄まっていません(以前の切片は 0.93–0.99;上表は 2026-09-30 の概数スナップショット)。完全な統計口径・イテレーションマイルストーン・再現コマンドは [エンジニアリング品質指標](docs/engineering-metrics.md) を参照。
146
147
 
147
148
  ## 🚀 クイックスタート
148
149
 
@@ -607,6 +608,7 @@ TUI は CLI のデフォルトサーフェスです。デスクトップ版(Ta
607
608
  - **sidecar メモリ適応**:ヒープ上限をマシンメモリで自動段階分け(8G→2G / 16G→4G / 32G→6G / 64G+→8G、`RIVET_SIDECAR_HEAP_MB` で上書き可)。≤8GB マシンは自動で lean リソースセットを有効化
608
609
  - **watchdog 自動復旧**:境界での停滞時に自動で続行。デスクトップ版のタイムラインに復旧イベントを表示(⟳ 自動復旧 / ⏹ クォータ枯渇)
609
610
  - **マルチセッション並行**:タブバーで複数セッションを管理。それぞれ独立した cwd+モデル+承認モード
611
+ - **WSL 接続ランタイム**(Windows):ワンクリックで WSL 内で動作するランタイムに接続。セッション・ファイル読み書き・コマンド実行がすべて Linux 側で行われます。切断時は WSL 側プロセスを自動クリーンアップ。両側は独立してアップグレードできます——詳細は [デスクトップユーザーガイド](docs/desktop-guide.md) を参照。
610
612
  - **機能パネル**(左サイドバー `⌘1…9` で切替):Mission Control(マルチセッションコンソール)、Inbox(受信トレイ)、Automations(定期タスク)、Skills / Hooks 管理、Git / GitHub、Changes(変更レビュー)、Delegation(委譲艦隊とチーム波次 DAG)、Cockpit コックピット
611
613
  - **Popout 独立ウィンドウ**:単一のセッションスレッドを独立ウィンドウに分離し、マルチディスプレイで並行
612
614
  - **JobsDock / TodoDock 常駐ドロワー**:バックグラウンドタスクのドッキングバー(ログ展開 / Kill / ターミナルで開く)、タブ横断の常駐 todo
@@ -918,7 +920,7 @@ Node.js 24 · TypeScript strict(`noUncheckedIndexedAccess`)· T9 ANSI レン
918
920
 
919
921
  ```bash
920
922
  npm run typecheck # 型チェック
921
- npm test # すべてのテスト(16,000+ ケース)
923
+ npm test # すべてのテスト(19,000+ ケース)
922
924
  npm run build # tsup バンドル+ネイティブ/wasm ペイロード配置
923
925
  node dist/cli/entry.js # TUI 起動
924
926
  node dist/cli/entry.js -p "fix the typo" # ヘッドレスモード
@@ -1165,9 +1167,9 @@ tianshu logs open desktop # sidecar ログディレクトリを開く
1165
1167
  - **セキュリティ脆弱性** → [プライベート報告](https://github.com/huiliyi37/Tianshu-harness/security/advisories/new)(公開 issue を開かないでください)
1166
1168
  - **コードへのコントリビュート** → [CONTRIBUTING.md](CONTRIBUTING.md) を参照
1167
1169
  - **ヘルプガイド** → [SUPPORT.md](SUPPORT.md) を参照
1168
- - **WeChat 交流グループ** →「天枢 harness 交流群」。QR コードで参加。日常の議論 / フィードバック / リリース情報をいち早く入手:
1170
+ - **WeChat 交流グループ** →「天枢 harness 交流群5群」。QR コードで参加。日常の議論 / フィードバック / リリース情報をいち早く入手:
1169
1171
 
1170
- <img src="docs/brand/assets/wechat-group-qr.png" width="280" alt="天枢 harness 交流群 WeChat グループ QR コード">
1172
+ <img src="docs/brand/assets/wechat-group-qr.png" width="280" alt="天枢 harness 交流群5群 WeChat グループ QR コード">
1171
1173
 
1172
1174
  > WeChat グループの QR コードには有効期限(7 日)があります。期限切れの場合は [Discussions](https://github.com/huiliyi37/Tianshu-harness/discussions) または Issue にコメントしてください。メンテナーが新しい QR を補充します。
1173
1175
 
package/README.ko.md CHANGED
@@ -29,7 +29,7 @@
29
29
  <img src="https://img.shields.io/github/v/release/huiliyi37/Tianshu-harness?color=8B5CF6&label=Release&logo=github&style=for-the-badge" alt="GitHub release">
30
30
  <img src="https://img.shields.io/badge/License-Apache%202.0-3B5BDB?style=for-the-badge&logo=apache" alt="License">
31
31
  <img src="https://img.shields.io/badge/TypeScript-Strict-blue?style=for-the-badge&logo=typescript" alt="TypeScript">
32
- <img src="https://img.shields.io/badge/Tests-16%2C000%2B%20Passed-green?style=for-the-badge&logo=testinglibrary" alt="Tests">
32
+ <img src="https://img.shields.io/badge/Tests-19%2C000%2B%20Passed-green?style=for-the-badge&logo=testinglibrary" alt="Tests">
33
33
  <a href="https://discord.gg/XjWTATCHB"><img src="https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Discord"></a>
34
34
  <a href="https://atomgit.com/huiliyi37/Tianshu-harness"><img src="https://atomgit.com/huiliyi37/Tianshu-harness/star/badge.svg" alt="AtomGit Star"></a>
35
35
  <a href="https://github.com/huiliyi37/Tianshu-harness/releases"><img src="https://img.shields.io/github/downloads/huiliyi37/Tianshu-harness/total?logo=github&label=downloads" alt="GitHub downloads"></a>
@@ -48,7 +48,7 @@
48
48
  > **天枢**는 TypeScript로 작성된 코딩 에이전트 런타임입니다. **터미널 TUI**와 **데스크톱 GUI**가 동일한 커널을 공유하며, 모델이 질문에 답하는 것에 그치지 않고, 인지 가드레일·멀티에이전트 오케스트레이션·DeepSeek V4 프리픽스 캐시에 맞춰 설계된 저비용 장대 세션을 갖추고 다단계 코딩 작업을 계속 완수할 수 있게 합니다.
49
49
 
50
50
  - **터미널 × 데스크톱, 하나의 커널** —— 순수 ANSI 자체 제작 TUI(`tianshu`)와 Tauri 데스크톱(macOS / Windows / Linux)이 동일한 에이전트 커널을 공유합니다. 양쪽의 능력은 동일하며 사용 시나리오에 따라 전환할 수 있습니다.
51
- - **인지 가상 머신(CVM)** —— 72개의 런타임 훅이 5대 단계에 걸쳐 있어, 모델 출력과 실제 행동 사이에 관측 가능하고 바로잡을 수 있는 인지 런타임을 둡니다([A/B 실증](docs/CVM运行时对Agent模型的实证影响.md)).
51
+ - **인지 가상 머신(CVM)** —— 75개의 런타임 훅이 5대 단계에 걸쳐 있어, 모델 출력과 실제 행동 사이에 관측 가능하고 바로잡을 수 있는 인지 런타임을 둡니다([A/B 실증](docs/CVM运行时对Agent模型的实证影响.md)).
52
52
  - **멀티에이전트 오케스트레이션** —— 가벼운 `/scout` 읽기 전용 정찰, 병렬 `/team` 시공부터 `/council` 다중 좌석 회진, `/galaxy` 다차원 공략까지. 복잡한 작업은 파(wave) 단위로 실행하며 파마다 검수합니다.
53
53
  - **통합 프로젝트 메모리** —— 프로젝트 지식은 `.rivet/knowledge/memory.jsonl`에 기록됩니다. 자동 주입은 거버넌스/제약 계열 메모리에만 한정되며, 과거 문제와 문서는 명시적 recall을 통해서만 들어옵니다——새 작업을 납치하지 않습니다.
54
54
  - **프리픽스 캐시 최우선** —— 동결 프리픽스 + 증분 appendix + 경계 압축으로 DeepSeek V4 장대 세션에서 실측 정상 적중률 **95–99%**를 유지하여 token 비용을 크게 낮춥니다.
@@ -116,7 +116,7 @@ CVM은 모델을「더 똑똑하게」만드는 것이 아니라 4계층 방어
116
116
  Layer 1: 信念宪法(static prompt) → "你应该质疑、验证、拒绝" [A/B 已证]
117
117
  Layer 2: Courage Hook(preTurn) → 高信心时鼓励独立判断 [A/B 已证]
118
118
  Layer 3: Sensorium(每 turn <1ms) → 六维状态感知,驱动策略切换 [Wave 7-8 已证]
119
- Layer 4: RuntimeHookPipeline(72 hooks) → trap-and-emulate 拦截退化行为 [全管线运行中]
119
+ Layer 4: RuntimeHookPipeline(75 hooks) → trap-and-emulate 拦截退化行为 [全管线运行中]
120
120
  ```
121
121
 
122
122
  ### 독립된 인지: 星域은 롤플레이가 아니다
@@ -135,14 +135,15 @@ Layer 4: RuntimeHookPipeline(72 hooks) → trap-and-emulate 拦截退化行
135
135
 
136
136
  | 지표 | 수치 |
137
137
  |------|------|
138
- | CLI 소스코드(TypeScript, 테스트 제외) | 1,078 파일 / 257,623 줄 |
139
- | 테스트 코드 | 1,361 파일 / 256,001 줄 |
140
- | 테스트 케이스(node:test, 정적 선언 기준) | **16,471**, 테스트 : 소스 ≈ **0.99 : 1** |
141
- | 누적 커밋 | **6,178**(main 브랜치; 2026-05-15 리포지토리 생성, 105일) |
138
+ | `src/` 소스(TypeScript, 테스트 제외) | 약 1,256 파일 / 30만 줄(가장 큰 `agent/`는 483 파일) |
139
+ | `src/` 테스트 | 약 1,592 파일 / 31만 줄(node:test, 소스와 약 1:1) |
140
+ | `desktop/src` | 약 450 파일 / 9.6만 줄(React), 별도로 Rust 약 1.1만 줄 |
141
+ | `vscode-extension/src` | 17 파일 / 약 2,700 줄 |
142
+ | 누적 커밋 | **8,008**(2026-05-15 생성, 약 4.5개월; 최근 30일 1,769) |
142
143
  | 타입 체크 | `tsc` strict + `noUncheckedIndexedAccess` |
143
144
  | 프리픽스 캐시 적중률 | 장대 세션 정상 상태 실측 95–99% |
144
145
 
145
- 코딩 에이전트의 핵심 로직(멀티턴 루프, 도구 파이프라인, 컨텍스트 압축)은 테스트가 어렵기로 유명하고, 오픈소스 에이전트 프로젝트는 일반적으로 테스트 커버리지가 얇습니다——본 프로젝트는 테스트와 소스를 동량으로 유지하고 사고 수정에는 반드시 회귀 테스트를 붙입니다. 테스트:소스 줄 수 비는 오랫동안 0.93–0.99를 유지하며 규모가 커져도 희석되지 않았습니다(위 표는 2026-08-28 실측 스냅샷). 완전한 통계 기준·반복 마일스톤·재현 명령어는 [엔지니어링 품질 지표](docs/engineering-metrics.md)를 참조하세요.
146
+ 코딩 에이전트의 핵심 로직(멀티턴 루프, 도구 파이프라인, 컨텍스트 압축)은 테스트가 어렵기로 유명하고, 오픈소스 에이전트 프로젝트는 일반적으로 테스트 커버리지가 얇습니다——본 프로젝트는 테스트와 소스를 동량으로 유지하고 사고 수정에는 반드시 회귀 테스트를 붙입니다. 테스트:소스 줄 수 비는 1:1 근처를 유지하며 규모가 커져도 희석되지 않았습니다(이전 슬라이스는 0.93–0.99; 위 표는 2026-09-30 어림 스냅샷). 완전한 통계 기준·반복 마일스톤·재현 명령어는 [엔지니어링 품질 지표](docs/engineering-metrics.md)를 참조하세요.
146
147
 
147
148
  ## 🚀 빠른 시작
148
149
 
@@ -608,6 +609,7 @@ TUI는 CLI의 기본 표면입니다. 데스크톱 앱(Tauri)과 VS Code/Cur
608
609
  - **sidecar 메모리 적응**: 힙 상한을 머신 메모리별로 자동 분급(8G→2G / 16G→4G / 32G→6G / 64G+→8G, `RIVET_SIDECAR_HEAP_MB`로 덮어쓰기 가능), ≤8GB 머신은 자동으로 lean 리소스 단계
609
610
  - **watchdog 자동 복구**: 경계 정체 시 자동으로 이어 실행, 데스크톱 타임라인에서 복구 이벤트를 볼 수 있습니다(⟳ 자동 복구 / ⏹ 할당량 소진)
610
611
  - **다중 세션 동시**: 탭 바에서 여러 세션 관리, 각각 독립 cwd + 모델 + 승인 모드
612
+ - **WSL 연결 런타임** (Windows): 원클릭으로 WSL 내부에서 실행되는 런타임에 연결합니다. 세션, 파일 읽기/쓰기, 명령 실행이 모두 Linux 측에서 이루어집니다. 연결을 끊으면 WSL 측 프로세스가 자동으로 정리됩니다. 양측은 독립적으로 업그레이드할 수 있습니다 — 자세한 내용은 [데스크톱 사용자 가이드](docs/desktop-guide.md)를 참조하세요.
611
613
  - **기능 패널**(왼쪽 바 `⌘1…9` 전환): Mission Control(다중 세션 콘솔), Inbox(받은 편지함), Automations(정기 작업), Skills / Hooks 관리, Git / GitHub, Changes(변경 검토), Delegation(파견 함대와 팀 wave DAG), Cockpit 운전석
612
614
  - **Popout 독립 창**: 단일 세션 스레드를 독립 창으로 팝아웃, 멀티 스크린 병행
613
615
  - **JobsDock / TodoDock 상주 서랍**: 백그라운드 작업 도킹 바(로그 펼치기 / Kill / 터미널에서 열기), 탭 간 상주 todo
@@ -921,7 +923,7 @@ Node.js 24 · TypeScript strict(`noUncheckedIndexedAccess`)· T9 ANSI 렌더
921
923
 
922
924
  ```bash
923
925
  npm run typecheck # 类型检查
924
- npm test # 所有测试(16,000+ 用例)
926
+ npm test # 所有测试(19,000+ 用例)
925
927
  npm run build # tsup 打包 + 原生/wasm 载荷落位
926
928
  node dist/cli/entry.js # 启动 TUI
927
929
  node dist/cli/entry.js -p "fix the typo" # 无界面模式
@@ -1167,9 +1169,9 @@ tianshu logs open desktop # 打开 sidecar 日志目录(GUI 起不
1167
1169
  - **보안 취약점** → [비공개 보고](https://github.com/huiliyi37/Tianshu-harness/security/advisories/new)(공개 issue를 열지 말 것)
1168
1170
  - **코드 기여** → [CONTRIBUTING.md](CONTRIBUTING.md) 참조
1169
1171
  - **도움 요청 가이드** → [SUPPORT.md](SUPPORT.md) 참조
1170
- - **위챗 교류 그룹** → 「天枢 harness 교류 그룹」, QR 코드를 스캔해 입장, 일상 토론 / 피드백 / 최신 릴리스 소식을 가장 먼저 받아볼 수 있습니다:
1172
+ - **위챗 교류 그룹** → 「天枢 harness 交流群5群」, QR 코드를 스캔해 입장, 일상 토론 / 피드백 / 최신 릴리스 소식을 가장 먼저 받아볼 수 있습니다:
1171
1173
 
1172
- <img src="docs/brand/assets/wechat-group-qr.png" width="280" alt="天枢 harness 交流群微信群二维码">
1174
+ <img src="docs/brand/assets/wechat-group-qr.png" width="280" alt="天枢 harness 交流群5群微信群二维码">
1173
1175
 
1174
1176
  > 위챗 그룹 QR 코드에는 유효기간이 있습니다(7일). 만료되면 [Discussions](https://github.com/huiliyi37/Tianshu-harness/discussions)나 Issue에 남겨 주시면 관리자가 새 코드를 올려 드립니다.
1175
1177
 
package/README.md CHANGED
@@ -29,7 +29,7 @@
29
29
  <img src="https://img.shields.io/github/v/release/huiliyi37/Tianshu-harness?color=8B5CF6&label=Release&logo=github&style=for-the-badge" alt="GitHub release">
30
30
  <img src="https://img.shields.io/badge/License-Apache%202.0-3B5BDB?style=for-the-badge&logo=apache" alt="License">
31
31
  <img src="https://img.shields.io/badge/TypeScript-Strict-blue?style=for-the-badge&logo=typescript" alt="TypeScript">
32
- <img src="https://img.shields.io/badge/Tests-16%2C000%2B%20Passed-green?style=for-the-badge&logo=testinglibrary" alt="Tests">
32
+ <img src="https://img.shields.io/badge/Tests-19%2C000%2B%20Passed-green?style=for-the-badge&logo=testinglibrary" alt="Tests">
33
33
  <a href="https://discord.gg/XjWTATCHB"><img src="https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Discord"></a>
34
34
  <a href="https://atomgit.com/huiliyi37/Tianshu-harness"><img src="https://atomgit.com/huiliyi37/Tianshu-harness/star/badge.svg" alt="AtomGit Star"></a>
35
35
  <a href="https://github.com/huiliyi37/Tianshu-harness/releases"><img src="https://img.shields.io/github/downloads/huiliyi37/Tianshu-harness/total?logo=github&label=downloads" alt="GitHub downloads"></a>
@@ -59,8 +59,8 @@ Application / TUI / IDE / Desktop
59
59
 
60
60
  - **稳定交付,不虚报完成** —— 这是核心。任务契约(TaskContract)钉住全局目标,交付门禁要求「完成」必须带运行时证据(测试、diff、验证命令),收敛检测独立判断认知轨迹是否还在推进——模型说完成 ≠ 运行时确认完成。
61
61
  - **终端 × 桌面,一个内核** —— 纯 ANSI 自研 TUI(`tianshu`)与 Tauri 桌面端(macOS / Windows / Linux)共用同一 agent 内核,两端能力一致。
62
- - **认知虚拟机(CVM)** —— 72 个运行时 hook 横跨 5 大阶段,在模型输出与真实动作之间加一层可观测、可纠偏的认知运行时([理念文档](docs/reference/cvm-cognitive-runtime.md) · [A/B 实证](docs/CVM运行时对Agent模型的实证影响.md))。
63
- - **前缀缓存引擎,全模型适用** —— 冻结前缀 + 增量 appendix + 边界压缩,对所有支持前缀缓存的模型生效:各家模型长会话实测稳态命中率均在 **98–99%**(DeepSeek V4 另有针对性优化),显著降低 token 成本。
62
+ - **认知虚拟机(CVM)** —— 75 个运行时 hook 横跨 5 大阶段,在模型输出与真实动作之间加一层可观测、可纠偏的认知运行时([理念文档](docs/reference/cvm-cognitive-runtime.md) · [A/B 实证](docs/CVM运行时对Agent模型的实证影响.md))。
63
+ - **前缀缓存引擎,全模型适用** —— 冻结前缀 + 增量 appendix + 边界压缩,对所有支持前缀缓存的模型生效:各家模型长会话实测稳态命中率均在 **95–99%**(DeepSeek V4 另有针对性优化),显著降低 token 成本。
64
64
 
65
65
  <p align="center">
66
66
  <img src="docs/brand/assets/tianshu-harness-screenshot.png" alt="天枢 TUI(终端版)" width="49%">
@@ -76,6 +76,7 @@ Application / TUI / IDE / Desktop
76
76
  ## 目录
77
77
 
78
78
  - [为什么是认知运行时](#为什么是认知运行时)
79
+ - [星域](#星域)
79
80
  - [核心特性](#核心特性)
80
81
  - [快速开始](#快速开始)
81
82
  - [权限模式](#权限模式)
@@ -126,17 +127,46 @@ CVM 不改权重、不让模型变成确定性程序,而是在概率认知之
126
127
  外环(运行时监管):observe → measure → evaluate → gate → verify → continue / correct / halt
127
128
  ```
128
129
 
129
- 落到工程上是四层防御深度:信念宪法(static prompt)→ Courage Hook(preTurn)→ Sensorium(每 turn <1ms 六维状态感知)→ RuntimeHookPipeline(72 hooks,trap-and-emulate 拦截退化行为)。全局目标有独立状态(TaskContract),完成必须有运行时证据(Evidence),坍缩会被独立检测(Convergence / doom-loop)。
130
-
131
- ### 星域:模型的独立认知结构
132
-
133
- 当退化被逐层拦截,模型开始表现出自己的认知结构——这是星域系统的由来。16 个星域不是角色扮演,而是可切换的认知纪律:**系统提示词、工具白名单、决策阈值**真实切换。星域不是能力限制,任何星域都有完成任务的全部能力,只是视角不同;委员会与团队模式会按议题自动召集多星域席位。
134
-
135
- > 完整叙事见 [✦ 星域碑文](docs/stars/genesis-stele.md) · [创世纪公开声明](docs/releases/manifesto-v3.0.0.md);新用户选星指南见 [用户手册「星域系统」](docs/user-guide.md#星域系统)。
130
+ 落到工程上是四层防御深度:信念宪法(static prompt)→ Courage Hook(preTurn)→ Sensorium(每 turn <1ms 六维状态感知)→ RuntimeHookPipeline(75 hooks,trap-and-emulate 拦截退化行为)。全局目标有独立状态(TaskContract),完成必须有运行时证据(Evidence),坍缩会被独立检测(Convergence / doom-loop)。拦截生效之后,模型会稳定地表现出不同的认知姿态。产品里这套姿态叫星域,见下方 [星域](#星域)。
136
131
 
137
132
  ### 工程质量
138
133
 
139
- CLI 源码 1,078 文件 / 257,623 行,测试 1,361 文件 / **16,471 用例**(node:test,测试 : 源码 ≈ 0.99:1),`tsc` strict + `noUncheckedIndexedAccess`,事故修复必带回归测试。完整口径与复现命令见 [工程质量指标](docs/engineering-metrics.md)。
134
+ 截至 **2026-09-30** 的量级快照(行数每天都在动,差几百行正常):
135
+
136
+ | 部分 | 规模 |
137
+ |------|------|
138
+ | `src/` 源码 | 约 1,256 文件 / 30 万行(最大的 `agent/` 有 483 个文件) |
139
+ | `src/` 测试 | 约 1,592 文件 / 31 万行(node:test,与源码约 1:1) |
140
+ | `desktop/src` | 约 450 文件 / 9.6 万行(React),另有约 1.1 万行 Rust |
141
+ | `vscode-extension/src` | 17 文件 / 约 2,700 行 |
142
+ | 仓库 | 2026-05-15 创建,至今约 4 个半月,共 8,008 个提交,近 30 天 1,769 个 |
143
+
144
+ `tsc` strict + `noUncheckedIndexedAccess`,事故修复必带回归测试。完整口径、里程碑与复现命令见 [工程质量指标](docs/engineering-metrics.md)。
145
+
146
+ ## 星域
147
+
148
+ 同一个模型,走进不同的星域,会亮起不同的工作倾向。星域不往模型里加新能力。它只是把本来就有的一面放大,而且一次只能占住这一面里的一部分:走进天权,会更想先称一称;走进破军,会更想先去撞一下未知。人还是那个人,模型还是那个模型。
149
+
150
+ 新会话默认是启明。想换一颗,用 `/domain`。
151
+
152
+ - **启明**:先照路,不替人走。迷雾里先探一下,把下一步照清楚。
153
+ - **长庚**:不急着收。最后要自己看见,并把路留给明天的人。
154
+ - **天枢**:先看见整片地图,再把对方的规划走成验证过的交付。
155
+ - **天权**:两边都放上秤。收益是什么,代价是什么,看见了就说。
156
+ - **天机**:问一句还没有人问的话。如果这个前提并不成立呢。
157
+ - **天璇**:换一个完全不同的角度看。看完就去证它是不是真的。
158
+ - **天梁**:接过托付就走完。做了什么、留下什么、偏了哪里,都要有回音。
159
+ - **华盖**:长路上不在「看起来完成」的地方停,把能接着做的结构留下。
160
+ - **破军**:先去撞未知。失败把地图画小一圈,留下的是路,不是废墟。
161
+ - **天府**:先听这段代码为什么是现在这样。改动让它更稳,不让它更脆。
162
+ - **七杀**:问它凭什么还占着这个位置。只指出来,不亲手砍。
163
+ - **开阳**:先问真实的数是什么,凭什么相信。对上了再动手。
164
+ - **瑶光**:绿灯不算数。原来的问题还能再复现出来,才算修好了。
165
+ - **文曲**:去掉多余的,让意图自己显出来。好看要在屏幕上看见。
166
+ - **辅**:不发自己的光。把已经发生过的经验收成能看清的方法。
167
+ - **太一**:先停一下。这一手收束好了,再起下一手。
168
+
169
+ 各星更完整的信念见 [星域碑文](docs/stars/genesis-stele.md)。
140
170
 
141
171
  ## ✨ 核心特性
142
172
 
@@ -152,21 +182,62 @@ CLI 源码 1,078 文件 / 257,623 行,测试 1,361 文件 / **16,471 用例**
152
182
  - **MCP 与 Skills** —— 外部工具服务器接入 + 可复用工作流剧本,渐进披露。[细节](docs/user-guide.md#mcpmodel-context-protocol)
153
183
  - **T9 自研 TUI** —— 纯 ANSI 零依赖:GlanceBar 状态栏、流式中打断、命令面板、Cockpit 驾驶舱、内联图片。[细节](docs/user-guide.md#终端-uitui)
154
184
  - **桌面端增强** —— 集成终端、主题工作室、语音输入(本地 whisper)、手机遥控审批、多会话并发。[桌面端指南](docs/desktop-guide.md)
185
+ - **WSL 连接式运行时**(Windows)—— 一键连上 WSL 内的运行时,会话、文件读写与命令执行都在 Linux 侧进行;断开自动清理,两侧版本独立升级互不影响。[细节](docs/desktop-guide.md#wsl-连接式运行时windows)
155
186
  - **Lean 资源档** —— 低内存/低磁盘场景的精简工具集与会话池收紧,可按星域覆盖。[细节](docs/user-guide.md#lean-资源档低内存--低磁盘)
156
187
 
157
188
  ## 🚀 快速开始
158
189
 
159
- 要求 **Node.js ≥ 24**。三种方式任选其一:
190
+ 两条路。桌面端下载安装包,打开就能用,不需要先装 Node。终端 CLI 要求 **Node.js ≥ 24**。
191
+
192
+ ### 桌面端
193
+
194
+ 安装包在 [GitHub Releases](https://github.com/huiliyi37/Tianshu-harness/releases/latest)。macOS、Windows、Linux 用的是同一个 agent 内核。
195
+
196
+ **macOS**(11 及以上,Apple Silicon 与 Intel 各一包)
197
+
198
+ 下载 `.dmg`,打开后把 `Tianshu` 拖进「应用程序」。
199
+
200
+ 首次打开如果系统说应用已损坏,包本身没坏。当前 macOS 包是 ad-hoc 签名,还没有 Apple 公证,Gatekeeper 会拦截浏览器下载的应用。拖进「应用程序」后,在终端执行一次:
160
201
 
161
202
  ```bash
162
- # 方式一:一键安装脚本(macOS / Linux,Windows 用 PowerShell 版本)
203
+ xattr -cr /Applications/Tianshu.app
204
+ ```
205
+
206
+ 之后正常双击打开。应用内自动更新不受这条限制。
207
+
208
+ **Windows**(Windows 10 1809 及以上,建议 22H2;或 Windows 11)
209
+
210
+ 下载 `.exe` 安装向导,按提示安装。界面依赖 WebView2 Runtime(建议 120 及以上)。3.5.3 起安装器自带离线安装包,安装时不需要再联网下载运行时。
211
+
212
+ 窗口完全打不开时,用开始菜单里的「修复 WebView2」,或从同一 Release 的 `windows-repair` 目录双击 `repair-webview2.cmd`。也可以手动安装 [WebView2 离线安装包](https://go.microsoft.com/fwlink/p/?LinkId=2124703) 后重启。
213
+
214
+ **Linux**(x86_64 与 aarch64,3.26.0 起双架构)
215
+
216
+ 下载 AppImage,免安装。按机器架构选包:
217
+
218
+ - `Tianshu_*_amd64.AppImage`:x86_64 台式机和笔记本
219
+ - `Tianshu_*_aarch64.AppImage`:ARM64(树莓派 64 位、ARM Linux 笔记本)
220
+
221
+ ```bash
222
+ chmod +x Tianshu_*.AppImage
223
+ ./Tianshu_*.AppImage
224
+ ```
225
+
226
+ 需要 glibc 2.35 及以上(Ubuntu 22.04+、Debian 12+ 等),以及系统图形库 `libwebkit2gtk-4.1` 和 `libgtk-3`。多数桌面发行版已经带这套库。精简系统缺库时,按发行版安装 webkit2gtk 4.1,再用 `ldd Tianshu_*.AppImage` 看还缺什么。推荐 X11 会话(Wayland 尚未验证)。
227
+
228
+ 各平台的完整边界、语音输入和自动更新见 [安装与平台说明](docs/guides/installation.md)。
229
+
230
+ ### 终端(CLI)
231
+
232
+ ```bash
233
+ # macOS / Linux
163
234
  bash <(curl -fsSL https://raw.githubusercontent.com/huiliyi37/Tianshu-harness/main/scripts/install-tui.sh)
164
235
 
165
- # 方式二:npm
166
- npm install -g tianshu-harness
236
+ # Windows(PowerShell)
237
+ powershell -ExecutionPolicy Bypass -Command "irm https://raw.githubusercontent.com/huiliyi37/Tianshu-harness/main/scripts/install-tui.ps1 | iex"
167
238
 
168
- # 方式三:桌面端——从 GitHub Releases 下载安装包,开箱即用
169
- # https://github.com/huiliyi37/Tianshu-harness/releases/latest
239
+ # 或 npm
240
+ npm install -g tianshu-harness
170
241
  ```
171
242
 
172
243
  > **从旧包 `tianshu-tui` 迁移**:旧包占着 `rivet` 命令链接,直接装新包会报 `EEXIST`——先卸再装:`npm uninstall -g tianshu-tui && npm install -g tianshu-harness`(一键安装脚本已内置该迁移,自动处理)。
@@ -193,7 +264,7 @@ tianshu # 看到 〉 提示符即就绪
193
264
 
194
265
  接下来它会自己 grep、读文件、改代码、跑测试——每一步都有对应的工具调用,不是"说完就结束"。默认权限档是**自动**:低风险动作直接执行,高风险动作会停下来问你(档位与会话内切换见下方 [权限模式](#权限模式))。
195
266
 
196
- ### 做完之后看两处
267
+ ### 做完之后看三处
197
268
 
198
269
  **① 交付报告** —— 收尾时天枢会调用 `deliver_task`,输出一块交付报告:交付门状态(GREEN / YELLOW / RED)、本次改动的文件、跑过的验证、逐条完成度审计。「完成」必须有证据;没有证据的收尾会被门禁拦下。
199
270
 
@@ -208,6 +279,15 @@ tianshu # 看到 〉 提示符即就绪
208
279
 
209
280
  不带参数是总览,`/cockpit off` 关闭。
210
281
 
282
+ **③ CVM 拦截台账** —— 运行时的每次拦截都逐条落在会话的 `sensorium.jsonl`。落点用 `tianshu logs` 查(会列出数据根与各日志路径):
283
+
284
+ ```bash
285
+ # 按分类复算本会话的拦截次数
286
+ jq -r 'select(.kind=="cvm-vector-decision") | .classification' sensorium.jsonl | sort | uniq -c
287
+ ```
288
+
289
+ 台账默认只写轻量行(`vitals-lite` / `cognitive-frame-lite`);要看全量拦截记录,启动前设 `RIVET_DEBUG_TELEMETRY=1`。分类枚举与复算口径见[指标观测 harness](docs/reference/observability-harness.md)。
290
+
211
291
  ### 无界面模式(脚本 / CI 集成)
212
292
 
213
293
  ```bash
@@ -242,6 +322,7 @@ tianshu --goal "修复所有类型错误" --budget 50 # 无头目标自主模
242
322
  | Grok (xAI) | API key | grok-4.6 (500K ctx, 视觉, 推理档 low/medium/high/xhigh) |
243
323
  | MiniMax | API key | MiniMax-M3, MiniMax-M2.7 |
244
324
  | MiMo | API key | mimo-v2.5-pro |
325
+ | Gemini (Google) | API key(原生协议直连) | gemini-3.8-flash (1M ctx), gemini-3.5-flash, gemini-3.1-pro-preview |
245
326
 
246
327
  另支持任意 OpenAI 兼容自定义端点(Ollama / vLLM 等)。会话内 `/model` 随时切换;识图桥、生图端点、子代理分模型路由等见 [Provider 配置手册](docs/user-guide-provider-config.md) 与 [识图能力手册](docs/user-guide-vision.md)。
247
328
 
@@ -279,7 +360,7 @@ Node.js 24 · TypeScript strict(`noUncheckedIndexedAccess`)· T9 ANSI 渲染
279
360
 
280
361
  ```bash
281
362
  npm run typecheck # 类型检查
282
- npm test # 所有测试(16,000+ 用例)
363
+ npm test # 所有测试(19,000+ 用例)
283
364
  npm run build # tsup 打包 + 原生/wasm 载荷落位
284
365
  node dist/cli/entry.js
285
366
  ```
@@ -306,9 +387,9 @@ node dist/cli/entry.js
306
387
  - **Discord 交流群** → [加入「天枢 tianshu-harness 官方交流群」](https://discord.gg/XjWTATCHB)(邀请链接,不受 7 天限制)
307
388
  - **Bug 报告 / 功能请求** → [GitHub Issues](https://github.com/huiliyi37/Tianshu-harness/issues)(附 `tianshu logs --json` 输出可加速定位)
308
389
  - **贡献代码** → [CONTRIBUTING.md](CONTRIBUTING.md) · **求助指南** → [SUPPORT.md](SUPPORT.md)
309
- - **微信交流群** → 「天枢 harness 交流群」,扫码加入(二维码 7 天有效,过期请在 Discussions 留言补码):
390
+ - **微信交流群** → 「天枢 harness 交流群5群」,扫码加入(二维码 7 天有效,过期请在 Discussions 留言补码):
310
391
 
311
- <img src="docs/brand/assets/wechat-group-qr.png" width="280" alt="天枢 harness 交流群微信群二维码">
392
+ <img src="docs/brand/assets/wechat-group-qr.png" width="280" alt="天枢 harness 交流群5群微信群二维码">
312
393
 
313
394
  ## 🌐 官网开发
314
395
 
@@ -8,6 +8,7 @@ import {
8
8
  accountStore,
9
9
  cachedAccountIdentity,
10
10
  cachedAccountProfile,
11
+ cancelDeviceCode,
11
12
  checkDeviceOnce,
12
13
  deviceAuthorizeUrl,
13
14
  fetchAccountAvatar,
@@ -22,14 +23,16 @@ import {
22
23
  parseDevicePoll,
23
24
  parseStellarIdentity,
24
25
  pollForAccountToken,
26
+ refreshAccountToken,
25
27
  requestDeviceCode,
28
+ revokeAccountSession,
26
29
  saveAccountIdentity,
27
30
  saveAccountProfile,
28
31
  saveAccountToken
29
- } from "./chunk-MPZZGW7G.js";
30
- import "./chunk-2VYRLULP.js";
31
- import "./chunk-P5KJURUR.js";
32
- import "./chunk-5GGOGLSN.js";
32
+ } from "./chunk-JIRTLMSM.js";
33
+ import "./chunk-37WHEV35.js";
34
+ import "./chunk-6RFGPSBE.js";
35
+ import "./chunk-4I2HDYJG.js";
33
36
  export {
34
37
  ACCOUNT_IDENTITY_TTL_MS,
35
38
  accountApiBase,
@@ -38,6 +41,7 @@ export {
38
41
  accountStore,
39
42
  cachedAccountIdentity,
40
43
  cachedAccountProfile,
44
+ cancelDeviceCode,
41
45
  checkDeviceOnce,
42
46
  deviceAuthorizeUrl,
43
47
  fetchAccountAvatar,
@@ -52,7 +56,9 @@ export {
52
56
  parseDevicePoll,
53
57
  parseStellarIdentity,
54
58
  pollForAccountToken,
59
+ refreshAccountToken,
55
60
  requestDeviceCode,
61
+ revokeAccountSession,
56
62
  saveAccountIdentity,
57
63
  saveAccountProfile,
58
64
  saveAccountToken
@@ -1,8 +1,11 @@
1
1
  #!/usr/bin/env -S node --expose-gc --max-old-space-size=4096
2
2
  import { createRequire as __rivetCreateRequire } from 'node:module'; const require = __rivetCreateRequire(import.meta.url);
3
+ import {
4
+ accountDeviceFingerprint
5
+ } from "./chunk-CLMR65F6.js";
3
6
  import {
4
7
  init_esm_shims
5
- } from "./chunk-5GGOGLSN.js";
8
+ } from "./chunk-4I2HDYJG.js";
6
9
 
7
10
  // src/tui/account-login.ts
8
11
  init_esm_shims();
@@ -14,13 +17,13 @@ async function handleAccountLogin(app) {
14
17
  accountStore,
15
18
  saveAccountToken,
16
19
  isTerminalPollStatus
17
- } = await import("./account-3FMZDNGA.js");
18
- const { openInBrowser } = await import("./login-flow-TESFLU3H.js");
19
- const { rivetHome } = await import("./paths-PZCXDIBR.js");
20
+ } = await import("./account-4M3HLPMS.js");
21
+ const { openInBrowser } = await import("./login-flow-Y3GUFPW7.js");
22
+ const { rivetHome } = await import("./paths-NYQNYI5C.js");
20
23
  app.commitStatic("\u6B63\u5728\u5411\u5929\u67A2\u7533\u8BF7\u8BBE\u5907\u6388\u6743\u2026");
21
24
  let created;
22
25
  try {
23
- created = await requestDeviceCode({ deviceName: hostname() });
26
+ created = await requestDeviceCode({ deviceName: hostname(), deviceFingerprint: accountDeviceFingerprint(rivetHome()) });
24
27
  } catch (e) {
25
28
  app.commitStatic(`\u26A0\uFE0F \u65E0\u6CD5\u8FDE\u63A5\u5929\u67A2\u8D26\u53F7\u670D\u52A1\uFF1A${e.message}`);
26
29
  return true;
@@ -39,7 +42,7 @@ ${created.verifyUrl}
39
42
  });
40
43
  if (result.status === "approved" && result.accessToken) {
41
44
  const token = saveAccountToken(accountStore(rivetHome()), result);
42
- const { primeStellarIdentity } = await import("./account-status-DK2PETHW.js");
45
+ const { primeStellarIdentity } = await import("./account-status-U2AY7KW5.js");
43
46
  const identityLine = await primeStellarIdentity(token.accessToken);
44
47
  app.commitStatic("\u2705 \u5DF2\u767B\u5F55\u5929\u67A2\u8D26\u53F7\u2014\u2014\u684C\u9762\u7AEF\u4E0E\u7F51\u9875\u7AEF\u73B0\u5728\u770B\u5230\u540C\u4E00\u4EFD\u8BBE\u5907\u4E0E\u8BA2\u9605\u3002");
45
48
  if (identityLine) app.commitStatic(`\u661F\u7C4D\uFF1A${identityLine}`);
@@ -51,12 +54,18 @@ ${created.verifyUrl}
51
54
  return true;
52
55
  }
53
56
  async function handleAccountLogout(app) {
54
- const { accountStore } = await import("./account-3FMZDNGA.js");
55
- const { rivetHome } = await import("./paths-PZCXDIBR.js");
57
+ const { accountStore, revokeAccountSession } = await import("./account-4M3HLPMS.js");
58
+ const { rivetHome } = await import("./paths-NYQNYI5C.js");
56
59
  const store = accountStore(rivetHome());
57
- const had = store.load() !== null;
60
+ const credential = store.load()?.accessToken;
58
61
  store.clear();
59
- app.commitStatic(had ? "\u2705 \u5DF2\u767B\u51FA\u5929\u67A2\u8D26\u53F7\u3002" : "\u5F53\u524D\u672A\u767B\u5F55\u5929\u67A2\u8D26\u53F7\u3002");
62
+ let revoked = !credential;
63
+ try {
64
+ if (credential) revoked = await revokeAccountSession(credential);
65
+ } catch {
66
+ }
67
+ app.commitStatic(credential ? "\u2705 \u5DF2\u767B\u51FA\u5929\u67A2\u8D26\u53F7\u3002\u91CD\u65B0\u8FDE\u63A5\u8BF7\u6267\u884C /login account\uFF1B\u8BBE\u5907\u7ED1\u5B9A\u4F1A\u4FDD\u7559\u3002" : "\u5F53\u524D\u672A\u767B\u5F55\u5929\u67A2\u8D26\u53F7\u3002");
68
+ if (!revoked) app.commitStatic("\u26A0\uFE0F \u8FDC\u7A0B\u4F1A\u8BDD\u6CE8\u9500\u672A\u5B8C\u6210\uFF0C\u53EF\u5230\u5B98\u7F51\u8D26\u53F7\u9875\u5C06\u65E7\u4F1A\u8BDD\u4E0B\u7EBF\u3002");
60
69
  return true;
61
70
  }
62
71
  export {
@@ -5,16 +5,16 @@ import {
5
5
  commitWelcomeStellarIdentityLine,
6
6
  formatStellarIdentityLine,
7
7
  primeStellarIdentity
8
- } from "./chunk-REBDJ2DK.js";
9
- import "./chunk-MPZZGW7G.js";
10
- import "./chunk-AE4JGSIT.js";
11
- import "./chunk-ADIVZ2D5.js";
12
- import "./chunk-2VYRLULP.js";
13
- import "./chunk-G4FU2DI5.js";
14
- import "./chunk-P5KJURUR.js";
15
- import "./chunk-TI5PMDHA.js";
16
- import "./chunk-JXVN7D4K.js";
17
- import "./chunk-5GGOGLSN.js";
8
+ } from "./chunk-EA7MH2AU.js";
9
+ import "./chunk-JIRTLMSM.js";
10
+ import "./chunk-QNF6KSRC.js";
11
+ import "./chunk-37WHEV35.js";
12
+ import "./chunk-MUIODEN6.js";
13
+ import "./chunk-IIYKBQIH.js";
14
+ import "./chunk-6RFGPSBE.js";
15
+ import "./chunk-MCG3OM3I.js";
16
+ import "./chunk-MSVG3BXX.js";
17
+ import "./chunk-4I2HDYJG.js";
18
18
  export {
19
19
  accountIdentityLines,
20
20
  commitWelcomeStellarIdentityLine,