@danceiny/gotry 0.0.1-rc.12 → 0.0.1-rc.14
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 +121 -189
- package/README.zh-CN.md +233 -0
- package/bin/gotry-bootstrap.js +126 -0
- package/bin/gotry-inner.js +10 -3
- package/cordis.gotry-patch.yml +2 -2
- package/dist/capabilities/hbcli.js +42 -15
- package/dist/capabilities/session/transport.js +11 -1
- package/dist/capabilities/session-login.js +17 -1
- package/dist/capabilities/session-search.js +2 -1
- package/dist/scripts/bootstrap-tests.js +56 -0
- package/dist/scripts/flyai-tests.js +95 -0
- package/dist/scripts/hbcli-tests.js +28 -3
- package/dist/scripts/session-tests.js +2 -0
- package/dist/src/index.js +9 -4
- package/package.json +2 -1
- package/ts/capabilities/hbcli.ts +51 -19
- package/ts/capabilities/session/transport.ts +22 -1
- package/ts/capabilities/session-login.ts +17 -1
- package/ts/capabilities/session-search.ts +2 -1
- package/ts/src/index.ts +18 -6
package/README.md
CHANGED
|
@@ -1,278 +1,210 @@
|
|
|
1
|
+
[English](README.md) | [简体中文](README.zh-CN.md)
|
|
2
|
+
|
|
1
3
|
# GoTry
|
|
2
4
|
|
|
3
5
|
[](https://github.com/Danceiny/gotry/actions/workflows/ci.yml)
|
|
4
6
|
|
|
5
|
-
>
|
|
6
|
-
>
|
|
7
|
-
|
|
8
|
-
**GoTry 是「从出发到下一次出发」的 AI 旅行 Agent**:你用一句话说想去哪、为什么想出发;它先问清楚你的工作时间和已订资源,再用**数学求解器**给你一份经过验证的行程方案。
|
|
7
|
+
> **Body and soul — more travel, less tourism.**
|
|
8
|
+
> *身体和灵魂,更多旅行,更少旅游。*
|
|
9
9
|
|
|
10
|
-
**GoTry is an AI travel agent for departure
|
|
10
|
+
**GoTry is an AI travel agent for "departure to next departure."** You say where you want to go and why; it asks about your working hours and existing bookings, then hands you a **formally verified itinerary** — computed by a solver, not guessed by a model.
|
|
11
11
|
|
|
12
12
|
| | |
|
|
13
13
|
|---|---|
|
|
14
|
-
| **Version** | `v0.0.1-rc.
|
|
15
|
-
| **
|
|
16
|
-
| **
|
|
17
|
-
| **
|
|
18
|
-
| **License** | **MIT** (2026-08-23 落定,见 [LICENSE](LICENSE)) |
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## ✨ 它做什么 — What it does
|
|
24
|
-
|
|
25
|
-
GoTry 把「想去哪」变成「能不能、怎么去」:
|
|
26
|
-
|
|
27
|
-
| 阶段 | AI/Engine | 输什么 |
|
|
28
|
-
|---|---|---|
|
|
29
|
-
| **动机访谈** | LLM | 必问项:工作窗口 / 已订资源 / 出发城市 |
|
|
30
|
-
| **事实抽取** | LLM | 工作窗口生效 + 休假语义识别 |
|
|
31
|
-
| **可行性判定** | **Z3** | 哪些候选目的地**可行**、哪些**不可行**、为什么、**如何最小化改动让它变可行** |
|
|
32
|
-
| **门到门全成本** | 求解器 | 真实飞行时长(含时差)+ 醒来起夜惩罚 + 接驳代价 + 到达精力 % |
|
|
33
|
-
| **证据链** | 渲染层 | 每个数字标 `[骨架:openflights]`、`[实时API:hbcli]`、`[静态包:估算]` |
|
|
34
|
-
|
|
35
|
-
**不像普通 AI 聊天**——LLM 只做理解和解释,**判定与算术是数学求解器**算的。
|
|
36
|
-
|
|
37
|
-
> **Unlike a regular AI chat**, the LLM only translates and explains. **Decisions and arithmetic are computed by a Z3 solver**, not guessed.
|
|
14
|
+
| **Version** | `v0.0.1-rc.13+` (npm `latest`; [release notes](docs/release-notes.md)) |
|
|
15
|
+
| **Runtime** | DeepSeek Harness **0.1.2-alpha.1** (vendored; [upstream](https://github.com/deepseek-ai/DeepSeek-Harness)) · Z3 WASM · Cordis |
|
|
16
|
+
| **License** | **MIT** ([LICENSE](LICENSE)) |
|
|
17
|
+
| **Docs** | English (this file) · [简体中文 README](README.zh-CN.md) · deep engineering docs are Chinese-first ([docs/architecture.md](docs/architecture.md)) |
|
|
38
18
|
|
|
39
19
|
---
|
|
40
20
|
|
|
41
|
-
##
|
|
42
|
-
|
|
43
|
-
### 一行启动(npm,推荐)
|
|
21
|
+
## ⚡ 30-second start
|
|
44
22
|
|
|
45
23
|
```bash
|
|
46
|
-
npx @danceiny/gotry web
|
|
24
|
+
npx @danceiny/gotry web
|
|
25
|
+
# First run creates .env: LLM_API_KEY=<DeepSeek key, or OpenAI-compatible key>
|
|
26
|
+
# → open http://127.0.0.1:3080 and chat: "I want three relaxing days in Dali"
|
|
47
27
|
```
|
|
48
28
|
|
|
49
|
-
|
|
50
|
-
|
|
29
|
+
| You want | Command |
|
|
30
|
+
|---|---|
|
|
31
|
+
| 🖥️ Conversational planner (recommended) | `npx @danceiny/gotry web` → chat UI on :3080 |
|
|
32
|
+
| 🤖 Scripted / one-shot answer | `npx @danceiny/gotry "Two recovery days from Shenzhen, budget 3000"` |
|
|
33
|
+
| 🛠️ Developer: run from source | see [source install](#%EF%B8%8F-developer-source-install) below |
|
|
51
34
|
|
|
52
|
-
|
|
35
|
+
- Requires Node 22+ and one LLM API key. Zero-config startup — the dsh runtime is mounted automatically via a cordis patch.
|
|
53
36
|
|
|
54
|
-
|
|
37
|
+
---
|
|
55
38
|
|
|
56
|
-
|
|
57
|
-
git clone https://github.com/Danceiny/gotry
|
|
58
|
-
cd gotry
|
|
59
|
-
```
|
|
39
|
+
## ✨ What it does
|
|
60
40
|
|
|
61
|
-
|
|
41
|
+
GoTry turns "I want to go somewhere" into "can I, how, and at what true cost":
|
|
62
42
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
43
|
+
| Stage | Who | Output |
|
|
44
|
+
|---|---|---|
|
|
45
|
+
| **Motivation interview** | LLM | Mandatory questions: working window / booked resources / departure city |
|
|
46
|
+
| **Fact extraction** | LLM | Working hours semantics, leave semantics |
|
|
47
|
+
| **Feasibility verdict** | **Z3 solver** | Which destinations are feasible / infeasible, why, and the **smallest change that makes them feasible** |
|
|
48
|
+
| **Door-to-door true cost** | Solver | Real flight duration (incl. time zones) + early-wake penalty + transfer cost + arrival energy % |
|
|
49
|
+
| **Evidence chain** | Render layer | Every number tagged: `[骨架:openflights]` / `[实时API:flyai]` / `[静态包:估算]` |
|
|
68
50
|
|
|
69
|
-
|
|
70
|
-
> 避免 npm 一键分发时把整个 dsh 也打包进去。
|
|
71
|
-
> 之后可以重复使用,无需重装。
|
|
51
|
+
**Unlike a regular AI chat**, the LLM only translates and explains. **Decisions and arithmetic are computed by a Z3 solver**, not guessed.
|
|
72
52
|
|
|
73
|
-
|
|
53
|
+
---
|
|
74
54
|
|
|
75
|
-
|
|
76
|
-
- 一个 LLM API key(默认走 DeepSeek,也支持 OpenAI 兼容协议)
|
|
55
|
+
## 🚀 Quick start
|
|
77
56
|
|
|
78
|
-
|
|
57
|
+
### One-liner (npm, recommended)
|
|
79
58
|
|
|
80
59
|
```bash
|
|
81
|
-
|
|
82
|
-
# 填 LLM_API_KEY(deepseek: sk-...; 也兼容 OpenAI/Anthropic 兼容协议)
|
|
60
|
+
npx @danceiny/gotry web
|
|
83
61
|
```
|
|
84
62
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
gotry 把 **DeepSeek Harness (dsh) 运行时**作为唯一推荐面——任何自然语言输入在那里面都能跟 GoTry 正常对话(自动调用引擎、追问缺失字段、给出证据链)。
|
|
88
|
-
|
|
89
|
-
启动方式有三种,对应三种使用场景:
|
|
63
|
+
That's it — the dsh chat UI on `:3080` with the GoTry persona mounted. First cold start is 6–15 s; if port `:3080` is taken, free it first; unexpected exits leave evidence in `gotry-state/incidents.jsonl` (nothing silent).
|
|
90
64
|
|
|
91
|
-
|
|
92
|
-
|---|---|---|---|
|
|
93
|
-
| **① dsh Web 对话框**(推荐) | `./gotry web` | 第一天上手;持续多轮规划;想看推理过程可视化 | `http://127.0.0.1:3080` 浏览器界面;带 GoTry 人格的对话框 |
|
|
94
|
-
| **② headless 一次性问答** | `./gotry "一句完整任务..."` | 写脚本、CI 自动化、定向 LLM 调试 | stdout 输出 markdown 回答 |
|
|
95
|
-
| **③ help** | `./gotry help` | 不知道用法 | 三行帮助 |
|
|
65
|
+
### Developer source install
|
|
96
66
|
|
|
97
67
|
```bash
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
# 调试/自动化:直接一问一答,无浏览器
|
|
103
|
-
./gotry "我想从深圳休整两天,预算 3000"
|
|
104
|
-
# → stdout 拿到引擎判定 + 证据链 + 候选 gate
|
|
105
|
-
|
|
106
|
-
# 不知道用法
|
|
107
|
-
./gotry help
|
|
68
|
+
git clone https://github.com/Danceiny/gotry && cd gotry
|
|
69
|
+
cd ts/dsh-runtime && pnpm install && cd ../.. # ① vendored dsh 0.1.2-alpha.1 (one-off)
|
|
70
|
+
cp .env.example .env # ② set LLM_API_KEY
|
|
71
|
+
./gotry web # ③ in-repo entry, same UX
|
|
108
72
|
```
|
|
109
73
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
> **headless 报错兜底**:意外退出(exit ≠ 0 / signal)会 fsync 一条记录到 `gotry-state/incidents.jsonl`,作为事故证据而不是沉默(D-NEW 进程护栏)。
|
|
74
|
+
| Entry | Command | When |
|
|
75
|
+
|---|---|---|
|
|
76
|
+
| dsh Web chat (recommended) | `./gotry web` | multi-turn planning with visualized reasoning → :3080 |
|
|
77
|
+
| headless one-shot | `./gotry "one full task"` | scripts / CI / targeted debugging → stdout |
|
|
115
78
|
|
|
116
|
-
|
|
79
|
+
---
|
|
117
80
|
|
|
118
|
-
|
|
81
|
+
## 🧰 18 tools
|
|
119
82
|
|
|
120
|
-
|
|
83
|
+
| Group | Tool | What it does |
|
|
84
|
+
|---|---|---|
|
|
85
|
+
| **Realtime retrieval (OTA/official, read-only)** | `gotry_flyai_search` | Live flight/train/hotel quotes via the Fliggy official channel (masked hotel prices upstream; real prices on the jumpUrl page) |
|
|
86
|
+
| | `gotry_session_search` | Ctrip flights on the **user's own logged-in Chrome session** (consent-gated, physically read-only) |
|
|
87
|
+
| | `gotry_session_login` | Login bootstrap: auto-detects existing login first; otherwise opens the login entry in the user's Chrome (**zero terminal**) |
|
|
88
|
+
| | `gotry_weather_check` | Open-Meteo forecast ≤16 d + historical climate baseline |
|
|
89
|
+
| | `gotry_flight_verify` | OpenSky ADS-B live flight observation (three-valued) |
|
|
90
|
+
| | `gotry_skeleton_check` | OpenFlights 168-hub-pair connectivity (three-valued) |
|
|
91
|
+
| **Inventory & catalog** | `gotry_hotel_search` | hotel-byte realtime bridge, degrades to static pack (tagged) |
|
|
92
|
+
| | `gotry_anything_search` | mixed city/hotel/POI catalog (hotel-be Anything) |
|
|
93
|
+
| **Decision engine** | `gotry_feasibility_check` | Door-to-door true-cost feasibility (Z3), per-candidate verdicts |
|
|
94
|
+
| **Memory & reachability** | `gotry_motivation_save` | Persist motivation profile (evidence mandatory, anti-fabrication) |
|
|
95
|
+
| | `gotry_wish_pool_add` / `gotry_wish_pool_list` | "next departure" wish pool + 0..1 conditional recall |
|
|
96
|
+
| | `gotry_companion_save` · `gotry_trip_log` | companion profile / travel timeline |
|
|
97
|
+
| **General external** | `gotry_web_search` · `gotry_video_subtitle` · `gotry_github_search` · `gotry_agent_reach` | web / subtitles / GitHub / all-channel external info (via Agent-Reach) |
|
|
121
98
|
|
|
122
|
-
|
|
99
|
+
---
|
|
123
100
|
|
|
124
|
-
|
|
101
|
+
## 🔐 Account session: consent & privacy
|
|
125
102
|
|
|
126
|
-
|
|
127
|
-
2. 保持 Chrome 打开;GoTry 发起连接后,在 Chrome 弹出的权限框中确认连接;
|
|
128
|
-
3. 若遇到登录、OTP、验证码或 challenge,由用户本人处理,GoTry 不读取或代填这些信息。
|
|
103
|
+
The account session channel reads realtime hotel/flight data from **the user's own logged-in Chrome**, under four hard rules:
|
|
129
104
|
|
|
130
|
-
|
|
105
|
+
1. **Login happens on the external website.** GoTry never offers, fills, or collects any password / SMS code / cookie value. It only answers one boolean question: "does a login-ticket cookie exist" (reads cookie **names** only — zero values touched).
|
|
106
|
+
2. **Consent card, once per session.** The first account-session use pops a runtime approval card; approval holds for the session, a refusal revokes it for the session (no repeat prompting). Master switch `sessionAccess: ask|allow|off` at any time.
|
|
107
|
+
3. **Physically read-only.** A ReadGuard aborts all write requests at the network layer (ordering/payment is unreachable in transport); the agent never touches credentials or captchas — on a captcha it stops and hands control back.
|
|
108
|
+
4. **Never hijacks your browser.** Retrieval/login always open their own dedicated tab; the login page is brought to front and stays with you; routine test runs never open browser windows.
|
|
131
109
|
|
|
110
|
+
> One-time prerequisite: in your daily Chrome, open `chrome://inspect/#remote-debugging` and enable the switch (Chrome 144+). Without it the tools return `needs-attach` with instructions and spend nothing.
|
|
132
111
|
|
|
133
112
|
---
|
|
134
113
|
|
|
135
|
-
## 🎬
|
|
114
|
+
## 🎬 A conversation — Demo
|
|
136
115
|
|
|
137
|
-
输入 → 引擎判定 → 输出(真实截图,monospace 保留原味):
|
|
138
|
-
|
|
139
|
-
```
|
|
140
|
-
> 我想去洱海边发呆两三天,上海出发,预算 3000,年假别让我办公。
|
|
141
|
-
|
|
142
|
-
GoTry: 收到。先把约束记下来——
|
|
143
|
-
• 窗口: 2 天(2026 年窗口)
|
|
144
|
-
• 出发: 上海
|
|
145
|
-
• 预算: ¥3000 全含
|
|
146
|
-
• 动机: 休整 / [escape_rest: 0.7]
|
|
147
|
-
• 不要求工作窗口(年假)
|
|
148
|
-
• 还没订任何东西
|
|
149
|
-
|
|
150
|
-
引擎判定:
|
|
151
|
-
|
|
152
|
-
**大理·洱海: 现在不行** —— 冲突约束: duration。
|
|
153
|
-
你的 2 天窗口装不下「至少 5 天的洱海休整」(你之前的画像也有此约)。
|
|
154
|
-
放宽方案: 把行程延长到 5 天,约 ¥4950。
|
|
155
|
-
★已放入「下一次出发」清单: 需 5 天起,3-5 / 9-11 月最佳。
|
|
156
|
-
|
|
157
|
-
**千岛湖: 可行** (G7315 06:35 出发,bus 接驳,
|
|
158
|
-
¥996,起床 06:35,到达精力 84%,门到门 5h20m,
|
|
159
|
-
有效休整 4.4h)
|
|
160
|
-
**太湖: 可行** (G101 09:00 出发,
|
|
161
|
-
¥716,起床 07:12,到达精力 84%,
|
|
162
|
-
有效休整 4.6h)
|
|
163
|
-
|
|
164
|
-
建议: 千岛湖(意象匹配 80%)。
|
|
165
|
-
备选: 太湖(¥716,匹配 60%)。
|
|
166
|
-
|
|
167
|
-
**待你决定**:
|
|
168
|
-
1. 千岛湖还是太湖?(前者更贴意象,后者更省)
|
|
169
|
-
2. 出发班次选 G7315(06:35)还是更晚的?
|
|
170
|
-
|
|
171
|
-
[骨架:openflights] ✓ SZX↔PVG 已校验 [实时API:hbcli] 上海机场在跑
|
|
172
|
-
[静态包:估算] G7315/G7316 价格按 7-8 月淡季估算
|
|
173
116
|
```
|
|
117
|
+
> Two or three days staring at Erhai Lake, leaving from Shanghai, budget 3000, annual leave — no work.
|
|
118
|
+
|
|
119
|
+
GoTry: constraints captured —
|
|
120
|
+
• window: 2 days • departure: Shanghai • budget: ¥3000 all-in
|
|
121
|
+
• motivation: recovery [escape_rest: 0.7] • no bookings yet
|
|
174
122
|
|
|
175
|
-
|
|
123
|
+
Engine verdict:
|
|
124
|
+
**Erhai, Dali: not feasible now** — a 2-day window can't hold "at least 5 days of Erhai recovery".
|
|
125
|
+
Relax: extend to 5 days, ~¥4950. ★ saved to your "next departure" wish pool.
|
|
126
|
+
**Qiandao Lake: feasible** (G7315 06:35, ¥996, arrival energy 84%, effective rest 4.4h)
|
|
127
|
+
**Taihu Lake: feasible** (G101 09:00, ¥716, effective rest 4.6h)
|
|
128
|
+
Suggestion: Qiandao Lake (imagery match 80%).
|
|
129
|
+
|
|
130
|
+
[skeleton:openflights] ✓ SZX↔PVG verified [realtime:hbcli] Shanghai airports live
|
|
131
|
+
[static-pack:estimate] G7315/G7316 priced on Jul–Aug off-season rates
|
|
132
|
+
```
|
|
176
133
|
|
|
177
134
|
---
|
|
178
135
|
|
|
179
|
-
## 🏛️
|
|
136
|
+
## 🏛️ Architecture
|
|
180
137
|
|
|
181
138
|
```
|
|
182
139
|
┌──────────────────────────────────────────────────────────────┐
|
|
183
|
-
│ L1
|
|
184
|
-
│ L2
|
|
185
|
-
│ L3
|
|
186
|
-
│ L4
|
|
187
|
-
│ L5
|
|
140
|
+
│ L1 chat-as-interface; gates are in-message choice cards │
|
|
141
|
+
│ L2 orchestration dsh runtime + GoTry plugin (ReAct); 18 tools│
|
|
142
|
+
│ L3 domain unified itinerary model + Z3 feasibility engine │
|
|
143
|
+
│ L4 data static packs + hotelbyte-cli bridge + OpenFlights │
|
|
144
|
+
│ L5 governance LoopX (objective / gates / evidence / quota) │
|
|
188
145
|
└──────────────────────────────────────────────────────────────┘
|
|
189
146
|
```
|
|
190
147
|
|
|
191
|
-
|
|
|
148
|
+
| Layer | Module | Role |
|
|
192
149
|
|---|---|---|
|
|
193
|
-
| L2 | `ts/src/index.ts` (dsh
|
|
194
|
-
| L3 | `ts/src/unified.ts` · `py/gotry_feasibility
|
|
195
|
-
| L4 | `ts/capabilities/hbcli.ts`
|
|
196
|
-
|
|
|
197
|
-
|
|
198
|
-
> 📖 完整 ADR / 演进阶段 / 债务清单见 [`docs/architecture.md`](docs/architecture.md)。
|
|
150
|
+
| L2 | `ts/src/index.ts` (dsh plugin) | 18 tools, time-anchor & memory-brief variables; execute isolation + consent gate + process guards |
|
|
151
|
+
| L3 | `ts/src/unified.ts` · `py/gotry_feasibility/` | single solving entry (candidate enumeration + flight-chain Z3) |
|
|
152
|
+
| L4 | `ts/capabilities/hbcli.ts` · `skeleton-check.ts` | realtime inventory bridge + OpenFlights skeleton (three-valued semantics) |
|
|
153
|
+
| L5 | loopx governance | objective / gates / evidence / quota |
|
|
199
154
|
|
|
155
|
+
> 📖 Full ADRs / evolution / debt ledger: [`docs/architecture.md`](docs/architecture.md) (Chinese — English versions planned for v0.1.0)
|
|
200
156
|
|
|
201
157
|
---
|
|
202
158
|
|
|
203
|
-
## ⚠️
|
|
159
|
+
## ⚠️ Status & limitations
|
|
204
160
|
|
|
205
|
-
|
|
206
|
-
- ✅ **英文面(工程层)已就绪** — 求解确定性输出面(候选/航班链 answer_md、放宽建议、排除理由)i18n catalog 化:`GOTRY_LOCALE=en` 或 `setLocale('en')` 即英文,默认 zh-CN 与金标准逐字节一致(run-all §32:en 零缺键/切换数据不动)。**残余(诚实声明)**:dsh web 界面属宿主、工具结果卡与人格对话面等 M4 校准输入落定后随校准样本补齐——种子市场仍是中国出境(G1)
|
|
207
|
-
- ✅ **机票实时数据已接入** — dated 航班链段可经 FlyAI 官方只读通道取实时票价覆写(`GOTRY_REALTIME_PRICING=1`,证据链 `[实时API:flyai@ts]`,miss/error/打码价一律降级回静态包 `data/flights_2026.json`);静态包由「唯一来源」变为「显式降级」,零 key 可用
|
|
208
|
-
- ✅ **酒店实时报价已接入(OTA 平铺)** — `gotry_flyai_search` kind=hotel 直连飞猪官方 `search-hotel`(2026-08-29 实测:结构化 名称/档级/打码价);未鉴权价格上游打码(如 ¥7xx),工具保 priceRaw 原值不伪装成数字价,真实价以 jumpUrl 酒店页为准;OTA 工具面平铺,无「主链路/降级」路由——按查询取用,证据链逐源标注
|
|
209
|
-
- ✅ **账号登录已产品化(第 18 工具)** — `gotry_session_login`:会话检索遇 `needs-login` 时 agent 直接调它,在你的 Chrome 弹出携程登录页、等你在**携程官网**完成登录——全程无需终端。**登录永远发生在外部网站、不在 gotry 里进行;gotry 永不收集/存储/传输密码、验证码或任何 cookie 值,只读「票据 cookie 是否存在」这一个事实(名称级,0 值过手)**。授权闸 v2:每会话首次调用弹审批卡、会话内记住;拒绝 = 本会话吊销;`sessionAccess: ask|allow|off` 总闸随时可关(session-tests §I/§J + smoke §13 验证)
|
|
210
|
-
- ✅ **Z3 WASM race 已根治** — 三模块各自持 WASM 实例 + 候选求解 `Promise.all` 共 Context 并发是双重根因;现收敛 `ts/src/z3-shared.ts`(单一实例+单一 Context+会话级互斥门),run-all §1 的「重试一次」止血已退役,新增 §30 进程内三形态并发回归闸 ×12(D-17)
|
|
211
|
-
- ✅ **薄壳已删除** — `shell/` 目录与 `./gotry shell` 分支已移除(2026-08-29 清理;dsh web 唯一产品面,旧命令行在 git 历史/rc.6 文档内可考)
|
|
161
|
+
**Ready (green, verifiable):**
|
|
212
162
|
|
|
163
|
+
- ✅ **Z3 WASM race fixed** (`z3-shared.ts` single instance + session-level mutex; run-all §30 concurrency regression gate)
|
|
164
|
+
- ✅ **Realtime flight/hotel/session retrieval** via the FlyAI official channel (flight/train/hotel; `GOTRY_REALTIME_PRICING=1` optionally overwrites priced legs in the solver)
|
|
165
|
+
- ✅ **English output for the deterministic solve layer** (`GOTRY_LOCALE=en`, zero missing keys)
|
|
166
|
+
- ✅ **Account session: consent gate + productized login + auto-detection** (see [🔐 Account session](#-account-session-consent--privacy))
|
|
167
|
+
- License MIT; legacy shell frontend removed (dsh web is the only product surface)
|
|
213
168
|
|
|
214
|
-
|
|
169
|
+
**Open (honest list):**
|
|
215
170
|
|
|
216
|
-
|
|
171
|
+
- ⏳ **M3 Exit not closed** — engineering & distribution ready, but real seed-user evidence (50–200 person cohort) not yet accumulated; synthetic fixtures prove contracts, not business pass
|
|
172
|
+
- ⏳ **Non-Chinese UI remnants** — the dsh web UI belongs to the host; tool result cards and persona dialogue localization await M4 calibration samples
|
|
173
|
+
- ⏳ **Ctrip-hotel / Meituan session adapters** — flight done; hotel session surfaces await real login-state backfill (next tick)
|
|
217
174
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
| [本 README](README.md) | **所有人**:是什么 · 怎么用 · 限制 |
|
|
221
|
-
| [`docs/architecture.md`](docs/architecture.md) | 工程师:分层 · ADR · 演进 · 债务 |
|
|
222
|
-
| [`docs/roadmap.md`](docs/roadmap.md) | 项目管理:M0–M6 与当前位置 |
|
|
223
|
-
| [`docs/user-guide.md`](docs/user-guide.md) | 终端用户:详细使用文档 |
|
|
224
|
-
| [`docs/gotry-product-design.md`](docs/gotry-product-design.md) | 产品:主循环 · 透明机制 · 全成本模型 |
|
|
225
|
-
| [`docs/gotry-master-outline.md`](docs/gotry-master-outline.md) | 决策者:工作分解 · 复用矩阵 |
|
|
226
|
-
| [`docs/kimi-postmortem.md`](docs/kimi-postmortem.md) | 所有人:真实 AI 旅行规划失败复盘(反面教材) |
|
|
227
|
-
| [`docs/release-notes.md`](docs/release-notes.md) | 历史:每个 tag 的发布闸勾稽 |
|
|
175
|
+
<details>
|
|
176
|
+
<summary>📖 Full status ledger (transactional state / evidence contracts / milestone stance)</summary>
|
|
228
177
|
|
|
178
|
+
Transactional state ledger (ADR-15, `gotry_async_terminal.v1`: 4/4→`succeeded`/ledger `settled`/exit 0; non-4/4→`failed`/`failed`/exit 2; replaying the terminal state recomputes nothing); dual-form architecture freeze (ADR-16: one ledger semantics for local+Web, tenant_id first-class); session-data-plane #21 field fixture scorer, dual-source contract and waiting-attach no-spend are in deterministic regression, real sf-01..08 not yet accepted; milestone stance (2026-08-29): M3 engineering & distribution ready but real seed-user evidence not closed, M4 proceeds under founder authorization without constituting M3 Exit proof, M5/M6 only after their Entry gates — details in [`docs/roadmap.md`](docs/roadmap.md) and [`docs/architecture.md`](docs/architecture.md).
|
|
179
|
+
|
|
180
|
+
</details>
|
|
229
181
|
|
|
230
182
|
---
|
|
231
183
|
|
|
232
|
-
## 🧪
|
|
184
|
+
## 🧪 Verify
|
|
233
185
|
|
|
234
186
|
```bash
|
|
235
187
|
./scripts/run-all-tests.sh
|
|
236
188
|
```
|
|
237
189
|
|
|
238
|
-
|
|
239
|
-
异步工单跨进程 · 插件 smoke · hbcli · 进程护栏(含工具异常隔离) · 天气 · 航班 ·
|
|
240
|
-
Anything · probePoi · agent-reach(web/deep/wrapper)· 双路径稳定性 ·
|
|
241
|
-
时间感评测(锚点卡/槽位过期校验/评分器/mock 回放;真模型巡检 `time-eval-tests.ts --real`)·
|
|
242
|
-
记忆域(动机合并守门/效用 sidecar/只读指标投影)· **Z3 并发竞态(§30)· 实时票价桥(§31)· i18n 目录(§32)· M3 cohort 证据合同(§33)· M4 价值证据合同(§34)**。
|
|
190
|
+
One-shot full-stack green (pure TS, no Python needed): golden engines · dialogue replay · cross-process async work-orders · plugin smoke · hbcli · process guards · weather · flights · Anything · probePoi · agent-reach · dual-path stability · time-awareness eval · memory domain · **Z3 race (§30) · realtime pricing (§31) · i18n catalog (§32) · M3 cohort evidence contract (§33) · M4 value evidence contract (§34)**.
|
|
243
191
|
|
|
244
192
|
---
|
|
245
193
|
|
|
246
|
-
## 🤝
|
|
247
|
-
|
|
248
|
-
> *PR-based flow: branch off the latest `main`, full suite green, open a Pull Request — `main` never takes direct pushes; merge after review. Full guide: [CONTRIBUTING.md](CONTRIBUTING.md).*
|
|
249
|
-
|
|
250
|
-
标准开源流程:**`main` 不直接推**——从最新 `main` 切出 `feat/ · fix/ · docs/ · chore/` 分支,本地全栈绿后开 Pull Request,CI(Node 22/24,typecheck + 全部套件)与维护者 review 双绿后 squash 合入。**测试红着不许合。**
|
|
194
|
+
## 🤝 Contributing
|
|
251
195
|
|
|
252
|
-
-
|
|
253
|
-
- Bug / 功能建议:[issue 模板](.github/ISSUE_TEMPLATE/bug_report.yml)(搜过既有 issue 再提)
|
|
254
|
-
- 行为或架构改动先立 ADR(`docs/architecture.md` §8);多 agent 协作契约见 [`AGENTS.md`](AGENTS.md)
|
|
196
|
+
> *PR-based flow: branch off the latest `main`, full suite green, open a Pull Request — `main` never takes direct pushes. Full guide: [CONTRIBUTING.md](CONTRIBUTING.md).*
|
|
255
197
|
|
|
256
|
-
|
|
198
|
+
Standard open-source flow: branch off latest `main` (`feat/ · fix/ · docs/ · chore/`), full suite green locally, open a PR; CI (Node 22/24, typecheck + all suites) plus maintainer review, then squash-merge. **Red tests never merge.**
|
|
257
199
|
|
|
258
200
|
---
|
|
259
201
|
|
|
260
202
|
## 📜 License
|
|
261
203
|
|
|
262
|
-
**MIT
|
|
263
|
-
|
|
264
|
-
文本见 [LICENSE](LICENSE)。
|
|
265
|
-
|
|
266
|
-
---
|
|
267
|
-
|
|
268
|
-
## 🌐 中英版 — Locales
|
|
269
|
-
|
|
270
|
-
- **English section summaries** are inline above (italic blockquotes).
|
|
271
|
-
- 本 README 主语言是中文,面向中国出境首发种子用户群。
|
|
272
|
-
- 完整英文版 README 计划在 v0.1.0 同步([issue 路线](#-known-limitations))。
|
|
204
|
+
**MIT** (2026-08-23) — same as upstream dsh. See [LICENSE](LICENSE).
|
|
273
205
|
|
|
274
206
|
---
|
|
275
207
|
|
|
276
|
-
**Built with**: DeepSeek Harness 0.1.2-alpha.1 (vendored) · Cordis · Z3 (WASM) · loopx (pipx) · hotelbyte-cli · Agent-Reach v1.5.0 (`.venv/`) · OpenFlights · TypeScript
|
|
208
|
+
**Built with**: DeepSeek Harness 0.1.2-alpha.1 (vendored) · Cordis · Z3 (WASM) · loopx (pipx) · hotelbyte-cli · Agent-Reach v1.5.0 (`.venv/`) · OpenFlights · TypeScript
|
|
277
209
|
|
|
278
|
-
**Last verified against `v0.0.1-rc.
|
|
210
|
+
**Last verified against `v0.0.1-rc.14` (2026-08-29)** — full-stack regression green §1-§34 (release flow: `scripts/publish-npm.sh`).
|