✨ feat(vscode): 看板默认显示团队工单,同事的卡只读并贴头像
看板范围默认从「只看我的」改为「团队全部」,同事移交或推进的工单不用 手动切开关就能看见。同事的卡片按 Gitea 归属(assignee 优先,无 assignee 退回创建者)判定为只读:禁止拖列、开会话、实施、合并分支、删 worktree、 删改工单,卡片右上角贴归属人头像,详情面板属性表整体消毒并显示只读徽章。 看 PR 改动、勾已查看、生成文件摘要属于本机审查动作,照常放行。 扩展侧在消息分发前统一拦截需要归属人身份的消息,兜住前端快照过期或工单 刚被重新指派的竞态;webhook 单卡上板时同步归属,避免增量卡漏进门禁。 头像由扩展侧带 token 抓回转 data URI 下发,绕开 webview CSP 对外链图片 的限制,按 URL 进程内缓存。 Claude-Session: https://claude.ai/code/session_01KSgcQwf1mWrb8qeTKFvJbV
This commit is contained in:
1 parent
e8963ac2a2
commit
9167b86708
26 files changed
+550
-34
No files matched your search
@@ -0,0 +1,41 @@
|
||||
/**
|
||||
* 同事工单的写操作门禁:看板范围切到「团队全部」后,别人的卡也在板上,
|
||||
* 前端会把按钮藏掉,但 webview 消息仍可能因为竞态(卡刚被重新指派、
|
||||
* 快照过期)送到扩展侧,所以这里做最终拦截——归属不是我就直接丢掉。
|
||||
*
|
||||
* 只拦「会改工单状态或在本机替别人跑会话」的消息。看 PR 改动、勾已查看、
|
||||
* 生成文件摘要属于审查动作,落地在本机,照常放行。
|
||||
*/
|
||||
|
||||
/** 必须是工单归属人才能执行的消息类型。 */
|
||||
export const OWNER_ONLY_MESSAGE_TYPES: ReadonlySet<string> = new Set([
|
||||
// 会话:在本机替别人开/恢复/关闭会话没有意义,worktree 也不在本机
|
||||
'session/resume',
|
||||
'session/focus',
|
||||
'session/resume-review',
|
||||
'session/resume-test',
|
||||
'session/start-test',
|
||||
'session/close-tab',
|
||||
'brainstorm/continue',
|
||||
'issue/implement',
|
||||
// 工单状态:写回 Gitea
|
||||
'column/change',
|
||||
'issue/delete',
|
||||
'issue/close',
|
||||
'issue/generate-pr-diff-summary',
|
||||
'issue/update-auto-review',
|
||||
'issue/update-profile-path',
|
||||
'issue/update-brainstorm-profile-path',
|
||||
'issue/update-test-profile-path',
|
||||
'dependency/set',
|
||||
'dependency/clear',
|
||||
'handoff/users',
|
||||
'handoff/start',
|
||||
// 分支与 worktree
|
||||
'git/merge-preview',
|
||||
'worktree/delete',
|
||||
])
|
||||
|
||||
export function isOwnerOnlyMessage(type: string): boolean {
|
||||
return OWNER_ONLY_MESSAGE_TYPES.has(type)
|
||||
}
|
||||
Reference in new issue
Block a user