Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
f528550
docs: start milestone v1.3.0 Extension multilingual UI
LakshmanTurlapati Oct 11, 2026
a7587d3
docs: define milestone v1.3.0 requirements
LakshmanTurlapati Oct 11, 2026
9755fad
docs: create milestone v1.3.0 roadmap (6 phases)
LakshmanTurlapati Oct 11, 2026
a0919a0
docs: research milestone v1.3.0 extension i18n
LakshmanTurlapati Oct 11, 2026
287ddfc
feat(66-01): add extension locale resolver and catalog gate
LakshmanTurlapati Oct 11, 2026
41fec25
feat(67-01): localize manifest and resting side panel and popup chrome
LakshmanTurlapati Oct 11, 2026
49c972f
feat(67-01): localize side panel and popup runtime chrome
LakshmanTurlapati Oct 11, 2026
e8a77c9
feat(68-01): localize options and control panel chrome
LakshmanTurlapati Oct 11, 2026
1ddc186
feat(69-01): localize onboarding, entry pages, and overlay chrome
LakshmanTurlapati Oct 11, 2026
7ea5cd2
feat(70-71): catalog leftover chrome and add the language control
LakshmanTurlapati Oct 13, 2026
4555cb7
chore(release): bump the product version to 0.9.93
LakshmanTurlapati Oct 13, 2026
d7b671e
docs(v1.3.0): record milestone PR #150 in planning state
LakshmanTurlapati Oct 13, 2026
dbc4034
fix(66-71): make extension i18n load and stop clobbering live text
LakshmanTurlapati Oct 13, 2026
c29691a
fix(66-71): keep locale state across re-injection and protect markup
LakshmanTurlapati Oct 14, 2026
6b8eaac
fix(66-71): wire unkeyed control panel copy and tighten the copy gate
LakshmanTurlapati Oct 15, 2026
5db3b40
Merge origin/main into showcase-internationalization-languages
LakshmanTurlapati Oct 15, 2026
6196038
fix(66-71): skip translated status labels and localize onboarding key…
LakshmanTurlapati Oct 15, 2026
d606e4b
fix(66-71): translate side panel, popup, and onboarding chrome built …
LakshmanTurlapati Oct 15, 2026
6cd08f4
fix(66-71): translate overlay chrome built in JS
LakshmanTurlapati Oct 15, 2026
6fc7980
fix(66-71): translate control panel chrome built in JS
LakshmanTurlapati Oct 15, 2026
c485f5f
fix(66-71): check markup text in JS and keep the copy gate aligned
LakshmanTurlapati Oct 15, 2026
8eee116
fix(66-71): close review gaps in locale refresh, entry pages, and tests
LakshmanTurlapati Oct 18, 2026
d0c0949
chore(showcase): regenerate crawler files
LakshmanTurlapati Oct 18, 2026
66409c3
fix(66-71): load ov() in the replay clock test and refresh release-no…
LakshmanTurlapati Oct 18, 2026
87f59af
test(66-71): count the UI locale module in the background importScrip…
LakshmanTurlapati Oct 18, 2026
63b5b26
fix(66-71): translate overlay status, stop tooltip, delegation and st…
LakshmanTurlapati Oct 19, 2026
536d1aa
docs(showcase): add 0.9.93 release notes in all seven locales
LakshmanTurlapati Oct 19, 2026
3121d8f
docs: describe 0.9.93 in the changelogs and store listing
LakshmanTurlapati Oct 19, 2026
b7c46e1
docs: count 1,230 extension catalog keys in the 0.9.93 notes
LakshmanTurlapati Oct 19, 2026
2a0b171
Add official Cline support; ship extension 0.9.95 and MCP 0.11.5
LakshmanTurlapati Oct 19, 2026
9303c1d
feat(66-71): pick the UI language from Chrome's language list and kee…
LakshmanTurlapati Oct 19, 2026
a28ba73
fix(66-71): translate the dashboard token chart
LakshmanTurlapati Oct 19, 2026
3b8e941
docs: describe automatic language selection in the 0.9.93 notes
LakshmanTurlapati Oct 19, 2026
92d9cb2
docs: count 1,234 extension catalog keys in the 0.9.93 notes
LakshmanTurlapati Oct 19, 2026
118ca8f
Merge #155 (official Cline support) into the multilingual UI branch
LakshmanTurlapati Oct 19, 2026
f662c7d
docs(showcase): relabel the release notes as 0.9.95 and add Cline sup…
LakshmanTurlapati Oct 19, 2026
35cd517
feat: Antigravity replaces Windsurf; allow Muse, Grok Bot, and Dots l…
LakshmanTurlapati Oct 20, 2026
40ad76a
fix(i18n): keep templated copy live across a language change
LakshmanTurlapati Oct 20, 2026
0d42f5a
fix(i18n): translate the last English lines a language change missed
LakshmanTurlapati Oct 20, 2026
f9be8f2
fix(i18n): redraw counters and labels a language change missed
LakshmanTurlapati Oct 21, 2026
9e3568b
test(lattice): bundle writeKeyed into the replay player harness
LakshmanTurlapati Oct 21, 2026
a36d3de
Remove dead MCP tools, pin the tool count to 69, and finish retiring …
LakshmanTurlapati Oct 21, 2026
00c4949
fix(i18n): popup action count and owner copy follow a language change
LakshmanTurlapati Oct 21, 2026
006bbeb
Catch tool counts the parity check missed and fix the last 68s
LakshmanTurlapati Oct 21, 2026
1207a23
fix(i18n): translate delegated completion headings and lifecycle anno…
LakshmanTurlapati Oct 21, 2026
3e73983
fix(i18n): translate catalog reasons without rewriting owner names
LakshmanTurlapati Oct 21, 2026
d6320f2
fix(mcp): treat reordered client config keys as already installed
LakshmanTurlapati Oct 21, 2026
f0391f1
Add Online-Mind2Web benchmark harness and published results under min…
LakshmanTurlapati Oct 22, 2026
7af8994
Skip benchmark harness tests whose local prerequisites are absent
LakshmanTurlapati Oct 22, 2026
eb7abf3
fix(i18n): localize failures, progress, and provider fallbacks
LakshmanTurlapati Oct 22, 2026
3d170bf
Merge #161 (remove dead MCP tools, finish retiring background agents)…
LakshmanTurlapati Oct 22, 2026
d9a927b
Merge #162 (Online-Mind2Web benchmark harness and results) into the m…
LakshmanTurlapati Oct 22, 2026
11a3c3a
fix(i18n): saved progress, notices, and failures follow the UI language
LakshmanTurlapati Oct 22, 2026
40d0453
Merge main (#163, Online-Mind2Web benchmark) into the multilingual UI…
LakshmanTurlapati Oct 22, 2026
dad5f26
feat(i18n): add Russian to the extension interface
LakshmanTurlapati Oct 23, 2026
f853713
feat(showcase): add Russian at /ru/
LakshmanTurlapati Oct 23, 2026
63c9c9e
fix(i18n): control-panel provider notice, agent card and cap counters…
LakshmanTurlapati Oct 25, 2026
613cf83
fix(grok): verify CLI capabilities instead of pinning versions
LakshmanTurlapati Oct 25, 2026
4a732a8
fix(i18n): Grok sign-in pill, failed connection tests, and control-pa…
LakshmanTurlapati Oct 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
58 changes: 58 additions & 0 deletions .github/workflows/grok-compatibility.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Grok CLI compatibility

on:
schedule:
- cron: '27 10 * * 1'
workflow_dispatch:

permissions:
contents: read

concurrency:
group: grok-compatibility-${{ github.ref }}
cancel-in-progress: true

jobs:
stable-cli:
name: stable CLI (${{ matrix.os }})
runs-on: ${{ matrix.os }}
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-latest]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install MCP build dependencies
run: npm --prefix mcp ci --no-audit --no-fund
- name: Build the checked-out integration
run: npm --prefix mcp run build
- name: Prepare Linux sandbox dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y bubblewrap
- name: Install official stable Grok in a disposable directory
shell: bash
env:
GROK_CHANNEL: stable
run: |
export GROK_BIN_DIR="$RUNNER_TEMP/fsb-grok-bin"
mkdir -p "$GROK_BIN_DIR"
curl --fail --silent --show-error --location --proto '=https' https://x.ai/cli/install.sh --output "$RUNNER_TEMP/install-grok.sh"
bash "$RUNNER_TEMP/install-grok.sh"
- name: Probe capabilities without credentials or inference
shell: bash
run: |
set -o pipefail
node scripts/check-grok-compatibility.mjs --binary "$RUNNER_TEMP/fsb-grok-bin/grok" | tee "$RUNNER_TEMP/grok-compatibility.json"
- name: Upload bounded compatibility result
if: always()
uses: actions/upload-artifact@v4
with:
name: grok-compatibility-${{ matrix.os }}
path: ${{ runner.temp }}/grok-compatibility.json
if-no-files-found: ignore
32 changes: 28 additions & 4 deletions .planning/PROJECT.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ FSB is an AI-powered browser automation Chrome extension that executes tasks thr

