@boyingliu01/xp-gate 0.18.5 → 0.19.0

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 (254) hide show
  1. package/adapter-common.sh +27 -0
  2. package/adapters/gate-3.sh +0 -0
  3. package/adapters/gate-4.sh +0 -0
  4. package/adapters/gate-7.sh +0 -0
  5. package/adapters/gate-8.sh +0 -0
  6. package/adapters/gate-9.sh +0 -0
  7. package/adapters/powershell.sh +85 -33
  8. package/adapters/typescript.sh +8 -8
  9. package/build-integrity/__tests__/import-resolver.test.ts +22 -0
  10. package/build-integrity/__tests__/orchestrator.test.ts +1 -2
  11. package/build-integrity/gate-10.ts +7 -0
  12. package/gate-12-file-hygiene.sh +230 -0
  13. package/hooks/adapter-common.sh +27 -0
  14. package/hooks/gate-10.sh +105 -0
  15. package/hooks/gate-12-file-hygiene.sh +0 -0
  16. package/hooks/lib/validate-code-walkthrough.cjs +125 -0
  17. package/hooks/pre-commit +130 -33
  18. package/hooks/pre-push +15 -91
  19. package/lib/__tests__/check-version.test.js +67 -46
  20. package/lib/__tests__/doctor.test.js +7 -6
  21. package/lib/__tests__/gate-runner.test.js +267 -0
  22. package/lib/__tests__/init.test.js +32 -0
  23. package/lib/__tests__/npm-package.test.js +13 -0
  24. package/lib/__tests__/phase-transition.test.js +604 -12
  25. package/lib/__tests__/sprint-discovery.test.ts +0 -1
  26. package/lib/__tests__/sprint-status-rework.test.js +100 -1
  27. package/lib/__tests__/update-hooks.test.js +143 -10
  28. package/lib/__tests__/upgrade-exec.test.js +73 -45
  29. package/lib/__tests__/upgrade-skill-sync.test.js +1 -1
  30. package/lib/__tests__/upgrade.test.js +12 -11
  31. package/lib/doctor.js +2 -1
  32. package/lib/gate-runner.js +68 -23
  33. package/lib/init.js +34 -5
  34. package/lib/install-skill.js +1 -0
  35. package/lib/mattpocock-license-verdict.json +1 -1
  36. package/lib/phase-transition.js +203 -23
  37. package/lib/shared-paths.js +2 -0
  38. package/lib/sprint-status.js +15 -4
  39. package/lib/test-alignment.ts +3 -13
  40. package/lib/update-hooks.js +129 -15
  41. package/mock-policy/AGENTS.md +5 -5
  42. package/mock-policy/__tests__/gate-m3.test.ts +0 -5
  43. package/mock-policy/__tests__/scope-scanner.test.ts +8 -2
  44. package/mutation/AGENTS.md +4 -4
  45. package/mutation/__tests__/mutmut-runner.test.ts +443 -2
  46. package/mutation/__tests__/update-baseline.test.ts +0 -2
  47. package/mutation/runners/mutmut-runner.ts +67 -17
  48. package/package.json +9 -3
  49. package/plugins/claude-code/.claude-plugin/plugin.json +1 -1
  50. package/plugins/claude-code/skills/clipboard-vision/SKILL.md +47 -0
  51. package/plugins/claude-code/skills/clipboard-vision/__tests__/clipboard-vision-distribution.test.cjs +65 -0
  52. package/plugins/claude-code/skills/clipboard-vision/__tests__/clipboard-vision-security.test.cjs +185 -0
  53. package/plugins/claude-code/skills/clipboard-vision/__tests__/clipboard-vision.Tests.ps1 +138 -0
  54. package/plugins/claude-code/skills/clipboard-vision/__tests__/clipboard-vision.test.cjs +273 -0
  55. package/plugins/claude-code/skills/clipboard-vision/describe-clipboard.ps1 +115 -0
  56. package/plugins/claude-code/skills/clipboard-vision/describe-clipboard.sh +161 -0
  57. package/plugins/claude-code/skills/clipboard-vision/scripts/clipboard-vision.ps1 +86 -0
  58. package/plugins/claude-code/skills/clipboard-vision/scripts/clipboard-vision.sh +137 -0
  59. package/plugins/claude-code/skills/delphi-review/.delphi-config.json.example +24 -27
  60. package/plugins/claude-code/skills/delphi-review/AGENTS.md +13 -12
  61. package/plugins/claude-code/skills/delphi-review/INSTALL.md +15 -17
  62. package/plugins/claude-code/skills/delphi-review/SKILL.md +30 -29
  63. package/plugins/claude-code/skills/delphi-review/opencode.json.delphi.example +6 -10
  64. package/plugins/claude-code/skills/delphi-review/references/code-walkthrough.md +33 -49
  65. package/plugins/claude-code/skills/delphi-review/references/requirements.md +66 -54
  66. package/plugins/claude-code/skills/delphi-review/references/round-templates.md +7 -7
  67. package/plugins/claude-code/skills/sprint-flow/AGENTS.md +5 -5
  68. package/plugins/claude-code/skills/sprint-flow/SKILL.md +4 -4
  69. package/plugins/claude-code/skills/sprint-flow/references/components/skill-invocations.md +2 -2
  70. package/plugins/claude-code/skills/sprint-flow/references/force-levels.md +37 -35
  71. package/plugins/claude-code/skills/sprint-flow/references/orchestration-rules.md +1 -1
  72. package/plugins/claude-code/skills/sprint-flow/references/phase-1-prep.md +1 -1
  73. package/plugins/claude-code/skills/sprint-flow/references/phase-2-design.md +24 -14
  74. package/plugins/claude-code/skills/sprint-flow/references/phase-4-verify.md +6 -6
  75. package/plugins/claude-code/skills/sprint-flow/references/phase-overview.md +2 -2
  76. package/plugins/claude-code/skills/test-specification-alignment/AGENTS.md +4 -4
  77. package/plugins/dsh/README.md +25 -0
  78. package/plugins/dsh/cordis.patch.yml +7 -0
  79. package/plugins/dsh/package.json +70 -0
  80. package/plugins/dsh/scripts/prepack.cjs +82 -0
  81. package/plugins/dsh/skills/admin-template-guidelines/SKILL.md +113 -0
  82. package/plugins/dsh/skills/admin-template-guidelines/references/rule-1.md +91 -0
  83. package/plugins/dsh/skills/admin-template-guidelines/references/rule-2.md +155 -0
  84. package/plugins/dsh/skills/admin-template-guidelines/references/rule-3.md +70 -0
  85. package/plugins/dsh/skills/admin-template-guidelines/references/rule-4.md +154 -0
  86. package/plugins/dsh/skills/admin-template-guidelines/references/rule-5.md +126 -0
  87. package/plugins/dsh/skills/admin-template-guidelines/references/rule-6.md +180 -0
  88. package/plugins/dsh/skills/batch-grill-me/SKILL.md +15 -0
  89. package/plugins/dsh/skills/clipboard-vision/SKILL.md +47 -0
  90. package/plugins/dsh/skills/clipboard-vision/__tests__/clipboard-vision-distribution.test.cjs +65 -0
  91. package/plugins/dsh/skills/clipboard-vision/__tests__/clipboard-vision-security.test.cjs +185 -0
  92. package/plugins/dsh/skills/clipboard-vision/__tests__/clipboard-vision.Tests.ps1 +138 -0
  93. package/plugins/dsh/skills/clipboard-vision/__tests__/clipboard-vision.test.cjs +273 -0
  94. package/plugins/dsh/skills/clipboard-vision/describe-clipboard.ps1 +115 -0
  95. package/plugins/dsh/skills/clipboard-vision/describe-clipboard.sh +161 -0
  96. package/plugins/dsh/skills/clipboard-vision/scripts/clipboard-vision.ps1 +86 -0
  97. package/plugins/dsh/skills/clipboard-vision/scripts/clipboard-vision.sh +137 -0
  98. package/plugins/dsh/skills/delphi-review/.delphi-config.json.example +70 -0
  99. package/plugins/dsh/skills/delphi-review/AGENTS.md +67 -0
  100. package/plugins/dsh/skills/delphi-review/INSTALL.md +150 -0
  101. package/plugins/dsh/skills/delphi-review/SKILL.md +559 -0
  102. package/plugins/dsh/skills/delphi-review/hooks.md +19 -0
  103. package/plugins/dsh/skills/delphi-review/opencode.json.delphi.example +52 -0
  104. package/plugins/dsh/skills/delphi-review/references/code-walkthrough.md +470 -0
  105. package/plugins/dsh/skills/delphi-review/references/orchestrator-dispatch.md +64 -0
  106. package/plugins/dsh/skills/delphi-review/references/requirements.md +402 -0
  107. package/plugins/dsh/skills/delphi-review/references/round-templates.md +134 -0
  108. package/plugins/dsh/skills/delphi-review/scripts/verify-consensus.sh +43 -0
  109. package/plugins/dsh/skills/delphi-review/tools.md +29 -0
  110. package/plugins/dsh/skills/domain-modeling/ADR-FORMAT.md +64 -0
  111. package/plugins/dsh/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
  112. package/plugins/dsh/skills/domain-modeling/SKILL.md +74 -0
  113. package/plugins/dsh/skills/grill-with-docs/SKILL.md +7 -0
  114. package/plugins/dsh/skills/grilling/SKILL.md +12 -0
  115. package/plugins/dsh/skills/improve-codebase-architecture/SKILL.md +156 -0
  116. package/plugins/dsh/skills/ralph-loop/SKILL.md +198 -0
  117. package/plugins/dsh/skills/ralph-loop/references/components.md +113 -0
  118. package/plugins/dsh/skills/ralph-loop/references/phase-2-build-ralph.md +89 -0
  119. package/plugins/dsh/skills/ralph-loop/references/workflow-details.md +99 -0
  120. package/plugins/dsh/skills/ralph-loop/templates/progress-log.md +36 -0
  121. package/plugins/dsh/skills/sprint-flow/AGENTS.md +103 -0
  122. package/plugins/dsh/skills/sprint-flow/SKILL.md +411 -0
  123. package/plugins/dsh/skills/sprint-flow/__tests__/sprint-flow.test.cjs +457 -0
  124. package/plugins/dsh/skills/sprint-flow/hooks.md +18 -0
  125. package/plugins/dsh/skills/sprint-flow/references/components/memory.md +87 -0
  126. package/plugins/dsh/skills/sprint-flow/references/components/middleware.md +75 -0
  127. package/plugins/dsh/skills/sprint-flow/references/components/skill-invocations.md +105 -0
  128. package/plugins/dsh/skills/sprint-flow/references/components/system-prompt.md +27 -0
  129. package/plugins/dsh/skills/sprint-flow/references/components/tool-descriptions.md +95 -0
  130. package/plugins/dsh/skills/sprint-flow/references/force-levels.md +204 -0
  131. package/plugins/dsh/skills/sprint-flow/references/orchestration-rules.md +236 -0
  132. package/plugins/dsh/skills/sprint-flow/references/phase-1-prep.md +294 -0
  133. package/plugins/dsh/skills/sprint-flow/references/phase-2-design.md +273 -0
  134. package/plugins/dsh/skills/sprint-flow/references/phase-3-build.md +348 -0
  135. package/plugins/dsh/skills/sprint-flow/references/phase-4-verify.md +225 -0
  136. package/plugins/dsh/skills/sprint-flow/references/phase-5-ship.md +222 -0
  137. package/plugins/dsh/skills/sprint-flow/references/phase-6-close.md +266 -0
  138. package/plugins/dsh/skills/sprint-flow/references/phase-overview.md +486 -0
  139. package/plugins/dsh/skills/sprint-flow/scripts/verify-sprint-state.sh +38 -0
  140. package/plugins/dsh/skills/sprint-flow/templates/auto-estimate-learning-log.md +136 -0
  141. package/plugins/dsh/skills/sprint-flow/templates/auto-estimate-output-template.md +110 -0
  142. package/plugins/dsh/skills/sprint-flow/templates/emergent-issues-template.md +120 -0
  143. package/plugins/dsh/skills/sprint-flow/templates/pain-document-template.md +115 -0
  144. package/plugins/dsh/skills/sprint-flow/templates/sprint-progress-template.md +140 -0
  145. package/plugins/dsh/skills/sprint-flow/templates/sprint-summary-template.md +121 -0
  146. package/plugins/dsh/skills/sprint-flow/tools.md +29 -0
  147. package/plugins/dsh/skills/test-driven-development/SKILL.md +371 -0
  148. package/plugins/dsh/skills/test-driven-development/testing-anti-patterns.md +299 -0
  149. package/plugins/dsh/skills/test-specification-alignment/AGENTS.md +56 -0
  150. package/plugins/dsh/skills/test-specification-alignment/SKILL.md +205 -0
  151. package/plugins/dsh/skills/test-specification-alignment/references/alignment-verification-algorithm.md +493 -0
  152. package/plugins/dsh/skills/test-specification-alignment/references/phase2-constraint-enforcement.md +431 -0
  153. package/plugins/dsh/skills/test-specification-alignment/references/specification-format.md +348 -0
  154. package/plugins/dsh/skills/to-issues/SKILL.md +277 -0
  155. package/plugins/dsh/src/command.test.ts +102 -0
  156. package/plugins/dsh/src/command.ts +75 -0
  157. package/plugins/dsh/src/contract.test.ts +62 -0
  158. package/plugins/dsh/src/gate-runner.test.ts +100 -0
  159. package/plugins/dsh/src/gate-runner.ts +58 -0
  160. package/plugins/dsh/src/index.test.ts +97 -0
  161. package/plugins/dsh/src/index.ts +94 -0
  162. package/plugins/dsh/src/skills.test.ts +58 -0
  163. package/plugins/dsh/tsconfig.build.json +13 -0
  164. package/plugins/dsh/tsconfig.json +19 -0
  165. package/plugins/dsh/vitest.config.ts +8 -0
  166. package/plugins/opencode/package.json +1 -1
  167. package/plugins/opencode/scripts/prepack.cjs +1 -0
  168. package/plugins/opencode/skills/clipboard-vision/SKILL.md +47 -0
  169. package/plugins/opencode/skills/clipboard-vision/__tests__/clipboard-vision-distribution.test.cjs +65 -0
  170. package/plugins/opencode/skills/clipboard-vision/__tests__/clipboard-vision-security.test.cjs +185 -0
  171. package/plugins/opencode/skills/clipboard-vision/__tests__/clipboard-vision.Tests.ps1 +138 -0
  172. package/plugins/opencode/skills/clipboard-vision/__tests__/clipboard-vision.test.cjs +273 -0
  173. package/plugins/opencode/skills/clipboard-vision/describe-clipboard.ps1 +115 -0
  174. package/plugins/opencode/skills/clipboard-vision/describe-clipboard.sh +161 -0
  175. package/plugins/opencode/skills/clipboard-vision/scripts/clipboard-vision.ps1 +86 -0
  176. package/plugins/opencode/skills/clipboard-vision/scripts/clipboard-vision.sh +137 -0
  177. package/plugins/opencode/skills/delphi-review/.delphi-config.json.example +24 -27
  178. package/plugins/opencode/skills/delphi-review/AGENTS.md +13 -12
  179. package/plugins/opencode/skills/delphi-review/INSTALL.md +15 -17
  180. package/plugins/opencode/skills/delphi-review/SKILL.md +30 -29
  181. package/plugins/opencode/skills/delphi-review/opencode.json.delphi.example +6 -10
  182. package/plugins/opencode/skills/delphi-review/references/code-walkthrough.md +33 -49
  183. package/plugins/opencode/skills/delphi-review/references/requirements.md +66 -54
  184. package/plugins/opencode/skills/delphi-review/references/round-templates.md +7 -7
  185. package/plugins/opencode/skills/sprint-flow/AGENTS.md +5 -5
  186. package/plugins/opencode/skills/sprint-flow/SKILL.md +4 -4
  187. package/plugins/opencode/skills/sprint-flow/references/components/skill-invocations.md +2 -2
  188. package/plugins/opencode/skills/sprint-flow/references/force-levels.md +37 -35
  189. package/plugins/opencode/skills/sprint-flow/references/orchestration-rules.md +1 -1
  190. package/plugins/opencode/skills/sprint-flow/references/phase-1-prep.md +1 -1
  191. package/plugins/opencode/skills/sprint-flow/references/phase-2-design.md +24 -14
  192. package/plugins/opencode/skills/sprint-flow/references/phase-4-verify.md +6 -6
  193. package/plugins/opencode/skills/sprint-flow/references/phase-overview.md +2 -2
  194. package/plugins/opencode/skills/test-specification-alignment/AGENTS.md +4 -4
  195. package/plugins/qoder/plugin.json +1 -1
  196. package/plugins/qoder/skills/clipboard-vision/SKILL.md +47 -0
  197. package/plugins/qoder/skills/clipboard-vision/__tests__/clipboard-vision-distribution.test.cjs +65 -0
  198. package/plugins/qoder/skills/clipboard-vision/__tests__/clipboard-vision-security.test.cjs +185 -0
  199. package/plugins/qoder/skills/clipboard-vision/__tests__/clipboard-vision.Tests.ps1 +138 -0
  200. package/plugins/qoder/skills/clipboard-vision/__tests__/clipboard-vision.test.cjs +273 -0
  201. package/plugins/qoder/skills/clipboard-vision/clipboard-vision/SKILL.md +47 -0
  202. package/plugins/qoder/skills/clipboard-vision/clipboard-vision/__tests__/clipboard-vision-distribution.test.cjs +65 -0
  203. package/plugins/qoder/skills/clipboard-vision/clipboard-vision/__tests__/clipboard-vision-security.test.cjs +185 -0
  204. package/plugins/qoder/skills/clipboard-vision/clipboard-vision/__tests__/clipboard-vision.Tests.ps1 +138 -0
  205. package/plugins/qoder/skills/clipboard-vision/clipboard-vision/__tests__/clipboard-vision.test.cjs +273 -0
  206. package/plugins/qoder/skills/clipboard-vision/clipboard-vision/scripts/clipboard-vision.ps1 +86 -0
  207. package/plugins/qoder/skills/clipboard-vision/clipboard-vision/scripts/clipboard-vision.sh +137 -0
  208. package/plugins/qoder/skills/clipboard-vision/scripts/clipboard-vision.ps1 +86 -0
  209. package/plugins/qoder/skills/clipboard-vision/scripts/clipboard-vision.sh +137 -0
  210. package/plugins/qoder/skills/delphi-review/.delphi-config.json.example +3 -11
  211. package/plugins/qoder/skills/delphi-review/AGENTS.md +15 -17
  212. package/plugins/qoder/skills/delphi-review/INSTALL.md +12 -12
  213. package/plugins/qoder/skills/delphi-review/SKILL.md +58 -25
  214. package/plugins/qoder/skills/delphi-review/opencode.json.delphi.example +1 -1
  215. package/plugins/qoder/skills/delphi-review/references/code-walkthrough.md +33 -49
  216. package/plugins/qoder/skills/sprint-flow/AGENTS.md +5 -5
  217. package/plugins/qoder/skills/sprint-flow/SKILL.md +2 -2
  218. package/plugins/qoder/skills/sprint-flow/references/force-levels.md +38 -35
  219. package/plugins/qoder/skills/sprint-flow/references/phase-1-prep.md +1 -1
  220. package/plugins/qoder/skills/sprint-flow/references/phase-2-design.md +48 -6
  221. package/plugins/qoder/skills/sprint-flow/references/phase-4-verify.md +5 -6
  222. package/plugins/qoder/skills/test-specification-alignment/AGENTS.md +4 -4
  223. package/principles/AGENTS.md +4 -4
  224. package/scripts/__tests__/sync-package-content.test.js +30 -0
  225. package/scripts/delphi-external-review.cjs +194 -63
  226. package/scripts/sync-package-content.js +9 -2
  227. package/skills/clipboard-vision/SKILL.md +47 -0
  228. package/skills/clipboard-vision/__tests__/clipboard-vision-distribution.test.cjs +65 -0
  229. package/skills/clipboard-vision/__tests__/clipboard-vision-security.test.cjs +185 -0
  230. package/skills/clipboard-vision/__tests__/clipboard-vision.Tests.ps1 +138 -0
  231. package/skills/clipboard-vision/__tests__/clipboard-vision.test.cjs +273 -0
  232. package/skills/clipboard-vision/describe-clipboard.ps1 +115 -0
  233. package/skills/clipboard-vision/describe-clipboard.sh +161 -0
  234. package/skills/clipboard-vision/scripts/clipboard-vision.ps1 +86 -0
  235. package/skills/clipboard-vision/scripts/clipboard-vision.sh +137 -0
  236. package/skills/delphi-review/.delphi-config.json.example +24 -27
  237. package/skills/delphi-review/AGENTS.md +13 -12
  238. package/skills/delphi-review/INSTALL.md +15 -17
  239. package/skills/delphi-review/SKILL.md +30 -29
  240. package/skills/delphi-review/opencode.json.delphi.example +6 -10
  241. package/skills/delphi-review/references/code-walkthrough.md +33 -49
  242. package/skills/delphi-review/references/requirements.md +66 -54
  243. package/skills/delphi-review/references/round-templates.md +7 -7
  244. package/skills/sprint-flow/AGENTS.md +5 -5
  245. package/skills/sprint-flow/SKILL.md +4 -4
  246. package/skills/sprint-flow/references/components/skill-invocations.md +2 -2
  247. package/skills/sprint-flow/references/force-levels.md +37 -35
  248. package/skills/sprint-flow/references/orchestration-rules.md +1 -1
  249. package/skills/sprint-flow/references/phase-1-prep.md +1 -1
  250. package/skills/sprint-flow/references/phase-2-design.md +24 -14
  251. package/skills/sprint-flow/references/phase-4-verify.md +6 -6
  252. package/skills/sprint-flow/references/phase-overview.md +2 -2
  253. package/skills/test-specification-alignment/AGENTS.md +4 -4
  254. package/sprint-gate.sh +291 -0
