@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
@@ -47,7 +47,13 @@ dsh plugin --profile web add github:HorusJiang/dsh-map-tools
47
47
 
48
48
  > The published package ships **no** `prepare`/`postinstall` build scripts, so pnpm ≥10 installs it without prompting to allow build scripts or configuring `allowBuilds`.
49
49
 
50
- > **Version requirement**: from 0.5.0 on, this plugin is compatible with **DeepSeek Harness 0.1.2-rc.1 and newer** (including a source-built 0.1.3-alpha.1). Earlier Harness release lines are no longer supported because `@deepseek-ai/dsh-settings` removed its legacy API.
50
+ > **GoTry vendored patch notice**: this directory preserves the upstream
51
+ > `dsh-map-tools@0.5.1` MIT provenance, but GoTry's vendored adaptation is
52
+ > evidenced only against the root-locked **DeepSeek Harness 0.1.5-alpha.1**
53
+ > closure (0.1.2-alpha.3 historically compatible too). Its settings wiring uses
54
+ > the `SettingsProvider.prototype.installSection` method plus a plain string namespace
55
+ > (both published in 0.1.2-alpha.3 and 0.1.5-alpha.1);
56
+ > this is not an upstream compatibility claim for other Harness releases.
51
57
 
52
58
  Restart `dsh web` after install (or wait for HMR), then use the `map_*` tools in a session.
53
59
 
@@ -47,9 +47,11 @@ dsh plugin --profile web add github:HorusJiang/dsh-map-tools
47
47
 
48
48
  > 发布包不含 `prepare`/`postinstall` 等构建脚本,pnpm ≥10 安装时**无需**放行构建脚本、也无需配置 `allowBuilds`。
49
49
 
50
- > **版本要求**:自 0.5.0 起,本插件兼容 **DeepSeek Harness 0.1.2-rc.1 及以上**
51
- > (含源码构建的 0.1.3-alpha.1)。更早的 Harness 发布线因
52
- > `@deepseek-ai/dsh-settings` 移除旧 API 而不再支持。
50
+ > **GoTry vendored patch notice**:本目录保留上游 `dsh-map-tools@0.5.1` 的 MIT
51
+ > provenance,但 GoTry vendored adaptation 只对 root 锁定的
52
+ > **DeepSeek Harness 0.1.5-alpha.1** closure 提供兼容证据(0.1.2-alpha.3 历史亦兼容)。其 settings 接线
53
+ > 使用 `SettingsProvider.prototype.installSection` 方法和普通字符串 namespace(0.1.2-alpha.3 与 0.1.5-alpha.1 均已发布);
54
+ > 这不是对上游包其他 Harness 版本兼容性的声明。
53
55
 
54
56
  安装后**重启 `dsh web`**(或等待 HMR 热加载),在会话中即可使用 `map_*` 工具。
55
57
 
@@ -1,5 +1,5 @@
1
1
  import { Config as ConfigSchema } from './config.js';
2
- /** Namespace the settings page keys this plugin's card to (plain string since DSH 0.1.2-rc.1). */
2
+ /** Namespace the settings page keys this plugin's card to (plain string for DSH 0.1.5-alpha.1, unchanged from 0.1.2-alpha.3). */
3
3
  export const MAP_TOOLS_NS = 'dsh-map-tools';
4
4
  /**
5
5
  * Wire the settings section so the card renders. The values live in the
@@ -1,6 +1,6 @@
1
1
  import type { Context } from '@deepseek-ai/cordis';
2
2
  import type { Config as ConfigType } from './config.js';
3
- /** Namespace the settings page keys this plugin's card to (plain string since DSH 0.1.2-rc.1). */
3
+ /** Namespace the settings page keys this plugin's card to (plain string for DSH 0.1.5-alpha.1, unchanged from 0.1.2-alpha.3). */
4
4
  export declare const MAP_TOOLS_NS = "dsh-map-tools";
