Commit Graph

97 Commits

Author SHA1 Message Date
root ef868f81a1 feat(desktop): add hot view retain/release lifecycle and process metrics
Replace single-shot acquireHotView with retainHotView/releaseHotView
plus a minute-level reaper that closes views idle beyond 5 minutes and
never evicts a view while it still has live retainers. Wrap adapter
calls in try/finally so a failing publish/query still releases the
view. Sample process metrics every minute and expose hot-view policy
and process snapshot via the runtime snapshot for diagnostics.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 11:07:58 +08:00
root a46ed4b9f6 fix(tenant): resolve desktop retry article id via publish record/batch
Fall back to looking up article_id from publish_records or publish_batches
when the desktop task payload lacks article_id at the top level. Covers
payloads that only carry content_ref.{article_id,id}, publish_record_id,
or publish_batch_id, preventing spurious 40096 errors when retrying
older desktop tasks.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 11:07:48 +08:00
root a617d39a4a feat(desktop): drop parked review flow, add publish management
SaaS 侧人工审核后才创建 publish job,desktop 不再做二次审核:移除
manual/waiting_user/parked/from_parked 状态机与 LeaseFromParked 查询,
desktop client 只执行发布并新增"发布管理"页(待发布队列 / 历史 / 再次
发送)。同时抽离 @geo/publisher-platforms 共享适配器包、新增 Redis-based
desktop_presence 与 publish_record_support,刷新 admin-web 发布弹窗与
媒体库;plan A / spec 文档同步口径。
2026-04-20 09:52:48 +08:00
root b16e9f0bd1 feat(desktop): implement workspace foundation + desktop-client skeleton
Plan 0 (workspaces): add workspaces + workspace_memberships schema, extend
JWT/Actor/claims with primary_workspace_id, seed default workspace per tenant,
thread workspace_id through tenant monitoring quota.

Plan A (desktop skeleton): new Electron app (apps/desktop-client) with main/
preload/renderer, shared Vue component package (packages/ui-shared), and server
surface — desktop client registration + token rotation + heartbeat, SSE task
event stream, desktop accounts/tasks/content handlers, publish job endpoint,
and supporting repositories, services, sqlc queries, and migrations.

Hard cutover per plan: remove browser-extension monitoring callback endpoints,
stub legacy media API in admin-web, and delete monitoring_callback_handler.go.
2026-04-19 14:18:20 +08:00
root 98f9e95875 docs(plans): add Plan 0 (workspace foundation) and Plan A (desktop skeleton)
Plan 0 · Workspace 底座一等化 (2-3 weeks, blocks Plan A):
  - Phase 0.1 workspaces + workspace_memberships tables with default
    seed; backfill workspace_id onto existing platform_accounts and
    tenant_monitoring_quotas.
  - Phase 0.2 Actor/Claims/JWT add PrimaryWorkspaceID; Login/Refresh
    inject via GetPrimaryWorkspaceForUser query.
  - Phase 0.3 WorkspaceScope middleware driven from Actor only (query
    params rejected); wired to /api/tenant/events / accounts /
    publish-jobs / tasks / monitoring whitelist.
  - Phase 0.4 sqlc queries for platform_accounts and
    tenant_monitoring_quotas filter by workspace_id; ≥10
    cross-workspace penetration test cases.
  - Phase 0.5 workspace-sensitive cache keys.
  - Phase 0.6 monitoring domain migration: rename
    primary_installation_id → primary_client_id; service / handler /
    projection / recovery / cleanup / seed all consume workspace_id;
    regression tests.
  - Phase 0.7 /api/auth/me returns primary_workspace; admin-web memo.
  - Phase 0.8 CI lint guard enforces workspace_id injection on
    desktop lines.
  - Phase 0.9 server-derived SSE topic library + exit-bar smoke +
    code review checklist.

