spec-manager 0.1.0 → 0.2.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 (128) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.md +94 -28
  3. package/dist/cli/change.d.ts.map +1 -1
  4. package/dist/cli/change.js +93 -4
  5. package/dist/cli/change.js.map +1 -1
  6. package/dist/cli/completion.d.ts +3 -0
  7. package/dist/cli/completion.d.ts.map +1 -0
  8. package/dist/cli/completion.js +30 -0
  9. package/dist/cli/completion.js.map +1 -0
  10. package/dist/cli/index.js +4 -0
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/cli/project.d.ts.map +1 -1
  13. package/dist/cli/project.js +71 -7
  14. package/dist/cli/project.js.map +1 -1
  15. package/dist/cli/spec.d.ts.map +1 -1
  16. package/dist/cli/spec.js +42 -14
  17. package/dist/cli/spec.js.map +1 -1
  18. package/dist/cli/task.d.ts.map +1 -1
  19. package/dist/cli/task.js +150 -42
  20. package/dist/cli/task.js.map +1 -1
  21. package/dist/cli/usability.d.ts.map +1 -1
  22. package/dist/cli/usability.js +32 -8
  23. package/dist/cli/usability.js.map +1 -1
  24. package/dist/cli/view.d.ts +3 -0
  25. package/dist/cli/view.d.ts.map +1 -0
  26. package/dist/cli/view.js +122 -0
  27. package/dist/cli/view.js.map +1 -0
  28. package/dist/core/agents.d.ts +23 -1
  29. package/dist/core/agents.d.ts.map +1 -1
  30. package/dist/core/agents.js +82 -2
  31. package/dist/core/agents.js.map +1 -1
  32. package/dist/core/archive.d.ts.map +1 -1
  33. package/dist/core/archive.js +74 -2
  34. package/dist/core/archive.js.map +1 -1
  35. package/dist/core/audit.d.ts +1 -0
  36. package/dist/core/audit.d.ts.map +1 -1
  37. package/dist/core/audit.js +60 -40
  38. package/dist/core/audit.js.map +1 -1
  39. package/dist/core/completion.d.ts +12 -0
  40. package/dist/core/completion.d.ts.map +1 -0
  41. package/dist/core/completion.js +136 -0
  42. package/dist/core/completion.js.map +1 -0
  43. package/dist/core/delta.d.ts +30 -1
  44. package/dist/core/delta.d.ts.map +1 -1
  45. package/dist/core/delta.js +141 -4
  46. package/dist/core/delta.js.map +1 -1
  47. package/dist/core/harness.d.ts +69 -0
  48. package/dist/core/harness.d.ts.map +1 -0
  49. package/dist/core/harness.js +278 -0
  50. package/dist/core/harness.js.map +1 -0
  51. package/dist/core/integrity-exemptions.d.ts +29 -0
  52. package/dist/core/integrity-exemptions.d.ts.map +1 -0
  53. package/dist/core/integrity-exemptions.js +100 -0
  54. package/dist/core/integrity-exemptions.js.map +1 -0
  55. package/dist/core/integrity.d.ts +12 -0
  56. package/dist/core/integrity.d.ts.map +1 -0
  57. package/dist/core/integrity.js +163 -0
  58. package/dist/core/integrity.js.map +1 -0
  59. package/dist/core/invariants.d.ts +5 -0
  60. package/dist/core/invariants.d.ts.map +1 -0
  61. package/dist/core/invariants.js +19 -0
  62. package/dist/core/invariants.js.map +1 -0
  63. package/dist/core/lifecycle.d.ts +37 -0
  64. package/dist/core/lifecycle.d.ts.map +1 -0
  65. package/dist/core/lifecycle.js +70 -0
  66. package/dist/core/lifecycle.js.map +1 -0
  67. package/dist/core/paths.d.ts +3 -0
  68. package/dist/core/paths.d.ts.map +1 -1
  69. package/dist/core/paths.js +19 -1
  70. package/dist/core/paths.js.map +1 -1
  71. package/dist/core/placeholder.d.ts +6 -0
  72. package/dist/core/placeholder.d.ts.map +1 -0
  73. package/dist/core/placeholder.js +12 -0
  74. package/dist/core/placeholder.js.map +1 -0
  75. package/dist/core/reconciliation.d.ts +25 -0
  76. package/dist/core/reconciliation.d.ts.map +1 -0
  77. package/dist/core/reconciliation.js +122 -0
  78. package/dist/core/reconciliation.js.map +1 -0
  79. package/dist/core/remediation.d.ts +41 -0
  80. package/dist/core/remediation.d.ts.map +1 -0
  81. package/dist/core/remediation.js +169 -0
  82. package/dist/core/remediation.js.map +1 -0
  83. package/dist/core/spec-io.d.ts +3 -5
  84. package/dist/core/spec-io.d.ts.map +1 -1
  85. package/dist/core/spec-io.js +26 -13
  86. package/dist/core/spec-io.js.map +1 -1
  87. package/dist/core/status.d.ts +6 -3
  88. package/dist/core/status.d.ts.map +1 -1
  89. package/dist/core/status.js +12 -4
  90. package/dist/core/status.js.map +1 -1
  91. package/dist/core/task.d.ts +26 -0
  92. package/dist/core/task.d.ts.map +1 -1
  93. package/dist/core/task.js +74 -46
  94. package/dist/core/task.js.map +1 -1
  95. package/dist/core/transaction.d.ts +10 -0
  96. package/dist/core/transaction.d.ts.map +1 -0
  97. package/dist/core/transaction.js +65 -0
  98. package/dist/core/transaction.js.map +1 -0
  99. package/dist/core/usability.d.ts +8 -2
  100. package/dist/core/usability.d.ts.map +1 -1
  101. package/dist/core/usability.js +203 -35
  102. package/dist/core/usability.js.map +1 -1
  103. package/dist/core/validate.d.ts +2 -0
  104. package/dist/core/validate.d.ts.map +1 -1
  105. package/dist/core/validate.js +29 -1
  106. package/dist/core/validate.js.map +1 -1
  107. package/dist/core/view.d.ts +35 -0
  108. package/dist/core/view.d.ts.map +1 -0
  109. package/dist/core/view.js +50 -0
  110. package/dist/core/view.js.map +1 -0
  111. package/dist/index.d.ts +7 -0
  112. package/dist/index.d.ts.map +1 -1
  113. package/dist/index.js +7 -0
  114. package/dist/index.js.map +1 -1
  115. package/dist/schemas/change.d.ts +20 -20
  116. package/dist/schemas/spec.d.ts +12 -12
  117. package/package.json +2 -1
  118. package/rules/flow-control.md +3 -3
  119. package/skill/SKILL.md +14 -2
  120. package/skill/subskills/impl.md +2 -2
  121. package/templates/L3-impl.md +2 -2
  122. package/templates/agent-plan.json +2 -1
  123. package/templates/agents/AGENTS.md +8 -6
  124. package/templates/agents/CLAUDE.md +7 -3
  125. package/templates/agents/CODEBUDDY.md +9 -7
  126. package/templates/agents/CURSOR.md +28 -0
  127. package/templates/agents/WINDSURF.md +28 -0
  128. package/templates/agents/codebuddy-skill/SKILL.md +12 -1
