@danceiny/gotry 0.0.1-rc.21 → 0.0.1-rc.24

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 (327) hide show
  1. package/README.md +102 -194
  2. package/README.zh-CN.md +115 -210
  3. package/bin/gotry-backend.js +53 -0
  4. package/bin/gotry-bootstrap.js +466 -35
  5. package/bin/gotry-inner.js +255 -36
  6. package/bin/gotry-process-liveness.d.ts +27 -0
  7. package/bin/gotry-process-liveness.js +97 -0
  8. package/bin/gotry-runtime-resolution.d.ts +1 -1
  9. package/bin/gotry-runtime-resolution.js +2 -2
  10. package/client/client.js +174 -0
  11. package/cordis.gotry-patch.yml +70 -93
  12. package/dist/capabilities/agent-reach-deep.js +45 -122
  13. package/dist/capabilities/agent-reach.js +63 -148
  14. package/dist/capabilities/anything.js +89 -75
  15. package/dist/capabilities/artifacts.js +123 -104
  16. package/dist/capabilities/channel-health.js +65 -45
  17. package/dist/capabilities/channel-registry.js +108 -87
  18. package/dist/capabilities/doctor.js +357 -235
  19. package/dist/capabilities/effect.js +223 -309
  20. package/dist/capabilities/fact-log.js +28 -14
  21. package/dist/capabilities/flyai.js +245 -156
  22. package/dist/capabilities/ground-transfer.js +509 -0
  23. package/dist/capabilities/hbcli.js +144 -148
  24. package/dist/capabilities/hotelbyte-transaction.js +194 -0
  25. package/dist/capabilities/incident-log.js +131 -61
  26. package/dist/capabilities/model-override.js +30 -10
  27. package/dist/capabilities/opensky.js +54 -43
  28. package/dist/capabilities/resilience.js +50 -32
  29. package/dist/capabilities/session/action-cache.js +50 -44
  30. package/dist/capabilities/session/adapters/ctrip-flight.js +119 -62
  31. package/dist/capabilities/session/adapters/ctrip-hotel.js +125 -110
  32. package/dist/capabilities/session/adapters/dida-portal.js +206 -0
  33. package/dist/capabilities/session/adapters/meituan-local.js +35 -54
  34. package/dist/capabilities/session/adapters/rail-12306.js +169 -112
  35. package/dist/capabilities/session/benchmark.js +85 -149
  36. package/dist/capabilities/session/extension-bridge.js +320 -259
  37. package/dist/capabilities/session/extension-channel.js +57 -76
  38. package/dist/capabilities/session/extension-distribution.js +115 -119
  39. package/dist/capabilities/session/extract.js +31 -21
  40. package/dist/capabilities/session/golden-score.js +55 -33
  41. package/dist/capabilities/session/health-watch.js +146 -154
  42. package/dist/capabilities/session/read-guard.js +55 -47
  43. package/dist/capabilities/session/static-flight-golden.js +49 -36
  44. package/dist/capabilities/session/transport.js +54 -61
  45. package/dist/capabilities/session/wizard.js +63 -93
  46. package/dist/capabilities/session-consent.js +143 -47
  47. package/dist/capabilities/session-login.js +95 -126
  48. package/dist/capabilities/session-search.js +391 -253
  49. package/dist/capabilities/sponsor-plugin.js +341 -0
  50. package/dist/capabilities/visa-policy.js +87 -73
  51. package/dist/capabilities/weather.js +163 -235
  52. package/dist/scripts/action-cache-tests.js +24 -59
  53. package/dist/scripts/agent-planning-turn-deadline-e2e.js +91 -142
  54. package/dist/scripts/agent-planning-turn-deadline-tests.js +80 -176
  55. package/dist/scripts/agent-reach-deep-tests.js +30 -40
  56. package/dist/scripts/agent-reach-tests.js +26 -18
  57. package/dist/scripts/agent-reach-wrapper-tests.js +46 -50
  58. package/dist/scripts/anything-tests.js +58 -62
  59. package/dist/scripts/artifact-client-contract-tests.js +69 -0
  60. package/dist/scripts/artifacts-capability-tests.js +235 -0
  61. package/dist/scripts/async-collect.js +26 -15
  62. package/dist/scripts/benchmark-environment-bridge-e2e.js +287 -684
  63. package/dist/scripts/benchmark-environment-bridge-tests.js +818 -3123
  64. package/dist/scripts/booking-copilot-availability-ledger-binding-tests.js +66 -279
  65. package/dist/scripts/booking-copilot-availability-policy-tests.js +153 -1257
  66. package/dist/scripts/booking-copilot-bin-proof-tests.js +22 -45
  67. package/dist/scripts/booking-copilot-crossrepo-fixture-server.js +64 -76
  68. package/dist/scripts/booking-copilot-dsh-core-proof-tests.js +69 -199
  69. package/dist/scripts/booking-copilot-dsh-planner-proof-tests.js +393 -759
  70. package/dist/scripts/booking-copilot-dsh-plugin-proof-tests.js +33 -75
  71. package/dist/scripts/booking-copilot-event-sequence-concurrency-proof-tests.js +60 -110
  72. package/dist/scripts/booking-copilot-gap-code-contract-proof-tests.js +28 -66
  73. package/dist/scripts/booking-copilot-operation-ledger-concurrency-proof-tests.js +72 -271
  74. package/dist/scripts/booking-copilot-receipt-ledger-concurrency-proof-tests.js +73 -275
  75. package/dist/scripts/booking-copilot-runtime-proof-tests.js +784 -3398
  76. package/dist/scripts/booking-copilot-server-proof-tests.js +63 -168
  77. package/dist/scripts/booking-copilot-startup-proof-tests.js +38 -124
  78. package/dist/scripts/booking-executor-tests.js +80 -0
  79. package/dist/scripts/booking-recovery-chain-tests.js +182 -0
  80. package/dist/scripts/booking-saga-tests.js +61 -123
  81. package/dist/scripts/booking-surface-contract-proof-tests.js +152 -1167
  82. package/dist/scripts/bootstrap-tests.js +1383 -128
  83. package/dist/scripts/build-changelog.js +89 -130
  84. package/dist/scripts/build-metrics-report.js +135 -143
  85. package/dist/scripts/changelog-tests.js +35 -82
  86. package/dist/scripts/channel-probe-tests.js +44 -116
  87. package/dist/scripts/channel-probe.js +84 -167
  88. package/dist/scripts/channel-registry-tests.js +97 -185
  89. package/dist/scripts/companion-tests.js +25 -70
  90. package/dist/scripts/dida-cookie-probe.js +87 -0
  91. package/dist/scripts/dida-sw-probe.js +114 -0
  92. package/dist/scripts/diff-test.js +17 -12
  93. package/dist/scripts/doctor-tests.js +428 -120
  94. package/dist/scripts/dsh-artifact-e2e.js +150 -0
  95. package/dist/scripts/dsh-artifact-web-e2e.js +443 -0
  96. package/dist/scripts/dsh-http-proxy-sse-proof.js +90 -0
  97. package/dist/scripts/dsh-runtime-closure-tests.js +110 -153
  98. package/dist/scripts/dsh-runtime-closure.js +75 -63
  99. package/dist/scripts/dsh-session-v3-migration-proof.js +106 -0
  100. package/dist/scripts/dsh-subprocess-local-proof.js +149 -0
  101. package/dist/scripts/dsh-target-closure-proof.js +178 -0
  102. package/dist/scripts/effect-tests.js +165 -552
  103. package/dist/scripts/engine-run.js +1 -3
  104. package/dist/scripts/engine-tests.js +16 -10
  105. package/dist/scripts/evaluation-cadence-tests.js +69 -242
  106. package/dist/scripts/evaluation-contract-tests.js +193 -499
  107. package/dist/scripts/extension-distribution-cli.js +19 -15
  108. package/dist/scripts/extension-distribution-tests.js +98 -211
  109. package/dist/scripts/extension-tests.js +366 -389
  110. package/dist/scripts/fact-gate-tests.js +725 -263
  111. package/dist/scripts/fixtures/extension-bridge-unref-child.mjs +21 -0
  112. package/dist/scripts/flight-hotel-anchor-363-registered-e2e.js +169 -0
  113. package/dist/scripts/flight-malformed-tests.js +159 -0
  114. package/dist/scripts/flyai-tests.js +325 -68
  115. package/dist/scripts/g5-guard-tests.js +131 -0
  116. package/dist/scripts/g5-guard.js +189 -0
  117. package/dist/scripts/gen-lunar-anchors.js +106 -0
  118. package/dist/scripts/gotry-backend-kernel-tests.js +79 -0
  119. package/dist/scripts/ground-transfer-tests.js +956 -0
  120. package/dist/scripts/hbcli-e2e-tests.js +71 -90
  121. package/dist/scripts/hbcli-live-optin-tests.js +96 -0
  122. package/dist/scripts/hbcli-release-contract-tests.js +122 -0
  123. package/dist/scripts/hbcli-tests.js +41 -115
  124. package/dist/scripts/health-watch-cli.js +42 -28
  125. package/dist/scripts/hotel-date-gate-tests.js +496 -0
  126. package/dist/scripts/hotelbyte-reconcile-tests.js +141 -0
  127. package/dist/scripts/hotelbyte-spawn-e2e-tests.js +373 -0
  128. package/dist/scripts/i18n-tests.js +16 -9
  129. package/dist/scripts/incident-tests.js +281 -87
  130. package/dist/scripts/issue-194-job-id-guard-tests.js +106 -0
  131. package/dist/scripts/issue-233-cancel-refund-commission-tests.js +392 -0
  132. package/dist/scripts/issue-271-liveness-tests.js +547 -0
  133. package/dist/scripts/issue-289-model-retry-real-tests.js +296 -0
  134. package/dist/scripts/issue-289-model-retry-tests.js +441 -0
  135. package/dist/scripts/issue-289-web-retry-e2e.js +630 -0
  136. package/dist/scripts/issue-338-home-city-e2e.js +577 -0
  137. package/dist/scripts/issue343-real-entry-e2e.js +160 -0
  138. package/dist/scripts/journey-tests.js +22 -27
  139. package/dist/scripts/kernel-manifest-evidence.js +109 -0
  140. package/dist/scripts/kernel-manifest-gate.js +126 -0
  141. package/dist/scripts/kernel-manifest-tests.js +212 -0
  142. package/dist/scripts/kernel-manifest-trace-entry.js +7 -0
  143. package/dist/scripts/kernel-manifest-trace-hook.mjs +28 -0
  144. package/dist/scripts/kernel-manifest.js +369 -0
  145. package/dist/scripts/ledger-repair-apply-tests.js +316 -0
  146. package/dist/scripts/ledger-repair-plan-tests.js +375 -0
  147. package/dist/scripts/ledger-tests.js +325 -340
  148. package/dist/scripts/ledger-workflow-crash.js +10 -20
  149. package/dist/scripts/map-tools-vendor-package-proof.js +206 -134
  150. package/dist/scripts/memory-capture-tests.js +242 -61
  151. package/dist/scripts/memory-decay-tests.js +18 -52
  152. package/dist/scripts/memory-lifecycle-tests.js +657 -0
  153. package/dist/scripts/memory-lifecycle.js +196 -0
  154. package/dist/scripts/memory-metrics.js +24 -12
  155. package/dist/scripts/memory-value-report.js +474 -222
  156. package/dist/scripts/memory-value-tests.js +328 -0
  157. package/dist/scripts/metrics-report-tests.js +62 -199
  158. package/dist/scripts/model-override-e2e.js +66 -105
  159. package/dist/scripts/nightly-evidence-tests.js +64 -89
  160. package/dist/scripts/nightly-evidence.js +108 -111
  161. package/dist/scripts/nudge-digest.js +39 -28
  162. package/dist/scripts/onboarding-tests.js +63 -88
  163. package/dist/scripts/opensky-check.js +18 -13
  164. package/dist/scripts/opensky-tests.js +28 -28
  165. package/dist/scripts/persona-surface-guard-tests.js +37 -12
  166. package/dist/scripts/pnpm-dsh-closure-proof.js +2 -5
  167. package/dist/scripts/policy-anchor-359-registered-e2e.js +214 -0
  168. package/dist/scripts/price-drift-tests.js +126 -227
  169. package/dist/scripts/price-drift-watch.js +209 -253
  170. package/dist/scripts/probe-poi-tests.js +52 -45
  171. package/dist/scripts/product-metrics.js +187 -273
  172. package/dist/scripts/publish-preverify.js +47 -41
  173. package/dist/scripts/realtime-pricing-tests.js +37 -76
  174. package/dist/scripts/replay-async.js +20 -18
  175. package/dist/scripts/replay-real.js +16 -18
  176. package/dist/scripts/replay.js +52 -82
  177. package/dist/scripts/session-attach-diagnose.js +16 -12
  178. package/dist/scripts/session-attach-poc.js +34 -37
  179. package/dist/scripts/session-benchmark.js +66 -147
  180. package/dist/scripts/session-dida-live-e2e.js +151 -0
  181. package/dist/scripts/session-extract-tests.js +14 -35
  182. package/dist/scripts/session-login.js +14 -13
  183. package/dist/scripts/session-tests.js +545 -583
  184. package/dist/scripts/sf-live-benchmark.js +92 -110
  185. package/dist/scripts/sf-live-cli-tests.js +2 -9
  186. package/dist/scripts/sf-soft-score-tests.js +19 -60
  187. package/dist/scripts/sf-summary-tests.js +149 -0
  188. package/dist/scripts/sf-summary.js +466 -84
  189. package/dist/scripts/skeleton-check.js +16 -14
  190. package/dist/scripts/skeleton-integration-test.js +11 -10
  191. package/dist/scripts/skills-contract-tests.js +51 -46
  192. package/dist/scripts/smoke-session-gate-tests.js +12 -20
  193. package/dist/scripts/smoke.js +541 -422
  194. package/dist/scripts/sponsor-reuse-tests.js +262 -0
  195. package/dist/scripts/state-cli-tests.js +226 -101
  196. package/dist/scripts/state-cli.js +549 -212
  197. package/dist/scripts/static-golden-tests.js +46 -180
  198. package/dist/scripts/time-eval-tests.js +210 -192
  199. package/dist/scripts/travel-timeline-tests.js +29 -93
  200. package/dist/scripts/turn-handoff-collect-tests.js +46 -93
  201. package/dist/scripts/turn-handoff-collect.js +71 -99
  202. package/dist/scripts/turn-policy-tests.js +28 -29
  203. package/dist/scripts/typed-contract-canary.js +77 -162
  204. package/dist/scripts/tz-resolver-sanity.js +50 -0
  205. package/dist/scripts/tz-resolver-tests.js +584 -0
  206. package/dist/scripts/unified-tests.js +23 -19
  207. package/dist/scripts/visa-policy-tests.js +31 -44
  208. package/dist/scripts/weather-tests.js +121 -543
  209. package/dist/scripts/wish-channel-gate-tests.js +29 -86
  210. package/dist/scripts/write-gate-tests.js +522 -0
  211. package/dist/scripts/z3-lifecycle-fault-tests.js +188 -0
  212. package/dist/scripts/z3-lifecycle-tests.js +170 -0
  213. package/dist/scripts/z3-race-repeat-tests.js +39 -0
  214. package/dist/scripts/z3-race-tests.js +18 -12
  215. package/dist/src/artifact-gate.js +652 -221
  216. package/dist/src/backend/kernel.js +91 -0
  217. package/dist/src/backend/modules/booking-copilot.js +55 -0
  218. package/dist/src/backend/modules/booking-executor.js +124 -0
  219. package/dist/src/backend/modules/session-search.js +194 -0
  220. package/dist/src/benchmark-agent-conformance.js +296 -262
  221. package/dist/src/benchmark-environment-bridge.js +298 -413
  222. package/dist/src/benchmark-headless-child-diagnostics.js +93 -100
  223. package/dist/src/benchmark-tool-isolation.js +94 -67
  224. package/dist/src/bookable-facts.js +299 -174
  225. package/dist/src/booking-saga.js +64 -120
  226. package/dist/src/booking-surface/availability-policy.js +443 -576
  227. package/dist/src/booking-surface/cancel-refund-commission.js +379 -0
  228. package/dist/src/booking-surface/contracts.js +24 -80
  229. package/dist/src/booking-surface/dsh-planner.js +510 -281
  230. package/dist/src/booking-surface/dsh-plugin.js +17 -1
  231. package/dist/src/booking-surface/error-codes.js +82 -10
  232. package/dist/src/booking-surface/index.js +0 -3
  233. package/dist/src/booking-surface/profile.js +10 -54
  234. package/dist/src/booking-surface/recovery-chain.js +367 -0
  235. package/dist/src/booking-surface/runtime.js +765 -891
  236. package/dist/src/booking-surface/server.js +200 -251
  237. package/dist/src/booking-surface/startup.js +58 -54
  238. package/dist/src/booking-surface/validation.js +150 -218
  239. package/dist/src/bridge.js +20 -13
  240. package/dist/src/companions.js +48 -74
  241. package/dist/src/contracts.js +21 -43
  242. package/dist/src/dsh-llm.js +82 -120
  243. package/dist/src/engine.js +253 -239
  244. package/dist/src/evaluation-cadence.js +72 -209
  245. package/dist/src/evaluation-contracts.js +220 -843
  246. package/dist/src/flight-pack-adapter.js +54 -0
  247. package/dist/src/flight-pack-contract.js +2 -0
  248. package/dist/src/gotry-backend.js +70 -0
  249. package/dist/src/hotel-date-gate.js +118 -0
  250. package/dist/src/i18n.js +18 -7
  251. package/dist/src/index.js +1425 -1629
  252. package/dist/src/journey.js +132 -81
  253. package/dist/src/ledger-repair-apply.js +538 -0
  254. package/dist/src/ledger-repair-plan.js +463 -0
  255. package/dist/src/loop.js +257 -166
  256. package/dist/src/memory-capture.js +180 -32
  257. package/dist/src/memory-decay.js +30 -14
  258. package/dist/src/memory-lifecycle.js +1310 -0
  259. package/dist/src/memory-utility.js +27 -40
  260. package/dist/src/mock-llm.js +36 -61
  261. package/dist/src/model.js +81 -36
  262. package/dist/src/realtime-pricing.js +63 -72
  263. package/dist/src/slot-spec.js +84 -106
  264. package/dist/src/state-ledger.js +310 -471
  265. package/dist/src/subagent-job-id-guard.js +58 -0
  266. package/dist/src/time-anchor.js +231 -33
  267. package/dist/src/tool-packet.js +20 -8
  268. package/dist/src/travel-slots.js +58 -35
  269. package/dist/src/travel-timeline.js +44 -63
  270. package/dist/src/turn-deadline.js +121 -127
  271. package/dist/src/turn-policy.js +61 -89
  272. package/dist/src/tz-resolver.js +143 -0
  273. package/dist/src/unified.js +504 -381
  274. package/dist/src/wish-pool.js +39 -14
  275. package/dist/src/write-gate.js +495 -0
  276. package/dist/src/z3-shared.js +273 -7
  277. package/extension/README.md +4 -3
  278. package/extension/background.js +125 -14
  279. package/extension/content-bridge.js +23 -1
  280. package/extension/content-main.js +15 -4
  281. package/extension/manifest.json +16 -8
  282. package/package.json +251 -220
  283. package/ts/capabilities/agent-reach.ts +4 -4
  284. package/ts/capabilities/anything.ts +1 -1
  285. package/ts/capabilities/artifacts.ts +46 -9
  286. package/ts/capabilities/flyai.ts +156 -37
  287. package/ts/capabilities/hbcli.ts +1 -1
  288. package/ts/capabilities/incident-log.ts +88 -59
  289. package/ts/capabilities/session/adapters/ctrip-flight.ts +99 -36
  290. package/ts/capabilities/session/adapters/dida-portal.ts +250 -0
  291. package/ts/capabilities/session/adapters/rail-12306.ts +123 -24
  292. package/ts/capabilities/session/extension-bridge.ts +226 -101
  293. package/ts/capabilities/session/extension-channel.ts +22 -9
  294. package/ts/capabilities/session/wizard.ts +2 -2
  295. package/ts/capabilities/session-consent.ts +98 -14
  296. package/ts/capabilities/session-login.ts +1 -0
  297. package/ts/capabilities/session-search.ts +315 -31
  298. package/ts/dsh-runtime/vendor/README.md +8 -4
  299. package/ts/dsh-runtime/vendor/dsh-map-tools/README.en.md +7 -1
  300. package/ts/dsh-runtime/vendor/dsh-map-tools/README.md +5 -3
  301. package/ts/dsh-runtime/vendor/dsh-map-tools/lib/settings-ns.js +1 -1
  302. package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types/settings-ns.d.ts +1 -1
  303. package/ts/dsh-runtime/vendor/dsh-map-tools/package.json +6 -6
  304. package/ts/package.json +236 -16
  305. package/ts/scripts/map-tools-vendor-package-proof.ts +152 -31
  306. package/ts/scripts/state-cli.ts +418 -51
  307. package/ts/src/artifact-gate.ts +561 -15
  308. package/ts/src/benchmark-environment-bridge.ts +37 -20
  309. package/ts/src/bookable-facts.ts +183 -7
  310. package/ts/src/booking-surface/cancel-refund-commission.ts +488 -0
  311. package/ts/src/booking-surface/dsh-planner.ts +240 -32
  312. package/ts/src/booking-surface/dsh-plugin.js +17 -1
  313. package/ts/src/booking-surface/error-codes.ts +75 -0
  314. package/ts/src/booking-surface/recovery-chain.ts +409 -0
  315. package/ts/src/booking-surface/server.ts +84 -51
  316. package/ts/src/booking-surface/validation.ts +2 -0
  317. package/ts/src/contracts.ts +12 -2
  318. package/ts/src/dsh-llm.ts +4 -8
  319. package/ts/src/index.ts +609 -90
  320. package/ts/src/loop.ts +116 -7
  321. package/ts/src/memory-capture.ts +227 -3
  322. package/ts/src/mock-llm.ts +4 -8
  323. package/ts/src/model.ts +88 -2
  324. package/ts/src/state-ledger.ts +47 -29
  325. package/ts/src/subagent-job-id-guard.ts +72 -0
  326. package/ts/src/time-anchor.ts +217 -13
  327. package/ts/src/unified.ts +316 -54
