diff --git a/AGENTS.md b/AGENTS.md index c4c725ffc..26c342747 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -62,7 +62,6 @@ - Reproduce the issue with a focused test when feasible; if direct reproduction is impractical, document the exact reasoning and code evidence used to accept or reject the finding. - Prefer adding or updating a regression test for every accepted review-bot bug before or alongside the fix. - Do not patch purely to satisfy a bot comment if the behavior is correct, stale, already fixed, or the proposed change would make the implementation worse. -- After pushing any commit to an open PR, wait and poll for Qodo/review-bot comments and PR review status for about 30 seconds before reporting the push workflow as complete. - After fixing an accepted review-bot finding, run the narrow regression test plus the relevant build/typecheck command, push the commit, and re-check the PR comments/status. - In the completion report, distinguish confirmed fixes from stale or rejected bot comments. @@ -142,6 +141,7 @@ - viewport(s) - assertion/result summary - screenshot absolute path(s) + - inline screenshot image(s) rendered in chat with Markdown image syntax using absolute local paths - CJS command/result (when module-loading behavior was changed) ## Worktree Dev Server Rule @@ -181,6 +181,7 @@ - When the user asks to test with Playwright, run the verification on the explicitly requested project/thread context (for example `TestChat`). - Screenshot artifacts must show complete passing evidence for the tested feature, not only the base page load. +- Always show captured screenshots inline in the chat, not only as links or filesystem paths. Use Markdown image tags with absolute local paths, for example `![light verification](/absolute/path/output/playwright/example.png)`. - For UI work, include dark-theme evidence in addition to the default/light-theme evidence unless the task is explicitly light-only. - For refresh-persistence fixes, include a post-refresh screenshot that still shows the expected UI state. @@ -209,6 +210,7 @@ - exact CJS command/script path - assertion summary (`hrefOk`, `titleOk`, `textOk`) - screenshot absolute path + - inline screenshot image rendered in chat with Markdown image syntax using the absolute screenshot path ## LLM Wiki Schema diff --git a/llm-wiki/raw/features/project-cron-automations.md b/llm-wiki/raw/features/project-cron-automations.md new file mode 100644 index 000000000..b535a230c --- /dev/null +++ b/llm-wiki/raw/features/project-cron-automations.md @@ -0,0 +1,14 @@ +# Project cron automations source + +Date: 2026-05-10 + +Project-scoped automations are represented as Codex cron automations with a `cwds` array containing absolute project folder paths. The sidebar resolves display labels such as `TestChat` to the real cwd before saving so the Codex scheduler can run in the intended project. The project automation UI blocks unresolved/non-absolute project cwd values. Editing or deleting a project association on a multi-cwd cron automation preserves the other cwd associations and only deletes the automation folder when the final cwd is removed. Thread automations remain heartbeat automations keyed by `target_thread_id`. + +Implementation facts: +- `src/server/codexAppServerBridge.ts` parses and serializes `cwds` in automation TOML records. +- `GET /codex-api/project-automations` returns project cron automations grouped by project cwd. +- `GET`, `PUT`, and `DELETE /codex-api/project-automation` read, save, and remove automations for one project cwd. +- `src/api/codexGateway.ts` exposes project automation helpers mirroring the thread automation helpers. +- `src/components/sidebar/SidebarThreadTree.vue` adds project menu `Add automation…` / `Manage automations…`, project row automation icons, and reuses the existing automation dialog with project-specific copy. +- `src/components/content/AutomationsPanel.vue` lists both thread heartbeat automations and project cron automations in one top-level panel. It sorts active automations before paused automations, newest first within each status group, and exposes row/detail edit buttons that open the shared automation editor. +- Project automations intentionally do not expose `Run now`; the existing manual run behavior remains thread-heartbeat-only. diff --git a/llm-wiki/wiki/concepts/project-cron-automations.md b/llm-wiki/wiki/concepts/project-cron-automations.md new file mode 100644 index 000000000..25729ee6f --- /dev/null +++ b/llm-wiki/wiki/concepts/project-cron-automations.md @@ -0,0 +1,23 @@ +# Project Cron Automations + +Project automations extend the existing sidebar automation UI from thread-scoped heartbeat records to project-scoped cron records. + +## Storage + +Project automations use Codex cron automation TOML records with `cwds = [""]`. Sidebar display labels must be resolved to the real project folder before saving, so folder-name rows such as `TestChat` still write the scheduler-visible cwd. The UI/server reject unresolved non-absolute cwd values for project automation saves. Multi-cwd cron records keep their other cwd associations when edited or removed from one project, and the automation folder is deleted only when the final cwd association is removed. This matches Codex's project/folder automation shape while preserving thread heartbeat records that use `target_thread_id`. + +Source: [project-cron-automations.md](../../raw/features/project-cron-automations.md) + +## UI + +The sidebar project row dots menu exposes `Add automation…` or `Manage automations…`. The dialog reuses the thread automation manager style, including multiple automation selection, schedule presets, status, and remove/save behavior. + +Project rows show the same compact automation icon when at least one project automation is attached. The top-level Automations panel lists both project cron automations and thread heartbeat automations together, sorts active automations before paused automations with newest records first inside each status group, and exposes edit buttons that open the shared automation editor. + +Source: [project-cron-automations.md](../../raw/features/project-cron-automations.md) + +## Boundaries + +`Run now` remains available only for thread heartbeat automations because it queues a heartbeat message into a concrete thread. Project cron automations are scheduled against one or more working directories instead. + +Source: [project-cron-automations.md](../../raw/features/project-cron-automations.md) diff --git a/llm-wiki/wiki/index.md b/llm-wiki/wiki/index.md index 94b762bd3..21349b557 100644 --- a/llm-wiki/wiki/index.md +++ b/llm-wiki/wiki/index.md @@ -14,6 +14,7 @@ - [concepts/realtime-chat-rendering.md](./concepts/realtime-chat-rendering.md): realtime chat rendering, sync-churn reduction, and inline media sanitization. - [concepts/skills-route-ui.md](./concepts/skills-route-ui.md): Skills route naming, first-launch Plugins card persistence, dark-theme fixes, and verification lessons. - [concepts/thread-heartbeat-automations.md](./concepts/thread-heartbeat-automations.md): thread-scoped heartbeat automation storage, multi-automation management, and manual run behavior. +- [concepts/project-cron-automations.md](./concepts/project-cron-automations.md): project-scoped cron automation storage and sidebar management UI. ## Sources - [../raw/features/integrated-terminal.md](../raw/features/integrated-terminal.md): source facts for the integrated terminal implementation and follow-up tests. @@ -21,6 +22,7 @@ - [../raw/features/realtime-chat-rendering-inline-media.md](../raw/features/realtime-chat-rendering-inline-media.md): source facts for realtime chat rendering and inline media sanitization. - [../raw/features/skills-route-ui-and-first-launch-card.md](../raw/features/skills-route-ui-and-first-launch-card.md): source facts for the Skills route rename, first-launch Plugins card, dark-theme fix, and dev-server workflow adjustment. - [../raw/features/thread-heartbeat-automations.md](../raw/features/thread-heartbeat-automations.md): source facts for thread heartbeat automations, multiple automations per thread, and Run now queue behavior. +- [../raw/features/project-cron-automations.md](../raw/features/project-cron-automations.md): source facts for project cron automations in the sidebar. - [../raw/projects/codex-web-local.md](../raw/projects/codex-web-local.md): immutable source snapshot for project facts. - [../raw/fixes/opencode-zen-big-pickle-codex-cli.md](../raw/fixes/opencode-zen-big-pickle-codex-cli.md): Big Pickle + Codex CLI fix details. - [../raw/fixes/opencode-zen-reasoning-content-proxy.md](../raw/fixes/opencode-zen-reasoning-content-proxy.md): Codex Web Local Zen proxy reasoning_content round-trip fix and Docker verification. diff --git a/llm-wiki/wiki/log.md b/llm-wiki/wiki/log.md index 6f1bc3d43..c081c064f 100644 --- a/llm-wiki/wiki/log.md +++ b/llm-wiki/wiki/log.md @@ -46,3 +46,9 @@ - Updated wiki page: `concepts/opencode-zen-big-pickle.md`. - Documents: DeepSeek thinking-mode `reasoning_content` round-trip requirement, Chat-shaped Zen proxy endpoint selection, streaming reasoning preservation, Docker validation, and the `/tmp/app.tar` restart gotcha. - Updated `index.md`. +## 2026-05-10 + +- Added project cron automation notes for sidebar project-level automation management. +- Updated project cron automation notes for the combined Automations panel. +- Updated Automations panel notes for active/newest sorting and direct edit buttons. +- Updated project cron automation notes for absolute cwd validation and multi-cwd preservation. diff --git a/src/App.vue b/src/App.vue index a3ee90c15..38bd68123 100644 --- a/src/App.vue +++ b/src/App.vue @@ -60,8 +60,25 @@ - + + + {{ t('Automations') }} + {{ t('Scheduled work') }} + + + + @@ -484,7 +502,7 @@ :style="contentStyle" >