wangjia
7884182d2b
feat: 编排器跨项目全局并发上限闸(tsk_erQHNYdn6i9g)
...
新增用户级设置项 globalConcurrency(settings 表,独立于新建项目默认值
来源 concurrency),缺省 0 = 不限,向后兼容无需 DB 迁移。
- store: UserSettings 加 globalConcurrency 字段 + 默认 0;新增
globalInflightCount()(跨所有项目 started run 总数,与 inflightTaskIds 同口径)
- orchestrator.claimTick: 叠加全局闸,与 per-project 闸串联(都过才领);
轮初查一次全局在途、轮内手动 ++,达上限即 return 跨所有项目停止领取
- api: PUT /api/settings 支持 globalConcurrency(空/null 归一为 0)
- web: 侧栏「全局设置」入口 + 模态,编辑/回显/校验(≥0 整数)
- test: 新增全局闸达上限跨项目阻止 / 未达上限正常领取 / 边界 / 轮初短路 用例
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-29 19:11:42 +08:00
wangjia
6bf2b3619c
feat(web): 项目配置面板补全——checks/自动放行/agentRules/预算/角色模型编辑
...
此前 checks、autoApprovePlan/Exec、agentRules、budgetUsd、models 只能经 API 改,
看板无编辑口。现扩展项目「配置」面板:
- 分项检查:lint / typecheck / build 三命令(拼成 checks JSON,全空=null)
- 硬闸/自动放行:autoApprovePlan / autoApproveExec 两个勾选
- 角色模型:executor/planner/reviewer/conflict 四个输入(填模型 id 字符串,
或 {"easy":..,"hard":..} JSON;留空=默认 opus-4.8;非法 JSON 提示报错)
- 项目 Agent 规范(agentRules)textarea
- 成本预算:budgetUsd + budgetPeriod(按天/月)
toggle-config 回填全部新字段;save-config 一并 PATCH。新增 zh/en i18n 标签 +
.cfg-subhead/.cfg-check 样式。web/ 静态、无需 rebuild。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-25 07:34:49 +08:00
wangjia
433b2dc232
feat(web+store): needs_attention 任务显示在审核区,附失败原因
...
- pendingApprovals 扩展到包含 needs_attention,subquery 取最近 executor 失败 error
- Task 类型增加 lastRunError 字段,mappers 映射
- 审核区(renderGates)将 needs_attention 渲染为独立橙色卡片,
展示「需人工确认」标签 + 具体失败原因 + 重新排队/取消按钮
- i18n zh/en 补充 attnLabel/attnReason/attnRequeue/attnCancel/toastRequeued
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-14 14:46:21 +08:00
wangjia
36e8f736e6
fix(web): renderPreview 中 task 变量遮蔽全局 t() 翻译函数导致预览点击无效
...
将 renderPreview 内 const t = tasks.find() 改名为 task,
避免局部变量 t(任务对象)遮蔽全局翻译函数 t(),
使预览面板渲染时抛 't is not a function' 导致面板无法打开。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-14 14:23:56 +08:00
wangjia
33513757a3
fix(web): renderNode 内 t 被 task 参数遮蔽导致 t is not a function
...
renderNode=(t)=> 里 t 是任务对象,line 1418 的 t('depsWait') 调用
全局 i18n 函数时 t 已被遮蔽。在 renderNode 前保存 const i18n=t,
内部改用 i18n(),消除 "t is not a function" 错误。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-14 00:57:52 +08:00
wangjia
3ba66b82d5
feat(web): i18n 补全静态 HTML data-i18n 标签 + 样式 [tsk_6-VbN2XHWT4s]
...
为侧栏/区段/弹窗等静态 HTML 补 data-i18n 属性(36 个 key,均已在 app.js 的 I18N 表定义)+ style.css 配套,与上一提交的 app.js i18n(t()+I18N 表)共同构成完整 zh/en 双语。index.html 结尾完整、key 全部匹配。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-13 23:58:41 +08:00
wangjia
8553939367
feat(web): 看板 zh/en 双语 i18n [tsk_6-VbN2XHWT4s]
...
采用 main 工作树中已完成的完整 i18n 实现(293 个 t() 调用、188 处 I18N、全 UI 接入),此前一直未提交进任何分支。原 i18n 任务 B4 多次因环境(worker 崩/TLS 证书/abort)失败被 requeue 重做,改为直接采用这份现成成果,B4 收口。board 此前已在此版本上运行。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-13 23:54:36 +08:00
wangjia
d1e256b960
merge: 合并失败补救完成后自动收口原任务 [tsk_BagzbKZNAHXV]
...
手工解决 src/api/server.ts 冲突(keep-both):main 的 cleanupTaskRunArtifacts(合并后回收 run 目录)与分支的 findMergeOriginTask/remediateOrigin(补救任务合并成功后自动把原任务标 done)互补,均保留;ensureMergeRemediationTask 调用补 conflictFiles。其余文件(store.ts/types.ts/merge.ts/web/test)自动合并。typecheck + 183 测试全绿。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-13 20:10:00 +08:00
wangjia
1c4a81b3f3
feat(web): SVG 图标集替换 Unicode —— tsk_3uhHOGU0qzj0
...
用 design/assets/icons/ 的 15 个双色 SVG 图标替换现网纯 Unicode 图标:
• 拷贝 design/assets/icons/*.svg → web/assets/icons/(15 个)
• app.js 顶部新增 ICONS 对象 + icon() 内联 helper
• index.html:徽章组(gate/ready/running/deps)、配置按钮(config)、
同步按钮(sync)、搜索输入框(search + filter-search-wrap 包装)、
清除筛选按钮(close)、「新建」/「新建任务」按钮(add)
各区块头加语义图标:project/task/gate/running/flow
• app.js 模板字符串:⛓→deps、✕→close(任务行取消/预览关闭/归档关闭)、
依赖等待标签、ap-reason→reason SVG、分支显示→git、事件项 ev-type→event
• style.css:新增 svg.icon 基础尺寸规则、filter-search-wrap 布局、
各语义上下文 --icon-accent 注入(暗/浅主题均用 CSS 变量自动适配)、
.ap-reason::before 移除 content:'↳' 改用 SVG
• 品牌字符保留不动:▍▮→·— 及状态 CSS 圆点
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-13 15:08:53 +08:00
wangjia
b1d881a4b4
feat: 合并失败→补救→完成 全程事件轨迹与自动收口 [tsk_BagzbKZNAHXV]
...
不新增顶层状态,用 events + result 字段记录完整轨迹:
- 新增 merge.failed / merge.remediated 两类事件
- merge 失败时在原任务时间线记 merge.failed 节点(结构化冲突文件 + 补救任务链接)
- 补救任务成功合并后,findMergeOriginTask 反查原任务,remediateOrigin 自动把原任务标 done
并记 merge.remediated 节点,无需人工 merge:false
- 看板:归档时间线渲染失败/补救节点;结果评审闸显示「合并失败 → 补救任务」横幅
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-13 15:04:39 +08:00
wangjia
10f881130b
style(web): 小圆角 + 审批闸琥珀→紫 + 组件样式对齐 design [tsk_KhcaF4zoESVe]
...
看板重构 B2:对照 design/components 与 design/tokens 精修 web 组件样式。
圆角(采用 --radius-* 令牌,状态点保持正圆):
- xs(3) chip/徽章:StatusChip(.chip)、ComplexityBadge(.cplx)、CountBadge 顶栏 count、
.verdict/.fchip/.fgroup/.gate-kind/.run-st/.t-badge/.t-deps-wait/.agent-run-kind/
.gate-stripe/.metric-model-bar/.gate-count/.ready-count/.doc.md code
- sm(4) 按钮/输入/doc 块:.btn、input/select/textarea、.seg、.bdg、pre.doc、.doc.md、
codeblock、.t-pre、.dep-item/.dep-pick、.detail-action-confirm、archive-size select、
.doc-pending
- md(6) 面板/卡片/toast:.panel、.gate-card、.toast、.filter-bar、.agent-flex/.agent-empty、
.tree-empty、.metric-card/.metric-models、.run-item、.cplx-pop
- lg(10) 模态/预览浮层:.modal、.preview-panel
审批闸 琥珀→紫(--violet/--violet-dim),与 MED(--amber) 区分:
- gate-stripe 斜纹条、gate-head/gate-section 区块头、gate-card 边框、gate-kind 徽章、
bdg-gate 待审批徽章、chip-gate 待审/合状态 chip、gate-count、ev-gatewait 事件、
is-gate 行底色、preview-panel 边框;index.html 审批闸 head-mark 改 violet
- MED 保持琥珀:cplx-medium / seg-m / fc-medium / bdg-blocked / t-deps-wait / dep-item
组件对齐 design 卡片:GateCard 加 overflow:hidden + body 字号 12.5px、gate-title 13px;
浮层阴影统一走 --shadow-pop/modal/toast 令牌;EventItem 圆点 1.5px 微圆角。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-13 14:45:03 +08:00
wangjia
4be02cbf0f
feat(tokens): 设计令牌落地 + 浅色主题骨架 [tsk_pusPU3oCPVfc]
...
在 web/style.css :root 补全缺失令牌:
- --violet / --violet-dim(磷光紫,审批闸色)
- --glow-green/violet/cyan/red(辉光 shadow 值)
- --radius-xs/sm/md/lg/dot(圆角阶梯)
- --space-1..9(间距阶)
- --pad-btn/btn-xs/input/chip/card(控件内边距)
- --shadow-pop/modal/toast(浮层阴影)
- --surface-*/--text-*/--border-*/--accent*/--status-go|gate|bad|run(语义别名)
新增 [data-theme="light"] 完整块,覆盖全部底色、文字、
信号色与辉光变量,确保浅色切换不崩版。
现有 --green/amber/red/cyan 及 @keyframes blink/pulse/rise
均未改动,暗色主题视觉零影响。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-13 14:32:29 +08:00
wangjia
d49192344f
merge: maestro/tsk_lDx6zd-EbA00 [指标统计:执行时长 / 成功率 / 额度消耗估算]
...
# Conflicts:
# web/style.css
2026-06-13 12:01:18 +08:00
maestro
d82e07902f
merge: maestro/tsk_zacmwH3chZpG [tsk_zacmwH3chZpG]
2026-06-13 11:35:53 +08:00
maestro
f70004af11
merge: maestro/tsk_O9q0_u78_NPo [tsk_O9q0_u78_NPo]
2026-06-13 11:35:20 +08:00
wangjia
3696604e13
feat: 指标统计(执行时长/成功率/复审通过率/重试率/额度估算)tsk_lDx6zd-EbA00
...
从 runs/tasks/events 聚合健康度与成本指标,看板新增指标小面板。
- Store.metrics(projectId?):执行时长(avg/p50/p95,未结束与负时长不计)、
executor 成功率、复审/安全 verdict 通过率、failed→queued 重试率 +
needs_attention、按模型额度粗估(时长×档位权重,标注估算)
- src/model/metrics.ts:类型 + 纯函数(percentile/ratio/estimateCostUnits/emptyMetrics)
- API:GET /api/metrics?project=
- web:归档区上方指标面板(数字卡 + 按模型分布),失败/空数据静默隐藏
- test/metrics.test.ts:9 个用例(纯函数/空数据/时长/成功率/复审/重试/按模型/项目过滤)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-13 10:55:56 +08:00
wangjia
13572a5416
feat(complexity): 新增 AUTO·由模型判断 复杂度档位 (tsk_zacmwH3chZpG)
...
新建任务时除手选 hard/medium/easy 外,新增 AUTO 档:先以 medium 落库
占位,建任务后异步用 sonnet 起一次轻量分类调用回填三档结果并记录理由,
不阻塞建任务返回;模型不可用/解析失败一律兜底 medium,绝不报错。
- web 看板:复杂度 seg 增加第四档 AUTO(默认选中,cyan 样式),提交 complexity='auto'
- src/api/server.ts:POST tasks 接受 'auto' → medium 占位 + 异步 classify 回填(可注入 classify 测试)
- src/executor/classify.ts(新增):buildClassifyPrompt/parseClassification/classifyComplexity
复用 cc.ts/models.ts,sonnet 省额度,无工具、限轮限时
- src/executor/models.ts:pickClassifierModel(复用 executor easy 档 + MAESTRO_MODEL_EASY 覆盖)
- src/store/store.ts:applyAutoComplexity 回填复杂度+重置状态+理由入产出字段+广播 task.updated
- test/classify.test.ts:解析映射/兜底、prompt、回填、建任务集成(13 例)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-13 10:46:37 +08:00
wangjia
0957a9049a
feat(transcript): 归档详情内回放执行/复审转录 (tsk_O9q0_u78_NPo)
...
- API:新增 GET /api/runs/:id/transcript,读 run.transcriptRef 指向的
jsonl,逐行解析成脱敏后的结构化消息数组。校验 runId 合法且关联任务/
项目存在;路径只允许在 transcriptDir 下(防目录穿越)。
- 脱敏:只透传 assistant 文本 / tool_use(名+摘要参数) / tool_result(截断)
/ 结论 / 模型回退;命中 secret/token/env 等敏感键名的值剔除为 [已脱敏]。
- 看板 archiveModal:执行历史从"文件路径"换成可展开的消息流,按 type
分类渲染(文本/工具调用/工具结果/结论/回退),长内容折叠,复用 mdToHtml。
executor 与 reviewer/security run 并列可回放。
- Store:新增 getRun(runId)。
- 测试:transcript 解析(样例 jsonl/脱敏/截断/坏行容错/路径穿越)+ 端点
inject(合法/未知 runId/无转录/越界路径)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-13 10:42:57 +08:00
wangjia
72b174fd44
feat: 支持依赖(deps)创建后编辑 (tsk_UQ7sNRM0Yi1L)
...
deps 此前仅建任务时可设,本次让 PATCH /api/tasks/:id 受理 deps,
拆解后可随时调整任务依赖,无需删重建。
- API:PATCH /api/tasks/:id 受理 deps:string[](类型校验)
- Store.patchTask:写 deps 前复用建任务校验(存在/同项目/非自身)
并加 DFS 环检测(拒绝 A→B→A);越权/缺失/成环 → StoreError(400)
- 仅允许在未进入执行链路的状态改 deps(与 complexity 同一组守卫)
- 写后调 reconcileDeps 重算:未满足 ready→blocked、刚补全 blocked→ready,
广播 status.changed
- 看板:任务详情加依赖编辑器(多选当前项目其它任务,排除自身与会成环者),
保存走 PATCH
- 测试:加/删 dep、已 done 依赖放行、环检测、跨项目/缺失拒绝、
执行链路状态拒绝、status.changed 重算(test/patch.test.ts)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-13 10:33:39 +08:00
wangjia
d56b0641c5
merge: maestro/tsk_PbcHccuPmwxV [任务取消/删除的 UI 入口]
...
# Conflicts:
# web/style.css
2026-06-13 10:16:48 +08:00
wangjia
3fc19e47c4
fix(web): 任务树/父任务下拉对异常 depth/id 加固,避免整页崩溃
...
renderParentOptions 的 '· '.repeat(depth-1) 在 depth=0 时抛 RangeError(Invalid count value)、
renderNode 的 t.id.slice(-6) 在 id 缺失时抛 TypeError——任一都会让看板整页崩。
改为 repeat(Math.max(0,(depth||1)-1)) 与 String(t.id||'').slice。
(node:vm + 最小 DOM harness 复现并验证)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-13 09:40:55 +08:00
wangjia
47eeaf1902
merge: maestro/tsk_kmdMuWSn0HUS [配置面板补 verifyCmd / 项目级 model]
...
# Conflicts:
# web/app.js
# web/index.html
2026-06-13 09:02:52 +08:00
wangjia
bb6186902a
feat: 项目 logo + 侧栏拖动排序 + 合并修复(主检出干净时 in-place)
...
- 项目 logo:仓库内文件(logo/icon/favicon 等多路径)→git remote 头像→自定义(URL/相对路径)→
首字母徽章兜底;GET /api/projects/:id/logo(文件流/302),配置面板加 Logo 输入
- 侧栏项目拖动排序:projects.sort_order + POST /api/projects/reorder,乐观更新
- 合并修复:默认分支正被主检出占用时,若工作区干净则直接在主检出 in-place 合并
(用户手动合并的等价操作,安全);脏工作区拒绝并提示提交/暂存或仅通过
- schema: projects.logo / sort_order(ensureColumn 平滑迁移)
测试 75/75(merge 用例改为干净→成功/脏→拒绝)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-13 03:45:24 +08:00
wangjia
b60225779c
feat(tsk_PbcHccuPmwxV): 任务取消/删除 UI 入口(带确认)
...
## 后端
- Store.deleteTask():BFS 收集子孙 id,清理 events,删根节点(子孙/runs/approvals 由 FK CASCADE 自动清除),广播 task.updated{kind:'delete'}
- API POST /api/tasks/:id/cancel:transition → cancelled(复用状态机守卫)
- API DELETE /api/tasks/:id:级联删除任务及子孙
## 前端
- 任务行(task-row):鼠标悬停后右侧出现「✕取消」「🗑删除」浮动按钮,点击弹 confirm() 二次确认(含子孙数提示),stopPropagation 防止触发行展开
- 任务详情(detail):底部行内确认区——「取消任务」显示确认条(确认取消 / 算了),「删除」显示含级联提示的高亮确认条,折叠/切换项目时自动清除确认状态
- 归档详情对话框:底部增加「🗑 删除归档」按钮,confirm() 确认后删除并关闭弹窗
- CSS:.task-row-cancel/.task-row-delete(悬停淡入)、.detail-actions / .detail-action-confirm / .detail-confirm-msg、.archive-modal-actions
## 测试
- 新增 4 个 store 测试:deleteTask 叶子、deleteTask 级联、deleteTask 不存在、transition→cancelled
- 全部 78 条 pass
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-13 03:37:01 +08:00
wangjia
f2c2d9aebd
feat(ui): 配置面板补 verifyCmd / 项目级 model 输入项
...
在 #configPanel 新增一行 form-row,包含「校验命令」(cfgVerifyCmd) 和
「项目 Model」(cfgModel) 两个文本输入;打开面板时从 project 读取当前值,
保存时通过 PATCH /api/projects/:id 写入(空白 → null 清空)。
任务 ID:tsk_kmdMuWSn0HUS
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-13 03:32:23 +08:00
wangjia
740d2c2637
feat: PR 审核流程 + 自动合并 + macOS 通知 + 订阅额度透传 + 归档详情
...
PR 流程(开发→提PR→CodeReview→安全审计→审核→通过即合并):
- reviewer 拆分为 code review 与安全审计两个独立 CC run(kind=reviewer/security),
TaskResult 四字段(summary/verdict + securitySummary/securityVerdict),闸上两节报告两枚结论徽章
- executor/merge.ts: 通过即合并——临时 worktree 内 merge --no-ff,绝不碰用户工作区/不 push;
冲突安全拒绝(报冲突文件);重复合并幂等;合并后回收执行 worktree + 删分支
- decide 路由 merge:false 逃生口 + 看板「仅通过」按钮(目标分支被工作区检出时用)
通知(daemon/notify.ts):
- macOS 原生通知: 进审核闸(复审建议拒绝标⚠)/连续失败需人工/合并完成
- 同任务同类型 60s 抑制、osascript 转义截断、MAESTRO_NOTIFY=0 关闭
订阅额度透传(daemon/usage.ts):
- OAuth usage API(与 Claude Code/claude-hud 同源),凭证 keychain→内存零泄漏
- 60s 成败双缓存+并发去重+5s 超时,失败降级 null
- GET /api/agents 顶层 usage 字段;Agent 面板显示 5h/周用量条+重置倒计时(>80%琥珀/>95%红)
看板与生命周期:
- 归档区: 深度1整树完成沉底,时间倒序分页(尺寸 chip 10/20/50/100 置底)
- 归档详情对话框: 全属性/执行历史与时长/审批记录/状态流转时间线(GET /api/tasks/:id/events)
- 容器收口: 已拆解 Hard 子任务全 done 自动 done(afterDone 逐级向上)
- 同步按钮收进配置面板;执行白名单扩测试命令(npm/go/shellcheck/make/pytest)
- Agent 面板显示调度模式与各复杂度模型;被依赖阻塞→被阻塞
测试: 74/74(新增 merge 6/notify 10/usage 7/容器收口/双复审适配)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-13 03:22:30 +08:00
wangjia
f18db021c3
feat: Phase2 完整管线——score 调度 + 自动复审 + 模型分级 + 归档与详情
...
调度:
- model/scoring.ts: score = 自身分(P0=3/P1=2/P2=1) + 已完成依赖分(链条惯性)
+ 等待解锁的 blocked 任务分(解锁加权),编排器与 nextExecutable 同一打分
- createTask 校验 deps 存在且同项目(依赖图天然无环)
- daemon 重启中断自愈: executing 任务标 failed run 后重新入队(reconcileInterrupted)
执行管线:
- executor/cc.ts: 公共 headless CC 执行器(转录/超时/模型回退重试)
- executor/reviewer.ts: 执行后自动复审(只读 CC 审 diff),固定模板 summary
(做了什么/怎么做/测试/CodeReview/安全Review/结论) + VERDICT 解析
- executor/models.ts: 按复杂度选模型(easy→sonnet/medium→opus/hard→fable5),
env 可覆盖、project.model 最优先、不可用自动回退链
- runner: 测试/构建命令白名单(npm/go/shellcheck/make/pytest),prompt 要求实跑测试
- TaskResult 加 summary/verdict; RunKind 加 reviewer
- 容器收口: 已拆解 Hard 子任务全 done → 容器自动 done(afterDone 逐级向上)
看板:
- 五徽章组(待审批/待执行/执行中/被阻塞/总量,hover 展开,均不含已完成)
- 归档区: 深度1整树完成沉底,时间倒序分页(10/20/50/100 chip 选择)
- 归档详情对话框: 全属性/执行历史与时长/审批记录/状态流转时间线(含相关人或事)
- Agent 面板显示调度模式 + 各复杂度实际模型
- 结果闸展示复审 summary + 建议通过/拒绝徽章
- 筛选修复(组选与单选分离、已拆解移出进行中)、同步按钮收进配置面板、
保存配置自动收起、预览全宽、被依赖阻塞→被阻塞
- API: GET /api/tasks/:id/events(任务级事件时间线)、/api/agents 带 scheduling/models
测试: 49/49(新增 scoring/复审/模型/容器收口/deps 校验/中断恢复)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-13 02:46:37 +08:00
wangjia
fa472a06a7
feat: 同步引擎+Agent配置+依赖自动落位+看板大改(预览/md渲染/筛选/徽章组)
...
后端:
- src/sync/todo-sync.ts: todo.json 单向同步引擎(导入=首次同步,幂等,source_ref 映射,
subs 复杂度修正为 easy,旧侧 done 历史事实优先 forceDone)
- 依赖自动落位:ready 意图按 deps 落位 blocked,依赖全 done 自动放行,
daemon 启动 reconcileDeps 对账,手动绕过会弹回
- 新 API: PATCH projects/:id(autonomy/concurrency)、POST :id/sync、GET /api/agents、
PATCH tasks/:id(title/priority/complexity 重置)
- daemon 定时同步(MAESTRO_SYNC_INTERVAL 默认 300s) + project.synced 事件
- priority 语义翻转: P0 最高/P1 默认/P2 最低,取值限 0..2,排序/映射/MCP/CLI 全跟进
- 静态服务发 no-cache 头(修浏览器吃旧 CSS/JS)
- schema 迁移: tasks.source_ref / projects.last_sync_at(ensureColumn 平滑升级旧库)
看板:
- 全屏预览模式(94vh 读完整方案+就地裁决,Esc/遮罩/裁决自动关闭)
- 产出 markdown 渲染为 HTML(零依赖渲染器,转义优先)
- 任务树筛选(复杂度/状态分组/关键字)+ 顶栏徽章组(待审批/可执行/执行中,hover 展开)
- 依赖可视化:详情 DEPS 区块 + 行内⛓等依赖 + 锚点跳转定位
- 按钮收敛:提交评审/编辑产出移除(CC 经 MCP 操作),界面只留用户动作
- Agent 执行面板 + 项目配置(并发/工作模式)+ 同步按钮
测试:21 个全过(新增 sync 幂等/迁移/patch/依赖落位/对账幂等)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-12 23:58:28 +08:00
wangjia
c6e66baa19
feat: Phase1 完整交付——Web 看板(frontend-design) + MCP server(12 工具) + CLI/导入器
...
- web/: phosphor 调度台风格纯静态看板,审批闸内联 accept/reject(拒绝必填意见),WS 实时
- src/api/static.ts: 手写静态服务(路径穿越防护),daemon 接入
- src/mcp/: stdio MCP server,@modelcontextprotocol/sdk 1.29.0,12 工具薄封装 REST
- src/cli/: 零依赖 CLI(project/task/next/approvals/import-todo),旧 todo.json 导入器
- 实测: pangolin 18 条旧任务导入 45 条;端到端验证通过
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-12 21:23:08 +08:00