@openprd/cli 0.1.1 → 0.1.8

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 (137) hide show
  1. package/.openprd/README.md +43 -69
  2. package/.openprd/README_EN.md +84 -0
  3. package/.openprd/benchmarks/index.md +7 -0
  4. package/.openprd/benchmarks/sources.yaml +25 -3
  5. package/.openprd/discovery/config.json +16 -2
  6. package/.openprd/engagements/active/flows.md +19 -14
  7. package/.openprd/engagements/active/handoff.md +11 -4
  8. package/.openprd/engagements/active/prd.md +99 -71
  9. package/.openprd/engagements/active/review.html +4 -4
  10. package/.openprd/engagements/active/roles.md +9 -8
  11. package/.openprd/engagements/work-units/wu-20260524015648-6d33ded7.json +4 -4
  12. package/.openprd/engagements/work-units/wu-20260602113956-a99b5b88.json +18 -0
  13. package/.openprd/engagements/work-units/wu-20260602122244-78656aaf.json +18 -0
  14. package/.openprd/engagements/work-units/wu-20260602122442-e96489e2.json +18 -0
  15. package/.openprd/engagements/work-units/wu-20260602132835-695429e8.json +18 -0
  16. package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/candidate.json +78 -0
  17. package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/diagnostic-report.json +129 -0
  18. package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/root-cause-candidates.json +41 -0
  19. package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/timeline.json +14 -0
  20. package/.openprd/knowledge/drafts/openprd-experience-diagnostic-candidate-turn-1780116203372-5f266a79e968c758/SKILL.md +49 -0
  21. package/.openprd/knowledge/index.json +44 -4
  22. package/.openprd/reviews/v0001.html +195 -129
  23. package/.openprd/reviews/v0002.html +1150 -0
  24. package/.openprd/reviews/v0003.html +1150 -0
  25. package/.openprd/reviews/v0004.html +1150 -0
  26. package/.openprd/reviews/v0005.html +1150 -0
  27. package/.openprd/standards/config.json +12 -9
  28. package/.openprd/state/changes.json +17 -2
  29. package/.openprd/state/current.json +399 -63
  30. package/.openprd/state/release-ledger.json +344 -0
  31. package/.openprd/state/version-index.json +52 -0
  32. package/.openprd/state/versions/v0002.json +264 -0
  33. package/.openprd/state/versions/v0002.md +183 -0
  34. package/.openprd/state/versions/v0003.json +269 -0
  35. package/.openprd/state/versions/v0003.md +188 -0
  36. package/.openprd/state/versions/v0004.json +274 -0
  37. package/.openprd/state/versions/v0004.md +193 -0
  38. package/.openprd/state/versions/v0005.json +299 -0
  39. package/.openprd/state/versions/v0005.md +189 -0
  40. package/.openprd/templates/agent/intake.md +5 -4
  41. package/.openprd/templates/b2b/intake.md +5 -4
  42. package/.openprd/templates/base/intake.md +10 -4
  43. package/.openprd/templates/company/README.md +9 -7
  44. package/.openprd/templates/company/README_EN.md +12 -0
  45. package/.openprd/templates/consumer/intake.md +5 -4
  46. package/.openprd/templates/industry/README.md +12 -10
  47. package/.openprd/templates/industry/README_EN.md +18 -0
  48. package/.openprd/templates/project/README.md +11 -9
  49. package/.openprd/templates/project/README_EN.md +16 -0
  50. package/.openprd/templates/session/README.md +11 -9
  51. package/.openprd/templates/session/README_EN.md +16 -0
  52. package/AGENTS.md +12 -8
  53. package/README.md +399 -438
  54. package/README_CN.md +4 -578
  55. package/README_EN.md +850 -0
  56. package/docs/assets/openprd-requirement-routing-en.png +0 -0
  57. package/docs/assets/openprd-requirement-routing-en.svg +102 -0
  58. package/docs/assets/openprd-requirement-routing-zh-refined.png +0 -0
  59. package/docs/assets/openprd-requirement-routing-zh.png +0 -0
  60. package/docs/assets/openprd-requirement-routing-zh.svg +102 -0
  61. package/package.json +6 -2
  62. package/scripts/dev-check-wrapup-copy.mjs +110 -0
  63. package/scripts/openprd-github-release-notes.mjs +99 -0
  64. package/scripts/quality-perf-check.mjs +203 -0
  65. package/skills/openprd-benchmark-router/SKILL.md +1 -0
  66. package/skills/openprd-benchmark-router/references/benchmark-sources.md +1 -0
  67. package/skills/openprd-benchmark-router/references/source-policy.md +2 -0
  68. package/skills/openprd-discovery-loop/SKILL.md +2 -2
  69. package/skills/openprd-harness/SKILL.md +46 -24
  70. package/skills/openprd-harness/references/workflow-gates.md +15 -0
  71. package/skills/openprd-quality/SKILL.md +10 -4
  72. package/skills/openprd-requirement-intake/SKILL.md +31 -20
  73. package/skills/openprd-requirement-intake/references/prd-template-lenses.md +6 -6
  74. package/skills/openprd-requirement-intake/references/routing-rubric.md +10 -2
  75. package/skills/openprd-router/SKILL.md +2 -2
  76. package/skills/openprd-shared/SKILL.md +51 -23
  77. package/skills/openprd-standards/SKILL.md +2 -1
  78. package/src/agent-integration.js +265 -65
  79. package/src/benchmark/constants.js +107 -0
  80. package/src/benchmark/operations.js +235 -0
  81. package/src/benchmark/registry.js +64 -0
  82. package/src/benchmark/render.js +115 -0
  83. package/src/benchmark/source.js +617 -0
  84. package/src/benchmark/storage.js +121 -0
  85. package/src/benchmark/verify.js +235 -0
  86. package/src/benchmark.js +50 -851
  87. package/src/change-summary.js +339 -0
  88. package/src/cli/args.js +67 -6
  89. package/src/cli/basic-print.js +365 -0
  90. package/src/cli/benchmark-print.js +91 -0
  91. package/src/cli/change-print.js +221 -0
  92. package/src/cli/doctor-print.js +268 -0
  93. package/src/cli/growth-print.js +176 -0
  94. package/src/cli/print.js +73 -1384
  95. package/src/cli/quality-print.js +284 -0
  96. package/src/cli/run-print.js +297 -0
  97. package/src/cli/shared-print.js +127 -0
  98. package/src/cli/workflow-print.js +195 -0
  99. package/src/codex-hook-runner-template.mjs +639 -117
  100. package/src/codex-runtime.js +324 -0
  101. package/src/dev-standards.js +178 -5
  102. package/src/diagram-core.js +5 -5
  103. package/src/discovery.js +2 -1
  104. package/src/execution-strategy.js +369 -0
  105. package/src/fleet.js +4 -0
  106. package/src/github-release.js +156 -0
  107. package/src/growth.js +311 -13
  108. package/src/html-artifact-utils.js +25 -0
  109. package/src/html-artifacts.js +157 -1596
  110. package/src/knowledge.js +1176 -75
  111. package/src/language-policy.js +2 -112
  112. package/src/learning-html-artifact.js +1031 -0
  113. package/src/learning-review.js +3 -2
  114. package/src/loop.js +280 -9
  115. package/src/openprd.js +341 -38
  116. package/src/openspec/change-validate.js +0 -9
  117. package/src/openspec/execute.js +79 -3
  118. package/src/openspec/generate.js +33 -20
  119. package/src/openspec/tasks.js +33 -2
  120. package/src/prd-core.js +10 -9
  121. package/src/product-type-copy.js +69 -0
  122. package/src/quality-html-artifact.js +108 -9
  123. package/src/quality-learning.js +30 -0
  124. package/src/quality-visual-review.js +237 -0
  125. package/src/quality.js +329 -43
  126. package/src/registry-hygiene.js +54 -0
  127. package/src/release-ledger.js +413 -0
  128. package/src/review-presentation.js +12 -6
  129. package/src/run-harness.js +722 -48
  130. package/src/session-binding.js +40 -3
  131. package/src/session-registry.js +159 -0
  132. package/src/standards.js +5 -3
  133. package/src/test-strategy.js +386 -0
  134. package/src/visual-compare.js +915 -34
  135. package/src/work-unit-migration.js +5 -1
  136. package/src/workspace-core.js +343 -19
  137. package/src/workspace-workflow.js +538 -134