@@ -1,153 +1,161 @@
1
+ /**
2
+ * 通道注册表(channel registry)——检索通道的**单一数据来源**
3
+ * (docs/design/tool-orchestration-design.md §2.1,issue #106/#107/#108 编排设计)。
4
+ *
5
+ * 每行描述一条通道:覆盖意图 / 配额类 / 证据级 / 工具名 / setup 成本。
6
+ * persona 路由卡(renderRoutingCard → {{channel_routing_card}})、工具结果内的
7
+ * routing 建议字段(routingAdvice)、doctor 通道行,全部由本表**生成**——
8
+ * 加一个通道 = 这里加一行 + handler 一个 + 测试断言,prose 站点零手改。
9
+ *
10
+ * 编排语义(§3.3,founder D-8 拍板采纳):工具面保持平铺(ADR-18/persona (19)
11
+ * 判定不动),本模块只产出「健康态驱动的动态建议」——价值序 =
12
+ * lexicographic(可用性, 可靠性=证据级, 效率=成本/时延)。通道间在给定健康态
13
+ * 下相互独立,最优子结构成立,DP 退化为有序建议表;**建议不是派发**,
14
+ * 解译器不做隐藏改道(调用可审计性)。
15
+ *
16
+ * 配额分类(§3.2,D-7 拍板采纳):user-session=用户本人账号;user-key=用户自备
17
+ * 凭证;anonymous-trial=产品垫付导流层(达限即改道+升级指引);free-public=社区
18
+ * 公平使用;static=无配额估算(内部自动降级面,不进模型可选路由)。
19
+ *
20
+ * @module capabilities/channel-registry
21
+ */
1
22
  import { channelState } from './channel-health.js';
