@openprd/cli 0.1.1 → 0.1.9
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.
- package/.openprd/README.md +43 -69
- package/.openprd/README_EN.md +84 -0
- package/.openprd/benchmarks/index.md +7 -0
- package/.openprd/benchmarks/sources.yaml +25 -3
- package/.openprd/discovery/config.json +16 -2
- package/.openprd/engagements/active/flows.md +19 -14
- package/.openprd/engagements/active/handoff.md +11 -4
- package/.openprd/engagements/active/prd.md +99 -71
- package/.openprd/engagements/active/review.html +4 -4
- package/.openprd/engagements/active/roles.md +9 -8
- package/.openprd/engagements/work-units/wu-20260524015648-6d33ded7.json +4 -4
- package/.openprd/engagements/work-units/wu-20260602113956-a99b5b88.json +18 -0
- package/.openprd/engagements/work-units/wu-20260602122244-78656aaf.json +18 -0
- package/.openprd/engagements/work-units/wu-20260602122442-e96489e2.json +18 -0
- package/.openprd/engagements/work-units/wu-20260602132835-695429e8.json +18 -0
- package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/candidate.json +78 -0
- package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/diagnostic-report.json +129 -0
- package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/root-cause-candidates.json +41 -0
- package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/timeline.json +14 -0
- package/.openprd/knowledge/drafts/openprd-experience-diagnostic-candidate-turn-1780116203372-5f266a79e968c758/SKILL.md +49 -0
- package/.openprd/knowledge/index.json +44 -4
- package/.openprd/reviews/v0001.html +195 -129
- package/.openprd/reviews/v0002.html +1150 -0
- package/.openprd/reviews/v0003.html +1150 -0
- package/.openprd/reviews/v0004.html +1150 -0
- package/.openprd/reviews/v0005.html +1150 -0
- package/.openprd/standards/config.json +12 -9
- package/.openprd/state/changes.json +17 -2
- package/.openprd/state/current.json +399 -63
- package/.openprd/state/release-ledger.json +387 -0
- package/.openprd/state/version-index.json +52 -0
- package/.openprd/state/versions/v0002.json +264 -0
- package/.openprd/state/versions/v0002.md +183 -0
- package/.openprd/state/versions/v0003.json +269 -0
- package/.openprd/state/versions/v0003.md +188 -0
- package/.openprd/state/versions/v0004.json +274 -0
- package/.openprd/state/versions/v0004.md +193 -0
- package/.openprd/state/versions/v0005.json +299 -0
- package/.openprd/state/versions/v0005.md +189 -0
- package/.openprd/templates/agent/intake.md +5 -4
- package/.openprd/templates/b2b/intake.md +5 -4
- package/.openprd/templates/base/intake.md +10 -4
- package/.openprd/templates/company/README.md +9 -7
- package/.openprd/templates/company/README_EN.md +12 -0
- package/.openprd/templates/consumer/intake.md +5 -4
- package/.openprd/templates/industry/README.md +12 -10
- package/.openprd/templates/industry/README_EN.md +18 -0
- package/.openprd/templates/project/README.md +11 -9
- package/.openprd/templates/project/README_EN.md +16 -0
- package/.openprd/templates/session/README.md +11 -9
- package/.openprd/templates/session/README_EN.md +16 -0
- package/AGENTS.md +12 -8
- package/README.md +419 -438
- package/README_CN.md +4 -578
- package/README_EN.md +870 -0
- package/docs/assets/openprd-requirement-routing-en.png +0 -0
- package/docs/assets/openprd-requirement-routing-en.svg +102 -0
- package/docs/assets/openprd-requirement-routing-zh-refined.png +0 -0
- package/docs/assets/openprd-requirement-routing-zh.png +0 -0
- package/docs/assets/openprd-requirement-routing-zh.svg +102 -0
- package/package.json +6 -2
- package/scripts/dev-check-wrapup-copy.mjs +110 -0
- package/scripts/openprd-github-release-notes.mjs +99 -0
- package/scripts/quality-perf-check.mjs +203 -0
- package/skills/openprd-benchmark-router/SKILL.md +1 -0
- package/skills/openprd-benchmark-router/references/benchmark-sources.md +1 -0
- package/skills/openprd-benchmark-router/references/source-policy.md +2 -0
- package/skills/openprd-discovery-loop/SKILL.md +2 -2
- package/skills/openprd-harness/SKILL.md +47 -25
- package/skills/openprd-harness/references/workflow-gates.md +15 -0
- package/skills/openprd-quality/SKILL.md +11 -5
- package/skills/openprd-requirement-intake/SKILL.md +31 -20
- package/skills/openprd-requirement-intake/references/prd-template-lenses.md +6 -6
- package/skills/openprd-requirement-intake/references/routing-rubric.md +10 -2
- package/skills/openprd-router/SKILL.md +2 -2
- package/skills/openprd-shared/SKILL.md +51 -23
- package/skills/openprd-standards/SKILL.md +2 -1
- package/src/agent-integration.js +271 -71
- package/src/benchmark/constants.js +107 -0
- package/src/benchmark/operations.js +235 -0
- package/src/benchmark/registry.js +64 -0
- package/src/benchmark/render.js +115 -0
- package/src/benchmark/source.js +617 -0
- package/src/benchmark/storage.js +121 -0
- package/src/benchmark/verify.js +235 -0
- package/src/benchmark.js +50 -851
- package/src/change-summary.js +339 -0
- package/src/cli/args.js +67 -6
- package/src/cli/basic-print.js +365 -0
- package/src/cli/benchmark-print.js +91 -0
- package/src/cli/change-print.js +221 -0
- package/src/cli/doctor-print.js +268 -0
- package/src/cli/growth-print.js +176 -0
- package/src/cli/print.js +73 -1384
- package/src/cli/quality-print.js +284 -0
- package/src/cli/run-print.js +297 -0
- package/src/cli/shared-print.js +127 -0
- package/src/cli/workflow-print.js +195 -0
- package/src/codex-hook-runner-template.mjs +659 -124
- package/src/codex-runtime.js +324 -0
- package/src/dev-standards.js +178 -5
- package/src/diagram-core.js +5 -5
- package/src/discovery.js +2 -1
- package/src/execution-strategy.js +369 -0
- package/src/fleet.js +4 -0
- package/src/github-release.js +156 -0
- package/src/growth.js +311 -13
- package/src/html-artifact-utils.js +25 -0
- package/src/html-artifacts.js +157 -1596
- package/src/knowledge.js +1321 -76
- package/src/language-policy.js +2 -112
- package/src/learning-html-artifact.js +1031 -0
- package/src/learning-review.js +3 -2
- package/src/loop.js +280 -9
- package/src/openprd.js +341 -38
- package/src/openspec/change-validate.js +0 -9
- package/src/openspec/execute.js +79 -3
- package/src/openspec/generate.js +33 -20
- package/src/openspec/tasks.js +33 -2
- package/src/prd-core.js +10 -9
- package/src/product-type-copy.js +69 -0
- package/src/quality-html-artifact.js +108 -9
- package/src/quality-learning.js +30 -0
- package/src/quality-visual-review.js +237 -0
- package/src/quality.js +329 -43
- package/src/registry-hygiene.js +54 -0
- package/src/release-ledger.js +413 -0
- package/src/review-presentation.js +12 -6
- package/src/run-harness.js +722 -48
- package/src/session-binding.js +40 -3
- package/src/session-registry.js +159 -0
- package/src/standards.js +5 -3
- package/src/test-strategy.js +386 -0
- package/src/visual-compare.js +915 -34
- package/src/work-unit-migration.js +5 -1
- package/src/workspace-core.js +343 -19
- package/src/workspace-workflow.js +538 -134
package/src/language-policy.js
CHANGED
|
@@ -1,62 +1,11 @@
|
|
|
1
1
|
export const OPENPRD_CONTENT_LOCALE = 'zh-CN';
|
|
2
2
|
|
|
3
3
|
export const OPENPRD_LANGUAGE_POLICY =
|
|
4
|
-
'OpenPrd
|
|
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
|
-
'>
|
|
29
|
+
'> 语言规则:默认用简体中文生成 PRD、spec、tasks 和用户可见说明;除 PRD、OpenPrd、OpenSpec、API、SDK、CLI、TypeScript、JSON、HTTP、WebSocket、字段 key、命令名、品牌名、产品名和协议名等必要专有名词外,其余内容优先写成简体中文。',
|
|
140
30
|
'',
|
|
141
31
|
];
|
|
142
32
|
}
|