-
冲突在 docs/README.md:并行会话在真实端到端测试里发现 boss agent(39 号文档)还有 三个单测没覆盖的真问题,把 39 号重新留在 todo/ 并拆出 42 号跟进文档;与我这边把 39 号挪进 done/ 的判断冲突——采纳对方判断(39 号文档物理路径挪回 todo/system-design/, докс/README.md 用对方更新的行 + 补 42 号一行),因为他们是基于更新的真实测试结果。 顺带把 29-dream-design.md 这次会话移到 done/ 后遗漏的引用修掉: system/agents/{dream-distiller,dream-screener}/agent.md、 server/{routes/dream.js,services/dream-service.js}、 server/tests/unit/dream-routes.test.js 六处 docs/todo/system-design/29-dream-design.md 路径改成 docs/done/system-design/29-dream-design.md(no-dead-path-references.test.js / agent-md-refs.test.js 两条守卫测试之前没扫到这几处,这次真跑测试才暴露)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> -
核心修复:indexNodeOutputs() 此前只扫节点私有目录,不扫项目根——但引擎自己的写入边界 明确允许交付物写项目根,导致内容型交付物节点(产出写进项目根时)永远进不了 R-19 产物 索引,下游 needs 声明永远查不到实例。新增 readDeclaredProduces():agent 可在 contract.json 里显式声明 produces:{kind: 绝对路径},校验(绝对路径/落在项目根或私有目录内/ 文件真实存在)通过才登记,不满足就整个 kind 判「没产出」,不静默放过。全局提示词 (describeArtifactContract)同步更新,所有 org/work 节点自动学到这个新字段。 新增 org-hunt / org-digest / org-evolve 三个 graph 原生 agent(方法论抄 innovator-hunt/digest/evolver,协议原生兼容 graph 引擎),配套新增 work-graph-templates 的 deliverable.json(内容型交付物骨架,不引入验证 agent)。11 轮真实试跑挖出并修复 5 个 独立缺陷(详见 41 号文档问题 7):建公司自动规划与手写图的竞态、work-graph 模板库缺内容型 交付物骨架、验收节点任务描述范围溢出、两个规划 agent(orggraph-planning/workgraph-planning) 的路径口径写错、以及上述 R-19 索引缺口。最终产出与原生 FDE 对比:内容骨架可迁移、质量不 打折,但可靠性差距悬殊。 补充说明:system/agents/{ceo,innovator-evolver,master,org-innovator}/{agent,soul}.md 是 本会话开始前已存在的 dream 自编辑改动,随本次提交一并收进去,不属于本次改动范围。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
system/templates/ 已在 28 号文档的合并里并入 system/agents/,「模板」作为独立 数据概念已经消失;确认后手工 CRUD 页面(创建/改名/删除骨架、触发生成与训练、 传 skill 文件、provision)也已经没人用,一并下线: - 前端:删 AppNav「Templates」菜单项、/templates 路由、TemplateAgents.vue - 后端:company.js 删掉只服务于该页面的写接口(PATCH/DELETE/POST /templates、 generate/train/skills-upload/provision/files 系列),保留 GET /templates (CompanyDashboard 招聘弹窗和 CLI `company templates` 命令仍依赖它列出可招角色) - CLI:bin/lemon.js 删 `template create`/`template train`(调用的是被删接口) - 修正两处过时注释(company-service.js / graph-service.js):不再声称 buildAgentDefinitionBrief 有两个调用方,/hire 是唯一派单点 - work-layer-body-paths.test.js 同步更新断言(2 处调用方 → 1 处) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
只做了这一件事,没有跟着做「dream 改成 org/work graph 来跑」——两者被 单独评估过:org/work graph 是单公司作用域(org graph=公司级 workflow, work graph=公司内某任务的节点图),dream 却是跨公司扫描,套进去要么破坏 作用域假设要么得新开图类型;且 graph 引擎自带的验收机制(goal-contract benchmark/test-script)判的是「产物过没过验收脚本」,对「经验提炼得对 不对」这种自由文本判断没有对应机制——不管套不套 graph 都得单独设计 rubric,是同一件事。用户明确只要 REST/控制台这一半。 ## REST(server/routes/dream.js,挂 /api/dream) 路由本身没有新业务逻辑,全部委托给已测过的 dream-service.js: GET /agents(总览)、GET /agents/:id(详情,含定义文件可写性 + 经验 审计)、POST /agents/:id/run(手动跑一次,dryRun 只看有没有新原料不 起 LLM)、POST /sweep + GET /sweep/status(全量扫描后台跑 + 轮询,内存 态并发锁防止连点两下)。 ## 控制台(web/src/views/DreamConsole.vue,路由 /dream) 一个表格 + 两个弹窗:本体列表(详情/跑一次/dry-run)+ 全量扫描按钮 (15 秒轮询状态)。导航栏加 🌙 Dream 入口。 ## 验证 server/tests/unit/dream-routes.test.js 4 例,monkeypatch 掉 dream-service 导出对象上的六个函数(不走真文件系统,不误扫真仓库 76 个本体),只验路由层自己的逻辑:端点接线、sweep 并发锁状态机。 真起服务器打了真数据:GET /agents/innovator-evolver 正确报 SKILL.md 因没进 git 历史而不可写、经验审计吐出上次真跑沉淀的 4 条 经验及原文;dry-run 正确报 no-new-material,没多花一次 LLM 调用。 浏览器里走了一遍列表→详情→dry-run,与直接打 API 结果一致。 955 个单测全绿。 文档:29-dream-design.md §5.7 记录实现与「为什么不做 graph 化」的 理由;28-followups.md / docs/README.md 同步更新 dream 现状。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
起因是「全量测试偶发挂一条」。查下来既不是回归、也不是那 45 个孤儿进程(它们 CPU 早归零、 不再写任何东西),而是**还活着的心跳在测试扫描 system/agents/ 的同时往里建目录**: locator.taskDir() 的落点是 system/agents/<agent>/<companyId>/<taskId>, 运行态目录落在本体目录里属既定设计;但心跳每 5 分钟建一个新的 (cto/_global/ 已 263 个子项且在涨),于是扫描 system/agents/ 的守卫测试 (no-dead-path-references 那一类)会撞上瞬时竞态:列到了目录名,进去时那一层还没写完。 症状是偶发假失败、重跑就好 —— 这类最费人,因为第一反应总是去怀疑自己刚改的代码。 改法:server/index.js 启动的那个 setTimeout 块里,恰好装着全部「会自己起 agent 的东西」 (两处中断恢复 + 任务队列扫描 + 两路心跳),所以一条早退就够,不必在五个地方各加一个判断。 DISABLE_BACKGROUND_AGENTS=1 bash start.sh 实测:127 文件 / 1226 用例全绿,跑前跑后 cto/_global 子项数都是 263。 **验证它生效不能只看日志里的 ⏸** —— 那只证明代码走到了早退。硬判据是目录数前后相等, 也就是真的没有东西在写。文档 §七 把这条写成了可粘的三行。 排掉的两个坑,都记在文档和 .env.example 里: 1. `.env` 里不能给这个键赋空值。start.sh 是 `set -a; source .env` 加载的,.env 里只要 存在同名键(哪怕空的)就会盖掉命令行传进来的 =1,而且不报错。所以 .env.example 里 它只以注释形式出现 —— 一个「示例文件顺手写全」的习惯会直接让开关失效。 2. 开关生效后 `[TaskQueue] 🚀 已启动` 仍会打印,那是另一个模块:services/task-queue.js (ArenaSK 时代 /api/claude-chat 的队列,routes/claude-chat.js 模块加载时起), 和批 3 的 services/task-scheduler.js 同名不同物。它的心跳只扫内存里的 this.tasks, 不碰 system/agents/,不是干扰源。名字撞车,容易误判成开关没生效。 文档同步: - docs/done/claude-cli-session-leak.md §七 重写(原文写的是「得让测试隔离,或跑前停心跳」, 现在后者已实现,改成开关的用法 + 硬判据 + 上面两个坑);原第 2 条降为 §七之二 - CLAUDE.md 测试命令块加一行(这是找「怎么跑测试」的人真正会看的地方) - docs/README.md 索引行补上开关 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
-
手工扫了两轮,扫出的是三类会持续复发的失真,不是零星笔误: ① package.json 里 12 处引用指向从未在 git 历史存在过的文件(server/src/cli/auto-dev.js 一族) ② CLAUDE.md 的 docs/ 那行列了 5 个文件名,文档移进 done/ 之后全成死链 ③ 数据存储整节把两个不同的 data 根当成一个写,server/conversations/ 这个路径根本不存在 共性是**不报错、不影响测试、git status 干净**,只有照着做的人(或 agent)撞墙才发现。 而 CLAUDE.md 是每个会话都会加载进上下文的文件 —— 写错等于把错误信息直接灌给每一个后来者。 四条扫描: - CLAUDE.md 里的仓库路径都存在 - CLAUDE.md 里出现的每条 npm run 都在 package.json 里(守反方向:删脚本忘改文档) - package.json 的 scripts / bin / main 指向的文件都存在 - docs/README.md 的相对链接都指向真实文件 判据刻意窄(本仓库有过「防线被整条注释掉」的教训):路径只认「以仓库顶层目录开头 + 含 /」, 且跳过 gitignored 的 —— 那是运行态产物(web/dist/、data/companies/、skills/),在干净机器上 本来就不存在,缺席不是文档错误;这与 no-stale-templates-path.test.js 用的是同一条判据。 上下文里的相对片段(_base/、todo/future/)、glob、<repo>/… 示意写法一律不判。 四条各带「样本非空」下限断言(当前 26 路径 / 16 script 名 / 6 入口引用 / 22 链接), 下限取当前值一半左右:正则一写错就会以「零违例」全绿,那和没有这条测试是一回事。 验证:把同一套判据跑在旧 revision 的文件内容上(只读 git,不碰工作区)—— 3e718aa:路径 ❌3 条、入口 ❌10 条 d6214f8:路径 ❌4 条、入口 ❌10 条 HEAD :全绿 顺带修掉自己写的一处假路径占位符(`data/xxx` → 「以 `data/` 开头的路径」), 文档里本来就不该出现假路径。 28-followups 守卫清单补到第六条,并写明后两条与前四条的形状差异。 npm run test:unit 1061/1061 绿。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
-
顺着上一笔的判据(引用了不存在的东西)继续扫,扫出的不是零星笔误,是一处结构性失真。 事实(按绝对路径解析源码里的 path.resolve(__dirname, ...),不是数字面量 —— 数字面量会错,path-resolver.js 比 db 文件深一层,同样的 '../../../data' 落点不同): 仓库内 <repo>/data/ — 11 个模块(company / okr / graph / devloop / schedule / pipeline …) 仓库外 <repo>/../data/ — 3 个模块(skill-db、user-db、benchmark-db,ArenaSK 时代遗留) 原文把六条全挂在扁平的 `data/` 前缀下,读的人只会理解成仓库内一个根。这不是抠字眼: 备份 / 迁移 / 换机器时漏掉仓库外那半边,skill、用户、benchmark 数据会**静默丢失**。 一并修掉的具体错误: - `data/benchmark.sqlite` → 实际文件名是 `benchmark_logs.sqlite` - `server/conversations/` → 该路径不存在。会话持久化实际有**两套**: ArenaSK/Innovator 侧在 `<repo>/conversations/`(config.conversationsDir), LemonBoss agent-chat 侧在公司态目录下(getConvDir → locator.companyStateDir) - 目录速查里的 `data/skills/` 改成 `<repo>/../data/skills/`,点明 `<repo>/data/skills/` 并不存在 - 补上仓库内侧原本一条没列的 graph.sqlite / companies/ / okr/ / logs/ / agents/ - 每个库补上真实的 env 覆盖名(SKILLS_DB_PATH / USERS_DB_PATH / BENCHMARK_DB_PATH / GRAPH_DB_PATH) 新写进去的每一条路径与每一个 env 名都用脚本核过存在性(10 路径 + 5 env 全 ✅)。 docs/README.md 的 markdown 链接同批扫过,零死链。 npm run test:unit 1057/1057 绿。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> -
判据统一:目标文件既不在盘上、**也从未在 git 历史里出现过**(逐个 git log --all 核过), 不是「搬了地方」而是从来没有过。跑起来一律 MODULE_NOT_FOUND。 删除(12 处,指向 4 个从未存在的目录): server/src/cli/ main、bin.auto-dev、example、example-bmi server/src/utils/ logs、analyze、parse server/src/modules/ test:browser-logger、test:design-validator server/src/tests/scripts/ test:multi-cli skills/whatsapp-bot/ whatsapp:auth、whatsapp:start (skills/ 是 gitignored 的运行时目录,确实存在, 但里面没有也从没有过 whatsapp-bot; /api/whatsapp 路由走的是 routes/whatsapp-auth.js,不受影响) 只授权了 auto-dev 那 3 处,其余 9 处是同一类缺陷、同一条判据,一并删了 —— 要退回来 `git revert` 这一笔即可。删完 package.json 零死引用(脚本目标存在性已脚本化核过)。 CLAUDE.md 同步: - 常用命令去掉已删除的 6 条,补上真实存在但之前没列的 graph:seed / okr:migrate - 上一笔加的 auto-dev 警告块随引用一起去掉 - /api/goals 从「向后兼容别名」改为「已退役」—— 7f24ef0(27-P3C §六.1)已落地, OKR 只剩 /api/okr 一个挂载点,且有守卫测试盯着 验证:npm run test:unit 1057/1057 绿;npm run spec:check 52 份 _spec 全同步; CLAUDE.md 里出现的每一条 npm run 都在 package.json 里存在(脚本核对)。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> -
逐条都对着 HEAD 核过(不含工作区里其它会话未提交的改动): ① docs/ 那一行列的 5 个文件全是死链 —— 它们都搬进了 docs/done/。 根因不是路径写错,是同一份文件清单被抄在两处:CLAUDE.md 一份、docs/README.md 一份, 文档一搬家,抄的那份就烂。改成只描述「按状态分目录」的结构并指向 docs/README.md, 并写明「别在本表里加文件名」,免得再抄一次。 ② 路由清单漏项 + 错项: - index.js 实挂 /api/okr 与 /api/graph-runs,表里都没有 - 表里写的 /api/goals 是 okr 的向后兼容别名,不是独立路由;标注清楚 - agent-server.js 子集同样漏了 /api/okr、/api/graph-runs (注:工作区里有另一个会话正在退役 /api/goals 别名,尚未提交。本次按 HEAD 的事实写, 等那笔落地后这两行还要再改一次。) ③ 三个硬编码计数全部过期:routes 15→实际 17,services 26→38,views 10→15, agents「75 个」连测试建本体都会让它变。计数在这种表里只会烂,直接去掉; views 补上 GraphConsole 与 DevLoop 四页。 ④ auto-dev 是幽灵入口:server/src/cli/ 整个目录不存在,且 git 历史里从未有过 auto-dev.js。npm run example / example-bmi / bin.auto-dev 三处引用全是坏的 (实测 MODULE_NOT_FOUND)。CLAUDE.md 里改成显式警告 —— 没删 package.json 的 scripts/bin,那是代码改动,留给人定「补文件还是删引用」。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> -
承接 310a2b2 的两个遗留: ① 四类被错标成心跳 company-heartbeat-service._sendAgentChat 给五类调用(心跳巡检 / Pipeline 步骤 / 日程 / 告警 / 日报)无差别打 isHeartbeat:true,于是对话列表里全都显示成 「⏱️ 自主心跳巡检」、meta.type 一律 'heartbeat'。改成显式传 kind,五类各自标注。 isHeartbeat 仍然发,但只对真心跳为真,老消费方行为不变。 ② 310a2b2 让 Pipeline 重试变成了冷启动 Pipeline 步骤的 convId 是 `pipeline-{runId}-step-{i}`,被驳回重做时**复用同一个**。 310a2b2 按 isHeartbeat 一刀切回收,等于每次重试都要走 buildPrompt 场景 C 重注入历史。 现在回收策略挂在 CALL_KINDS 表上,判据只有一条:**convId 会不会被下一轮复用** —— 会复用的(pipeline / 人类对话)留着走 TTL,不复用的(心跳 / 日程 / 告警 / 日报)跑完即回收。 不按「是不是后台调用」分:五类后台调用里 pipeline 就是要留的那一类。 守卫补到 12 条(原 3 + kind 标注 5 + 回收策略 4)。对 310a2b2 跑过:8 红 4 绿。 convId 一律用固定字面量而非拼时间戳 —— 撞上 test-id-stability 那道防线后按它的判据改的, 固定之后第二次跑还顺带走了「复用已有对话」那条分支。 文档: - CLAUDE.md 注意事项加一条(新增会话创建路径时必须同时定回收路径,附症状与守卫位置) - 28-followups 守卫清单补第五条,并把「前四条守单一持有者」与第五条「守资源生命周期」 的形状差异写明;顺手修掉表格已有 4 行、结尾却仍写「这三条」的失配 - .env.example 补 AGENT_SESSION_IDLE_MS 全量单测 667/667 绿。重启后 /api/health 正常,心跳照常挂载。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
-
用户授权清理 system/templates/ 的过期引用。全仓库核了 34 处, 结论与预期相反:没有该删的死代码,但有两处正在静默失效。 真正坏掉的(demo-harness-company.js): path.join(ROOT, 'system/templates/base/agent.md') → system/agents/_base/ path.join(ROOT, 'system/templates/base/config.json') → system/agents/_base/ 两处都包在 fs.existsSync() 里,所以目录消失后**不报错**,只是 静默跳过 base 本体的挂载 —— demo 跑出来的 agent 没有四段式骨架, 但脚本照常打印成功。又一个静默降级。 顺带:real-pm-smoke.js 的提示文案、migrate-agent-naming.js 里 已失效的遍历项、docs/README.md 的 qa-judge 落点。 CLAUDE.md 目录速查表原来只有 `system/templates/devloop-*/` 一行, 连 system/agents/ 都没列。换成两行并写清三个容易踩的点:目录才是 数据源头(seedAgents 直接扫目录)、_registry.json 只补 benchmark_score、_ 前缀是保留 id 会被跳过。 **刻意不动的**:server/tests/ 下 30 处引用。它们分两类,都得留 —— ① 记录迁移过程的注释;② 断言目录已不存在的守卫 (`expect(git(['ls-files','--','system/templates'])).toBe('')`、 `expect(fs.existsSync(...)).toBe(false)`)。删掉后者等于删掉 「迁移已完成」的证明。legacy_path 那几个测试夹具同理,是历史数据形态。 验证:三个脚本 node --check 通过;改后的四个路径实测存在。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
-
# Conflicts: # system/agents/master/.claude/scheduled_tasks.json
-
…_DIR move, stray files - CLAUDE.md: document DevLoop subsystem (spec-first workflow, project root/git-vault, mock mode, L1 loop, unit layout, audit trail) and add missing test commands - server/routes/agent-chat.js, server/services/task-service.js: TASK_META_DIR moved from system/agents/.tasks to system/tasklog - system/agents/master/.claude/scheduled_tasks.json: scheduled task state update - remove stray memory/daily/2026-04-02.md and a garbled-filename artifact left under system/agents/digester-youtube-crawler/ Co-Authored-By: Claude Sonnet 5 <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> -
The 50-page PRD HTML totals ~520KB; loading it all costs Claude ~222K tokens just for context. This adds a token-efficient sibling layer: - scripts/extract-spec.js → npm run spec:extract / spec:check Walks docs/prd/newfunction/*.html and produces stripped MD into _spec/. Strategy varies per page (full-extract for SDD/process/data, shell-strip for agents to keep long system prompts intact). Result: 327.9KB MD (~84K tokens) — 38% of full load, saves ~138K tokens for every Agent invocation that reads the spec. - scripts/git-hooks/pre-commit + scripts/install-hooks.sh Pre-commit guard: when any docs/prd/newfunction/*.html changes, the hook checks the corresponding _spec/*.md is up to date; fails commit if stale, telling user to `npm run spec:extract`. Auto-installed via package.json `prepare` script on `npm install`. - docs/prd/newfunction/_spec/ (51 .md files + CONVENTIONS.md) Machine-readable mirror of HTML. Used by: - Coder/Architect/Tester agents when reading spec at runtime - External Claude Code sessions doing reproducibility - CI checks (npm run spec:check) NOT hand-edited; regenerated from HTML by extract-spec.js. - CLAUDE.md: 1-line note directing future agents to read _spec/*.md preferentially, fall back to *.html only for wireframes/SVG/full human-readable context. This is the user's pre-existing scaffolding that the previous commits hadn't pulled in yet. Now tracked + enforced by hook. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
- Fix port to 3010 (was 3000); both server/index.js and server/agent-server.js default to 3010 per config.js - Document the two server entrypoints: index.js (full ArenaSK, run via npm run dev) vs agent-server.js (Agent Chat only, run via start.sh) - Correct counts: 15 routes (not 11), 26 services (not 16), 10 views (not 21) - Remove false 'skills/' top-level dir reference; document actual data/skills/ - Add full test/example/log npm scripts; auto-dev CLI bin; packages list - Add note on body-sanitizer middleware (the source of the JSON warning) - Add brand history note (ArenaSK → LemonBoss) - Keep existing Agentic Self-Correction Loop Prevention warning verbatim Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
…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
-
- Agent as Micro-Container: each agent lives in data/agents/{id}/ with full encapsulation - Persona vs Capability split: agent.md (identity) + .claude/skills/main_skill/SKILL.md (workflow) - Conversations co-located: data/agents/{id}/conversations/ replaces global dir - Meta Skills renamed: meta_hunt, meta_digest, meta_creator, meta_evolving, meta_benchmark, meta_research - Dynamic Hot-Reload: AgentManager.getAgentConfig() falls back to filesystem scan - Parallel Sub-Agent orchestration via Promise.all with multi-terminal UI - Removed SQLite dependency, global skills/ directory, and legacy conversations/ - Full architecture docs: 18-local-filesystem-first-agent-encapsulation.md