@@ -1,62 +1,11 @@
1
1
  export const OPENPRD_CONTENT_LOCALE = 'zh-CN';
2
2
 
3
3
  export const OPENPRD_LANGUAGE_POLICY =
4
- 'OpenPrd 生成的用户可见内容默认使用简体中文;PRD、OpenPrd、OpenSpec、API、SDK、CLI、TypeScript、JSON、HTTP、WebSocket、字段 key、命令名、产品名和协议名等专有名词按原文保留。';
4
+ 'OpenPrd 默认用简体中文生成用户可见内容以及 Agent 产出的 spec、tasks 和说明文案;PRD、OpenPrd、OpenSpec、API、SDK、CLI、TypeScript、JSON、HTTP、WebSocket、字段 key、命令名、品牌名、产品名和协议名等必要专有名词按原文保留。';
5
5
 
6
6
  export const TBD_ZH = '待补充';
7
7
 
8
8
  const CJK_RE = /[\u3400-\u9fff]/;
9
- const STRUCTURAL_OPENPRD_TERMS = [
10
- 'ADDED',
11
- 'MODIFIED',
12
- 'REMOVED',
13
- 'Requirements',
14
- 'Requirement',
15
- 'Scenario',
16
- 'WHEN',
17
- 'THEN',
18
- 'AND',
19
- 'GIVEN',
20
- ];
21
- const ALLOWED_TECHNICAL_TERMS = [
22
- 'OpenPrd',
23
- 'OpenSpec',
24
- 'PRD',
25
- 'API',
26
- 'SDK',
27
- 'CLI',
28
- 'TypeScript',
29
- 'JavaScript',
30
- 'JSON',
31
- 'YAML',
32
- 'Agent',
33
- 'HTTP',
34
- 'HTTPS',
35
- 'WebSocket',
36
- 'URL',
37
- 'URI',
38
- 'ID',
39
- 'UID',
40
- 'UUID',
41
- 'OSS',
42
- 'NSIS',
43
- 'DMG',
44
- 'RPM',
45
- 'DEB',
46
- 'macOS',
47
- 'Windows',
48
- 'Linux',
49
- 'Node',
50
- 'Node.js',
51
- 'npm',
52
- 'pnpm',
53
- 'Electron',
54
- 'React',
55
- 'Vite',
56
- 'Vitest',
57
- 'Playwright',
58
- ];
59
- const DISALLOWED_SPEC_MODAL_WORDS = /\b(SHALL|MUST|SHOULD|MAY)\b/;
60
9
 
