tianshu-harness 3.23.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 (255) hide show
  1. package/LICENSE +189 -0
  2. package/README.en.md +1066 -0
  3. package/README.ja.md +1214 -0
  4. package/README.ko.md +1216 -0
  5. package/README.md +309 -0
  6. package/completions/rivet.bash +118 -0
  7. package/completions/rivet.fish +110 -0
  8. package/completions/rivet.ps1 +230 -0
  9. package/completions/rivet.zsh +187 -0
  10. package/dist/account-OAEKORZE.js +47 -0
  11. package/dist/account-login-V6FOLHJR.js +65 -0
  12. package/dist/account-status-KHNPPAFL.js +23 -0
  13. package/dist/agent/worker-process/child.js +407 -0
  14. package/dist/browser-cli-FLNY5ZHI.js +19 -0
  15. package/dist/browser-readiness-LWVGSBD5.js +12 -0
  16. package/dist/build-backends-5KXKR2S4.js +13 -0
  17. package/dist/build-options-66Y4ZE7C.js +9 -0
  18. package/dist/bundled-skills/brainstorming/SKILL.md +139 -0
  19. package/dist/bundled-skills/visual-acceptance/SKILL.md +64 -0
  20. package/dist/chain-7MAMFXZ3.js +10 -0
  21. package/dist/checkpoint-MND4DUIX.js +33 -0
  22. package/dist/chunk-2E6CK2RC.js +392 -0
  23. package/dist/chunk-2EBWGAXD.js +51 -0
  24. package/dist/chunk-2HDP7RMR.js +119 -0
  25. package/dist/chunk-2HKD2UFM.js +1000 -0
  26. package/dist/chunk-2VYRLULP.js +51 -0
  27. package/dist/chunk-2XN7PM4N.js +125 -0
  28. package/dist/chunk-35H7GVNR.js +66 -0
  29. package/dist/chunk-3C3R7JXY.js +77 -0
  30. package/dist/chunk-3VGD2FXB.js +118 -0
  31. package/dist/chunk-424AP7FM.js +534 -0
  32. package/dist/chunk-4J5TZGOE.js +3707 -0
  33. package/dist/chunk-4QJ3Y5JM.js +898 -0
  34. package/dist/chunk-4U2ET7ZY.js +1326 -0
  35. package/dist/chunk-4XPFLICE.js +876 -0
  36. package/dist/chunk-5B2OCU5P.js +31707 -0
  37. package/dist/chunk-5GGOGLSN.js +73 -0
  38. package/dist/chunk-5JRZPLI6.js +251 -0
  39. package/dist/chunk-5TQ3JYBU.js +397 -0
  40. package/dist/chunk-66JPZSGX.js +55 -0
  41. package/dist/chunk-6HSVXHCZ.js +764 -0
  42. package/dist/chunk-6S5FPUS7.js +21 -0
  43. package/dist/chunk-722LQO64.js +131 -0
  44. package/dist/chunk-73NJ7IT7.js +354 -0
  45. package/dist/chunk-7FW3I7WC.js +95 -0
  46. package/dist/chunk-7KUCBNLB.js +173 -0
  47. package/dist/chunk-7RDOV3DF.js +201 -0
  48. package/dist/chunk-A5MNH4ER.js +79 -0
  49. package/dist/chunk-ADIVZ2D5.js +15 -0
  50. package/dist/chunk-AE3P3F6W.js +366 -0
  51. package/dist/chunk-AERM3VGP.js +280 -0
  52. package/dist/chunk-AEWHC4WM.js +246 -0
  53. package/dist/chunk-AOVQ7VIF.js +169 -0
  54. package/dist/chunk-AOYHP3WI.js +12411 -0
  55. package/dist/chunk-B3YEBABJ.js +7160 -0
  56. package/dist/chunk-BCQXEZPJ.js +154 -0
  57. package/dist/chunk-BKTQAYO2.js +418 -0
  58. package/dist/chunk-BSECIPAQ.js +80 -0
  59. package/dist/chunk-BUIMGNDD.js +52 -0
  60. package/dist/chunk-BXHV3GSB.js +10320 -0
  61. package/dist/chunk-C6ZVZCPP.js +139 -0
  62. package/dist/chunk-CEZNQVWM.js +82 -0
  63. package/dist/chunk-CGFZGR7G.js +1492 -0
  64. package/dist/chunk-CGOADM2X.js +337 -0
  65. package/dist/chunk-CI4R6P2B.js +24 -0
  66. package/dist/chunk-D2TCGRSX.js +73 -0
  67. package/dist/chunk-D4PTYFOG.js +154 -0
  68. package/dist/chunk-D54ZWG4T.js +717 -0
  69. package/dist/chunk-DEBI37QB.js +145 -0
  70. package/dist/chunk-DWROHPXP.js +1051 -0
  71. package/dist/chunk-DZ6UOJ5D.js +92 -0
  72. package/dist/chunk-EBJTVRQN.js +81 -0
  73. package/dist/chunk-EGEI2RQA.js +1167 -0
  74. package/dist/chunk-EHHUASO5.js +1305 -0
  75. package/dist/chunk-EPKTIOED.js +41 -0
  76. package/dist/chunk-ER5JW2QZ.js +5681 -0
  77. package/dist/chunk-ETHFACAB.js +315 -0
  78. package/dist/chunk-EXUE5W2F.js +112 -0
  79. package/dist/chunk-EXXICUIW.js +73 -0
  80. package/dist/chunk-FFQSZJOO.js +169 -0
  81. package/dist/chunk-FHFKPGDO.js +85 -0
  82. package/dist/chunk-FW3QKMFX.js +158 -0
  83. package/dist/chunk-GD4ZNZ7W.js +30 -0
  84. package/dist/chunk-GHVMWF2I.js +581 -0
  85. package/dist/chunk-GMKAXSYQ.js +297 -0
  86. package/dist/chunk-HBVF6BWO.js +325 -0
  87. package/dist/chunk-HV4YGVMS.js +379 -0
  88. package/dist/chunk-ILBCKAV6.js +89 -0
  89. package/dist/chunk-J4U4AW46.js +440 -0
  90. package/dist/chunk-J6ESSM47.js +1791 -0
  91. package/dist/chunk-JBZHIC6T.js +2309 -0
  92. package/dist/chunk-JCFWOULR.js +245 -0
  93. package/dist/chunk-JRF5L6OD.js +131 -0
  94. package/dist/chunk-JSS75KCG.js +2014 -0
  95. package/dist/chunk-JSXWIWWJ.js +225 -0
  96. package/dist/chunk-JYV7I2QH.js +98 -0
  97. package/dist/chunk-KIOXTQQL.js +1596 -0
  98. package/dist/chunk-KWVTXT5B.js +89 -0
  99. package/dist/chunk-KX22RD6R.js +33 -0
  100. package/dist/chunk-LA6IPTGH.js +709 -0
  101. package/dist/chunk-LH5VCGLB.js +1796 -0
  102. package/dist/chunk-LQQ6XJ2Y.js +269 -0
  103. package/dist/chunk-MJQ55WZZ.js +65 -0
  104. package/dist/chunk-ML3UKMH3.js +40 -0
  105. package/dist/chunk-MOZPLHSU.js +5526 -0
  106. package/dist/chunk-NGEWJ4DF.js +89 -0
  107. package/dist/chunk-NH6VIOAR.js +211 -0
  108. package/dist/chunk-O5VZQKCB.js +26106 -0
  109. package/dist/chunk-OHSV42QB.js +748 -0
  110. package/dist/chunk-OO3TAHO5.js +4070 -0
  111. package/dist/chunk-OTNHSAGN.js +38282 -0
  112. package/dist/chunk-OUWAC7AQ.js +442 -0
  113. package/dist/chunk-OXMIV4WE.js +270 -0
  114. package/dist/chunk-P5KJURUR.js +229 -0
  115. package/dist/chunk-P6GJOVO6.js +307 -0
  116. package/dist/chunk-QARAGUXX.js +23 -0
  117. package/dist/chunk-R43HJCDX.js +2711 -0
  118. package/dist/chunk-RAXBAWRN.js +210 -0
  119. package/dist/chunk-RK3JHWPT.js +39 -0
  120. package/dist/chunk-RWA23GMM.js +24 -0
  121. package/dist/chunk-S4K4L6IM.js +179 -0
  122. package/dist/chunk-SAXK6LVF.js +124 -0
  123. package/dist/chunk-SEPGEJNK.js +1607 -0
  124. package/dist/chunk-SUJERP5I.js +285 -0
  125. package/dist/chunk-T3ED6BY2.js +913 -0
  126. package/dist/chunk-THKDVSEC.js +90 -0
  127. package/dist/chunk-TI4GSEL5.js +52 -0
  128. package/dist/chunk-TPI73L57.js +164 -0
  129. package/dist/chunk-TVHW77C7.js +338 -0
  130. package/dist/chunk-TWNHOSDT.js +1073 -0
  131. package/dist/chunk-UFMN76QD.js +347 -0
  132. package/dist/chunk-UHGLFRZE.js +205 -0
  133. package/dist/chunk-UTZYPKBF.js +15231 -0
  134. package/dist/chunk-UXNLELW6.js +25 -0
  135. package/dist/chunk-UXXS53EA.js +166 -0
  136. package/dist/chunk-V5DHFGI7.js +171 -0
  137. package/dist/chunk-V5YIPMHV.js +2353 -0
  138. package/dist/chunk-WMUWEO2C.js +754 -0
  139. package/dist/chunk-WOE3D7JM.js +945 -0
  140. package/dist/chunk-X2IK5LVR.js +2592 -0
  141. package/dist/chunk-XU2YXCDL.js +459 -0
  142. package/dist/chunk-YJG5HIX5.js +203 -0
  143. package/dist/chunk-Z3QE7TZM.js +72 -0
  144. package/dist/chunk-Z5Z3JHJY.js +64 -0
  145. package/dist/chunk-ZDIFBJFT.js +168 -0
  146. package/dist/chunk-ZGGCEXDC.js +176 -0
  147. package/dist/chunk-ZMZCZNKU.js +263 -0
  148. package/dist/chunk-ZNC5T65N.js +17 -0
  149. package/dist/chunk-ZO3I3A7O.js +308 -0
  150. package/dist/chunk-ZQKXBUB7.js +217 -0
  151. package/dist/chunk-ZTRINFM2.js +78 -0
  152. package/dist/chunk-ZU7JZCVP.js +193 -0
  153. package/dist/chunk-ZZAWNALS.js +350 -0
  154. package/dist/cli/entry.js +54 -0
  155. package/dist/connector-L5QQTR6Y.js +26 -0
  156. package/dist/context-62DC6EC3.js +31 -0
  157. package/dist/council-convene-NJWPNBDU.js +46 -0
  158. package/dist/create-agent-config-ODSQWNVC.js +55 -0
  159. package/dist/default-registry-2PU3BTAU.js +68 -0
  160. package/dist/deliver-task-KONV4C4M.js +57 -0
  161. package/dist/delivery-gate-v2-F2YVMVGK.js +27 -0
  162. package/dist/domain-knowledge-store-DDZ3F4J7.js +11 -0
  163. package/dist/fetch-core-ZPPYDSZH.js +14 -0
  164. package/dist/galaxy-K72BBDQN.js +91 -0
  165. package/dist/goal-criteria-SCALAU2D.js +141 -0
  166. package/dist/goal-persist-XWY2GDQX.js +19 -0
  167. package/dist/goal-tracker-FXMJ2GVK.js +11 -0
  168. package/dist/headless-LSB6I7PT.js +162 -0
  169. package/dist/headless-coordinator-VDPDMVUT.js +90 -0
  170. package/dist/inject-U55SMB6A.js +39 -0
  171. package/dist/login-flow-CD4ZGXOC.js +59 -0
  172. package/dist/logs-cli-SQVYFMMN.js +283 -0
  173. package/dist/loop-ULZYBDA3.js +76 -0
  174. package/dist/main.js +4064 -0
  175. package/dist/manager-ROZBCWPA.js +171 -0
  176. package/dist/manager-Z7XFFUOM.js +10670 -0
  177. package/dist/meridian-indexer-ZIW363L7.js +21 -0
  178. package/dist/native-resolver-PN34UIVV.js +13 -0
  179. package/dist/node_modules/better-sqlite3/lib/database.js +90 -0
  180. package/dist/node_modules/better-sqlite3/lib/index.js +3 -0
  181. package/dist/node_modules/better-sqlite3/lib/methods/aggregate.js +43 -0
  182. package/dist/node_modules/better-sqlite3/lib/methods/backup.js +67 -0
  183. package/dist/node_modules/better-sqlite3/lib/methods/function.js +31 -0
  184. package/dist/node_modules/better-sqlite3/lib/methods/inspect.js +7 -0
  185. package/dist/node_modules/better-sqlite3/lib/methods/pragma.js +12 -0
  186. package/dist/node_modules/better-sqlite3/lib/methods/serialize.js +16 -0
  187. package/dist/node_modules/better-sqlite3/lib/methods/table.js +189 -0
  188. package/dist/node_modules/better-sqlite3/lib/methods/transaction.js +78 -0
  189. package/dist/node_modules/better-sqlite3/lib/methods/wrappers.js +54 -0
  190. package/dist/node_modules/better-sqlite3/lib/sqlite-error.js +20 -0
  191. package/dist/node_modules/better-sqlite3/lib/util.js +12 -0
  192. package/dist/node_modules/better-sqlite3/package.json +59 -0
  193. package/dist/ownership-ledger-E3WIEKPL.js +9 -0
  194. package/dist/package.json +3 -0
  195. package/dist/path-grants-XRRXHXG7.js +40 -0
  196. package/dist/paths-LVV5IMQN.js +49 -0
  197. package/dist/plan-fact-anchors-LMVQZCW5.js +13 -0
  198. package/dist/plan-store-ODLTTPFB.js +17 -0
  199. package/dist/plan-templates-5FPFBOL6.js +109 -0
  200. package/dist/plugin-loader-ZZKX7ZE6.js +22 -0
  201. package/dist/prefix-budget-62OV5HQC.js +13 -0
  202. package/dist/project-trust-5WS5MOMU.js +31 -0
  203. package/dist/provider-cli-ALDQXIT7.js +37 -0
  204. package/dist/providers-XQYTAVPK.js +11 -0
  205. package/dist/proxy-resolver-V2Y6534D.js +15 -0
  206. package/dist/recovery-cli-KPGY6FY3.js +106 -0
  207. package/dist/review-discipline-MNSYCST5.js +55 -0
  208. package/dist/review-router-BVQZW3MX.js +18 -0
  209. package/dist/seed-capsules/seed-capsule-attack-methodology.md +62 -0
  210. package/dist/seed-capsules/seed-capsule-changgeng.md +31 -0
  211. package/dist/seed-capsules/seed-capsule-design-aesthetics.md +38 -0
  212. package/dist/seed-capsules/seed-capsule-diagnostic-ladder.md +54 -0
  213. package/dist/seed-capsules/seed-capsule-fu.md +39 -0
  214. package/dist/seed-capsules/seed-capsule-huagai.md +73 -0
  215. package/dist/seed-capsules/seed-capsule-kaiyang.md +65 -0
  216. package/dist/seed-capsules/seed-capsule-knowledge-work.md +40 -0
  217. package/dist/seed-capsules/seed-capsule-tanlang.md +47 -0
  218. package/dist/seed-capsules/seed-capsule-tianfu.md +23 -0
  219. package/dist/seed-capsules/seed-capsule-tianliang.md +63 -0
  220. package/dist/seed-capsules/seed-capsule-tianquan.md +32 -0
  221. package/dist/seed-capsules/seed-capsule-tianxuan-ccr.md +22 -0
  222. package/dist/seed-capsules/seed-capsule-tianxuan.md +64 -0
  223. package/dist/seed-capsules/seed-capsule-yaoguang.md +87 -0
  224. package/dist/serve-X2R2UTLF.js +170 -0
  225. package/dist/serve-agent-KHSU6RVV.js +965 -0
  226. package/dist/session-persist-HUUC772H.js +37 -0
  227. package/dist/session-registry-6XUD5C4Y.js +15 -0
  228. package/dist/skill-loader-CK3RMO47.js +48 -0
  229. package/dist/skills/cli-harness-sop.md +207 -0
  230. package/dist/spawn-git-4HFU65AH.js +29 -0
  231. package/dist/sse-EYUTBWUK.js +512 -0
  232. package/dist/starflow-NOFBMPFU.js +30 -0
  233. package/dist/streamableHttp-V67CNJMO.js +447 -0
  234. package/dist/task-contract-6XHBNJQK.js +32 -0
  235. package/dist/task-ledger-3K4TJIER.js +9 -0
  236. package/dist/team-orchestrate-S6NHZP7X.js +64 -0
  237. package/dist/title-extract-QX4XGCYN.js +50 -0
  238. package/dist/todo-QDXGRZZP.js +31 -0
  239. package/dist/todo-store-V3TTO5AH.js +12 -0
  240. package/dist/tool-preset-LU5BYEDZ.js +23 -0
  241. package/dist/tool-tiers-GD742YBN.js +23 -0
  242. package/dist/turndown.es-OI55K6C3.js +17373 -0
  243. package/dist/verification-attribution-EKG4CNUV.js +13 -0
  244. package/dist/volatile-git-MBTST7RA.js +15 -0
  245. package/dist/wave-checkpoint-XLIIHXQA.js +30 -0
  246. package/dist/web-cli-DUG4I35O.js +233 -0
  247. package/dist/web-search-3IK542AA.js +34 -0
  248. package/dist/workers/cpu-worker.js +45 -0
  249. package/dist/workflow-runner-HX7UBAYG.js +297 -0
  250. package/dist/worktree-baseline-O5NCU6M2.js +9 -0
  251. package/package.json +122 -0
  252. package/scripts/check-mobile-env.mjs +76 -0
  253. package/scripts/fetch-native-sqlite.js +392 -0
  254. package/scripts/prune-installed-wasms.js +45 -0
  255. package/scripts/tree-sitter-wasm-keep.js +40 -0
