# Progress Log ## 2026-05-13 对话 Markdown 与隐藏提示泄漏修复 - 收到用户反馈:会话里出现 `[[YINIAN_BUSINESS_RESPONSE_GUIDANCE]]`,Markdown/表格渲染还不够结构化,执行思考不需要边框。 - 已停止 direct chat 和 cron 路由在真实消息里追加隐藏业务准则,改为依赖 `AGENTS.clawx.md` 中的基础业务行为准则。 - 已在用户消息显示、会话标题/去重清洗链路补上隐藏准则剥离,兼容已经污染的旧历史。 - 已增强 ChatMessage 的 Markdown 标题、列表、引用、表格渲染;表格增加滚动外壳和数据表样式。 - 已将 ExecutionGraphCard 从边框卡片改为无框时间线视觉。 - 已补充单测覆盖隐藏准则不显示、Markdown 表格增强渲染、chat/cron 不再发送隐藏准则。 - 表格专项 E2E 首次失败,原因是旧用例停在默认新会话路由,未加载种子历史;已固定到 `#/chat` 并重跑通过。 - 根据用户反馈,已删除新对话空态中的 icon 和“智念助手对话”小标题,只保留“今天从哪里开始?”。 - 新对话空态 cleanup 后重新运行 `pnpm run typecheck`,通过。 - Verification passed: - `pnpm vitest run tests/unit/chat-message.test.tsx tests/unit/chat-target-routing.test.ts tests/unit/cron-routes.test.ts tests/unit/business-guidance.test.ts` - `pnpm vitest run tests/unit/chat-page-execution-graph.test.tsx tests/unit/task-visualization.test.ts tests/unit/chat-store-history-retry.test.ts` - `pnpm vitest run tests/unit/chat-message.test.tsx tests/unit/chat-target-routing.test.ts tests/unit/cron-routes.test.ts tests/unit/chat-store-history-retry.test.ts` - `pnpm run typecheck` - `pnpm run build:vite` - `pnpm exec playwright test tests/e2e/yinian-delivery-smoke.spec.ts` - `pnpm exec playwright test --config=playwright.legacy.config.ts tests/e2e/yinian-visual-smoke.spec.ts` - `pnpm exec playwright test --config=playwright.legacy.config.ts tests/e2e/chat-table-header-light.spec.ts` - `git diff --check` ## 2026-05-13 设置偏好深色 UI - Started dark-mode Preferences investigation after user report. - Captured current Electron screenshot for `/settings/preferences` in dark mode. - Identified low-contrast preference buttons, missing Preferences panel hierarchy, translucent dark title bar band, and missing global dark surface fallback as the main issues. - Updated Preferences into a structured `yinian-panel` with divided rows and higher-contrast active/inactive choice controls. - Normalized dark backgrounds for `body`, `.yinian-app-surface`, `MainLayout`, `TitleBar`, `Tabs`, and shared YINIAN panels. - Verified: - `pnpm run typecheck` - `pnpm exec vitest run tests/unit/title-bar.test.tsx tests/unit/launch-at-startup.test.ts tests/unit/app-center.test.tsx tests/unit/nianxx-play-url.test.ts` - `pnpm run build:vite` - Electron screenshot at `test-results/settings-preferences-dark-electron-after.png` - `pnpm exec playwright test tests/e2e/yinian-delivery-smoke.spec.ts` - Attempted `pnpm exec playwright test --config=playwright.legacy.config.ts tests/e2e/settings-proxy.spec.ts`; it failed before reaching Settings because the legacy setup helper still expects `main-layout` immediately after setup instead of the current login-first flow. ## 2026-04-26 - Completed full test run after M1 foundation work. - Fixed E2E compatibility around YINIAN login-first routing. - Fixed E2E default language mismatch by using English in E2E mode. - Fixed E2E gateway status initialization without reintroducing auto-start. - Verified: - `pnpm run typecheck` - `pnpm run test` - `pnpm run test:e2e` - Created persistent planning files: - `task_plan.md` - `findings.md` - `progress.md` - Began Phase 1 M1 stabilization. - Added `docs/M1_HANDOFF.md` with module inventory, env switches, storage boundary, public API, and verification baseline. - Updated `docs/START_HERE.md` to point to the M1 handoff note and E2E command. - Fixed channel health timestamp edge case in `electron/api/routes/channels.ts`. - Verified Phase 1: - `pnpm exec vitest run tests/unit/channel-routes.test.ts` - `pnpm run typecheck` - `pnpm run test` - `pnpm run test:e2e` - Phase 1 marked complete. - Began and completed Phase 2 server contract v0. - Added `docs/SERVER_CONTRACT_V0.md`. - Added contract fixture `tests/fixtures/yinian-server-contract.ts`. - Updated `electron/yinian/http-control-plane.ts`: - `/auth/refresh` session restore. - access token remains memory-only. - refresh token persists for restore. - config entitlement/channel/ui policy normalization. - manifest sync returns local registry statuses. - Expanded `tests/unit/yinian-control-plane.test.ts` from 6 to 11 tests, including HTTP contract paths and failure handling. - Verified Phase 2: - `pnpm exec vitest run tests/unit/yinian-control-plane.test.ts` - `pnpm run typecheck` - `pnpm run test` - `pnpm run test:e2e` - Began and completed Phase 3 Today M2 pilot surface. - Rebuilt `src/pages/Today/index.tsx` into a B-end operations cockpit: - health summary - pending/exception queue - arrival/departure summary - skill status board - recent agent actions - skill sync error state - Added `tests/unit/today-page.test.tsx`. - Verified Phase 3: - `pnpm exec vitest run tests/unit/today-page.test.tsx` - `pnpm run typecheck` - `pnpm run test` - `pnpm run test:e2e` - Began and completed Phase 4 Skills Manager M2. - Rebuilt `src/pages/YinianSkills/index.tsx` into an operator-facing Skills Manager: - entitlement/local registry merged status - version and update visibility - sync failure and empty registry states - local source, bundle hash, install/sync timestamps - workspace-scoped registry reload - Added `tests/unit/yinian-skills-page.test.tsx`. - Verified Phase 4: - `pnpm exec vitest run tests/unit/yinian-skills-page.test.tsx` - `pnpm run typecheck` - `pnpm run test` - `pnpm run test:e2e` - Began and completed Phase 5 Design System Pass. - Added `src/components/yinian/ui.tsx` with shared YINIAN UI primitives: - page shell - page header - panel - empty state - notice - metric card - primary/accent classes - Updated Login, Today, Skills, sidebar service context, main layout, and sidebar active states to use a calmer navy/slate B-end business style. - Verified Phase 5: - `pnpm run typecheck` - `pnpm exec vitest run tests/unit/today-page.test.tsx tests/unit/yinian-skills-page.test.tsx tests/unit/yinian-store.test.ts tests/unit/yinian-skills-store.test.ts` - `pnpm run test` - `pnpm run build:vite` - `pnpm run test:e2e` - Began and completed Phase 6 Pilot Packaging And QA. - Added `docs/PILOT_QA.md` with: - pilot scope - mock/HTTP/E2E modes - guided demo script - QA checklist - verification commands - packaging notes - known issues and product gaps - Updated `docs/START_HERE.md` with pilot QA and `build:vite`. - Updated `docs/M1_HANDOFF.md` to reference the current pilot QA baseline and current test counts. ## Next - Await commit instruction, or start the next product phase: real server integration and first real business skill execution path. ## 2026-05-13 Task Center Iteration - Continued the approved task center implementation after context compaction. - Added `/tasks` route and redirected legacy `/cron` to `/tasks?tab=scheduled`. - Reworked the production sidebar into three business groups: - 快速使用:应用中心、知识库 - 任务:任务中心 - 对话:新对话、历史会话 - Added the task center page with 快捷任务、定时任务、执行记录 tabs. - Centralized quick-task prompt construction in `src/lib/quick-task-prompt.ts`. - Added persisted task center bindings/run records in `src/stores/task-center.ts`. - Split task center persistence into `yinian:scheduled-task-bindings` and `yinian:task-run-records`, with a migration fallback from the temporary combined key. - Moved visible quick-task management out of the settings capability-pack tabs and into task center. - Added Chinese and English task-center locale files and wired the `tasks` namespace. - Updated delivery smoke expectations from the legacy cron page to task center. - Verified focused tests: - `pnpm exec vitest run tests/unit/quick-task-prompt.test.ts tests/unit/task-center-store.test.ts tests/unit/chat-input.test.tsx` - Fixed current test expectations for the managed preinstalled skill list (`web-search` is now included) and current-session execution-graph state. - Verified final gate for this slice: - `pnpm run typecheck` - `pnpm test` - `pnpm run build:vite` - `pnpm exec playwright test tests/e2e/yinian-delivery-smoke.spec.ts` ## 2026-05-13 Task Center Separation Follow-up - Removed quick-capability surfaces from `src/pages/Tasks/index.tsx`; Task Center now has only scheduled tasks and run history. - Removed quick-capability template selection from the scheduled-task dialog. - Stopped creating scheduled-task quick-capability bindings; edit/delete still clears stale legacy bindings for the affected cron job. - Fixed `@` mention keyboard navigation by preserving selection across navigation keyup events and guarding browser-only `scrollIntoView`. - Replaced raw custom time entry with structured repeat controls that generate cron expressions for daily, weekly, monthly, and interval schedules, with advanced Cron as fallback. - Updated Chinese/English task-center copy and tests. - Verification: - `pnpm run typecheck` - `pnpm vitest run tests/unit/tasks-page.test.tsx tests/unit/task-center-store.test.ts` - `pnpm test` - `pnpm run build:vite` - `pnpm exec playwright test tests/e2e/yinian-delivery-smoke.spec.ts` - Notes: - First E2E attempt failed because `dist` was stale and still exposed `tasks-tab-quick`; rebuilding fixed it. - Existing MaxListeners and Vite chunk warnings remain unchanged. - Follow-up fix: - Allowed `@` capability mentions inside sentence text instead of only after whitespace or at the start. - Stored the mention replacement end position so clicking a suggestion preserves text after the cursor. - Verified with `pnpm run typecheck`, `pnpm vitest run tests/unit/tasks-page.test.tsx`, and `pnpm test`. - Task Center pinning follow-up: - Renamed the scheduled-task product surface to “任务中心” while leaving execution-time settings unchanged. - Added pinned task ids in `useTaskCenterStore` and task-card pin/unpin controls. - Added sidebar quick triggers for pinned tasks; clicking one immediately calls the existing cron trigger path and records a run. - Updated Today/task/sidebar related copy and tests. - Verified: - `pnpm run typecheck` - `pnpm vitest run tests/unit/tasks-page.test.tsx tests/unit/task-center-store.test.ts tests/unit/today-page.test.tsx` - `pnpm test` - `pnpm run build:vite` - `pnpm exec playwright test tests/e2e/yinian-delivery-smoke.spec.ts` - Task Center density and sidebar structure follow-up: - Converted Task Center management from two-column cards to a compact list/table layout. - Preserved enable/disable, delivery visibility, execution metadata, pin, run-now, edit, open-session, and delete actions. - Moved task metrics into compact header chips and kept execution-time settings untouched. - Reorganized the sidebar navigation into a scrollable structured area with bounded pinned quick triggers. - Verified with typecheck, focused task tests, full tests, Vite build, and delivery smoke E2E. - Immediate history visibility follow-up: - Added shared local session visibility patching for optimistic history rows. - New desktop sessions now receive local `updatedAt` immediately, while unused blank sessions remain cleanable. - First sent messages upsert local session row, label, and activity in the same state update. - Cron trigger and Gateway started/completed notifications now make automation sessions visible before `sessions.list` catches up. - Verified with typecheck, focused chat/gateway/cron/task tests, full tests, Vite build, and delivery smoke E2E. - Task execution conversation follow-up: - Kept each task on its stable `agent:main:cron:` conversation. - Task Center "立即执行" now switches to that task conversation and opens Chat immediately. - Sidebar pinned task triggers do the same, so customer follow-up lands in the right thread. - Added a focused regression test and verified with typecheck, focused tests, full tests, Vite build, and delivery smoke E2E. - Task conversation naming follow-up: - Task sessions now force label/displayName to the task name on run, open, sidebar trigger, and cron-trigger visibility updates. - Cron task sessions are protected from the normal "first user message becomes session name" behavior. - Gateway automation events try to backfill task names from local cron jobs when available. - Verified with typecheck, focused chat/task/gateway/cron tests, full tests, Vite build, and delivery smoke E2E. - Task history merge reliability follow-up: - Fixed task session loads to merge Gateway `chat.history` with cron run-log fallback instead of choosing one source. - Added near-duplicate filtering and timestamp sorting for merged cron history. - Failed cron run fallback messages now use assistant role with `isError` so they remain visible. - Added focused tests for partial Gateway history plus fallback merge and failed fallback visibility. - Verified with typecheck, focused history/cron/task/gateway tests, full tests, Vite build, and delivery smoke E2E. ## 2026-04-26 Brand/UI System - Generated and persisted the 智念助手 design system at `design-system/智念助手/MASTER.md`. - Began project-wide UI customization with the brand foundation: - replaced the app icon source SVGs in `resources/icons/` - generated desktop icon outputs with `pnpm run icons` - replaced renderer wordmark at `src/assets/logo.svg` - updated package metadata and electron-builder product metadata - updated window title, Linux desktop identity, tray labels, startup desktop entry, Login, Sidebar, and Windows title bar branding - Verified: - `pnpm run typecheck` - `pnpm run build:vite` - `pnpm exec vitest run tests/unit/launch-at-startup.test.ts tests/unit/today-page.test.tsx tests/unit/yinian-skills-page.test.tsx` - Completed UI Customization Phase 2 Core Surface Refinement: - expanded `src/components/yinian/ui.tsx` with header actions, kicker, status dot, info row, list item, and section panel primitives - refined Login with stronger product narrative and a cleaner form panel - refactored Today sections and operational rows onto shared primitives - refactored Skills Manager cards onto shared panels/info rows - refined sidebar service context into a clearer workspace context surface - Verified Phase 2: - `pnpm run typecheck` - `pnpm exec vitest run tests/unit/today-page.test.tsx tests/unit/yinian-skills-page.test.tsx tests/unit/yinian-store.test.ts tests/unit/yinian-skills-store.test.ts tests/unit/launch-at-startup.test.ts` - `pnpm run build:vite` - Completed UI Customization Phase 3 Inherited Surface Brand Boundary: - grouped Sidebar navigation into 快速使用, AI 工作, and 扩展 - kept route test ids stable - updated major Chinese Chat/Settings/Setup customer-facing strings from ClawX to 智念助手 - updated Setup welcome logo alt/asset naming - Verified Phase 3: - `pnpm run typecheck` - `pnpm exec vitest run tests/unit/today-page.test.tsx tests/unit/yinian-skills-page.test.tsx tests/unit/launch-at-startup.test.ts` - `pnpm run build:vite` - `pnpm exec playwright test tests/e2e/main-navigation.spec.ts tests/e2e/settings-proxy.spec.ts tests/e2e/app-smoke.spec.ts` - Completed UI Customization Phase 4 Inherited Page Visual Polish: - removed inherited oversized serif heading style from Chat, Settings, Models, Agents, Channels, and Cron surfaces - normalized headings toward compact system-font dashboard treatment - replaced remaining major Chinese customer-visible ClawX copy in Agents, Cron, Channels, Chat, Settings, and Setup - retained technical upstream GitHub references where still useful - Verified Phase 4: - `pnpm run typecheck` - `pnpm exec vitest run tests/unit/today-page.test.tsx tests/unit/yinian-skills-page.test.tsx tests/unit/launch-at-startup.test.ts` - `pnpm run build:vite` - `pnpm exec playwright test tests/e2e/main-navigation.spec.ts tests/e2e/settings-proxy.spec.ts tests/e2e/provider-lifecycle.spec.ts tests/e2e/app-smoke.spec.ts` - Completed UI Customization Phase 5 Screenshot Visual QA: - added `tests/e2e/yinian-visual-smoke.spec.ts` - captured Login, Today, and Skills desktop baselines in `test-results/yinian-visual/` - fixed fresh-user production routing so unauthenticated sessions land on 智念登录 instead of legacy setup - visually inspected the 1440x900 screenshots for obvious overlap, blank states, and brand consistency - Verified Phase 5: - `pnpm run typecheck` - `pnpm run build:vite` - `pnpm exec playwright test tests/e2e/yinian-visual-smoke.spec.ts` ## 2026-04-26 B-end Repositioning Pass - Repositioned customer-facing copy from a hotel-only product to a broader B-end AI Agent desktop product. - Sidebar primary usage group is now `快速使用`. - Login, Today, Skills, tray tooltip, installer metadata, zh setup/chat/settings copy, and pilot docs now use workspace/business-object language. - Mock control-plane demo data now uses `智念杭州运营空间` and `智念上海增长空间`. - Added compatibility aliases (`YinianWorkspace`, `switchWorkspace`) while keeping existing `hotelId`/`switchHotel` internals stable for storage and HTTP contract safety. - Verified: - `pnpm run typecheck` - `pnpm exec vitest run tests/unit/yinian-control-plane.test.ts tests/unit/yinian-store.test.ts tests/unit/yinian-skills-store.test.ts tests/unit/today-page.test.tsx tests/unit/yinian-skills-page.test.tsx tests/unit/launch-at-startup.test.ts` - `pnpm run build:vite` - `pnpm exec playwright test tests/e2e/yinian-visual-smoke.spec.ts` ## 2026-04-26 Shell Simplification Pass - Removed the old top workspace bar from `MainLayout`. - Moved current service context into the left sidebar as a non-switching account-bound service card. - Moved sync and logout actions into the sidebar footer. - Deleted the old `Yiniansidebar service context` component so future work does not reintroduce the top switcher accidentally. - Refreshed visual baselines for Login, Today, and Skills. - Verified: - `pnpm run typecheck` - `pnpm exec vitest run tests/unit/today-page.test.tsx tests/unit/yinian-skills-page.test.tsx tests/unit/yinian-store.test.ts` - `pnpm run build:vite` - `pnpm exec playwright test tests/e2e/yinian-visual-smoke.spec.ts` ## 2026-04-26 Sidebar IA Pass - Optimized the left sidebar around the two core customer areas: - `快速使用`: Today and Skills. - `对话`: New Chat and Chat. - Hid Models, Agents, Channels, Cron, and Dev Console from the production sidebar because these capabilities should be issued and governed by the service side. - Kept legacy configuration navigation available only in `e2e=1` compatibility mode so inherited tests can still cover the old surfaces. - Moved service sync, logout, and the "configuration is service-managed" explanation into Settings. - Added Settings to the visual smoke screenshot baseline at `test-results/yinian-visual/04-settings.png`. - Verified: - `pnpm run build:vite` - `pnpm exec playwright test tests/e2e/yinian-visual-smoke.spec.ts` ## 2026-04-26 Sidebar UX Pass - Moved the Dashboard/Today entry onto the top service card, so the current service object doubles as the dashboard launcher. - Rebuilt `快速使用` as three direct actions: - Skills - 定时任务 - 知识库 - Added `src/pages/Knowledge/index.tsx` and `/knowledge` for a v0 knowledge-base upload/search/list surface. - Reworked `对话` into: - `新对话` - `历史会话` - `历史会话` now opens a hover popover with the session list and clicks through to the latest session. - Updated visual smoke screenshots: - `test-results/yinian-visual/04-knowledge.png` - `test-results/yinian-visual/05-settings.png` - Verified: - `pnpm run typecheck` - `pnpm run build:vite` - `pnpm exec playwright test tests/e2e/yinian-visual-smoke.spec.ts tests/e2e/main-navigation.spec.ts` ## 2026-04-26 Enterprise Space Service Integration - Started service integration discovery for CloudClaw. - Attempted anonymous repository access: - `git ls-remote https://git.nianxx.cn/brother7/CloudClaw.git` - Result: repository requires authentication. - Recorded current desktop assumptions and backend questions in `findings.md`. - Connected to the user's logged-in Chrome session via CDP and read CloudClaw source pages. - Confirmed current CloudClaw backend is the OpenClaw cloud sync MVP and does not yet include enterprise app/skill distribution routes. - Added desktop-side configurable config/app manifest endpoint support and app-shaped manifest normalization. - Added missing manifest fallback so `/skills/manifest` 404 stores an empty local registry instead of surfacing an operator-facing crash. - Added the CloudClaw `openclaw-cloud-sync` plugin as a 智念内置 OpenClaw plugin mirror: - source mirror: `resources/openclaw-plugins/cloud-sync` - dev mirror: `build/openclaw-plugins/cloud-sync` - startup install target: `~/.openclaw/extensions/cloud-sync` - Added startup config sync for `plugins.entries.cloud-sync.config.serverUrl`. - Added static plugin copying to `scripts/bundle-openclaw-plugins.mjs` and `scripts/after-pack.cjs`. - Adapted the plugin metadata/commands for the current OpenClaw runtime: - `openclaw.extensions` is emitted as a string entry list. - command registrations use `name` / `description` / `handler`. - Verified: - `pnpm run typecheck` - `pnpm vitest run tests/unit/plugin-install.test.ts tests/unit/yinian-control-plane.test.ts` - `pnpm run bundle:openclaw-plugins` - `node node_modules/openclaw/openclaw.mjs plugins list | rg -n "cloud-sync|cloud_sync|Cloud Sync|failed|error" -C 2 || true` ## 2026-04-26 Engineering Assessment Snapshot - Ran a testing-stage engineering assessment after the CloudClaw direct plugin integration. - Current tracked diff is broad: 69 modified tracked files plus new YINIAN/product modules, docs, design system, Cloud Sync plugin mirror, and tests. - Verification results: - `pnpm run typecheck`: passed - `pnpm run build:vite`: passed, with large renderer chunk warning (~1.6MB minified / ~481KB gzip) - `pnpm run test`: failed; 88 test files passed, 2 failed; 584 tests passed, 5 failed - focused E2E (`yinian-visual-smoke`, `main-navigation`, `app-smoke`): 4 passed, 1 failed - Unit failures are mostly stale expectations after customer-facing terminology changed from Skills/registry to 应用/本机准备. - Visual E2E failure is a real test-flow gap: production login now requires captcha input, but the visual smoke test still clicks login without filling account/password/captcha. - Compatibility E2E for legacy setup/main navigation still passed. - Cloud Sync plugin is loaded by `openclaw plugins list`, but remains infrastructure-only until its server URL/account contract is finalized. ## 2026-04-26 Stabilization Pass - Fixed stale customer-facing terminology expectations in Today and Applications unit tests. - Fixed the 智念 visual smoke login flow so it fills account/password, and relaxed captcha submit gating when mock mode has no captcha image. - Added Cloud Sync startup config tests: - server URL derivation from explicit env, API base URL, and default. - plugin entry writing before Gateway launch. - disabled mode skips install/config writes. - Added knowledge-base import boundary tests: - missing files are rejected without registry writes. - newer imports are listed first. - invalid `.docx` files are rejected before entering the registry. - Verification: - `pnpm run typecheck`: passed - `pnpm run test`: passed, 90 files / 595 tests - `pnpm run build:vite`: passed, with existing chunk-size and dynamic/static import warnings - `pnpm run test:e2e`: passed, 27 passed / 1 skipped ## 2026-04-26 Product Simplification Pass - Removed unsupported account/service profile signals from customer-facing UI: - service city / region - account role / position - role labels in sidebar and Settings - Removed unsupported dashboard signals: - `运营健康度` - fake business pending metrics - recent application run traces derived from mock placeholders - notification-method count from the dashboard - Reworked Today into a lighter application readiness dashboard: - opened apps - locally ready apps - pending sync - sync failures - service/account summary - Reworked login side panel from numeric marketing claims into stable product areas: - account login - application delivery - knowledge base - Simplified `YinianHotel` in `shared/yinian.ts` to service identity only: `id`, `name`, optional `brand`. - Updated mock control-plane, contract fixtures, tests, and pilot QA docs from hotel/OTA samples to generic enterprise service/application samples. - Verification: - `pnpm run typecheck`: passed - focused YINIAN unit tests: passed, 5 files / 37 tests - `pnpm run test`: passed, 90 files / 595 tests - `pnpm run build:vite`: passed, with existing Vite warnings - `pnpm exec playwright test tests/e2e/yinian-visual-smoke.spec.ts`: passed ## 2026-04-26 Interaction And Knowledge Fixes - Stabilized the sidebar history popover with delayed close handling so it is less likely to close while moving across the New Chat / History area. - Added saved account/password support on the login page: - renderer loads saved credentials on login page mount. - main process stores them in the YINIAN namespace. - password is encrypted with Electron `safeStorage` when available, with a dev/test fallback. - Changed knowledge-base chat context from file-path references to actual local-backup content injection through `/api/knowledge/context`. - Added tests proving a knowledge file still works after the original source file is deleted. - Updated user-facing `服务空间` language to `组织空间`. - Removed the preset quick-question buttons from the empty chat screen. - Fixed the `gateway-ready-fallback` unit test so it no longer tries to start a real Gateway while fake timers are active. - Verification: - `pnpm run typecheck`: passed - focused unit tests: passed, 5 files / 42 tests - `pnpm run test`: passed, 90 files / 598 tests - `pnpm run build:vite`: passed, with existing Vite warnings - `pnpm exec playwright test tests/e2e/yinian-visual-smoke.spec.ts`: passed ## 2026-04-26 Chat Layout Responsiveness Fix - Fixed chat page sizing after sidebar collapse: - main content now allows flex children to shrink/grow with `min-w-0`. - chat page no longer relies on negative margins and viewport-height calculation. - chat messages and composer now use a wider responsive max width. - knowledge context popover is capped for narrow windows. - Electron layout verification at 1120x760: - expanded sidebar: main 864px, composer 816px. - collapsed sidebar: main 1056px, composer 1008px. - Verification: - `pnpm run typecheck`: passed - focused chat unit tests: passed, 2 files / 4 tests - `pnpm run build:vite`: passed, with existing Vite warnings ## 2026-04-26 Settings Tabs Cleanup - Reworked Settings into tabbed sections: - 账号与组织 - 使用偏好 - 运行维护 - 高级工具 - 关于 - Kept server-managed capability messaging under account/organization settings. - Moved advanced diagnostics behind the 高级工具 tab while keeping the unlock switch in 运行维护. - Removed unrelated external jump buttons from About, including website, GitHub, and FAQ links. - Verification: - `pnpm run typecheck`: passed - `pnpm run build:vite`: passed, with existing Vite warnings - `pnpm exec playwright test tests/e2e/yinian-visual-smoke.spec.ts`: passed ## 2026-04-27 Settings Information Architecture Update - Reduced Settings top-level tabs to: - 账号与组织 - 使用偏好 - 运行维护 - 更新与关于 - Compact account/organization layout: - tightened the organization card spacing. - moved account name into a compact inline badge. - changed service capabilities to show only 渠道管理. - hid AI service, assistant capability, and automatic-task strategy cards. - Limited language options to 中文 and English in 使用偏好. - Folded advanced tools into 运行维护. - Merged About details into 更新与关于. - Verification: - `pnpm run typecheck`: passed - `pnpm run build:vite`: passed, with existing Vite warnings - `pnpm exec playwright test tests/e2e/yinian-visual-smoke.spec.ts`: passed ## 2026-04-27 Settings Channel Management Expansion - Expanded 渠道管理 in Settings from a single service-capability row into a full management summary: - loads `/api/channels/accounts`. - displays configured channel count, channel-account count, and connected-account count. - lists each configured channel, group status, default account, per-account status, binding target, and last error. - adds refresh and 完整管理 actions; 完整管理 navigates to `/channels`. - Kept the compact account/organization layout while making channel status visible without leaving Settings. - Verification: - `pnpm run typecheck`: passed - `pnpm exec vitest run tests/unit/channel-routes.test.ts`: passed, 23 tests - `pnpm run build:vite`: passed, with existing Vite warnings - `pnpm exec playwright test tests/e2e/yinian-visual-smoke.spec.ts`: passed ## 2026-04-27 Settings Channel Module Integration - Promoted 渠道管理 to its own Settings tab instead of showing it as a secondary service capability. - Embedded the existing full Channels management surface in Settings: - configured channels - supported channels - add/edit/delete account flows - agent binding controls - gateway health diagnostics - Removed the 服务能力 module from 账号与组织. - Merged account and update settings into 账号与更新. - Reduced About to a bottom footnote inside 账号与更新 without a large section title. - Verification: - `pnpm run typecheck`: passed - `pnpm exec vitest run tests/unit/channel-routes.test.ts`: passed, 23 tests - `pnpm run build:vite`: passed, with existing Vite warnings - `pnpm exec playwright test tests/e2e/yinian-visual-smoke.spec.ts`: passed ## 2026-05-05 Project Progress Update For Version 3.5 - Updated planning status for the next phase: 3.5 will focus on integrating one large application inside 应用中心. - Current product baseline before 3.5: - 登录 and server auth flow are connected. - 组织空间/service context is simplified to one account mapping to one B-end service. - 侧边栏 is focused around Dashboard, 快速使用, 对话, and 设置. - 应用中心 exists as a compact launcher with tag filtering and built-in app entries. - 能力包 is separated from 应用中心 and owns service-issued/local skills plus 快捷任务配置. - 快捷任务 now injects `使用{能力包名称} skill` into the actual user message, is single-select, and is single-use per send. - Knowledge Base v0 locally backs up imported files and can inject selected file text into chat context. - Dev server port is now `5188`, avoiding collisions with other projects using `5173`. - Added a new `Version 3.5: Application Center Large-App Integration` section to `task_plan.md`. - Added application-center readiness notes to `findings.md`. - No code was changed for the large application in this update; this was a planning/progress synchronization step. ## 2026-05-05 NianxxPlay Large-App Review - Located the candidate large app at `/Users/inmanx/Documents/NianxxPlay`. - Current NianxxPlay scope: - `NianxxPlay智念视频助手` - Seedance 2.0 video generation workspace - creation modes: 宣传片制作 and 创意复刻 - template-first studio, asset upload, prompt assembly, project history, billing/credits, Seedance task APIs - Engineering shape: - Next.js 15 App Router project. - Not a git repository locally. - Uses local MVP persistence through `.data/app-state.json`. - Uses Aliyun OSS and Seedance/Ark API environment configuration for real generation. - Verification: - `npm test`: passed, 3 files / 11 tests. - `npm run build`: passed. - Known build warning remains in the `ali-oss` dependency chain and does not currently block build. - 3.5 integration direction: - Treat NianxxPlay as the first large application for 应用中心. - Prefer embedded-web hosting in 智念助手 first, because NianxxPlay owns full routes, API routes, storage, upload, and generation workflow. - Next implementation should build the 智念 large-app host route and then connect a local NianxxPlay URL for internal testing. ## 2026-05-05 Bundled Runtime Assessment For NianxxPlay - Evaluated the clarified target: NianxxPlay should be installed, updated, launched, and maintained together with the 智念助手 desktop app. - Recommended engineering direction: - Build NianxxPlay as a Next.js standalone runtime. - Bundle it into 智念助手 `extraResources`. - Install/copy it into a desktop-managed user runtime directory. - Launch it from Electron main process on a local loopback port. - Render it inside 应用中心 through an embedded app host route. - Existing desktop precedent: - bundled OpenClaw already follows the same build -> extraResources -> managed runtime -> process lifecycle model. - NianxxPlay should reuse this lifecycle style rather than asking customers to install development dependencies. - Key risks logged: - NianxxPlay project root is about 1GB in development form. - starter media assets alone are about hundreds of MB. - `.env.local` contains real credentials and must never be shipped. - local data/upload paths currently rely on `process.cwd()` and must move to user-writable app-managed directories. - the current `localhost:3000` assumption must become dynamic-port aware. - Updated `task_plan.md` with a new `Version 3.5: Bundled NianxxPlay Runtime` section. - Updated `findings.md` with size, runtime, security, and packaging findings. ## 2026-05-05 App Center Focus Pass - Removed the small demo applications from 应用中心: - calculator - quick note - file converter - web assistant - help center - Deleted calculator-specific route/code/test files: - `src/pages/Calculator/index.tsx` - `src/lib/calculator.ts` - `tests/unit/calculator.test.ts` - Added the single NianxxPlay application entry: - id: `nianxx-play` - route: `/app-center/nianxx-play` - icon: `Clapperboard` - category: 视频创作 - Added `src/pages/NianxxPlay/index.tsx` as the first large-app host shell: - back, reload, and browser-open controls - embedded local app frame - service-managed account/permission/secret/billing boundary copy - dev URL defaults to `http://127.0.0.1:3000` and can be overridden with `VITE_NIANXX_PLAY_URL` - Updated app-center Chinese/English copy around the single-app focus and server-managed boundaries. - Verification: - `pnpm run typecheck`: passed - `pnpm run build:vite`: passed, with existing Vite warnings - focused vitest command: passed, 1 file / 3 tests ## 2026-05-06 NianxxPlay Bundled Runtime Implementation - Implemented the first packaging pass for 应用中心 large-app distribution. - NianxxPlay changes: - enabled Next.js standalone output in `next.config.ts`. - added `/api/desktop/health` for desktop runtime identity checks. - moved local state, uploads, and generated-result fallback paths behind env-driven runtime directories. - added local file routes for `/uploads/*` and `/generated-results/*` so packaged runtime can serve user-writable files outside app resources. - Desktop changes: - added `scripts/prepare-nianxx-play-bundle.mjs`. - added `pnpm run prepare:nianxx-play`. - wired NianxxPlay bundling into `package` and `build`. - prepared `build/apps/nianxx-play` as a Next.js standalone bundle for electron-builder. - excluded `.env*`, `.data`, local uploads, and local generated results from the shipped bundle. - updated Electron NianxxPlay service manager to detect source vs standalone runtime. - packaged standalone runtime now launches via Electron's own Node runtime with `ELECTRON_RUN_AS_NODE`, avoiding customer Node/npm dependency. - runtime data is injected under the desktop app userData directory. - existing local NianxxPlay `.data`, uploads, and generated results are migrated once into the desktop-managed runtime directory when empty. - startup health check now validates the NianxxPlay marker endpoint, so a random service on port 3000 is not mistaken for the app. - Vite dev watch now ignores built-in app bundles to avoid reload spam while preparing large app resources. - Verification: - NianxxPlay `npm test`: passed, 3 files / 11 tests. - NianxxPlay `npm run build`: passed, with the existing ali-oss dynamic dependency warning. - `pnpm run prepare:nianxx-play`: passed. - standalone smoke test with Electron Node mode on port 3317: passed for health endpoint and homepage. - confirmed no `.env*`, `.data`, `public/uploads`, or `public/generated-results` entries remain in the prepared bundle. - removed local absolute source paths from the shipped bundle manifest. - added a secret-value guard to the NianxxPlay bundle script: it scans sensitive-looking values from source env files and fails packaging if any are compiled into the shipped text bundle. - added an internal-testing packaging path: - `pnpm run prepare:nianxx-play:pilot` - `pnpm run package:pilot` - `pnpm run package:mac:pilot` - pilot packaging writes `.env.runtime` into the bundled NianxxPlay runtime and Electron injects those values when launching the companion app. - desktop `pnpm run typecheck`: passed. - desktop `pnpm run build:vite`: passed, with existing Vite chunk warnings. - desktop dev server restarted on `http://localhost:5188/`. ## 2026-05-06 Pilot Package Issue Triage - Reviewed customer screenshots and `/Users/inmanx/Desktop/clawx-2026-05-06.log`. - Found three packaging/runtime blockers: - macOS reported `clipboard.darwin-arm64.node` as unverifiable because the shipped app is Developer ID signed but not notarized/stapled. - NianxxPlay failed immediately with `Cannot find module 'next'` because electron-builder skipped `build/apps/nianxx-play/node_modules` when copying extraResources. - Packaged mac build lacked bundled `uv`, causing managed Python setup to fail with `spawn uv ENOENT`. - Applied fixes: - `prep:mac-binaries` now downloads both uv and Node/npm. - afterPack now manually copies NianxxPlay `node_modules` into the packaged resources. - afterPack removes optional `@mariozechner/clipboard*` native packages from OpenClaw packaging so clipboard fallback uses `pbcopy` instead of loading a native `.node`. - CLI symlink refresh now removes broken symlinks with `rmSync(..., { force: true })` before recreating. - Follow-up validation: - `pnpm run typecheck`: passed. - `pnpm run build:vite`: passed, with existing Vite chunk warnings. - `pnpm run prep:mac-binaries:arm64`: passed; bundled arm64 `node` and `uv` are present. - NianxxPlay pilot runtime env contains the required Seedance/OSS keys without printing secret values. - Manual afterPack mutation of the already-built release app was used only for diagnosis; it invalidates the local app seal and must not be shipped without a fresh electron-builder packaging/signing pass. ## 2026-05-06 Mac arm64 Pilot Package Rebuild - Rebuilt the internal-testing mac arm64 package with: - bundled arm64 `node` - bundled arm64 `uv` - NianxxPlay standalone runtime env - afterPack NianxxPlay `node_modules` copy - optional native clipboard package removal - Generated arm64 artifacts: - `release/智念助手-0.1.0-mac-arm64.dmg` - `release/智念助手-0.1.0-mac-arm64.zip` - Copied the customer-facing dmg to the desktop: - `/Users/inmanx/Desktop/智念助手-0.1.0-mac-arm64-内测修复版.dmg` - Verification: - packaged app contains NianxxPlay `node_modules/next`. - packaged app contains `Contents/Resources/bin/node` and `Contents/Resources/bin/uv`. - optional `@mariozechner/clipboard*` native package is absent. - `codesign --verify --deep --strict` passes for the arm64 app. - `hdiutil verify` passes for the arm64 dmg. - packaged NianxxPlay server starts from the app bundle and `/api/desktop/health` returns ok with Seedance and OSS services configured when `.env.runtime` is loaded. - Remaining distribution caveat: - electron-builder skipped notarization because notarize options could not be generated in the current shell; `spctl` still reports `Unnotarized Developer ID`. - The script still starts redundant x64 packaging from the shared mac target config; this run was interrupted after complete arm64 artifacts were produced. ## 2026-05-06 Long Task + Model Diagnostics Fix - Fixed the chat running-state regression where Gateway `phase=end` notifications were treated as terminal completion. - `phase=end` now refreshes history only and keeps `sending` / `activeRunId` intact. - terminal phases remain `completed`, `done`, and `finished`. - Added Yinian model runtime diagnostics and repair helpers: - enforces the internal model timeout at 300s. - disables OpenClaw startup pricing catalog fetches with `models.pricing.enabled=false`. - normalizes MiniMax auth profile aliases so stale `minimax-cn:default` credentials also satisfy the `minimax/...` model reference. - Added a Host API endpoint: - `GET /api/diagnostics/model-config` - `GET /api/diagnostics/model-config?repair=1` - Added an admin-only Settings > 运行维护 card for AI service configuration checks. It shows default model, provider state, credential presence, runtime flags, and config paths without exposing secrets. - Loosened mac/Linux Gateway heartbeat recovery thresholds to match the more forgiving Windows thresholds: 60s interval, 25s timeout, 5 misses. - Verification: - `pnpm run typecheck`: passed. - `pnpm run build:vite`: passed with existing Vite chunk warnings. - targeted tests passed: - `tests/unit/gateway-events.test.ts` - `tests/unit/model-diagnostics.test.ts` - `tests/unit/diagnostics-routes.test.ts` - `tests/unit/gateway-manager-heartbeat.test.ts` - Full `pnpm test` still has unrelated existing failures in stale page/test expectations (`yinian-skills-page`, `today-page`, `chat-session-actions`, `task-visualization`, `language-detection`). ## 2026-05-06 Optional Native Clipboard Gatekeeper Fix - Investigated repeated customer macOS security prompt for `clipboard.darwin-arm64.node`. - Found the current `release/mac-arm64` app no longer contained the clipboard native package, but `build/openclaw` and user-managed OpenClaw directories could still retain `@mariozechner/clipboard*` packages. - Applied a three-layer fix: - `scripts/bundle-openclaw.mjs` now skips `@mariozechner/clipboard*` during dependency collection and defensively removes any residual package before writing the runtime marker. - `electron/utils/paths.ts` now bumps the managed runtime patch marker to `2026-05-06-npm-runner-clipboard-v2`, forcing stale managed runtimes to reinstall from the cleaned bundled runtime. - `electron/gateway/config-sync.ts` now cleans optional clipboard packages from user OpenClaw runtime/cache/extension dependency directories before Gateway startup. - Added `electron/utils/optional-native-cleanup.ts` and `tests/unit/optional-native-cleanup.test.ts`. - Verification: - `pnpm run typecheck`: passed. - `pnpm vitest run tests/unit/optional-native-cleanup.test.ts`: passed. - `pnpm run build:vite`: passed with existing Vite chunk warnings. - `pnpm exec zx scripts/bundle-openclaw.mjs`: passed. - `find build/openclaw -name 'clipboard.darwin-arm64.node' -o -path '*@mariozechner/clipboard*'`: no output. - `find release -name 'clipboard.darwin-arm64.node' -o -path '*@mariozechner/clipboard*'`: no output. ## 2026-05-06 Complete Project Self Check Follow-up - Fixed stale unit-test expectations for the current product state: - language detection now expects unsupported `ja_JP` to fall back to English because the visible product language set is Chinese/English. - new chat session tests now expect desktop-first `agent:main:*` session keys. - task visualization tests no longer expose internal thinking-only chunks as execution steps. - Today page tests now cover `开始工作`, `常用应用`, `智念视频助手`, `定时任务`, `知识库`, and recent conversations. - Ability-pack page tests now select top-level tabs precisely so quick-task skill-source labels do not collide with `服务下发` / `本地安装`. - Verification: - targeted failed files: passed, 5 files / 29 tests. - `pnpm test`: passed, 93 files / 620 tests. - `pnpm run typecheck`: passed. - `pnpm run package:pilot`: passed. - Removed `tavily-search` from `resources/skills/preinstalled-manifest.json` and regenerated `build/preinstalled-skills`. - Resource checks: - `tavily` absent from preinstalled manifest and generated preinstalled bundle. - optional native clipboard package absent from `build/openclaw` and `release`. - NianxxPlay bundle contains the standalone server, Next runtime, and internal `.env.runtime`. - NianxxPlay bundle scan only reports `.env.runtime`; no uploads, generated results, or Next cache directories. - Remaining warnings: - Vitest still emits `MaxListenersExceededWarning`. - Vite still warns about large chunks and mixed static/dynamic imports. - OpenClaw bundling still skips several patch snippets that are not present in the current upstream package. - NianxxPlay bundle remains heavy at about 419 MB. ## 2026-05-09 Office Skills Runtime Hardening - Started consolidation after replacing old office skills with MiniMax versions. - Added an explicit task plan and findings entry so this does not remain a one-off local copy change. - Added `electron/utils/office-skill-runtime.ts` to check and repair the common office runtime layer: - managed Python 3.12 plus `pypdf`, `reportlab`, `pandas`, `openpyxl`, `matplotlib`, `beautifulsoup4`. - project/bundled Node modules for PPT generation. - `.NET` presence as a visible warning for advanced docx flows. - Wired office runtime preparation into first-run initialization and Gateway warmup. - Added admin diagnostics endpoint and Settings > 运行维护 UI for office runtime checks/repair. - Hardened the MiniMax skill bundler so `docx`, `pdf`, `pptx`, and `xlsx` use stable local slugs and avoid global install guidance. - Fixed the model runtime repair path so it no longer writes OpenClaw-invalid `models.pricing` or provider `timeoutSeconds` fields. - Cleaned the local `~/.openclaw/openclaw.json` and kept `agents.defaults.heartbeat.every = "0m"` to disable heartbeat prompts. - Verification: - `pnpm run bundle:preinstalled-skills`: passed. - managed Python imports for office packages: passed. - `openclaw config validate`: passed. - `openclaw skills list --json`: `docx`, `pdf`, `pptx`, `xlsx`, and `design` enabled. - `pnpm run typecheck`: passed. - `pnpm vitest run tests/unit/model-diagnostics.test.ts tests/unit/diagnostics-routes.test.ts`: passed. - `pnpm test`: passed, 93 files / 622 tests. - `pnpm run build:vite`: passed with existing Vite warnings. ## 2026-05-09 Local .NET SDK Install - Installed .NET SDK 10.0.203 into the user-local runtime path `~/.dotnet` using Microsoft's install script because Homebrew cask installation requires interactive `sudo`. - Added `DOTNET_ROOT="$HOME/.dotnet"` and `~/.dotnet` to `~/.zprofile` so new zsh sessions can resolve `dotnet`. - Added desktop runtime path support so Electron/OpenClaw child processes also see user-local `.NET`: - `electron/utils/dotnet-runtime.ts` - office runtime diagnostics use the resolved `.NET` executable. - Gateway launch and doctor-repair environments include the `.NET` path. - Verification: - `zsh -lc 'dotnet --version'`: `10.0.203`. - `pnpm run typecheck`: passed. - `pnpm run build:vite`: passed with existing Vite warnings. ## 2026-05-09 Office Skill Prompt Cleanup - Removed remaining desktop office-suite conversion/recalculation branches from generated office skills so the agent does not drift into asking for external office tools. - `xlsx` now exposes static formula validation only through `formula_check.py`; the dynamic recalculation script is removed from the preinstalled bundle. - `docx` legacy `.doc` conversion helper is removed from the preinstalled bundle; `.docx` creation/editing stays on the .NET OpenXML path. - Regenerated `build/preinstalled-skills` and synced `docx`, `pdf`, `pptx`, and `xlsx` into `~/.openclaw/skills`. - Added `.clawx-preinstalled.json` markers back to the local synced skills so future app startup treats them as app-managed preinstalled skills. - Verification: - `node --check scripts/bundle-preinstalled-skills.mjs`: passed. - `pnpm run bundle:preinstalled-skills`: passed. - scan of generated and local office skills found no `LibreOffice`, `libreoffice`, `soffice`, `Libra`, `libra`, `libreoffice_recalc`, or `doc_to_docx`. - `openclaw skills list --json`: `docx`, `pdf`, `pptx`, `xlsx`, and `design` enabled. - `pnpm run typecheck`: passed. ## 2026-05-09 Assistant Output Sanitizer - Added a renderer-side assistant output sanitizer for external office-suite guidance that may appear in old history or model-invented final replies. - Wired the sanitizer into both history hydration and live streaming/final message handling. - It removes user-visible `LibreOffice` / `soffice` / `Libra` / technical conversion-engine advice while preserving generated file paths, attachments, and tool blocks. - Verification: - `pnpm vitest run tests/unit/assistant-output-sanitizer.test.ts`: passed. - `pnpm run typecheck`: passed. - `pnpm run build:vite`: passed with existing Vite warnings. ## 2026-05-12 Customer Clean Install Stabilization - Read the customer logs from both WeChat paths. - Confirmed the install skipped setup because app state said `setupComplete=true`, even though runtime files were incomplete. - Confirmed two hard runtime blockers: - OpenClaw templates were removed from the customer package. - Managed runtime lacks a self-reference for bare `openclaw/...` package imports. - Started a focused stabilization plan in `task_plan.md`. - Fixed OpenClaw packaging cleanup so `docs/reference/templates` survives while the rest of docs can still be pruned. - Bumped the Yinian managed runtime patch marker to `2026-05-12-runtime-templates-selfref-v1`. - Added managed runtime self-reference creation at install time so ESM imports like `openclaw/plugin-sdk/...` resolve under `~/.openclaw/runtime/openclaw`. - Hardened setup status: - validates runtime files, workspace, config, and initialization marker. - resets stale `setupComplete=true` if those files are missing. - renderer settings now reconciles `setupComplete` with `yinian:setup:status`. - Gateway start is gated by verified setup plus authenticated Yinian session. - Fixed NianxxPlay bundle filtering so compiled `generated-results` route code ships while `public/generated-results` user output remains excluded. - Verification: - `pnpm run typecheck`: passed. - script syntax checks for after-pack / Nianxx bundle / OpenClaw bundle: passed. - `pnpm exec zx scripts/bundle-openclaw.mjs`: passed, runtime templates verified. - managed-runtime simulation with self-reference: `dist/extensions/codex/prompt-overlay.js` imports successfully. - `pnpm run build:vite`: passed with existing Vite warnings. - targeted tests passed: `model-diagnostics`, `diagnostics-routes`, `optional-native-cleanup`. - `pnpm test`: passed, 94 files / 628 tests, with the existing MaxListeners warning. - `pnpm run package:pilot`: passed. - resource checks passed: OpenClaw templates present, NianxxPlay compiled generated-results route present, `public/generated-results` absent. ## 2026-05-12 Clean Install Follow-up And Arm64 Pilot Package - Added internal-pilot model auth packaging and initialization seeding: - `scripts/prepare-internal-model-auth.mjs` - `resources/yinian-internal/model-auth-profiles.json` in pilot builds - setup status now treats missing model auth as not initialized. - Added OpenClaw package roots to office skill runtime dependency resolution. - Re-ran verification: - `pnpm run typecheck`: passed. - `pnpm vitest run tests/unit/model-diagnostics.test.ts tests/unit/diagnostics-routes.test.ts tests/unit/optional-native-cleanup.test.ts tests/unit/yinian-store.test.ts tests/unit/openclaw-auth.test.ts tests/unit/gateway-events.test.ts`: passed, 40 tests. - `pnpm test`: passed, 94 files / 628 tests; existing MaxListeners warnings remain. - `pnpm run package:pilot`: passed. - managed runtime simulation with `node_modules/openclaw -> ..`: passed. - Generated new Apple Silicon pilot installer: - `release/智念助手-0.1.0-mac-arm64.dmg` (about 1.5 GB) - copied to `/Users/inmanx/Desktop/智念助手-0.1.0-mac-arm64-20260512.dmg` - Release resource checks passed: - OpenClaw `AGENTS.md`, `TOOLS.md`, `HEARTBEAT.md` templates present. - NianxxPlay generated-results route present. - six preinstalled skills present. - optional clipboard native module absent. - no `*.app` directories in preinstalled skills. - macOS signing status: - Developer ID code signature verifies. - Notarization was skipped by electron-builder due missing notarize options, so Gatekeeper still reports `Unnotarized Developer ID`. ## 2026-05-12 NianxxPlay Demo Asset And Runner Fix - Fixed the NianxxPlay "生成示例" sample video path: - moved the Wujiang reference video/cover into formal built-in starter assets under `public/starter/promo/`. - updated `starter-content.ts` and `content/seedance-starter/catalog.json` to reference `/starter/promo/wujiang-reference.mp4` and `.jpg`. - kept `public/generated-results` excluded from desktop bundles, so user generated history remains out of customer packages. - Fixed the visible extra Dock process risk: - NianxxPlay standalone now prefers the bundled Node binary in `Resources/bin/node`. - it only falls back to `process.execPath + ELECTRON_RUN_AS_NODE` if bundled Node is missing. - Verification: - NianxxPlay `npm test`: passed, 3 files / 12 tests. - NianxxPlay `npm run build`: passed with existing `any-promise/register` warning. - desktop `pnpm run typecheck`: passed. - desktop `pnpm run build:vite`: passed with existing Vite warnings. - `NIANXX_PLAY_BUNDLE_ENV=1 node scripts/prepare-nianxx-play-bundle.mjs`: passed. - bundle/release resource scans confirm the starter mp4/jpg are included and `public/generated-results` / `public/uploads` remain excluded. - `pnpm run package:mac:pilot:arm64`: passed. - `codesign --verify --deep --strict`: passed; notarization still not configured. - Deliverable: - `/Users/inmanx/Desktop/智念助手-0.1.0-mac-arm64-20260512-video-node.dmg` ## 2026-05-12 Design And HTML Slides Skill Split - Upgraded the app-bundled `design` skill into a general design director/design-system capability. - Added a new app-bundled `html-slides` skill for browser-based presentation decks and PPTX-to-HTML conversion. - Copied `beautiful-html-templates` `index.json`, `templates/`, and `runtime/` into `html-slides` references; screenshots remain excluded. - Copied lightweight `frontend-slides` references: viewport base CSS, animation patterns, PPTX extraction script, and license. - Updated `resources/skills/preinstalled-manifest.json` with new versions and `html-slides` auto-enable. - Ran `pnpm run bundle:preinstalled-skills`; build output now includes `design` and `html-slides` with updated lock entries. - Synced local app-managed test skills into `~/.openclaw/skills/design` and `~/.openclaw/skills/html-slides`. - Verification: - design database smoke command passed. - `extract-pptx.py` py_compile passed for build and local copies. - OpenClaw lists `design` and `html-slides` as eligible and enabled. - resource scans found 32 bundled templates, no screenshots, no `.app` directories, and license files present. - a temporary 8-slide HTML deck passed 1280x720, 1440x900, and 390x844 no-overflow checks. ## 2026-05-13 Task And Skill Management Clarification - Started a new implementation pass for the user's request: - move ability-pack quick-task management back into the ability-pack area. - preserve the older scheduled-task creation design, including push channel selection. - add `@` skill insertion support in task editing. - Restored planning context from existing `task_plan.md`, `findings.md`, and `progress.md`; session catchup reported no additional unsynced output. - Confirmed local git history at `0abc481` had the ability-pack quick-task tab as the default skills page surface. - Confirmed the older Cron page still had the push-channel design: delivery mode, channel/account/target selection, and `delivery` payload fields. - Implemented the product clarification: - ability-pack page exposes quick-task management again and supports editing existing quick tasks. - user-facing copy now calls this concept “快捷能力” / “Quick Capability” instead of “快捷任务” to avoid collision with Task Center tasks. - Task Center quick tab is now a run-now surface and points users to ability packs for quick-capability management. - Task Center scheduled-task dialog preserves push delivery configuration. - manual and scheduled task editors support `@` skill insertion and insert the existing skill trigger phrase. - Verification: - `pnpm run typecheck`: passed. - `pnpm vitest run tests/unit/yinian-skills-page.test.tsx tests/unit/tasks-page.test.tsx`: passed, 9 tests. - `pnpm test`: passed, 97 files / 638 tests; existing MaxListeners warnings remain. - Browser visual verification was attempted through the in-app browser twice, but the browser connection timed out before a page snapshot could be captured. The running Vite/Electron dev server continued HMR updates without compile errors. ## 2026-05-13 Playwright Chromium Runtime Hardening - Started hardening after customer confirmed a stuck `npx playwright install chromium` process was killed by stuck recovery. - Added `electron/utils/playwright-runtime.ts` for app-scoped Playwright browser cache and install-lock paths. - Gateway launch env now sets `PLAYWRIGHT_BROWSERS_PATH`, `PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD`, and `YINIAN_PLAYWRIGHT_INSTALL_LOCK_PATH` for embedded tasks. - The app-scoped Playwright cache now best-effort symlinks already-complete Chromium installs from the default Playwright cache, so existing browsers remain usable without re-downloading. - Office runtime diagnostics now include a warning-level `playwright-chromium` check showing whether Playwright and the Chromium executable are available. - Updated `html-slides` runtime policy and preinstalled skill bundling sanitation to forbid task-time `npx playwright install chromium`. - Bumped preinstalled `pdf` and `html-slides` versions so app-managed skill sync can pick up the new guardrails. - Regenerated `build/preinstalled-skills`. - Verification: - `pnpm run typecheck`: passed. - `pnpm run bundle:preinstalled-skills`: passed. - `pnpm vitest run tests/unit/playwright-runtime.test.ts`: passed, 2 tests. - Real Playwright probe with `PLAYWRIGHT_BROWSERS_PATH=~/.openclaw/runtime/ms-playwright`: Chromium executable exists after symlink mirroring. ## 2026-05-13 Cron Run Final-State Reconciliation - Investigated the reported case where a task showed failure while the desktop artifact existed. - Confirmed the local "写笑话" cron run produced `/Users/inmanx/Desktop/joke.docx`, while the cron run summary still reported `status: error` from an intermediate edit-tool failure. - Confirmed the same run's trajectory artifact recorded `finalStatus: success` and the final assistant success text. - Updated Task Center cron job transformation to reconcile failed cron summaries against the corresponding run trajectory: - if the trajectory final status is successful, the last run is exposed as successful. - the stale intermediate tool error is preserved only as a warning/reconciliation note. - cron session fallback messages use the recovered final assistant summary instead of a false failed message. - Verification: - `pnpm run typecheck`: passed. - `pnpm vitest run tests/unit/chat-history-actions.test.ts tests/unit/cron-routes.test.ts tests/unit/tasks-page.test.tsx tests/unit/cron-store-fetch-dedupe.test.ts`: passed, 32 tests. - `pnpm test`: passed, 98 files / 652 tests; existing MaxListeners warnings remain. ## 2026-05-13 Cron Conversation Live Refresh - Fixed the case where a Task Center run did not show this run's query or response hint until manual refresh. - Backend cron fallback history now emits the task query as a visible user message instead of a hidden system message. - Backend running/empty fallback states now emit visible assistant messages. - Manual Task Center triggers now optimistically append the task query and a running assistant placeholder to the fixed task conversation, keep the conversation in active-running state, then refresh the conversation after the trigger completes. - Gateway agent events for isolated cron run sessions like `agent:main:cron::run:` are folded back into the fixed task conversation `agent:main:cron:`. - Cron completion events force a foreground history refresh for the fixed task conversation so the current run appears without manual refresh. - Verification: - `pnpm run typecheck`: passed. - `pnpm vitest run tests/unit/gateway-events.test.ts tests/unit/cron-store-fetch-dedupe.test.ts tests/unit/cron-routes.test.ts tests/unit/tasks-page.test.tsx`: passed, 25 tests. - `pnpm vitest run tests/unit/chat-history-actions.test.ts tests/unit/chat-session-actions.test.ts tests/unit/chat-runtime-event-handlers.test.ts tests/unit/gateway-events.test.ts tests/unit/cron-store-fetch-dedupe.test.ts tests/unit/cron-routes.test.ts tests/unit/tasks-page.test.tsx`: passed, 61 tests. - `pnpm test`: passed, 98 files / 655 tests; existing MaxListeners warnings remain. ## 2026-05-13 Sidebar Navigation Restructure - Reworked the left sidebar into clearer zones: - Home/Today remains the first entry. - Conversation now sits directly under Home/Today in its own container, with New Chat and History. - Task Center is followed by pinned quick task triggers. - Only five pinned quick tasks are shown in the sidebar. - App Center and Knowledge now live in the footer utility group above Settings. - Added `tests/unit/sidebar-layout.test.tsx` to lock the requested order and pinned-task cap. - Started a Vite dev server for review at `http://127.0.0.1:5199/` after the existing `5188` endpoint returned `502`. - Verification: - `pnpm run typecheck`: passed. - `pnpm vitest run tests/unit/sidebar-layout.test.tsx`: passed, 1 test. - `pnpm vitest run tests/unit/sidebar-layout.test.tsx tests/unit/tasks-page.test.tsx tests/unit/task-center-store.test.ts`: passed, 7 tests. - `pnpm run build:vite`: passed with existing Vite chunk/dynamic-import warnings. - `pnpm test`: passed, 99 files / 656 tests; existing MaxListeners warnings remain. - `pnpm exec playwright test tests/e2e/yinian-delivery-smoke.spec.ts`: passed, 1 test. ## 2026-05-13 App-Scoped Local Preference Recovery - Investigated why quick capabilities and account remarks appeared to fail. - Found the existing data was still present under the old renderer origin `http://localhost:5173`, while the app had been started on a new dev origin. The localStorage origin shift made the data invisible rather than deleting it. - Restarted the dev app on `http://localhost:5173` for immediate recovery. - Added an Electron app-level `local-preferences` store and `/api/local-preferences` Host API route. - Quick capabilities now: - hydrate from app-level preferences when the current origin has no local data. - push existing origin-local data into app-level preferences on startup. - save future add/edit/delete/toggle changes to the app-level copy. - YINIAN local preferences now sync desktop user name, workspace display name, and channel account remarks through the app-level preference store. - Confirmed migrated data includes: - quick capabilities: `写word文章`, `做网页`. - account remarks: `徐明微信`, `小石的微信`, `徐明飞书`, `宗琦A2A`. - Verification: - `pnpm run typecheck`: passed. - `pnpm vitest run tests/unit/quick-tasks-store.test.ts tests/unit/yinian-local-prefs.test.ts`: passed, 4 tests. - `pnpm vitest run tests/unit/yinian-skills-page.test.tsx tests/unit/tasks-page.test.tsx tests/unit/sidebar-layout.test.tsx tests/unit/quick-tasks-store.test.ts tests/unit/yinian-local-prefs.test.ts`: passed, 16 tests. - `pnpm run build:vite`: passed with existing Vite chunk/dynamic-import warnings. - `pnpm test`: passed, 101 files / 660 tests; existing MaxListeners warnings remain. - `pnpm exec playwright test tests/e2e/yinian-delivery-smoke.spec.ts`: passed, 1 test. ## 2026-05-13 商品中心 Web 应用接入 - Started implementation for adding “商品中心” to App Center. - Confirmed target URL `https://ticket.nianxx.cn/` is reachable and appears embeddable based on response headers. - Found current App Center only lists `nianxx-play`; `webview` item handling still opens the browser externally, so this task needs a real internal web host route. - Added built-in Product Center app metadata, `/app-center/product-center` route, internal iframe host page, reload/external actions, and zh/en copy. - Added Product Center launch URL builder with embed context, workspace/user context, and a future short-lived SSO ticket slot. - Added focused unit tests for App Center routing and Product Center launch URL behavior. - Browser plugin preview timed out twice while connecting to the in-app browser; switched to the existing Electron E2E smoke path and added Product Center assertions there. - First E2E run failed because `dist` had not been rebuilt, so the launched Electron app did not include the new Product Center card. - Second E2E run reached `product-center-page` but failed on locale-specific iframe title lookup; added `data-testid="product-center-frame"` and updated the assertion. - Verification passed: - `pnpm vitest run tests/unit/app-center.test.tsx tests/unit/product-center-url.test.ts` - `pnpm run typecheck` - `pnpm run build:vite` - `pnpm exec playwright test tests/e2e/yinian-delivery-smoke.spec.ts` ## 2026-05-13 桌面任务提醒与业务回答渲染 - 将 cron 任务的 Gateway 终态通知接入 Electron 系统通知:完成、需复核、失败分别显示“任务已完成 / 任务需复核 / 任务需要处理”。 - 通知点击会聚焦主窗口并导航到 `/tasks?task=`,任务中心会高亮目标任务。 - 新增 `electron/utils/cron-desktop-reminder.ts`,覆盖 cron session 解析、运行去重、通知文案和路由生成。 - 新增 `src/pages/Chat/business-answer.ts`,聊天消息会从“状态/依据/影响/下一步”等标签提取业务摘要,并在 assistant markdown 上方渲染摘要面板。 - 更新隐藏业务回答准则,要求业务回复优先输出稳定段落标签,便于 UI 结构化渲染。 - Verification passed: - `pnpm vitest run tests/unit/cron-desktop-reminder.test.ts tests/unit/chat-message.test.tsx tests/unit/tasks-page.test.tsx tests/unit/business-guidance.test.ts` - `pnpm run typecheck` - `pnpm run build:vite` - `pnpm exec playwright test tests/e2e/yinian-delivery-smoke.spec.ts` - Note: an initial E2E attempt timed out because it launched Electron while `build:vite` was rewriting `dist`; a clean rerun passed. ## 2026-05-13 聊天页字体与 UI 统一 - 用户反馈对话字体和整体 UI 与其它页面不一致。 - 使用 `ui-ux-pro-max` 取了一次设计建议,但最终以项目现有 `design-system/智念助手/MASTER.md` 为准:成熟 B 端工作台、系统中文字体、slate/navy、8px 圆角、少阴影。 - 更新全局字体:`body` 使用 `-apple-system / BlinkMacSystemFont / PingFang SC / Microsoft YaHei / Segoe UI / sans-serif`,输入控件继承字体。 - 聊天页外层改为智念标准面板;消息区域为浅 slate 背景;空态改成无框轻量状态,避免卡片套卡片。 - 消息气泡、业务摘要面板、工具状态条、执行过程卡、文件/图片卡、输入框、快捷任务 chip、知识库选择器都收敛到同一套边框/底色/字号。 - Visual QA: `test-results/yinian-visual/02-chat.png` 已重新生成并查看,聊天首屏字体和 UI 气质与工作台更一致。 - Verification passed: - `pnpm vitest run tests/unit/chat-message.test.tsx` - `pnpm run typecheck` - `pnpm run build:vite` - `pnpm exec playwright test tests/e2e/yinian-delivery-smoke.spec.ts` - `pnpm exec playwright test --config=playwright.legacy.config.ts tests/e2e/yinian-visual-smoke.spec.ts` ## 2026-05-13 旅游资源订购 Login-State Follow-Up - Renamed the Product Center surface to “旅游资源订购” in zh copy and “Travel Resource Ordering” in en copy. - Checked `ticket.nianxx.cn` scripts and confirmed the embedded site stores its session token/user in localStorage keys `ticketService.token` and `ticketService.user`. - Switched the embedded container from iframe to Electron `` with `partition="persist:yinian-travel-resource-ordering"` so the embedded web app keeps its own persistent localStorage/cookie state across route changes and app restarts. - Added unit and E2E assertions for the persistent webview partition. - Verification passed: - `pnpm vitest run tests/unit/app-center.test.tsx tests/unit/product-center-url.test.ts tests/unit/product-center-page.test.tsx` - `pnpm run typecheck` - `pnpm run build:vite` - `pnpm exec playwright test tests/e2e/yinian-delivery-smoke.spec.ts` ## 2026-05-13 快速视频创作 Rename And English Coverage - Renamed the former “智念视频助手” display surface to “快速视频创作” in Chinese copy. - Updated English copy to “Quick Video Creation”. - Added an English App Center unit test covering both built-in apps and checking that raw translation keys are not visible. - Verification passed: - `pnpm vitest run tests/unit/app-center.test.tsx tests/unit/product-center-page.test.tsx tests/unit/product-center-url.test.ts` - `pnpm run typecheck` - `pnpm run build:vite` - `pnpm exec playwright test tests/e2e/yinian-delivery-smoke.spec.ts` ## 2026-05-13 快速视频创作内置 Web 英文覆盖 - Investigated the remaining English coverage gap reported by the user. - Confirmed the desktop wrapper copy is covered by `appCenter` i18n, while the embedded NianxxPlay Next app still contains hard-coded Chinese UI/content. - Added a new planning section for passing desktop language into the embedded app and covering visible English text inside the embedded Web surface. - Desktop NianxxPlay host now adds `zhinianLang=zh|en` to embedded URLs. - NianxxPlay source now has an embedded English bridge that persists `zhinianLang`, translates visible text/attributes/default form examples, and keeps working after client-side page changes. - Added focused tests for the desktop URL language parameter and the NianxxPlay translation helper. - Extended the bridge with phrase-level coverage for the default live prompt so the English embedded studio first screen no longer exposes continuous Chinese copy. - Spot-checked the English embedded studio and planning pages with Playwright; the studio first screen and planning page had no continuous Chinese matches after translation. Projects may still show user/history titles, but the system-generated “宣传片创作台” prefix is covered. - Rebuilt the NianxxPlay standalone output and refreshed the desktop bundled runtime under `build/apps/nianxx-play`. - Stopped the stale bundled NianxxPlay child process that was still listening on `127.0.0.1:3000`; the desktop host will start the refreshed bundle the next time Quick Video Creation is opened. - Verification passed: - `pnpm vitest run tests/unit/nianxx-play-url.test.ts tests/unit/app-center.test.tsx` - `/Users/inmanx/Documents/NianxxPlay`: `npm test` - `/Users/inmanx/Documents/NianxxPlay`: `npm run build` - `NIANXX_PLAY_SKIP_BUILD=1 pnpm run prepare:nianxx-play` - `pnpm run typecheck` - `pnpm run build:vite` - Playwright page probe against `http://127.0.0.1:3010/studio?zhinianEmbed=1&zhinianLang=en` - `pnpm exec playwright test tests/e2e/yinian-delivery-smoke.spec.ts` ## 2026-05-13 WhatsApp 二维码生成检查 - 调查 WhatsApp 二维码链路:前端扫码 Modal、Host API `/api/channels/whatsapp/start`、主进程 `WhatsAppLoginManager`、QR PNG 渲染和 `channel:whatsapp-qr` 事件。 - 用临时 HOME 拉起登录管理器,避免触碰真实 `~/.openclaw` 凭据;当前网络下 Baileys 对 `wss://web.whatsapp.com/ws/chat` 连续 `WebSocket Error ()`,直接 `ws` 连接也超时。 - 新增 `electron/utils/whatsapp-proxy.ts`,让 WhatsApp WebSocket 使用应用代理设置,优先 `ALL_PROXY/SOCKS`,再用 HTTPS/基础代理,并支持 `web.whatsapp.com` 绕过规则。 - 更新 `electron/utils/whatsapp-login.ts`:为 Baileys 注入 HTTP/SOCKS proxy agent,连接失败时保留最后错误并提示检查网络或高级设置代理;QR 渲染异常也会发出 error 事件。 - 更新 `src/lib/host-api.ts` 和 `src/components/channels/ChannelConfigModal.tsx`:Host API unified 非 2xx 不再被吞掉,扫码启动失败时前端会恢复状态并显示错误。 - 补充 WhatsApp 网络/代理失败的 zh/en/ja/ru 本地化提示。 - 将 `socks-proxy-agent` 加入 OpenClaw runtime bundle 依赖列表。 - 新增/更新测试: - `tests/unit/whatsapp-proxy.test.ts` - `tests/unit/host-api.test.ts` - Verification passed: - `pnpm run typecheck` - `pnpm exec vitest run tests/unit/host-api.test.ts tests/unit/whatsapp-proxy.test.ts tests/unit/channel-routes.test.ts` - `pnpm run build:vite` ## 2026-05-13 OpenClaw 内核升级 - 用户要求更新 OpenClaw 内核。 - 当前项目依赖为 `openclaw@2026.4.29`。 - 查询 npm dist-tags:stable latest 为 `2026.5.7`,beta 为 `2026.5.12-beta.4`;本次按稳定版 latest 处理。 - 已将根项目 `devDependencies.openclaw` 升级到 `2026.5.7`,并刷新 `pnpm-lock.yaml`。 - 重新运行 `pnpm exec zx scripts/bundle-openclaw.mjs`,`build/openclaw/package.json` 和 `node build/openclaw/openclaw.mjs --version` 均确认内置版本为 `2026.5.7`。 - 同步更新 `scripts/bundle-openclaw.mjs` 与 `electron/gateway/runtime-deps.ts` 中的新版生成代码匹配片段,覆盖 main-session restart recovery 和 stuck-session active abort 边界。 - 检查新版 bundle:关键自定义边界仍在产物中,包括 `OPENCLAW_DISABLE_AGENTS_SKILLS`、`OPENCLAW_DISABLE_MAIN_SESSION_RESTART_RECOVERY`、`YINIAN_OPENCLAW_STUCK_ACTIVE_ABORT_MS` 和桌面 webchat fast raw model path。 - 部分旧补丁片段在 2026.5.7 中已由上游结构变更/等价逻辑替代,bundle 日志仍会提示旧片段不存在;已逐项核对关键行为没有缺失。 - Verification passed: - `pnpm run typecheck` - `node scripts/assert-electron-runtime-deps.mjs` - `pnpm exec vitest run tests/unit/openclaw-cli.test.ts tests/unit/openclaw-proxy.test.ts tests/unit/channel-config.test.ts tests/unit/channel-routes.test.ts tests/unit/whatsapp-proxy.test.ts tests/unit/host-api.test.ts` - `pnpm run build:vite` - `pnpm test` (106 files / 675 tests; existing MaxListeners warnings remain) - `pnpm exec playwright test tests/e2e/yinian-delivery-smoke.spec.ts`