liumangmang
8c2f1c13bb
feat: 支持网站目标分组轻量管理(新增、编辑、描述展示),不修改和不提交倍率
2026-07-01 17:47:36 +08:00
liumangmang
e5d7af8906
feat: 网站分组列表默认按倍率从小到大(升序)排序
2026-07-01 17:22:19 +08:00
liumangmang
650451c123
fix: 引入 normalizeRateBound 标准化倍率空输入,解决输入清空后过滤失效的问题
2026-07-01 17:14:28 +08:00
liumangmang
04d719b417
feat: 选择上游分组弹窗支持倍率范围(大于等于/小于等于)筛选
2026-07-01 17:06:18 +08:00
liumangmang
f9b5a03330
fix: 缩小选择分组弹窗的搜索范围至分组自身信息,更新输入占位提示文案
2026-07-01 16:31:40 +08:00
liumangmang
7c7942c83b
fix: 解决选择框异常压缩、新增绑定自动选择首个分组、以及弹窗自适应2K显示器比例
2026-07-01 16:13:05 +08:00
liumangmang
962614500c
refactor: 隔离 Websites.vue 全局样式,仅对 Element Plus 壳层节点应用非 scoped 样式以防污染其他页面
2026-07-01 15:52:48 +08:00
liumangmang
71e0fe40a9
refactor: 按照新版 ui_redesign_prototype.html 重构新增绑定抽屉和选择上游分组弹窗
2026-07-01 15:47:51 +08:00
liumangmang
756d6e1083
style: 移除 Websites.vue 中所有尾部多余空格
2026-07-01 15:16:07 +08:00
liumangmang
02e41fa80e
feat: 监听上游分组改用专用弹窗选择器,支持搜索、多选及已选Tag展示
2026-07-01 15:11:53 +08:00
liumangmang
8abfa4c5ef
feat: 重构接口日志页面与接口监控看板,支持HTTP方法过滤和实时轮询
2026-07-01 15:04:32 +08:00
liumangmang
397a14c978
feat(website): 支持基于现有绑定一键整理分组,支持账号校验补齐、自愈重建与缺失 Key 提示 (含异常保守跳过及名称层级匹配)
2026-07-01 11:21:20 +08:00
liumangmang
efd0a88249
perf(import): 优化账号导入弹窗为秒开体验并支持批量回查校验
2026-07-01 10:00:40 +08:00
liumangmang
d92537688a
fix(priority): keep readable priority sync details
2026-07-01 09:12:39 +08:00
liumangmang
edc00444dc
fix(nox-api): address duplicate creation risks, pending upgrading issues, cache warm error handling, test speedups, and frontend display support for pending keys
2026-06-30 17:25:18 +08:00
liumangmang
c5bb63cf82
feat: support upstream token refresh
2026-06-30 14:34:40 +08:00
liumangmang
a914d3d222
feat: add Nox-API upstream support
2026-06-30 11:22:38 +08:00
SmartUp Developer
b866b387e0
feat: sync upstream keys and reorder priorities
2026-06-03 17:03:11 +08:00
liumangmang
a42bcba483
Remove server remote browser support
2026-06-02 19:25:20 +08:00
liumangmang
84148f4a69
feat: support real browser auth import
2026-06-02 13:51:29 +08:00
liumangmang
f4d16a4c01
fix(frontend): include cookie_count and cookie_names in AuthCaptureDialog emit
2026-06-02 10:07:32 +08:00
liumangmang
0b1daf277b
fix(frontend): apply new-api-user endpoint reset to cookie_bundle capture branch
2026-06-02 09:58:18 +08:00
liumangmang
b77ea21ca8
fix(frontend): support cookie_bundle candidate in AuthCaptureDialog and refreshAuth
2026-06-02 09:52:43 +08:00
liumangmang
871557e4ae
feat(upstreams): add batch test-all / check-now-all endpoints
...
- POST /api/upstreams/test-all: batch connection test for all enabled
upstreams (no snapshot, no webhook); updates last_status, balance
- POST /api/upstreams/check-now-all: full batch sync (snapshot, diff,
webhook, key sync, priority sync); mirrors single check-now behavior
- Both routes are registered before /{uid} to avoid path capture
- Skips disabled upstreams (status=skipped); single failure does not
abort subsequent upstreams (serial execution)
- Returns UpstreamBatchActionResponse with per-item detail and summary
Refactor: extract _test_upstream_core(db, u) and _check_now_core(db, u)
- All four routes (single + batch × 2) now share the same core helpers
- Eliminates duplicate logic and future divergence risk
Frontend:
- Add UpstreamBatchActionResponse / Item / Summary TS types
- Add upstreamsApi.testAll() and upstreamsApi.checkNowAll()
- Add '一键测试' and '一键同步' buttons in Upstreams.vue toolbar
(order: 一键测试 → 一键同步 → 刷新 → 新增上游)
- Buttons disabled when list is empty or another batch op is running
- On completion: refresh list + ElMessageBox with per-item failure detail
2026-06-01 16:46:42 +08:00
liumangmang
bea4344bb3
fix: reconcile upstream keys on list/generate/import to prevent stale key imports
...
- Extract reconcile_upstream_keys() to website_sync.py (shared scheduler + on-demand)
- Add reconcile_upstream_keys_full() for on-demand reconciliation at three entry points:
list_generated_keys, generate_keys_by_groups, import_upstream_keys_as_accounts
- Safe on failure: active_group_ids=None / remote_key_ids=None skip cleanup
- Support custom managed_prefix via _fetch_remote_managed_key_ids() helper
- Exclude orphaned keys from frontend importable list
- Remove hardcoded search='SmartUp' from scheduler path
2026-06-01 11:29:37 +08:00
liumangmang
3408795289
feat: default upstream balance config for new upstream form
...
defaultForm() now uses sub2api presets for balance fields:
- balance_endpoint: /auth/me
- balance_response_path: data.balance
- balance_divisor: 1.0
Platform presets in handlePlatformChange() remain unchanged.
2026-06-01 11:09:31 +08:00
liumangmang
518e3e8efc
feat: add one-click sync for website group bindings
2026-06-01 09:06:01 +08:00
liumangmang
3ab3a5e26f
feat: add multi-tab support to remote browser
2026-05-30 09:51:51 +08:00
liumangmang
5c20ddc8e6
feat: sync account priorities after rate changes
2026-05-29 17:51:12 +08:00
liumangmang
c5778bb3e7
feat: persist browser sessions and update admin workflows
2026-05-29 16:00:43 +08:00
SmartUp Developer
4971263a3a
perf: 前端按需引入 Element Plus + Vite 拆包 + template 优化
2026-05-25 00:18:08 +08:00
SmartUp Developer
3a31d185a4
fix: reuse upstream keys for account import
2026-05-24 23:18:40 +08:00
liumangmang
6044b00685
feat: 上游 Key 唯一化、分组导入跳过、账号导入平台识别&远端校验&base_url 注入
...
- 上游 Key 命名改为 {prefix}-{upstream.id}-{safe_group_name}-{group_id}
- 唯一约束 (upstream_id, group_id, managed_prefix) 加 managed_prefix 列
- 上游检测成功时同步 Key 状态,远端已删/分组已删自动清理
- 重复分组导入跳过,目标网站已存在同名分组返回 exists
- 账号导入平台自动识别(auto/manual 模式)
- 全选可导入 Key 按钮 + 目标分组自动匹配
- 导入幂等:已导入过的 Key 校验远端账号,不存在则重建
- 新增同步接口 POST /sync-imported-upstream-keys
- account_exists() 通过拉取账号列表判断,避免 404 误判
- credentials.base_url 注入来源上游地址,避免 401
- 前端导入弹窗自动同步+刷新按钮+并发/优先级设置
- 新增 12 个测试覆盖同步、幂等、远端删除、校验失败路径
2026-05-21 01:16:39 +08:00
liumangmang
0a27bba296
fix: 修复远程浏览器登录态保留 & 剪贴板同步问题
2026-05-20 10:13:13 +08:00
liumangmang
6cc797f915
feat: remote browser login persistence + balance display + UI consistency
...
- Retain login state in remote browser profiles (don't delete on disconnect)
- Add GET /api/browser-sessions/{id}/clipboard for clipboard sync
- Add POST /api/browser-sessions/{id}/autofill-login for manual credential fill
- Add DELETE /api/browser-sessions/profiles/{custom_page_id} for login clear
- Add balance tracking with configurable divisor (balance_divisor)
- Health check on session reuse, idle TTL eviction, background cleanup
- Add first-frame watchdog (10s timeout) to prevent infinite loading
- Reconnect browser on active=true when session was closed
- UI: uniform text-only inline buttons (websites + upstreams pages)
- Fix page switch race with closingRemoteSessionPromise
2026-05-20 09:44:20 +08:00
SmartUp Developer and Claude Opus 4.7
4c71148ff9
feat: one-click upstream auth refresh from custom page viewer
...
- Add linked_upstream_id to CustomPage model with DB migration
- New POST /api/custom-pages/{pid}/refresh-auth endpoint extracts
credentials from active remote browser and updates linked upstream
- PageViewer toolbar shows key icon button when page has linked upstream
- CustomPages form adds upstream dropdown for remote_browser pages
- Auth capture extracts New-Api-User from localStorage uid/user/self API
- Upstream client sends New-Api-User header in cookie auth mode
- Fix auth capture dialog: transparent background, field persistence,
login URL defaults to base_url/login, focus on click for keyboard input
- Fix upstream test ASCII encoding with non-header characters validation
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-19 09:27:14 +08:00
SmartUp Developer
7cb0ff1608
fix: object URL leak, CDP before goto, limit raw secrets in extract
...
- AuthCaptureDialog: revokeObjectURL on each frame to prevent memory leak
- CDP Network capture starts before initial page.goto, not after
- /extract defaults to candidates-only; pass ?include_raw=true for full data
2026-05-18 14:25:56 +08:00
SmartUp Developer
c7b33983d6
feat: auth-capture — WS frame stream, drag events, continuous CDP, profile cleanup
...
- AuthCaptureDialog: real WebSocket for binary JPEG frame stream (no polling)
- Pointer drag: mousedown/mousemove/mouseup events for slider-captcha
- CDP capture starts at session creation, caches headers in session.captured_headers
- Ephemeral profile dir deleted on session close (shutil.rmtree)
- Candidate types unified: bearer_token / cookie / api_key / credential
- Frontend handleAuthCaptureSelect maps all 4 types to correct form fields
2026-05-18 14:14:33 +08:00
SmartUp Developer
08c855677a
feat: auth capture — interactive browser, CDP header capture, cookie auth
...
- AuthCaptureDialog: full WS screenshot stream + mouse/keyboard/scroll events
- Backend auth_capture: CDP Network.requestWillBeSent for Authorization headers
- Candidate scoring: confidence 0-95%, preview (masked), auth_headers section
- Upstream form: add 'Cookie' auth type, handle cookie selection
- UpstreamClient: support auth_type=cookie with Cookie header
- No secrets logged at DEBUG or higher
2026-05-18 11:44:10 +08:00
SmartUp Developer
4d1237c58f
feat: auth capture — remote browser credential extraction
...
- BrowserSessionService: add create_ephemeral() for temp sessions
- New auth_capture_service.py: extract cookies, localStorage, sessionStorage from page
- New auth_capture router: POST /sessions, GET /sessions/{id}/extract, DELETE /sessions/{id}
- Frontend AuthCaptureDialog: URL input → browser view → extract → pick candidate
- Upstreams.vue: '提取' button next to Bearer Token field
- No sensitive values logged
2026-05-17 21:04:36 +08:00
SmartUp Developer
c809139470
fix: authStorage key depends on pathname, F5 refresh logs out
...
location.pathname changes between /login and /upstreams, causing
different localStorage keys. Use static 'smartup' instead.
2026-05-17 13:01:53 +08:00
SmartUp Developer
5c60627fb6
fix: Vite type declaration, non-idempotent retry, hardcoded test IP
...
- Add frontend/src/vite-env.d.ts (reference vite/client) to fix vue-tsc build
- Restrict axios-retry to GET/HEAD/OPTIONS only (avoid replaying mutations)
- Convert test_upstream.py to accept URL via CLI args instead of hardcoded IP
2026-05-17 11:56:49 +08:00
SmartUp Developer
8a6ed249be
fix: complete remaining 8 optimization items
...
- HTTP connection pooling: UpstreamClient & WebsiteClient reuse httpx.Client
- Deduplicate decimal_string into shared app/utils/number.py
- Split scheduler transaction: snapshot write → webhook/website sync in separate sessions
- Remove hardcoded 170.106.100.210 migration from database.py
- Reset consecutive_failures on upstream update
- Healthcheck: install curl, replace python -c with curl -f
- Add .dockerignore to reduce build context
- Frontend: add axios-retry with exponential backoff (5xx/network errors only)
2026-05-17 11:09:35 +08:00
SmartUp Developer
ad16618406
fix: address multiple code audit findings
...
- CORS: replace wildcard with explicit origin list from CORS_ORIGINS env
- Auth: enforce strong defaults, JWT blacklist (RevokedToken model), login rate limiting
- Auth: validate password length before bcrypt (72-byte limit)
- Scheduler: single-threaded worker to mitigate SQLite write contention
- Scheduler: graceful shutdown (wait=True)
- Snapshots: add prune_snapshots() with configurable retention count
- Storage: isolate localStorage keys via VITE_APP_KEY prefix
- Config: add cors_origins, login_rate_limit, snapshot_retention_count settings
2026-05-17 10:52:18 +08:00
liumangmang and Claude Opus 4.7
7adc7c00ab
Add remote browser pages and website sync
...
Enable managed remote browser custom pages with login autofill and add website sync workflows so external admin surfaces can be handled inside SmartUp.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-15 15:43:58 +08:00
liumangmang
b564ca4797
Initial commit
2026-05-12 17:51:53 +08:00