@@ -0,0 +1,137 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ api_base="${CLIPBOARD_VISION_API_BASE:-http://127.0.0.1:11434/v1}"
5
+ model="${CLIPBOARD_VISION_MODEL:-}"
6
+ api_key="${CLIPBOARD_VISION_API_KEY:-}"
7
+ max_bytes="${CLIPBOARD_VISION_MAX_BYTES:-10485760}"
8
+ allow_remote=false
9
+ confirm_remote=""
10
+ while [ "$#" -gt 0 ]; do
11
+ case "$1" in
12
+ --allow-remote) allow_remote=true; shift ;;
13
+ --confirm-remote)
14
+ [ "$#" -ge 2 ] || { printf '%s\n' 'Error: --confirm-remote requires the disclosed token' >&2; exit 2; }
15
+ confirm_remote="$2"
16
+ shift 2
17
+ ;;
18
+ --help)
19
+ printf '%s\n' 'Usage: clipboard-vision.sh [--allow-remote --confirm-remote TOKEN]'
20
+ exit 0
21
+ ;;
22
+ *) printf 'Error: unknown option: %s\n' "$1" >&2; exit 2 ;;
23
+ esac
24
+ done
25
+
26
+ [ -n "$model" ] || { printf '%s\n' 'Error: CLIPBOARD_VISION_MODEL is required' >&2; exit 2; }
27
+ case "$max_bytes" in *[!0-9]*|'') printf '%s\n' 'Error: CLIPBOARD_VISION_MAX_BYTES must be a positive integer' >&2; exit 2 ;; esac
28
+ [ "$max_bytes" -gt 0 ] || { printf '%s\n' 'Error: CLIPBOARD_VISION_MAX_BYTES must be positive' >&2; exit 2; }
29
+
30
+ endpoint_info=$(python3 - "$api_base" "$model" <<'PY'
31
+ import hashlib
32
+ import ipaddress
33
+ import sys
34
+ import urllib.parse
35
+
36
+ url = urllib.parse.urlparse(sys.argv[1])
37
+ if url.scheme not in {"http", "https"} or not url.hostname or url.username or url.password or url.query or url.fragment:
38
+ raise SystemExit(2)
39
+ try:
40
+ loopback = ipaddress.ip_address(url.hostname).is_loopback
41
+ except ValueError:
42
+ loopback = False
43
+ try:
44
+ port = url.port or (443 if url.scheme == "https" else 80)
45
+ except ValueError:
46
+ raise SystemExit(2)
47
+ print("local" if loopback else "remote")
48
+ hostname = url.hostname.lower()
49
+ print(hostname)
50
+ display_host = f"[{hostname}]" if ":" in hostname else hostname
51
+ base_path = url.path.rstrip("/")
52
+ effective = f"{url.scheme.lower()}://{display_host}:{port}{base_path}/chat/completions"
53
+ print(effective)
54
+ print(hashlib.sha256(f"{effective}\n{sys.argv[2]}".encode()).hexdigest())
55
+ PY
56
+ ) || { printf '%s\n' 'Error: invalid CLIPBOARD_VISION_API_BASE' >&2; exit 2; }
57
+ endpoint_kind=$(printf '%s\n' "$endpoint_info" | sed -n '1p')
58
+ effective_endpoint=$(printf '%s\n' "$endpoint_info" | sed -n '3p')
59
+ expected_confirmation=$(printf '%s\n' "$endpoint_info" | sed -n '4p')
60
+
61
+ if [ "$endpoint_kind" = remote ]; then
62
+ printf 'Remote disclosure: clipboard image data will be sent to %s using model %s.\n' "$effective_endpoint" "$model" >&2
63
+ printf 'Confirmation token for this canonical endpoint and model: %s\n' "$expected_confirmation" >&2
64
+ if [ "$allow_remote" != true ] || [ "$confirm_remote" != "$expected_confirmation" ]; then
65
+ printf '%s\n' 'Error: remote endpoint requires --allow-remote and the disclosed --confirm-remote token' >&2
66
+ exit 2
67
+ fi
68
+ fi
69
+
70
+ work_dir=$(mktemp -d "${TMPDIR:-/tmp}/clipboard-vision.XXXXXX")
71
+ image_file="$work_dir/clipboard.png"
72
+ request_file="$work_dir/request.json"
73
+ response_file="$work_dir/response.json"
74
+ auth_file="$work_dir/auth-header"
75
+ cleanup() { rm -rf -- "$work_dir"; }
76
+ trap cleanup EXIT HUP INT TERM
77
+
78
+ if command -v pngpaste >/dev/null 2>&1; then
79
+ pngpaste "$image_file"
80
+ elif command -v wl-paste >/dev/null 2>&1; then
81
+ wl-paste --no-newline --type image/png > "$image_file"
82
+ elif command -v import >/dev/null 2>&1; then
83
+ import clipboard: "$image_file"
84
+ else
85
+ printf '%s\n' 'Error: install pngpaste, wl-paste, or ImageMagick import' >&2
86
+ exit 2
87
+ fi
88
+
89
+ [ -s "$image_file" ] || { printf '%s\n' 'Error: clipboard does not contain an image' >&2; exit 2; }
90
+ image_bytes=$(wc -c < "$image_file" | tr -d '[:space:]')
91
+ [ "$image_bytes" -le "$max_bytes" ] || { printf 'Error: clipboard image exceeds %s bytes\n' "$max_bytes" >&2; exit 2; }
92
+
93
+ python3 - "$image_file" "$request_file" "$model" <<'PY'
94
+ import base64
95
+ import json
96
+ import pathlib
97
+ import sys
98
+
99
+ image = base64.b64encode(pathlib.Path(sys.argv[1]).read_bytes()).decode("ascii")
100
+ request = {
101
+ "model": sys.argv[3],
102
+ "messages": [{"role": "user", "content": [
103
+ {"type": "text", "text": "Describe this clipboard image."},
104
+ {"type": "image_url", "image_url": {"url": "data:image/png;base64," + image}},
105
+ ]}],
106
+ }
107
+ pathlib.Path(sys.argv[2]).write_text(json.dumps(request), encoding="utf-8")
108
+ PY
109
+
110
+ curl_args=(--silent --show-error --max-redirs 0 --output "$response_file" --write-out '%{http_code}' --header 'Content-Type: application/json' --data-binary "@$request_file")
111
+ if [ -n "$api_key" ]; then
112
+ case "$api_key" in *$'\n'*|*$'\r'*) printf '%s\n' 'Error: invalid CLIPBOARD_VISION_API_KEY' >&2; exit 2 ;; esac
113
+ umask 077
114
+ printf 'Authorization: Bearer %s\n' "$api_key" > "$auth_file"
115
+ chmod 600 "$auth_file"
116
+ curl_args+=(--header "@$auth_file")
117
+ fi
118
+ status=$(curl "${curl_args[@]}" "$effective_endpoint") || { printf '%s\n' 'Error: vision API request failed' >&2; exit 1; }
119
+ case "$status" in 2??) ;; *) printf 'Error: vision API returned HTTP %s (body redacted)\n' "$status" >&2; exit 1 ;; esac
120
+
121
+ result=$(python3 - "$response_file" <<'PY'
122
+ import json
123
+ import pathlib
124
+ import sys
125
+
126
+ try:
127
+ data = json.loads(pathlib.Path(sys.argv[1]).read_text(encoding="utf-8"))
128
+ value = data["choices"][0]["message"]["content"]
129
+ if not isinstance(value, str):
130
+ raise ValueError
131
+ except (KeyError, IndexError, TypeError, ValueError, json.JSONDecodeError):
132
+ raise SystemExit(2)
133
+ print(value)
134
+ PY
135
+ ) || { printf '%s\n' 'Error: invalid vision API response (body redacted)' >&2; exit 1; }
136
+
137
+ printf '%s\n' "$result"
@@ -4,9 +4,10 @@
4
4
  "======================================",