2
23
  export const CHANNELS = [
3
24
  {
4
25
  id: 'flyai',
5
26
  label: '飞猪官方 API',
6
27
  tool: 'gotry_flyai_search',
7
- intents: [
8
- 'search-flight',
9
- 'search-train',
10
- 'search-hotel'
11
- ],
28
+ intents: ['search-flight', 'search-train', 'search-hotel'],
12
29
  quotaClass: 'anonymous-trial',
13
30
  evidenceTag: '[实时API:flyai@ts]',
14
31
  tier: 'realtime-api',
15
32
  efficiencyRank: 0,
16
- setup: '零 setup(匿名试用共享池,易达限;正式 key 配 FLYAI_API_KEY 解除)'
33
+ setup: '零 setup(匿名试用共享池,易达限;正式 key 配 FLYAI_API_KEY 解除)',
17
34
  },
18
35
  {
19
36
  id: 'hbcli-hotel',
20
37
  label: 'hbcli 酒店实时源',
21
38
  tool: 'gotry_hotel_search',
22
- intents: [
23
- 'search-hotel'
24
- ],
39
+ intents: ['search-hotel'],
25
40
  quotaClass: 'user-key',
26
41
  evidenceTag: '[实时API:hbcli@ts]',
27
42
  tier: 'realtime-api',
28
43
  efficiencyRank: 1,
29
- setup: 'hbcli 凭证(demo 沙箱一键);未装自动降静态包'
44
+ setup: 'hbcli 凭证(demo 沙箱一键);未装自动降静态包',
30
45
  },
31
46
  {
32
47
  id: 'session:ctrip-flight',
33
48
  label: '携程·用户登录态',
34
49
  tool: 'gotry_session_search',
35
- intents: [
36
- 'search-flight'
37
- ],
50
+ intents: ['search-flight'],
38
51
  quotaClass: 'user-session',
39
52
  evidenceTag: '[会话:ctrip-flight@ts]',
40
53
  tier: 'session',
41
54
  efficiencyRank: 2,
42
55
  setup: '一次性装 Session Bridge 扩展 + 授权卡 + (如需)官网登录',
43
- hint: 'kind=flight'
56
+ hint: 'kind=flight',
44
57
  },
45
58
  {
46
59
  id: 'session:ctrip-hotel',
47
60
  label: '携程·用户登录态',
48
61
  tool: 'gotry_session_search',
49
- intents: [
50
- 'search-hotel'
51
- ],
62
+ intents: ['search-hotel'],
52
63
  quotaClass: 'user-session',
53
64
  evidenceTag: '[会话:ctrip-hotel@ts]',
54
65
  tier: 'session',
55
66
  efficiencyRank: 2,
56
67
  setup: '一次性装 Session Bridge 扩展 + 授权卡 + (如需)官网登录',
57
- hint: 'kind=hotel'
68
+ hint: 'kind=hotel',
69
+ },
70
+ {
71
+ id: 'session:dida-portal',
72
+ label: 'Dida 供应商门户·用户登录态',
73
+ tool: 'gotry_session_search',
74
+ intents: ['search-hotel'],
75
+ quotaClass: 'user-session',
76
+ evidenceTag: '[会话:dida-portal@ts]',
77
+ tier: 'session',
78
+ efficiencyRank: 2,
79
+ setup: '一次性装 Session Bridge 扩展 + 授权卡 + hotel-be portal 自动登录跳板(dida 官网由人完成登录)',
80
+ hint: 'kind=dida',
58
81
  },
59
82
  {
60
83
  id: 'session:12306-train',
61
84
  label: '12306 公开查询面',
62
85
  tool: 'gotry_session_search',
63
- intents: [
64
- 'search-train'
65
- ],
86
+ intents: ['search-train'],
66
87
  quotaClass: 'user-session',
67
88
  evidenceTag: '[会话:train-12306@ts]',
68
89
  tier: 'session',
69
90
  efficiencyRank: 2,
70
91
  setup: '一次性装 Session Bridge 扩展(公开查询面,无需登录)',
71
- hint: 'kind=train'
92
+ hint: 'kind=train',
72
93
  },
73
94
  {
74
95
  id: 'anything-geo',
75
96
  label: '目的地/酒店候选(hotel-be)',
76
97
  tool: 'gotry_anything_search',
77
- intents: [
78
- 'search-geo'
79
- ],
98
+ intents: ['search-geo'],
80
99
  quotaClass: 'user-key',
81
100
  evidenceTag: '[实时API:hbcli-anything@ts]',
82
101
  tier: 'realtime-api',
83
102
  efficiencyRank: 1,
84
- setup: 'hbcli 可达即可(随 hbcli 安装)'
103
+ setup: 'hbcli 可达即可(随 hbcli 安装)',
85
104
  },
86
105
  {
87
106
  id: 'open-meteo',
88
107
  label: '天气(open-meteo)',
89
108
  tool: 'gotry_weather_check',
90
- intents: [
91
- 'weather'
92
- ],
109
+ intents: ['weather'],
93
110
  quotaClass: 'free-public',
94
111
  evidenceTag: '[实时API:open-meteo@ts]',
95
112
  tier: 'realtime-api',
96
- efficiencyRank: 0
113
+ efficiencyRank: 0,
97
114
  },
98
115
  {
99
116
  id: 'opensky',
100
117
  label: '航班实时印证(OpenSky)',
101
118
  tool: 'gotry_flight_verify',
102
- intents: [
103
- 'verify-flight'
104
- ],
119
+ intents: ['verify-flight'],
105
120
  quotaClass: 'free-public',
106
121
  evidenceTag: '[实时API:opensky@ts]',
107
122
  tier: 'realtime-api',
108
- efficiencyRank: 0
123
+ efficiencyRank: 0,
109
124
  },
110
125
  {
111
126
  id: 'web-read',
112
127
  label: '网页读取兜底(agent-reach)',
113
128
  tool: 'gotry_web_search',
114
- intents: [
115
- 'read-web',
116
- 'search-flight',
117
- 'search-train',
118
- 'search-hotel'
119
- ],
129
+ intents: ['read-web', 'search-flight', 'search-train', 'search-hotel'],
120
130
  quotaClass: 'user-key',
121
131
  evidenceTag: '[agent-reach:web.read@ts]',
122
132
  tier: 'best-effort',
123
133
  efficiencyRank: 3,
124
- setup: 'gotry .venv 装 agent-reach(npx gotry doctor --fix)'
134
+ setup: 'gotry .venv 装 agent-reach(npx @danceiny/gotry doctor --fix)',
125
135
  },
126
136
  {
127
137
  id: 'static-hotel',
128
138
  label: '内置静态数据包',
129
139
  tool: 'gotry_hotel_search',
130
- intents: [
131
- 'search-hotel'
132
- ],
140
+ intents: ['search-hotel'],
133
141
  quotaClass: 'static',
134
142
  evidenceTag: '[静态包:估算]',
135
143
  tier: 'static',
136
144
  efficiencyRank: 9,
137
- routable: false
138
- }
145
+ routable: false,
146
+ },
139
147
  ];