5
5
  /**
6
6
  * Wire the settings section so the card renders. The values live in the
@@ -49,16 +49,16 @@
49
49
  "homepage": "https://github.com/HorusJiang/dsh-map-tools#readme",
50
50
  "peerDependencies": {
51
51
  "@deepseek-ai/cordis": "^4.0.2",
52
- "@deepseek-ai/dsh-settings": ">=0.1.2-rc.1",
53
- "@deepseek-ai/dsh-tools": ">=0.1.2-rc.1"
52
+ "@deepseek-ai/dsh-settings": "0.1.5-alpha.1",
53
+ "@deepseek-ai/dsh-tools": "0.1.5-alpha.1"
54
54
  },
55
55
  "dependencies": {
56
56
  "@deepseek-ai/schemastery": "^3.18.2"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@deepseek-ai/cordis": "^4.0.2",
60
- "@deepseek-ai/dsh-settings": ">=0.1.2-rc.1",
61
- "@deepseek-ai/dsh-tools": ">=0.1.2-rc.1",
60
+ "@deepseek-ai/dsh-settings": "0.1.5-alpha.1",
61
+ "@deepseek-ai/dsh-tools": "0.1.5-alpha.1",
62
62
  "@deepseek-ai/schemastery": "^3.18.2",
63
63
  "@types/node": "^22.0.0",
64
64
  "typescript": "^5.6.0",
@@ -76,8 +76,8 @@
76
76
  },
77
77
  "compatibility": {
78
78
  "dshReleases": {
79
- "0.1.2-rc.1": "compatible",
80
- "0.1.3-alpha.1": "compatible"
79
+ "0.1.2-alpha.3": "compatible",
80
+ "0.1.5-alpha.1": "compatible"
81
81
  }
82
82
  }
83
83
  },
package/ts/package.json CHANGED
@@ -11,31 +11,251 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "@deepseek-ai/cordis": "4.0.2",
14
- "@deepseek-ai/dsh-session": "0.1.2-alpha.3",
15
- "@deepseek-ai/dsh-tools": "0.1.2-alpha.3",
14
+ "@deepseek-ai/dsh-sdk-client": "0.1.5-rc.1",
15
+ "@deepseek-ai/dsh-session": "0.1.5-rc.1",
16
+ "@deepseek-ai/dsh-tools": "0.1.5-rc.1",
16
17
  "@deepseek-ai/schemastery": "^3.18.2",
17
18
  "@types/better-sqlite3": "^9.6.0",
18
19
  "better-sqlite3": "^13.0.3",
19
20
  "z3-solver": "^5.2.0"
20
21
  },
21
22
  "overrides": {
22
- "@deepseek-ai/dsh-agent": "0.1.2-alpha.3",
23
- "@deepseek-ai/dsh-brand": "0.1.2-alpha.3",
24
- "@deepseek-ai/dsh-code-runtime": "0.1.2-alpha.3",
25
- "@deepseek-ai/dsh-invariants": "0.1.2-alpha.3",
26
- "@deepseek-ai/dsh-llm": "0.1.2-alpha.3",
27
- "@deepseek-ai/dsh-scope": "0.1.2-alpha.3",
28
- "@deepseek-ai/dsh-session": "0.1.2-alpha.3",
29
- "@deepseek-ai/dsh-session-projection": "0.1.2-alpha.3",
30
- "@deepseek-ai/dsh-system-prompt": "0.1.2-alpha.3",
31
- "@deepseek-ai/dsh-timeout": "0.1.2-alpha.3",
32
- "@deepseek-ai/dsh-typert-protocol": "0.1.2-alpha.3",
33
- "@deepseek-ai/dsh-user-approval": "0.1.2-alpha.3",
34
- "@deepseek-ai/dsh-util-crypto": "0.1.2-alpha.3",
35
- "@deepseek-ai/dsh-util-values": "0.1.2-alpha.3"
23
+ "@deepseek-ai/dsh": "0.1.5-rc.1",
24
+ "@deepseek-ai/dsh-acp": "0.1.5-rc.1",
25
+ "@deepseek-ai/dsh-acp-app": "0.1.5-rc.1",
26
+ "@deepseek-ai/dsh-agent": "0.1.5-rc.1",
27
+ "@deepseek-ai/dsh-agent-default-model": "0.1.5-rc.1",
28
+ "@deepseek-ai/dsh-agent-instructions": "0.1.5-rc.1",
29
+ "@deepseek-ai/dsh-agent-loop": "0.1.5-rc.1",
30
+ "@deepseek-ai/dsh-agent-presets": "0.1.5-rc.1",
31
+ "@deepseek-ai/dsh-agent-tool-presentation": "0.1.5-rc.1",
32
+ "@deepseek-ai/dsh-anonymous-user-id": "0.1.5-rc.1",
33
+ "@deepseek-ai/dsh-api-gateway": "0.1.5-rc.1",
34
+ "@deepseek-ai/dsh-api-remotes": "0.1.5-rc.1",
35
+ "@deepseek-ai/dsh-api-session-controller": "0.1.5-rc.1",
36
+ "@deepseek-ai/dsh-api-settings-controller": "0.1.5-rc.1",
37
+ "@deepseek-ai/dsh-api-workspace-controller": "0.1.5-rc.1",
38
+ "@deepseek-ai/dsh-api-workspace-files": "0.1.5-rc.1",
39
+ "@deepseek-ai/dsh-app-boot": "0.1.5-rc.1",
40
+ "@deepseek-ai/dsh-atomic-write": "0.1.5-rc.1",
41
+ "@deepseek-ai/dsh-attachment": "0.1.5-rc.1",
42
+ "@deepseek-ai/dsh-attachment-local": "0.1.5-rc.1",
43
+ "@deepseek-ai/dsh-authorization": "0.1.5-rc.1",
44
+ "@deepseek-ai/dsh-base": "0.1.5-rc.1",
45
+ "@deepseek-ai/dsh-bash-local": "0.1.5-rc.1",
46
+ "@deepseek-ai/dsh-bash-sandbox": "0.1.5-rc.1",
47
+ "@deepseek-ai/dsh-brand": "0.1.5-rc.1",
48
+ "@deepseek-ai/dsh-chunked-list": "0.1.5-rc.1",
49
+ "@deepseek-ai/dsh-client-connection": "0.1.5-rc.1",
50
+ "@deepseek-ai/dsh-client-file-upload": "0.1.5-rc.1",
51
+ "@deepseek-ai/dsh-client-hmr": "0.1.5-rc.1",
52
+ "@deepseek-ai/dsh-client-locale": "0.1.5-rc.1",
53
+ "@deepseek-ai/dsh-client-modules": "0.1.5-rc.1",
54
+ "@deepseek-ai/dsh-client-resources": "0.1.5-rc.1",
55
+ "@deepseek-ai/dsh-client-ui-agent-preset": "0.1.5-rc.1",
56
+ "@deepseek-ai/dsh-client-ui-approval": "0.1.5-rc.1",
57
+ "@deepseek-ai/dsh-client-ui-attachment": "0.1.5-rc.1",
58
+ "@deepseek-ai/dsh-client-ui-brand-official": "0.1.5-rc.1",
59
+ "@deepseek-ai/dsh-client-ui-chat": "0.1.5-rc.1",
60
+ "@deepseek-ai/dsh-client-ui-commands": "0.1.5-rc.1",
61
+ "@deepseek-ai/dsh-client-ui-conversation": "0.1.5-rc.1",
62
+ "@deepseek-ai/dsh-client-ui-cordis": "0.1.5-rc.1",
63
+ "@deepseek-ai/dsh-client-ui-deliverables": "0.1.5-rc.1",
64
+ "@deepseek-ai/dsh-client-ui-directory-picker-browse": "0.1.5-rc.1",
65
+ "@deepseek-ai/dsh-client-ui-directory-picker-native": "0.1.5-rc.1",
66
+ "@deepseek-ai/dsh-client-ui-goal": "0.1.5-rc.1",
67
+ "@deepseek-ai/dsh-client-ui-input-trigger": "0.1.5-rc.1",
68
+ "@deepseek-ai/dsh-client-ui-jobs": "0.1.5-rc.1",
69
+ "@deepseek-ai/dsh-client-ui-layout": "0.1.5-rc.1",
70
+ "@deepseek-ai/dsh-client-ui-message-feedback": "0.1.5-rc.1",
71
+ "@deepseek-ai/dsh-client-ui-model-selection": "0.1.5-rc.1",
72
+ "@deepseek-ai/dsh-client-ui-open-in-app": "0.1.5-rc.1",
73
+ "@deepseek-ai/dsh-client-ui-permission-presets": "0.1.5-rc.1",
74
+ "@deepseek-ai/dsh-client-ui-plan": "0.1.5-rc.1",
75
+ "@deepseek-ai/dsh-client-ui-reference": "0.1.5-rc.1",
76
+ "@deepseek-ai/dsh-client-ui-renderer": "0.1.5-rc.1",
77
+ "@deepseek-ai/dsh-client-ui-schedule": "0.1.5-rc.1",
78
+ "@deepseek-ai/dsh-client-ui-session": "0.1.5-rc.1",
79
+ "@deepseek-ai/dsh-client-ui-settings": "0.1.5-rc.1",
80
+ "@deepseek-ai/dsh-client-ui-settings-general": "0.1.5-rc.1",
81
+ "@deepseek-ai/dsh-client-ui-settings-models": "0.1.5-rc.1",
82
+ "@deepseek-ai/dsh-client-ui-settings-plugin-inventory": "0.1.5-rc.1",
83
+ "@deepseek-ai/dsh-client-ui-settings-plugins": "0.1.5-rc.1",
84
+ "@deepseek-ai/dsh-client-ui-sidebar": "0.1.5-rc.1",
85
+ "@deepseek-ai/dsh-client-ui-sidebar-documentpreview": "0.1.5-rc.1",
86
+ "@deepseek-ai/dsh-client-ui-sidebar-files": "0.1.5-rc.1",
87
+ "@deepseek-ai/dsh-client-ui-sidebar-right": "0.1.5-rc.1",
88
+ "@deepseek-ai/dsh-client-ui-skill": "0.1.5-rc.1",
89
+ "@deepseek-ai/dsh-client-ui-subagent": "0.1.5-rc.1",
90
+ "@deepseek-ai/dsh-client-ui-theme": "0.1.5-rc.1",
91
+ "@deepseek-ai/dsh-client-ui-tool": "0.1.5-rc.1",
92
+ "@deepseek-ai/dsh-client-ui-trajectory": "0.1.5-rc.1",
93
+ "@deepseek-ai/dsh-client-ui-user-questions": "0.1.5-rc.1",
94
+ "@deepseek-ai/dsh-client-ui-workflow-run": "0.1.5-rc.1",
95
+ "@deepseek-ai/dsh-client-ui-workspace": "0.1.5-rc.1",
96
+ "@deepseek-ai/dsh-cmdline": "0.1.5-rc.1",
97
+ "@deepseek-ai/dsh-code-runtime": "0.1.5-rc.1",
98
+ "@deepseek-ai/dsh-code-runtime-worker-thread": "0.1.5-rc.1",
99
+ "@deepseek-ai/dsh-command-compact": "0.1.5-rc.1",
100
+ "@deepseek-ai/dsh-command-feedback": "0.1.5-rc.1",
101
+ "@deepseek-ai/dsh-command-goal": "0.1.5-rc.1",
102
+ "@deepseek-ai/dsh-commands": "0.1.5-rc.1",
103
+ "@deepseek-ai/dsh-compaction": "0.1.5-rc.1",
104
+ "@deepseek-ai/dsh-compaction-basic": "0.1.5-rc.1",
105
+ "@deepseek-ai/dsh-compaction-tool-result-pruner": "0.1.5-rc.1",
106
+ "@deepseek-ai/dsh-cordis-client-runner": "0.1.5-rc.1",
107
+ "@deepseek-ai/dsh-cordis-host-runner": "0.1.5-rc.1",
108
+ "@deepseek-ai/dsh-credentials": "0.1.5-rc.1",
109
+ "@deepseek-ai/dsh-credentials-local": "0.1.5-rc.1",
110
+ "@deepseek-ai/dsh-deepseek-llm-api-extensions": "0.1.5-rc.1",
111
+ "@deepseek-ai/dsh-deque": "0.1.5-rc.1",
112
+ "@deepseek-ai/dsh-file-reference": "0.1.5-rc.1",
113
+ "@deepseek-ai/dsh-file-reference-local": "0.1.5-rc.1",
114
+ "@deepseek-ai/dsh-fs": "0.1.5-rc.1",
115
+ "@deepseek-ai/dsh-fs-local": "0.1.5-rc.1",
116
+ "@deepseek-ai/dsh-fs-observation-policy": "0.1.5-rc.1",
117
+ "@deepseek-ai/dsh-fs-sandbox": "0.1.5-rc.1",
118
+ "@deepseek-ai/dsh-goal": "0.1.5-rc.1",
119
+ "@deepseek-ai/dsh-goal-round-driver": "0.1.5-rc.1",
120
+ "@deepseek-ai/dsh-headless": "0.1.5-rc.1",
121
+ "@deepseek-ai/dsh-home-paths": "0.1.5-rc.1",
122
+ "@deepseek-ai/dsh-hook-protocol": "0.1.5-rc.1",
123
+ "@deepseek-ai/dsh-hooks-claude-code": "0.1.5-rc.1",
124
+ "@deepseek-ai/dsh-hooks-codex": "0.1.5-rc.1",
125
+ "@deepseek-ai/dsh-host-directory-picker": "0.1.5-rc.1",
126
+ "@deepseek-ai/dsh-host-directory-picker-auto": "0.1.5-rc.1",
127
+ "@deepseek-ai/dsh-host-directory-picker-browse": "0.1.5-rc.1",
128
+ "@deepseek-ai/dsh-host-directory-picker-native": "0.1.5-rc.1",
129
+ "@deepseek-ai/dsh-host-frontend-static": "0.1.5-rc.1",
130
+ "@deepseek-ai/dsh-host-open-in-app": "0.1.5-rc.1",
131
+ "@deepseek-ai/dsh-host-plugin-inventory": "0.1.5-rc.1",
132
+ "@deepseek-ai/dsh-host-webserver": "0.1.5-rc.1",
133
+ "@deepseek-ai/dsh-http-proxy": "0.1.5-rc.1",
134
+ "@deepseek-ai/dsh-invariants": "0.1.5-rc.1",
135
+ "@deepseek-ai/dsh-jobs": "0.1.5-rc.1",
136
+ "@deepseek-ai/dsh-jobs-local": "0.1.5-rc.1",
137
+ "@deepseek-ai/dsh-launch-environment": "0.1.5-rc.1",
138
+ "@deepseek-ai/dsh-llm": "0.1.5-rc.1",
139
+ "@deepseek-ai/dsh-llm-deepseek": "0.1.5-rc.1",
140
+ "@deepseek-ai/dsh-llm-pi-ai": "0.1.5-rc.1",
141
+ "@deepseek-ai/dsh-llm-retry": "0.1.5-rc.1",
142
+ "@deepseek-ai/dsh-mcp-client": "0.1.5-rc.1",
143
+ "@deepseek-ai/dsh-message-feedback": "0.1.5-rc.1",
144
+ "@deepseek-ai/dsh-native-command": "0.1.5-rc.1",
145
+ "@deepseek-ai/dsh-output-retention": "0.1.5-rc.1",
146
+ "@deepseek-ai/dsh-package-manifest": "0.1.5-rc.1",
147
+ "@deepseek-ai/dsh-permission-presets": "0.1.5-rc.1",
148
+ "@deepseek-ai/dsh-persona": "0.1.5-rc.1",
149
+ "@deepseek-ai/dsh-plan-mode": "0.1.5-rc.1",
150
+ "@deepseek-ai/dsh-plugin-package-inventory-deepseek": "0.1.5-rc.1",
151
+ "@deepseek-ai/dsh-pwsh-local": "0.1.5-rc.1",
152
+ "@deepseek-ai/dsh-pwsh-sandbox": "0.1.5-rc.1",
153
+ "@deepseek-ai/dsh-repeat-tool-reminder": "0.1.5-rc.1",
154
+ "@deepseek-ai/dsh-sandbox": "0.1.5-rc.1",
155
+ "@deepseek-ai/dsh-sandbox-local": "0.1.5-rc.1",
156
+ "@deepseek-ai/dsh-sandbox-policy": "0.1.5-rc.1",
157
+ "@deepseek-ai/dsh-sandbox-windows-acl": "0.1.5-rc.1",
158
+ "@deepseek-ai/dsh-schedule": "0.1.5-rc.1",
159
+ "@deepseek-ai/dsh-scope": "0.1.5-rc.1",
160
+ "@deepseek-ai/dsh-sdk-app": "0.1.5-rc.1",
161
+ "@deepseek-ai/dsh-sdk-client": "0.1.5-rc.1",
162
+ "@deepseek-ai/dsh-sdk-jsonrpc-server": "0.1.5-rc.1",
163
+ "@deepseek-ai/dsh-sdk-minimal": "0.1.5-rc.1",
164
+ "@deepseek-ai/dsh-sdk-protocol": "0.1.5-rc.1",
165
+ "@deepseek-ai/dsh-session": "0.1.5-rc.1",
166
+ "@deepseek-ai/dsh-session-checkpoint-policy": "0.1.5-rc.1",
167
+ "@deepseek-ai/dsh-session-format": "0.1.5-rc.1",
168
+ "@deepseek-ai/dsh-session-format-catalog": "0.1.5-rc.1",
169
+ "@deepseek-ai/dsh-session-format-v0-to-v1": "0.1.5-rc.1",
170
+ "@deepseek-ai/dsh-session-format-v1-to-v2": "0.1.5-rc.1",
171
+ "@deepseek-ai/dsh-session-format-v2-to-v3": "0.1.5-rc.1",
172
+ "@deepseek-ai/dsh-session-log-deepseek": "0.1.5-rc.1",
173
+ "@deepseek-ai/dsh-session-log-export": "0.1.5-rc.1",
174
+ "@deepseek-ai/dsh-session-persistence": "0.1.5-rc.1",
175
+ "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.5-rc.1",
176
+ "@deepseek-ai/dsh-session-projection": "0.1.5-rc.1",
177
+ "@deepseek-ai/dsh-session-projection-cache": "0.1.5-rc.1",
178
+ "@deepseek-ai/dsh-session-query": "0.1.5-rc.1",
179
+ "@deepseek-ai/dsh-session-query-sqlite": "0.1.5-rc.1",
180
+ "@deepseek-ai/dsh-session-reference": "0.1.5-rc.1",
181
+ "@deepseek-ai/dsh-session-stats": "0.1.5-rc.1",
182
+ "@deepseek-ai/dsh-session-telemetry": "0.1.5-rc.1",
183
+ "@deepseek-ai/dsh-session-telemetry-otel": "0.1.5-rc.1",
184
+ "@deepseek-ai/dsh-session-title": "0.1.5-rc.1",
185
+ "@deepseek-ai/dsh-session-title-first-prompt-llm": "0.1.5-rc.1",
186
+ "@deepseek-ai/dsh-session-title-llm": "0.1.5-rc.1",
187
+ "@deepseek-ai/dsh-session-turn-outline": "0.1.5-rc.1",
188
+ "@deepseek-ai/dsh-settings": "0.1.5-rc.1",
189
+ "@deepseek-ai/dsh-settings-file": "0.1.5-rc.1",
190
+ "@deepseek-ai/dsh-shell": "0.1.5-rc.1",
191
+ "@deepseek-ai/dsh-shell-env": "0.1.5-rc.1",
192
+ "@deepseek-ai/dsh-skill": "0.1.5-rc.1",
193
+ "@deepseek-ai/dsh-skill-badge": "0.1.5-rc.1",
194
+ "@deepseek-ai/dsh-skill-filesystem": "0.1.5-rc.1",
195
+ "@deepseek-ai/dsh-spill": "0.1.5-rc.1",
196
+ "@deepseek-ai/dsh-spill-local": "0.1.5-rc.1",
197
+ "@deepseek-ai/dsh-spill-policy": "0.1.5-rc.1",
198
+ "@deepseek-ai/dsh-storage": "0.1.5-rc.1",
199
+ "@deepseek-ai/dsh-storage-domain": "0.1.5-rc.1",
200
+ "@deepseek-ai/dsh-storage-json": "0.1.5-rc.1",
201
+ "@deepseek-ai/dsh-subagent": "0.1.5-rc.1",
202
+ "@deepseek-ai/dsh-subagent-fork-in-process": "0.1.5-rc.1",
203
+ "@deepseek-ai/dsh-subagent-in-process-driver": "0.1.5-rc.1",
204
+ "@deepseek-ai/dsh-subagent-spawn-in-process": "0.1.5-rc.1",
205
+ "@deepseek-ai/dsh-subprocess": "0.1.5-rc.1",
206
+ "@deepseek-ai/dsh-subprocess-local": "0.1.5-rc.1",
207
+ "@deepseek-ai/dsh-system-prompt": "0.1.5-rc.1",
208
+ "@deepseek-ai/dsh-terminal": "0.1.5-rc.1",
209
+ "@deepseek-ai/dsh-terminal-bash": "0.1.5-rc.1",
210
+ "@deepseek-ai/dsh-time-context": "0.1.5-rc.1",
211
+ "@deepseek-ai/dsh-timeout": "0.1.5-rc.1",
212
+ "@deepseek-ai/dsh-tmux-context": "0.1.5-rc.1",
213
+ "@deepseek-ai/dsh-token-meter": "0.1.5-rc.1",
214
+ "@deepseek-ai/dsh-tool-ask-user": "0.1.5-rc.1",
215
+ "@deepseek-ai/dsh-tool-bash": "0.1.5-rc.1",
216
+ "@deepseek-ai/dsh-tool-bash-persistent": "0.1.5-rc.1",
217
+ "@deepseek-ai/dsh-tool-call-timeout-policy": "0.1.5-rc.1",
218
+ "@deepseek-ai/dsh-tool-cordis": "0.1.5-rc.1",
219
+ "@deepseek-ai/dsh-tool-fs": "0.1.5-rc.1",
220
+ "@deepseek-ai/dsh-tool-fs-search": "0.1.5-rc.1",
221
+ "@deepseek-ai/dsh-tool-goal": "0.1.5-rc.1",
222
+ "@deepseek-ai/dsh-tool-jobs": "0.1.5-rc.1",
223
+ "@deepseek-ai/dsh-tool-present": "0.1.5-rc.1",
224
+ "@deepseek-ai/dsh-tool-pwsh": "0.1.5-rc.1",
225
+ "@deepseek-ai/dsh-tool-pwsh-persistent": "0.1.5-rc.1",
226
+ "@deepseek-ai/dsh-tool-ralph": "0.1.5-rc.1",
227
+ "@deepseek-ai/dsh-tool-skill": "0.1.5-rc.1",
228
+ "@deepseek-ai/dsh-tool-str-replace-editor": "0.1.5-rc.1",
229
+ "@deepseek-ai/dsh-tool-subagent": "0.1.5-rc.1",
230
+ "@deepseek-ai/dsh-tool-subagent-control": "0.1.5-rc.1",
231
+ "@deepseek-ai/dsh-tool-todo": "0.1.5-rc.1",
232
+ "@deepseek-ai/dsh-tool-web": "0.1.5-rc.1",
233
+ "@deepseek-ai/dsh-tool-workflow": "0.1.5-rc.1",
234
+ "@deepseek-ai/dsh-tools": "0.1.5-rc.1",
235
+ "@deepseek-ai/dsh-typert-loader": "0.1.5-rc.1",
236
+ "@deepseek-ai/dsh-typert-protocol": "0.1.5-rc.1",
237
+ "@deepseek-ai/dsh-typert-registry": "0.1.5-rc.1",
238
+ "@deepseek-ai/dsh-user-approval": "0.1.5-rc.1",
239
+ "@deepseek-ai/dsh-user-questions": "0.1.5-rc.1",
240
+ "@deepseek-ai/dsh-util-crypto": "0.1.5-rc.1",
241
+ "@deepseek-ai/dsh-util-time": "0.1.5-rc.1",
242
+ "@deepseek-ai/dsh-util-values": "0.1.5-rc.1",
243
+ "@deepseek-ai/dsh-util-workspace-path": "0.1.5-rc.1",
244
+ "@deepseek-ai/dsh-web": "0.1.5-rc.1",
245
+ "@deepseek-ai/dsh-web-app": "0.1.5-rc.1",
246
+ "@deepseek-ai/dsh-web-fetch-http": "0.1.5-rc.1",
247
+ "@deepseek-ai/dsh-web-frontend": "0.1.5-rc.1",
248
+ "@deepseek-ai/dsh-web-search-deepseek": "0.1.5-rc.1",
249
+ "@deepseek-ai/dsh-webhook": "0.1.5-rc.1",
250
+ "@deepseek-ai/dsh-webhook-github": "0.1.5-rc.1",
251
+ "@deepseek-ai/dsh-win32-process": "0.1.5-rc.1",
252
+ "@deepseek-ai/dsh-workflow": "0.1.5-rc.1",
253
+ "@deepseek-ai/dsh-workflow-worker-thread": "0.1.5-rc.1",
254
+ "@deepseek-ai/dsh-workspace": "0.1.5-rc.1"
36
255
  },
37
256
  "devDependencies": {
38
257
  "@types/node": "^22.0.0",
258
+ "lunar-typescript": "^1.8.6",
39
259
  "playwright-core": "^1.62.1",
40
260
  "puppeteer-core": "^25.9.0",
41
261
  "tsx": "^4.19.0",
@@ -10,16 +10,17 @@
10
10
 
11
11
  import { execFileSync } from 'node:child_process'
12
12
  import { createHash } from 'node:crypto'
13
- import { existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, realpathSync, rmSync, symlinkSync } from 'node:fs'
13
+ import { chmodSync, copyFileSync, existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, realpathSync, rmSync, symlinkSync, writeFileSync } from 'node:fs'
14
14
  import { createRequire } from 'node:module'
15
15
  import { basename, dirname, isAbsolute, join, resolve } from 'node:path'
16
+ import { tmpdir } from 'node:os'
16
17
  import { fileURLToPath, pathToFileURL } from 'node:url'
17
18
  import assert from 'node:assert/strict'
18
19
 
19
20
  const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../..')
20
21
  const upstreamLicenseSha256 = 'b6bbb0c73a02cf8d2c304e9f208b41c32f0a810fabe366986e2b14ac3338f618'
21
22
  const upstreamVendorFileCount = 32
22
- const upstreamVendorAggregateSha256 = 'd82a38adace8bfe574dcecb4222da5c994a1b9e8792f78dc2dad3a7f50c9925a'
23
+ const adaptedVendorAggregateSha256 = '65ac7b76a62c07bda771c476fff6b4c5e4220b013ce74ad3c54e6b95e5b34063'
23
24
  const expectedTools = [
24
25
  'map_bicycling_route',
25
26
  'map_driving_route',
@@ -55,7 +56,56 @@ function vendorAggregate(root: string): { count: number; sha256: string } {
55
56
  return { count: files.length, sha256: digest.digest('hex') }
56
57
  }
57
58
 
58
- function assertAlpha3LockClosure(): { packages: number; version: string } {
59
+ function assertPackagingExcludesNodeModules(): void {
60
+ const tempRoot = mkdtempSync(join(tmpdir(), 'gotry-pack-excl-'))
61
+ try {
62
+ const archiveTar = join(tempRoot, 'head.tar')
63
+ execFileSync('git', ['archive', '--format=tar', '--output', archiveTar, 'HEAD'], { cwd: repoRoot })
64
+ const checkoutDir = join(tempRoot, 'checkout')
65
+ mkdirSync(checkoutDir)
66
+ execFileSync('tar', ['-xf', archiveTar, '-C', checkoutDir])
67
+ copyFileSync(join(repoRoot, 'package.json'), join(checkoutDir, 'package.json'))
68
+
69
+ const vendorBinDir = join(checkoutDir, 'ts/dsh-runtime/vendor/dsh-map-tools/node_modules/.bin')
70
+ mkdirSync(vendorBinDir, { recursive: true })
71
+ for (const name of ['cordis', 'tsc', 'tsserver', 'vitest']) {
72
+ const binPath = join(vendorBinDir, name)
73
+ writeFileSync(binPath, '#!/usr/bin/env node\n')
74
+ chmodSync(binPath, 0o755)
75
+ }
76
+
77
+ const packDir = join(tempRoot, 'pack')
78
+ mkdirSync(packDir)
79
+ const packOutput = execFileSync('npm', [
80
+ 'pack', '--ignore-scripts', '--json', '--pack-destination', packDir,
81
+ ], { cwd: checkoutDir, encoding: 'utf8' })
82
+ const packInfo = JSON.parse(packOutput) as Array<{ filename: string }>
83
+ assert.equal(packInfo.length, 1, 'temp npm pack must produce one artifact')
84
+ const tarball = join(packDir, packInfo[0].filename)
85
+ assert.ok(existsSync(tarball), `temp packed artifact missing: ${tarball}`)
86
+
87
+ const entries = execFileSync('tar', ['-tzf', tarball], { encoding: 'utf8' }).trimEnd().split('\n')
88
+ const nodeModulesEntries = entries.filter(path =>
89
+ path.startsWith('package/ts/dsh-runtime/vendor/dsh-map-tools/node_modules'),
90
+ )
91
+ assert.equal(
92
+ nodeModulesEntries.length, 0,
93
+ `npm pack must exclude vendor node_modules: found ${nodeModulesEntries.join(', ')}`,
94
+ )
95
+
96
+ const extractDir = join(tempRoot, 'extracted')
97
+ mkdirSync(extractDir)
98
+ execFileSync('tar', ['-xzf', tarball, '-C', extractDir])
99
+ const packedVendorRoot = join(extractDir, 'package/ts/dsh-runtime/vendor/dsh-map-tools')
100
+ const packedAggregate = vendorAggregate(packedVendorRoot)
101
+ assert.equal(packedAggregate.count, upstreamVendorFileCount, 'packed vendor file count drifted')
102
+ assert.equal(packedAggregate.sha256, adaptedVendorAggregateSha256, 'packed vendor aggregate drifted')
103
+ } finally {
104
+ rmSync(tempRoot, { recursive: true, force: true })
105
+ }
106
+ }
107
+
108
+ function assertTargetLockClosure(): { packages: number; version: string } {
59
109
  const manifest = JSON.parse(readFileSync(join(repoRoot, 'ts/package.json'), 'utf8')) as {
60
110
  dependencies?: Record<string, string>
61
111
  }
@@ -71,9 +121,9 @@ function assertAlpha3LockClosure(): { packages: number; version: string } {
71
121
  )
72
122
  assert.ok(dshEntries.length >= 10, 'expected dsh-tools peer closure in the ts lock')
73
123
  for (const [path, entry] of dshEntries) {
74
- assert.equal(entry.version, '0.1.2-alpha.3', `${path} drifted outside the alpha.3 closure`)
124
+ assert.equal(entry.version, '0.1.5-rc.1', `${path} drifted outside the 0.1.5-rc.1 closure`)
75
125
  }
76
- return { packages: dshEntries.length, version: '0.1.2-alpha.3' }
126
+ return { packages: dshEntries.length, version: '0.1.5-rc.1' }
77
127
  }
78
128
 
79
129
  function findPackageRoot(entry: string): string {
@@ -159,7 +209,8 @@ const cleanInstalledBin = process.env.GOTRY_MAP_TOOLS_E2E_BIN
159
209
  const { packageRoot, proofRoot } = prepareProofPackage(cleanInstalledBin)
160
210
 
161
211
  try {
162
- const lockedDsh = assertAlpha3LockClosure()
212
+ assertPackagingExcludesNodeModules()
213
+ const lockedDsh = assertTargetLockClosure()
163
214
  const vendorRoot = join(packageRoot, 'ts/dsh-runtime/vendor/dsh-map-tools')
164
215
  const requiredFiles = [
165
216
  'LICENSE',
@@ -177,7 +228,7 @@ try {
177
228
  }
178
229
  const vendorTree = vendorAggregate(vendorRoot)
179
230
  assert.equal(vendorTree.count, upstreamVendorFileCount, 'vendored payload file count drifted')
180
- assert.equal(vendorTree.sha256, upstreamVendorAggregateSha256, 'vendored payload aggregate drifted')
231
+ assert.equal(vendorTree.sha256, adaptedVendorAggregateSha256, 'vendored payload aggregate drifted')
181
232
  const vendorPackage = JSON.parse(readFileSync(join(vendorRoot, 'package.json'), 'utf8')) as {
182
233
  name?: string
183
234
  version?: string
@@ -189,35 +240,79 @@ try {
189
240
  assert.equal(sha256(join(vendorRoot, 'LICENSE')), upstreamLicenseSha256, 'upstream MIT license changed')
190
241
 
191
242
  const packageRequire = createRequire(join(packageRoot, 'package.json'))
192
- const dshTools = JSON.parse(readFileSync(packageRequire.resolve('@deepseek-ai/dsh-tools/package.json'), 'utf8')) as { version: string }
193
- const dshSettings = JSON.parse(readFileSync(packageRequire.resolve('@deepseek-ai/dsh-settings/package.json'), 'utf8')) as { version: string }
194
- assert.equal(dshTools.version, '0.1.2-alpha.3')
195
- assert.equal(dshSettings.version, '0.1.2-alpha.3')
196
- const settingsApi = await import(pathToFileURL(packageRequire.resolve('@deepseek-ai/dsh-settings')).href) as {
197
- SettingsProvider?: { prototype?: { installSection?: unknown } }
243
+ const dshToolsPackageJson = packageRequire.resolve('@deepseek-ai/dsh-tools/package.json')
244
+ const dshSettingsPackageJson = packageRequire.resolve('@deepseek-ai/dsh-settings/package.json')
245
+ const dshTools = JSON.parse(readFileSync(dshToolsPackageJson, 'utf8')) as { version: string }
246
+ const dshSettings = JSON.parse(readFileSync(dshSettingsPackageJson, 'utf8')) as { version: string }
247
+ assert.equal(dshTools.version, '0.1.5-rc.1')
248
+ assert.equal(dshSettings.version, '0.1.5-rc.1')
249
+ const settingsApi = await import(pathToFileURL(join(dirname(dshSettingsPackageJson), 'lib/index.js')).href) as {
250
+ SettingsProvider?: { prototype?: { installSection?: (...args: unknown[]) => void } }
198
251
  }
252
+ const installSection = settingsApi.SettingsProvider?.prototype?.installSection
199
253
  assert.equal(
200
- typeof settingsApi.SettingsProvider?.prototype?.installSection,
254
+ typeof installSection,
201
255
  'function',
202
- 'real alpha.3 SettingsProvider.installSection API must be present',
256
+ 'real 0.1.5-rc.1 SettingsProvider.prototype.installSection must be present',
203
257
  )
204
258
 
205
259
  const plugin = await import(pathToFileURL(join(vendorRoot, 'lib/index.js')).href)
206
- const registered: Array<Record<string, unknown>> = []
207
- const settingsCalls: unknown[][] = []
208
- const context = {
209
- tools: {
210
- register(tool: Record<string, unknown>) {
211
- registered.push(tool)
212
- return () => undefined
260
+ type RegisteredTool = Record<string, unknown> & { name: string; execute?: unknown }
261
+ const registered = new Map<string, RegisteredTool>()
262
+ const registerEvents: string[] = []
263
+ const toolDisposeEvents: string[] = []
264
+ const settingsRegistrations: unknown[][] = []
265
+ const settingsWatchers: Array<() => void> = []
266
+ const settingsProviderDisposers: Array<() => void> = []
267
+ const contextDisposers: Array<() => void> = []
268
+ const settingsNamespaceValue = 'dsh-map-tools'
269
+ const activeToolNames = () => [...registered.keys()].sort()
270
+ const settingsProvider = {
271
+ ctx: {
272
+ effect(effect: () => (() => void) | void) {
273
+ const disposer = effect()
274
+ if (typeof disposer === 'function') settingsProviderDisposers.push(disposer)
275
+ return disposer
213
276
  },
214
277
  },
278
+ register: (...args: unknown[]) => {
279
+ settingsRegistrations.push(args)
280
+ return {
281
+ get: () => args[2] && typeof args[2] === 'object' ? (args[2] as { base?: unknown }).base : undefined,
282
+ watch: (callback: () => void) => {
283
+ settingsWatchers.push(callback)
284
+ return () => {
285
+ const index = settingsWatchers.indexOf(callback)
286
+ if (index >= 0) settingsWatchers.splice(index, 1)
287
+ }
288
+ },
289
+ update: async () => undefined,
290
+ replace: async () => undefined,
291
+ }
292
+ },
293
+ installSection: (...args: unknown[]) => installSection!.apply(settingsProvider, args),
294
+ }
295
+ const context = {
296
+ fiber: { state: 'active' },
215
297
  effect(effect: () => (() => void) | void) {
216
- effect()
298
+ const disposer = effect()
299
+ if (typeof disposer === 'function') contextDisposers.push(disposer)
300
+ return disposer
301
+ },
302
+ tools: {
303
+ register(tool: RegisteredTool) {
304
+ assert.ok(tool.name.startsWith('map_'), `unexpected map tool name: ${tool.name}`)
305
+ registered.set(tool.name, tool)
306
+ registerEvents.push(tool.name)
307
+ return () => {
308
+ registered.delete(tool.name)
309
+ toolDisposeEvents.push(tool.name)
310
+ }
311
+ },
217
312
  },
218
313
  inject(dependencies: string[], callback: (scope: Record<string, unknown>) => void) {
219
314
  if (dependencies.includes('settings')) {
220
- callback({ settings: { installSection: (...args: unknown[]) => { settingsCalls.push(args) } } })
315
+ callback({ settings: settingsProvider })
221
316
  } else if (dependencies.includes('webServer')) {
222
317
  callback({ webServer: { register: () => undefined } })
223
318
  } else {
@@ -229,15 +324,31 @@ try {
229
324
  provider: 'osm', amapKey: '', timeoutMs: 1000, maxQps: 2,
230
325
  defaultMode: 'driving', language: 'zh',
231
326
  })
232
- assert.deepEqual(registered.map(tool => tool.name).sort(), expectedTools, 'exactly seven map tools must register')
233
- assert.equal(settingsCalls.length, 1, 'alpha.3 settings section must be installed once')
234
- assert.equal(settingsCalls[0][1], 'dsh-map-tools', 'settings namespace must be stable')
235
- assert.equal(typeof settingsCalls[0][4], 'object', 'alpha.3 installSection hooks must be supplied')
327
+ assert.deepEqual(activeToolNames(), expectedTools, 'exactly seven active map tools must register')
328
+ assert.equal(registerEvents.length, expectedTools.length * 2, 'installSection initial onChange must rebuild the map tools once')
329
+ assert.equal(toolDisposeEvents.length, expectedTools.length, 'installSection initial reload must dispose the first tool generation')
330
+ assert.equal(settingsRegistrations.length, 1, '0.1.5-rc.1 settings section must register once')
331
+ assert.equal(settingsRegistrations[0][0], settingsNamespaceValue, 'settings namespace must be the stable plain string')
332
+ assert.equal(settingsRegistrations[0][2] && typeof settingsRegistrations[0][2] === 'object', true, '0.1.5-rc.1 settings register options must be supplied')
333
+ assert.deepEqual(Object.keys(settingsRegistrations[0][2] as object).sort(), ['base'], '0.1.5-rc.1 registration must carry the composition base')
334
+ assert.equal(settingsWatchers.length, 1, '0.1.5-rc.1 installSection must attach one settings watcher')
335
+ assert.equal(settingsProviderDisposers.length, 1, '0.1.5-rc.1 installSection must attach one provider-detach fallback effect')
336
+
337
+ settingsWatchers[0]()
338
+ assert.deepEqual(activeToolNames(), expectedTools, 'settings watch reload must keep exactly seven active map tools')
339
+ assert.equal(registerEvents.length, expectedTools.length * 3, 'settings watch must rebuild the map tools')
340
+ assert.equal(toolDisposeEvents.length, expectedTools.length * 2, 'settings watch reload must dispose the previous generation')
236
341
 
342
+ settingsProviderDisposers[0]()
343
+ assert.deepEqual(activeToolNames(), expectedTools, 'settings provider detach fallback must keep exactly seven active map tools')
344
+ assert.equal(registerEvents.length, expectedTools.length * 4, 'provider detach fallback must rebuild the map tools')
345
+ assert.equal(toolDisposeEvents.length, expectedTools.length * 3, 'provider detach fallback must dispose the previous generation')
346
+
347
+ const finalActiveTools = [...registered.values()]
237
348
  const originalFetch = globalThis.fetch
238
349
  globalThis.fetch = (async () => { throw new Error('network forbidden by package proof') }) as typeof fetch
239
350
  try {
240
- const geocode = registered.find(tool => tool.name === 'map_geocode')
351
+ const geocode = registered.get('map_geocode')
241
352
  assert.ok(geocode, 'map_geocode must be registered')
242
353
  const result = await (geocode.execute as (args: unknown, execution: unknown) => Promise<unknown>)(
243
354
  { address: '116.397428,39.90923' },
@@ -249,6 +360,9 @@ try {
249
360
  globalThis.fetch = originalFetch
250
361
  }
251
362
 
363
+ for (const dispose of contextDisposers.splice(0).reverse()) dispose()
364
+ assert.equal(registered.size, 0, 'plugin unload must dispose the active map tool generation')
365
+
252
366
  console.log(JSON.stringify({
253
367
  proof: 'map-tools-vendor-package',
254
368
  status: 'PASS',
@@ -256,11 +370,18 @@ try {
256
370
  vendored: {
257
371
  sourcePackage: 'dsh-map-tools@0.5.1',
258
372
  licenseSha256: upstreamLicenseSha256, vendorFileCount: vendorTree.count,
259
- vendorAggregateSha256: vendorTree.sha256,
373
+ adaptedVendorAggregateSha256: vendorTree.sha256,
260
374
  },
261
375
  artifactVendor: vendorRoot,
262
376
  dshClosure: { tools: dshTools.version, settings: dshSettings.version, ...lockedDsh },
263
- tools: registered.map(tool => tool.name).sort(),
377
+ settingsLifecycle: {
378
+ registerEvents: registerEvents.length,
379
+ toolDisposeEvents: toolDisposeEvents.length,
380
+ watchedReloads: 1,
381
+ providerDetachFallbacks: 1,
382
+ pluginUnloadDisposed: true,
383
+ },
384
+ tools: finalActiveTools.map(tool => tool.name).sort(),
264
385
  inlineCoordinate: { provider: 'inline', network: 'forbidden' },
265
386
  }, null, 2))
266
387
  } finally {