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,225 @@
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/agent/tool-tiers.ts
8
+ init_esm_shims();
9
+
10
+ // src/tools/description-compact.ts
11
+ init_esm_shims();
12
+ var COMPACT_MIN_CHARS = 800;
13
+ var HARD_GATE = /禁止|必须|不要|不得|绝不|不能|NEVER|MUST|Do NOT|DO NOT/;
14
+ var HEADING = /^\s{0,3}#{1,6}\s/;
15
+ var FENCE = /^\s*```/;
16
+ function compactDescription(description) {
17
+ if (description.length <= COMPACT_MIN_CHARS) return description;
18
+ const lines = description.split("\n");
19
+ const keep = new Array(lines.length).fill(false);
20
+ let leading = true;
21
+ let inFence = false;
22
+ for (let i = 0; i < lines.length; i++) {
23
+ const line = lines[i];
24
+ if (FENCE.test(line)) {
25
+ inFence = !inFence;
26
+ keep[i] = leading;
27
+ continue;
28
+ }
29
+ if (inFence) {
30
+ keep[i] = leading;
31
+ continue;
32
+ }
33
+ if (leading) {
34
+ keep[i] = true;
35
+ if (line.trim() === "") leading = false;
36
+ continue;
37
+ }
38
+ if (HEADING.test(line) || HARD_GATE.test(line)) keep[i] = true;
39
+ }
40
+ for (let i = 0; i < lines.length; i++) {
41
+ if (!HEADING.test(lines[i]) || !keep[i]) continue;
42
+ for (let j = i + 1; j < lines.length && !HEADING.test(lines[j]); j++) {
43
+ if (lines[j].trim() === "" || FENCE.test(lines[j])) continue;
44
+ keep[j] = true;
45
+ break;
46
+ }
47
+ }
48
+ for (let i = 0; i < lines.length; i++) {
49
+ if (!keep[i] || !HEADING.test(lines[i])) continue;
50
+ let hasBody = false;
51
+ for (let j = i + 1; j < lines.length && !HEADING.test(lines[j]); j++) {
52
+ if (keep[j] && lines[j].trim() !== "") {
53
+ hasBody = true;
54
+ break;
55
+ }
56
+ }
57
+ if (!hasBody) keep[i] = false;
58
+ }
59
+ const out = [];
60
+ for (let i = 0; i < lines.length; i++) {
61
+ if (!keep[i]) continue;
62
+ const line = lines[i];
63
+ if (line.trim() === "" && (out.length === 0 || out[out.length - 1].trim() === "")) continue;
64
+ out.push(line);
65
+ }
66
+ const compacted = out.join("\n").trim();
67
+ return compacted.length < description.length ? compacted : description;
68
+ }
69
+ function applyDescriptionMode(defs, mode) {
70
+ if (mode !== "compact") return [...defs];
71
+ return defs.map((d) => {
72
+ if (typeof d.description !== "string") return d;
73
+ const compacted = compactDescription(d.description);
74
+ return compacted === d.description ? d : { ...d, description: compacted };
75
+ });
76
+ }
77
+
78
+ // src/agent/tool-tiers.ts
79
+ var CORE_TOOLS = [
80
+ // 文件读写编辑
81
+ "read_file",
82
+ "write_file",
83
+ "edit_file",
84
+ "hash_edit",
85
+ // 搜索导航
86
+ "grep",
87
+ "glob",
88
+ "semantic_search",
89
+ "web_search",
90
+ "web_fetch",
91
+ "repo_map",
92
+ // 执行
93
+ "bash",
94
+ "run_tests",
95
+ "git",
96
+ "todo",
97
+ // 后台任务控制(bash run_in_background 的配套 await/logs/kill)
98
+ "job",
99
+ // 规划与交付
100
+ "plan",
101
+ "plan_task",
102
+ "deliver_task",
103
+ // 委派
104
+ "delegate_task",
105
+ "delegate_batch",
106
+ // 记忆
107
+ "memory",
108
+ // 用户交互
109
+ "ask_user_question",
110
+ // 路径与技能(首调澄清/路径授权/技能加载依赖,static prompt 直接引用)
111
+ "request_path_access",
112
+ "skill",
113
+ // 换视角方法论:static prompt L80 直接指示使用,必须常驻(与 skill 同源)
114
+ "recall_capsule",
115
+ // 浏览器联调与 UI 视觉验证(2026-07-15 从 EXTENDED 升入):改 UI 不看渲染
116
+ // 是高频失败模式,browser_debug 是渲染验证闭环的主工具,主控必须恒可见。
117
+ "browser_debug",
118
+ // PAL 攻坚案件账本(2026-07-17 直入 CORE,预算 26→27):攻坚场景在会话
119
+ // 中期才出现,EXTENDED 中途挂载 = 改 tool fingerprint = 200K 前缀全量重建
120
+ // (DeepSeek V4 创建 ¥3/M、高峰 ¥6/M,一次一两块);早期窗口挂载则等于
121
+ // 没有这个功能。常驻是唯一缓存零成本方案——schema 字节稳定进冻结前缀。
122
+ "attack_case",
123
+ // 编排入口(2026-07-29 从 EXTENDED 升入 CORE):team_orchestrate 是唯一
124
+ // 能派发多 worker 波次 + 门禁 + 审查的主控工具,放在 EXTENDED 等于入口
125
+ // 被默认 deny-list 摘除、用户到不了这条链路。T3 修复——与 attack_case
126
+ // 同理由:中途挂载 = 改 tool fingerprint = 前缀全量重建。
127
+ "team_orchestrate"
128
+ ];
129
+ var EXTENDED_TOOLS = [
130
+ // browser(一次性 headless)与 browser_debug 能力重叠且默认未注册——退役候选。
131
+ "browser",
132
+ "computer_use",
133
+ "repo_graph",
134
+ // capability 能力索引(2026-07-31 装配):只读查询本机 dev CLI 能力与缺口
135
+ // (preflight),full 档注册。查询面低频——同 repo_graph/semantic_search
136
+ // 定位,不占 CORE 常驻字节;主控需要时 /tools enable 挂回,worker 始终可用。
137
+ "capability",
138
+ // council_convene 留在 EXTENDED(不随 team_orchestrate 升入 CORE):
139
+ // 议事会是多视角审查决策,使用频率远低于编排、每次调用的成本也更高
140
+ // (fanout 3-5 审查 worker),不适合占 CORE 常驻字节预算。
141
+ // 主控可用 /tools enable council_convene 或通过 team_orchestrate 触发
142
+ // review gate(L3 = council 审查队,语义等价但入口由编排承担)。
143
+ "council_convene",
144
+ "import_resource",
145
+ "apply_patch",
146
+ "undo",
147
+ // 从 CORE 下放(2026-07-01):低频或被现有工具覆盖的功能,
148
+ // 主控默认不占视野,worker 仍可用、主控可 /tools enable 挂回。
149
+ "read_section",
150
+ // read_file 的 offset/limit 已覆盖区间读取
151
+ "diff",
152
+ // git 工具覆盖「working tree diff」
153
+ "inspect_project",
154
+ // 开局一次性定向,repo_map 已给结构;低频
155
+ "related_tests",
156
+ // run_tests/grep/repo_map 覆盖;低频
157
+ "file_info",
158
+ // bash(stat/ls/wc) 或 read_file 头部覆盖;低频
159
+ "leave_mark",
160
+ // 会话结束留痕,消费方 constellation 默认关(opt-in)
161
+ // desktop tools (create_document, create_spreadsheet, etc.)
162
+ "create_document",
163
+ "create_spreadsheet",
164
+ "create_image",
165
+ "generate_image",
166
+ "create_presentation",
167
+ "create_pdf",
168
+ "export_file",
169
+ "open_path"
170
+ ];
171
+ var ALL_KNOWN_TOOLS = [...CORE_TOOLS, ...EXTENDED_TOOLS];
172
+ var CORE_SET = new Set(CORE_TOOLS);
173
+ var EXTENDED_SET = new Set(EXTENDED_TOOLS);
174
+ function resolveMainToolTier(domain, configEnabled = true, coreOverride) {
175
+ if (!configEnabled) return ALL_KNOWN_TOOLS;
176
+ if (domain?.mainToolTier && domain.mainToolTier.length > 0) {
177
+ return domain.mainToolTier;
178
+ }
179
+ if (coreOverride && coreOverride.length > 0) {
180
+ return coreOverride;
181
+ }
182
+ return CORE_TOOLS;
183
+ }
184
+ function gateToolDefinitions(allDefs, state) {
185
+ if (!state.enabled) return applyDescriptionMode(allDefs, state.toolDescriptions);
186
+ const exempt = /* @__PURE__ */ new Set([...state.extraCore ?? [], ...state.mountedExtras ?? []]);
187
+ const allowList = state.domainTier && state.domainTier.length > 0 ? state.domainTier : state.coreOverride && state.coreOverride.length > 0 ? state.coreOverride : null;
188
+ if (allowList) {
189
+ const allow = /* @__PURE__ */ new Set([...allowList, ...exempt]);
190
+ return applyDescriptionMode(allDefs.filter((d) => allow.has(d.name)), state.toolDescriptions);
191
+ }
192
+ let filtered = allDefs.filter((d) => !EXTENDED_SET.has(d.name) || exempt.has(d.name));
193
+ if (state.disabledTools && state.disabledTools.length > 0) {
194
+ const disabled = new Set(state.disabledTools);
195
+ filtered = filtered.filter((d) => !disabled.has(d.name));
196
+ }
197
+ return applyDescriptionMode(filtered, state.toolDescriptions);
198
+ }
199
+ function isCoreTool(name) {
200
+ return CORE_SET.has(name);
201
+ }
202
+ function isExtendedTool(name) {
203
+ return EXTENDED_SET.has(name);
204
+ }
205
+ function validateTierInvariant(mainToolTier, toolWhitelist) {
206
+ const whitelistSet = new Set(toolWhitelist);
207
+ const violations = mainToolTier.filter((t) => !whitelistSet.has(t));
208
+ if (violations.length > 0) {
209
+ throw new Error(
210
+ `mainToolTier \u2286 toolWhitelist invariant violated: [${violations.join(", ")}] not in toolWhitelist`
211
+ );
212
+ }
213
+ }
214
+
215
+ export {
216
+ applyDescriptionMode,
217
+ CORE_TOOLS,
218
+ EXTENDED_TOOLS,
219
+ ALL_KNOWN_TOOLS,
220
+ resolveMainToolTier,
221
+ gateToolDefinitions,
222
+ isCoreTool,
223
+ isExtendedTool,
224
+ validateTierInvariant
225
+ };
@@ -0,0 +1,98 @@
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
+ DelegationCoordinator
5
+ } from "./chunk-B3YEBABJ.js";
6
+ import {
7
+ buildModelCards
8
+ } from "./chunk-EHHUASO5.js";
9
+ import {
10
+ PromptEngine
11
+ } from "./chunk-V5YIPMHV.js";
12
+ import {
13
+ createProviderClient,
14
+ resolveCapabilities
15
+ } from "./chunk-X2IK5LVR.js";
16
+ import {
17
+ profileRegistry
18
+ } from "./chunk-6HSVXHCZ.js";
19
+ import {
20
+ applyDescriptionMode
21
+ } from "./chunk-JSXWIWWJ.js";
22
+ import {
23
+ subagentPromptBlocks
24
+ } from "./chunk-ER5JW2QZ.js";
25
+ import {
26
+ init_esm_shims
27
+ } from "./chunk-5GGOGLSN.js";
28
+
29
+ // src/agent/headless-coordinator.ts
30
+ init_esm_shims();
31
+ function buildModelCards2(provider) {
32
+ return buildModelCards(provider);
33
+ }
34
+ var HEADLESS_COMPACT = {
35
+ enabled: false,
36
+ model: "flash"
37
+ };
38
+ function createHeadlessCoordinator(input) {
39
+ const modelCards = buildModelCards2(input.provider);
40
+ const runtimeFactory = (order, card, workerRegistry) => {
41
+ const isWrite = profileRegistry.listWriteProfiles().includes(order.profile);
42
+ const blocks = subagentPromptBlocks();
43
+ const modelSpec = input.provider.models.find(
44
+ (m) => m.id === card.model
45
+ );
46
+ const ctxWindow = modelSpec?.contextWindow ?? card.contextWindow;
47
+ const maxTokens = isWrite ? Math.min(16384, modelSpec?.maxTokens ?? ctxWindow) : Math.min(16384, modelSpec?.maxTokens ?? ctxWindow);
48
+ return {
49
+ order,
50
+ client: createProviderClient(
51
+ input.provider,
52
+ resolveCapabilities(input.providerName, input.provider.capabilities),
53
+ {
54
+ apiKey: input.apiKey,
55
+ model: card.model,
56
+ reasoningEffort: void 0,
57
+ maxTokens,
58
+ thinkingBudget: isWrite ? 8192 : 4096,
59
+ auth: input.auth,
60
+ // 会话级 ID 而非 factory 的进程兜底:上游按会话做路由/缓存亲和,
61
+ // 进程级常量会把不同会话的委派合并成同一段对话。
62
+ sessionId: input.sessionId
63
+ }
64
+ ),
65
+ promptEngine: new PromptEngine({
66
+ model: card.model,
67
+ maxTokens,
68
+ staticCtx: { tools: applyDescriptionMode(workerRegistry.getDefinitions(), blocks.toolDescriptions), audience: "subagent" },
69
+ volatileCtx: { cwd: input.cwd, blockCaps: blocks.caps }
70
+ }),
71
+ toolRegistry: workerRegistry,
72
+ blockPolicy: blocks,
73
+ cwd: input.cwd,
74
+ // Far backstop only — the work order budget (clamped via clampWorkerMaxTurns)
75
+ // is the real turn controller.
76
+ maxTurns: 100,
77
+ contextWindow: ctxWindow,
78
+ compact: HEADLESS_COMPACT,
79
+ activeClaims: []
80
+ };
81
+ };
82
+ return new DelegationCoordinator({
83
+ baseToolRegistry: input.toolRegistry,
84
+ modelCards,
85
+ maxWorkers: 1,
86
+ // headless goal only ever spawns goal_judge
87
+ runtimeFactory,
88
+ maxDelegationDepth: 1,
89
+ sessionId: input.sessionId
90
+ // D8 L2:有意不接 getPlanConstraints——headless 只跑 goal_judge(maxWorkers:1),
91
+ // 没有计划语境。此决定在 assembly-audit 检查项 4 的 allowlist 显式登记。
92
+ });
93
+ }
94
+
95
+ export {
96
+ buildModelCards2 as buildModelCards,
97
+ createHeadlessCoordinator
98
+ };