@@ -0,0 +1,1492 @@
1
+ #!/usr/bin/env -S node --expose-gc --max-old-space-size=4096
2
+ import { createRequire as __rivetCreateRequire } from 'node:module'; const require = __rivetCreateRequire(import.meta.url);
3
+ import {
4
+ init_esm_shims
5
+ } from "./chunk-5GGOGLSN.js";
6
+
7
+ // src/tui/theme.ts
8
+ init_esm_shims();
9
+
10
+ // node_modules/chalk/source/index.js
11
+ init_esm_shims();
12
+
13
+ // node_modules/chalk/source/vendor/ansi-styles/index.js
14
+ init_esm_shims();
15
+ var ANSI_BACKGROUND_OFFSET = 10;
16
+ var wrapAnsi16 = (offset = 0) => (code) => `\x1B[${code + offset}m`;
17
+ var wrapAnsi256 = (offset = 0) => (code) => `\x1B[${38 + offset};5;${code}m`;
18
+ var wrapAnsi16m = (offset = 0) => (red, green, blue) => `\x1B[${38 + offset};2;${red};${green};${blue}m`;
19
+ var styles = {
20
+ modifier: {
21
+ reset: [0, 0],
22
+ // 21 isn't widely supported and 22 does the same thing
23
+ bold: [1, 22],
24
+ dim: [2, 22],
25
+ italic: [3, 23],
26
+ underline: [4, 24],
27
+ overline: [53, 55],
28
+ inverse: [7, 27],
29
+ hidden: [8, 28],
30
+ strikethrough: [9, 29]
31
+ },
32
+ color: {
33
+ black: [30, 39],
34
+ red: [31, 39],
35
+ green: [32, 39],
36
+ yellow: [33, 39],
37
+ blue: [34, 39],
38
+ magenta: [35, 39],
39
+ cyan: [36, 39],
40
+ white: [37, 39],
41
+ // Bright color
42
+ blackBright: [90, 39],
43
+ gray: [90, 39],
44
+ // Alias of `blackBright`
45
+ grey: [90, 39],
46
+ // Alias of `blackBright`
47
+ redBright: [91, 39],
48
+ greenBright: [92, 39],
49
+ yellowBright: [93, 39],
50
+ blueBright: [94, 39],
51
+ magentaBright: [95, 39],
52
+ cyanBright: [96, 39],
53
+ whiteBright: [97, 39]
54
+ },
55
+ bgColor: {
56
+ bgBlack: [40, 49],
57
+ bgRed: [41, 49],
58
+ bgGreen: [42, 49],
59
+ bgYellow: [43, 49],
60
+ bgBlue: [44, 49],
61
+ bgMagenta: [45, 49],
62
+ bgCyan: [46, 49],
63
+ bgWhite: [47, 49],
64
+ // Bright color
65
+ bgBlackBright: [100, 49],
66
+ bgGray: [100, 49],
67
+ // Alias of `bgBlackBright`
68
+ bgGrey: [100, 49],
69
+ // Alias of `bgBlackBright`
70
+ bgRedBright: [101, 49],
71
+ bgGreenBright: [102, 49],
72
+ bgYellowBright: [103, 49],
73
+ bgBlueBright: [104, 49],
74
+ bgMagentaBright: [105, 49],
75
+ bgCyanBright: [106, 49],
76
+ bgWhiteBright: [107, 49]
77
+ }
78
+ };
79
+ var modifierNames = Object.keys(styles.modifier);
80
+ var foregroundColorNames = Object.keys(styles.color);
81
+ var backgroundColorNames = Object.keys(styles.bgColor);
82
+ var colorNames = [...foregroundColorNames, ...backgroundColorNames];
83
+ function assembleStyles() {
84
+ const codes = /* @__PURE__ */ new Map();
85
+ for (const [groupName, group] of Object.entries(styles)) {
86
+ for (const [styleName, style] of Object.entries(group)) {
87
+ styles[styleName] = {
88
+ open: `\x1B[${style[0]}m`,
89
+ close: `\x1B[${style[1]}m`
90
+ };
91
+ group[styleName] = styles[styleName];
92
+ codes.set(style[0], style[1]);
93
+ }
94
+ Object.defineProperty(styles, groupName, {
95
+ value: group,
96
+ enumerable: false
97
+ });
98
+ }
99
+ Object.defineProperty(styles, "codes", {
100
+ value: codes,
101
+ enumerable: false
102
+ });
103
+ styles.color.close = "\x1B[39m";
104
+ styles.bgColor.close = "\x1B[49m";
105
+ styles.color.ansi = wrapAnsi16();
106
+ styles.color.ansi256 = wrapAnsi256();
107
+ styles.color.ansi16m = wrapAnsi16m();
108
+ styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);
109
+ styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);
110
+ styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
111
+ Object.defineProperties(styles, {
112
+ rgbToAnsi256: {
113
+ value(red, green, blue) {
114
+ if (red === green && green === blue) {
115
+ if (red < 8) {
116
+ return 16;
117
+ }
118
+ if (red > 248) {
119
+ return 231;
120
+ }
121
+ return Math.round((red - 8) / 247 * 24) + 232;
122
+ }
123
+ return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);
124
+ },
125
+ enumerable: false
126
+ },
127
+ hexToRgb: {
128
+ value(hex) {
129
+ const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));
130
+ if (!matches) {
131
+ return [0, 0, 0];
132
+ }
133
+ let [colorString] = matches;
134
+ if (colorString.length === 3) {
135
+ colorString = [...colorString].map((character) => character + character).join("");
136
+ }
137
+ const integer = Number.parseInt(colorString, 16);
138
+ return [
139
+ /* eslint-disable no-bitwise */
140
+ integer >> 16 & 255,
141
+ integer >> 8 & 255,
142
+ integer & 255
143
+ /* eslint-enable no-bitwise */
144
+ ];
145
+ },
146
+ enumerable: false
147
+ },
148
+ hexToAnsi256: {
149
+ value: (hex) => styles.rgbToAnsi256(...styles.hexToRgb(hex)),
150
+ enumerable: false
151
+ },
152
+ ansi256ToAnsi: {
153
+ value(code) {
154
+ if (code < 8) {
155
+ return 30 + code;
156
+ }
157
+ if (code < 16) {
158
+ return 90 + (code - 8);
159
+ }
160
+ let red;
161
+ let green;
162
+ let blue;
163
+ if (code >= 232) {
164
+ red = ((code - 232) * 10 + 8) / 255;
165
+ green = red;
166
+ blue = red;
167
+ } else {
168
+ code -= 16;
169
+ const remainder = code % 36;
170
+ red = Math.floor(code / 36) / 5;
171
+ green = Math.floor(remainder / 6) / 5;
172
+ blue = remainder % 6 / 5;
173
+ }
174
+ const value = Math.max(red, green, blue) * 2;
175
+ if (value === 0) {
176
+ return 30;
177
+ }
178
+ let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
179
+ if (value === 2) {
180
+ result += 60;
181
+ }
182
+ return result;
183
+ },
184
+ enumerable: false
185
+ },
186
+ rgbToAnsi: {
187
+ value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),
188
+ enumerable: false
189
+ },
190
+ hexToAnsi: {
191
+ value: (hex) => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),
192
+ enumerable: false
193
+ }
194
+ });
195
+ return styles;
196
+ }
197
+ var ansiStyles = assembleStyles();
198
+ var ansi_styles_default = ansiStyles;
199
+
200
+ // node_modules/chalk/source/vendor/supports-color/index.js
201
+ init_esm_shims();
202
+ import process2 from "process";
203
+ import os from "os";
204
+ import tty from "tty";
205
+ function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process2.argv) {
206
+ const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
207
+ const position = argv.indexOf(prefix + flag);
208
+ const terminatorPosition = argv.indexOf("--");
209
+ return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
210
+ }
211
+ var { env } = process2;
212
+ var flagForceColor;
213
+ if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
214
+ flagForceColor = 0;
215
+ } else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
216
+ flagForceColor = 1;
217
+ }
218
+ function envForceColor() {
219
+ if ("FORCE_COLOR" in env) {
220
+ if (env.FORCE_COLOR === "true") {
221
+ return 1;
222
+ }
223
+ if (env.FORCE_COLOR === "false") {
224
+ return 0;
225
+ }
226
+ return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
227
+ }
228
+ }
229
+ function translateLevel(level) {
230
+ if (level === 0) {
231
+ return false;
232
+ }
233
+ return {
234
+ level,
235
+ hasBasic: true,
236
+ has256: level >= 2,
237
+ has16m: level >= 3
238
+ };
239
+ }
240
+ function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
241
+ const noFlagForceColor = envForceColor();
242
+ if (noFlagForceColor !== void 0) {
243
+ flagForceColor = noFlagForceColor;
244
+ }
245
+ const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
246
+ if (forceColor === 0) {
247
+ return 0;
248
+ }
249
+ if (sniffFlags) {
250
+ if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
251
+ return 3;
252
+ }
253
+ if (hasFlag("color=256")) {
254
+ return 2;
255
+ }
256
+ }
257
+ if ("TF_BUILD" in env && "AGENT_NAME" in env) {
258
+ return 1;
259
+ }
260
+ if (haveStream && !streamIsTTY && forceColor === void 0) {
261
+ return 0;
262
+ }
263
+ const min = forceColor || 0;
264
+ if (env.TERM === "dumb") {
265
+ return min;
266
+ }
267
+ if (process2.platform === "win32") {
268
+ const osRelease = os.release().split(".");
269
+ if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
270
+ return Number(osRelease[2]) >= 14931 ? 3 : 2;
271
+ }
272
+ return 1;
273
+ }
274
+ if ("CI" in env) {
275
+ if (["GITHUB_ACTIONS", "GITEA_ACTIONS", "CIRCLECI"].some((key) => key in env)) {
276
+ return 3;
277
+ }
278
+ if (["TRAVIS", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
279
+ return 1;
280
+ }
281
+ return min;
282
+ }
283
+ if ("TEAMCITY_VERSION" in env) {
284
+ return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
285
+ }
286
+ if (env.COLORTERM === "truecolor") {
287
+ return 3;
288
+ }
289
+ if (env.TERM === "xterm-kitty") {
290
+ return 3;
291
+ }
292
+ if (env.TERM === "xterm-ghostty") {
293
+ return 3;
294
+ }
295
+ if (env.TERM === "wezterm") {
296
+ return 3;
297
+ }
298
+ if ("TERM_PROGRAM" in env) {
299
+ const version = Number.parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
300
+ switch (env.TERM_PROGRAM) {
301
+ case "iTerm.app": {
302
+ return version >= 3 ? 3 : 2;
303
+ }
304
+ case "Apple_Terminal": {
305
+ return 2;
306
+ }
307
+ }
308
+ }
309
+ if (/-256(color)?$/i.test(env.TERM)) {
310
+ return 2;
311
+ }
312
+ if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
313
+ return 1;
314
+ }
315
+ if ("COLORTERM" in env) {
316
+ return 1;
317
+ }
318
+ return min;
319
+ }
320
+ function createSupportsColor(stream, options = {}) {
321
+ const level = _supportsColor(stream, {
322
+ streamIsTTY: stream && stream.isTTY,
323
+ ...options
324
+ });
325
+ return translateLevel(level);
326
+ }
327
+ var supportsColor = {
328
+ stdout: createSupportsColor({ isTTY: tty.isatty(1) }),
329
+ stderr: createSupportsColor({ isTTY: tty.isatty(2) })
330
+ };
331
+ var supports_color_default = supportsColor;
332
+
333
+ // node_modules/chalk/source/utilities.js
334
+ init_esm_shims();
335
+ function stringReplaceAll(string, substring, replacer) {
336
+ let index = string.indexOf(substring);
337
+ if (index === -1) {
338
+ return string;
339
+ }
340
+ const substringLength = substring.length;
341
+ let endIndex = 0;
342
+ let returnValue = "";
343
+ do {
344
+ returnValue += string.slice(endIndex, index) + substring + replacer;
345
+ endIndex = index + substringLength;
346
+ index = string.indexOf(substring, endIndex);
347
+ } while (index !== -1);
348
+ returnValue += string.slice(endIndex);
349
+ return returnValue;
350
+ }
351
+ function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {
352
+ let endIndex = 0;
353
+ let returnValue = "";
354
+ do {
355
+ const gotCR = string[index - 1] === "\r";
356
+ returnValue += string.slice(endIndex, gotCR ? index - 1 : index) + prefix + (gotCR ? "\r\n" : "\n") + postfix;
357
+ endIndex = index + 1;
358
+ index = string.indexOf("\n", endIndex);
359
+ } while (index !== -1);
360
+ returnValue += string.slice(endIndex);
361
+ return returnValue;
362
+ }
363
+
364
+ // node_modules/chalk/source/index.js
365
+ var { stdout: stdoutColor, stderr: stderrColor } = supports_color_default;
366
+ var GENERATOR = /* @__PURE__ */ Symbol("GENERATOR");
367
+ var STYLER = /* @__PURE__ */ Symbol("STYLER");
368
+ var IS_EMPTY = /* @__PURE__ */ Symbol("IS_EMPTY");
369
+ var levelMapping = [
370
+ "ansi",
371
+ "ansi",
372
+ "ansi256",
373
+ "ansi16m"
374
+ ];
375
+ var styles2 = /* @__PURE__ */ Object.create(null);
376
+ var applyOptions = (object, options = {}) => {
377
+ if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
378
+ throw new Error("The `level` option should be an integer from 0 to 3");
379
+ }
380
+ const colorLevel = stdoutColor ? stdoutColor.level : 0;
381
+ object.level = options.level === void 0 ? colorLevel : options.level;
382
+ };
383
+ var chalkFactory = (options) => {
384
+ const chalk2 = (...strings) => strings.join(" ");
385
+ applyOptions(chalk2, options);
386
+ Object.setPrototypeOf(chalk2, createChalk.prototype);
387
+ return chalk2;
388
+ };
389
+ function createChalk(options) {
390
+ return chalkFactory(options);
391
+ }
392
+ Object.setPrototypeOf(createChalk.prototype, Function.prototype);
393
+ for (const [styleName, style] of Object.entries(ansi_styles_default)) {
394
+ styles2[styleName] = {
395
+ get() {
396
+ const builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);
397
+ Object.defineProperty(this, styleName, { value: builder });
398
+ return builder;
399
+ }
400
+ };
401
+ }
402
+ styles2.visible = {
403
+ get() {
404
+ const builder = createBuilder(this, this[STYLER], true);
405
+ Object.defineProperty(this, "visible", { value: builder });
406
+ return builder;
407
+ }
408
+ };
409
+ var getModelAnsi = (model, level, type, ...arguments_) => {
410
+ if (model === "rgb") {
411
+ if (level === "ansi16m") {
412
+ return ansi_styles_default[type].ansi16m(...arguments_);
413
+ }
414
+ if (level === "ansi256") {
415
+ return ansi_styles_default[type].ansi256(ansi_styles_default.rgbToAnsi256(...arguments_));
416
+ }
417
+ return ansi_styles_default[type].ansi(ansi_styles_default.rgbToAnsi(...arguments_));
418
+ }
419
+ if (model === "hex") {
420
+ return getModelAnsi("rgb", level, type, ...ansi_styles_default.hexToRgb(...arguments_));
421
+ }
422
+ return ansi_styles_default[type][model](...arguments_);
423
+ };
424
+ var usedModels = ["rgb", "hex", "ansi256"];
425
+ for (const model of usedModels) {
426
+ styles2[model] = {
427
+ get() {
428
+ const { level } = this;
429
+ return function(...arguments_) {
430
+ const styler = createStyler(getModelAnsi(model, levelMapping[level], "color", ...arguments_), ansi_styles_default.color.close, this[STYLER]);
431
+ return createBuilder(this, styler, this[IS_EMPTY]);
432
+ };
433
+ }
434
+ };
435
+ const bgModel = "bg" + model[0].toUpperCase() + model.slice(1);
436
+ styles2[bgModel] = {
437
+ get() {
438
+ const { level } = this;
439
+ return function(...arguments_) {
440
+ const styler = createStyler(getModelAnsi(model, levelMapping[level], "bgColor", ...arguments_), ansi_styles_default.bgColor.close, this[STYLER]);
441
+ return createBuilder(this, styler, this[IS_EMPTY]);
442
+ };
443
+ }
444
+ };
445
+ }
446
+ var proto = Object.defineProperties(() => {
447
+ }, {
448
+ ...styles2,
449
+ level: {
450
+ enumerable: true,
451
+ get() {
452
+ return this[GENERATOR].level;
453
+ },
454
+ set(level) {
455
+ this[GENERATOR].level = level;
456
+ }
457
+ }
458
+ });
459
+ var createStyler = (open, close, parent) => {
460
+ let openAll;
461
+ let closeAll;
462
+ if (parent === void 0) {
463
+ openAll = open;
464
+ closeAll = close;
465
+ } else {
466
+ openAll = parent.openAll + open;
467
+ closeAll = close + parent.closeAll;
468
+ }
469
+ return {
470
+ open,
471
+ close,
472
+ openAll,
473
+ closeAll,
474
+ parent
475
+ };
476
+ };
477
+ var createBuilder = (self, _styler, _isEmpty) => {
478
+ const builder = (...arguments_) => applyStyle(builder, arguments_.length === 1 ? "" + arguments_[0] : arguments_.join(" "));
479
+ Object.setPrototypeOf(builder, proto);
480
+ builder[GENERATOR] = self;
481
+ builder[STYLER] = _styler;
482
+ builder[IS_EMPTY] = _isEmpty;
483
+ return builder;
484
+ };
485
+ var applyStyle = (self, string) => {
486
+ if (self.level <= 0 || !string) {
487
+ return self[IS_EMPTY] ? "" : string;
488
+ }
489
+ let styler = self[STYLER];
490
+ if (styler === void 0) {
491
+ return string;
492
+ }
493
+ const { openAll, closeAll } = styler;
494
+ if (string.includes("\x1B")) {
495
+ while (styler !== void 0) {
496
+ string = stringReplaceAll(string, styler.close, styler.open);
497
+ styler = styler.parent;
498
+ }
499
+ }
500
+ const lfIndex = string.indexOf("\n");
501
+ if (lfIndex !== -1) {
502
+ string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
503
+ }
504
+ return openAll + string + closeAll;
505
+ };
506
+ Object.defineProperties(createChalk.prototype, styles2);
507
+ var chalk = createChalk();
508
+ var chalkStderr = createChalk({ level: stderrColor ? stderrColor.level : 0 });
509
+ var source_default = chalk;
510
+
511
+ // src/tui/theme-palettes.ts
512
+ init_esm_shims();
513
+ var PASTEL = {
514
+ background: "dark",
515
+ description: "\u4E8C\u6B21\u5143\u7C89\u5F69\u3002\u8584\u8377 \xD7 \u6A31\u82B1\u7C89\u2014\u2014\u5C0F\u5929\u548C\u4F60\u7684\u7CD6\u679C\u8272\u7EC8\u7AEF\u3002",
516
+ voice: "playful",
517
+ truecolor: {
518
+ primary: "#a8e6cf",
519
+ // mint green — search/grep/glob
520
+ secondary: "#ffa8b5",
521
+ // 樱花粉 — edit/write(原薰衣草紫,去紫)
522
+ success: "#d0f0a8",
523
+ // 粉彩青柠 — 原为 #b5ead7,与 mint 主色同色相 158° 不可分(cr 1.06)
524
+ warning: "#ffe0a3",
525
+ // 粉彩琥珀 — 原为 #ffdac1 蜜桃,与 error 珊瑚粉色相距仅 29°
526
+ error: "#ff6b81",
527
+ // 草莓红 — 原珊瑚粉 #ff9aa2 与樱花粉 secondary 撞粉族,加深拉开
528
+ dim: "#8585a0",
529
+ // soft gray — secondary info
530
+ pulseQuiet: "#4a4a5a",
531
+ pulseActive: "#a8e6cf",
532
+ pulseAlert: "#ff6b81"
533
+ },
534
+ overrides: {
535
+ assistantColor: "#f2e9e0"
536
+ // 暖纸白正文(原随 secondary 变紫,去紫核心)
537
+ },
538
+ fallback: {
539
+ primary: "cyan",
540
+ secondary: "magenta",
541
+ success: "green",
542
+ warning: "yellow",
543
+ error: "red",
544
+ dim: "gray",
545
+ pulseQuiet: "gray",
546
+ pulseActive: "cyan",
547
+ pulseAlert: "red"
548
+ },
549
+ fallbackOverrides: { assistantColor: "white" }
550
+ };
551
+ var CYBERPUNK = {
552
+ background: "dark",
553
+ description: "\u8D5B\u535A\u670B\u514B\xB7\u9713\u8679\u591C\u57CE\u3002\u7535\u9752 \xD7 \u54C1\u7EA2\u7C89 synthwave\u2014\u2014Nova \u7684\u7EC8\u7AEF\u591C\u4E4B\u57CE\u3002",
554
+ voice: "tech",
555
+ truecolor: {
556
+ primary: "#48c6e2",
557
+ // cyan-400 — desaturated cyan to avoid rgb halation
558
+ secondary: "#ff5c8a",
559
+ // 霓虹品红粉 — 工具卡/扫光尾/面板标题等点缀位
560
+ success: "#4ade80",
561
+ // green-400
562
+ warning: "#fbbf24",
563
+ // amber-400
564
+ error: "#e27585",
565
+ // rose-400 — softened rose red
566
+ dim: "#9494b8",
567
+ pulseQuiet: "#2f3048",
568
+ pulseActive: "#48c6e2",
569
+ pulseAlert: "#e27585"
570
+ },
571
+ overrides: {
572
+ assistantColor: "#e8eef6",
573
+ // 冷白正文(原随 secondary 变紫,去紫核心)
574
+ inlineCode: "#7aa2f7"
575
+ // 正文行内代码专用冰蓝——大面积出现,不吃粉红
576
+ },
577
+ fallback: {
578
+ primary: "cyan",
579
+ secondary: "magenta",
580
+ success: "green",
581
+ warning: "yellow",
582
+ error: "red",
583
+ dim: "gray",
584
+ pulseQuiet: "gray",
585
+ pulseActive: "cyan",
586
+ pulseAlert: "red"
587
+ },
588
+ fallbackOverrides: { assistantColor: "white", inlineCode: "blue" }
589
+ };
590
+ var OBSERVATORY = {
591
+ background: "dark",
592
+ description: "\u4E94\u8272\u661F\u8FB0\u3002\u4F20\u7EDF\u4E94\u884C\u914D\u8272\u4F53\u7CFB\uFF0C\u5929\u7391\u661F\u541B\u7384\u7070\u5E95\u8272\u3002",
593
+ truecolor: {
594
+ primary: "#7c78f2",
595
+ // 靛蓝 — 天玑星君主色(原 #4f46e5 暗底仅 3.0:1,提亮至 ≥4.5:1)
596
+ secondary: "#a78bfa",
597
+ // 星云紫
598
+ success: "#34d399",
599
+ // 验证翠
600
+ warning: "#f59e0b",
601
+ // 星金黄
602
+ error: "#f87171",
603
+ // 警报珊
604
+ dim: "#8da0b8",
605
+ // 远星灰(深底 ≥4.5:1 提亮档)
606
+ pulseQuiet: "#334155",
607
+ pulseActive: "#7c78f2",
608
+ // = primary(原 sky #38bdf8 出族;全仓惯例 pulseActive=primary)
609
+ pulseAlert: "#f87171"
610
+ },
611
+ fallback: {
612
+ primary: "blue",
613
+ secondary: "magenta",
614
+ success: "green",
615
+ warning: "yellow",
616
+ error: "red",
617
+ dim: "gray",
618
+ pulseQuiet: "gray",
619
+ pulseActive: "cyan",
620
+ pulseAlert: "red"
621
+ }
622
+ };
623
+ var MIDNIGHT = {
624
+ background: "dark",
625
+ description: "GitHub \u6697\u9ED1\u98CE\u683C\u3002\u6781\u7B80\u4E2D\u6027\u7070\u5EA6\uFF0C\u9AD8\u5EA6\u6E05\u6670\u3002",
626
+ truecolor: {
627
+ primary: "#58a6ff",
628
+ // accent blue
629
+ secondary: "#b0b8c4",
630
+ // medium gray
631
+ success: "#3fb950",
632
+ warning: "#d29922",
633
+ error: "#f85149",
634
+ dim: "#8b949e",
635
+ pulseQuiet: "#3d4450",
636
+ pulseActive: "#58a6ff",
637
+ pulseAlert: "#f85149"
638
+ },
639
+ overrides: { userColor: "#e6edf3", assistantColor: "#e6edf3" },
640
+ fallback: {
641
+ primary: "blue",
642
+ secondary: "white",
643
+ success: "green",
644
+ warning: "yellow",
645
+ error: "red",
646
+ dim: "gray",
647
+ pulseQuiet: "gray",
648
+ pulseActive: "blue",
649
+ pulseAlert: "red"
650
+ },
651
+ fallbackOverrides: { userColor: "white", assistantColor: "white" }
652
+ };
653
+ var STARFIELD = {
654
+ background: "dark",
655
+ description: "\u661F\u7A7A\u661F\u5EA7\u3002Rivet \u539F\u751F\u661F\u56FE\u7F8E\u5B66\uFF0C\u5929\u84DD\u4E3B\u661F\u4E0E\u661F\u4E91\u7D2B\u8F85\u8272\u3002",
656
+ truecolor: {
657
+ primary: "#8ab4ff",
658
+ // hot blue-white star (Vega/Rigel)
659
+ secondary: "#c9a9ff",
660
+ // nebula violet
661
+ success: "#7ee7c7",
662
+ // aurora teal-green
663
+ warning: "#ffd479",
664
+ // stellar gold
665
+ error: "#ff8a9b",
666
+ // nova flare
667
+ dim: "#959dbe",
668
+ // cosmic dust lane(提亮档)
669
+ pulseQuiet: "#2b3052",
670
+ pulseActive: "#8ab4ff",
671
+ pulseAlert: "#ff8a9b"
672
+ },
673
+ overrides: { userColor: "#e8ecf8", assistantColor: "#c9a9ff", muted: "#aab4d4" },
674
+ fallback: {
675
+ primary: "blue",
676
+ secondary: "magenta",
677
+ success: "cyan",
678
+ warning: "yellow",
679
+ error: "red",
680
+ dim: "gray",
681
+ pulseQuiet: "gray",
682
+ pulseActive: "blue",
683
+ pulseAlert: "red"
684
+ },
685
+ fallbackOverrides: { userColor: "white", assistantColor: "magenta" }
686
+ };
687
+ var TIANSHU = {
688
+ background: "dark",
689
+ description: "\u7384\u591C\u58A8\u8272\u300295% \u58A8\u7070\uFF0C\u914D\u4EE5\u661F\u91D1\u4E3B\u8272\u4E0E\u6731\u7802\u7528\u6237\u5370\uFF0C\u6C89\u7A33\u4F4E\u8C03\u3002",
690
+ truecolor: {
691
+ primary: "#dfb282",
692
+ // 星金 accent
693
+ secondary: "#a49ac7",
694
+ // 墨紫灰
695
+ success: "#75a399",
696
+ // 归航青
697
+ warning: "#d1914a",
698
+ // 琥珀橙金 — 原 #c7a767 与 primary 星金 cr 仅 1.18 撞簇;橙化拉开
699
+ error: "#bd5f7a",
700
+ // 茜草玫瑰 — 原朱砂赤 #c1655c 与用户朱砂印 #d86459 同色相 5°
701
+ // 不可分;玫瑰化把唯一的「红」还给用户印(暗底 4.6:1)
702
+ dim: "#8a8fa0",
703
+ // 暗墨(深底 ≥4.5:1 提亮档)
704
+ pulseQuiet: "#3a3d4a",
705
+ pulseActive: "#dfb282",
706
+ pulseAlert: "#d86459",
707
+ // 朱砂印 (柔化提亮朱砂红,降低暗底光晕与眼睛干涩度)
708
+ toolShell: "#a0a3b0",
709
+ toolEdit: "#a49ac7"
710
+ // toolTest/toolDelegate 不覆盖:回退 success/warning 全局惯例——原 toolTest #9c8a63
711
+ // 卡其落在金簇里与 delegate/warning 不可分。
712
+ },
713
+ // userColor = 朱砂印 (the one warm point); assistantColor = 亮中性正文;
714
+ // muted/systemColor = 元信息灰对齐。
715
+ overrides: { userColor: "#d86459", assistantColor: "#d2d5dd", muted: "#adb2bf", systemColor: "#adb2bf" },
716
+ fallback: {
717
+ primary: "yellowBright",
718
+ secondary: "magenta",
719
+ success: "cyan",
720
+ warning: "yellow",
721
+ // error redBright 与 userColor red 分档——同 truecolor 轨朱砂印/茜草玫瑰的分离
722
+ error: "redBright",
723
+ dim: "gray",
724
+ pulseQuiet: "gray",
725
+ pulseActive: "yellowBright",
726
+ pulseAlert: "red"
727
+ },
728
+ fallbackOverrides: { userColor: "red", assistantColor: "white" }
729
+ };
730
+ var ZIWEI = {
731
+ background: "dark",
732
+ description: "\u5E1D\u661F\u7D2B\u5FAE\u3002\u6731\u7802\u7EA2\u6807\u8BB0\u70B9\u7F00\u5E1D\u661F\u7D2B\uFF0C\u5BCC\u542B\u4E2D\u56FD\u661F\u56FE\u53E4\u5178\u7F8E\u5B66\u97F5\u5473\u3002",
733
+ truecolor: {
734
+ primary: "#c9b8ff",
735
+ // 紫微 — 帝星紫
736
+ secondary: "#8ab4ff",
737
+ // 天枢蓝白
738
+ success: "#7ee7c7",
739
+ // 归航青
740
+ warning: "#ffd479",
741
+ // 星金
742
+ error: "#ff8a9b",
743
+ // 荧惑赤
744
+ dim: "#868ba8",
745
+ // 星尘灰(提亮档)
746
+ pulseQuiet: "#3a3d4a",
747
+ pulseActive: "#c9b8ff",
748
+ pulseAlert: "#d4453a",
749
+ // 朱砂印
750
+ toolShell: "#8ab4ff",
751
+ toolEdit: "#c9b8ff",
752
+ toolTest: "#7ee7c7",
753
+ toolDelegate: "#ffd479"
754
+ },
755
+ overrides: { userColor: "#d4453a", assistantColor: "#c9b8ff", muted: "#9aa2b1" },
756
+ fallback: {
757
+ primary: "magenta",
758
+ secondary: "blue",
759
+ success: "cyan",
760
+ warning: "yellow",
761
+ // error redBright 更贴近荧惑赤 #ff8a9b 的亮粉,并与 userColor red(朱砂印)分档
762
+ error: "redBright",
763
+ dim: "gray",
764
+ pulseQuiet: "gray",
765
+ pulseActive: "magenta",
766
+ pulseAlert: "red"
767
+ },
768
+ fallbackOverrides: { userColor: "red", assistantColor: "magenta", muted: "white" }
769
+ };
770
+ var CLAUDE = {
771
+ background: "dark",
772
+ description: "Claude Code \u5B98\u65B9 TUI \u7ECF\u5178\u8C03\u8272\u76D8\u79FB\u690D\u3002\u6A58\u9EC4\u7ECF\u5178\u3002",
773
+ truecolor: {
774
+ primary: "#d77757",
775
+ // brand orange rgb(215,119,87)
776
+ secondary: "#af87ff",
777
+ // autoAccept violet
778
+ success: "#4eba65",
779
+ warning: "#ffc107",
780
+ error: "#ff6b80",
781
+ dim: "#767676",
782
+ // subtle(深底 ≥4.5:1 提亮档)
783
+ pulseQuiet: "#888888",
784
+ // promptBorder
785
+ pulseActive: "#d77757",
786
+ pulseAlert: "#ff6b80"
787
+ },
788
+ // assistant body is neutral gray-white upstream (violet is a badge only)
789
+ overrides: { userColor: "#d77757", assistantColor: "#d9d9d9", muted: "#999999" },
790
+ fallback: {
791
+ primary: "redBright",
792
+ secondary: "magentaBright",
793
+ success: "greenBright",
794
+ warning: "yellowBright",
795
+ error: "redBright",
796
+ dim: "white",
797
+ pulseQuiet: "white",
798
+ pulseActive: "redBright",
799
+ pulseAlert: "redBright"
800
+ },
801
+ fallbackOverrides: { userColor: "redBright", assistantColor: "white" }
802
+ };
803
+ var SLATE = {
804
+ background: "dark",
805
+ description: "\u51B7\u9759\u677F\u5CA9\u7070\u3002\u5355\u4E00\u51B7\u9759 Teal \u4E3B\u8272\uFF0C\u65E0\u5F69\u8272\u7ED3\u6784\uFF0C\u4F4E\u7729\u5149\u957F\u4E45\u4E0D\u7D2F\u3002",
806
+ truecolor: {
807
+ primary: "#56b6c2",
808
+ // teal-cyan — 唯一 accent
809
+ secondary: "#7aa2cf",
810
+ // 钢蓝
811
+ success: "#7fb88a",
812
+ // 鼠尾草绿
813
+ warning: "#d6a35c",
814
+ // 暗琥珀
815
+ error: "#e08891",
816
+ // 柔玫瑰
817
+ dim: "#848d9c",
818
+ // 板岩灰(提亮档)
819
+ pulseQuiet: "#39414f",
820
+ pulseActive: "#56b6c2",
821
+ pulseAlert: "#e08891",
822
+ toolShell: "#7aa2cf",
823
+ toolEdit: "#6fb3ab",
824
+ toolTest: "#7fb88a",
825
+ toolDelegate: "#d6a35c"
826
+ },
827
+ overrides: { userColor: "#e2e6ec", assistantColor: "#c4c9d2", muted: "#8b93a3" },
828
+ fallback: {
829
+ primary: "cyan",
830
+ secondary: "blue",
831
+ success: "green",
832
+ warning: "yellow",
833
+ error: "red",
834
+ dim: "gray",
835
+ pulseQuiet: "gray",
836
+ pulseActive: "cyan",
837
+ pulseAlert: "red"
838
+ },
839
+ fallbackOverrides: { userColor: "white", assistantColor: "white", muted: "gray" }
840
+ };
841
+ var DAWN = {
842
+ background: "dark",
843
+ description: "\u542F\u660E\u661F\u6668\u66E6\u8C03\u3002\u9752\u84DD\u8FB9\u6846\u3001\u6696\u91D1\u6807\u9898\u3001\u96FE\u7070\u6B63\u6587\uFF0C\u8D34\u8FD1 Tianshu \u542F\u52A8\u753B\u9762\u3002",
844
+ truecolor: {
845
+ primary: "#58d6f5",
846
+ // 启明星青蓝:边框 / 图腾 / 重点线
847
+ secondary: "#d8a15c",
848
+ // 地平金:标题
849
+ success: "#7bbf98",
850
+ // 柔和晨曦绿
851
+ warning: "#e5763a",
852
+ // 橘橙 — 原与 secondary 同值 #d8a15c(四 token 撞金),橘化分离
853
+ error: "#e58e98",
854
+ dim: "#8f9aaa",
855
+ // 雾灰:副标题 / 标签 / 辅助信息
856
+ pulseQuiet: "#2b3340",
857
+ pulseActive: "#58d6f5",
858
+ pulseAlert: "#e58e98"
859
+ // toolX 不覆盖:回退全局默认映射(shell=primary 青 / edit=secondary 金 /
860
+ // test=success 绿 / delegate=warning 橙)——原四处覆盖把 shell/edit/delegate
861
+ // 全锁进同一个金 #d8a15c,工具族色编码整个塌掉。
862
+ },
863
+ overrides: {
864
+ userColor: "#ffb454",
865
+ // 亮琥珀 — 原 #f59e0b 与标题金 cr 仅 1.07,提亮拉开
866
+ assistantColor: "#dce3ea",
867
+ muted: "#8f9aaa",
868
+ systemColor: "#8f9aaa"
869
+ },
870
+ fallback: {
871
+ primary: "cyan",
872
+ secondary: "yellow",
873
+ success: "green",
874
+ warning: "yellow",
875
+ error: "red",
876
+ dim: "gray",
877
+ pulseQuiet: "gray",
878
+ pulseActive: "cyan",
879
+ pulseAlert: "red"
880
+ },
881
+ fallbackOverrides: {
882
+ userColor: "yellowBright",
883
+ assistantColor: "white",
884
+ muted: "gray"
885
+ }
886
+ };
887
+ var ANTIGRAVITY = {
888
+ background: "dark",
889
+ description: "Codex \u98CE\u683C\u3002\u5929\u9752\u8272\u51B7\u8C03 Accent\uFF0C\u4EAE\u7070\u7ED3\u6784\u6587\u672C\uFF0C\u73B0\u4EE3\u800C\u514B\u5236\u3002",
890
+ voice: "tech",
891
+ truecolor: {
892
+ primary: "#5aa9ff",
893
+ // cool azure (desktop --accent)
894
+ secondary: "#8ab4ff",
895
+ // 浅天青
896
+ success: "#43c463",
897
+ // desktop --success
898
+ warning: "#e0a93a",
899
+ // desktop --warning
900
+ error: "#f76b6b",
901
+ // desktop --error
902
+ dim: "#9093a0",
903
+ // desktop --faint(提亮档)
904
+ pulseQuiet: "#2a2a32",
905
+ // desktop --border
906
+ pulseActive: "#5aa9ff",
907
+ pulseAlert: "#f76b6b",
908
+ toolShell: "#7aa2cf",
909
+ toolEdit: "#6fb3ab",
910
+ toolTest: "#43c463",
911
+ toolDelegate: "#e0a93a"
912
+ },
913
+ overrides: { userColor: "#d8e2ee", assistantColor: "#c4c9d2", muted: "#989aa6" },
914
+ // userColor 冷调近白——原天青 #38bdf8 与 primary cr 仅 1.15,发言冒充 accent
915
+ fallback: {
916
+ primary: "blue",
917
+ secondary: "cyan",
918
+ success: "green",
919
+ warning: "yellow",
920
+ error: "red",
921
+ dim: "gray",
922
+ pulseQuiet: "gray",
923
+ pulseActive: "blue",
924
+ pulseAlert: "red"
925
+ },
926
+ fallbackOverrides: { userColor: "cyanBright", assistantColor: "white", muted: "gray" }
927
+ };
928
+ var COBALT = {
929
+ background: "dark",
930
+ description: "\u94B4\u84DD\xB7\u51B7\u8C03\u4E2D\u6027 (\u9ED8\u8BA4\u98CE\u683C)\u3002oklch \u8C03\u548C\uFF0C\u660E\u5EA6\u68AF\u5EA6\u6E05\u6670\uFF0C\u89C6\u89C9\u6781\u5EA6\u8212\u9002\u3002",
931
+ truecolor: {
932
+ primary: "#6ab8ff",
933
+ // 钴蓝 accent (--tui-accent)
934
+ secondary: "#7dacbf",
935
+ // 雾青灰
936
+ success: "#58cbb4",
937
+ // 青绿 (--tui-ok)
938
+ warning: "#d4b44c",
939
+ // 琥珀金
940
+ error: "#ed7665",
941
+ // 珊瑚砖红 (--tui-err)
942
+ dim: "#8693a0",
943
+ // 冷板岩灰
944
+ pulseQuiet: "#30363d",
945
+ // (--tui-border)
946
+ pulseActive: "#6ab8ff",
947
+ pulseAlert: "#ed7665",
948
+ toolShell: "#5f97c5",
949
+ toolEdit: "#65b9ca",
950
+ toolTest: "#58cbb4",
951
+ toolDelegate: "#d4b44c"
952
+ },
953
+ overrides: {
954
+ userColor: "#fbbf24",
955
+ assistantColor: "#c9cfd6",
956
+ muted: "#9ca5b3",
957
+ // 2026-09 inlineCode 独立(同 cyberpunk 模式):正文行内代码(文件名/命令/函数名
958
+ // 高频出现)原吃 secondary 雾青灰,灰扑扑;取柔亮天青 #8ecae6(H195 S63 L74)——
959
+ // L 高 S 中,守 cobalt「明度梯度清晰、视觉舒适」哲学,不引入高饱和艳色。
960
+ inlineCode: "#8ecae6"
961
+ },
962
+ fallback: {
963
+ primary: "blue",
964
+ secondary: "cyan",
965
+ success: "green",
966
+ warning: "yellow",
967
+ error: "red",
968
+ dim: "gray",
969
+ pulseQuiet: "gray",
970
+ pulseActive: "blue",
971
+ pulseAlert: "red"
972
+ },
973
+ fallbackOverrides: { userColor: "yellowBright", assistantColor: "white", muted: "gray", inlineCode: "cyanBright" }
974
+ };
975
+ var GRAPHITE = {
976
+ background: "dark",
977
+ description: "\u77F3\u58A8\u51B0\u9752 (\u4E13\u4E1A\u9ED8\u8BA4)\u3002\u4E2D\u6027\u7070\u9636 + \u5355\u4E00\u51B0\u9752 accent\uFF0C\u4F4E\u9971\u548C\u8BED\u4E49\u8272\uFF0C\u957F\u65F6\u95F4\u7F16\u7801\u4E0D\u75B2\u52B3\u3002",
978
+ truecolor: {
979
+ primary: "#7cc4e8",
980
+ // 冰青 accent — 品牌星 / 光标 / 关键动作
981
+ secondary: "#8b98ab",
982
+ // 钢灰蓝 — 次级结构
983
+ success: "#7fbf8e",
984
+ // 鼠尾草绿
985
+ warning: "#d9b36c",
986
+ // 哑琥珀
987
+ error: "#e07a6f",
988
+ // 软珊瑚红(非纯红防光晕)
989
+ dim: "#828d9c",
990
+ // 结构灰(提亮档 >4.6:1 WCAG AA)
991
+ pulseQuiet: "#2f3540",
992
+ pulseActive: "#7cc4e8",
993
+ pulseAlert: "#e07a6f",
994
+ toolShell: "#7ba7c9",
995
+ toolEdit: "#8b98ab",
996
+ toolTest: "#7fbf8e",
997
+ toolDelegate: "#d9b36c"
998
+ },
999
+ // userColor 暖金琥珀 / assistantColor 中性灰:靠 ▌贯穿导轨 + 专属亮彩与灰度区分说话人
1000
+ overrides: { userColor: "#e0aa53", assistantColor: "#c8cdd6", muted: "#9aa4b0", systemColor: "#8b95a1" },
1001
+ fallback: {
1002
+ primary: "cyan",
1003
+ secondary: "blue",
1004
+ success: "green",
1005
+ warning: "yellow",
1006
+ error: "red",
1007
+ dim: "gray",
1008
+ pulseQuiet: "gray",
1009
+ pulseActive: "cyan",
1010
+ pulseAlert: "red"
1011
+ },
1012
+ fallbackOverrides: { userColor: "yellowBright", assistantColor: "white", muted: "gray" }
1013
+ };
1014
+ var GEMINI = {
1015
+ background: "dark",
1016
+ description: "Gemini \u98CE\u683C\u3002\u7ED3\u5408\u661F\u4E91\u5FAE\u5149\u6E10\u53D8 (\u51B7\u975B\u84DD\u4E0E\u661F\u4E91\u7D2B) \u4E0E\u6781\u5149\u8584\u8377\uFF0C\u6781\u5177\u79D1\u6280\u7F8E\u611F\u3002",
1017
+ voice: "tech",
1018
+ truecolor: {
1019
+ primary: "#818cf8",
1020
+ // Gemini Indigo
1021
+ secondary: "#c084fc",
1022
+ // Nebula Violet
1023
+ success: "#34d399",
1024
+ // Aurora Mint
1025
+ warning: "#fbbf24",
1026
+ // Stellar Amber
1027
+ error: "#f43f5e",
1028
+ // Cosmic Rose
1029
+ dim: "#8b8ea9",
1030
+ // Nebula Gray(提亮档)
1031
+ pulseQuiet: "#2a2b3d",
1032
+ pulseActive: "#818cf8",
1033
+ pulseAlert: "#f43f5e",
1034
+ toolShell: "#7dd3fc",
1035
+ toolEdit: "#c084fc",
1036
+ toolTest: "#34d399",
1037
+ toolDelegate: "#fbbf24"
1038
+ },
1039
+ overrides: { userColor: "#e0e7ff", assistantColor: "#c4c9d2", muted: "#9497a6" },
1040
+ fallback: {
1041
+ primary: "blueBright",
1042
+ secondary: "magentaBright",
1043
+ success: "cyanBright",
1044
+ warning: "yellowBright",
1045
+ error: "redBright",
1046
+ dim: "gray",
1047
+ pulseQuiet: "gray",
1048
+ pulseActive: "blueBright",
1049
+ pulseAlert: "redBright"
1050
+ },
1051
+ fallbackOverrides: { userColor: "white", assistantColor: "white", muted: "gray" }
1052
+ };
1053
+ var PAPER = {
1054
+ background: "light",
1055
+ description: "\u7EB8\u767D\u4EAE\u8272\u3002\u9762\u5411\u767D\u5E95/\u6D45\u8272\u7EC8\u7AEF\uFF0C\u5168\u8BED\u4E49\u8272\u52A0\u6DF1\u964D\u4EAE\uFF0C\u975B\u84DD accent\u3002",
1056
+ truecolor: {
1057
+ primary: "#1d4ed8",
1058
+ // 深靛蓝 accent — 白底 7.5:1
1059
+ secondary: "#0e7490",
1060
+ // 深青 — 结构头
1061
+ success: "#15803d",
1062
+ // 深绿
1063
+ warning: "#a16207",
1064
+ // 深琥珀(亮背景下黄色系必须压到 700 档才可读)
1065
+ error: "#b91c1c",
1066
+ // 深红
1067
+ dim: "#6b7280",
1068
+ // 中灰 — 分隔/快捷键(白底 4.6:1)
1069
+ pulseQuiet: "#d1d5db",
1070
+ // 浅边框灰 — quiet pulse
1071
+ pulseActive: "#1d4ed8",
1072
+ pulseAlert: "#b91c1c",
1073
+ toolShell: "#1e6091",
1074
+ // 深钢蓝
1075
+ toolEdit: "#0e7490",
1076
+ // 深青
1077
+ toolTest: "#15803d",
1078
+ // 深绿
1079
+ toolDelegate: "#a16207"
1080
+ },
1081
+ // userColor/assistantColor 深灰近黑正文;muted 中深灰。
1082
+ overrides: { userColor: "#1f2937", assistantColor: "#374151", muted: "#4b5563", systemColor: "#4b5563" },
1083
+ fallback: {
1084
+ // 亮背景 16 色:避开 white/gray(白底不可见),用暗色系命名色。
1085
+ primary: "blue",
1086
+ secondary: "cyan",
1087
+ success: "green",
1088
+ warning: "yellow",
1089
+ error: "red",
1090
+ dim: "black",
1091
+ pulseQuiet: "black",
1092
+ pulseActive: "blue",
1093
+ pulseAlert: "red"
1094
+ },
1095
+ fallbackOverrides: { userColor: "black", assistantColor: "black", muted: "black" }
1096
+ };
1097
+ var LIGHT_ANSI = {
1098
+ background: "light",
1099
+ description: "\u4EAE\u8272 ANSI\u300216 \u8272\u7EAF\u51C0\u7248\uFF0C\u8DDF\u968F\u7EC8\u7AEF\u81EA\u8EAB\u914D\u8272\u65B9\u6848\uFF0C\u4EAE\u80CC\u666F\u53CB\u597D\u3002",
1100
+ truecolor: {
1101
+ primary: "#0550ae",
1102
+ secondary: "#8250df",
1103
+ // 亮色系紫 — 原 #116329 与 success 同值,edit 工具冒充测试通过
1104
+ success: "#116329",
1105
+ warning: "#7d4e00",
1106
+ error: "#a40e26",
1107
+ dim: "#57606a",
1108
+ pulseQuiet: "#d0d7de",
1109
+ pulseActive: "#0550ae",
1110
+ pulseAlert: "#a40e26"
1111
+ },
1112
+ overrides: { userColor: "#24292f", assistantColor: "#24292f", muted: "#57606a", systemColor: "#57606a" },
1113
+ fallback: {
1114
+ primary: "blue",
1115
+ secondary: "magenta",
1116
+ success: "green",
1117
+ warning: "yellow",
1118
+ error: "red",
1119
+ dim: "black",
1120
+ pulseQuiet: "black",
1121
+ pulseActive: "blue",
1122
+ pulseAlert: "red"
1123
+ },
1124
+ fallbackOverrides: { userColor: "black", assistantColor: "black", muted: "black" }
1125
+ };
1126
+ var THEME_PALETTES = {
1127
+ pastel: PASTEL,
1128
+ cyberpunk: CYBERPUNK,
1129
+ observatory: OBSERVATORY,
1130
+ midnight: MIDNIGHT,
1131
+ starfield: STARFIELD,
1132
+ tianshu: TIANSHU,
1133
+ claude: CLAUDE,
1134
+ ziwei: ZIWEI,
1135
+ slate: SLATE,
1136
+ dawn: DAWN,
1137
+ antigravity: ANTIGRAVITY,
1138
+ cobalt: COBALT,
1139
+ graphite: GRAPHITE,
1140
+ gemini: GEMINI,
1141
+ paper: PAPER,
1142
+ "light-ansi": LIGHT_ANSI
1143
+ };
1144
+
1145
+ // src/tui/theme.ts
1146
+ var THEME_NAMES = Object.keys(THEME_PALETTES);
1147
+ function makeToolColor(c) {
1148
+ return (name) => {
1149
+ switch (name) {
1150
+ // 探索族(shell):bash / grep / glob / read / semantic / repo 等
1151
+ case "bash":
1152
+ case "grep":
1153
+ case "glob":
1154
+ case "read_file":
1155
+ case "read_section":
1156
+ case "read_policy":
1157
+ case "semantic_search":
1158
+ case "repo_map":
1159
+ case "repo_graph":
1160
+ case "inspect_project":
1161
+ case "related_tests":
1162
+ case "file_info":
1163
+ case "ls":
1164
+ return c.toolShell ?? c.primary;
1165
+ case "edit_file":
1166
+ case "write_file":
1167
+ case "hash_edit":
1168
+ case "apply_patch":
1169
+ return c.toolEdit ?? c.secondary;
1170
+ case "run_tests":
1171
+ return c.toolTest ?? c.success;
1172
+ case "delegate_task":
1173
+ case "delegate_batch":
1174
+ return c.toolDelegate ?? c.warning;
1175
+ default:
1176
+ return c.toolShell ?? c.dim;
1177
+ }
1178
+ };
1179
+ }
1180
+ function makeContextColor(c) {
1181
+ return (pct) => {
1182
+ if (pct >= 0.88) return c.error;
1183
+ if (pct >= 0.75) return c.warning;
1184
+ return c.dim;
1185
+ };
1186
+ }
1187
+ function buildTheme(colors, overrides, auxiliaryDefault = "#9aa2b1", voice = "default") {
1188
+ return {
1189
+ ...colors,
1190
+ muted: overrides?.muted ?? auxiliaryDefault,
1191
+ userColor: overrides?.userColor ?? colors.primary,
1192
+ assistantColor: overrides?.assistantColor ?? colors.secondary,
1193
+ systemColor: overrides?.systemColor ?? auxiliaryDefault,
1194
+ brandColor: overrides?.brandColor ?? colors.primary,
1195
+ inlineCode: overrides?.inlineCode ?? colors.secondary,
1196
+ voice,
1197
+ toolColor: makeToolColor(colors),
1198
+ contextColor: makeContextColor(colors)
1199
+ };
1200
+ }
1201
+ function buildEntry(def) {
1202
+ return {
1203
+ truecolor: buildTheme(def.truecolor, def.overrides, void 0, def.voice ?? "default"),
1204
+ // fallback 轨必须保持纯 ANSI 命名色。复用 truecolor 的 hex 默认值会让
1205
+ // level 0/1 终端重新收到 38;2 序列,等于悄悄绕过能力降级。
1206
+ fallback: buildTheme(def.fallback, def.fallbackOverrides, def.fallback.dim, def.voice ?? "default"),
1207
+ background: def.background,
1208
+ description: def.description
1209
+ };
1210
+ }
1211
+ var THEMES = Object.fromEntries(
1212
+ Object.entries(THEME_PALETTES).map(([name, def]) => [name, buildEntry(def)])
1213
+ );
1214
+ var customThemes = /* @__PURE__ */ new Map();
1215
+ function registerCustomTheme(name, input) {
1216
+ const background = input.background ?? "dark";
1217
+ const baseName = input.base && input.base in THEME_PALETTES ? input.base : background === "light" ? "paper" : "cobalt";
1218
+ const baseDef = THEME_PALETTES[baseName];
1219
+ const colors = { ...baseDef.truecolor, ...input.colors };
1220
+ const overrides = { ...baseDef.overrides, ...input.overrides };
1221
+ const voice = baseDef.voice ?? "default";
1222
+ customThemes.set(name, {
1223
+ truecolor: buildTheme(colors, overrides, void 0, voice),
1224
+ // 16 色轨没有 hex 可映射,继承 base 的 fallback(自定义 hex 只在 truecolor 生效)。
1225
+ // 第三个参数锁死辅助色默认值 = base fallback 的命名色,避免 muted/systemColor
1226
+ // 落回 truecolor 轨的 hex 默认值,让 level 0/1 终端收到 38;2 序列。
1227
+ fallback: buildTheme(baseDef.fallback, baseDef.fallbackOverrides, baseDef.fallback.dim, voice),
1228
+ background,
1229
+ description: input.description ?? `Custom theme (base: ${baseName})`
1230
+ });
1231
+ }
1232
+ function listCustomThemes() {
1233
+ return [...customThemes.keys()];
1234
+ }
1235
+ function resolveThemeEntry(name) {
1236
+ if (name.startsWith("custom:")) return customThemes.get(name.slice("custom:".length));
1237
+ return THEMES[name];
1238
+ }
1239
+ var activeTheme = "cobalt";
1240
+ function setTheme(name) {
1241
+ if (!resolveThemeEntry(name)) return false;
1242
+ activeTheme = name;
1243
+ return true;
1244
+ }
1245
+ function getActiveThemeName() {
1246
+ return activeTheme;
1247
+ }
1248
+ function getTheme(colorLevel) {
1249
+ const level = colorLevel ?? source_default.level;
1250
+ const entry = resolveThemeEntry(activeTheme) ?? THEMES.cobalt;
1251
+ return level >= 2 ? entry.truecolor : entry.fallback;
1252
+ }
1253
+
1254
+ // src/tui/engine/ansi.ts
1255
+ init_esm_shims();
1256
+ var ANSI_SEQ_RE = /\x1B(?:\[[0-9;?]*[ -/]*[@-~]|\][^\x07\x1B]*(?:\x07|\x1B\\)|[@-Z\\-_])/g;
1257
+ var ANSI = {
1258
+ /** 保存当前光标位置 */
1259
+ SAVE_CURSOR: "\x1B[s",
1260
+ /** 恢复之前保存的光标位置 */
1261
+ RESTORE_CURSOR: "\x1B[u",
1262
+ /** 从光标处擦除到行尾 (Erase to End of Line) */
1263
+ ERASE_LINE_END: "\x1B[0K",
1264
+ /** 擦除整行 (Erase Entire Line) */
1265
+ ERASE_LINE: "\x1B[2K",
1266
+ /** 从光标处擦除到屏幕末尾 (Erase to End of Screen) */
1267
+ ERASE_SCREEN_END: "\x1B[0J",
1268
+ /** 擦除整个屏幕 (Erase Entire Screen) */
1269
+ ERASE_SCREEN: "\x1B[2J",
1270
+ /** 进入 alternate screen buffer(全屏 overlay 用) */
1271
+ ALT_SCREEN_ON: "\x1B[?1049h",
1272
+ /** 退出 alternate screen buffer,恢复主屏 */
1273
+ ALT_SCREEN_OFF: "\x1B[?1049l",
1274
+ /**
1275
+ * 开始同步输出(CSI 2026 / DECSET 2026)。
1276
+ * 终端会缓冲后续输出,直到 END_SYNC 才一次性原子刷新 → 防止增量重绘撕裂/闪烁。
1277
+ * 不支持的终端会静默忽略此私有模式(无副作用)。
1278
+ */
1279
+ BEGIN_SYNC: "\x1B[?2026h",
1280
+ /** 结束同步输出,原子刷新本帧。 */
1281
+ END_SYNC: "\x1B[?2026l",
1282
+ /** 隐藏光标 */
1283
+ HIDE_CURSOR: "\x1B[?25l",
1284
+ /** 显示光标 */
1285
+ SHOW_CURSOR: "\x1B[?25h",
1286
+ /**
1287
+ * Kitty keyboard protocol flag 1(disambiguate escape codes)。
1288
+ * 开启后 Shift+Enter 等带修饰键以 CSI-u 送达(如 `\x1B[13;2u`),
1289
+ * 应用才能区分 Shift+Enter 与普通 Enter;不支持的终端静默忽略。
1290
+ * 对齐公开仓(tianshu-public app attach 同款)。
1291
+ */
1292
+ KITTY_KEYBOARD_DISAMBIGUATE_ON: "\x1B[>1u",
1293
+ /** 弹出 Kitty keyboard protocol(退出时恢复终端默认,与 ON 成对)。 */
1294
+ KITTY_KEYBOARD_OFF: "\x1B[<u",
1295
+ /** 查询当前 kitty keyboard protocol flags——支持的终端回 `\x1B[?<flags>u`,
1296
+ * 收到回包即证明 Shift+Enter 等修饰键可区分(能力探测,无回包则视为不支持)。 */
1297
+ KITTY_KEYBOARD_QUERY: "\x1B[?u",
1298
+ /**
1299
+ * DECSCUSR:光标形状设为稳态竖条(不闪)。
1300
+ * 终端原生光标闪烁会叠加在应用自管的 DECTCEM 翻转上,导致闪烁频率不稳、
1301
+ * 静止光标也在闪——输入类 overlay 激活期间统一切到稳态竖条,
1302
+ * 闪烁节奏完全由应用控制。竖条画在字符格左缘,天然落在格子边界上。
1303
+ */
1304
+ CURSOR_STEADY_BAR: "\x1B[6 q",
1305
+ /** DECSCUSR:光标形状恢复终端默认(退出 overlay 时写)。 */
1306
+ CURSOR_SHAPE_DEFAULT: "\x1B[0 q",
1307
+ /** 重置所有 SGR 属性 */
1308
+ RESET: "\x1B[0m",
1309
+ /** 粗体 */
1310
+ BOLD: "\x1B[1m",
1311
+ /** 细体/暗色 */
1312
+ DIM: "\x1B[2m",
1313
+ /** 斜体 */
1314
+ ITALIC: "\x1B[3m",
1315
+ /** 下划线 */
1316
+ UNDERLINE: "\x1B[4m",
1317
+ /** 闪烁(慢) */
1318
+ BLINK: "\x1B[5m",
1319
+ /** 反色 */
1320
+ REVERSE: "\x1B[7m",
1321
+ /** 删除线 */
1322
+ STRIKETHROUGH: "\x1B[9m"
1323
+ };
1324
+ function cursorUp(n) {
1325
+ return `\x1B[${Math.max(1, Math.floor(n))}A`;
1326
+ }
1327
+ function cursorDown(n) {
1328
+ return `\x1B[${Math.max(1, Math.floor(n))}B`;
1329
+ }
1330
+ function cursorTo(row, col) {
1331
+ return `\x1B[${Math.max(1, Math.floor(row))};${Math.max(1, Math.floor(col))}H`;
1332
+ }
1333
+ function cursorToCol(col) {
1334
+ return `\x1B[${Math.max(1, Math.floor(col))}G`;
1335
+ }
1336
+ function hexToRgb(hex) {
1337
+ const match = hex.match(/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/);
1338
+ if (!match) return null;
1339
+ const h = match[1];
1340
+ if (h.length === 3) {
1341
+ return [parseInt(h[0] + h[0], 16), parseInt(h[1] + h[1], 16), parseInt(h[2] + h[2], 16)];
1342
+ }
1343
+ return [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)];
1344
+ }
1345
+ var NAMED_FG_CODES = {
1346
+ black: 30,
1347
+ red: 31,
1348
+ green: 32,
1349
+ yellow: 33,
1350
+ blue: 34,
1351
+ magenta: 35,
1352
+ cyan: 36,
1353
+ white: 37,
1354
+ gray: 90,
1355
+ grey: 90,
1356
+ blackBright: 90,
1357
+ redBright: 91,
1358
+ greenBright: 92,
1359
+ yellowBright: 93,
1360
+ blueBright: 94,
1361
+ magentaBright: 95,
1362
+ cyanBright: 96,
1363
+ whiteBright: 97
1364
+ };
1365
+ function rgbToXterm256(r, g, b) {
1366
+ const toCubeIdx = (v) => {
1367
+ if (v < 48) return 0;
1368
+ if (v < 115) return 1;
1369
+ return Math.min(5, Math.floor((v - 35) / 40));
1370
+ };
1371
+ const CUBE = [0, 95, 135, 175, 215, 255];
1372
+ const ci = toCubeIdx(r), gi = toCubeIdx(g), bi = toCubeIdx(b);
1373
+ const cr = CUBE[ci], cg = CUBE[gi], cb = CUBE[bi];
1374
+ const cubeDist = (cr - r) ** 2 + (cg - g) ** 2 + (cb - b) ** 2;
1375
+ const gray = Math.round((r + g + b) / 3);
1376
+ const gi24 = Math.max(0, Math.min(23, Math.round((gray - 8) / 10)));
1377
+ const gv = 8 + 10 * gi24;
1378
+ const grayDist = (gv - r) ** 2 + (gv - g) ** 2 + (gv - b) ** 2;
1379
+ return grayDist < cubeDist ? 232 + gi24 : 16 + 36 * ci + 6 * gi + bi;
1380
+ }
1381
+ function use256() {
1382
+ return source_default.level === 2;
1383
+ }
1384
+ function fg(colorValue) {
1385
+ const rgb = hexToRgb(colorValue);
1386
+ if (!rgb) {
1387
+ const code = NAMED_FG_CODES[colorValue];
1388
+ return code === void 0 ? "" : `\x1B[${code}m`;
1389
+ }
1390
+ if (use256()) return `\x1B[38;5;${rgbToXterm256(rgb[0], rgb[1], rgb[2])}m`;
1391
+ return `\x1B[38;2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
1392
+ }
1393
+ function bg(colorValue) {
1394
+ const rgb = hexToRgb(colorValue);
1395
+ if (!rgb) {
1396
+ const code = NAMED_FG_CODES[colorValue];
1397
+ return code === void 0 ? "" : `\x1B[${code + 10}m`;
1398
+ }
1399
+ if (use256()) return `\x1B[48;5;${rgbToXterm256(rgb[0], rgb[1], rgb[2])}m`;
1400
+ return `\x1B[48;2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
1401
+ }
1402
+ function color(text, fgHex, opts) {
1403
+ let prefix = fg(fgHex);
1404
+ if (opts?.bold) prefix += ANSI.BOLD;
1405
+ if (opts?.dim) prefix += ANSI.DIM;
1406
+ if (opts?.italic) prefix += ANSI.ITALIC;
1407
+ if (opts?.underline) prefix += ANSI.UNDERLINE;
1408
+ return `${prefix}${text}${ANSI.RESET}`;
1409
+ }
1410
+ function osc52Clipboard(text) {
1411
+ return `\x1B]52;c;${Buffer.from(text, "utf8").toString("base64")}\x07`;
1412
+ }
1413
+ var hyperlinkOverride = null;
1414
+ function detectHyperlinkSupport(env2 = process.env) {
1415
+ if (env2.RIVET_HYPERLINKS === "0") return false;
1416
+ if (env2.RIVET_HYPERLINKS === "1" || env2.FORCE_HYPERLINK) return true;
1417
+ const term = env2.TERM ?? "";
1418
+ if (term === "dumb" || !process.stdout.isTTY) return false;
1419
+ if (env2.TMUX || term.startsWith("screen")) return false;
1420
+ const program = env2.TERM_PROGRAM ?? "";
1421
+ if (["iTerm.app", "WezTerm", "vscode", "Hyper", "ghostty", "Tabby"].includes(program)) return true;
1422
+ if (term.startsWith("xterm-kitty")) return true;
1423
+ if (env2.WT_SESSION) return true;
1424
+ const vte = Number.parseInt(env2.VTE_VERSION ?? "", 10);
1425
+ if (Number.isFinite(vte) && vte >= 5e3) return true;
1426
+ return false;
1427
+ }
1428
+ var detectedSupport = null;
1429
+ function hyperlinksSupported() {
1430
+ if (hyperlinkOverride !== null) return hyperlinkOverride;
1431
+ if (detectedSupport === null) detectedSupport = detectHyperlinkSupport();
1432
+ return detectedSupport;
1433
+ }
1434
+ function hyperlink(text, url) {
1435
+ if (!hyperlinksSupported()) return text;
1436
+ const safeUrl = url.replace(/[\x00-\x1F\x7F]/g, "");
1437
+ if (!safeUrl) return text;
1438
+ return `\x1B]8;;${safeUrl}\x07${text}\x1B]8;;\x07`;
1439
+ }
1440
+ function fileLink(text, filePath, cwd = process.cwd()) {
1441
+ const abs = filePath.startsWith("/") ? filePath : `${cwd}/${filePath}`;
1442
+ return hyperlink(text, `file://${abs}`);
1443
+ }
1444
+ var imageProtocolOverride = null;
1445
+ function detectImageProtocol(env2 = process.env, isTTY = Boolean(process.stdout.isTTY)) {
1446
+ const override = env2.RIVET_IMAGES?.toLowerCase();
1447
+ if (override === "0" || override === "off" || override === "none") return "none";
1448
+ if (override === "kitty" || override === "iterm2") return override;
1449
+ const term = env2.TERM ?? "";
1450
+ if (term === "dumb" || !isTTY) return "none";
1451
+ if (env2.TMUX || term.startsWith("screen")) return "none";
1452
+ const program = env2.TERM_PROGRAM ?? "";
1453
+ if (program === "iTerm.app") return "iterm2";
1454
+ if (term.startsWith("xterm-kitty")) return "kitty";
1455
+ if (["ghostty", "WezTerm", "WarpTerminal", "konsole"].includes(program)) return "kitty";
1456
+ if (env2.KONSOLE_VERSION) return "kitty";
1457
+ return "none";
1458
+ }
1459
+ var detectedImageProtocol = null;
1460
+ function imageProtocol() {
1461
+ if (imageProtocolOverride !== null) return imageProtocolOverride;
1462
+ if (detectedImageProtocol === null) detectedImageProtocol = detectImageProtocol();
1463
+ return detectedImageProtocol;
1464
+ }
1465
+ var QUERY_CURSOR_POS = "\x1B[6n";
1466
+
1467
+ export {
1468
+ source_default,
1469
+ THEME_PALETTES,
1470
+ THEME_NAMES,
1471
+ THEMES,
1472
+ registerCustomTheme,
1473
+ listCustomThemes,
1474
+ resolveThemeEntry,
1475
+ setTheme,
1476
+ getActiveThemeName,
1477
+ getTheme,
1478
+ ANSI_SEQ_RE,
1479
+ ANSI,
1480
+ cursorUp,
1481
+ cursorDown,
1482
+ cursorTo,
1483
+ cursorToCol,
1484
+ fg,
1485
+ bg,
1486
+ color,
1487
+ osc52Clipboard,
1488
+ hyperlink,
1489
+ fileLink,
1490
+ imageProtocol,
1491
+ QUERY_CURSOR_POS
1492
+ };