Files
dsh_ai1net_server/归档/试验与样例/poc-dsh-local/workspace-scoped-picker/normalize-picker-patch.py
T
admin c1b5e4d966 chore(工作区): 全量入库 + 补齐 .gitignore(以工作区为准)
- 变更规模:新增 514 / 修改 62 / 重命名 155 / 删除 4(归档重组与文档轮次)
- .gitignore 修:`归档/**/db-cwd归一-备份-*/` —— 原规则写绝对层级(归档/db-cwd归一-…),
  目录搬进 归档/配置与备份/ 后**静默失效**,43 MB 的 DB 备份又变成未跟踪
- .gitignore 补:嵌套 git 内部数据(归档/内嵌git-20261008/、归档/skills-git-旧线-20261007/dotgit-原样移出/)
- .gitignore 补:运行态与部署副本(.workbuddy/collab/、.workbuddy/tools/、.workbuddy/.load-pending、.workbuddy/tmp-*)
- .gitignore 补:备份件(*.bak-*)
- 未跟踪文件从 2190 降到 890(其余为 归档/ 归档件与 .workbuddy/memory/ 知识文件,按口径入库)
2026-10-10 23:13:22 +08:00

56 lines
2.2 KiB
Python

#!/usr/bin/env python3
"""归一化 profile 的 cordis.patch.yml:删除所有「平台段」(任意标记形式)后,追加唯一一份标准段。
用法: python3 normalize-picker-patch.py [--dry-run] <patch文件> [<patch文件> ...]
"""
import io
import sys
BEGIN_RE = '# >>> platform: workspace-scoped-picker'
END_RE = '# <<< platform: workspace-scoped-picker'
BLOCK = """# >>> platform: workspace-scoped-picker (managed by ensure-workspace-picker.cjs)
# 目录选择器收敛(档案 18 v3):官方对话框 UI 保留(单独插入 client 面),
# host 面换成受限实现(根=自有 ws,越界拒绝);插件 client 面再注入 CSS 隐藏「改路径」入口。
- insert:
- id: workspace-scoped-picker
name: "@dsh-local/workspace-scoped-picker"
- id: ui-directory-picker-browse
name: "@deepseek-ai/dsh-client-ui-directory-picker-browse"
- id: directory-picker
name: "@deepseek-ai/dsh-host-directory-picker-auto"
disabled: true
# <<< platform: workspace-scoped-picker
"""
dry = '--dry-run' in sys.argv
files = [a for a in sys.argv[1:] if not a.startswith('--')]
for path in files:
src = io.open(path, encoding='utf-8').read()
lines = src.split('\n')
kept, removed, skipping = [], 0, False
for line in lines:
if line.startswith(BEGIN_RE):
skipping = True
removed += 1
continue
if skipping:
if line.startswith(END_RE):
skipping = False
continue
kept.append(line)
body = '\n'.join(kept).strip()
if body in ('', '[]'):
body = ''
out = (body + '\n\n' if body else '') + BLOCK
# 校验:每个关键 id 恰好出现一次
checks = {
'workspace-scoped-picker': out.count('- id: workspace-scoped-picker'),
'ui-directory-picker-browse': out.count('- id: ui-directory-picker-browse'),
'directory-picker': out.count('- id: directory-picker'),
}
print(' %s: 移除旧平台段 %d 份 → %s' % (path.split('/')[-4][:8], removed,
'OK ' + str(checks) if all(v == 1 for v in checks.values()) else 'CHECK ' + str(checks)))
if not dry:
io.open(path, 'w', encoding='utf-8', newline='').write(out)