Repository navigation
Conversation
Pull all 11 docs from /Users/faz/Dev/ThinkWatch/docs (5 EN +
5 zh-CN + secret-rotation EN-only) into a Docs section served at
/docs and /zh-CN/docs.
- New Astro content collection 'docs' loaded via glob from
src/content/docs/{en,zh-CN}; sidebar order, labels, summaries,
and per-doc locale availability declared in src/content/docs/_meta.ts
- Strip the upstream language-switcher line at the top of every doc
(we have a global switcher) before importing
- Configure markdown pipeline: shiki theme github-dark-default,
rehype-slug for heading IDs, rehype-autolink-headings to expose
'#' anchors on hover
- New DocsLayout with sticky sidebar navigation, current-page
highlight, "Edit on GitHub" link, and a custom .prose-tw
stylesheet for headings, code blocks, tables, blockquotes,
inline code, and heading anchors (no @tailwindcss/typography
dependency)
- Dynamic [...slug] routes for both locales with case-insensitive
filtering on the locale segment (Astro 5 normalizes glob ids)
- Docs index landing pages in both locales with cards summarising
each doc
- Header gets a Docs nav link; the language switcher gracefully
falls back to the docs index when the target locale is missing
the current doc (e.g. secret-rotation only has English)
- Footer Product column gains the Docs link
dist now builds 18 pages (was 5).
- Pull icon.svg, logo.svg, logo-dark.svg, social-preview.svg from /Users/faz/Dev/ThinkWatch/assets - Replace public/favicon.svg with the new icon (navy seal + cyan T/W shield) and regenerate apple-touch-icon, favicon-32, -16, and favicon.ico via sharp - Replace scripts/og-image.svg with the upstream social-preview design and regenerate public/og-image.png - Header and footer now render the icon as inline SVG next to a Think (medium) + Watch (bold) wordmark — replaces the old cyan/violet gradient placeholder square - Aurora theme on the marketing site is preserved as the site's visual identity; the new logo lives on top of it
Docs experience - Right-rail Table of Contents on every doc, populated from the rendered markdown headings (H2/H3). IntersectionObserver tracks scroll position and highlights the active entry. - Prev / Next navigation cards at the bottom of each doc, computed from src/content/docs/_meta.ts ordering. The zh-CN reading order skips docs that don't have a Chinese translation. - secret-rotation now appears in the zh-CN sidebar with an "EN" badge that links straight to the English page (instead of being invisible to Chinese readers). - Code blocks in markdown get a "Copy" button injected on hover. Localized label. - Removed dead "headings" arrow function from DocsLayout. Site search (Pagefind) - New SearchModal: pure HTML <dialog>, lazy-loads /pagefind/pagefind.js on first open. Cmd+K / Ctrl+K / "/" shortcuts. Arrow-key navigation, excerpt highlighting, click-outside dismissal. - Pagefind runs after astro build via the build script and indexes only article bodies (data-pagefind-body on DocsLayout's <article>). EN and zh-CN articles get separate language indices. Other - Hero version pill now reads from the latest changelog entry instead of being hardcoded "v0.1.0". - 404 page now has both EN + zh-CN copy in the same HTML, swapped client-side based on localStorage / navigator.language. Home and Changelog CTAs are also re-pointed at /zh-CN/* for Chinese users. - LogExplorer mock initial 14 rows now span the last ~30 seconds using the visitor's local clock instead of all sharing the same build-time timestamp. - Upgrade astro 5.18 -> 6.1, @astrojs/react 4.4 -> 5.0
Sitemap - Per-URL priority (home 1.0, docs index 0.9, docs 0.8, changelog 0.7) - changefreq and lastmod on every entry - Exclude /404 from the index HTML head (new src/components/Seo.astro partial) - rel="alternate" hreflang=en / zh-CN / x-default on every page - og:locale + og:locale:alternate + og:image dimensions + og:site_name - twitter:image:alt, robots max-image-preview:large - Always inject Organization + WebSite (with Sitelinks SearchBox EntryPoint) JSON-LD. Default SoftwareApplication is still on every page unless noJsonLd is set. Doc pages - BreadcrumbList (Home > Documentation > <doc>) + TechArticle JSON-LD passed through DocsLayout → Base. The schema feeds Google's breadcrumb display in search results. - Richer per-page titles and descriptions (en/zh). Analytics - Google Analytics gtag.js (G-R8LX8NCHCJ) loaded async, with a Do-Not-Track short-circuit and anonymize_ip enabled. Other - robots.txt: block /pagefind/ (search index, not useful to crawlers) and note that AI crawlers are allowed by default.
Header
- Add a burger menu + slide-down nav panel below md breakpoint so
mobile users can reach How/Features/Console/Docs/Changelog again
- Compact right cluster: hide the star count, star icon, lang code,
and "Get started" CTA on narrow screens; the burger takes over
- Uniform 36px (h-9) touch targets for every icon button
Docs
- Hide the left sidebar on mobile and add a collapsible <details>
drawer at the top of the article that combines the doc navigation
and the current page's TOC. Closes automatically when a TOC link
is tapped.
- Tighter py-8 padding below lg (was py-12)
Hero
- Reduced vertical padding and min-height on < lg
- Responsive h1 scale 4xl → 7xl, body text base → xl
- Stack CTAs vertically on < sm, full-width buttons
- Terminal card hidden on < sm (saves ~30% of first-screen height)
Section polish (Problem, How, Features, LivePanels, QuickStart,
License, StarHistory)
- py-20 sm:py-28 instead of flat py-28 — saves 64px per section
- text-3xl sm:text-4xl md:text-5xl headings
- Tighter card padding on < sm
- LogExplorer top bar hides the macOS traffic lights on < sm and
truncates the query string
- Dashboard stat cards shrink to p-4 on < sm
- Features tab row becomes a horizontally scrollable snap strip
- QuickStart step cards w-8 icons + 11px code on < sm
Search modal
- Trigger button is now a 36px icon button on < md (was hidden
entirely — mobile users had no way to open search)
- Dialog uses 4px margin on < sm and top-[15vh] on sm+ so it
claims more of the viewport on phones
- max-h-[70vh] on < sm
Footer
- 1-col → 2-col at sm → 4-col at md (previously jumped straight
to 4-col, cramped on tablets)
- Links get py-1.5 for 44px touch targets
Global
- html, body { overflow-x: clip } to kill horizontal scroll from
decorative absolute elements (aurora orbs)
- -webkit-text-size-adjust: 100% + input font-size: 16px to stop
iOS Safari from zooming when a search input is focused
…scroll - Add changelog entry for v0.2.0 (teams, budget caps, RBAC v2, HttpOnly cookies, management API, real-time dashboard) - Sync landing page copy to reflect new capabilities: custom roles, fail-closed budget caps, HttpOnly cookie sessions, content filtering, management API, live dashboard, teams tab (new feature module) - Fix nav anchor links scrolling from position 0: intercept hash link clicks and use scrollIntoView instead of native URL navigation Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rehypeAutolinkHeadings was appending a visible # to every h2, making the changelog body look broken. Changelog prose doesn't need heading hierarchy — bold lead-in sentences read better and stay clean. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…erception
- localePath("zh-CN", "/") returns "/zh-CN" (no trailing slash) but
Astro.url.pathname on the Chinese home is "/zh-CN/", so isHome was
always false → nav links rendered as "/zh-CN#how" (full-path) instead
of "#how", causing a full page reload and scroll-from-0 every click.
Fix: also match pathname === homePath + "/"
- Update both mobile and desktop JS handlers to intercept full-path
anchor links (href="/zh-CN#how") as well as hash-only ones, so any
remaining edge cases are caught client-side too.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Mirror the pattern used for docs: changelog entries live under src/content/changelog/en/ — English src/content/changelog/zh-CN/ — Chinese content.config.ts adds changelog_zh collection (zh-CN/**/*.md). The /zh-CN/changelog page now uses changelog_zh with an English fallback for any version not yet translated. New zh-CN entries: v0.1.0 (public preview) and v0.2.0 (teams, spending controls, RBAC v2, HttpOnly cookies, management API). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Bold inline lead-ins (**Teams.**) had no visual hierarchy in prose. Switched to ## h2 headings per section, then: - Hide .heading-anchor (rehypeAutolinkHeadings appends a # text node) - Style h2 as small uppercase brand-color labels (0.75rem, tracking-wide) with tight margin so they read as section dividers, not full headings Applied to both /changelog and /zh-CN/changelog page styles. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Points to the existing #pricing anchor (License section). Inserted between Console and Docs in both en and zh-CN nav. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The star pill now updates client-side via the GitHub API instead of only reflecting the build-time value. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Left (cyan) particles funnel into the center; right (violet) particles fan out from the center — visualising request→gateway→decision flow. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
15 curated MCP server templates for ThinkWatch's Store feature. Served at /registry/mcp-templates.json for remote sync. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…gories
23 templates (was 15). New additions:
- Microsoft Docs, AWS Docs, MDN Web Docs, Wikipedia, arXiv
- Notion, Google Drive, Jira
All description and auth_instructions now bilingual {en, zh}.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Hero: LIVE req/s + tokens/min pill (jitter every 1.8s) and a 4-column stats strip (2 MB · 3+1 · 5 · Rust) pinned below the fold. - HowItWorks: replaced the 3-col grid with a 6-step horizontal pipeline rail that auto-advances every 2.4s, pauses when out of view, and is click-to-jump. Top progress bar fills as the active step moves. - CompatibleWith: mono-chip marquee (32s loop) with masked fade edges and hover-to-pause. - Problem: 80ms stagger fade-in on intersection + 01–05 mono numbering. - Features: cards now lead with a glowing dot + 01/02 mono index. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Headline the v0.3.0 MCP work on the landing page: a new MCPAdvantage section (8-row table vs SaaS gateways and DIY mcp-proxy + four "what this unlocks" cards), strengthened MCP module bullets naming Linear / GitHub / Slack, and a Hero stat swap to "Per-user MCP OAuth". Bilingual v0.3.0 changelog entry covers per-user credentials, one-paste DCR, MCP Store, three-tier subject resolution, Test Connection, scoped cache, and the security review hardening. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Removed 4 templates that pre-configured neither an endpoint nor any auth/deploy guidance — `web-search`, `mdn-web-docs`, `wikipedia`, `arxiv`. Backfilled the 6 self-deploy entries (postgresql, mysql, redis, mongodb, filesystem, puppeteer→playwright) with real npm package install commands and upstream docs URLs in place of the fictional `ghcr.io/thinkwatch/mcp-*` placeholders. Added 5 meaningful templates: `stripe` (hosted), `memory` and `sequential-thinking` (Anthropic reference servers), and `brave-search` / `tavily` to replace the deleted `web-search` abstract category with vendor-concrete entries that ship a token help URL. Also brought every entry in line with the backend `RegistryTemplate` schema by adding `auth_shape`, `static_token_help_url`, and `deploy_docs_url` alongside the existing `auth_type` field — sync was previously coercing everything to `anonymous` because the JSON shape didn't match what the deserializer reads. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…3 hosted) Mirrors the ThinkWatch backend's mcp-store cleanup. Removed 11 slugs that have no business in a relay catalog — local-stdio MCPs that the gateway physically cannot proxy (filesystem, puppeteer, memory, sequential-thinking, brave-search, tavily), name-only shells (web-search, mdn-web-docs, wikipedia, arxiv), and jira (superseded by atlassian). Added 23 hosted MCPs vetted by curl probe, organized across developer, productivity, database, cloud, communication, knowledge, and utility. Upgraded sentry and slack with the hosted endpoints that launched after the original registry was written. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…slack Mirrors the ThinkWatch backend cleanup. Removed vercel, hubspot, workato, and canva — these vendors gate their hosted MCP behind an explicit AI-client allowlist that a DCR-registered ThinkWatch client cannot satisfy. Slack reverted to its original manual + bot token form (same allowlist issue applies to slack.com/mcp). Catalog now stands at 37 templates, all installable through a relay gateway without provider-side approval. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sync the marketing surface with everything that landed in ThinkWatch between the v0.3.0 cut and today. v0.4.0 changelog (bilingual) leads with full-body audit capture and bundles the supporting acts: per- column TTL, S3 / RustFS offload, bloom-filter substring search, audit:read_bodies permission gate, MCP downstream SSE, per-model routing (Auto / Manual + drag-to-redistribute + health-aware failover), pre-call budget check, and allowed_models enforced uniformly across all three API surfaces. Feature modules updated: AI Gateway gains per-model routing + the model-level kill switch; Observability gains the full-body audit capture bullet; MCP Gateway gains downstream SSE; Security gains allowed_models enforcement. Hero version pill auto-bumps to v0.4.0. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The secret-rotation doc was declared en-only in _meta.ts; the docs page showed an "EN" fallback chip on zh-CN. Add the Chinese translation and flip the locales array to ["en", "zh-CN"] so the chip disappears. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The site only described the enterprise gateway. It now presents two products for different people, ThinkWatch for teams and ThinkWatch Lite for individual developers, both built on the MIT-licensed ThinkWatch Core. - Brand: the logo's navy and teal replace the cyan, violet and pink gradients, with amber for warnings. Legacy palette classes are remapped in the theme so older components follow without per-file edits. Geist, Instrument Serif and Noto Serif SC are now actually loaded. - Home: a chooser between the two products, an animated sample trace, a canvas particle flow for "how it works", the console panels labelled as sample data, a Lite menu-bar illustration, and an edition comparison. - New pages: /thinkwatch (takes over the old home content), /lite, /core and /license, each in English and Chinese. - Docs: a product switcher, Lite and Core docs in both languages, and search scoped to the current product. ThinkWatch guides keep their existing URLs so search rankings survive; GitHub Pages cannot redirect. - SEO: organization sameAs lists all three repositories, per-product JSON-LD, the SoftwareApplication version comes from the latest release instead of a hard-coded 0.1.0, sitemap priorities for the new pages, and a new OG image. - Copy: unsourced claims and emoji icons removed from the problem section; quick start commands match the ThinkWatch README. - Removed the unused three.js hero, terminal and magnetic button components. The three.js dependencies stay for now to avoid rewriting the lockfile. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
The redesign set display headings in Instrument Serif with italic emphasis and wrote much of the copy as slogans and spoken asides. That reads like a portfolio rather than a product site. - Headings use Geist, the site's product sans, with weight and tracking for hierarchy; Chinese headings use a sans as well. The serif families are no longer loaded, italics are gone, and heading sizes are reduced to suit the sans. - Copy across the home page, product pages, license page, docs home, Lite and Core docs, changelog and 404 is rewritten in a formal, declarative voice in English and Chinese: no rhetorical questions, slogan fragments or chatty second person. Facts, numbers, commands and links are unchanged; unsupported asides were removed rather than reworded. - Default title and description, OG image tagline and badges follow the same tone. - Section headings no longer append a hard-coded period. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
* fix: call the server edition Enterprise in the nav and list it after Lite The nav showed "ThinkWatch" right next to the ThinkWatch logo, which read as a duplicate. The nav item is now "Enterprise" (企业版) and follows Lite. The /thinkwatch URL and the product name are unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat: move the request flow animation into the hero The particle flow had its own full-width "How ThinkWatch works" section, which read as a separate slide. It now sits in the hero's right column, blended into the background, so the first screen shows both the offer and how the gateway works. Phones get a stacked diagram under the product cards. The sample trace moves next to the "Visibility into every request" items, which describe the same fields. The standalone flow section is removed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
…are listed (#4) The nav now says Enterprise, but the footer, home cards, comparison table, license page, docs switcher, search labels and 404 links still named the server edition plain "ThinkWatch", which reads as the brand rather than an edition next to Lite and Core. Those places now say "ThinkWatch Enterprise" / "ThinkWatch 企业版". The brand stays "ThinkWatch" in the logo, copyright, site name and organization data, and in sentences about the product as a whole. URLs, repository names and license text are unchanged. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
#5) The hand-drawn 2D request flow did not work as a hero visual. This restores the original three.js scene from before the redesign as the hero background: particles flowing into a rotating wireframe core and out again, loaded only after the page is idle, with the SVG fallback for reduced motion and no WebGL. It keeps running on phones, as before. - Colors follow the site: logo teal flowing in, light teal flowing out, a faint amber halo. The SVG fallback uses the same palette. - The typing terminal returns to the right of the hero. Its slogan line is replaced by a neutral placeholder, the italic is gone, it is labelled as sample output, and typing now advances by elapsed time so it keeps pace when the main thread is busy. - The two product card buttons are pinned to the bottom of their cards so they line up regardless of description length. - The 2D flow component is removed. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
#48) GitHub Pages serves one 404 page for every address, built as an English page; its script switched the body to Chinese, but the header, the footer and the search box stayed English. SiteHeader, SiteFooter and SearchModal take a `bilingual` prop, set only by the 404 page. With it, every piece of text is rendered in both languages (a small Bi component), links carry data-localize for the page's script to point at /zh-CN, attributes such as aria-labels and the search box's texts carry their Chinese values in data-zh-attrs, and the language menu marks the visitor's language. Every other page renders exactly as before. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
The Lite install section lists each installer's size beside the version and checksum (the disk image; both Windows installers; both AppImages), the home and Lite hero download button adds the size of the file it picked for the visitor to its version line, and the Core page lists each binary's size beside its link. Sizes come from the latest release's asset list, read at build time with the download links, and are shown in decimal megabytes as Finder shows them. Without the release (rate limit, offline build) no size is shown. Items in the install section's version line no longer break in the middle on a narrow screen; the line wraps between them. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…, ID and card redaction (#50) - Features: the get-started checklist and hints; searching the whole history, including request and answer text; Pi, oh-my-pi, Grok Build, Qwen Code and Hermes Agent on the Clients and MCP pages, and DeepSeek Harness's web and desktop apps; the upstream Check-up tab; resident ID and bank card numbers in outbound redaction; the shared skills folder; showing hidden hints again. - Overview: twelve clients in one step, thirteen on the MCP page, ID and card numbers, history search. - Lite page: the client count (12), the client marquee, redaction and search in the feature copy. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Lite docs: Plugins
A new page, in English and Chinese, for the JavaScript plugins that
ThinkWatch Lite gains in its next release: what a plugin can change,
adding one (file or pasted code, review, confirmation in a system
dialog, changed files), the API (manifest, hooks, request view, answer
hooks, ctx), permissions, failures, limits, the security model, what
the sandbox cannot prevent, and the five examples in the Core
repository.
Features and the overview gain the Plugins page, which makes ten pages.
This ships with the release and is not to be merged before it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Lite docs: Plugins, with the app's labels and the runtime's limits
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Lite docs: Plugins, request hooks skip token-count requests
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Lite docs: Plugins on the Responses WebSocket, and how a broken plugin is matched
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Lite docs: Plugins with route-first request hooks and the built-in plugins
The request hook now runs after routing, once for each attempt to send
to an upstream: the page describes that order (route, plugins,
screening, conversion and redaction, send), failover starting again from
the client's original request, the new ctx fields (model as sent,
requested_model, upstream for every hook), and scope matched per attempt
by client, sent model and upstream.
The examples give way to the six plugins that ship with the app, all off
by default: what each does and its settings. Plugins that can change
tool calls need a system dialog to be turned on or reconfigured.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Lite docs: Plugins with request kinds, the three built-in plugins and the answer-instance cap
The page now matches the final plugin design in core:
- Order: routing on the client's original request, then for each
attempt placeholders, plugins, a second content check on what the
plugins added, conversion, redaction and send. A plugin's model
change only renames what is sent and still has to be a model the key
may use.
- Request hooks also run on token counts and Responses compaction; only
a model change is written back there.
- Request kinds: the manifest's `requests` field, the views for
embeddings and legacy completions (one message per input, text-only
edits, token ids read-only, their params), no answer hooks for them,
undeclared kinds passing untouched whatever `on_error` says, and the
load rules.
- ctx gains the three new formats; scope applies to every hook.
- Built-in plugins: the three that ship (answer language, WSL and
Windows paths, DeepSeek request rejections), with their settings and
how updates and deletions are handled. The dropped ones are gone, and
the writing example no longer uses one of them.
- Turning on or reconfiguring a tool-call plugin needs the system
dialog; multi-line string settings; at most 32 answer instances at
once and what happens when none is free.
- The first launch after the update clears the request history.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Lite docs: Plugins with the two built-in plugins
Core no longer ships deepseek-flags ("Avoid DeepSeek request
rejections"); reply-language and wsl-paths remain. In both languages:
- Plugins: drop its section and its example in the introduction, and
say two built-in plugins instead of three, in the introduction, the
built-in section and the upgrade note. Only wsl-paths can change tool
calls now, so the system-dialog sentence names it.
- Features and the docs index summary: two built-in plugins.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Lite docs: Plugins keep their configuration in their own file
A plugin's JS file now holds its scope, its behavior on errors and its
setting values, as in core v0.59.0.
- Adding and editing: one editor with Settings and Code tabs and a single
Save; Settings changes are written into the manifest, code edits update
the settings, and Add plugin opens the same editor on the Code tab with
Import from file. Enabled stays a switch in the app.
- The manifest is pure data; `on_error` joins the fields, settings take
`value` instead of `default`, and a rewrite replaces only the manifest
literal in one fixed style, without the comments inside it.
- Confirmation: a system dialog only to install, turn on, change the code
of, or approve a changed file for a plugin that can change tool calls.
The config file editor and version history cannot do those steps.
- A plugin that cannot run takes its scope and behavior on errors from the
approved file.
- Built-in plugins show their shipped manifests; settings changes do not
count as editing their code when an update arrives.
- Examples use the new manifest shape.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Lite docs: Plugins, the Install button and the plugin ID
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Lite docs: the Conversation tab of a session
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Docs and product pages for the three request guards Outbound redaction, tool-call inspection and the content filter are now the only guards: the output limit is gone (a routing rule that sets max_tokens caps answers instead) and hidden characters are content filter rules. Each guard has Off, Observe and a third mode named for what it does: Replace, Cut off, Enforce. - Lite features and overview: three protections and their third modes; redaction searches the whole request, has email and phone rules (off) and named placeholders; the two new tool-call rules; content rules that refuse, delete or record, match by code point, and the hidden character rules; the Deleted mark on Traffic; max_tokens in Routing. - Core overview, crate layers and the Core page: three guards, the content filter, tw-guard holding the shared rule model, and the <<TW_SECRET_1>> placeholder in the illustration. - Lite page: the security feature in two sentences, three protections. - Enterprise overview, architecture, configuration and API reference: the security.redact, security.inspect_tools and security.content settings, their shape and permissions, the conversion of the old keys, and a model's maximum output tokens; the product page's guard bullet. - src/data/core-docs synced from ThinkWatch-Core feat/guard-unify. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Core documents snapshot from the v0.59.0 release Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Lite 2026.10.1 shipped JavaScript plugins, but the Lite page never mentioned them. The bento gains a full-width last tile: the permissions a plugin can declare as chips, the copy, and the plugins doc's example cut down to a few lines, so no screenshot is needed. The feature also joins the Lite band on the home page (its odd last point takes the whole row) and the featureList in the Lite page's JSON-LD; the JSON-LD screenshots skip features without one. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
CI installed "pnpm 10" through pnpm/action-setup while a local pnpm 11 refused to build the site. package.json now names pnpm@10.34.6: the action reads it, and a local pnpm switches to that version on its own, so both build with the same pnpm. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* docs(lite): auxiliary requests are answered locally or forwarded Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(core-docs): snapshot from Core v0.60.0 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Lite: Windows portable downloads and the new release file names Release files are now named ThinkWatch-Lite-<version>-<os>-<arch>…, and each Windows architecture gets a portable zip next to its installer. - Lite page: the Windows tab has a second card for the portable zip, with the same architecture switch, version, sizes and sha256 links; the note covers SmartScreen and WebView2 for both. - Install docs (en, zh-CN): new file names; a portable section (data beside the program, separate settings, one copy running at a time, removing it); what the system uninstaller does, its checkbox and the standard-account limitation; how the portable copy updates itself. - Overview, docs index, home status line and structured data mention the portable zip. Downloads are matched by the end of the file name, which releases from before the rename share, so the installer links keep working until the first release with the new names; the portable links fall back to the release page until then. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Lite docs: the portable zip's app is ThinkWatch Lite.exe Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Lite page: the Windows portable zip as one line under the installer The portable build no longer has a card of its own. A single small line closes the installer card, "Portable build (ZIP, no installation): x64 · ARM64" (zh: 「绿色版(ZIP,免安装):x64 · ARM64」), with the architecture the page detects listed first, the way the installer button follows it. The links lead to the latest release page until a release carries the zips. The copy now reads "portable build" in the SmartScreen note, and the install guide drops the colloquial 「解压即用」 and "straight from its folder". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ory only on its own pages (#58) The pill linked to and counted the enterprise repository on every page. It now shows ThinkWatch Lite by default, and the enterprise repository on the enterprise page (/thinkwatch) and its guides (/docs/<slug>). The live count fetched in the browser follows the same repository. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Nineteen descriptions ran past what a result shows (about 155 characters in English, 80 in Chinese), the home page's at 357, and were cut off mid sentence. Each now says the same in fewer words. The doc summaries double as the text under each entry on a product's docs home, which reads better shorter as well. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
- /llms.txt: a plain-text map for language models and AI search engines (llmstxt.org): what each product is, the facts about ThinkWatch Lite stated once, and every documentation page with its summary - /llms-full.txt: the English documentation of ThinkWatch Lite and Core in one file, in sidebar order, each document with its address - deploy.yml: after a push or a manual deploy, every sitemap address is sent to IndexNow (Bing, which ChatGPT search and Copilot use, Yandex and others); the key file sits in public/. The scheduled rebuild does not notify, and a failed notification does not fail the deploy. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Pages for the questions people search for, in English and Chinese, under a new Guides group in the Lite docs sidebar: - Claude Code with GLM, DeepSeek or Kimi - Codex with Claude, Gemini or a Chat Completions-only relay - Claude Desktop with third-party models - switching upstreams without restarting the client - failover and load balancing across relays and keys - keeping API keys away from relays, and cutting off dangerous tool calls - Claude Code and Codex in WSL - ThinkWatch Lite and CC Switch compared, from CC Switch's own v3.20.4 documentation - an FAQ, which also carries FAQPage structured data built from its headings Each guide states its answer in the first paragraph and its steps in the app's own wording, checked against ThinkWatch Lite 2026.10.4 and Core 0.61.0. Look: the pages use the existing docs layout, with no images. The sidebar shows short labels; a guide's full title (the searched question) is used for the browser tab and search results through a new optional `title`. The Lite docs home keeps its eight cards: guides are left out of them. Also: the Features page counted six settings sections; 2026.10.4 has seven with Failover, now described. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…n data (#61) * Lite features: the tool rule for ThinkWatch's own data, and what protects the config file Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Lite features: model aliases, specified models in routing rules, and Claude Desktop without a Claude upstream Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Core docs from v0.62.0: model aliases and specified models in routing rules Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
) ThinkWatch Lite 2026.10.5 (core 0.62.0) no longer appends /v1 to a base URL that ends with its own version. The Claude Code guide now gives GLM's OpenAI-compatible addresses next to the Anthropic one it recommends, and the Codex guide gives GLM as its example of a Chat Completions relay, including the separate Coding Plan endpoint (…/api/coding/paas/v4). Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Lite docs for 2026.10.6: weighted round robin, slow starts, concurrency, model specs, key usage limits Lite 2026.10.6 (core 0.63.0) changes how groups distribute requests and adds limits that the features page and the failover guide did not describe, and it drops the Check-up tab that two pages still sent readers to. - Features: weights and "Distribute by" on round-robin groups; moving a slow-starting stream to the next upstream; the concurrency limit per upstream and the slot wait in Settings › Failover; model specs set by hand; usage limits per key with the "Limit reached" mark and notifications; the new marks in a request's attempts; Responses WebSocket turns as requests; check-up findings on the upstream's row. - Failover guide: weights and the four distribution modes with their factors, slow starts, concurrency limits, and "Lowest latency" now measured as time to first token per attempt. - Relay guide: points at the marks on the upstream's row instead of the removed tab. - Lite page: the keys tile mentions usage limits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Deployment guide: external Postgres behind a pooler, Redis Cluster and Redis over TLS ThinkWatch 3.2.0 takes a session-level advisory lock while it sets up the schema, so a transaction-mode pooler can leave the lock held and stall every later start; it also connects to Redis over TLS (rediss://, rediss-cluster://, REDIS_CA_CERT for a private CA) and to a Redis Cluster. The guide said nothing about either, and its Helm example set secrets.databaseUrl and secrets.redisUrl, which the chart does not have. - New section 4.6 with the chart's bundled: false / externalUrl values, the pooler requirement, the Cluster URL form and the TLS settings, following the chart README. - The Helm install example drops the two values the chart ignores and says that it runs the databases itself unless told otherwise. - The configuration reference points DATABASE_URL and REDIS_URL at the new section. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Deployment guide: an ExternalSecret example that works with the Helm chart The 4.4 example wrote lower-case keys (jwt-secret, database-url, ...) that the server never reads, created a Secret the chart also creates and overwrites, and used the v1beta1 API that current External Secrets Operator releases no longer serve. The chart always renders <release>-secrets and the server reads it through envFrom, with upper-case variable names. The example now merges JWT_SECRET and ENCRYPTION_KEY into that Secret (creationPolicy: Merge, external-secrets.io/v1), which the chart reads back on upgrade. The text says to leave secrets.jwtSecret and secrets.encryptionKey unset, to restart the server after the first sync, and that DATABASE_URL and REDIS_URL come from postgres.externalUrl and redis.externalUrl, since the chart rewrites them on every upgrade. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Core docs from v0.63.0: weights, distribution, slow start, concurrency, model specs and key usage limits Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Lite docs for 2026.10.9: the menu bar menu, model specs in clients, new versions as notices Lite 2026.10.9 reorders the menu bar and tray menu, and two changes from 2026.10.7 and 2026.10.8 never reached the site. - Features, menu bar: Open ThinkWatch Lite always comes first, then the unread notices and the Today block (today's tokens, requests, failures and cost, a chart of tokens per hour, the gateway state and generation speed on its top line), a row per quota window, the requests in progress, then the actions; Copy Gateway Address shows the address. What the menu holds while the gateway is not running. The Windows and Linux tray menus write the Today block out as text. - Features, upstreams and clients (2026.10.7): Specs... also sets reasoning and image input, and taking over opencode, Pi, oh-my-pi, Grok Build or Qwen Code writes each model's specs, with an update offered when they change. - Features and Install (2026.10.8): a new version is listed among the notices, and opens the update window from there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Core docs from v0.65.0: reasoning and image input in model specs Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Deployment guide: the published image names and tags, pnpm 12, a current upgrade example ThinkWatch 3.2.1 builds the web UI with pnpm 12 (packageManager in web/package.json); the guide still asked for pnpm 9+, which the workspace's allowBuilds field already ruled out at 3.2.0. The images section named ghcr.io/thinkwatch/..., while CI and the release workflow publish to ghcr.io/thinkwatchproject/..., and it said every push to main moves latest; since v1.0.2 only a release sets latest and its version tag, and main pushes get the commit SHA. The release notes list the same names. - Images: the thinkwatchproject names with <version>, latest and <git-sha>, and which workflow publishes which. - Compose: pinning takes a version (3.2.1) or a SHA from main. - Helm: the chart deploys the images of its appVersion unless a tag is set. - Rolling update: 3.2.1 for both images instead of 0.2.0 for the server alone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Docs for Lite 2026.10.10: models added by hand, a hidden menu bar item, scan alerts - features.md (en, zh-CN): an upstream's models are the ones it lists plus any added by hand with "Add models…" in its model list; the Manual tag, the rules for an ID, removal with Undo, and that routing, failover, aliases, rules, key scopes, the clients' model list, the dry run and the speed test treat them like listed models. The Menu bar setting's fourth choice, Hidden. Editing a scanned file reports only new findings. - import-links.md (en, zh-CN): the models parameter adds models by hand, next to those the service lists. - failover-and-load-balancing.md (en, zh-CN): a member that leaves a model out of its list can be given it by hand; the guide follows 2026.10.10. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Core docs from v0.66.0 `CORE_DOCS_REF=v0.66.0 pnpm core-docs`: the configuration reference describes providers[].models as models added by hand and explains which models an upstream has. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Import page and link builder: "Models added by hand", as in the app The app's import dialog now labels the models field "Models added by hand" («手动添加的模型») like the rest of the app. The site's import page, the link builder and their field errors, and the dialog description in import-links.md (en, zh-CN) follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Docs for Lite 2026.10.11 and ThinkWatch 3.3.0 - Features, failover guide: the no-response timeout replaces the slow-start wait and switch; manual abort of requests and sessions; the new attempt labels; models added by hand in the upstream dialog's Models section; long names cut short in Traffic; prompt-cache breakpoints for Claude on converted requests. - Codex guide: tools, history and compaction through converted routes; prompt caching for Claude; the Models section replaces the manual list. - Deployment guide: version examples move to 3.3.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Core docs from v0.67.0 The configuration reference replaces stream_start_wait_secs and next_on_slow_start with idle_timeout_secs, and describes the prompt-cache marks on requests converted for Claude. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Prompt caching on Bedrock: only the Claude models AWS lists Core 0.67.1 adds automatic cache breakpoints on Bedrock only for Claude 3.5 Sonnet v2, 3.7 Sonnet and 4.5 and later, and resends a request without them when an upstream refuses them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Core docs from v0.67.1 The configuration reference limits automatic cache marks on Bedrock to the Claude models AWS lists, and describes the resend without them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Docs for Lite 2026.10.12 and core 0.68.0 - Features (en, zh-CN): the Overview's six cards (Tokens, Cost, Cache hits, Requests, First token, Traffic) with their changes against the previous period and synced charts, the strip of what needs attention, and the table by model, upstream or key; upload and download on the Traffic table's tokens and Egress, Upload and Download in a request's timeline; the Content tab's live Parsed and Raw views with the client and upstream sides and the security hits marked; the Proxies tab's Traffic · 24 h column; requests in flight on the routing map; security log entries that open in place with every location, the rule as it was and what was done, export as JSON or CSV, and expiry with the request records; the menu bar's cost written like the token count. - Overview (en, zh-CN): the Overview row of the pages table. - Relay guide (en, zh-CN): an opened log entry shows the placeholder or the cut-off tool call. - Lite page: the overview and traffic tiles follow the new Overview and the live content. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Lite screenshots: the new Overview, and the menu bar's cost written like the token count The overview, menu bar and connection switcher images come from Lite's screenshot pipeline at 2026.10.12; their alt texts describe what they show. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Lite menu bar: the cost is written $9.34 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Core docs from v0.68.0 The configuration reference and the server guide are unchanged since v0.67.1; the snapshot now names v0.68.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Deployment guide: version examples move to 3.3.1 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Docs for Lite 2026.10.13 and core 0.69.0 - Features (en, zh-CN): the new upstream dialog's Service step; every amber warning can be ignored and Show again brings them back; each turn's context window and its estimated breakdown in the conversation view; a model's reasoning kept across API formats, tool calls written into answer text, compressed request bodies and upstream answers, and keep-alive pings while a request waits for a slot; the Time condition of routing rules; one colour per request on the routing map; the menu bar item no longer coloured by a quota. - Claude Code, Codex and failover guides, CC Switch comparison (en, zh-CN): the Service step of the new upstream dialog. - Lite page: the menu bar tile no longer describes the quota colours. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * Core docs from v0.69.0 The configuration reference gains the time condition of routing rules; the server guide is unchanged since v0.67.1. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * Deployment guide: version examples move to 3.4.0 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
* Docs for Lite 2026.10.14 and core 0.70.0 - Features (en, zh-CN): the new upstream dialog's three groups of services (model vendors, platforms and relays, local and custom) with OpenRouter, ThinkWatch, Sub2API and New API / One API; the authentication methods each service has, and the fields a service decides filled in or left out; ChatGPT and Z.ai / BigModel sign-in inside the dialog, with a copyable sign-in link, ChatGPT's device code, and the device code only on a remote core; editing that recognizes the service, and Z.ai / BigModel upstreams shown as an account sign-in; the Quota / billing column's balances, their sources and the enterprise gateway's key or account limits, the balance under Check connection and Refresh balance. - Claude Code, Codex and failover guides, CC Switch comparison, FAQ (en, zh-CN): the services to pick for GLM, relays and the account sign-in; DeepSeek and Kimi balances; balances in the comparison. - Remote core guide: the device code's address and code can be copied. - Overview and Lite page: upstreams show their balances. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Core docs from v0.70.0 The configuration reference gains an upstream's balance and signed_in keys; the server guide is unchanged since v0.67.1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * ThinkWatch 3.5.0 docs: GET /v1/usage, route caps, limits that cannot be checked - API reference (en, zh-CN): GET /v1/usage in the gateway endpoints, with what it answers about (the key, or its owner as a whole), usage, limits with scope, kind, window, used and resets_at, expires_at, and 401, 403 and 503; a section on limits and budgets: what a request is checked against, the 429 and its label, route RPM and TPM caps now enforced, and security.rate_limit_fail_closed; the Limits tab of an API key's edit dialog and the limits endpoints it uses. - Configuration (en, zh-CN): security.rate_limit_fail_closed in the security settings, covering Redis and database failures and route caps, with the console setting that holds it. - Deployment guide (en, zh-CN): GET /v1/usage in the endpoints the console's Configuration Guide lists. - ThinkWatch page: a client can ask what room its key has left, and the fail-open default covers the database as well as Redis. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Deployment guide: version examples move to 3.5.0 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
- Features (en, zh-CN): relays and the enterprise gateway take an API key, OAuth stays for custom endpoints; Advanced settings; Next checks the connection, with Retry and Continue anyway; Copy link; sign-in goes straight to Models with the account on top. - Claude Code, Codex and failover guides (en, zh-CN): Next checks the connection; BigModel is the first site; Forward client identity is under Advanced settings; the button is Copy link. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… and docs (#72) * Import links v2: per-service parameters, grouped import page, builder and docs The import page and the link builder now follow version 2 of the import link: every parameter the New upstream dialog shows for the chosen service and authentication method (service, auth, site, OAuth, Bedrock access keys, headers, client identity, concurrency, balance source, models_only, specs, billing, price sheet), with the same per-service rules as the app. The page lists the receiving hosts first and the settings in the dialog's groups; a parameter from a newer version shows that a newer ThinkWatch Lite is needed and is passed on to the app. Proxies, AWS profiles, aliases, routes, weights, the disabled switch and the checking-only access token are rejected. The Import links docs are rewritten for v2, the Lite features and comparison pages updated, and the enterprise docs describe the Add to ThinkWatch Lite button (Lite 2026.10.16 or later), fix the Configuration Guide path to /guide, and note that GET /v1/models lists only the models the calling key may use. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Import links v2.1: a link without service falls back to custom Without `service`, the service recognized from the address is used only when every parameter fits it; otherwise the link is a custom upstream, so every link written for the first version stays valid (an official address with another path, an Ollama address with a key, DeepSeek with protocol=openai-chat). An explicit `service` stays strict. The docs say so next to the v1 example and under `service`, the balance source is detected automatically when omitted, and the builder's default reads Auto-detect like the app. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Import links v2.2: plain http on private networks `url` and `oauth_endpoint` accept plain http:// for loopback, private IPv4 ranges (10/8, 172.16/12, 192.168/16, 100.64/10, 169.254/16), IPv6 fc00::/7 and fe80::/10, names without a dot and names ending in .local, .lan, .internal, .intranet, .corp, .home.arpa or .localhost, so an enterprise gateway on the company intranet can be imported. Other http addresses stay rejected. The import page states under such a host that the key and request content travel in plain text; the docs list the rule, and the enterprise docs note that intranet http gateways work. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Import links: the chat preset for New API sites A New API or One API admin can add ThinkWatch Lite to every key's chat menu with one preset; no change to the site's code is needed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Author
|
Superseded: the comment was fixed throughout the history instead. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A comment named a directory on a developer's machine; it now names the repository directory.
🤖 Generated with Claude Code