Plan A · 桌面客户端骨架穿透 (5-6 weeks):
  - Phase A.0 CDP spike matrix for Doubao (0.5w, blocks A.4).
  - Phase A.1 server protocol + DB: desktop_clients /
    platform_accounts / desktop_tasks / publish_jobs / attempts /
    traces; lease / LeaseFromParked (strict CAS) / Park / Extend /
    Complete / ReconcileTask / WebCancel queries; RabbitMQ fanout +
    Redis presence + offline→online reclaim; 11-case lease protocol
    integration suite.
  - Phase A.2 Electron desktop-client runtime with modules:
    session-registry, view-pool (hot/cold), vault + vault-export,
    lease-manager, rate-limiter, keep-alive, circuit-breaker,
    crash-recovery, api-client, sse-client, tracing (Alpha scope).
  - Phase A.3 packages/ui-shared H1: design tokens (CSS vars +
    AntD theme light/dark); useAccountSelection composable;
    MarkdownPreview / AccountCard / TagMultiSelect / HealthBadge /
    useSseSubscription components; admin-web no-regress integration.
  - Phase A.4 Doubao monitor adapter based on A.0 matrix.
  - Phase A.5 Toutiao publish adapter with manual parked recovery.
  - Phase A.6 PublishArticleModal H2 rewrite (account-level
    multi-select on useAccountSelection; SSE progress panel; deep
    link for manual review).
  - Phase A.7 fake server + fake platforms + Playwright _electron
    E2E + Mac notarization CI + autoUpdater unit tests.
  - Phase A.8 exit-bar: real-account smoke playbook + chaos test
    (multi-instance SSE routing / parked survival across restarts)
    + plan-a-complete tag.

Plan 0 must complete and tag `plan-0-complete` before Plan A starts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 23:47:13 +08:00
root e2f26b7468 docs(desktop-client): spec v2.5 closes 5 contract gaps from round-5 review
Fifth-round codex+gemini final verification: Gemini gave Ready-to-plan;
codex gave Ready-with-caveats with 5 surgical contract gaps. All 5
closed in v2.5:

