-
First successful real-CLI agent invocation. After REAL.1 (system-prompt injection) + REAL.2 (mtime-diff file detection) wired, the only remaining gate was Claude auth. Once CLAUDE_CODE_OAUTH_TOKEN was added to the project .env, scripts/real-pm-smoke.js completed cleanly: Wire-up status: ✓ process spawn ✓ stream chunks (3) ✓ result text (Claude returned "DONE") ✓ files written (6: prd/index, feature-tree, user-flows, product/overview, assets/shell.{css,js}) ✓ git commit (8cb0493) 5/5 checks passed · elapsed 163s PM output quality (real Claude, not mock): - valid <article data-doc="prd" data-rev="1"> + <section data-rev="1"> structure per system prompt - nav links use correct relative paths across 4 chapters - pid (p-7gwlbl) embedded in HTML metadata - 中文 prose in the requested 克制 voice Spec-deviation confirmed (no MCP tool gateway yet — Claude only has built-in Read/Write/Bash): - ✗ agent-state/pm.json (no update_runtime_state tool) - ✗ agent-state/pm-todo.json (no write_todolist tool) - ✗ history/prd-rev-001.html (no archive_doc tool) - ✗ timeline.ndjson 'prd_drafted' event (no timeline_append tool) - ✓ core PRD site IS produced — sufficient to prove pipeline ──── code ──── - scripts/real-pm-smoke.js — loads root .env via dotenv resolved from server/node_modules (script dir has no node_modules of its own). ──── ambient ──── Files modified by user/linter while real-CLI work was in flight; merged without revert: - server/routes/devloop.js — new GET /:pid/requirements endpoint - server/services/devloop/path-resolver.js — listProjects() includes archived flag + helpers; supports project archive lifecycle - server/services/devloop/git-vault.js — commit() now accepts files[] to scope which paths the commit covers (avoids dragging linked-existing user's unstaged files into chore commits) - server/src/core/devloop/loop-controller.js — createProject uses explicit files:['project.json','timeline.ndjson'] for first chore commit (avoids same issue) - server/tests/devloop/path-resolver.test.js — coverage for archive/ patch/hardDelete helpers - web/src/components/devloop/RequirementListSection.vue (new) - web/src/views/DevLoopNewRequirement.vue (new) - web/src/views/DevLoopDashboard.vue — mounts RequirementListSection - web/src/views/DevLoopProjects.vue — list page polish - web/src/router/index.js — adds /devloop/:pid/requirements/new route - web/src/components/devloop/DashboardHeader.vue — back link tweak Test results: 233/233 vitest pass (was 230 → +3 path-resolver cases). ──── ⚠ SECURITY NOTE ──── .env is currently TRACKED in git (committed in b1a348b) even though .gitignore lists it. Existing committed contents include credentials for DOUBAO / FEISHU / GITHUB / GOOGLE / JWT. The CLAUDE_CODE_OAUTH_TOKEN + AZURE_OPENAI_API_KEY I just added to .env are NOT in this commit — they stay in your working tree only. Recommended follow-up (separate commit): git rm --cached .env git commit -m "chore: stop tracking .env (already gitignored)" And rotate every key that was in the previous committed .env. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> -
Two parallel pieces of plumbing — neither has been exercised end-to-end yet (real CLI gated on `claude /login`; Projects list view served alongside existing pages): ──── real-CLI wire-up (REAL.1 + REAL.2) ──── LemonBoss now has a clean toggle between mock & real Claude CLI: - packages/acp-core/protocol/ClaudeCliProtocol.js * `options.systemPrompt` → `--append-system-prompt <prompt>` so each devloop agent receives its role-specific prompt.md without losing Claude's default tool-use conventions. * `options.maxBudgetUsd` → `--max-budget-usd` (note: only effective in `--print` mode; documented inline). - server/src/core/devloop/loop-controller.js * callAgent now branches on `opts.mock`: - mock (P1-P5 path, untouched): fixture sequence + `mock/files` event - real: read system/templates/{agent}/prompt.md, pass as systemPrompt, snapshot project file mtimes pre-call, diff post-call to compute `files_written` — no fixture, no mock/files needed. * `_snapshotMtimes(root)` helper walks the project tree (skipping .git / node_modules / .cache / .tmp) and returns Map<relPath,mtime>. * timeline event payload now carries `real: true` flag. - scripts/real-pm-smoke.js — minimal real-CLI sanity: spawns claude, injects PM prompt, prints which files were written + git commit sha. Hard timeout 5min. Single agent → expected spend $0.10-0.30 per run when authenticated. Current status: process spawn + system-prompt injection + stream-json flow all verified up to the `Not logged in · Please run /login` gate. Auth is the only remaining blocker for executing the real smoke. ──── project CRUD routes ──── server/routes/devloop.js + server/services/devloop/path-resolver.js add the lifecycle pieces the Projects list view needs: - GET /projects?include_archived=true list w/ archive filter - PATCH /projects/:pid edit name + idea_summary - DELETE /projects/:pid soft delete (archive) - DELETE /projects/:pid?hard=true hard delete (rm -rf sandbox; unregister linked) - POST /projects/:pid/restore un-archive path-resolver exposes matching helpers: listProjects({includeArchived}), patchProjectMeta(pid,patch), hardDeleteProject(pid). ──── UI ──── - web/src/views/DevLoopProjects.vue (320 lines, new) — Projects list - web/src/router/index.js — adds `/devloop` → DevLoopProjects - web/src/components/devloop/DashboardHeader.vue — back-link now points to `/devloop` (project list) instead of `/company`. ──── housekeeping ──── - CLAUDE.md / start.sh — start.sh now boots server/index.js (full route surface incl. /api/devloop) instead of the historical agent-server.js; docs updated to reflect this. ──── tests (+12) ──── - server/tests/devloop/routes-crud.test.js — 12 cases: PATCH validation (4) · soft DELETE + list filter (4) · POST /restore (1) · hard DELETE (2) · GET /projects default behavior (1). Results: - phase0-verify .. phase5-verify: 8+7+7+6+9+9+7 all pass - vitest devloop+acp-core: 230/230 (was 218 → +12) Specs: - docs/prd/newfunction/_spec/arch-acp-bridge.md · Mock Mode - docs/prd/newfunction/_spec/plan-migration.md · "自举乐趣" (real path prep) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> -
…b-pages + UI endpoints) Completes the §P4 acceptance UI scope that was deferred in commit 0594b1d. Adds the full Vue Dashboard + Ops sub-pages with live SSE stream + auto-reconnect, unit DAG with detail drawer, PRD/SDD diff panel, feedback modal, and 4 ops views (Bugs / Loops / Changelog / Progress). Vue surface (≈1480 lines): - web/src/views/DevLoopDashboard.vue (~110 lines) * 4-region grid: status header / loop bar / units DAG / live stream / PRD diff. Polls /state every 2.5s; opens feedback modal & unit drawer; mounts Sign Off / Abandon controls. - web/src/views/DevLoopOps.vue (~50 lines) — tab container. - web/src/components/devloop/DashboardHeader.vue * Status badge (7 states color-coded), NEW REQUIREMENT button, Sign Off / Abandon buttons (disabled per FSM), Ops nav link. - web/src/components/devloop/LoopStatusBar.vue * 4-phase pipeline (Docs → L1 → L2 → Ship), highlights active phase. - web/src/components/devloop/UnitsDAG.vue * SVG DAG rendered from topological waves; per-unit status color; click → emits select → opens UnitDrawer. - web/src/components/devloop/UnitDrawer.vue * Slide-in panel showing unit metadata + last 3 runs + result summary + coder.log tail (last 1KB). - web/src/components/devloop/LiveAgentStream.vue * EventSource subscriber listening to project.status, unit.state, integration.result, triage.result, sdd.updated, prd.updated, human_intervention_needed, etc. Manual 5s reconnect on disconnect (browser's built-in Last-Event-ID is honored). - web/src/components/devloop/PrdDiffPanel.vue * Reads changelog.ndjson, renders prd_rev / sdd_rev entries with trigger labels. - web/src/components/devloop/FeedbackModal.vue * POSTs /feedback with PM incremental — shows rev bump on success. - web/src/components/devloop/ops/BuglistView.vue * Filterable bug table; status badges; severity / category columns. - web/src/components/devloop/ops/LoopLogView.vue * Timeline grouped by L1 (unit.*) / L2 (integration/triage/sdd/l2_*) / L3 (project.status/shipped/prd.updated/human_intervention) / System (rest). Free-text substring filter. - web/src/components/devloop/ops/ChangelogView.vue * Tabular prd_rev/sdd_rev entries with by/trigger/summary columns. - web/src/components/devloop/ops/ProgressView.vue * 6 metric cards (status, PRD rev, SDD rev, units passed bar, L2 rounds bar, open bugs) + per-unit breakdown table. Router: - web/src/router/index.js — adds: * /devloop/:pid → DevLoopDashboard * /devloop/:pid/ops/:tab(bugs|loops|changelog|progress) → DevLoopOps Backend UI-supporting endpoints (server/routes/devloop.js): - GET /api/devloop/projects/:pid/timeline?limit=N Reads timeline.ndjson, returns last N events reversed. - GET /api/devloop/projects/:pid/changelog Returns full changelog.ndjson entries reversed. - GET /api/devloop/projects/:pid/units/:unitId Returns { unit, runs (last 3 result.json), coder_log_tail }. 404 on unknown unit. Tests (+5 cases): - server/tests/devloop/routes.test.js — new P5 UI endpoints block: * timeline / changelog / units happy-paths * 404 on unknown unit and unknown pid Acceptance: - scripts/phase5-verify.js — 7 steps: ① Vue build artifacts (DevLoopDashboard.js + DevLoopOps.js chunks) ② POST /projects → state returns status + units ③ GET /timeline returns events ④ GET /changelog returns entries ⑤ GET /units/todo-be returns unit + runs ⑥ GET /bugs returns bug list ⑦ SSE /stream delivers ≥1 event after a triggering feedback POST Vue build: - npm run web:build → DevLoopDashboard chunk 15.63 kB, DevLoopOps chunk 9.09 kB, both with co-loaded CSS bundles. Results — all 7 phase gates green: - phase0-verify: 8/8 - phase0-test-call: 7/7 - phase1-verify: 7/7 - phase2-verify: 6/6 - phase3-verify: 9/9 - phase4-verify: 9/9 - phase5-verify: 7/7 - vitest devloop+acp-core: 218/218 (was 213 → +5) Specs: docs/prd/newfunction/_spec/plan-migration.md · P4 L3 + UI Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
1. Added global time range selector (1h/24h/7d/30d/all) that uniformly restricts the dataset for the whole dashboard. 2. Added 'Search' inputs and 'Sort' dropdowns for Agent Ranking, Task Breakdown, and Recent Logs tabs. 3. Decoupled global filteredData state from original rawData to allow smooth, consistent indicator rendering.
-
Converted the Quota Monitor's vertical scroll layout into a clean 4-tab interface: 1. Trend Statistics (使用趋势统计) 2. Agent Ranking (各 Agent 计算力消耗排行榜) 3. Task Breakdown (任务级成本分析) 4. Recent Logs (最近的大模型调用日志) This significantly improves usability and avoids excessive scrolling while keeping the top overview indicators universally visible.
-
Parses convId strings (e.g. task-T-xxx, callback-T-xxx) to group billing records by task ID. Provides a consolidated view showing total cost, token consumption, duration, and the agent pipeline sequence for each task, along with an expandable detailed breakdown per agent call. This allows easier identification of wasteful agent patterns.
-
1. Workspace page: left file tree + right detail/editor panel - File info: name, path, size, created/modified timestamps - Three view modes: Code / Preview / Edit with save - HTML files auto-open in Preview tab (sandboxed iframe) 2. Backend APIs: - GET/PUT /:companyId/workspace/files (list + content + save) - PUT /:companyId/files/content (company file save) 3. Navbar: removed Skills/Jobs/Pipeline, added Workspace 4. All nav links open in new tabs (target=_blank)
-
- Added inline editing for template description and type fields - Implemented Delete Template functionality (removes both file system and registry entry) - Added confirmation safeguards for the destructive delete action
-
Architecture fix for long-running tool execution: 1. ClaudeCliProtocol: Two-tier idle timeout - Chat mode: 45s (detect API hang/silent rate limit) - Tool execution mode: 5min (Bash long tasks like pip install) - Automatically switches on tool_use_start / content_block_stop events 2. Provision API: POST /templates/:templateId/provision - Runs shell commands directly via child_process.exec - Bypasses Claude ACP entirely (no idle timeout issue) - 10min per-command timeout, security blocklist - Frontend button with prompt for custom commands 3. Template UI: Added 🔧 安装依赖 button (teal)
-
…aruncreate skill paths - Upload skill files to .claude/skills/ (Claude Code ACP reads from here) - Add conversation type filter (user/callback/task/train) to AgentChat - Parse messages.log for richer conversation history display - Fix idearuncreate template & company agent skill directory structure - Add adm-zip dependency for ZIP extraction - Add fs/path top-level requires in company.js
-
- Add TaskTimeline.vue: two-pane dashboard with task list + message timeline - Add task-service.js: aggregate cross-agent conversations into task tree - 4-strategy parent-child inference (explicit meta, time-overlap, conv→tpl, master→T) - Read messages.log for full tool call details (not just history.json) - Add tasks.js API routes: GET /api/tasks, GET /api/tasks/:taskId/timeline - Mount /api/tasks in agent-server.js - Add 'Task Logs' nav entry in AppNav.vue after Templates - Support taskId in URL (/tasks/:taskId?) for sharing/bookmarking - Add --parent flag to CLI task dispatch for explicit parentTaskId - Auto-detect parentTaskId in task/dispatch from sender's active task - Add --instructions flag to template train CLI command - Update master tools.md with new parameters
-
…th time-based multi-dimension token tracking charts
-
…en costs across agents
-
- Updated `GET /api/agent/:agentId/info` to include heartbeat and cron configurations. - Added `PUT /api/agent/:agentId/heartbeat` to update config.json and toggle service heartbeat on the fly. - Added `PUT /api/agent/:agentId/cron` to update cron.json list. - Updated AgentChat.vue detail panel UI to include interactive heartbeat toggles and a cron job management list.
-
- Updated `POST /api/company/create` to create an empty shell without bootstrapping CXO/HR automatically. - Updated `master/agent.md` instructions so Master Agent handles all Template library hirings. - Renamed 'MasterBot' navigation link to 'System Agents'. - Updated AgentChat sidebar to only show System Agents when accessed via the System Agents link.
-
- GET /api/company/templates/:id/logs scans system agent conversations - Logs stored in system agents (agent-creator/innovator), NOT in template dir - Template directories stay clean for copying - Collapsible log cards with status, time, message count, and output summary - Auto-poll during generate/train actions (10s/15s intervals)
-
- POST /api/company/templates: scaffold new template via AgentScaffold - POST /api/company/templates/:id/generate: trigger agent-creator to write definitions - POST /api/company/templates/:id/train: trigger innovator FDE training pipeline - PUT /api/company/templates/:id/files/content: save template file content - TemplateAgents.vue: create form, action buttons, editable preview, status banner
-
- Chat list: added 🗑 delete button per conversation (hover to reveal) - Calls DELETE /api/agent/:agentId/conversations/:convId - Backend also cleans up associated log files - Detail file tree: added 🗑 delete button per file/folder (hover to reveal) - Backend: DELETE /api/agent/:agentId/file/* with path traversal protection - Detail preview: upgraded from readonly <pre> to editable <textarea> - Backend: PUT /api/agent/:agentId/file/* for saving - Shows 'unsaved' badge + save/reset buttons when dirty - Tab key support, monospace font, auto-fill height
-
- CompanyDashboard Goals Tab: upgraded from flat list to full OKR tree view with progress bars, node hierarchy, status animations, owner/priority badges - ClaudeCliProtocol: added --effort flag support (low=disable thinking) - agent-chat.js: per-agent effort config from config.json cli.effort - .gitignore: exclude data/companies/, apiconversation/, agent memory/tasks - New views: TemplateAgents, JobsPanel, PipelineEditor, SkillsMarket - docs/architecture-v5.md: added decision #13 (thinking control)
-
- ClaudeCliProtocol: stderr 检测 rate_limit/429/401 等致命错误时自动 reject sendPrompt Promise - agent-chat.js: 监听 stderr/disconnected 事件并通过 SSE 推送到前端 - AgentChat.vue: error 事件停止 thinking 状态 + ACP 日志面板显示错误
-
- System agents: 只保留 master (data/system/agents/master) - Templates: 所有可复用 agent 模板 (data/system/templates/) - Companies: 公司创建时自动部署 5 个元 Agent (innovator/hunter/digester/evolver/agent-creator) 路径修复: - agent-chat.js: /list 扫描路径修正 (system/agents + companies/*/agents) - agent-manager.js: 动态 agent 查找路径修正 - skill-config-loader.js: 修正 agents root - pipeline-service.js: pipelines 输出到 companies/{id}/pipelines/ - billing.log: 移至 companies/{id}/logs/ 下 Skills 标准化: - 所有 template agent 建立 .claude/skills/main_skill/SKILL.md - company-service._copyTemplate() 新增 .claude/ 目录复制 - innovator SKILL.md v3.0: 移除旧 l3-hunt/l2-digest 命名 - 清理重复 agent_creator, 统一为 agent-creator 清理: - 移除 data/agents, data/workspace, data/logs, data/goals 旧目录 - 清除所有未使用的 DATA_DIR 声明 - 清除 template 中的 conversations/logs/memory 运行态数据
-
- Added async orchestration in `/company/:id/hire` when no template is found. - Triggers Agent-Creator to write definition files based on scaffold. - Searches Arena (skillDb) for 3 basic skills matching the role and injects them. - Dispatches Innovator to run FDE pipeline and evaluate initial capabilities.
-
- Agent names are clickable links to chatbot page - Action button group per agent: heartbeat ▶/⏹, 💬 Chat, 📋 Skills, 🎓 Train - Expandable skills panel shows agent's loaded skills - Train button sends instruction to CEO to arrange Innovator training - Backend: GET /api/company/:id/agents/:agentId/skills API
-
- Add Company Overview tab as default landing page - Show company info: status, uptime, agent count, heartbeat status - Start/Stop company buttons (activate/deactivate all agent heartbeats) - Per-agent heartbeat controls: interval dropdown, start/stop buttons - Backend APIs: GET status, POST start/shutdown, PUT/POST agent heartbeat - Track startedAt timestamp for uptime calculation - Update CEO agent.md with mandatory 5-step startup workflow - Fix company nav to default to overview tab
-
…ter Agent cognitive auto-recovery loop - Refactored CompanyDashboard into read-only Observer UI - Enforced strict companyId:roleId namespacing across Node APIs and AgentManager - Added dynamic <env_status> injection to PromptBuilder for robust context - Introduced bin/lemon.js CLI for structured LLM tool execution - Implemented in-stream error interceptors for implicit silent retry loop