@danceiny/gotry 0.0.1-rc.16 → 0.0.1-rc.18
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.
- package/README.md +161 -116
- package/README.zh-CN.md +173 -144
- package/bin/gotry-booking-copilot.js +53 -0
- package/bin/gotry-bootstrap.js +113 -66
- package/bin/gotry-inner.js +436 -70
- package/bin/gotry-runtime-resolution.d.ts +27 -0
- package/bin/gotry-runtime-resolution.js +50 -0
- package/bin/gotry.js +1 -1
- package/cordis.gotry-patch.yml +5 -1
- package/dist/capabilities/agent-reach-deep.js +1 -1
- package/dist/capabilities/agent-reach.js +1 -1
- package/dist/capabilities/anything.js +1 -1
- package/dist/capabilities/artifacts.js +1 -1
- package/dist/capabilities/effect.js +1 -1
- package/dist/capabilities/fact-log.js +1 -1
- package/dist/capabilities/flyai.js +20 -6
- package/dist/capabilities/hbcli.js +1 -1
- package/dist/capabilities/incident-log.js +1 -1
- package/dist/capabilities/model-override.js +18 -0
- package/dist/capabilities/opensky.js +1 -1
- package/dist/capabilities/resilience.js +1 -1
- package/dist/capabilities/session/action-cache.js +1 -1
- package/dist/capabilities/session/adapters/ctrip-flight.js +1 -1
- package/dist/capabilities/session/adapters/meituan-local.js +1 -1
- package/dist/capabilities/session/benchmark.js +1 -1
- package/dist/capabilities/session/extension-bridge.js +19 -6
- package/dist/capabilities/session/extension-channel.js +3 -3
- package/dist/capabilities/session/extension-distribution.js +234 -0
- package/dist/capabilities/session/extract.js +1 -1
- package/dist/capabilities/session/golden-score.js +92 -0
- package/dist/capabilities/session/health-watch.js +1 -1
- package/dist/capabilities/session/read-guard.js +1 -1
- package/dist/capabilities/session/static-flight-golden.js +137 -0
- package/dist/capabilities/session/transport.js +1 -1
- package/dist/capabilities/session/wizard.js +21 -251
- package/dist/capabilities/session-consent.js +1 -1
- package/dist/capabilities/session-login.js +11 -5
- package/dist/capabilities/session-search.js +46 -4
- package/dist/capabilities/weather.js +168 -46
- package/dist/data/session-golden-20.json +25 -0
- package/dist/data/sf-golden-manifest.json +102 -0
- package/dist/data/sf-static-routes.json +91 -0
- package/dist/scripts/action-cache-tests.js +1 -1
- package/dist/scripts/agent-planning-budget-e2e.js +227 -0
- package/dist/scripts/agent-planning-budget-tests.js +173 -0
- package/dist/scripts/agent-reach-deep-tests.js +1 -1
- package/dist/scripts/agent-reach-tests.js +1 -1
- package/dist/scripts/agent-reach-wrapper-tests.js +1 -1
- package/dist/scripts/anything-tests.js +1 -1
- package/dist/scripts/async-collect.js +1 -1
- package/dist/scripts/benchmark-environment-bridge-e2e.js +981 -0
- package/dist/scripts/benchmark-environment-bridge-tests.js +2544 -0
- package/dist/scripts/booking-copilot-availability-ledger-binding-tests.js +335 -0
- package/dist/scripts/booking-copilot-availability-policy-v2-tests.js +1355 -0
- package/dist/scripts/booking-copilot-bin-proof-tests.js +89 -0
- package/dist/scripts/booking-copilot-crossrepo-fixture-server.js +113 -0
- package/dist/scripts/booking-copilot-dsh-core-proof-tests.js +356 -0
- package/dist/scripts/booking-copilot-dsh-planner-proof-tests.js +557 -0
- package/dist/scripts/booking-copilot-dsh-plugin-proof-tests.js +140 -0
- package/dist/scripts/booking-copilot-event-sequence-concurrency-proof-tests.js +202 -0
- package/dist/scripts/booking-copilot-gap-code-contract-proof-tests.js +102 -0
- package/dist/scripts/booking-copilot-operation-ledger-concurrency-proof-tests.js +374 -0
- package/dist/scripts/booking-copilot-receipt-ledger-concurrency-proof-tests.js +447 -0
- package/dist/scripts/booking-copilot-runtime-proof-tests.js +205 -0
- package/dist/scripts/booking-copilot-server-proof-tests.js +317 -0
- package/dist/scripts/booking-copilot-startup-proof-tests.js +283 -0
- package/dist/scripts/booking-copilot-v2-runtime-proof-tests.js +3935 -0
- package/dist/scripts/booking-saga-tests.js +1 -1
- package/dist/scripts/booking-surface-contract-proof-tests.js +393 -0
- package/dist/scripts/booking-surface-v2-contract-proof-tests.js +1174 -0
- package/dist/scripts/bootstrap-tests.js +45 -39
- package/dist/scripts/build-changelog.js +1 -1
- package/dist/scripts/changelog-tests.js +1 -1
- package/dist/scripts/companion-tests.js +1 -1
- package/dist/scripts/diff-test.js +1 -1
- package/dist/scripts/dsh-runtime-closure-tests.js +225 -0
- package/dist/scripts/dsh-runtime-closure.js +150 -0
- package/dist/scripts/effect-tests.js +1 -1
- package/dist/scripts/engine-run.js +1 -1
- package/dist/scripts/engine-tests.js +1 -1
- package/dist/scripts/evaluation-cadence-tests.js +347 -0
- package/dist/scripts/evaluation-contract-tests.js +574 -0
- package/dist/scripts/extension-distribution-cli.js +35 -0
- package/dist/scripts/extension-distribution-tests.js +341 -0
- package/dist/scripts/extension-tests.js +128 -23
- package/dist/scripts/fact-gate-tests.js +1 -1
- package/dist/scripts/flyai-tests.js +1 -1
- package/dist/scripts/hbcli-e2e-tests.js +1 -1
- package/dist/scripts/hbcli-tests.js +1 -1
- package/dist/scripts/health-watch-cli.js +1 -1
- package/dist/scripts/i18n-tests.js +1 -1
- package/dist/scripts/incident-tests.js +1 -1
- package/dist/scripts/journey-tests.js +1 -1
- package/dist/scripts/ledger-tests.js +1 -1
- package/dist/scripts/ledger-workflow-crash.js +1 -1
- package/dist/scripts/memory-capture-tests.js +1 -1
- package/dist/scripts/memory-decay-tests.js +1 -1
- package/dist/scripts/memory-metrics.js +1 -1
- package/dist/scripts/memory-value-report.js +1 -1
- package/dist/scripts/model-override-e2e.js +176 -0
- package/dist/scripts/nightly-evidence-tests.js +1 -1
- package/dist/scripts/nightly-evidence.js +1 -1
- package/dist/scripts/nudge-digest.js +1 -1
- package/dist/scripts/onboarding-tests.js +21 -53
- package/dist/scripts/opensky-check.js +1 -1
- package/dist/scripts/opensky-tests.js +1 -1
- package/dist/scripts/pnpm-dsh-closure-proof.js +20 -0
- package/dist/scripts/price-drift-tests.js +1 -1
- package/dist/scripts/price-drift-watch.js +1 -1
- package/dist/scripts/probe-poi-tests.js +1 -1
- package/dist/scripts/product-metrics.js +1 -1
- package/dist/scripts/publish-preverify.js +40 -4
- package/dist/scripts/realtime-pricing-tests.js +1 -1
- package/dist/scripts/replay-async.js +1 -1
- package/dist/scripts/replay-real.js +1 -1
- package/dist/scripts/replay.js +1 -1
- package/dist/scripts/session-attach-diagnose.js +1 -1
- package/dist/scripts/session-attach-poc.js +1 -1
- package/dist/scripts/session-benchmark.js +1 -1
- package/dist/scripts/session-extract-tests.js +1 -1
- package/dist/scripts/session-login.js +1 -1
- package/dist/scripts/session-tests.js +70 -20
- package/dist/scripts/sf-live-benchmark.js +338 -0
- package/dist/scripts/sf-live-cli-tests.js +21 -0
- package/dist/scripts/sf-soft-score-tests.js +108 -0
- package/dist/scripts/sf-summary.js +93 -0
- package/dist/scripts/skeleton-check.js +1 -1
- package/dist/scripts/skeleton-integration-test.js +1 -1
- package/dist/scripts/skills-contract-tests.js +1 -1
- package/dist/scripts/smoke-session-gate-tests.js +29 -0
- package/dist/scripts/smoke.js +79 -33
- package/dist/scripts/state-cli-tests.js +1 -1
- package/dist/scripts/state-cli.js +1 -1
- package/dist/scripts/static-golden-tests.js +299 -0
- package/dist/scripts/time-eval-tests.js +1 -1
- package/dist/scripts/travel-timeline-tests.js +1 -1
- package/dist/scripts/unified-tests.js +1 -1
- package/dist/scripts/weather-tests.js +694 -44
- package/dist/scripts/z3-race-tests.js +1 -1
- package/dist/src/artifact-gate.js +1 -1
- package/dist/src/benchmark-agent-conformance.js +370 -0
- package/dist/src/benchmark-environment-bridge.js +384 -0
- package/dist/src/benchmark-headless-child-diagnostics.js +173 -0
- package/dist/src/benchmark-tool-isolation.js +124 -0
- package/dist/src/bookable-facts.js +1 -1
- package/dist/src/booking-saga.js +1 -1
- package/dist/src/booking-surface/availability-policy-v2.js +830 -0
- package/dist/src/booking-surface/canonical-schema.js +113 -0
- package/dist/src/booking-surface/contracts-v2.js +89 -0
- package/dist/src/booking-surface/contracts.js +46 -0
- package/dist/src/booking-surface/dsh-planner.js +453 -0
- package/dist/src/booking-surface/dsh-plugin.js +93 -0
- package/dist/src/booking-surface/error-codes.js +94 -0
- package/dist/src/booking-surface/index.js +15 -0
- package/dist/src/booking-surface/profile.js +68 -0
- package/dist/src/booking-surface/runtime-v2.js +1771 -0
- package/dist/src/booking-surface/runtime.js +351 -0
- package/dist/src/booking-surface/server-v2.js +334 -0
- package/dist/src/booking-surface/server.js +302 -0
- package/dist/src/booking-surface/startup.js +159 -0
- package/dist/src/booking-surface/validation-v2.js +319 -0
- package/dist/src/booking-surface/validation.js +809 -0
- package/dist/src/bridge.js +1 -1
- package/dist/src/companions.js +1 -1
- package/dist/src/contracts.js +1 -1
- package/dist/src/dsh-llm.js +1 -1
- package/dist/src/engine.js +1 -1
- package/dist/src/evaluation-cadence.js +234 -0
- package/dist/src/evaluation-contracts.js +906 -0
- package/dist/src/i18n.js +1 -1
- package/dist/src/index.js +50 -19
- package/dist/src/journey.js +1 -1
- package/dist/src/loop.js +1 -1
- package/dist/src/memory-capture.js +1 -1
- package/dist/src/memory-decay.js +1 -1
- package/dist/src/memory-utility.js +1 -1
- package/dist/src/mock-llm.js +1 -1
- package/dist/src/model.js +1 -1
- package/dist/src/realtime-pricing.js +1 -1
- package/dist/src/slot-spec.js +1 -1
- package/dist/src/state-ledger.js +2 -1
- package/dist/src/time-anchor.js +1 -1
- package/dist/src/tool-budget.js +136 -0
- package/dist/src/tool-packet.js +1 -1
- package/dist/src/travel-slots.js +1 -1
- package/dist/src/travel-timeline.js +1 -1
- package/dist/src/unified.js +1 -1
- package/dist/src/wish-pool.js +1 -1
- package/dist/src/z3-shared.js +1 -1
- package/extension/README.md +31 -7
- package/package.json +286 -11
- package/schemas/booking.surface.v1.schema.json +927 -0
- package/schemas/booking.surface.v2.schema.json +61 -0
- package/ts/capabilities/flyai.ts +16 -3
- package/ts/capabilities/session/extension-bridge.ts +37 -14
- package/ts/capabilities/session/extension-channel.ts +6 -3
- package/ts/capabilities/session/extension-distribution.ts +264 -0
- package/ts/capabilities/session/golden-score.ts +139 -0
- package/ts/capabilities/session/health-watch.ts +1 -1
- package/ts/capabilities/session/static-flight-golden.ts +209 -0
- package/ts/capabilities/session/wizard.ts +34 -176
- package/ts/capabilities/session-login.ts +15 -5
- package/ts/capabilities/session-search.ts +40 -3
- package/ts/capabilities/weather.ts +141 -52
- package/ts/package.json +3 -3
- package/ts/src/benchmark-agent-conformance.ts +448 -0
- package/ts/src/benchmark-environment-bridge.ts +348 -0
- package/ts/src/benchmark-headless-child-diagnostics.ts +184 -0
- package/ts/src/benchmark-tool-isolation.ts +166 -0
- package/ts/src/booking-surface/availability-policy-v2.ts +523 -0
- package/ts/src/booking-surface/canonical-schema.js +113 -0
- package/ts/src/booking-surface/contracts-v2.ts +118 -0
- package/ts/src/booking-surface/contracts.ts +380 -0
- package/ts/src/booking-surface/dsh-planner.ts +452 -0
- package/ts/src/booking-surface/dsh-plugin.js +93 -0
- package/ts/src/booking-surface/error-codes.ts +101 -0
- package/ts/src/booking-surface/index.ts +12 -0
- package/ts/src/booking-surface/profile.ts +42 -0
- package/ts/src/booking-surface/runtime-v2.ts +1466 -0
- package/ts/src/booking-surface/runtime.ts +483 -0
- package/ts/src/booking-surface/server-v2.ts +247 -0
- package/ts/src/booking-surface/server.ts +324 -0
- package/ts/src/booking-surface/startup.ts +196 -0
- package/ts/src/booking-surface/validation-v2.ts +205 -0
- package/ts/src/booking-surface/validation.ts +453 -0
- package/ts/src/index.ts +64 -11
- package/ts/src/state-ledger.ts +1 -0
- package/ts/src/tool-budget.ts +165 -0
- package/dist/scripts/wizard-bootstrap.js +0 -32
package/bin/gotry-bootstrap.js
CHANGED
|
@@ -9,13 +9,20 @@
|
|
|
9
9
|
* gotry 产物(工单交付 md/行程 md)的成熟查看面(issue #25)。
|
|
10
10
|
* 宿主层安装(dsh plugin → ~/.dsh/profiles/web),不进 gotry 依赖。
|
|
11
11
|
* gotry-session-bridge → 会话检索浏览器扩展(issue #21 传输层方案 C,2026-08-29 定案):
|
|
12
|
-
* 一次性安装替代逐连接 CDP
|
|
13
|
-
*
|
|
12
|
+
* 一次性安装替代逐连接 CDP 弹窗;已上架 Chrome Web Store
|
|
13
|
+
* (2026-09-02,一键装+自动更新)。**gory 不介入浏览器**——
|
|
14
|
+
* 商店页安装是浏览器的事;`gotry setup wizard` 仅作离线检测的
|
|
15
|
+
* 进程护栏(打印商店 URL + 健康探活等待),不动剪贴板、
|
|
16
|
+
* 不弹 osascript、不 open 浏览器。
|
|
14
17
|
*
|
|
15
18
|
* 用法:
|
|
16
19
|
* node bin/gotry-bootstrap.js # 显式安装(缺啥装啥;失败 exit 1)
|
|
17
20
|
* node bin/gotry-bootstrap.js --auto # postinstall 模式:CI/跳过开关检测,任何失败不挡安装(exit 0)
|
|
18
21
|
* node bin/gotry-bootstrap.js --check-only # 只探测报告,不安装(测试钩子)
|
|
22
|
+
* node bin/gotry-bootstrap.js --extension-from=github
|
|
23
|
+
* # 扩展改走 GitHub Releases 下载通道(ADR-21):
|
|
24
|
+
* # dist-manifest → tar.gz → SHA256 → key 钉扎 → 原子交换;
|
|
25
|
+
* # 任何失败显式降级回包内副本(离线确定性不变)。
|
|
19
26
|
* node bin/gotry-bootstrap.js wizard # 会话扩展 onboarding 闭环(issue #21 onboarding UX,§3.3):
|
|
20
27
|
* # 5 步编排 + 后台 health-watch 等扩展心跳,
|
|
21
28
|
* # 扩展一就位 stdout 翻绿并自动重放同 query。
|
|
@@ -27,11 +34,15 @@
|
|
|
27
34
|
* GOTRY_SETUP_REACH=0 跳过 agent-reach
|
|
28
35
|
* GOTRY_SETUP_SIDEBAR=0 跳过 dsh-better-sidebar
|
|
29
36
|
* GOTRY_SETUP_EXTENSION=0 跳过会话检索扩展落位
|
|
30
|
-
*
|
|
37
|
+
* GOTRY_EXTENSION_SOURCE=github 等效 --extension-from=github(显式 opt-in,默认 bundled)
|
|
38
|
+
* GOTRY_EXTENSION_RELEASE_BASE=<url> 下载通道基址覆盖(镜像/测试;缺省 GitHub 官方)
|
|
39
|
+
* GOTRY_ONBOARDING_HEADLESS=1 wizard 仅 stdout(SSH/CI 默认探测)
|
|
31
40
|
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
41
|
+
* 设计纪律(wizard 子命令,2026-09-02 商店上架后):
|
|
42
|
+
* **浏览器自己当安装器**——浏览器商店页直达,点「添加至 Chrome」即完事;gotry
|
|
43
|
+
* 不扮演 GUI/CLI 越界者:不动剪贴板、不动 osascript/zenity/msg、不 open 浏览器。
|
|
44
|
+
* dsh host UI 是 gotry 工具渲染面,needs-extension 时 URL 走 verdict 字段给 UI
|
|
45
|
+
* 自渲。wizard 子命令退化为「离线健康探活等待」,只输出 stdout,不挡用户。
|
|
35
46
|
*/
|
|
36
47
|
|
|
37
48
|
import { spawn } from 'node:child_process'
|
|
@@ -45,6 +56,10 @@ const AUTO = process.argv.includes('--auto')
|
|
|
45
56
|
const CHECK_ONLY = process.argv.includes('--check-only')
|
|
46
57
|
const WIZARD = process.argv.includes('wizard') || process.argv.includes('--wizard')
|
|
47
58
|
const WIZARD_DRY_RUN = process.argv.includes('--dry-run')
|
|
59
|
+
// 扩展分发源(ADR-21):默认 bundled(包内副本,离线确定性);github 显式 opt-in
|
|
60
|
+
// (镜像 GOTRY_SESSION_TRANSPORT=cdp 的显式 opt-in 文化——不静默引入网络依赖)
|
|
61
|
+
const EXT_FROM_ARG = (process.argv.find((a) => a.startsWith('--extension-from=')) ?? '').split('=')[1]
|
|
62
|
+
const EXTENSION_FROM = EXT_FROM_ARG === 'github' || EXT_FROM_ARG === 'bundled' ? EXT_FROM_ARG : process.env.GOTRY_EXTENSION_SOURCE === 'github' ? 'github' : 'bundled'
|
|
48
63
|
|
|
49
64
|
const HBCLI_INSTALL_CMD = 'curl -fsSL https://github.com/hotelbyte-com/docs/releases/latest/download/install.sh | bash'
|
|
50
65
|
const REACH_INSTALL_URL = 'git+https://github.com/Panniantong/Agent-Reach.git'
|
|
@@ -188,29 +203,85 @@ async function setupExtension() {
|
|
|
188
203
|
say(` ✗ 落位失败(${e.message})——不影响 gotry:会话检索降级;可手动拷贝 ${srcDir} → ${dstDir}`)
|
|
189
204
|
return { ok: false }
|
|
190
205
|
}
|
|
191
|
-
say(` ✓ 已落位 ${dstDir}(v${srcVersion};manifest 带固定 key
|
|
192
|
-
say('
|
|
206
|
+
say(` ✓ 已落位 ${dstDir}(v${srcVersion};manifest 带固定 key,unpacked 扩展 ID 恒为 olpgkofjhhiiiahdkkbcninhjmegghfe)`)
|
|
207
|
+
say(' 推荐(免下面三步):Chrome 应用商店一键安装 GoTry Session Bridge(自动更新): https://chromewebstore.google.com/detail/gotry-session-bridge/oeajpiccmonococjcegddlooeeohlbgd')
|
|
208
|
+
say(' 本地加载(每台浏览器一次,约 30 秒):Chrome 打开 chrome://extensions → 右上角开启「开发者模式」→「加载已解压的扩展程序」→ 选择 ~/.gotry/extension')
|
|
209
|
+
say(' 获取/更新本地通道扩展可走 GitHub Releases:npx gotry setup --extension-from=github(自动下载校验落位;手动下载: github.com/Danceiny/gotry/releases 标签 ext-*)')
|
|
193
210
|
say(' 装好即生效,零系统弹窗;扩展卡片开关=总闸(与 gotry 授权闸 sessionAccess 双重控制)')
|
|
194
211
|
return { ok: true }
|
|
195
212
|
}
|
|
196
213
|
|
|
197
214
|
/**
|
|
198
|
-
*
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
|
|
215
|
+
* GitHub Releases 下载通道(ADR-21 分发 A,--extension-from=github 显式 opt-in):
|
|
216
|
+
* repo 态 spawn tsx CLI(与 wizard/health-watch 同款单行 JSON 回传),npm 态 import dist JS;
|
|
217
|
+
* 任何失败显式降级 bundled 包内副本——安装外部产物永远不挡 gotry 本体。
|
|
218
|
+
*/
|
|
219
|
+
async function setupExtensionFromGithub() {
|
|
220
|
+
say('[gotry-setup] GoTry Session Bridge 扩展 · GitHub Releases 下载通道(dist-manifest → tar.gz → SHA256 → key 钉扎)')
|
|
221
|
+
const destDir = join(homedir(), '.gotry', 'extension')
|
|
222
|
+
const cliScript = join(repoRoot, 'ts', 'scripts', 'extension-distribution-cli.ts')
|
|
223
|
+
const releaseBase = process.env.GOTRY_EXTENSION_RELEASE_BASE // 镜像/测试基址覆盖;缺省 GitHub 官方
|
|
224
|
+
let r = null
|
|
225
|
+
if (existsSync(cliScript)) {
|
|
226
|
+
r = await new Promise((resolve) => {
|
|
227
|
+
const child = spawn('npx', ['--yes', 'tsx', cliScript, '--dest', destDir, '--source-dir', join(repoRoot, 'extension'), ...(releaseBase ? ['--release-base', releaseBase] : []), ...(CHECK_ONLY ? ['--check-only'] : [])], {
|
|
228
|
+
cwd: join(repoRoot, 'ts'),
|
|
229
|
+
stdio: ['ignore', 'pipe', 'inherit'],
|
|
230
|
+
})
|
|
231
|
+
let buf = ''
|
|
232
|
+
child.stdout.on('data', (c) => { buf += c.toString('utf8') })
|
|
233
|
+
child.on('close', () => {
|
|
234
|
+
const line = (buf.trim().split('\n').pop() ?? '')
|
|
235
|
+
if (line.startsWith('{')) { try { resolve(JSON.parse(line)); return } catch { /* 落到下一行 */ } }
|
|
236
|
+
resolve({ ok: false, action: 'fallback-bundled', error: `CLI 无 JSON 输出(末行:${line.slice(0, 120)})` })
|
|
237
|
+
})
|
|
238
|
+
child.on('error', (e) => resolve({ ok: false, action: 'fallback-bundled', error: `CLI 启动失败 ${e.message}` }))
|
|
239
|
+
})
|
|
240
|
+
} else {
|
|
241
|
+
try {
|
|
242
|
+
const mod = await import('../dist/capabilities/session/extension-distribution.js')
|
|
243
|
+
r = await mod.installExtensionFromGithub({ destDir, pinnedSourceDir: join(repoRoot, 'extension'), ...(releaseBase ? { releaseBase } : {}), checkOnly: CHECK_ONLY })
|
|
244
|
+
} catch (e) {
|
|
245
|
+
r = { ok: false, action: 'fallback-bundled', error: `dist 模块不可用:${e.message}` }
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (r && r.ok) {
|
|
249
|
+
if (r.action === 'installed') {
|
|
250
|
+
say(` ✓ 已从 GitHub Releases 落位 ${destDir}(v${r.version}${r.previousVersion ? `,旧 v${r.previousVersion}` : ''})`)
|
|
251
|
+
say(' 已装过旧版的浏览器:chrome://extensions → GoTry Session Bridge 卡片 → 「重新加载」一次即生效(新装跳过)。')
|
|
252
|
+
return { ok: true }
|
|
253
|
+
}
|
|
254
|
+
// up-to-date(check-only 下远端更新也会走到这里,只报告不落盘)
|
|
255
|
+
if (r.version != null && r.previousVersion != null && r.version !== r.previousVersion) {
|
|
256
|
+
say(` ✓ 远端有新版 v${r.version}(本地 v${r.previousVersion})${CHECK_ONLY ? '(--check-only 只报告)' : ''}`)
|
|
257
|
+
return { ok: true }
|
|
258
|
+
}
|
|
259
|
+
say(` ✓ 已是最新(v${r.version ?? '?'});若浏览器里尚未加载:chrome://extensions → 开发者模式 → 加载已解压 → 选 ${destDir}`)
|
|
260
|
+
return { ok: true }
|
|
261
|
+
}
|
|
262
|
+
say(` ✗ GitHub 通道失败(${r && r.error ? r.error : '未知'})——显式降级包内副本:`)
|
|
263
|
+
return setupExtension()
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* 调 (npm 安装态降级)只确保扩展落位后跑扩展分支 hydration。wizard.ts 现在
|
|
268
|
+
* 只做 ensure + watch precheck(Node 端职责),不 spawn 任何 GUI;真正的浏览器
|
|
269
|
+
* 商店页安装走 dsh UI 渲染的 verdict.installUrl,健康探活走 runHealthWatch。
|
|
270
|
+
*
|
|
271
|
+
* 历史:wizard-bootstrap.ts(此文件之前 spawn 的 tsx 子进程)已删除;
|
|
272
|
+
* run-all §40 onboarding-tests 直接 import wizard.ts 的 runOnboardingWizard。
|
|
202
273
|
*/
|
|
203
274
|
async function runWizardBootstrap() {
|
|
275
|
+
// wizard.ts 已退化为纯 Node 2 步(ensure + watch precheck),不 spawn 任何东西;
|
|
276
|
+
// tsx 子进程路径 = <repoRoot>/ts;npm 安装态(wizard-bootstrap.ts 已删除)走包内 setupExtension。
|
|
204
277
|
const wizardScript = join(repoRoot, 'ts', 'scripts', 'wizard-bootstrap.ts')
|
|
205
|
-
const extensionDir = join(homedir(), '.gotry', 'extension')
|
|
206
278
|
if (!existsSync(wizardScript)) {
|
|
207
|
-
|
|
208
|
-
say('[gotry-wizard] 内置 wizard 脚本缺失(已装 npm 包态)——降级手动模式:')
|
|
279
|
+
say('[gotry-wizard] 内置 wizard 脚本缺失(已装 npm 包态;npm 安装态应在浏览器商店一键装,不需要 wizard 跑落位)——只跑包内扩展落位:')
|
|
209
280
|
await setupExtension()
|
|
210
281
|
return { ok: true }
|
|
211
282
|
}
|
|
212
283
|
return new Promise((resolve) => {
|
|
213
|
-
const child = spawn('npx', ['--yes', 'tsx', wizardScript, '--extension-dir',
|
|
284
|
+
const child = spawn('npx', ['--yes', 'tsx', wizardScript, '--extension-dir', join(homedir(), '.gotry', 'extension'), '--source-dir', join(repoRoot, 'extension')], {
|
|
214
285
|
cwd: join(repoRoot, 'ts'),
|
|
215
286
|
stdio: ['ignore', 'pipe', 'inherit'],
|
|
216
287
|
})
|
|
@@ -230,17 +301,17 @@ async function runWizardBootstrap() {
|
|
|
230
301
|
if (line.startsWith('{')) {
|
|
231
302
|
try {
|
|
232
303
|
const o = JSON.parse(line)
|
|
233
|
-
// 打印
|
|
304
|
+
// 打印 2 步 status(wizard 自己的 print 已在子进程跑了;此处父进程再 human-friendly 一次)
|
|
234
305
|
if (Array.isArray(o.steps)) {
|
|
235
306
|
for (const s of o.steps) {
|
|
236
307
|
const tag = s.status === 'ok' ? '✅' : s.status === 'skip' ? '⏭ ' : '❌'
|
|
237
308
|
say(`[gotry-wizard] ${tag} ${s.step}: ${s.summary}`)
|
|
238
309
|
}
|
|
239
310
|
}
|
|
240
|
-
say(`[gotry-wizard]
|
|
311
|
+
say(`[gotry-wizard] extensionDir=${o.extensionDir}; ok=${o.ok}`)
|
|
241
312
|
finish({ ok: o.ok === true })
|
|
242
313
|
} catch {
|
|
243
|
-
say(
|
|
314
|
+
say('[gotry-wizard] ✗ wizard JSON 解析失败')
|
|
244
315
|
finish({ ok: false })
|
|
245
316
|
}
|
|
246
317
|
try { child.kill('SIGTERM') } catch { /* ignore */ }
|
|
@@ -369,82 +440,58 @@ async function runInlineHealthWatch(timeoutMs) {
|
|
|
369
440
|
}
|
|
370
441
|
|
|
371
442
|
async function main() {
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
443
|
+
// wizard 子命令(2026-09-02 商店上架后退化):**只走 stdout 提示 + 健康探活等待**;
|
|
444
|
+
// 不 spawn 任何 GUI 工具(不动 pbcopy / osascript / open / xdg-open / zenity),
|
|
445
|
+
// 不打开 chrome://extensions,不动扩展路径——浏览器自己当安装器,gotry 不越界。
|
|
446
|
+
if (WIZARD) {
|
|
376
447
|
if (WIZARD_DRY_RUN) {
|
|
377
|
-
say('[gotry-wizard] dry-run
|
|
378
|
-
say(' 步骤: ensure-extension-files →
|
|
379
|
-
say(' 平台: darwin(
|
|
448
|
+
say('[gotry-wizard] dry-run(零网络零浏览器零剪贴板;run-all §40 走这条)')
|
|
449
|
+
say(' 步骤: ensure-extension-files → watch-extension-ready(2 步纯 Node 端)')
|
|
450
|
+
say(' 平台: 不依赖 darwin/linux/win32(只 stdout)')
|
|
380
451
|
say(' ✅ exit 0')
|
|
381
452
|
process.exit(0)
|
|
382
453
|
}
|
|
383
|
-
// 真实路径:spawn tsx 子进程跑 wizard-bootstrap.ts(同一份 wizard.ts 代码),
|
|
384
|
-
// 拿 5 步 OnboardingResult 打印 status(ok/✅/⏭ /❌)+ 剪贴板/GUI 面板/落位实跑。
|
|
385
|
-
const wizardResult = await runWizardBootstrap()
|
|
386
|
-
if (!wizardResult.ok) {
|
|
387
|
-
say('[gotry-wizard] ✗ wizard 编排有失败步——见上方;扩展未引导到位;可手动 chrome://extensions 加载 ~/.gotry/extension')
|
|
388
|
-
process.exit(1)
|
|
389
|
-
}
|
|
390
|
-
// wizard 闭环:装完扩展就位 stdout 翻「✅ 就绪」(由 health-watch 推动)
|
|
391
454
|
say('')
|
|
392
455
|
say('[gotry-wizard] ────────────────────────────────')
|
|
393
|
-
say('[gotry-wizard]
|
|
394
|
-
say('[gotry-wizard]
|
|
395
|
-
say(
|
|
396
|
-
say(
|
|
397
|
-
say('[gotry-wizard] ③ 弹窗「添加扩展」点「添加」')
|
|
456
|
+
say('[gotry-wizard] GoTry Session Bridge 是浏览器的事——在 Chrome 应用商店一键装:')
|
|
457
|
+
say('[gotry-wizard] https://chromewebstore.google.com/detail/gotry-session-bridge/oeajpiccmonococjcegddlooeeohlbgd')
|
|
458
|
+
say('[gotry-wizard] 装好即生效;装完后我会自动检测到(下方探活等待,最长 120s)。')
|
|
459
|
+
say('[gotry-wizard] 全过程 gotry 不动你的剪贴板、不开你的 Chrome、不弹任何面板。')
|
|
398
460
|
say('[gotry-wizard] ────────────────────────────────')
|
|
399
|
-
say('[gotry-wizard] 装好后**无需重跑任何命令**——下面会自动探活,扩展一就位 stdout 翻绿。')
|
|
400
461
|
say('')
|
|
401
|
-
say('[gotry-wizard]
|
|
402
|
-
|
|
403
|
-
//
|
|
462
|
+
say('[gotry-wizard] 探活中(Ctrl+C 立即退出)…')
|
|
463
|
+
|
|
464
|
+
// 健康探活等待:扩展一就位即返回;无 GUI/剪贴板副作用
|
|
404
465
|
const watchResult = await runHealthWatch()
|
|
405
466
|
if (watchResult.ready) {
|
|
406
|
-
say(`[gotry-wizard] ✅ 扩展就绪(
|
|
407
|
-
say('[gotry-wizard] 现在调用 gotry_session_search 即可拿到会话检索结果(零后续手工动作)。')
|
|
408
|
-
say('[gotry-wizard] 入口示例:')
|
|
409
|
-
say(' ./gotry # 启动 dsh → 用 gotry_session_search 工具')
|
|
410
|
-
say(' ./gotry session-check # 跑 sf-01..08 八条 query 双源 scorer(goal 2)')
|
|
467
|
+
say(`[gotry-wizard] ✅ 扩展就绪(${watchResult.attempts} 次探活,等待 ${watchResult.waitedMs}ms)`)
|
|
411
468
|
process.exit(0)
|
|
412
469
|
} else {
|
|
413
|
-
say(`[gotry-wizard] ✗ ${watchResult.reason}
|
|
414
|
-
say('[gotry-wizard]
|
|
470
|
+
say(`[gotry-wizard] ✗ ${watchResult.reason}——未在 ${watchResult.timeoutMs}ms 内就绪`)
|
|
471
|
+
say('[gotry-wizard] 不需重跑;扩展未装时 dsh UI 中 gotry_session_search 的 needs-extension 会带商店链接,wizard 完全幂等。')
|
|
415
472
|
process.exit(1)
|
|
416
473
|
}
|
|
417
474
|
}
|
|
418
475
|
|
|
419
476
|
if (process.platform === 'win32') {
|
|
420
|
-
say('[gotry-setup]
|
|
421
|
-
say(` hbcli: ${HBCLI_INSTALL_CMD}(WSL);agent-reach: python -m venv .venv && .venv/Scripts/pip install ${REACH_INSTALL_URL}`)
|
|
422
|
-
say(' dsh-better-sidebar: npx -y --package @deepseek-ai/dsh dsh plugin --profile web add dsh-better-sidebar@latest')
|
|
423
|
-
say(' GoTry Session Bridge 扩展:手动把包内 extension/ 目录拷到 %USERPROFILE%\\.gotry\\extension,再在 chrome://extensions 开发者模式「加载已解压的扩展程序」')
|
|
477
|
+
say('[gotry-setup] GoTry Session Bridge 扩展:推荐 Chrome 应用商店一键安装 https://chromewebstore.google.com/detail/gotry-session-bridge/oeajpiccmonococjcegddlooeeohlbgd ;本地通道:手动把包内 extension/ 目录拷到 %USERPROFILE%\\.gotry\\extension,再在 chrome://extensions 开发者模式「加载已解压的扩展程序」')
|
|
424
478
|
process.exit(AUTO ? 0 : 1)
|
|
425
479
|
}
|
|
426
480
|
if (AUTO && (process.env.CI || process.env.GOTRY_SETUP_SKIP === '1')) {
|
|
427
|
-
say('[gotry-setup] CI/GOTRY_SETUP_SKIP
|
|
428
|
-
say('GoTry installed. Run: npx gotry web (dsh Web UI on :3080)')
|
|
481
|
+
say('[gotry-setup] CI/GOTRY_SETUP_SKIP 检测——跳过')
|
|
429
482
|
process.exit(0)
|
|
430
483
|
}
|
|
431
484
|
if (!AUTO && process.env.GOTRY_SETUP_SKIP === '1') { say('[gotry-setup] GOTRY_SETUP_SKIP=1——跳过'); process.exit(0) }
|
|
432
485
|
const results = []
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
if (process.env.GOTRY_SETUP_REACH !== '0') results.push(await setupReach())
|
|
436
|
-
else say('[gotry-setup] agent-reach:GOTRY_SETUP_REACH=0 跳过')
|
|
437
|
-
if (process.env.GOTRY_SETUP_SIDEBAR !== '0') results.push(await setupSidebar())
|
|
438
|
-
else say('[gotry-setup] dsh-better-sidebar:GOTRY_SETUP_SIDEBAR=0 跳过')
|
|
439
|
-
if (process.env.GOTRY_SETUP_EXTENSION !== '0') results.push(await setupExtension())
|
|
486
|
+
// gotry 自留面只剩扩展是否就位;hbcli/agent-reach/dsh-better-sidebar 由各自宿主生态自管。
|
|
487
|
+
if (process.env.GOTRY_SETUP_EXTENSION !== '0') results.push(await (EXTENSION_FROM === 'github' ? setupExtensionFromGithub() : setupExtension()))
|
|
440
488
|
else say('[gotry-setup] GoTry Session Bridge 扩展:GOTRY_SETUP_EXTENSION=0 跳过')
|
|
441
|
-
say('[gotry-setup] flyai:无需安装(npx 每次自拉 @fly-ai/flyai-cli,免 key)')
|
|
442
489
|
const failed = results.filter((r) => !r.ok).length
|
|
443
490
|
if (failed > 0) {
|
|
444
|
-
say(`[gotry-setup] ${failed} 项未就绪——gotry
|
|
491
|
+
say(`[gotry-setup] ${failed} 项未就绪——gotry 本体不受影响;可稍后重跑: npx gotry setup`)
|
|
445
492
|
process.exit(AUTO ? 0 : 1)
|
|
446
493
|
}
|
|
447
|
-
say('[gotry-setup]
|
|
494
|
+
say('[gotry-setup] 扩展就绪检查完成。')
|
|
448
495
|
process.exit(0)
|
|
449
496
|
}
|
|
450
497
|
|