You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: repaint the desktop chrome, adopt the DeepSeek tokens, and add thinking effort levels (#97)
## Related Issue
No issue. The problem is described below.
## Problem
Several things had drifted at once across the desktop app and the web
UI:
- The desktop window painted its own chrome, lost the native macOS
corners and
the vibrancy material, and shipped without the release changesets it
needed.
- The web UI's colours came from ad-hoc values. In the light theme the
secondary
and meta label ramp measured 3.71:1, 2.13:1 and 1.26:1 on white — all
below
WCAG AA.
- The composer offered a single thinking on/off row that always sent
`high`,
even though the model catalog knows which effort levels each model
supports
and every other renderer already offers the full set.
- The model quick-switch menu had a height floor but no ceiling, so a
provider
with roughly twenty models filled the whole window.
- The marketing site was removed, but a desktop test still read
`apps/site/src/App.vue` and an oauth comment still pointed at it.
- The legacy migration package was removed, leaving stale references
behind.
## What changed
**Desktop.** The macOS window keeps its native frame and vibrancy
material, both
palettes were repainted, the window is opaque on every platform, and the
release
workflow now pins its actions to commit SHAs and publishes to the
dedicated
desktop release repository.
**Design tokens.** The web UI adopts the vendored DeepSeek token sheets.
The
light palette overrides three label tokens, because the vendored ramp
fails AA
on a white page and the neutral scale has no step between -600 and -700;
the
replacements measure 5.00:1, 4.57:1 and 3.25:1 and keep the ramp
ordering. Dark
mode keeps the vendored aliases untouched.
**Thinking effort.** The model catalog now carries `support_efforts` and
`adaptive_thinking` through all five layers (zod schema →
`toProtocolModel` →
`WireModel` → `toAppModel` → `AppModel`), so the web client finally
knows what a
model offers. The composer lists those levels, clamps a requested level
to the
nearest lower supported one, and shows the effective level in the footer
pill.
The rules mirror `packages/node-sdk/src/thinking-levels.ts`; the web app
has no
dependency on the SDK, so the mirror is deliberate.
**Menu height.** The quick-switch dropdown is capped at 360px and
scrolls.
**Cleanup.** The marketing site references, the legacy migration
fallout, and
two stale attachment-chip theme overrides are gone. The prompt anchor
rail's
setting hint and code comment now describe what the rail actually draws.
### Verification
- Full suite: 10285 passed, 71 skipped, 2 todo — green via the pre-push
hook.
- `pnpm --filter @pymodel/pythinker-web run typecheck` — exit 0.
- `pnpm run lint` — exit 0, no errors.
- Light-theme contrast measured live in Chromium, not calculated only.
## Checklist
- [x] I have read the
[CONTRIBUTING](https://github.com/PyModel/pythinker-code/blob/main/CONTRIBUTING.md)
document.
- [x] I have linked a related issue, or explained the problem above.
- [x] I have added tests that prove my feature works.
- [x] Ran `gen-changesets` skill, or this PR needs no changeset.
- [x] Ran `gen-docs` skill, or this PR needs no doc update.
Copy file name to clipboardExpand all lines: .agents/skills/gen-changesets/SKILL.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,7 +9,7 @@ description: Use when generating changesets in the pythinker-code repository, in
9
9
10
10
-`@pymodel/pythinker-code`: the CLI
11
11
12
-
All other `@pymodel/*` packages are treated as internal packages, including `@pymodel/pythinker-code-sdk`, `agent-core`, `kosong`, `kaos`, `pythinker-code-oauth`, `pythinker-telemetry`, and `migration-legacy`.
12
+
All other `@pymodel/*` packages are treated as internal packages, including `@pymodel/pythinker-code-sdk`, `agent-core`, `kosong`, `kaos`, `pythinker-code-oauth`, and `pythinker-telemetry`.
Copy file name to clipboardExpand all lines: .changeset/README.md
-2Lines changed: 0 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -22,14 +22,12 @@ All other workspace packages are private internal packages, are not published to
22
22
-`@pymodel/pythinker-telemetry`
23
23
-`@pymodel/pythinker-web`
24
24
-`@pymodel/kosong`
25
-
-`@pymodel/migration-legacy`
26
25
-`@pymodel/protocol`
27
26
-`@pymodel/server`
28
27
-`@pymodel/server-e2e`
29
28
-`@pymodel/dashboard`
30
29
-`@pymodel/dashboard-server`
31
30
-`@pymodel/dashboard-web`
32
-
-`pythinker-migration-legacy`
33
31
34
32
Version impact from internal dependencies must be judged manually. The published artifacts for CLI and SDK bundle internal workspace packages into the artifact itself; runtime `dependencies` of published packages must not include any `@pymodel/*` internal workspace packages.
Publish desktop releases to a dedicated update channel so update checks resolve a desktop build instead of an unrelated release, and fail the release when a packaged build carries no update feed.
0 commit comments