@whyshu/argent-engine 0.7.3 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/MANIFEST.json +39 -28
  2. package/engine/VERSION +1 -1
  3. package/engine/scripts/appointment-create.mjs +34 -0
  4. package/engine/scripts/appointment-stop.mjs +18 -0
  5. package/engine/scripts/appointment-worker.mjs +96 -0
  6. package/engine/scripts/appointment_grab.py +327 -0
  7. package/engine/scripts/argent-runner.mjs +223 -0
  8. package/engine/scripts/argent-setup-check.mjs +3 -3
  9. package/engine/scripts/capability-packs.lock.json +33 -39
  10. package/engine/scripts/check-agent-catalog.mjs +1 -1
  11. package/engine/scripts/check-config-catalog.mjs +0 -1
  12. package/engine/scripts/collect-evidence.mjs +2 -5
  13. package/engine/scripts/daily-report.mjs +315 -12
  14. package/engine/scripts/dsh-upgrade.mjs +18 -5
  15. package/engine/scripts/flow-requirements.json +5 -7
  16. package/engine/scripts/flow-timers.sh +1 -1
  17. package/engine/scripts/flow-trigger.sh +1 -1
  18. package/engine/scripts/gen-preset-rows.mjs +20 -0
  19. package/engine/scripts/invoice_stageb.py +20 -1
  20. package/engine/scripts/lib/agent-install.mjs +10 -1
  21. package/engine/scripts/lib/daily-report-core.mjs +124 -16
  22. package/engine/scripts/lib/dsh-versions.mjs +17 -1
  23. package/engine/scripts/lib/ml-ads-core.mjs +204 -0
  24. package/engine/scripts/lib/plugin-packages.mjs +1 -0
  25. package/engine/scripts/ml-ads.mjs +181 -0
  26. package/engine/scripts/ml-oauth-setup.mjs +1 -1
  27. package/engine/scripts/p2-report-run.mjs +102 -0
  28. package/engine/scripts/patches/dsh-session--append-message-shape.patch +34 -9
  29. package/engine/scripts/patches/dsh-session-format-v3-to-v4--turn-outside-replace.patch +44 -0
  30. package/engine/scripts/patches/verify-hardening.mjs +4 -1
  31. package/engine/scripts/patches/verify-turn-outside-replace.mjs +64 -0
  32. package/engine/scripts/poll-fulfillment.sh +1 -1
  33. package/engine/scripts/profile-doctor.mjs +1 -1
  34. package/engine/scripts/python-runtime.sh +16 -4
  35. package/engine/scripts/release-argent.sh +8 -7
  36. package/engine/scripts/session-load-check.mjs +105 -0
  37. package/engine/scripts/sync-scripts.sh +1 -1
  38. package/engine/scripts/xzh-browser.sh +37 -0
  39. package/engine/scripts/xzh_browser.py +49 -0
  40. package/engine/skills/ml-full-appointment/SKILL.md +98 -0
  41. package/engine/version.mjs +1 -1
  42. package/package.json +1 -1
  43. package/engine/scripts/drill-clean-machine.sh +0 -315
  44. package/engine/scripts/install-internal-role.sh +0 -190
  45. package/engine/scripts/install-one-shot.mjs +0 -665