61
10
  export function scalarZh(value, fallback = TBD_ZH) {
62
11
  if (value === null || value === undefined) {
@@ -75,68 +24,9 @@ export function preferSimplifiedChinese(value, fallback = TBD_ZH) {
75
24
  return hasSimplifiedChinese(text) ? text : fallback;
76
25
  }
77
26
 
78
- function escapeRegExp(value) {
79
- return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
80
- }
81
-
82
- function stripAllowedEnglishTerms(text) {
83
- let next = text;
84
- for (const term of [...STRUCTURAL_OPENPRD_TERMS, ...ALLOWED_TECHNICAL_TERMS]) {
85
- next = next.replace(new RegExp(`\\b${escapeRegExp(term)}\\b`, 'g'), ' ');
86
- }
87
- return next
88
- .replace(/\b[A-Z][A-Za-z0-9]*(?:\s*(?:&|and)\s*|\s+)[A-Z][A-Za-z0-9]*(?:(?:\s*(?:&|and)\s*|\s+)[A-Z][A-Za-z0-9]*)*\b/g, ' ')
89
- .replace(/`[^`]*`/g, ' ')
90
- .replace(/https?:\/\/\S+/g, ' ')
91
- .replace(/\b[A-Za-z0-9_.-]+\.(?:md|json|ya?ml|toml|txt|html|js|ts|tsx|jsx|mjs|cjs|yml|exe|dmg|rpm|deb|zip|gz|xz|blockmap)\b/g, ' ')
92
- .replace(/\b[A-Za-z0-9_.-]*[/-][A-Za-z0-9_.-]+\b/g, ' ')
93
- .replace(/\b[A-Z][A-Za-z0-9]*[A-Z][A-Za-z0-9]*\b/g, ' ');
94
- }
95
-
96
- function specContentFragment(line) {
97
- const trimmed = String(line ?? '').trim();
98
- if (!trimmed || /^```/.test(trimmed)) {
99
- return '';
100
- }
101
- if (/^##\s+(?:(ADDED|MODIFIED|REMOVED)\s+Requirements|(?:新增|修改|移除)需求)\s*$/i.test(trimmed)) {
102
- return '';
103
- }
104
- return trimmed
105
- .replace(/^#{3,4}\s+(Requirement|Scenario|需求|场景)[::]\s*/i, '')
106
- .replace(/^-\s+\*\*(WHEN|THEN|AND|GIVEN|当|则|那么|并且|假如)\*\*\s*/i, '')
107
- .replace(/^[-*]\s+/, '')
108
- .replace(/[*_#[\]()]/g, ' ')
109
- .trim();
110
- }
111
-
112
- export function findOpenPrdSpecLanguageViolations(text) {
113
- const violations = [];
114
- const lines = String(text ?? '').split(/\r?\n/);
115
- for (let index = 0; index < lines.length; index += 1) {
116
- const fragment = specContentFragment(lines[index]);
117
- if (!fragment) {
118
- continue;
119
- }
120
- if (DISALLOWED_SPEC_MODAL_WORDS.test(fragment)) {
121
- violations.push({ line: index + 1, text: fragment, reason: '包含 SHALL/MUST/SHOULD/MAY 等英文规范词' });
122
- continue;
123
- }
124
- const stripped = stripAllowedEnglishTerms(fragment);
125
- const englishWords = stripped.match(/[A-Za-z]{2,}/g) ?? [];
126
- if (!hasSimplifiedChinese(fragment) && englishWords.length > 0) {
127
- violations.push({ line: index + 1, text: fragment, reason: '正文缺少简体中文表达' });
128
- continue;
129
- }
130
- if (englishWords.length > 1) {
131
- violations.push({ line: index + 1, text: fragment, reason: '正文包含过多非必要英文' });
132
- }
133
- }
134
- return violations;
135
- }
136
-
137
27
  export function languagePolicyLines() {
138
28
  return [
139
- '> 语言规则:除 PRD、OpenPrd、OpenSpec、API、SDK、CLI、TypeScript、JSON、HTTP、WebSocket、字段 key、命令名、产品名和协议名等必要专有名词外,用户可见内容应使用简体中文。',
29
+ '> 语言规则:默认用简体中文生成 PRD、spec、tasks 和用户可见说明;除 PRD、OpenPrd、OpenSpec、API、SDK、CLI、TypeScript、JSON、HTTP、WebSocket、字段 key、命令名、品牌名、产品名和协议名等必要专有名词外,其余内容优先写成简体中文。',
140
30
  '',
141
31
  ];
142
32
  }