Commit Graph

32 Commits

Author SHA1 Message Date
Hunter Bown
fd3d5d8ac9 feat(web): add local GT catalog pipeline for website and docs
Keep the dictionary runtime as the one i18n path and give updated English marketing/docs copy a fail-closed, lockfile-pinned translation lane. Do not wrap the TUI, completions, or /translate.
2026-08-28 17:04:40 -07:00
CodeWhale Bot
a0f9df7795 fix(web): pin nanoid past GHSA-2v37-7h3g-55p8
`npm audit` in web/ reported one high-severity advisory: nanoid <3.3.17
loops indefinitely when a custom generator is given size zero. It reaches
us transitively through postcss, which is already an override entry, so
the fix follows the pattern the file established for exactly this case
rather than waiting on an upstream postcss bump.

nanoid now resolves to 3.3.18 and `npm audit` reports 0 vulnerabilities,
restoring the release contract's zero-advisory requirement.

Verified: 0 vulnerabilities, 250 web tests, eslint, tsc --noEmit, and
next build all pass against the reinstalled tree.

Assisted by Claude Code.
2026-08-07 14:38:55 -07:00
CodeWhale Bot
b6585ea990 WIP: 0.9.4 fence, turn liveness, model picker, budget, and contributor credit
- fix rlm/turn.rs build (build_metadata_message) and honest/empty guard
- fold Unreleased� 0.9.4 dated 2026-08-07 and sync changelog
- fix Meta facts (  (3 and,�, contrib) and provider picker fallback
- tighten prompts (backticks for work_update)
- stick guard: Warn/Stop across flav...
2026-08-06 18:30:13 -07:00
CodeWhale Bot
fda98649fb fix(deps): bump undici 7.28.0->7.29.0 (override), fast-uri 3.1.4->3.1.5, brace-expansion to fixed lines — clears 23 Dependabot alerts 2026-08-06 01:04:38 -07:00
Hmbown
abcd7e27b1 merge(main): bring autoprefixer web bumps into v0.9.4 train 2026-08-04 23:04:37 -07:00
Hmbown
88167ed7b7 fix(web): correct locale-inverted headings, stale provider list, and dead components
Shortcut facts (this is why the contract test moved):
docs/public-surface-facts.json declared both `Tab` and `Shift+Tab` as
`when: "composer idle"`, and web/lib/public-surface-contract.test.ts pinned
that string into README.md and docs/KEYBINDINGS.md. Both halves are false —
crates/tui/src/tui/ui.rs:6978 gates Tab on `!app.input.is_empty()`, and
ui.rs:6363-6367 gates Shift+Tab only on the modal stack. The matrix now says
"composer empty" / "always (suppressed only under a non-Config modal)" and the
test asserts the corrected wording plus a negative guard so the idle claim
cannot come back. docs/MODES.md:24 already said "when the composer is empty";
it was the matrix and the test that were stale.

/runtime rendered the Chinese-primary H1 for every locale:
web/app/[locale]/runtime/page.tsx:84-88 had two byte-identical ternary
branches, both `Runtime & 集成 Integrations`. That contradicts
web/lib/i18n/dictionaries/types.ts:33-46 ("Never hardcode Han characters at a
call site") and docs/LOCALIZATION.md:80-82 ("no locale renders another
language's script by accident"). Every other page follows the correct pattern
(constitution/page.tsx:60-65). Fixed both branches; same class, smaller blast
radius, in feed/page.tsx:114 ("Section 03 · 动态" hardcoded in the EN branch).

FAQ provider list was 25 hand-maintained names against 40 real routes:
web/lib/facts.generated.ts derives 40 providers from `pub enum ApiProvider`,
and models/page.tsx already renders `facts.providers.length`. The FAQ omitted
15, including xAI, Baidu Qianfan, Meta Model API, and all four Model Studio
routes. Because ja/ko/ru/es/pt-BR/uk/vi/id fall back to English page bodies,
9 of 10 locales saw the stale list. The count is now derived from FACTS and
the enumeration is explicitly a sample ("including …") pointing at /models.

Other corrected claims:
- docs/subagents/page.tsx omitted the `consultant` role. It is one of the eight
  in FLEET_ROLE_SCHEMA_VALUES (crates/tui/src/tools/subagent/mod.rs:376-385),
  advertised to the model, and already in web/lib/content/vocabulary.ts:183-186.
- lib/media-manifest.ts:99-100 promised a recording "from the v0.9.2 release
  candidate" on a live page (/docs/guide via components/session-media.tsx:47).
  v0.9.2 and v0.9.3 both shipped; restated against 0.9.4.
- lib/docs-map.ts:39-40 advertised Nix and Scoop as contents of /install. Both
  are real (docs/INSTALL.md:356, :507) but the site page has neither; the
  description now names what the page actually contains.
- web/README.md:99/101/122/127 — "en / zh, every page is bilingual" (10 locales
  route and non-zh get English bodies), a home-page section list naming four
  sections that do not exist, and "EN ↔ ZH toggle" for what
  components/locale-switcher.tsx:13-14 builds as an N-locale dropdown.
- docs/LOCALIZATION.md stated three different TUI key counts (1248 in the table,
  1,153 at :234). `python3 scripts/check-tui-locale-parity.py` prints 1299 for
  every pack. The zh-Hant row claimed 499/1248 "missing keys fall back to
  English at runtime" — it is 1299/1299, so nothing falls back; the row now says
  so and flags the PARTIAL_PACKS promotion as an open decision. The web
  reference shape said 51/60 keys twenty-three lines above its own correct
  52/62; check:locales prints 52/62.

Deleted (verified zero importers, no barrel, no glob loader, no CI reference):
- components/stat-grid.tsx — pulled from community/page.tsx in c268cc375, which
  added the guard at lib/public-copy.test.ts:141 asserting the page must NOT
  use it. That guard reads page source as a string and is kept.
- components/mermaid-diagram.tsx — its only consumer was removed in 5abe250f3e
  ("Cut: … the Mermaid architecture diagram"). Removed with it: the dead
  `.mermaid-frame` rules in app/globals.css and the `mermaid` production
  dependency, via `npm uninstall mermaid` so package-lock.json stays consistent
  with package.json (CI runs `npm ci`, which hard-fails on drift).

Verified in web/: npm test exit=0 (28 files, 235 tests), check:facts exit=0,
check:locales exit=0, check:docs exit=0, lint exit=0.
2026-08-03 22:48:21 -07:00
dependabot[bot]
25ed0bc0bd chore(deps-dev): bump autoprefixer from 10.5.0 to 10.5.4 in /web
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 10.5.0 to 10.5.4.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/10.5.0...10.5.4)

---
updated-dependencies:
- dependency-name: autoprefixer
  dependency-version: 10.5.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-01 21:16:40 +00:00
Hunter B
5203aefe8f fix(web): patch the postcss path-traversal advisory
Bumps postcss to ^8.5.18 (resolving 8.5.23) in both the devDependency and
the override that pinned it, clearing the one open high Dependabot alert
on the repository: path traversal via `sourceMappingURL` auto-loading that
can disclose arbitrary .map files. Build-time only, and the fix is a patch
release.

The remaining `npm audit` highs are one dev-only transitive
brace-expansion DoS reached through eslint and opennextjs. Dependabot does
not raise it and clearing it needs major eslint bumps, so it is left for a
deliberate dependency pass rather than folded into a release lane.
2026-07-24 20:46:19 -07:00
Hunter B
3e02475be3 chore(deps): patch npm lockfiles for Dependabot alerts
Apply `npm audit fix --package-lock-only` across npm workspaces to
resolve the 17 open Dependabot alerts (7 high, 10 moderate) on the
v0.9.1 merged tree:

- integrations/feishu-bridge: protobufjs 7.6.4 → 7.6.5
- extensions/vscode: brace-expansion 5.0.6 → 5.0.7, js-yaml 4.2.0 → 4.3.0,
  fast-uri 3.1.2 → 3.1.4, linkify-it 5.0.1 → 5.0.2
- web: brace-expansion/js-yaml and other transitive dev deps updated to
  patched versions; build, lint, tests, and `check:facts` still pass
- root package-lock: refreshed transitive lockfile metadata

Remaining npm audit findings:
- sharp <0.35.0 (via miniflare/next/wrangler) in web and root: no
  non-breaking patch available; miniflare pins sharp 0.34.5. Website is
  not deployed for v0.9.1, so exposure is build-time only.
- axios in feishu-bridge lockfile is already resolved to 1.18.1; the
  Dependabot alerts appear stale against the current lockfile.

All affected workspace checks pass:
- integrations/feishu-bridge: `npm run check && npm run test` — 19 passed
- extensions/vscode: `npm run check` — compiles
- web: `npm run prebuild && npm run check:facts && npm test && npm run lint
  && npm run build` — green

Refs #4713

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
(cherry picked from commit e326f6ef2d)
2026-07-23 19:51:29 -07:00
Hunter B
f6d606aab0 fix(security): pin patched sharp dependency
Override Sharp to 0.35.3 in the root and web lockfile graphs, eliminating the inherited libvips advisories without changing provider or runtime behavior.

Validated with clean npm installs, zero-vulnerability audits, web tests/lint/build, and a Wrangler smoke.
2026-07-22 20:54:38 -07:00
Hunter B
0dfe9170a1 chore(deps): patch npm lockfiles for Dependabot alerts
Apply `npm audit fix --package-lock-only` across npm workspaces to
resolve the 17 open Dependabot alerts (7 high, 10 moderate) on the
v0.9.1 merged tree:

- integrations/feishu-bridge: protobufjs 7.6.4 → 7.6.5
- extensions/vscode: brace-expansion 5.0.6 → 5.0.7, js-yaml 4.2.0 → 4.3.0,
  fast-uri 3.1.2 → 3.1.4, linkify-it 5.0.1 → 5.0.2
- web: brace-expansion/js-yaml and other transitive dev deps updated to
  patched versions; build, lint, tests, and `check:facts` still pass
- root package-lock: refreshed transitive lockfile metadata

Remaining npm audit findings:
- sharp <0.35.0 (via miniflare/next/wrangler) in web and root: no
  non-breaking patch available; miniflare pins sharp 0.34.5. Website is
  not deployed for v0.9.1, so exposure is build-time only.
- axios in feishu-bridge lockfile is already resolved to 1.18.1; the
  Dependabot alerts appear stale against the current lockfile.

All affected workspace checks pass:
- integrations/feishu-bridge: `npm run check && npm run test` — 19 passed
- extensions/vscode: `npm run check` — compiles
- web: `npm run prebuild && npm run check:facts && npm test && npm run lint
  && npm run build` — green

Refs #4713

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-07-22 17:48:52 -07:00
Hunter B
0dd47adadf fix(web): update DOMPurify advisory patch
Advance Mermaid's compatible DOMPurify lock entry to 3.4.12, removing the custom-element sanitization advisory without changing the web dependency surface.

Signed-off-by: Hunter B <hmbown@gmail.com>
2026-07-21 23:29:40 -07:00
dependabot[bot]
d11d7d018f chore(deps-dev): bump js-yaml
Bumps the npm_and_yarn group with 1 update in the /web directory: [js-yaml](https://github.com/nodeca/js-yaml).


Updates `js-yaml` from 4.2.0 to 4.3.0
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.2.0...4.3.0)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.3.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-21 17:28:06 +00:00
Hunter Bown
2bf2b10246 Merge pull request #3876 from Hmbown/dependabot/npm_and_yarn/web/mermaid-11.16.0
chore(deps): bump mermaid from 11.15.0 to 11.16.0 in /web
2026-07-02 21:31:51 -05:00
dependabot[bot]
cc34393a39 chore(deps-dev): bump wrangler from 4.103.0 to 4.107.0 in /web
Bumps [wrangler](https://github.com/cloudflare/workers-sdk/tree/HEAD/packages/wrangler) from 4.103.0 to 4.107.0.
- [Release notes](https://github.com/cloudflare/workers-sdk/releases)
- [Commits](https://github.com/cloudflare/workers-sdk/commits/wrangler@4.107.0/packages/wrangler)

---
updated-dependencies:
- dependency-name: wrangler
  dependency-version: 4.106.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-03 01:33:51 +00:00
dependabot[bot]
8134cb6ffa chore(deps): bump mermaid from 11.15.0 to 11.16.0 in /web
Bumps [mermaid](https://github.com/mermaid-js/mermaid) from 11.15.0 to 11.16.0.
- [Release notes](https://github.com/mermaid-js/mermaid/releases)
- [Commits](https://github.com/mermaid-js/mermaid/compare/mermaid@11.15.0...mermaid@11.16.0)

---
updated-dependencies:
- dependency-name: mermaid
  dependency-version: 11.16.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-03 01:33:45 +00:00
dependabot[bot]
92888368b8 chore(deps-dev): bump vitest from 4.1.8 to 4.1.9 in /web
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 4.1.8 to 4.1.9.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.9/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-version: 4.1.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-01 21:18:37 +00:00
Hunter B
3dfd7e8efd fix(deps): refresh web tooling security locks
Bump Wrangler in the root and web package manifests so Miniflare resolves patched Undici, update the VS Code extension lockfile's transitive Undici, and refresh the web DOMPurify lock entry. Verified npm audit is clean in root, web, and extensions/vscode.
2026-06-21 15:21:33 -07:00
CodeWhale Agent
e8415968d3 chore(deps): pin ws to 8.21.0 and refresh npm lockfiles
Pins ws across root, web, and integrated packages to close the remote
memory-exhaustion DoS disclosed in ws 8.20.1.
2026-06-15 15:18:49 -07:00
Hunter B
ba1afe664b Merge PR #2999: dependabot — @opennextjs/cloudflare 1.19.7->1.19.11 (@app/dependabot) 2026-06-15 00:59:55 -07:00
Hunter B
66d66bf9c2 Merge PR #2996: dependabot — vitest 4.1.7->4.1.8 (@app/dependabot) 2026-06-15 00:59:55 -07:00
Hunter B
9f76bcdddd chore(release): polish v0.8.60 web notes and esbuild
Add the v0.8.60 website feature spotlight, refresh install copy, sync the TUI changelog, and pin esbuild 0.28.1 across root/web lockfiles for the Dependabot advisory.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 15:12:42 -07:00
dependabot[bot]
759a4e4dcd build(deps-dev): bump @opennextjs/cloudflare in /web
Bumps [@opennextjs/cloudflare](https://github.com/opennextjs/opennextjs-cloudflare/tree/HEAD/packages/cloudflare) from 1.19.7 to 1.19.11.
- [Release notes](https://github.com/opennextjs/opennextjs-cloudflare/releases)
- [Changelog](https://github.com/opennextjs/opennextjs-cloudflare/blob/main/packages/cloudflare/CHANGELOG.md)
- [Commits](https://github.com/opennextjs/opennextjs-cloudflare/commits/@opennextjs/cloudflare@1.19.11/packages/cloudflare)

---
updated-dependencies:
- dependency-name: "@opennextjs/cloudflare"
  dependency-version: 1.19.11
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-10 06:28:08 +00:00
dependabot[bot]
b34ca535ec build(deps-dev): bump vitest from 4.1.7 to 4.1.8 in /web
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 4.1.7 to 4.1.8.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.8/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-version: 4.1.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-10 06:27:46 +00:00
Hunter B
7344b88eac fix(web): sync frontend lockfile for CI 2026-06-08 08:28:10 -07:00
Hunter B
e9eea70445 release: v0.8.48 — liveness watchdog fix, Qwen 3.7 removal, provider/docs sync
- Fix false 'Turn stalled' during long active turns with running tools.
  Add turn_last_activity_at tracking and active-tool awareness to
  reconcile_turn_liveness(). Three new tests cover the fix.

- Remove Qwen 3.7 Max OpenRouter preset from registry, picker, docs,
  and tests. Qwen 3.7 Max is a hosted model; the preset will return
  when an open-weight Qwen 3.7 release ships. MiniMax M3 remains as
  a full 1M-context multimodal route.

- Sync root CHANGELOG to crates/tui/CHANGELOG for crates.io packaging.
  Update docs/CONFIGURATION.md, docs/PROVIDERS.md, and README to
  reflect the Qwen 3.7 removal. Regenerate web facts timestamp.
2026-05-31 21:45:31 -07:00
HUQIANTAO
dfeedca524 test(web): add unit tests for pure helper functions (#2454)
* test(web): add unit tests for pure helper functions

Add vitest configuration and tests for:
- relativeTime: time formatting (just now, minutes, hours, days, months, years)
- lastPageFromLink: GitHub Link header pagination parsing

These are the first tests for the web frontend. The test framework
(vitest) was already in package.json but had no config or test files.

* test(web): exercise real GitHub helpers

---------

Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
Co-authored-by: Hunter B <hmbown@gmail.com>
2026-05-31 10:21:09 -07:00
Hunter Bown
74b78e77ec chore(web): bump qs lockfile entry (#2425)
Supersedes #2224.

Updates the transitive web lockfile entry for `qs` from 6.15.1 to 6.15.2 while keeping the current-main diff limited to the `node_modules/qs` metadata.

Validation:
- git diff --check
- npm --prefix web ci --ignore-scripts
- npm --prefix web run lint
2026-05-31 03:51:12 -07:00
Hunter Bown
3e89ccf98e style: cargo fmt 2026-05-24 03:34:13 -05:00
Hunter Bown
2e857b09b7 chore(web): bump next 15.5.16→15.5.18, mermaid 11.14→11.15 (security)
Clears the open Dependabot alerts on `Hmbown/DeepSeek-TUI`:

  * GHSA-26hh-7cqf-hhc6 (high) — Next.js App Router middleware /
    proxy bypass via segment-prefetch routes; fixed in 15.5.18.
  * Four mermaid CVEs (all medium) — Gantt-chart infinite-loop
    DoS, `classDef` HTML injection, configuration CSS injection,
    `classDefs` CSS injection; fixed in 11.15.0.

Also bumps `eslint-config-next` to 15.5.18 to track the Next.js
release. `npm run build` is clean on the regenerated lockfile.

These are web/ only — the Rust TUI binary doesn't pull in any of
this. Affects the separately-deployed deepseek-tui.com site.
2026-05-11 22:15:22 -05:00
Hunter Bown
69862467c7 chore(deps): update security-sensitive dependencies 2026-05-08 14:13:46 -05:00
Hunter Bown
9e45780ba0 feat(web): community site for deepseek-tui.com (mobile + color refresh) (#1108)
First commit of the Next.js community site that powers
deepseek-tui.com, deployed via Cloudflare Workers / OpenNext.

This commit lands the scaffold and applies the visual + correctness
pass requested by community feedback:

- Palette: drop the cream/Anthropic-feel paper (#F4F1E8) for a
  DeepSeek-aligned cool white + soft gray (#FFFFFF / #F4F6FB), with
  indigo accents kept. Soften default hairlines so a pure-white
  background reads clean instead of harsh.
- Mobile: add a hamburger menu (mobile-menu.tsx) so phones can reach
  Install / Docs / Activity / Roadmap / Contribute — previously the
  link list was hidden on phones with no replacement. Tighter hero,
  flexible button row, viewport-safe code blocks, columnar grids
  collapse cleanly under 768px, and the printed-almanac center rule
  is desktop-only now (it sliced through narrow viewports).
- "How it works" diagram: replace the hand-rolled ASCII art (which
  misaligned under CJK monospace because Han characters take 2
  columns vs Latin's 1, per dhh's note in WeChat) with a real
  mermaid diagram rendered client-side via dynamic import. Uses the
  mermaid.live standard syntax 庄表伟 recommended.
- Issue #1104: the docs listed a `deepseek-cn` provider that the
  v0.8.16 binary doesn't accept (`ProviderArg` in crates/cli only
  has 9 variants; the 10th lives only in the legacy tui/config.rs).
  derive-facts.mjs now omits `deepseek-cn` until that variant is
  wired through the shared ProviderKind, and the install page's
  China-network recipe uses `base_url` / `DEEPSEEK_BASE_URL` (which
  actually works on v0.8.16) instead of the unsupported provider.

Auto-deploys via .github/workflows/deploy-web.yml on push to main.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 21:00:06 -05:00