140
148
  const TIER_RANK = {
141
149
  'realtime-api': 0,
142
150
  session: 1,
143
151
  'best-effort': 2,
144
- static: 3
152
+ static: 3,
145
153
  };
146
154
  const TIER_WHY = {
147
155
  'realtime-api': '官方结构化数据,证据链最强',
148
156
  'session': '用户本人登录态的真实价/库存',
149
157
  'best-effort': '非结构化兜底(读页汇总),证据弱于 API',
150
- 'static': '内置估算,仅覆盖内置场景'
158
+ 'static': '内置估算,仅覆盖内置场景',
151
159
  };
152
160
  export const INTENT_LABELS = {
153
161
  'search-flight': '机票',
@@ -156,58 +164,71 @@ export const INTENT_LABELS = {
156
164
  'search-geo': '目的地候选',
157
165
  'read-web': '网页/社媒',
158
166
  'weather': '天气',
159
- 'verify-flight': '航班印证'
167
+ 'verify-flight': '航班印证',
160
168
  };
169
+ /** 意图 → 候选通道(证据级降序,同 tier 按效率升序)。纯函数。 */
161
170
  export function channelsForIntent(intent) {
162
- return CHANNELS.filter((c)=>c.routable !== false && c.intents.includes(intent)).slice().sort((a, b)=>TIER_RANK[a.tier] - TIER_RANK[b.tier] || a.efficiencyRank - b.efficiencyRank);
171
+ return CHANNELS
172
+ .filter(c => c.routable !== false && c.intents.includes(intent))
173
+ .slice()
174
+ .sort((a, b) => TIER_RANK[a.tier] - TIER_RANK[b.tier] || a.efficiencyRank - b.efficiencyRank);
163
175
  }
176
+ /**
177
+ * 意图 × 健康态 → 有序改道建议(模型可见的 routing 字段形状)。
178
+ * 排除规则:发起通道本身;会话健康面标记为 down 的通道。
179
+ * cooldown 是瞬时节律,不算不可用(保留在表里,why 不变——模型自然
180
+ * 「稍候重试或其他」),down(配额尽/挑战/需登录/需扩展)才排除。
181
+ */
164
182
  export function routingAdvice(intent, opts = {}) {
165
- const alternatives = channelsForIntent(intent).filter((c)=>c.id !== opts.excludeChannel).filter((c)=>channelState(c.id, opts.now)?.state !== 'down').slice(0, opts.limit ?? 3).map((c)=>({
166
- tool: c.tool,
167
- channel: c.id,
168
- label: c.label,
169
- why: TIER_WHY[c.tier],
170
- ...c.setup ? {
171
- setup: c.setup
172
- } : {},
173
- ...c.hint ? {
174
- hint: c.hint
175
- } : {}
176
- }));
177
- return {
178
- intent,
179
- alternatives
180
- };
183
+ const alternatives = channelsForIntent(intent)
184
+ .filter(c => c.id !== opts.excludeChannel)
185
+ .filter(c => channelState(c.id, opts.now)?.state !== 'down')
186
+ .slice(0, opts.limit ?? 3)
187
+ .map(c => ({
188
+ tool: c.tool,
189
+ channel: c.id,
190
+ label: c.label,
191
+ why: TIER_WHY[c.tier],
192
+ ...(c.setup ? { setup: c.setup } : {}),
193
+ ...(c.hint ? { hint: c.hint } : {}),
194
+ }));
195
+ return { intent, alternatives };
181
196
  }
197
+ /**
198
+ * 工具描述首行生成(§3.3④,issue #113):某检索工具在注册表内服务的意图 →
199
+ * 「服务意图 × 当前通道顺位」卡,前置进工具描述——模型在选工具时(读描述)
200
+ * 与失败后(读 routing 字段)两个决策点拿到同一张表。顺位=证据级降序(与
201
+ * renderRoutingCard 同口径:通道状态变化不改变顺位表本身,只影响 routing
202
+ * 建议的可用性过滤)。注册表加行,描述首行自动一致,零手改。
203
+ * 非检索工具(不在表内)返回 '',描述保持原样。纯函数。
204
+ */
182
205
  export function toolRoutingHeadline(tool) {
183
206
  const intents = new Set();
184
- for (const c of CHANNELS){
185
- if (c.routable === false || c.tool !== tool) continue;
186
- for (const i of c.intents)intents.add(i);
207
+ for (const c of CHANNELS) {
208
+ if (c.routable === false || c.tool !== tool)
209
+ continue;
210
+ for (const i of c.intents)
211
+ intents.add(i);
187
212
  }
188
- if (intents.size === 0) return '';
189
- const lines = [
190
- ...intents
191
- ].map((intent)=>`- ${INTENT_LABELS[intent]}: ${channelsForIntent(intent).map((c)=>`${c.label}(${c.tool}${c.hint ? ` ${c.hint}` : ''})`).join('')}`);
192
- return [
193
- '本工具服务的检索意图与通道顺位(证据级降序):',
194
- ...lines,
195
- 'verdict≠hit 时按结果内 routing 字段改道下一通道,勿盲试同通道。'
196
- ].join('\n');
213
+ if (intents.size === 0)
214
+ return '';
215
+ const lines = [...intents].map(intent => `- ${INTENT_LABELS[intent]}: ${channelsForIntent(intent).map(c => `${c.label}(${c.tool}${c.hint ? ` ${c.hint}` : ''})`).join(' → ')}`);
216
+ return ['本工具服务的检索意图与通道顺位(证据级降序):', ...lines, 'verdict≠hit 时按结果内 routing 字段改道下一通道,勿盲试同通道。'].join('\n');
197
217
  }
218
+ /**
219
+ * persona 路由卡({{channel_routing_card}}):每意图一行顺位 + 额度口径脚注。
220
+ * 确定性渲染(零 IO,时钟只进脚注);只列有 ≥2 条可选通道的意图——
221
+ * 单通道意图没有路由选择,列了只是 token 噪声。
222
+ */
198
223
  export function renderRoutingCard(now = new Date()) {
199
- const multiChannel = Object.keys(INTENT_LABELS).map((intent)=>({
200
- intent,
201
- channels: channelsForIntent(intent)
202
- })).filter((x)=>x.channels.length >= 2);
203
- const lines = multiChannel.map(({ intent, channels })=>`- ${INTENT_LABELS[intent]}: ${channels.map((c)=>`${c.label}(${c.tool}${c.hint ? ` ${c.hint}` : ''})`).join(' → ')}`);
224
+ const multiChannel = Object.keys(INTENT_LABELS)
225
+ .map(intent => ({ intent, channels: channelsForIntent(intent) }))
226
+ .filter(x => x.channels.length >= 2);
227
+ const lines = multiChannel.map(({ intent, channels }) => `- ${INTENT_LABELS[intent]}: ${channels.map(c => `${c.label}(${c.tool}${c.hint ? ` ${c.hint}` : ''})`).join(' → ')}`);
204
228
  return [
205
229
  '检索通道顺位(官方API > 用户会话 > 网页兜底;某次检索 verdict≠hit 时,按该结果内 routing 字段改道下一通道,同通道本会话不盲试第二次):',
206
230
  ...lines,
207
231
  '额度口径:匿名试用=首次体验导流(达限即改道并提示配 key);正式 key(FLYAI_API_KEY/hbcli 凭证)与账号会话=正式用量;静态包=估算必标注。',
208
- `卡生成于 ${now.toISOString()}(通道状态变化不改变顺位表本身,只影响 routing 建议的可用性过滤)。`
232
+ `卡生成于 ${now.toISOString()}(通道状态变化不改变顺位表本身,只影响 routing 建议的可用性过滤)。`,
209
233
  ].join('\n');
210
234
  }
211
-
212
-
213
- //# sourceURL=ts/capabilities/channel-registry.ts