Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 19 additions & 19 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ categories = ["network-programming", "web-programming::http-server"]

# δΊŒθΏ›εˆΆθ΅° CalVer,crate θ΅° SemVer β€”β€” δΈ€θ€…ζ˜―δΈ€ε›žδΊ‹οΌŒε–η»™δΈεŒηš„δΊΊγ€‚
# θΏ™ι‡Œζ˜― crate ηš„η‰ˆζœ¬γ€‚
version = "0.59.0"
version = "0.60.0"

[workspace.dependencies]
# ── 内部 crate ───────────────────────────────────────────
Expand Down
19 changes: 19 additions & 0 deletions release-notes/0.60.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
This release gives client helper requests two modes instead of three: answered locally, or forwarded. A forwarded helper request goes through the routing rules like any other request and carries its class, so a rule with `when.intent` takes effect as soon as it is written. An older core no longer clears a request history written by a newer one.

**Upgrade notes**

- The control-plane protocol version (`CONTROL_API_VERSION`) goes from 35 to 36. ThinkWatch Lite connects only to a core with the same protocol version. ThinkWatch Lite 2026.10.1 includes 0.59.0 (protocol 35) and does not connect to 0.60.0. A server used with it stays on 0.59.0 until the app is updated to a release that includes 0.60.0; `sudo twcore upgrade --version 0.59.0 --restart` switches a server back.
- The request store's schema is unchanged (25): upgrading from 0.59.0 keeps the request history.
- **`client_probes` takes `intercept` or `forward`.** `passthrough` and `route` are gone, and a configuration that still sets either does not load. Change them to `forward`, or delete the line: health checks and warm-ups default to `intercept`, titles, topic detection and suggestions to `forward`. A configuration that never set `client_probes` is not affected.
- Changed in the protocol:
- `ProbeMode` is `intercept` | `forward`.
- `DryRunOutcome` no longer has `passthrough`. A dry run of a forwarded helper request evaluates the rules and ends in `route`, `deny`, `no_match` or `unavailable`, like any other request.
- `RouteSave.route_probes` is removed. Saving a route no longer changes `client_probes`.
- Message codes, compared with 0.59.0: `control.unknown_probe_class` is removed, along with `route_probes`. No code is added and no sentence changes.

**Helper requests.** Clients such as Claude Code send requests of their own: health checks, warm-ups, session titles, topic detection and suggestions. `passthrough` and `route` both sent such a request through the routing rules. They differed only in whether it carried its class, and so in whether a `when.intent` condition could match it. The names suggested that `passthrough` skipped routing, and the dry run said so too: it stopped before the rules and reported `passthrough`, while the gateway evaluated the rules for that request like for any other.
- `forward` replaces both. The request carries its class, so `when: { intent: titling }` or `when: { intent: assistant_internal }` matches it without any other setting.
- `intercept` is unchanged: the gateway answers the request itself, nothing is sent upstream, and no rule is evaluated. A `when.intent` condition never matches a class set to `intercept`.
- Defaults are unchanged in effect: health checks and warm-ups are answered locally; titles, topic detection and suggestions are forwarded.

**Request history across versions.** Core rebuilt the request store, bodies included, whenever its schema differed from the build's own, in either direction. An older core opening a store written by a newer one therefore cleared a history the newer version would have read again: after installing an older release over a newer one, or with a second copy of the app on the same machine that has not updated yet. Now only an older store is rebuilt. A newer one is left as it is: core records nothing while it runs, forwarding is unaffected, `/storage` reports `recording: false`, and the newer version opens the store unchanged later.
Loading