@@ -1,190 +0,0 @@
1
- #!/usr/bin/env bash
2
- # ══════════════════════════════════════════════════════════════════════════════
3
- # install-internal-role.sh — 协作者内置角色一键装配(KB-078 短期路径)
4
- #
5
- # 用途:在同事 PC 上执行后,获得「内置角色」完整开发环境(preset + skill +
6
- # 默认 preset 配置),让协作者本周即可开工官网/项目开发。
7
- #
8
- # 使用方式(需先安装 Argent,安装器见 https://whyshu.com/dl/install-argent.mjs):
9
- # bash install-internal-role.sh --role whyshu-web-dev # 装配官网开发者角色
10
- # bash install-internal-role.sh --role pet-dev # 预留:云宠乐园开发者
11
- # bash install-internal-role.sh --role argent-dev # 预留:Argent 开发者
12
- # bash install-internal-role.sh --role whyshu-web-dev --dry-run # 只打印计划,不执行
13
- # bash install-internal-role.sh --role whyshu-web-dev --repo /path/to/argent-dsh # 指定仓库源
14
- #
15
- # 本脚本做什么:
16
- # 1. 从 argent-dsh 仓库复制角色 preset → ~/.dsh/.agent-presets/argent-<role>/
17
- # (agent.cordis.yml + preset.yml + format-version.txt)
18
- # 2. 复制角色 skill → ~/.dsh/skills/<role>/(SKILL.md,若仓库存在该角色技能)
19
- # 3. 写入/更新 ~/.dsh/settings.yaml 的 agent-presets.default = argent-<role>
20
- # (新会话默认挂载该角色 preset)
21
- # 4. 幂等:重复执行不重复拷贝、不破坏已有配置;输出成功清单
22
- #
23
- # 说明(决策㉛㉜㉝):
24
- # - 不注册飞书 Bot(真人驱动模式:人 @ 使用,不配独立 Bot/事件订阅)
25
- # - 部署走 GitHub Actions(协作者无服务器权限,push main 自动部署官网)
26
- # - 源仓库定位顺序:--repo 参数 > ${ARGENT_REPO} > ~/.argent-dsh(git clone)>
27
- # ~/Code/argent-dsh > 脚本自身所在目录的上级
28
- # ══════════════════════════════════════════════════════════════════════════════
29
- set -euo pipefail
30
-
31
- # ── 参数 ──────────────────────────────────────────────────────────────────────
32
- ROLE=""
33
- DRY_RUN=0
34
- SOURCE=""
35
-
36
- usage() {
37
- sed -n '2,20p' "$0" | sed 's/^# \{0,1\}//'
38
- exit 0
39
- }
40
-
41
- while [[ $# -gt 0 ]]; do
42
- case "$1" in
43
- --role) ROLE="${2:-}"; shift 2 ;;
44
- --dry-run) DRY_RUN=1; shift ;;
45
- --repo) SOURCE="${2:-}"; shift 2 ;;
46
- -h|--help) usage ;;
47
- *) echo "✗ 未知参数: $1"; usage ;;
48
- esac
49
- done
50
-
51
- if [[ -z "${ROLE}" ]]; then
52
- echo "✗ 缺少 --role 参数(如 --role whyshu-web-dev)"
53
- usage
54
- fi
55
-
56
- # ── 路径 ──────────────────────────────────────────────────────────────────────
57
- DSH_HOME="${DSH_HOME:-${HOME}/.dsh}"
58
- PRESET_TARGET="${DSH_HOME}/.agent-presets/argent-${ROLE}"
59
- SKILL_TARGET="${DSH_HOME}/skills/${ROLE}"
60
- SETTINGS="${DSH_HOME}/settings.yaml"
61
-
62
- # 源仓库定位
63
- if [[ -z "${SOURCE}" ]]; then
64
- for cand in "${ARGENT_REPO:-}" "${HOME}/.argent-dsh" "${HOME}/Code/argent-dsh" "$(cd "$(dirname "$0")/.." && pwd)"; do
65
- if [[ -n "$cand" && -d "$cand/presets" && -d "$cand/scripts" ]]; then
66
- SOURCE="$cand"
67
- break
68
- fi
69
- done
70
- fi
71
- if [[ -z "${SOURCE}" || ! -d "${SOURCE}/presets" ]]; then
72
- echo "✗ 未找到 argent-dsh 仓库源(可用 --repo <路径> 指定)"
73
- exit 1
74
- fi
75
- echo "· 源仓库: ${SOURCE}"
76
-
77
- PRESET_SRC="${SOURCE}/presets/argent-${ROLE}"
78
- if [[ ! -d "${PRESET_SRC}" ]]; then
79
- echo "✗ 仓库中不存在角色 preset: presets/argent-${ROLE}(可用 --role whyshu-web-dev / pet-dev / argent-dev 等)"
80
- exit 1
81
- fi
82
- SKILL_SRC="${SOURCE}/skills/${ROLE}"
83
-
84
- # ── 计划 ──────────────────────────────────────────────────────────────────────
85
- plan_preset="复制 preset → ${PRESET_TARGET}"
86
- plan_skill="无 skill 可复制"
87
- if [[ -d "${SKILL_SRC}" && -f "${SKILL_SRC}/SKILL.md" ]]; then
88
- plan_skill="复制 skill → ${SKILL_TARGET}"
89
- fi
90
- plan_settings="设置 agent-presets.default = argent-${ROLE}(${SETTINGS})"
91
-
92
- echo
93
- echo "装配计划(角色 ${ROLE}):"
94
- echo " 1. $plan_preset"
95
- echo " 2. $plan_skill"
96
- echo " 3. $plan_settings"
97
- echo
98
-
99
- # ── 执行 ──────────────────────────────────────────────────────────────────────
100
- done_list=()
101
- skip_list=()
102
-
103
- copy_dir() { # src dst label —— 幂等:已存在且内容一致则跳过
104
- local src="$1" dst="$2" label="$3"
105
- if [[ -d "$dst" ]] && diff -rq "$src" "$dst" >/dev/null 2>&1; then
106
- skip_list+=("$label 已存在且一致(幂等跳过)")
107
- else
108
- mkdir -p "$(dirname "$dst")"
109
- if [[ -d "$dst" ]]; then rm -rf "$dst"; fi
110
- cp -R "$src" "$dst"
111
- if diff -rq "$src" "$dst" >/dev/null 2>&1; then
112
- done_list+=("$label → $dst")
113
- else
114
- echo "✗ $label 复制后校验不一致: $dst"
115
- exit 1
116
- fi
117
- fi
118
- }
119
-
120
- # 1) preset
121
- echo "① preset"
122
- if [[ ${DRY_RUN} -eq 1 ]]; then
123
- echo " [dry-run] $plan_preset"
124
- else
125
- copy_dir "${PRESET_SRC}" "${PRESET_TARGET}" "preset argent-${ROLE}"
126
- fi
127
-
128
- # 2) skill
129
- echo "② skill"
130
- if [[ -d "${SKILL_SRC}" && -f "${SKILL_SRC}/SKILL.md" ]]; then
131
- if [[ ${DRY_RUN} -eq 1 ]]; then
132
- echo " [dry-run] $plan_skill"
133
- else
134
- copy_dir "${SKILL_SRC}" "${SKILL_TARGET}" "skill ${ROLE}"
135
- fi
136
- else
137
- echo " · 仓库无 ${ROLE} 技能目录(跳过;preset 内已含能力定义)"
138
- fi
139
-
140
- # 3) settings.yaml(node 处理:幂等 + 备份)
141
- echo "③ settings.yaml"
142
- if [[ ${DRY_RUN} -eq 1 ]]; then
143
- echo " [dry-run] $plan_settings"
144
- else
145
- if command -v node >/dev/null 2>&1; then
146
- if [[ -f "${SETTINGS}" ]]; then
147
- cp "${SETTINGS}" "${SETTINGS}.bak-$(date +%Y%m%d%H%M%S)" 2>/dev/null || true
148
- fi
149
- out=$(node -e '
150
- const fs = require("fs");
151
- const path = process.argv[1], want = "argent-" + process.argv[2];
152
- let t = ""; try { t = fs.readFileSync(path, "utf8"); } catch {}
153
- if (!/agent-presets:/.test(t)) {
154
- t = t.trimEnd() + "\n\nagent-presets:\n default: " + want + "\n";
155
- fs.writeFileSync(path, t);
156
- console.log("新增 agent-presets.default = " + want);
157
- } else if (new RegExp("^\\s*default:\\s*" + want + "\\s*$", "m").test(t)) {
158
- console.log("已是目标值(幂等跳过)");
159
- } else {
160
- const before = t;
161
- t = t.replace(/^(\s*default:)(\s*)(\S*)(\s*)$/m, "$1$2" + want + "$4");
162
- if (t === before) { console.log("agent-presets 段无 default 行,追加"); t = t.trimEnd() + "\n default: " + want + "\n"; }
163
- fs.writeFileSync(path, t);
164
- console.log("更新 agent-presets.default = " + want);
165
- }
166
- ' "${SETTINGS}" "${ROLE}")
167
- echo " · $out"
168
- if [[ "$out" == *"幂等跳过"* ]]; then
169
- skip_list+=("settings.yaml 已是目标值(幂等跳过)")
170
- else
171
- done_list+=("settings.yaml agent-presets.default = argent-${ROLE}")
172
- fi
173
- else
174
- echo " ✗ 未找到 node(Argent 环境需 Node.js,请先安装)"
175
- exit 1
176
- fi
177
- fi
178
-
179
- # ── 成功清单 ──────────────────────────────────────────────────────────────────
180
- echo
181
- if [[ ${DRY_RUN} -eq 1 ]]; then
182
- echo "✅ [dry-run] 计划完成(未做任何改动)。去掉 --dry-run 执行装配。"
183
- exit 0
184
- fi
185
- echo "✅ 装配完成(角色 ${ROLE})"
186
- for s in "${done_list[@]}"; do echo " ✔ $s"; done
187
- for s in "${skip_list[@]}"; do echo " · $s"; done
188
- echo
189
- echo "下一步:重新打开 Argent 会话(新会话默认挂载 argent-${ROLE} preset),即可开始开发。"
190
- echo "说明:未注册飞书 Bot(真人驱动模式);部署走 GitHub Actions,无需服务器权限。"