1. reconcile status=retry semantics pinned: original task returns to
   queued with attempts+1, no cloning, no new job. §6.4 route note,
   §7.5 UNKNOWN reconcile table (renamed from "重新创建任务" to "重新
   运行"), and §15.1 Mermaid all agree.
2. content_ref workspace boundary rule (Phase 1): tenant-native
   entities (article_draft/template_gen/video/brand_asset) must
   belong to actor's primary workspace, otherwise 422. Added to
   Plan 0 cross-workspace pentration test exit bar.
3. WorkspaceScope input surface unified: removed workspace_id= query
   from §6.8.2 modal example; scope solely derived from Actor.
4. Contract drift cleanup: GET /api/desktop/accounts?client=self
   return fields add delete_requested_at; retry path clarified to
   JSON body.
5. Parked Web cancel endpoint: new POST /api/tenant/tasks/{id}/cancel
   (WorkspaceScope) for aborting parked/queued tasks; §15.1 Mermaid
   updated with queued→aborted edge and endpoint labels.

Header upgraded to v2.5.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 23:32:03 +08:00
root 256f507bff docs(desktop-client): spec v2.3 from architect-level review
Fourth-round Claude+Codex+Gemini architect review produced 1C + 7W
issues. All applied:

Plan 0 scope lock-in (Codex C1 Partial → Closed):
- §12 Plan 0 explicitly adopts narrow-workspace Phase 1 strategy:
  workspace first-class ONLY on desktop_clients / platform_accounts /
  desktop_tasks / desktop_publish_jobs / tenant_monitoring_quotas.
  Existing articles / brands / kol-templates / publish-batches /
  images lines keep tenant==workspace (no multi-workspace UI).
- WorkspaceScope middleware attached to a specific route whitelist only.
- Eight concrete Plan 0 deliverables with three exit-bar categories.

Spec consistency sweep (Codex W3):
- §6.4 idempotency contract rewritten: pause/resume references
  removed; correct new lease ops enumerated (extend/cancel/result/
  park/trace + lease + lease?from_parked).
- §7.5 crash recovery: lease_client_id → target_client_id (the former
  never existed after the v2.2 schema restructure).
- §6.6 platform_accounts DDL gains delete_requested_at column so
  §6.8.6 two-phase delete protocol actually has its storage.
- §6.4 routes table adds POST /api/tenant/tasks/{id}/reconcile and
  POST /api/tenant/accounts/{id}/request-delete (previously only in
  prose).
- §14 Waiting-user glossary rewritten to reflect parked+CAS model.
- §13 v2.2 changelog annotated with "v2.3+ supersedes".

Parked / reconcile protocol closure (Codex W2 Partial → Closed):
- §5.3 adds Parked Recovery Protocol: strict CAS SQL sketch for
  POST /tasks/{id}/lease?from_parked, five error scenarios with
  client action mapping, idempotent repeat-request rule, and five
  target_client-offline/revoke/swap/72h-timeout strategies with
  a "never auto-rebind" core principle.
- Reconcile moved from /api/desktop/* to /api/tenant/* (Web owns
  reconciliation).
- Parked auto-abort threshold lifted 24h → 72h to avoid weekend
  false-kills.

Mermaid diagrams pulled forward (Gemini W10):
- §15.1 Lease state machine (Mermaid stateDiagram-v2) inlined.
- §15.2 Account CAS + Tombstone resync sequence diagram inlined.
- §15.3 reserves three remaining diagrams for Plan A.

Spike operability (Codex W4):
- §12 Plan A Spike specs owner pair (runtime + provider owner),
  artifact (electron-chromium-cdp-matrix.md with capture/screenshot
  evidence), three-state outcome (supported / degraded / blocked),
  and fallback decision tree for blocked case.

Modal refactor split (Gemini C1):
- §12 Plan A Block H splits into H1 (weeks 1-2: ui-shared skeleton +
  design tokens + useAccountSelection composable + shared components)
  and H2 (weeks 4-5: PublishArticleModal rewrite on top of H1).

Design tokens explicit (Gemini W2):
- H1 now required to produce CSS variables (light/dark) + Ant Design
  Theme Config as first deliverables of ui-shared.

credential_holder DDL promise softened (Codex W3 Partial → Closed):
- §2 hard constraint 9 reverts to naming soft-convention only; DDL
  keeps workspace_id / client_id / target_client_id.
- §11 risk note adjusted.

Header status updated to v2.4. Total effort unchanged at 28-33 weeks.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 23:19:49 +08:00
root 70d1d96c57 chore: update .gitignore to include Playwright and log files 2026-04-18 22:13:38 +08:00
root ef978ddbbf docs(desktop-client): spec v2.3 from architect-level review
Third-round Claude+Codex+Gemini architect review surfaced foundation-
level issues that prior local patches missed. Codex verdict was
Needs-rework; Gemini verdict was Ready-with-caveats. v2.3 lands all
2 Critical + 9 Warning + 3 Info.

Critical:
- C1 workspace-as-first-class: Prior drafts added a WorkspaceScope
  middleware, but Codex verified code: Actor/Claims carry only tenant_id,
  cache_support keys scope to tenant, workspaces table migration does
  not exist, tenant_monitoring_quotas tracks primary_installation_id.
  Add a new Plan 0 (Workspace foundation uplift, 2-3w, blocks Plan A)
  covering workspaces + memberships migrations, claims extension,
  cache-key rewrite, and the full monitoring-domain migration checklist
  (new §6.1.1). §2 hard-constraint 8 rewritten; new hard-constraint 9
  reserves credential_holder / account_home naming for future evolution.
- C2 CDP stream-capture path was still inconsistent: Fetch.continueResponse
  + takeResponseBodyAsStream cannot chain per CDP semantics. v2.3 moves
  EventSource to Network.eventSourceMessageReceived, fetch-stream to
  Network.streamResourceContent + dataReceived (Chromium >=120, OK on
  Electron 41), and reserves Fetch only for must-mutate scenarios
  without chained continueResponse. Plan A now requires a provider x
  transport spike matrix (0.5w) before any adapter work.

Warning:
- W1 Patch-channel minimal loop (G1) promoted from Plan C to Plan B,
  so Beta exit criteria are satisfiable.
- W2 waiting_user decoupled from lease: becomes a parked state that
  releases the lease, survives hours of human review, and is resumed
  via POST /tasks/{id}/lease?from_parked=true.
- W3 credential_holder/account_home evolution seam formalized.
- W4 §6.1.1 lists 8 monitoring-domain migration items that were
  previously hidden inside "sqlc rename".
- W5 Deep-link nonce becomes a one-time opaque code bound to
  target_client_id, Redis-jti consumed on verify.
- W6 §10.3 block H raised from 1.5w to 2.5-3w after Gemini verified
  PublishArticleModal's accounts[0] assumption needs a real rewrite.
- W7 MarkdownPreview extracted into packages/ui-shared so Web preview
  and Desktop manual review use the same renderer.
- W8 packages/http-client gains a standardized SseClient (backoff +
  Last-Event-ID + snapshot + dedup), shared by both apps.
- W9 Trace viewer now runs inside a CSP-sandboxed iframe with hash
  routing for file:// loads; trace data flows in via postMessage.

Info:
- I1 §14 adapter map appendix; Hunyuan renamed to Yuanbao with the
  correct entry domain (yuanbao.tencent.com).
- I2 UNKNOWN tasks gain a reconcile workflow (mark-succeeded /
  mark-failed / ignore / recreate), plus weekly in-app nudge.
- I3 New §15 listing the 5 Mermaid diagrams Plan A must produce
  (sequence, lease state machine, account resync, multi-instance
  topology, component tree).

Total effort re-estimated from 24-28w to 28-33w; split expands from
3 plans to 4 (Plan 0 -> A -> B -> C).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 22:12:53 +08:00
root a83faff211 docs(desktop-client): spec v2.2 applies 4C+9W from second cross-review
Second-round Claude+Codex+Gemini cross-review surfaced implementation-
level gaps in the v2.1 admin-web coordination layer. All 4 Critical
and 9 Warning findings addressed:

Critical:
- C1 (multi-account routing): desktop_tasks now has first-class columns
  job_id, target_account_id, target_client_id, platform with indexes;
  new desktop_publish_jobs aggregation table; §6.3 SSE only pushes to
  target_client_id; lease rejects non-target requesters.
- C2 (account consistency): Replace vague "client=SoT, server=projection"
  with CAS + Tombstone protocol. platform_accounts gains sync_version
  and deleted_at; all client writes require if_sync_version CAS; web-side
  delete writes delete_requested_at intent, client resync completes the
  delete via normal DELETE path. Added 3-way merge rules and concurrent
  case table in §6.8.6.
- C3 (/api/tenant/events auth): WorkspaceScope middleware required
  (TenantScope insufficient); topics must be server-derived from
  actor+workspace, never accept free query params; symmetric contract
  table between /api/desktop/events and /api/tenant/events (multi-
  instance fanout, Last-Event-ID replay, snapshot first frame, monotonic
  event_id, client dedup).
- C4 (route migration): Full migration map added in §6.8.4 listing
  media/platform-accounts -> accounts, articles/:id/publish-batches ->
  publish-jobs, publish-records -> publish-jobs/{id} subtasks.

Warning:
- Kimi binary-framed gRPC-Web path added to §5.2 transport table;
  login methods (Kimi: wechat/phone; Hunyuan: wechat/qq/email +
  loopback) noted in §4.4.
- Offline->online dual-sided reclaim: server scans queued tasks and
  re-pushes task_available; client heartbeats+resyncs then enters
  lease(limit=20) loop until empty.
- GET /api/desktop/accounts?client=self added to §6.4 for resync.
- Account.tags added; Modal gains tag multiselect + search + three-
  level batch select.
- §6.8.5 exposes queue_ahead + eta_seconds for capacity feedback.
- Deep link gains intermediate-state modal + manual-launch/copy
  fallbacks + one-time nonce JWT on tasks/<id>/review; Windows/mac/
  Linux protocol registration specified.
- content_ref is now polymorphic {type, id} supporting article_draft /
  template_gen / video / brand_asset.
- retry endpoint accepts JSON body, not query string.

Info: §10.3 title corrected to 9 blocks; §12 opening synced to 24-28
weeks; §6.8.3 adds "attention-needed accounts" card + per-platform
summary; monitoring LLM UI switched to Grid/Tag responsive layout.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 21:48:02 +08:00
root c41222706b docs(desktop-client): spec v2.1 adds admin-web coordination + 2 LLMs
User feedback integrated:

- LLM monitoring scope: 3 → 5 providers (add Hunyuan + Kimi).
  Keep-alive table in §4.4 gets 2 rows (default 8 min heartbeat,
  re-evaluate on integration). Block B effort 2-3w → 4-5w; total
  22-26w → 24-28w; Plan B scope updated.
- New §6.8 "admin-web coordination" covering:
  - Publish modal with *account-level* selection (not platform-level):
    one workspace has many accounts per platform (e.g., 5 WeChat);
    one job expands to N desktop_tasks each bound to (platform, account).
  - Media data dashboards at account-level granularity (overview,
    publish history, monitoring results).
  - New /api/tenant/* aggregation + SSE event bus (separate channel
    from /api/desktop/events).
  - Offline degradation UX when client(s) are offline.
  - Account data consistency: client is SoT for account existence,
    server stores projection; startup resync on upsert/delete.
  - georankly:// deep links with installed-client detection fallback.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 21:22:38 +08:00
root 2e1a5900ea docs(desktop-client): revise spec v2 with triple-review fixes
Address 6 Critical + 10 Warning findings from Claude + Codex + Gemini
cross-review:

- C1 Replace Network.responseReceivedExtraInfo path with EventSource /
  Fetch.takeResponseBodyAsStream routing per transport type; add
  Electron-Chromium CDP compatibility matrix commitment.
- C2 Default patch channel to pure-data DSL (no JS exec); executable
  fallback gated on utilityProcess + isolated-vm sandbox with frozen
  globals. Full TUF-style signing chain (patch_seq, hash, expires_at,
  key_id rotation, revokes, runtime hash re-verify).
- C3 Add RabbitMQ task_available fanout + Redis presence registry;
  SSE only pushes signals, task ownership decided atomically by
  lease endpoint.
- C4 platform_accounts gains platform_uid + account_fingerprint +
  UNIQUE(platform, platform_uid) enforcing workspace-exclusive
  binding in DB, not by client discipline.
- C5 Task protocol adds attempt_id + lease_token with
  extend/pause/resume/cancel endpoints; manual mode enters
  waiting_user status with extended lease; 409 on stale lease_token.
- C6 Rewrite scope estimate with 7 detect-only publish adapters and
  DeepSeek monitor placeholder called out explicitly; reshape as
  9-bucket 22-26 week effort; introduce Plan A/B/C split.

Warnings addressed: BrowserView->WebContentsView everywhere;
allowDowngrade spelling fix; client_token decoupled from
client_version with rotate/revoke APIs; safeStorage Linux
basic_text guard + separate vault-export for machine migration;
keep-alive token bucket + 429 backoff + resume warm-up;
packages/ui-shared carve-out (no admin-web cloning); state machine
gets failed/aborted/unknown terminal states; sqlc regeneration
footprint made explicit; crash recovery split by task.kind;
autoUpdater unit tests + pre-release smoke; trace phased
(Alpha=logs+shots, Phase 2=Playwright-compat export).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 21:05:41 +08:00
root 63667ed2d1 feat(membership): enforce tenant subscription plans with blocked UI
Add configurable membership plans (free/plus/pro) synced to DB on boot, a
subscription guard middleware that blocks tenant endpoints on expired or
missing plans, and a MembershipBlockedView that surfaces the reason so
the admin can contact the tenant owner. Quota and brand-library reads now
honor the active plan's policy JSON and expired subscriptions.
2026-04-18 20:56:05 +08:00
root 9ec9314aea docs(desktop-client): add Electron 桌面客户端 replacement design spec
Captures the full plan for replacing apps/browser-extension with an
Electron tray client: single main process with multi-session isolation,
embedded web-view login with OS-encrypted local cookie vault, CDP-based
LLM monitoring (no official APIs, cost-driven), unified PublishAdapter
and MonitorAdapter interfaces with dual-track updates (per-adapter patch
channel + full release channel), Playwright-grade tracing, new
/api/desktop/* protocol with SSE + 60s pull, and 5-arch multi-OS
packaging strategy.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 20:28:42 +08:00
root 6e77f72c53 feat(kol): return to source page after generation and poll while busy
- Add a ?source=workspace|templates query param when opening the
  generate page so the back button and the post-submit redirect return
  to the originating page; invalidate articles + workspace caches on
  success so the new article shows up immediately.
- Poll recent articles every 10s in WorkspaceView and TemplatesView
  while any article is in queued/pending/generating/running, and stop
  the timer once nothing is active.
- Mark the new article as generating inside the generation Submit
  transaction so the client sees the right status as soon as the task
  is queued.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 17:17:17 +08:00
root fe4a4ffeaa feat(kol): enrich assist generate with URL references and template prompt
- Add kolAssistURLResolver that fetches reference articles via the Ark
  URL extractor when the user's description contains http(s) links, and
  merges up to kolAssistReferenceContentMaxRunes of extracted content
  into the generate description.
- Rewrite the generate user prompt into a strict template-authoring
  brief: output only the final prompt template in Chinese, parameterize
  variable info as {{placeholder}}, require at least 3 placeholders
  when references exist, and cover goal/topic/title/structure/style/
  interaction/constraints.
- Wire LLMConfig and logger through NewKolAssistService and the
  handler.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 17:17:07 +08:00
root 052bf38dc4 feat(observability): enrich request logs with auth and knowledge context
- Collect per-request auth diagnostics (header presence, scheme, token
  fingerprint, failure stage/reason, subject, expiry) in the auth
  middleware and expose them through RequestLogContextFromGin so the
  shared logger middleware can emit them.
- Add route, query, user-agent, and referer fields to the request log.
- Log knowledge resolve outcome per stage (no_search_points,
  no_candidate_text, no_active_candidates, rerank_failed_fallback,
  resolved) with candidate/selected snippet previews and precise facts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 17:16:57 +08:00
root 4bbce5f083 feat(kol): add SSE streaming for prompt assist
- Extract assist runtime (prompt building, response parsing, finalize)
  from the worker into kol_assist_runtime so the sync streaming path
  and the async task path share the same logic.
- Add POST /kol/manage/assist/stream as a Server-Sent Events endpoint
  emitting start/delta/completed/error events, and wire it to a
  streamAssist helper on kolManageApi that reports ApiClientError with
  the server's error envelope.
- Stream generated content live in KolPromptEditor and KolGenerateView,
  switching KolPromptEditArea to a boolean aiBusy flag and refining the
  generator page layout.
- Add KolAssistStreamEvent to shared types.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 16:17:11 +08:00
root 79c65c1da7 feat(kol): expand variable schema and polish KOL UI
- Add length/range limits to KOL variable definitions: max_length and
  default_value for input/textarea, min_value/max_value/default_number
  for number. Backend validates and normalizes; frontend renders limit
  inputs in KolVariableConfig and applies limits at runtime in
  KolDynamicForm.
- Sort workspace cards by most recent prompt/package update, falling
  back to granted_at. Adds updated_at to KolWorkspaceCard.
- Polish TemplatesView, WorkspaceView, and KOL package management UI;
  route create/update/publish/archive/delete toasts through i18n and
  expand package form copy and status labels.
- Remove stale KnowledgeView.vue.patch.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 15:01:40 +08:00
root 1dd316a34b feat(kol-web): add /kol/profile page with nav entry 2026-04-18 14:10:27 +08:00
root 4ac7339c2d feat(kol-web): add KolPersonaCard with inline editing 2026-04-18 14:09:20 +08:00
root 4026aa7dad feat(kol-web): add i18n keys for KOL profile page 2026-04-18 14:08:22 +08:00
root ccf7f8080b feat(kol-web): add updateProfile and uploadAvatar to kolManageApi 2026-04-18 14:07:01 +08:00
root d2922478ed feat(kol): expose PUT /kol/manage/profile and POST /kol/manage/profile/avatar 2026-04-18 14:06:20 +08:00
root 1393b25419 feat(kol): add avatar upload to KolProfileService 2026-04-18 14:05:09 +08:00
root 0e3515530f feat(kol): add KolProfileService.UpdateProfile 2026-04-18 14:03:49 +08:00
root 4bfa4242ef feat(kol): add KOL profile field validators 2026-04-18 14:03:07 +08:00
root 8c531054b3 docs: add KOL profile page implementation plan
9 TDD tasks, each with bite-sized steps and commit points:
validators → service → avatar upload → handlers/routes →
API client → i18n → persona card → view/route/nav → verify.
2026-04-18 14:01:54 +08:00
root 26dd75e548 docs: add KOL profile page design spec
- KOL 工作台新增「个人主页」独立页,明确与租户/SaaS 账号设置区分
- 定位为精调模版展示页 + KOL 人设自助编辑
- 页面内联编辑、头像复用 image_service、仅展示已发布模版
2026-04-18 13:55:20 +08:00
root b2605abd6a feat: Enhance Kol Generation Service with web search and knowledge group support
- Added `EnableWebSearch` and `KnowledgeGroupIDs` fields to `KolGenerationSubmitRequest`.
- Updated `Submit` method in `KolGenerationService` to handle new request fields.
- Integrated web search and knowledge group validation based on card configuration.
- Introduced caching mechanisms in `KolPackageService`, `KolPromptService`, and `KolSubscriptionAdminService` to improve performance.
- Implemented knowledge context resolution in `KolGenerationWorker` to enrich prompts with relevant knowledge snippets.
- Added utility functions for handling card configuration in both backend and frontend.
- Created tests for knowledge extraction and rendering to ensure accuracy and reliability.
2026-04-18 13:47:32 +08:00
root 3ef0807456 fix: Enhance Kol Variable Rendering and Management
- Updated the regex for placeholder matching to support more flexible key formats.
- Refactored variable storage to allow both ID and key lookups in rendering.
- Improved schema validation to check for duplicate keys and enforce non-empty keys.
- Added new utility functions for variable value lookup and display name generation.
- Enhanced tests to cover new key-based variable scenarios.
- Refactored KolPrompt repository to simplify prompt storage and management, including the removal of obsolete revision handling.
- Introduced new API endpoints for saving, activating, and archiving prompts.
- Added new utility functions for handling Kol placeholders and platform options in the admin web.
- Implemented database migrations to simplify prompt storage structure and ensure data integrity.
2026-04-18 00:47:57 +08:00
root 614ca4a2ea feat(kol): workspace KOL card area 2026-04-17 15:23:38 +08:00
root b6bd4f02fb feat(kol): workspace KOL cards + article source type 2026-04-17 15:19:11 +08:00
root 641383a585 feat(kol): dashboard view 2026-04-17 15:11:18 +08:00
root 6e95e00907 feat(kol): dashboard service + API 2026-04-17 15:05:09 +08:00
root 4b6d434556 feat(kol): dynamic-form generation view 2026-04-17 14:59:52 +08:00
root 97c18cdbef feat(kol): generation + schema HTTP endpoints 2026-04-17 14:52:16 +08:00
root 019410fffe feat(kol): generation service + worker branch 2026-04-17 14:52:08 +08:00
root 26bc8a3749 feat(kol): repo support for cross-tenant revision lookup 2026-04-17 14:51:54 +08:00
root d0747825e6 feat(kol): marketplace + package detail views 2026-04-17 14:30:47 +08:00
root 2a2489ce5c feat(kol): marketplace + admin subscription HTTP endpoints 2026-04-17 14:23:39 +08:00
root 99fc6c1af4 feat(kol): marketplace + subscription admin services + publish fan-out 2026-04-17 14:23:32 +08:00
root df334c1e26 feat(kol): marketplace and admin subscription repo queries 2026-04-17 14:23:25 +08:00
root 6eb663bd6e feat(kol): three-pane prompt editor + KolManageView UI 2026-04-17 14:08:34 +08:00
root d5f7cdfc5f feat(kol): AI assist HTTP endpoints 2026-04-17 13:52:08 +08:00
root d55f1276f3 feat(kol): AI assist service + worker 2026-04-17 13:52:01 +08:00
root 9cf9fac109 feat(kol): admin-web API client + router entries for KOL 2026-04-17 13:51:39 +08:00
root a6ded27c1d feat(kol): KOL workspace HTTP handlers + route registration 2026-04-17 09:19:37 +08:00
root 6029b0b169 feat(kol): KOL workspace services (profile/package/prompt/asset/renderer) 2026-04-17 09:19:30 +08:00
root 76f5c73773 feat(kol): sidebar nav groups for marketplace + KOL workspace 2026-04-17 09:02:39 +08:00