## Current State

**Active milestone progress:** Phases 57-64 are complete (48/51 requirements). Phase 64 verified 4/4 roadmap success criteria, 66/66 plan truths, 36/36 key links, MULTI-01..03, and all ten registered HIGH/CRITICAL threats; its guarded 25-command matrix and repository test process are green after a clean code-review fix loop. Three genuine OpenCode account/process/browser/accessibility scenarios join the prior 42 in the user-directed milestone-end UAT sweep. Phase 65 (Codex Adapter) is the final implementation phase in v0.9.91; backlog Phase 999.1 remains outside this milestone.
**Active milestone:** v1.3.0 Extension multilingual UI — planning. The Chrome extension has no `chrome.i18n` catalog. This milestone makes every package-owned user-facing string render in the same seven locales the showcase already ships.

**Paused, not shipped:** v0.9.91 MCP Clients as Providers. Automated work through Phase 65 is complete and human UAT remains pending. Its roadmap, requirements, state snapshot, research, and phase directories are archived under `.planning/milestones/v0.9.91-*`. Backlog phase 999.1 stays in `.planning/phases/`.

**Last completed:** v1.2.0 Showcase i18n Completeness — Phases 52-56 shipped 2026-07-09. Full-page translation audit, 5-id resync + stats-274 retirement + hero/CTA transcreation, stats lint gate flip, permanent `verify-translation-drift` CI gate, and WARNING-02 locale-cookie redirect fix. VISUAL-01 browser UAT remains human_needed (`53-VISUAL-QA.md`).