@@ -1,18 +1,21 @@
1
1
  import { existsSync, readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
+ import { parse as parseYaml } from 'yaml';
3
4
  import { AGENT_PROVIDER_INFO } from './agents.js';
4
5
  import { readAudit } from './audit.js';
5
- import { PLACEHOLDER_MARKER } from './constants.js';
6
- import { listAllSpecs } from './spec-io.js';
6
+ import { findSpecByCode, isPlaceholderContent, listAllSpecs } from './spec-io.js';
7
7
  import { listTasks } from './task.js';
8
+ import { REQUIRED_SECTIONS } from './validate.js';
9
+ import { inspectProjectIntegrity } from './integrity.js';
10
+ import { assessImplementationReadiness } from './lifecycle.js';
8
11
  export function runProjectDoctor(paths) {
9
12
  const checks = [];
10
- checks.push(fileCheck(paths.isInitialized, '.spec-manager/', 'Project initialized', 'spec-manager project init'));
11
- checks.push(fileCheck(existsSync(paths.configFile), '.spec-manager/config.yaml', 'Config file present', 'spec-manager project init'));
12
- checks.push(fileCheck(existsSync(paths.auditFile), '.spec-manager/audit.json', 'Audit file present', 'spec-manager project init'));
13
- checks.push(fileCheck(existsSync(paths.specsDir), 'specs/', 'Specs directory present', 'spec-manager project init'));
14
- checks.push(fileCheck(existsSync(paths.changesDir), 'changes/', 'Changes directory present', 'spec-manager project init'));
15
- checks.push(fileCheck(existsSync(paths.archiveDir), 'archive/', 'Archive directory present', 'spec-manager project init'));
13
+ checks.push(fileCheck(paths.isInitialized, '.spec-manager/', 'Project initialized', 'spec-manager project init', true));
14
+ checks.push(fileCheck(existsSync(paths.configFile), '.spec-manager/config.yaml', 'Config file present', 'spec-manager project init', true));
15
+ checks.push(fileCheck(existsSync(paths.auditFile), '.spec-manager/audit.json', 'Audit file present', 'spec-manager project init', true));
16
+ checks.push(fileCheck(existsSync(paths.specsDir), 'specs/', 'Specs directory present', 'spec-manager project init', true));
17
+ checks.push(fileCheck(existsSync(paths.changesDir), 'changes/', 'Changes directory present', 'spec-manager project init', true));
18
+ checks.push(fileCheck(existsSync(paths.archiveDir), 'archive/', 'Archive directory present', 'spec-manager project init', true));
16
19
  const agentFiles = AGENT_PROVIDER_INFO.flatMap((p) => p.files);
17
20
  const installedAgentFiles = Array.from(new Set(agentFiles)).filter((f) => existsSync(join(paths.root, trimTrailingSlash(f))));
18
21
  checks.push({
@@ -20,24 +23,26 @@ export function runProjectDoctor(paths) {
20
23
  label: 'AI agent instructions',
21
24
  detail: installedAgentFiles.length > 0 ? installedAgentFiles.join(', ') : 'No agent instruction files found',
22
25
  action: installedAgentFiles.length > 0 ? undefined : 'spec-manager project agents --provider all',
26
+ blocking: false,
23
27
  });
24
28
  const claudeSkill = join(paths.root, '.claude', 'skills', 'spec-manager');
25
29
  if (existsSync(claudeSkill)) {
26
- checks.push(fileCheck(existsSync(join(claudeSkill, 'rules')), '.claude/skills/spec-manager/rules', 'Claude skill rules bundled', 'spec-manager project agents --provider claude --force'));
27
- checks.push(fileCheck(existsSync(join(claudeSkill, 'templates')), '.claude/skills/spec-manager/templates', 'Claude skill templates bundled', 'spec-manager project agents --provider claude --force'));
30
+ checks.push(fileCheck(existsSync(join(claudeSkill, 'rules')), '.claude/skills/spec-manager/rules', 'Claude skill rules bundled', 'spec-manager project remediate --migration repository-remediation-v1 --dry-run', false));
31
+ checks.push(fileCheck(existsSync(join(claudeSkill, 'templates')), '.claude/skills/spec-manager/templates', 'Claude skill templates bundled', 'spec-manager project remediate --migration repository-remediation-v1 --dry-run', false));
28
32
  }
29
33
  const codeBuddySkill = join(paths.root, '.codebuddy', 'skills', 'spec-manager');
30
34
  if (existsSync(codeBuddySkill)) {
31
- checks.push(fileCheck(existsSync(join(codeBuddySkill, 'rules')), '.codebuddy/skills/spec-manager/rules', 'CodeBuddy skill rules bundled', 'spec-manager project agents --provider codebuddy --force'));
32
- checks.push(fileCheck(existsSync(join(codeBuddySkill, 'templates')), '.codebuddy/skills/spec-manager/templates', 'CodeBuddy skill templates bundled', 'spec-manager project agents --provider codebuddy --force'));
35
+ checks.push(fileCheck(existsSync(join(codeBuddySkill, 'rules')), '.codebuddy/skills/spec-manager/rules', 'CodeBuddy skill rules bundled', 'spec-manager project agents --provider codebuddy --force', false));
36
+ checks.push(fileCheck(existsSync(join(codeBuddySkill, 'templates')), '.codebuddy/skills/spec-manager/templates', 'CodeBuddy skill templates bundled', 'spec-manager project agents --provider codebuddy --force', false));
33
37
  }
34
38
  const specs = paths.isInitialized ? listAllSpecs(paths) : [];
35
- const placeholders = specs.filter((s) => s.content.includes(PLACEHOLDER_MARKER));
39
+ const placeholders = specs.filter((s) => isPlaceholderContent(s.content));
36
40
  checks.push({
37
41
  status: placeholders.length === 0 ? 'ok' : 'warn',
38
42
  label: 'Spec placeholder content',
39
43
  detail: placeholders.length === 0 ? 'No placeholder specs' : placeholders.map((s) => s.fm.code).join(', '),
40
44
  action: placeholders.length === 0 ? undefined : 'spec-manager spec update <code> --content ./draft.md --ai-summary "..." --change-summary "..."',
45
+ blocking: false,
41
46
  });
42
47
  try {
43
48
  readAudit(paths);
@@ -49,12 +54,41 @@ export function runProjectDoctor(paths) {
49
54
  label: 'Audit readable',
50
55
  detail: err instanceof Error ? err.message : String(err),
51
56
  action: 'Check .spec-manager/audit.json permissions or recreate it',
57
+ blocking: true,
58
+ });
59
+ }
60
+ if (paths.isInitialized) {
61
+ const issues = inspectProjectIntegrity(paths);
62
+ checks.push({
63
+ status: issues.length === 0 ? 'ok' : 'warn',
64
+ label: 'Repository integrity',
65
+ detail: issues.length === 0 ? 'No integrity issues' : `${issues.length} issue(s): ${issues.slice(0, 3).map(issue => issue.message).join('; ')}`,
66
+ action: issues.length === 0 ? undefined : 'Review project doctor output and repair issues explicitly',
67
+ blocking: false,
52
68
  });
53
69
  }
54
70
  return checks;
55
71
  }
56
- function fileCheck(condition, detail, label, action) {
57
- return { status: condition ? 'ok' : 'fail', label, detail, action: condition ? undefined : action };
72
+ function fileCheck(condition, detail, label, action, blocking) {
73
+ return { status: condition ? 'ok' : 'fail', label, detail, action: condition ? undefined : action, blocking };
74
+ }
75
+ export function isBlockingDoctorCheck(check) {
76
+ if (check.status === 'ok')
77
+ return false;
78
+ if (check.blocking !== undefined)
79
+ return check.blocking;
80
+ return check.status === 'fail' && isCoreProjectCheckLabel(check.label);
81
+ }
82
+ function isCoreProjectCheckLabel(label) {
83
+ return [
84
+ 'Project initialized',
85
+ 'Config file present',
86
+ 'Audit file present',
87
+ 'Specs directory present',
88
+ 'Changes directory present',
89
+ 'Archive directory present',
90
+ 'Audit readable',
91
+ ].includes(label);
58
92
  }
59
93
  function trimTrailingSlash(value) {
60
94
  return value.endsWith('/') ? value.slice(0, -1) : value;
@@ -79,7 +113,7 @@ export function suggestNextActionForTopic(topic, specs, tasks) {
79
113
  if (specs.length === 0) {
80
114
  return `spec-manager spec new L1 --topic ${topic} --title "..."`;
81
115
  }
82
- const placeholder = specs.find((s) => s.content.includes(PLACEHOLDER_MARKER));
116
+ const placeholder = specs.find((s) => isPlaceholderContent(s.content));
83
117
  if (placeholder) {
84
118
  return `spec-manager spec update ${placeholder.fm.code} --content ./draft.md --ai-summary "..." --change-summary "..."`;
85
119
  }
@@ -88,12 +122,12 @@ export function suggestNextActionForTopic(topic, specs, tasks) {
88
122
  return `spec-manager spec confirm ${draft.fm.code}`;
89
123
  const confirmedL3 = specs.find((s) => s.fm.level === 'L3' && s.fm.status === 'confirmed');
90
124
  if (confirmedL3)
91
- return `spec-manager spec freeze ${confirmedL3.fm.code}`;
125
+ return appendAdvice(`spec-manager spec freeze ${confirmedL3.fm.code}`, getUpstreamFreezeAdviceForSpecs(specs, confirmedL3));
92
126
  const frozenL3 = specs.find((s) => s.fm.level === 'L3' && s.fm.status === 'frozen');
93
127
  if (frozenL3) {
94
128
  const task = tasks.find((t) => t.specCode === frozenL3.fm.code && t.status !== 'completed' && t.status !== 'failed');
95
129
  if (!task)
96
- return `spec-manager task create ${frozenL3.fm.code} --plan ./plan.json`;
130
+ return appendAdvice(`spec-manager task create ${frozenL3.fm.code} --plan ./plan.json`, getUpstreamFreezeAdviceForSpecs(specs, frozenL3));
97
131
  if (task.status === 'draft')
98
132
  return `spec-manager task start ${task.id} --spec ${task.specCode}`;
99
133
  if (task.status === 'running')
@@ -101,29 +135,110 @@ export function suggestNextActionForTopic(topic, specs, tasks) {
101
135
  if (task.status === 'waiting')
102
136
  return `Resolve wait reason, then spec-manager task start ${task.id} --spec ${task.specCode}`;
103
137
  }
104
- const confirmedNonL3 = specs.find((s) => (s.fm.level === 'L1' || s.fm.level === 'L2') && s.fm.status === 'confirmed');
105
- if (confirmedNonL3?.fm.level === 'L1')
106
- return `spec-manager spec new L2 --topic ${topic} --parent ${confirmedNonL3.fm.code} --title "..."`;
107
- if (confirmedNonL3?.fm.level === 'L2')
108
- return `spec-manager spec new L3 --topic ${topic} --parent ${confirmedNonL3.fm.code} --title "..."`;
138
+ const confirmedNonL3 = specs.find((s) => s.fm.level === 'L2' && s.fm.status === 'confirmed')
139
+ ?? specs.find((s) => s.fm.level === 'L1' && s.fm.status === 'confirmed');
140
+ if (confirmedNonL3) {
141
+ const children = specs.filter(spec => spec.fm.parentCode === confirmedNonL3.fm.code);
142
+ if (children.length === 0) {
143
+ if (confirmedNonL3.fm.level === 'L1')
144
+ return `spec-manager spec new L2 --topic ${topic} --parent ${confirmedNonL3.fm.code} --title "..."`;
145
+ return `spec-manager spec new L3 --topic ${topic} --parent ${confirmedNonL3.fm.code} --title "..."`;
146
+ }
147
+ if (assessImplementationReadinessForSpecs(specs, confirmedNonL3.fm.code)) {
148
+ return 'spec-manager project reconcile --dry-run';
149
+ }
150
+ }
109
151
  return 'No immediate action. Use spec-manager flow status for details.';
110
152
  }
111
- export function suggestAfterSpecCommand(spec) {
112
- if (spec.content.includes(PLACEHOLDER_MARKER)) {
153
+ export function suggestAfterSpecCommand(spec, paths) {
154
+ if (isPlaceholderContent(spec.content)) {
113
155
  return `spec-manager spec update ${spec.fm.code} --content ./draft.md --ai-summary "..." --change-summary "init"`;
114
156
  }
115
- if (spec.fm.status === 'draft')
116
- return `Wait for user approval, then spec-manager spec confirm ${spec.fm.code}`;
117
- if (spec.fm.level === 'L3' && spec.fm.status === 'confirmed')
118
- return `Wait for user approval, then spec-manager spec freeze ${spec.fm.code}`;
119
- if (spec.fm.level === 'L3' && spec.fm.status === 'frozen')
120
- return `spec-manager task create ${spec.fm.code} --plan ./plan.json`;
121
- if (spec.fm.level === 'L1' && spec.fm.status === 'confirmed')
122
- return `spec-manager spec new L2 --topic ${spec.fm.topic} --parent ${spec.fm.code} --title "..."`;
123
- if (spec.fm.level === 'L2' && spec.fm.status === 'confirmed')
124
- return `spec-manager spec new L3 --topic ${spec.fm.topic} --parent ${spec.fm.code} --title "..."`;
157
+ if (spec.fm.status === 'draft') {
158
+ const outcome = spec.fm.level === 'L3' ? 'frozen' : 'confirmed';
159
+ return `Wait for user approval, then spec-manager spec confirm ${spec.fm.code} (${spec.fm.status} -> ${outcome})`;
160
+ }
161
+ if (spec.fm.level === 'L3' && spec.fm.status === 'confirmed') {
162
+ return appendAdvice(`Wait for user approval, then spec-manager spec freeze ${spec.fm.code}`, paths ? getUpstreamFreezeAdvice(paths, spec) : []);
163
+ }
164
+ if (spec.fm.level === 'L3' && spec.fm.status === 'frozen') {
165
+ return appendAdvice(`spec-manager task create ${spec.fm.code} --plan ./plan.json`, paths ? getUpstreamFreezeAdvice(paths, spec) : []);
166
+ }
167
+ if ((spec.fm.level === 'L1' || spec.fm.level === 'L2') && spec.fm.status === 'confirmed') {
168
+ if (!paths)
169
+ return 'spec-manager flow status';
170
+ const specs = listAllSpecs(paths);
171
+ const children = specs.filter(child => child.fm.parentCode === spec.fm.code);
172
+ if (children.length === 0) {
173
+ return spec.fm.level === 'L1'
174
+ ? `spec-manager spec new L2 --topic ${spec.fm.topic} --parent ${spec.fm.code} --title "..."`
175
+ : `spec-manager spec new L3 --topic ${spec.fm.topic} --parent ${spec.fm.code} --title "..."`;
176
+ }
177
+ if (assessImplementationReadiness(paths, spec.fm.code, 'project-reconcile').ready) {
178
+ return 'spec-manager project reconcile --dry-run';
179
+ }
180
+ }
125
181
  return 'spec-manager flow status';
126
182
  }
183
+ export function getUpstreamFreezeAdvice(paths, spec) {
184
+ return getUpstreamFreezeAdviceForSpecs(listAllSpecs(paths), spec);
185
+ }
186
+ function getUpstreamFreezeAdviceForSpecs(specs, spec) {
187
+ if (spec.fm.level !== 'L3')
188
+ return [];
189
+ const advice = [];
190
+ let parentCode = spec.fm.parentCode;
191
+ while (parentCode) {
192
+ const upstream = specs.find((s) => s.fm.code === parentCode);
193
+ if (!upstream)
194
+ break;
195
+ if (upstream.fm.status !== 'confirmed' && upstream.fm.status !== 'implemented') {
196
+ advice.push(`Upstream ${upstream.fm.code} is ${upstream.fm.status}; L1/L2 must be confirmed for task completion to cascade.`);
197
+ }
198
+ parentCode = upstream.fm.parentCode;
199
+ }
200
+ return advice;
201
+ }
202
+ function assessImplementationReadinessForSpecs(specs, specCode) {
203
+ const spec = specs.find(item => item.fm.code === specCode);
204
+ if (!spec || spec.fm.status !== 'confirmed' || (spec.fm.level !== 'L1' && spec.fm.level !== 'L2'))
205
+ return false;
206
+ const children = specs.filter(item => item.fm.parentCode === specCode);
207
+ return children.length > 0 && children.every(child => child.fm.status === 'implemented');
208
+ }
209
+ function appendAdvice(command, advice) {
210
+ if (advice.length === 0)
211
+ return command;
212
+ return [command, ...advice.map((line) => `Advice: ${line}`)].join('\n');
213
+ }
214
+ export function readProjectContext(paths) {
215
+ try {
216
+ const raw = readFileSync(paths.configFile, 'utf8');
217
+ const parsed = parseYaml(raw);
218
+ const context = parsed?.context;
219
+ return typeof context === 'string' ? context.trim() : '';
220
+ }
221
+ catch {
222
+ return '';
223
+ }
224
+ }
225
+ export function renderRichGuide(paths, packageRoot, request) {
226
+ const matchedSpec = findSpecForRequest(paths, request);
227
+ const topic = matchedSpec?.fm.topic ?? inferTopicFromRequest(request) ?? '<topic>';
228
+ const flow = getFlowStatus(paths, { topic })[0];
229
+ const nextCommand = matchedSpec
230
+ ? suggestAfterSpecCommand(matchedSpec, paths)
231
+ : flow?.nextAction ?? `spec-manager spec new L1 --topic ${topic} --title "..."`;
232
+ return [
233
+ renderTag('task', renderGuideTask(matchedSpec, request)),
234
+ renderTag('project_context', readProjectContext(paths) || '(none)'),
235
+ renderTag('parent_context', renderParentContext(paths, matchedSpec)),
236
+ renderTag('rules', renderGuideRules()),
237
+ renderTag('required_sections', renderRequiredSections(matchedSpec)),
238
+ renderTag('template', renderGuideTemplate(packageRoot, matchedSpec)),
239
+ renderTag('next_command', nextCommand),
240
+ ].join('\n');
241
+ }
127
242
  function compareSpecRecords(a, b) {
128
243
  return a.fm.code.localeCompare(b.fm.code);
129
244
  }
@@ -133,4 +248,57 @@ export function renderTemplate(packageRoot, level, title) {
133
248
  const raw = readFileSync(join(packageRoot, 'templates', actual), 'utf8');
134
249
  return raw.replaceAll('{{title}}', title ?? 'Untitled');
135
250
  }
251
+ function findSpecForRequest(paths, request) {
252
+ const exact = request.trim();
253
+ if (exact) {
254
+ const found = findSpecByCode(paths, exact);
255
+ if (found)
256
+ return found;
257
+ }
258
+ const specs = listAllSpecs(paths);
259
+ return specs.find((spec) => request.includes(spec.fm.code)) ?? null;
260
+ }
261
+ function inferTopicFromRequest(input) {
262
+ const first = input.toLowerCase().match(/[a-z0-9][a-z0-9-]*/)?.[0];
263
+ return first ?? null;
264
+ }
265
+ function renderGuideTask(spec, request) {
266
+ if (spec)
267
+ return `为 ${spec.fm.code} 编写/推进 ${spec.fm.level} spec: ${spec.fm.title}`;
268
+ return request ? `处理请求: ${request}` : '检查当前项目状态并给出下一步';
269
+ }
270
+ function renderParentContext(paths, spec) {
271
+ if (!spec?.fm.parentCode)
272
+ return '(none)';
273
+ const parent = findSpecByCode(paths, spec.fm.parentCode);
274
+ if (!parent)
275
+ return `parent spec: ${spec.fm.parentCode} (not found)`;
276
+ return [
277
+ `parent spec: ${parent.fm.code}`,
278
+ `title: ${parent.fm.title}`,
279
+ `status: ${parent.fm.status}`,
280
+ `aiSummary: ${parent.fm.aiSummary || '(empty)'}`,
281
+ ].join('\n');
282
+ }
283
+ function renderGuideRules() {
284
+ return [
285
+ 'R1: 写完 spec 内容后必须停下等待用户审核。',
286
+ 'R2: confirm/freeze 是用户审核动作,不由 AI 自行推进。',
287
+ 'R13: spec update --content 必须同时提供 aiSummary。',
288
+ 'R22: 占位正文必须替换为真实内容。',
289
+ ].join('\n');
290
+ }
291
+ function renderRequiredSections(spec) {
292
+ if (!spec)
293
+ return '(unknown until a spec code is provided)';
294
+ return REQUIRED_SECTIONS[spec.fm.level].map((section) => `## ${section}`).join('\n');
295
+ }
296
+ function renderGuideTemplate(packageRoot, spec) {
297
+ if (!spec)
298
+ return '(unknown until a spec code is provided)';
299
+ return renderTemplate(packageRoot, spec.fm.level, spec.fm.title);
300
+ }
301
+ function renderTag(name, body) {
302
+ return `<${name}>\n${body}\n</${name}>`;
303
+ }
136
304
  //# sourceMappingURL=usability.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"usability.js","sourceRoot":"","sources":["../../src/core/usability.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usability.js","sourceRoot":"","sources":["../../src/core/usability.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ export interface ValidationWarning {
17
17
  message: string;
18
18
  section?: string;
19
19
  }
20
+ export declare const REQUIRED_SECTIONS: Record<SpecLevel, string[]>;
20
21
  export declare function validateSpecContent(level: SpecLevel, content: string): ValidationWarning[];
21
22
  /**
22
23
  * 校验 planJson(来自 templates/agent-plan.json 模板)。
@@ -31,4 +32,5 @@ export interface PlanJson {
31
32
  steps: PlanStep[];
32
33
  }
33
34
  export declare function validatePlanJson(plan: unknown): ValidationWarning[];
35
+ export declare function extractPlanJsonFromSpecContent(content: string): unknown;
34
36
  //# sourceMappingURL=validate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAWD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,iBAAiB,EAAE,CA0F1F;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;IACjD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,EAAE,CAmEnE"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAKzD,CAAC;AAIF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAkG1F;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;IACjD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,EAAE,CAmEnE;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAoBvE"}
@@ -10,8 +10,9 @@
10
10
  * 同时校验 RFC 2119 关键字(如果 L1/L2 内容包含"验收标准"段,则该段每条 AC 应含
11
11
  * SHALL/MUST/SHOULD 之一)。这是 OpenSpec 风格的强化。
12
12
  */
13
+ import { isPlaceholderContent } from './placeholder.js';
13
14
  const SPEC_CODE_INLINE_RE = /\b[a-z0-9][a-z0-9-]*-L[0-3](?:\.\d+)*(?:-(?!\d{8}\b)[a-z0-9][a-z0-9-]*)?\b/;
14
- const REQUIRED_SECTIONS = {
15
+ export const REQUIRED_SECTIONS = {
15
16
  L0: ['愿景', '路线图'],
16
17
  L1: ['背景', '用户故事', '验收标准', '范围边界'],
17
18
  L2: ['方案概述', '技术决策', '受影响模块', '接口契约', 'L3 裂变计划'],
@@ -22,6 +23,13 @@ export function validateSpecContent(level, content) {
22
23
  const warnings = [];
23
24
  const required = REQUIRED_SECTIONS[level] ?? [];
24
25
  const sections = parseSections(content);
26
+ if (isPlaceholderContent(content)) {
27
+ warnings.push({
28
+ rule: 'placeholder_marker',
29
+ level: 'warn',
30
+ message: 'contentTemplate 仍包含占位标记,请使用 spec-manager spec update <code> --content <file> --ai-summary "..."',
31
+ });
32
+ }
25
33
  for (const r of required) {
26
34
  if (!sections.some(s => s.heading === r)) {
27
35
  warnings.push({
@@ -173,6 +181,26 @@ export function validatePlanJson(plan) {
173
181
  }
174
182
  return warnings;
175
183
  }
184
+ export function extractPlanJsonFromSpecContent(content) {
185
+ const heading = content.match(/^##\s+planJson \(final\)\s*$/im);
186
+ if (!heading || heading.index === undefined) {
187
+ throw new Error('PLAN_JSON_MISSING: 未找到 ## planJson (final) 段');
188
+ }
189
+ const afterHeading = content.slice(heading.index + heading[0].length);
190
+ const nextHeading = afterHeading.search(/^##\s+/m);
191
+ const section = nextHeading >= 0 ? afterHeading.slice(0, nextHeading) : afterHeading;
192
+ const block = section.match(/```json\s*([\s\S]*?)\s*```/i);
193
+ if (!block) {
194
+ throw new Error('PLAN_JSON_MISSING: ## planJson (final) 段缺少 ```json 代码块');
195
+ }
196
+ try {
197
+ return JSON.parse(block[1]);
198
+ }
199
+ catch (err) {
200
+ const detail = err instanceof Error ? err.message : String(err);
201
+ throw new Error(`PLAN_JSON_INVALID: ${detail}`);
202
+ }
203
+ }
176
204
  function parseSections(content) {
177
205
  const lines = content.split('\n');
178
206
  const sections = [];
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { ProjectPaths } from './paths.js';
2
+ import type { SpecLevelT, SpecStatusT } from '../schemas/spec.js';
3
+ import type { TaskStatus } from './status.js';
4
+ export interface ViewSpecSummary {
5
+ code: string;
6
+ level: SpecLevelT;
7
+ status: SpecStatusT;
8
+ title: string;
9
+ parentCode: string | null;
10
+ aiSummary: string;
11
+ }
12
+ export interface ViewTaskSummary {
13
+ id: string;
14
+ specCode: string;
15
+ status: TaskStatus;
16
+ startedAt: string | null;
17
+ finishedAt: string | null;
18
+ totalSteps: number;
19
+ succeededSteps: number;
20
+ }
21
+ export interface ViewTopicSummary {
22
+ topic: string;
23
+ specCount: number;
24
+ taskCount: number;
25
+ nextAction: string;
26
+ specs: ViewSpecSummary[];
27
+ tasks: ViewTaskSummary[];
28
+ }
29
+ export interface ViewModel {
30
+ topics: ViewTopicSummary[];
31
+ }
32
+ export declare function buildViewModel(paths: ProjectPaths, opts?: {
33
+ topic?: string;
34
+ }): ViewModel;
35
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/core/view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAoCxF"}
@@ -0,0 +1,50 @@
1
+ import { listAllSpecs } from './spec-io.js';
2
+ import { listTasks } from './task.js';
3
+ import { getFlowStatus } from './usability.js';
4
+ export function buildViewModel(paths, opts) {
5
+ const specs = listAllSpecs(paths).filter((spec) => !opts?.topic || spec.fm.topic === opts.topic);
6
+ const tasks = listTasks(paths, { topic: opts?.topic });
7
+ if (opts?.topic && specs.length === 0 && tasks.length === 0) {
8
+ throw new Error(`TOPIC_NOT_FOUND: ${opts.topic}`);
9
+ }
10
+ const flows = getFlowStatus(paths, { topic: opts?.topic });
11
+ const topics = flows
12
+ .filter((flow) => !opts?.topic || flow.topic === opts.topic)
13
+ .map((flow) => {
14
+ const topicSpecs = specs
15
+ .filter((spec) => spec.fm.topic === flow.topic)
16
+ .sort((a, b) => a.fm.code.localeCompare(b.fm.code));
17
+ const topicTasks = tasks
18
+ .filter((task) => topicSpecs.some((spec) => spec.fm.code === task.specCode))
19
+ .sort((a, b) => a.created.localeCompare(b.created));
20
+ return {
21
+ topic: flow.topic,
22
+ specCount: topicSpecs.length,
23
+ taskCount: topicTasks.length,
24
+ nextAction: flow.nextAction,
25
+ specs: topicSpecs.map((spec) => ({
26
+ code: spec.fm.code,
27
+ level: spec.fm.level,
28
+ status: spec.fm.status,
29
+ title: spec.fm.title,
30
+ parentCode: spec.fm.parentCode,
31
+ aiSummary: spec.fm.aiSummary ?? '',
32
+ })),
33
+ tasks: topicTasks.map(summarizeTask),
34
+ };
35
+ });
36
+ return { topics };
37
+ }
38
+ function summarizeTask(task) {
39
+ const steps = task.steps ?? [];
40
+ return {
41
+ id: task.id,
42
+ specCode: task.specCode,
43
+ status: task.status,
44
+ startedAt: task.startedAt,
45
+ finishedAt: task.finishedAt,
46
+ totalSteps: steps.length,
47
+ succeededSteps: steps.filter((step) => step.status === 'succeeded').length,
48
+ };
49
+ }
50
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/core/view.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -7,5 +7,12 @@ export * from './core/agents.js';
7
7
  export * from './core/audit-events.js';
8
8
  export * from './core/repository.js';
9
9
  export * from './core/usability.js';
10
+ export * from './core/invariants.js';
11
+ export * from './core/integrity.js';
12
+ export * from './core/integrity-exemptions.js';
13
+ export * from './core/remediation.js';
14
+ export * from './core/lifecycle.js';
15
+ export * from './core/reconciliation.js';
16
+ export * from './core/transaction.js';
10
17
  export * from './schemas/spec.js';
11
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -8,5 +8,12 @@ export * from './core/agents.js';
8
8
  export * from './core/audit-events.js';
9
9
  export * from './core/repository.js';
10
10
  export * from './core/usability.js';
11
+ export * from './core/invariants.js';
12
+ export * from './core/integrity.js';
13
+ export * from './core/integrity-exemptions.js';
14
+ export * from './core/remediation.js';
15
+ export * from './core/lifecycle.js';
16
+ export * from './core/reconciliation.js';
17
+ export * from './core/transaction.js';
11
18
  export * from './schemas/spec.js';
12
19
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC"}