4174aafcbc
Log the decision to implement publish priority through admission control and reserved capacity rather than queue sort order, and capture the preexisting electron.vite.config.ts typecheck mismatch that blocked a clean desktop-client typecheck run. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
192 lines
13 KiB
Markdown
192 lines
13 KiB
Markdown
# Task Plan: GEO admin-web backend completion and frontend foundation
|
|
|
|
## Goal
|
|
Continue the desktop AI monitoring implementation by first adding a client-side local scheduler with durable queueing and adaptive execution policy, then adding a reusable hidden Playwright CDP execution layer that attaches to Electron Chromium and reuses existing account partitions.
|
|
|
|
## Current Phase
|
|
Phase 21
|
|
|
|
## Phases
|
|
### Phase 1: Progress Verification
|
|
- [x] Understand user intent
|
|
- [x] Identify constraints and requirements
|
|
- [x] Compare repository state with the 9-step plan
|
|
- [x] Document findings in findings.md
|
|
- **Status:** complete
|
|
|
|
### Phase 2: Gap Analysis and Scope Lock
|
|
- [x] Confirm the earliest incomplete step
|
|
- [x] Read the relevant sections of the design doc
|
|
- [x] Define the exact implementation slice for this turn
|
|
- **Status:** complete
|
|
|
|
### Phase 3: Implementation
|
|
- [x] Implement the missing backend code/config/schema/tests
|
|
- [x] Keep changes aligned with the design doc and existing structure
|
|
- [x] Update findings/progress after meaningful milestones
|
|
- **Status:** complete
|
|
|
|
### Phase 4: Testing & Verification
|
|
- [x] Run targeted commands and tests
|
|
- [x] Confirm the step acceptance criteria or record gaps
|
|
- [x] Fix issues found during verification
|
|
- **Status:** complete
|
|
|
|
### Phase 5: Delivery
|
|
- [x] Summarize step completion status with evidence
|
|
- [x] Highlight remaining gaps and risks
|
|
- [x] Deliver next-step outcome to the user
|
|
- **Status:** complete
|
|
|
|
### Phase 6: Frontend Scope Recovery
|
|
- [x] Recover the interrupted task context from planning files and Claude artifacts
|
|
- [x] Confirm whether frontend work already exists in the repository
|
|
- [x] Lock the smallest useful frontend slice for this turn
|
|
- **Status:** complete
|
|
|
|
### Phase 7: Frontend Foundation
|
|
- [x] Scaffold the pnpm workspace and shared frontend packages
|
|
- [x] Create the `apps/admin-web` Vite + Vue 3 application skeleton
|
|
- [x] Wire environment/config conventions for local API access
|
|
- **Status:** complete
|
|
|
|
### Phase 8: Admin-Web Initial Features
|
|
- [x] Implement auth state, login flow, and route guarding
|
|
- [x] Implement the main application shell and navigation
|
|
- [x] Implement the workspace dashboard with live backend data
|
|
- **Status:** complete
|
|
|
|
### Phase 9: Frontend Verification & Delivery
|
|
- [x] Run install/build checks for the new frontend workspace
|
|
- [x] Record remaining frontend gaps and follow-up slices
|
|
- [x] Deliver the resumed-task status to the user
|
|
- **Status:** complete
|
|
|
|
### Phase 10: Interface Coverage Audit & Visual Mapping
|
|
- [x] Inventory all currently exposed tenant-facing backend interfaces
|
|
- [x] Map interface groups to real admin-web pages
|
|
- [x] Recover the reference layout structure from `docs/refer` screenshots, including positional relationships
|
|
- **Status:** complete
|
|
|
|
### Phase 11: Admin-Web Full Interface Delivery
|
|
- [ ] Implement templates/articles frontend coverage against current backend APIs
|
|
- [ ] Implement brands/keywords/questions/competitors frontend coverage against current backend APIs
|
|
- [ ] Realign the shell and page layouts to the reference screenshot structure
|
|
- [x] Restore `pnpm dev:admin` and `pnpm typecheck:admin` after the frontend refactor introduced compile/runtime regressions
|
|
- [x] Establish the i18n and style hygiene baseline for the pages touched in this turn
|
|
- **Status:** in_progress
|
|
|
|
### Phase 12: Verification & Delivery
|
|
- [ ] Run frontend type/build verification
|
|
- [ ] Spot-check the main interaction flows against the live backend
|
|
- [ ] Update planning files and deliver the completed scope
|
|
- **Status:** pending
|
|
|
|
### Phase 13: Prompt Centralization
|
|
- [x] Inventory all currently used hard-coded prompts in runtime and seed paths
|
|
- [x] Extract prompt definitions into a dedicated shared location
|
|
- [x] Refactor existing callers to read from the centralized prompt layer
|
|
- **Status:** complete
|
|
|
|
### Phase 14: Prompt Verification & Delivery
|
|
- [x] Run targeted compile/test verification for the prompt refactor
|
|
- [x] Update planning files with the final prompt inventory and changed files
|
|
- [x] Deliver the extraction result and any remaining gaps
|
|
- **Status:** complete
|
|
|
|
### Phase 15: Desktop Scheduler Design & Integration
|
|
- [x] Audit the current desktop runtime queue/task execution path and lock the scheduler constraints
|
|
- [x] Implement a durable local monitor-task queue/cache with stale-task cleanup
|
|
- [x] Implement platform-level mutual exclusion and adaptive global concurrency policy
|
|
- [x] Integrate the scheduler into runtime leasing/execution without regressing publish tasks
|
|
- **Status:** complete
|
|
|
|
### Phase 16: Hidden Playwright CDP Execution Layer
|
|
- [x] Add a reusable hidden-browser manager that attaches Playwright to Electron Chromium over CDP
|
|
- [x] Reuse desktop account partition/session state for hidden pages
|
|
- [x] Expose the hidden Playwright context/page lifecycle to future monitor adapters
|
|
- [x] Keep the current hidden-view path working for existing adapters during the transition
|
|
- **Status:** complete
|
|
|
|
### Phase 17: Verification & Delivery
|
|
- [x] Run targeted desktop type/build verification
|
|
- [ ] Inspect runtime snapshot output for new scheduler/CDP state
|
|
- [ ] Summarize what is production-ready versus still scaffolded
|
|
- **Status:** in_progress
|
|
|
|
### Phase 18: Qwen Adapter & Auth Relaxation
|
|
- [x] Port the browser-extension `qwen` monitor logic into a desktop Playwright adapter
|
|
- [x] Register the new adapter in the desktop runtime monitor execution path
|
|
- [x] Relax Qwen binding completion so the auth window can close once a real session footprint is present
|
|
- [x] Allow anonymous-capable AI monitor platforms to execute without preflight auth blocking
|
|
- **Status:** complete
|
|
|
|
### Phase 19: Qwen Verification & Delivery
|
|
- [x] Run targeted desktop type/build verification after the Qwen adapter and auth updates
|
|
- [x] Update planning files with the Qwen implementation details and access-policy decision
|
|
- [x] Deliver the completed slice and remaining validation gaps
|
|
- **Status:** complete
|
|
|
|
### Phase 20: Tracking Collect-Now Repair
|
|
- [x] Audit the `admin-web` tracking collect-now flow against the current desktop monitoring architecture
|
|
- [x] Remove the obsolete browser-plugin kickoff dependency from `TrackingView`
|
|
- [x] Enforce the current logged-in user's desktop client online requirement in both frontend gating and backend collect-now validation
|
|
- [x] Run targeted frontend/backend verification for the repaired flow
|
|
- **Status:** complete
|
|
|
|
### Phase 21: Foreground Publish Admission
|
|
- [x] Add a lightweight in-memory publish scheduler with per-platform locks and cooldowns
|
|
- [x] Refactor desktop runtime admission so publish is foreground and monitor is background
|
|
- [x] Add hardware/runtime adaptive total concurrency with a publish-reserved slot
|
|
- [x] Run targeted desktop verification
|
|
- **Status:** complete
|
|
|
|
## Key Questions
|
|
1. How should the desktop client defer and locally optimize monitor-task execution without violating one-task-per-platform serialism?
|
|
2. What is the smallest durable local cache that allows same-day resume while safely dropping stale next-day monitor tasks?
|
|
3. How can Playwright CDP attach cleanly to Electron Chromium while reusing existing account session partitions?
|
|
|
|
## Decisions Made
|
|
| Decision | Rationale |
|
|
|----------|-----------|
|
|
| Use file-based planning for this task | Verification plus implementation will span multiple reads, edits, and test runs |
|
|
| Treat the earliest incomplete step as the current development target | Keeps the roadmap sequential and avoids skipping acceptance gaps |
|
|
| Lock the current implementation target to Step 4 | `sqlc` generation is broken and repository wrappers are absent, making it the earliest failed acceptance gate |
|
|
| Continue into the Step 5 refresh-rotation fix after Step 4 passed locally | The next acceptance gap was small, isolated, and directly adjacent to the auth module already being modified |
|
|
| Resume from the completed backend chain by building the missing `admin-web` foundation | The repository has no frontend apps, so UI integration cannot start without workspace scaffolding |
|
|
| Keep this turn scoped to `admin-web` rather than also creating `ops-admin-web` | The available backend is `tenant-api`; platform-side APIs and pages are not yet present in the repo |
|
|
| Use a pnpm workspace with shared packages from day one | Matches the architecture doc and avoids painting the repo into a single-app corner |
|
|
| Stop using Gemini for this turn after the user changed direction | Avoids spending more time on an unavailable external model path and keeps momentum inside the repo |
|
|
| Verify the first frontend slice with a real browser pass once Playwright became available again | Browser-level validation catches interaction bugs that install/build checks miss |
|
|
| Use the current backend route graph as the implementation boundary for this turn | The user asked for frontend coverage of existing interfaces, so pages without APIs stay non-primary |
|
|
| Reconstruct the screenshot layouts from visual position data, not OCR text alone | The user explicitly asked to follow image design including element placement |
|
|
| Move the quota card into the left sidebar footer and use page-level hero sections | This matches the reference screenshots more closely than the previous generic topbar layout |
|
|
| Centralize prompt text in a dedicated package instead of leaving it inside business logic functions | The user explicitly asked to extract hard-coded prompts for easier future optimization |
|
|
| Move scheduling authority fully into `desktop-client` | The user explicitly wants the server to dispatch tasks while the client decides when to execute them |
|
|
| Allow stale cross-day monitor tasks to be dropped on the client | The user explicitly allows漏采 and does not want next-day catch-up for unfinished tasks |
|
|
| Implement hidden browser infrastructure before expanding more adapters | Qwen and similar platforms cannot reliably use direct API calls and need browser-native execution |
|
|
| Only require active login for monitor tasks on `yuanbao` / `kimi` / `deepseek` | The user clarified that other AI platforms can still query and collect anonymously |
|
|
| Treat media publish as foreground and AI monitoring as background | The user explicitly wants publish to have the highest priority and never be starved by monitor execution |
|
|
| Reserve runtime capacity for publish instead of relying on queue priority alone | Running monitor tasks cannot be preempted by queue ordering, so production-grade priority needs admission control and reserved capacity |
|
|
| Keep publish scheduling in memory with per-platform locks/cooldowns | Publish needs foreground platform admission but not monitor-style durable recovery, cross-day pruning, or question cooldown semantics |
|
|
|
|
## Errors Encountered
|
|
| Error | Attempt | Resolution |
|
|
|-------|---------|------------|
|
|
| None yet | 1 | N/A |
|
|
| `make sqlc-generate` failed because `sqlc.yaml` points to `../../migrations/`, which resolves to `server/internal/migrations` | 1 | Fix schema path to repository-relative `../../../migrations/` and then generate code |
|
|
| `make lint` initially failed on several `errcheck` and one `ineffassign` warning | 1 | Fixed transaction defers, the middleware test Redis set call, and the dead increment in `article_service.go` |
|
|
| Gemini CLI `gemini-3.1-pro-preview` returned `429 MODEL_CAPACITY_EXHAUSTED` repeatedly | 1 | Stopped the Gemini path after the user requested not to use Gemini anymore |
|
|
| Playwright MCP navigation failed locally because it attempted to create `/.playwright-mcp` | 1 | Fell back to preview HTTP checks instead of blocking the turn on Playwright environment setup |
|
|
| Login button click did not trigger the sign-in flow in browser testing even though the backend endpoint worked | 1 | Bound the primary login button directly to `handleSubmit` and re-ran browser verification until the route change succeeded |
|
|
| Desktop monitor execution is currently global-serial and lacks durable local queueing | 1 | Replace the ad-hoc in-memory FIFO with a scheduler module that owns persistence, concurrency, and stale-task cleanup |
|
|
| `connectOverCDP()` is not wired yet even though `playwright-core` is installed | 1 | Add a dedicated hidden-browser manager instead of pushing CDP code directly into adapters or the runtime controller |
|
|
| `pnpm --filter @geo/desktop-client typecheck` fails in `electron.vite.config.ts` due to a pre-existing Vite 5/8 plugin type mismatch | 1 | Verified this change with `pnpm --filter @geo/desktop-client build` and `pnpm --filter @geo/desktop-client test`; leave config dependency alignment as a separate fix |
|
|
|
|
## Notes
|
|
- Re-check task_plan.md before major implementation decisions.
|
|
- Record concrete evidence for each claimed completed step.
|
|
- Frontend scope for this turn is limited to the tenant-facing `admin-web` shell, not the platform ops console.
|
|
- Visual references for this turn must be treated as layout guides, not just copy decks.
|
|
- Desktop AI monitoring scope for this turn is infrastructure-first: scheduler plus hidden browser layer, not all six adapters.
|