Expand All @@ -25,7 +27,29 @@ FSB is an AI-powered browser automation Chrome extension that executes tasks thr
- v1.0.0 Full App Catalog (OpenTabs Parity) -- archived 2026-06-29; T1 expansion debt carried into v1.1.0


## Current Milestone: v0.9.91 MCP Clients as Providers
## Current Milestone: v1.3.0 Extension multilingual UI

**Goal:** Internationalize the Chrome extension so every package-owned user-facing string can render in the same seven locales the showcase already ships.

**Target features:**
- MV3 `chrome.i18n` catalogs for `en`, `es`, `de`, `ja`, `ko`, `zh-CN`, and `zh-TW`, with Chrome folders `zh_CN` and `zh_TW` mapped in one module.
- A runtime resolver so an explicit `chrome.storage.local` choice overrides the browser UI language. Missing keys fall back to English. The website `fsb-locale` cookie is not read.
- Localized manifest name and description, side panel, popup, options and control panel, onboarding, unlock, microphone permission, and package-owned overlay chrome.
- A CI gate that fails on a missing key, an empty message, a changed placeholder, or copied English prose that is not on a hash-bound allowlist.
- A language control that shows the seven native autonyms and persists the choice.

**Key context:**
- English is the source locale. Native labels are English, Español, Deutsch, 日本語, 한국어, 简体中文, 繁體中文. The list is `showcase/angular/src/app/core/i18n/locale-constants.ts`, mirrored in `showcase/server/src/utils/locale-constants.js`. Korean stays. v1.2.0 docs that say six locales are historical.
- `chrome.i18n.getMessage` and `__MSG_key__` follow the browser UI language and cannot switch at runtime. Extension pages are classic scripts, and the service worker loads helpers with `importScripts`, so the resolver is a classic script on `globalThis`.
- Manifest name and description follow the browser locale. The in-extension override covers extension pages and overlay chrome.
- Brand and product names, commands, and code identifiers follow `showcase/angular/src/locale/DO-NOT-TRANSLATE.md`.
- MCP tool names, JSON-RPC methods, error codes, storage keys, and message types stay byte-stable.
- Phases continue from 66. v0.9.91 human UAT is unchanged and is not marked passed.
- No string translation happens in the planning turn.

