Osinachi Patrick and GitHub
4e92da55f2
Merge pull request #1 from Wursor
...
Mirror to GitHub / mirror (push) Canceled after 0s
Frontend updates
2026-10-15 23:23:12 +01:00
SinachPat and Claude Sonnet 5.5
f69ce33dd0
feat(web): marketing theme toggle, site search palette, and phone dev access
...
- Theme toggle in the nav: follows the device until chosen, remembers the choice, sets data-theme before first paint (no flash).
- Site search: Cmd/Ctrl+K command palette on every marketing page, opened by the shortcut, a nav Search button, or the Docs search field. Searches pages, docs topics and articles that have a page.
- Docs topics move to content.ts so the page and the search index share one source.
- next.config: allowedDevOrigins for private network ranges so a phone on the same Wi-Fi hydrates the dev site. Dev only.
- Sun and moon icons added by hand (not Figma exports); noted in the icons README.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-13 22:27:34 +01:00
Claude
0cff3902b2
feat(web): Product, How it works, Trust, Pricing and Docs pages, with a marketing e2e check
...
Pricing shows no plans, prices or free trial until decided. Docs search and articles without pages are shown but not linked. Disables the agent file that next dev generates.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_014SdXCbrN5PtGExkpvMaMHx
2026-10-12 15:34:50 +00:00
Claude
6947113027
feat(web): marketing Home page and the product component library (ADR 0023)
...
Product UI components are built once at design size from the Figma file and reused by the marketing mockups and, later, the app. Text contrast tokens now meet WCAG AA in both themes, with a test. Pricing stays hidden until decided.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_014SdXCbrN5PtGExkpvMaMHx
2026-10-12 15:25:50 +00:00
Claude
913d7a8832
feat(web): marketing Button, Nav (with mobile menu) and Footer from Figma, test-first
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_014SdXCbrN5PtGExkpvMaMHx
2026-10-12 15:00:38 +00:00
Claude
e314819629
feat(web): migrate to Next.js App Router and add design tokens (ADR 0018)
...
The Sprint 1 shell moves to /app with its own root layout so its dark theme does not leak. Figma tokens ported with light and dark parity.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_014SdXCbrN5PtGExkpvMaMHx
2026-10-12 14:55:59 +00:00
Claude
b3fc7d2002
docs: spike plan for hosting on DigitalOcean
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_014SdXCbrN5PtGExkpvMaMHx
2026-10-12 14:40:45 +00:00
Claude
ab485703f2
docs: ADR 0022 hosting on DigitalOcean (WeOwn Cloud)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_014SdXCbrN5PtGExkpvMaMHx
2026-10-12 14:36:49 +00:00
Claude
1634763180
docs: record decisions ADR 0018-0021 (Next.js, sign-in methods, WeOwn Cloud, no-diff rule) and align PRD, guide and AGENTS.md
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_014SdXCbrN5PtGExkpvMaMHx
2026-10-12 14:35:01 +00:00
Claude
9772724268
docs: replace PRD with Headless revision 4, add direction update to implementation guide, update changelog
...
Mirror to GitHub / mirror (push) Canceled after 0s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01BDvcAvuLeGQbo78PAiYWnP
2026-10-12 15:14:49 +01:00
SinachPat
e9de6ba62c
fix: store session token on signup and send it to /chat
...
Mirror to GitHub / mirror (push) Canceled after 0s
- web: App stores sessionToken and passes to useChat; useChat sends Authorization header
- web: ChatPanel adds wursor-message-user/agent test hooks
- verified full UI flow (signup -> chat -> working -> reply -> approve -> preview)
2026-08-17 21:16:43 +01:00
SinachPat
060b181e71
feat: wire chat to the agent loop (POST /chat)
...
Mirror to GitHub / mirror (push) Canceled after 0s
- api: /chat route runs runAgent (session-required, 503 when unconfigured)
- api: index.ts builds OpenRouterLlmClient + WpRestExecutor from env; loads .env
- web: useChat calls /chat with mock fallback; proxy /chat+/sites+/health
- .env.example: DATABASE_URL empty by default (in-memory dev)
- 111 unit tests green; smoke-tested signup+chat
2026-08-17 17:19:33 +01:00
SinachPat
69287ebec0
feat: build the chat + preview + approve interface
...
Mirror to GitHub / mirror (push) Canceled after 0s
- web: two-pane app chrome (chat panel + browser-framed preview)
- ChatPanel, Preview, ApproveBar components + useChat (mock agent for now)
- Fluent/Figma design system (Inter, dark chrome, elevation, motion)
- 107 unit tests + Playwright e2e green; web typechecks + builds
2026-08-17 17:10:25 +01:00
SinachPat
b61ff21710
feat: de-risk agent loop — semantic tool schema + agent loop + real-WP spike harness
...
Mirror to GitHub / mirror (push) Canceled after 0s
- api/agents: tool-schemas (semantic allowlist), agent-loop (multi-step + budget), circuit-breaker, llm-client/tool-executor interfaces
- api/agents: WpRestExecutor (real WP REST), OpenRouterLlmClient
- e2e/agent: multi-step prompts + run-agent-spike runner (scores rendered changes)
- ADR 0017; 101 unit tests green
2026-08-15 23:49:07 +01:00
SinachPat
69b2481299
feat: Sprint 2 — WordPress plugin (auth/api/site-info/admin) + web SiteConnector
...
Mirror to GitHub / mirror (push) Canceled after 0s
- plugin: Wursor_Auth (token hashing, HMAC, scoped tokens), Wursor_API (REST + auth), Wursor_Site_Info (builder/capabilities/preflight), Wursor_Admin
- plugin: test-auth.php (10 auth tests, run in a WP+PHP env)
- web: SiteConnector pairing UI (code + poll + states)
- api: PluginClient signs full REST route (matches WP get_route)
- 92 unit tests green
2026-08-15 23:17:16 +01:00
SinachPat
9801b9475b
feat: Sprint 2 — Wursor-side pairing flow + signed plugin client
...
Mirror to GitHub / mirror (push) Canceled after 0s
- session store + requireSession middleware (signup persists session)
- PairingService (8-char code, 5-min TTL, 5-attempt lockout, single-use, https check)
- POST /sites/pair, /sites/redeem, /sites/:id/confirm, GET /sites/:id
- PluginClient signs HMAC (timestamp+method+path+body-hash), token in Authorization
- ADR 0016; 58 api tests green
2026-08-15 23:10:19 +01:00
SinachPat
02f55b4543
docs: DevOps/infrastructure handoff brief
Mirror to GitHub / mirror (push) Canceled after 0s
2026-08-15 20:31:56 +01:00
SinachPat
df2315087d
feat: Sprint 1 remainder — Postgres store, Docker client, warm pool, sessions route
...
Mirror to GitHub / mirror (push) Canceled after 0s
- PostgresUserStore (Queryable) + migration + env-gated wiring
- DockerodeClient behind injected DockerEngine
- ImageManager, WarmPool, Dockerfile.wordpress, docker-compose
- POST /sessions spins up sandbox (503 when unconfigured)
- ADRs 0014-0015; 68 unit tests green
2026-08-15 20:18:34 +01:00
SinachPat
97f31315bd
docs: ADRs 0011-0013 for Sprint 1 stack, user store, and Docker boundary
Mirror to GitHub / mirror (push) Canceled after 0s
2026-08-15 20:07:44 +01:00
SinachPat
a037b882e9
feat: Sprint 1 — Playwright e2e + sandbox orchestration (TDD)
...
Mirror to GitHub / mirror (push) Canceled after 0s
- e2e: Playwright chat-flow (sign up -> chat) with api/web webServer harness
- api: sandbox services subset/media-proxy/manifest/gc + DockerClient contract
- api: SandboxManager orchestrator (fake-Docker tested); /health route
- 53 unit tests green; Playwright e2e green
2026-08-15 20:01:58 +01:00
SinachPat
9733ba6e3c
feat: Sprint 1 slice 1 — API signup + web signup/chat shell
...
Mirror to GitHub / mirror (push) Canceled after 0s
- api: Fastify POST /auth/signup (validation, scrypt hash, in-memory store)
- web: React+Vite SignUp form and chat shell with dev proxy
- 35 tests green (api 5, web 2, e2e 28)
2026-08-15 19:53:13 +01:00
SinachPat
2f53b1901b
ci: reference GITEA secret by its actual name
Mirror to GitHub / mirror (push) Canceled after 0s
2026-08-15 18:57:40 +01:00
SinachPat
6eeac23719
chore: update repo references after transfer to Wursor org
2026-08-15 18:10:03 +01:00
SinachPat
9a7058c85b
feat: auto-load .env in golden harness; scaffold CI workflow
2026-08-15 18:05:37 +01:00
SinachPat
0d6afab425
feat: add OpenRouter provider to golden harness, close Phase 0 gate
...
- provider-agnostic llm-client (grok + openrouter) with page-slug context
- live golden run scored and passing via x-ai/grok-4.6
- ADR 0010; spike docs flipped to done
2026-08-15 17:58:09 +01:00
SinachPat
f42549c451
ci: grant contents write permission for mirror push
2026-08-15 14:59:51 +01:00
SinachPat
ffe666f479
ci: point mirror at correct Gitea repo pat/wursor
2026-08-15 14:57:42 +01:00
SinachPat
d34347b1d9
chore: expand gitignore to cover common secret files
2026-08-15 14:53:35 +01:00
SinachPat
bb84ab5aef
ci: bidirectional mirror between GitHub and Gitea
2026-08-15 14:08:45 +01:00
SinachPat
1f017cd9b0
docs: add decision records, changelog, and repo index links
2026-08-15 14:06:45 +01:00
SinachPat
6e59a8a36b
feat: Phase 0 workspace, spikes, and golden harness
...
Stand up the monorepo skeleton and land the first Phase 0 artifacts:
pairing threat model, plugin catalog, builder detect, 20-prompt golden
harness, and synthetic 2GB mirror timing.
2026-08-15 09:44:43 +01:00
SinachPat
0dae13cfd3
feat: add pstack-style rigor skill family for Zed
...
- wursor-precheck: router skill, entry point for non-trivial tasks
- wursor-principles: 21 engineering principles adapted for Wursor
- wursor-tdd, wursor-bug-fix, wursor-feature, wursor-investigation,
wursor-review, wursor-decision-log: playbook skills
- AGENTS.md: repo guide wiring the skill routing table
- Fix: double-quote YAML frontmatter descriptions (colon-space in
plain scalars broke Zed's skill loader)
2026-08-14 14:23:06 +01:00
SinachPat
dfb3c9372b
docs: PRD v2.0, IMPLEMENTATION v2.0 — non-technical-first pivot
...
Complete rewrite of both documents from engineer-first to non-technical-first:
Architecture changed:
- Desktop app (Tauri + Monaco) → Web app (React + Node.js)
- Local Docker runtime → Cloud-hosted sandboxes (Wursor-hosted, VPS)
- Code editor + terminal + diff panels → Chat interface + live preview + approve/reject
- Tools for engineers (fs, git, wp-cli) → Playbooks for everyone (content, design, plugins)
- BYO API key → Wursor-hosted model (Grok)
Product changed:
- Primary user: WordPress engineer → WordPress site owner (non-technical)
- Interface: code editor with panels → single chat input + live preview
- Safety model: permission tiers + file diffs → cloud sandbox + approve/reject
- Deploy: Git-based → plugin-based with one-click rollback
- Competitive frame: dev tools → WP management layer
Key new sections:
- Cloud sandbox orchestration with warm pool, mirroring, lazy media sync
- WordPress plugin connector (REST API, deploy receiver, rollback)
- Deploy mechanism (diff engine, pusher, verifier, rollback)
- New playbook system (content, design, plugin, site build)
- Error states for the web app + plugin paradigm
- Non-technical personas, principles, and UX
2026-08-13 18:57:12 +01:00
SinachPat
4403c8c5e8
docs: PRD v1.3 — Tauri/Monaco shell, Grok model
...
- Shell decision changed from Electron + Code-OSS to Tauri (Rust) + Monaco Editor
- Fast startup (~0.3-0.8s), low memory (100-200MB) via system webview
- Rust backend for tool bus, knowledge graph parser, permission engine, runtime manager
- Rationale documented vs Electron and Zed
- Model changed from Claude to Grok (xAI), BYO API key
- IMPLEMENTATION.md rewritten for Rust/Tauri stack: crates layout, Rust TDD tests, cargo-based CI
- Phase 1 roadmap, test strategy, decisions section updated to match
2026-08-13 13:12:04 +01:00
SinachPat
6b878dbb14
docs: PRD v1.2 — Wursor rename, key decisions locked, all gaps addressed
...
- Renamed product from Wordbench to Wursor across all touchpoints
- Locked key decisions: Electron + Code-OSS shell, Claude BYO key, wp-env only v1
- Added first-run experience (§7.1.8), error states (§8.5), agent substrate (§8.1.1)
- Expanded State Diff lifecycle (§6.4), Knowledge Graph strategy (§6.2)
- Strengthened verify-as-proof principle (§5, §7.1.6)
- Added metrics baselines + owners (§11), exit criteria for Phases 1-2 (§12)
- Added test strategy (§C.1), accessibility/i18n as non-goal (§C)
- Created IMPLEMENTATION.md — TDD-driven 8-sprint build guide
2026-08-13 12:49:23 +01:00
Osinachi Patrick
0f08ccea07
docs: PRD v1.1 — WordPress-native voice, drop editor-clone framing
2026-08-12 11:54:09 +01:00
Osinachi Patrick
702ce4e9c1
chore: pivot to Wordbench — remove Originmain codebase, add PRD
...
Clears the prior AI design-engineering product and replaces the repo with the Wordbench (agentic WordPress development environment) PRD.
2026-08-12 11:43:10 +01:00
SinachPat
65a9051bf5
updated stuff
2026-05-13 15:20:54 +01:00
SinachPat
7bf43fc481
updated stuff
2026-05-13 15:12:51 +01:00
SinachPat
8356e6278c
updated stuff
2026-05-10 20:52:34 +01:00
SinachPat
f51dfa5e4d
updated stuff
2026-05-10 01:19:20 +01:00
SinachPat
a2ab1c5dc6
updated stuff
2026-05-10 01:16:09 +01:00
SinachPat
4b7f14564a
updated stuff
2026-05-10 00:45:55 +01:00
SinachPat
c53db55209
updated stuff
2026-05-09 20:37:27 +01:00
SinachPat
3c5bbaea0b
updated stuff
2026-05-09 20:23:34 +01:00
SinachPat and Claude Sonnet 4.6
1a5d84cb58
fix: make hook.inject robust against React Refresh timing race
...
Root cause: the React DevTools browser extension injects a hook stub at
document_start (before HTML parsing), so hook.inject can be undefined
when React Fast Refresh runs. React Refresh destructures inject as
undefined and later calls undefined.apply() -> TypeError. This prevents
React from ever setting injectedHook, so onCommitFiberRoot is never called.
Fix: unconditionally replace hook.inject with a wrapper that tries the
captured previous inject (with try/catch) then falls back to our own
renderer ID allocation. Works regardless of script execution order.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-09 17:11:01 +01:00
SinachPat and Claude Sonnet 4.6
b59a3dddd3
debug: add console diagnostics to fiber hook to trace React detection failure
...
Logs at: script activation, React inject() call, onCommitFiberRoot fire,
and captureExistingTree DOM scan result. Temporary — remove after diagnosis.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-09 10:29:06 +01:00
SinachPat and Claude Sonnet 4.6
14e4db6468
fix: externalize typescript in CLI esbuild bundle
...
indexer.ts imports typescript directly. Bundling it into an ESM output
causes 'Dynamic require of fs is not supported' because typescript uses
CJS require() for Node built-ins internally.
Marking typescript as external drops the CLI bundle from 9.9 MB to 417 KB
and fixes the startup crash on Node 22.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-07 14:32:43 +01:00
SinachPat and Claude Sonnet 4.6
8af7dacacc
fix: add inject() to legacy buildFiberHookScript hook as well
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-07 14:10:23 +01:00
SinachPat and Claude Sonnet 4.6
d1d5e352c8
fix: add inject() to DevTools hook so React actually calls onCommitFiberRoot
...
React's injectInternals() calls hook.inject(renderer) before it will ever
invoke onCommitFiberRoot. When inject is missing, React's try/catch silently
bails and injectedHook stays null — our handler is never reached regardless
of how correctly onCommitFiberRoot is set up.
Fix: define inject() on the hook we create (returns a renderer ID and stores
the renderer in hook.renderers, matching the React DevTools spec). Also
patches inject onto any existing stub hook that lacks it, so third-party
minimal hooks don't silently block registration.
This is the root cause of the 'Static HTML page' false positive on apps
that don't have the React DevTools browser extension installed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-07 14:04:29 +01:00