5
5
  "Copy this file to .delphi-config.json and fill in your API keys.",
6
6
  "Place this file alongside SKILL.md in the delphi-review skill directory.",
7
- "At least 2 of the 3 experts should use different providers for cross-bias protection.",
7
+ "Exactly three roles are required, with distinct trimmed executable model IDs.",
8
8
  "",
9
- "Provider field: set provider to \"local\" to use the orchestrator model (mixed mode)."
9
+ "Provider and vendor are unrestricted. provider=local is a fallback and cannot count as a successful expert execution.",
10
+ "cross_provider_required is deprecated and ignored with warning code cross_provider_required_ignored."
10
11
  ],
11
12
 
12
13
  "active_profile": "default",
@@ -14,53 +15,47 @@
14
15
  "profiles": {
15
16
  "default": {
16
17
  "providers": {
17
- "deepseek": {
18
- "base_url": "https://api.deepseek.com/v1",
19
- "api_key": "YOUR_DEEPSEEK_API_KEY"
20
- },
21
- "zhipu": {
22
- "base_url": "https://open.bigmodel.cn/api/paas/v4",
23
- "api_key": "YOUR_ZHIPU_API_KEY"
24
- },
25
- "dashscope": {
18
+ "bailian-tp": {
26
19
  "base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
27
- "api_key": "YOUR_DASHSCOPE_API_KEY"
20
+ "api_key": "YOUR_API_KEY"
28
21
  }
29
22
  },
30
23
  "experts": {
31
24
  "architecture": {
32
- "provider": "deepseek",
33
- "model": "deepseek-chat"
25
+ "provider": "bailian-tp",
26
+ "model": "qwen-plus"
34
27
  },
35
28
  "technical": {
36
- "provider": "zhipu",
37
- "model": "glm-5.2"
29
+ "provider": "bailian-tp",
30
+ "model": "deepseek-v3"
38
31
  },
39
32
  "feasibility": {
40
- "provider": "dashscope",
41
- "model": "qwen-3.8-plus"
33
+ "provider": "bailian-tp",
34
+ "model": "glm-4.5"
42
35
  }
43
36
  }
44
37
  },
45
38
 
46
39
  "starter": {
47
- "$comment": "Mixed mode: only 1 external API, others use orchestrator model",
40
+ "$comment": "One provider and token plan serving three distinct models",
48
41
  "providers": {
49
- "deepseek": {
50
- "base_url": "https://api.deepseek.com/v1",
51
- "api_key": "YOUR_DEEPSEEK_API_KEY"
42
+ "bailian-tp": {
43
+ "base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
44
+ "api_key": "YOUR_API_KEY"
52
45
  }
53
46
  },
54
47
  "experts": {
55
48
  "architecture": {
56
- "provider": "deepseek",
57
- "model": "deepseek-chat"
49
+ "provider": "bailian-tp",
50
+ "model": "qwen-plus"
58
51
  },
59
52
  "technical": {
60
- "provider": "local"
53
+ "provider": "bailian-tp",
54
+ "model": "deepseek-v3"
61
55
  },
62
56
  "feasibility": {
63
- "provider": "local"
57
+ "provider": "bailian-tp",
58
+ "model": "glm-4.5"
64
59
  }
65
60
  }
66
61
  }
@@ -68,6 +63,8 @@
68
63
 
69
64
  "consensus": {
70
65
  "threshold_percent": 90,
71
- "max_review_rounds": 5
66
+ "max_review_rounds": 5,
67
+ "distinct_models_required": true,
68
+ "cross_provider_required": true
72
69
  }
73
70
  }
@@ -1,12 +1,12 @@
1
1
  # SKILLS/DELPHI-REVIEW KNOWLEDGE BASE
2
2
 
3
- **Generated:** 2026-07-29
4
- **Commit:** 05d23ae
5
- **Branch:** main
6
- **Version:** 0.18.5.0
3
+ **Generated:** 2026-08-24
4
+ **Commit:** a1a4683
5
+ **Branch:** dsh-plugin
6
+ **Version:** 0.19.0.0
7
7
 
8
8
  ## OVERVIEW
9
- Delphi Consensus Review — multi-round anonymous expert review (≥90% threshold, 3 experts from ≥2 providers, domestic models only). Supports design + code-walkthrough modes.
9
+ Delphi Consensus Review — multi-round anonymous expert review (≥90% threshold, exactly 3 experts with distinct executable model IDs). Supports design, requirements, and code-walkthrough modes.
10
10
 
11
11
  ## STRUCTURE
12
12
  ```
@@ -25,14 +25,14 @@ skills/delphi-review/
25
25
  | Task | Location | Notes |
26
26
  |------|----------|-------|
27
27
  | Core methodology | SKILL.md | Delphi process, expert roles, consensus rules |
28
- | Code-walkthrough | references/code-walkthrough.md | Pre-push mode: 20 files/500 LOC limit |
29
- | Config example | .delphi-config.json.example | 3 experts, domestic models |
28
+ | Code-walkthrough | references/code-walkthrough.md | Pre-push mode: complete review evidence with no hard file/LOC threshold |
29
+ | Config example | .delphi-config.json.example | 3 experts, distinct models |
30
30
 
31
31
  ## CONVENTIONS
32
32
  - 3 experts anonymous in Round 1 (no cross-expert bias)
33
33
  - ≥90% consensus threshold (was 95%, now unified to 90%)
34
34
  - Max 5 rounds before forcing decision
35
- - Cross-provider required: experts from ≥2 different providers (model list read from `opencode.json` agent config, not hardcoded)
35
+ - Provider/vendor/nationality unrestricted; exactly three distinct trimmed requested model IDs are required
36
36
  - Model selection: reads `delphi-reviewer-*` agent `model` fields from `opencode.json`
37
37
  - No hardcoded model lists — models defined by user's `opencode.json` configuration
38
38
  - Code-walkthrough mode: triggered on git push, stores result in .code-walkthrough-result.json
@@ -42,25 +42,26 @@ skills/delphi-review/
42
42
  - Do NOT terminate before achieving true consensus (≥90%)
43
43
  - Do NOT reveal other experts' opinions during Round 1
44
44
  - Do NOT accept partial agreement without resolution
45
- - Do NOT skip code-walkthrough when over thresholds (BLOCK + user decision)
45
+ - Do NOT auto-skip or bypass code-walkthrough based on change size; review large diffs completely or split them by user choice
46
46
  - Do NOT degrade to single model on API errors (BLOCK)
47
47
  - Do NOT declare complete without writing .code-walkthrough-result.json
48
- - Do NOT use foreign models (Anthropic/GPT/Gemini)
48
+ - Do NOT treat `provider: local` fallback as an executed expert
49
49
 
50
50
  ## UNIQUE STYLES
51
51
  - Anonymous expert reviews (Round 1)
52
52
  - Statistical consensus measurement (≥90% threshold)
53
- - Two modes: design review + code-walkthrough
53
+ - Three modes: requirements review + design review + code-walkthrough
54
54
  - Pre-push integration: .code-walkthrough-result.json stores commit hash + verdict
55
55
  - Delphi guard in claude-code plugin: blocks Edit/Write before APPROVAL
56
56
 
57
57
  ## COMMANDS
58
58
  ```bash
59
59
  /delphi-review # Design review mode
60
+ /delphi-review --mode requirements # Phase 2 R1 requirements review
60
61
  /delphi-review --mode code-walkthrough # Pre-push code walkthrough
61
62
  ```
62
63
 
63
64
  ## NOTES
64
65
  - Used by pre-push hook for code-walkthrough validation
65
66
  - Delphi guard (claude-code plugin) reads .sprint-state/delphi-reviewed.json
66
- - Code-walkthrough result must match commit hash for verification
67
+ - Code-walkthrough result must match commit hash for verification
@@ -5,10 +5,10 @@ This guide walks you through setting up the Delphi consensus review skill in you
5
5
  ## Prerequisites
6
6
 
7
7
  - OpenCode installed and configured
8
- - At least **2 different model providers** available (cross-provider requirement prevents homogenized blind spots)
9
- - Access to at least 3 different models (for 3-expert mode) or 2 models (for 2-expert mode)
8
+ - Exactly **3 callable expert model configurations** are required.
9
+ - The three configurations must use distinct trimmed executable model IDs. They may share one provider and token plan.
10
10
 
11
- > **Why cross-provider?** Using models from the same vendor (e.g., all OpenAI) means they share training data and biases, defeating the purpose of multi-expert consensus.
11
+ > Provider, vendor, gateway, and model nationality are unrestricted. The enforced diversity boundary is three distinct requested model IDs, not provider diversity.
12
12
 
13
13
  ## Quick Setup (3 steps)
14
14
 
@@ -32,11 +32,8 @@ Then replace the provider/model placeholders:
32
32
  "model": "YOUR_PROVIDER/YOUR_MODEL_A"
33
33
 
34
34
  // After (your config):
35
- "model": "openai/gpt-4o"
36
- // or
37
- "model": "anthropic/claude-sonnet-4-20250514"
38
- // or
39
- "model": "bailian-coding-plan/qwen3.6-plus"
35
+ "model": "bailian-tp/qwen-plus"
36
+ // The other two role model fields must be different trimmed IDs.
40
37
  ```
41
38
 
42
39
  ### Step 3: Ensure provider configuration exists
@@ -73,7 +70,7 @@ For custom providers (like Ali Bailian), add a provider entry:
73
70
 
74
71
  ## Model Recommendations
75
72
 
76
- The skill requires at least 2 experts for code changes, 3 for architecture decisions. Here are recommended model selections:
73
+ The skill requires exactly three experts for every mode. Choose three models that are callable through your configured provider.
77
74
 
78
75
  | Expert Role | Recommended | Alternatives |
79
76
  |-------------|-------------|-------------|
@@ -81,10 +78,11 @@ The skill requires at least 2 experts for code changes, 3 for architecture decis
81
78
  | **Technical (Expert B)** | Claude Haiku | Qwen-Coder, DeepSeek-Coder, GPT-4o-mini |
82
79
  | **Feasibility (Expert C)** | Claude Opus | GPT-4, Gemini 2.5 Pro, Qwen-Max |
83
80
 
84
- **Minimum viable setup** (2-expert mode):
85
- - Expert A: Any reasoning-strong model
86
- - Expert B: Any code-understanding-strong model
87
- - **Must be from different providers**
81
+ **Minimum viable setup**:
82
+ - Expert A: architecture model
83
+ - Expert B: technical model
84
+ - Expert C: feasibility model
85
+ - All three requested model IDs must be distinct. A `provider: local` fallback does not count.
88
86
 
89
87
  ## Configuration File Reference
90
88
 
@@ -92,13 +90,13 @@ The skill requires at least 2 experts for code changes, 3 for architecture decis
92
90
 
93
91
  | Field | Description | Default |
94
92
  |-------|-------------|---------|
95
- | `num_experts` | Number of experts to use (2 or 3) | 3 |
93
+ | `num_experts` | Number of experts to use | 3, fixed |
96
94
  | `experts.architecture` | Architecture reviewer configuration | Required |
97
95
  | `experts.technical` | Technical reviewer configuration | Required |
98
96
  | `experts.feasibility` | Feasibility reviewer configuration | Required for 3-expert mode |
99
97
  | `consensus.threshold_percent` | Agreement threshold | 90 |
100
98
  | `consensus.max_review_rounds` | Maximum review rounds | 5 |
101
- | `consensus.cross_provider_required` | Require different providers | true |
99
+ | `consensus.cross_provider_required` | Deprecated and ignored; emits `cross_provider_required_ignored` | false or omitted |
102
100
 
103
101
  ### `opencode.json` agent block
104
102
 
@@ -133,11 +131,11 @@ You forgot to replace the placeholder. Search for `YOUR_PROVIDER` in your openco
133
131
 
134
132
  ### Both experts gave identical feedback
135
133
 
136
- Your models are from the same provider. Configure agents to use different providers.
134
+ Shared providers are allowed. Configure three distinct executable model IDs and verify all three calls succeed.
137
135
 
138
136
  ### Review takes too long / costs too much
139
137
 
140
- Reduce to 2-expert mode in `.delphi-config.json`: set `num_experts: 2`.
138
+ Do not reduce the expert count. Use three callable models and keep the threshold and round bounds unchanged.
141
139
 
142
140
  ## Advanced: JSON Schema Validation
143
141
 
@@ -4,8 +4,8 @@ version: 1.1.0
4
4
  description: >
5
5
  Performs multi-round anonymous expert consensus review using the Delphi method. Supports
6
6
  design review (default), code-walkthrough (--mode code-walkthrough), and requirements
7
- (lightweight, --mode requirements) modes. Uses 2-3 experts from at least 2 different domestic
8
- model providers with a >=90% statistical consensus threshold.
7
+ (lightweight, --mode requirements) modes. Uses exactly three experts with distinct executable
8
+ model IDs and a >=90% statistical consensus threshold.
9
9
  Outputs structured verdict (APPROVED/PASS_WITH_CAVEATS/REQUEST_CHANGES/BLOCKED).
10
10
 
11
11
  WHAT: Anonymous multi-expert review with iterative consensus building for designs, plans,
@@ -187,9 +187,9 @@ tools_denied:
187
187
 
188
188
  **In Scope:**
189
189
  - Multi-round anonymous expert consensus review (design + code-walkthrough modes)
190
- - 2-3 experts from different providers with statistical consensus (>= 90%)
190
+ - Exactly three experts with distinct normalized executable model IDs and statistical consensus (>= 90%)
191
191
  - Structured verdict: APPROVED / PASS_WITH_CAVEATS / REQUEST_CHANGES
192
- - Domestic models only (no Anthropic/OpenAI/Google)
192
+ - Model nationality, vendor, provider, and gateway are unrestricted.
193
193
 
194
194
  **Out of Scope:**
195
195
  - Does NOT implement code changes (review only, implementation is separate)
@@ -248,12 +248,12 @@ tools_denied:
248
248
  ## Workflow
249
249
 
250
250
  1. **Step 0: Input Validation** — Check input contains reviewable content (design doc/code/spec/diff). Empty input → `[DelphiReview:BLOCKED]`.
251
- 2. **Round 1: Anonymous Independent Review** — Experts review without seeing each other's opinions. Output individual verdict JSON.
252
- 3. **Consensus Check** — Consensus >=90% AND all APPROVED → complete.
253
- 4. **Round 2: Exchange Opinions** — Experts see others' opinions, re-evaluate.
254
- 5. **Round 3: Final Positions** — Final stance, output disagreements if any.
255
- 6. **Fix & Re-Review** — REQUEST_CHANGES → fix Critical+Major → restart from Round 2.
256
- 7. **Generate Output** — Consensus report + specification.yaml (design) or `.code-walkthrough-result.json` (walkthrough) + `delphi-reviewed.json`.
251
+ 2. **Round 1: Anonymous Independent Review** — Invoke architecture, technical, and feasibility independently without exposing their opinions to one another. Every successful result must use `result_type=delphi_expert_result`.
252
+ 3. **Execution Verification** — Verify that all three results succeeded and that their `requested_model` values are three distinct trimmed IDs. A local fallback (`provider: local`) is not an executed expert and cannot satisfy this check; a local hosted endpoint configured as an ordinary callable provider can.
253
+ 4. **Consensus Check** — Aggregate all three successful expert results. Consensus >=90% AND all APPROVED → complete. One expert result is never global approval.
254
+ 5. **Rounds 2-5: Exchange and Final Positions** — If needed, expose prior aggregate evidence, re-evaluate, and stop at the first approved consensus or after five rounds.
255
+ 6. **Failure Handling** — Any expert failure, missing result, duplicate model ID, or unverifiable execution blocks the review. Do not substitute a local fallback or silently reduce the expert count.
256
+ 7. **Generate Output** — Write the consensus report and mode-specific evidence only after aggregation. For code walkthrough, bind the exact-HEAD result after aggregation.
257
257
 
258
258
  ## Activation (MANDATORY for L1 Trigger Detection)
259
259
 
@@ -277,7 +277,7 @@ Each round MUST output a structured round marker:
277
277
 
278
278
  **Rules**:
279
279
  - Every round marker MUST appear as a separate, identifiable line
280
- - Round numbering MUST be sequential (1, 2, 3)
280
+ - Round numbering MUST be sequential (1 through at most 5)
281
281
  - After each round, output consensus summary: `consensus_ratio=N/N`, `verdict_status: converging | stable | diverging`
282
282
  - Final round MUST output verdict: `APPROVED | PASS_WITH_CAVEATS | REQUEST_CHANGES | PROCESS_BLOCK`
283
283
 
@@ -316,16 +316,16 @@ Each round MUST output a structured round marker:
316
316
 
317
317
  | 配置 | 专家 | 适用场景 |
318
318
  |------|------|---------|
319
- | 2 专家(默认) | A(架构) + B(实现) | 代码变更、小型设计 |
320
- | 3 专家 | A(架构) + B(实现) + C(可行性) | 架构决策、需求文档 |
319
+ | 3 专家(固定) | A(架构) + B(实现) + C(可行性) | 所有评审模式 |
321
320
 
322
321
  ### 模型选择策略(强制 — 平台适配)
323
322
 
324
323
  **关键原则**:
325
- - ✅ 三个专家必须来自 **至少 2 家不同 provider**
326
- - ❌ 禁止 hardcode 模型名称
327
- - ❌ 禁止三个专家全部使用同一 provider 的模型
328
- - ❌ 禁止使用 Anthropic/OpenAI/Google 等国外模型
324
+ - ✅ 必须配置 architecture、technical、feasibility 三个专家角色
325
+ - ✅ 三个角色必须使用三个不同的 trimmed、可执行模型 ID
326
+ - ✅ 模型国籍、厂商、provider 和 gateway 不受限制
327
+ - ✅ 三个角色可以共享一个 provider 和 token 计划
328
+ - ❌ `provider: local` 的特殊 fallback 不能计为一次成功执行
329
329
 
330
330
  #### Qoder 平台(推荐 — Custom Agent 模式)
331
331
 
@@ -345,7 +345,7 @@ Qoder 环境下使用 **Custom Agent** 机制,每个专家是一个独立的 c
345
345
 
346
346
  OpenCode 环境下通过 `opencode.json` 的 agent 配置 + `.delphi-config.json` 调用外部 API:
347
347
  - **MUST 从 `opencode.json` 的 agent 配置中读取模型**
348
- - 通过 `scripts/delphi-external-review.cjs` 调用各 provider 的 OpenAI 兼容 API
348
+ - 通过 `scripts/delphi-external-review.cjs` 调用各 provider 的兼容 API
349
349
  - 需要用户自行配置 API key(环境变量注入)
350
350
 
351
351
  ### 共识阈值
@@ -418,10 +418,7 @@ Phase 0: 准备 → Round 1: 匿名独立评审 → 共识检查
418
418
 
419
419
  ## Output Format (MANDATORY for L3)
420
420
 
421
- **⚠️ Single vs Multi-Expert Output**:
422
- - **Multi-Expert Mode (default)**: MUST use the full JSON schema below. Each expert outputs independently; the orchestrator aggregates into `consensus_report`.
423
- - **Single Reviewer Mode** (explicit `--single`): MAY use simplified text template: `[DelphiReview] verdict=APPROVED|REQUEST_CHANGES|BLOCKED confidence=N/10 issues=[critical:N, major:N, minor:N] summary: [1-2 sentences]`.
424
- - **Never mix formats**.
421
+ Every Delphi mode MUST use the full JSON schema below. Architecture, technical, and feasibility each output independently; the orchestrator verifies all three executions before aggregating `consensus_report`. There is no single-reviewer Delphi approval path.
425
422
 
426
423
  ```json
427
424
  {
@@ -451,13 +448,15 @@ Phase 0: 准备 → Round 1: 匿名独立评审 → 共识检查
451
448
  "mode": "requirements",
452
449
  "verdict": "APPROVED|GAPS_FOUND",
453
450
  "timestamp": "2026-07-25T10:30:00Z",
451
+ "consensus_ratio": 1.0,
454
452
  "requirements_hash": "<SHA-256 hex digest>",
455
453
  "head_commit": "<git rev-parse HEAD>",
456
454
  "context_file_used": "CONTEXT.md",
457
455
  "round": 1,
458
456
  "expert_verdicts": [
459
- { "role": "architecture", "verdict": "APPROVED", "confidence": 9 },
460
- { "role": "feasibility", "verdict": "APPROVED", "confidence": 8 }
457
+ { "role": "architecture", "verdict": "APPROVED", "confidence": 9, "result_type": "delphi_expert_result", "requested_model": "provider/model-a" },
458
+ { "role": "technical", "verdict": "APPROVED", "confidence": 8, "result_type": "delphi_expert_result", "requested_model": "provider/model-b" },
459
+ { "role": "feasibility", "verdict": "APPROVED", "confidence": 8, "result_type": "delphi_expert_result", "requested_model": "provider/model-c" }
461
460
  ],
462
461
  "requirements_statement": "<short summary of what was reviewed>",
463
462
  "gaps_found": [],
@@ -466,6 +465,8 @@ Phase 0: 准备 → Round 1: 匿名独立评审 → 共识检查
466
465
  }
467
466
  ```
468
467
 
468
+ Schema-v2 Phase 2 requires `requirements_statement`, `timestamp`, `consensus_ratio`, `expert_verdicts`, `head_commit`, and `requirements_hash`. The hash is SHA-256 of the exact concatenation `requirements_statement + project-relative context file UTF-8 content if used + timestamp YYYY-MM-DD`; context paths must remain inside the project after realpath resolution.
469
+
469
470
  **Anti-patterns mapping:**
470
471
  - `Round 1 → "评审完成"` → MUST NOT have `verdict: APPROVED` if `critical_issues` exist
471
472
  - `只处理 Critical,忽略 Major` → MUST include `major_concerns` array
@@ -476,7 +477,7 @@ Phase 0: 准备 → Round 1: 匿名独立评审 → 共识检查
476
477
  ## Terminal State Checklist
477
478
 
478
479
  - [ ] Phase 0 完成(文档验证 + 专家分配)
479
- - [ ] Round 1-3 完成(所有专家评审)
480
+ - [ ] 已完成所需轮次(最多 5 轮,每轮三位专家均执行)
480
481
  - [ ] 问题共识比例 >=90%
481
482
  - [ ] 所有 Critical Issues 已解决,Major Concerns 已处理
482
483
  - [ ] 最终裁决是 **APPROVED** 或 **APPROVED_WITH_MINOR**
@@ -512,11 +513,11 @@ Phase 0: 准备 → Round 1: 匿名独立评审 → 共识检查
512
513
  |---------|---------|
513
514
  | Round 1 未 APPROVED 就"评审完成" | 迭代直到 APPROVED,修复后重新评审 |
514
515
  | 只处理 Critical,忽略 Major | 零容忍:Critical/Major 全部必须处理 |
515
- | 单专家自评 | 至少 2 位不同 provider 的专家 |
516
+ | 单专家自评 | 必须运行 architecture、technical、feasibility 三位专家,并聚合三份成功结果 |
516
517
  | 用户说"时间紧急"就跳过 | 评审是投资不是开销 |
517
518
  | "专家几乎一致"就通过 | "几乎" = 不一致,继续到 >=90% |
518
- | 使用 Anthropic/GPT/Gemini | 必须使用国产开源模型 |
519
- | 三个专家同一厂家 | 必须来自至少 2 家不同厂家 |
519
+ | 使用任何国籍或厂商的模型 | 模型国籍和厂商均不受限制,仍必须满足三个 distinct executable model IDs |
520
+ | 三个专家同一 provider | 允许共享 provider,只要三个 requested_model IDs distinct 且每个调用成功 |
520
521
 
521
522
  **Code-walkthrough 专属 Anti-Patterns** → 详见 `references/code-walkthrough.md`
522
523
 
@@ -531,7 +532,7 @@ Phase 0: 准备 → Round 1: 匿名独立评审 → 共识检查
531
532
  | 要求跳过评审 | "skip review", "不用评审", "跳过评审" | → 提醒评审是投资而非开销 |
532
533
  | 时间压力 | "来不及", "时间紧", "emergency" | → 提醒时间紧迫正是需要评审的时刻 |
533
534
  | 提前终止 | Round 1 后用户说 "可以了", "够了" | → BLOCK: 评审未达终止条件 |
534
- | 单专家自评 | 用户仅指定 1 个专家 | → 提醒至少需要 2 位专家 |
535
+ | 单专家自评 | 用户仅指定 1 个专家 | → BLOCK:Delphi 必须执行 architecture、technical、feasibility 三位专家 |
535
536
  | 无文档输入 | 仅触发词,无设计/代码内容 | → `[DelphiReview:BLOCKED]` |
536
537
 
537
538
  ---
@@ -3,23 +3,19 @@
3
3
  "Delphi Review Agent Configuration Template",
4
4
  "===========================================",
5
5
  "Copy the relevant 'agent' block below into your opencode.json.",
6
- "Replace YOUR_PROVIDER/YOUR_MODEL with your actual provider and model names.",
7
- "At least 2 of the 3 agents should use different providers for cross-bias protection."
6
+ "Replace the example model IDs with three callable IDs available through your configured provider.",
7
+ "The three model fields must be different after trimming; providers may be shared."
8
8
  ],
9
9
 
10
10
  "$example_providers": {
11
- "OpenAI": "openai/gpt-4o",
12
- "Anthropic": "anthropic/claude-sonnet-4-20250514",
13
- "Ali_Bailian": "bailian-coding-plan/qwen3.6-plus",
14
- "Google_Gemini": "google/gemini-2.5-pro",
15
- "DeepSeek": "deepseek/deepseek-chat"
11
+ "SharedProviderExample": "bailian-tp/qwen-plus"
16
12
  },
17
13
 
18
14
  "agent": {
19
15
  "delphi-reviewer-architecture": {
20
16
  "description": "Delphi expert reviewer for architecture perspective. Focuses on requirements alignment, system design, and high-level coherence.",
21
17
  "mode": "subagent",
22
- "model": "YOUR_PROVIDER/YOUR_MODEL_A",
18
+ "model": "bailian-tp/qwen-plus",
23
19
  "prompt": "You are a Delphi expert reviewer specializing in architecture and requirements alignment. Review the input for: 1) Alignment with stated goals 2) Architectural coherence 3) System-level implications 4) Trade-offs and alternatives. Output structured review with verdict (APPROVED/REQUEST_CHANGES/REJECTED) and confidence level.",
24
20
  "tools": {
25
21
  "read": true,
@@ -31,7 +27,7 @@
31
27
  "delphi-reviewer-technical": {
32
28
  "description": "Delphi expert reviewer for technical depth. Focuses on implementation details, code correctness, and edge cases. Used in delphi-review.",
33
29
  "mode": "subagent",
34
- "model": "YOUR_PROVIDER/YOUR_MODEL_B",
30
+ "model": "bailian-tp/deepseek-v3",
35
31
  "prompt": "You are a Delphi expert reviewer specializing in technical implementation. Review the input for: 1) Implementation correctness 2) Code quality and patterns 3) Edge cases and error handling 4) Performance implications. Output structured review with verdict (APPROVED/REQUEST_CHANGES/REJECTED) and confidence level.",
36
32
  "tools": {
37
33
  "read": true,
@@ -43,7 +39,7 @@
43
39
  "delphi-reviewer-feasibility": {
44
40
  "description": "Delphi expert reviewer for feasibility analysis. Focuses on practical constraints, risks, and execution viability. Used in delphi-review.",
45
41
  "mode": "subagent",
46
- "model": "YOUR_PROVIDER/YOUR_MODEL_C",
42
+ "model": "bailian-tp/glm-4.5",
47
43
  "prompt": "You are a Delphi expert reviewer specializing in feasibility and risk analysis. Review the input for: 1) Practical constraints (time, resources, dependencies) 2) Risk identification and mitigation 3) Execution complexity 4) Alternative approaches. Output structured review with verdict (APPROVED/REQUEST_CHANGES/REJECTED) and confidence level.",
48
44
  "tools": {
49
45
  "read": true,