## Paused Milestone: v0.9.91 MCP Clients as Providers

**Status:** Paused 2026-10-11. Automated work through Phase 65 is complete. Human UAT is still pending. This milestone is not shipped.

**Goal:** Make installed agent CLIs (Claude Code first) first-class side-panel providers -- FSB captures which MCP clients the user installs/connects, presents them as key-less providers in a renamed Providers panel, and delegates side-panel tasks to a spawned agent CLI that drives the browser back through FSB's own MCP tools.

Expand All @@ -38,7 +62,7 @@ FSB is an AI-powered browser automation Chrome extension that executes tasks thr
- **Drift gate + compatibility doctor (Phase 62 complete)** -- one daemon-owned compatibility matrix feeds offline production-parser CI, doctor text/JSON, authenticated durable browser projection, protocol-drift diagnostics, and non-mutating Providers compatibility states. Three genuine installed/rendered/accessibility checks remain pending.
- **Native wake path (Phase 63 complete)** -- the optional native-messaging host wakes or attaches only to `serve` through exact one-shot framing, exact-owned cross-platform registration, read-only diagnostics, and a background-authoritative wake UI with doctor fallback; it never spawns agent CLIs, and the Phase 59 channel-gate files are byte-identical to the phase base. Eight genuine install/Chrome/accessibility checks remain pending.
- **OpenCode adapter (Phase 64 complete)** -- the unchanged five-method `AgentProviderAdapter` now drives both cold `opencode run` tasks and verified attaches to an FSB-owned `opencode serve`; exact 1.14.25 private policy, schema-derived JSONL fixture, first-commit drift coverage, transient server authentication, role-aware crash recovery, provider-neutral browser persistence, and honest unknown billing are all verified. Three genuine live scenarios remain pending.
- **Codex adapter (Phase 65 next)** -- complete the stable adapter roster with hermetic `codex exec --json`, source-pinned fixture/drift coverage, and honest ChatGPT OAuth versus API-key versus unauthenticated disclosure. Gemini remains explicitly deferred until a live help capture and fixture pin exist. Task-mode only for v0.9.91.
- **Codex adapter (Phase 65 automated work complete)** -- hermetic `codex exec --json`, source-pinned fixture/drift coverage, and honest ChatGPT OAuth versus API-key versus unauthenticated disclosure. Human UAT65-01 through UAT65-03 remain pending. Gemini remains explicitly deferred. Task-mode only for v0.9.91.

**Key context:**
- The spawn channel is security-critical (RCE-adjacent): extension-origin gating + shared secret + explicit consent tiers required. Bridge already rejects untrusted browser origins (`tests/mcp-bridge-topology.test.js`).
Expand Down Expand Up @@ -736,4 +760,4 @@ This document evolves at phase transitions and milestone boundaries.
4. Update Context with current state

---
*Last updated: 2026-07-21 -- Phase 64 OpenCode Adapter deterministically complete; 45 live scenarios remain deferred to the milestone-end sweep. Next: Phase 65 Codex Adapter.*
*Last updated: 2026-10-11 -- v1.3.0 Extension multilingual UI started. v0.9.91 archived as paused with human UAT still pending, not shipped.*
Loading
Loading