speccore 8.3.304 → 8.3.305

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 (127) hide show
  1. package/dist/commands/change.d.ts.map +1 -1
  2. package/dist/commands/change.js +2 -1
  3. package/dist/commands/change.js.map +1 -1
  4. package/dist/commands/doctor.js +7 -6
  5. package/dist/commands/doctor.js.map +1 -1
  6. package/dist/commands/history.d.ts.map +1 -1
  7. package/dist/commands/history.js +2 -1
  8. package/dist/commands/history.js.map +1 -1
  9. package/dist/commands/welcome.d.ts.map +1 -1
  10. package/dist/commands/welcome.js +3 -2
  11. package/dist/commands/welcome.js.map +1 -1
  12. package/dist/core/analyze-engine.js +8 -8
  13. package/dist/core/analyze-engine.js.map +1 -1
  14. package/dist/core/ask-config.d.ts.map +1 -1
  15. package/dist/core/ask-config.js +8 -6
  16. package/dist/core/ask-config.js.map +1 -1
  17. package/dist/core/capabilities.d.ts.map +1 -1
  18. package/dist/core/capabilities.js +2 -1
  19. package/dist/core/capabilities.js.map +1 -1
  20. package/dist/core/change-detection.d.ts.map +1 -1
  21. package/dist/core/change-detection.js +6 -5
  22. package/dist/core/change-detection.js.map +1 -1
  23. package/dist/core/change-inbox.d.ts.map +1 -1
  24. package/dist/core/change-inbox.js +2 -1
  25. package/dist/core/change-inbox.js.map +1 -1
  26. package/dist/core/code-graph/incremental-build.d.ts.map +1 -1
  27. package/dist/core/code-graph/incremental-build.js +2 -1
  28. package/dist/core/code-graph/incremental-build.js.map +1 -1
  29. package/dist/core/code-graph/index.d.ts.map +1 -1
  30. package/dist/core/code-graph/index.js +2 -1
  31. package/dist/core/code-graph/index.js.map +1 -1
  32. package/dist/core/code-graph/requirement-linker.d.ts.map +1 -1
  33. package/dist/core/code-graph/requirement-linker.js +2 -1
  34. package/dist/core/code-graph/requirement-linker.js.map +1 -1
  35. package/dist/core/code-index-markdown.d.ts.map +1 -1
  36. package/dist/core/code-index-markdown.js +5 -4
  37. package/dist/core/code-index-markdown.js.map +1 -1
  38. package/dist/core/code-scanner.d.ts.map +1 -1
  39. package/dist/core/code-scanner.js +6 -5
  40. package/dist/core/code-scanner.js.map +1 -1
  41. package/dist/core/context.d.ts.map +1 -1
  42. package/dist/core/context.js +7 -6
  43. package/dist/core/context.js.map +1 -1
  44. package/dist/core/doc-cross-reference.d.ts.map +1 -1
  45. package/dist/core/doc-cross-reference.js +2 -1
  46. package/dist/core/doc-cross-reference.js.map +1 -1
  47. package/dist/core/doc-quality-gate.d.ts.map +1 -1
  48. package/dist/core/doc-quality-gate.js +2 -1
  49. package/dist/core/doc-quality-gate.js.map +1 -1
  50. package/dist/core/environment-config.d.ts.map +1 -1
  51. package/dist/core/environment-config.js +3 -2
  52. package/dist/core/environment-config.js.map +1 -1
  53. package/dist/core/git-integration.d.ts.map +1 -1
  54. package/dist/core/git-integration.js +11 -10
  55. package/dist/core/git-integration.js.map +1 -1
  56. package/dist/core/global-artifacts.d.ts.map +1 -1
  57. package/dist/core/global-artifacts.js +2 -1
  58. package/dist/core/global-artifacts.js.map +1 -1
  59. package/dist/core/global-counters.d.ts.map +1 -1
  60. package/dist/core/global-counters.js +2 -1
  61. package/dist/core/global-counters.js.map +1 -1
  62. package/dist/core/global-layer.d.ts.map +1 -1
  63. package/dist/core/global-layer.js +2 -1
  64. package/dist/core/global-layer.js.map +1 -1
  65. package/dist/core/handoff-generator.d.ts.map +1 -1
  66. package/dist/core/handoff-generator.js +4 -3
  67. package/dist/core/handoff-generator.js.map +1 -1
  68. package/dist/core/html-prototype.d.ts.map +1 -1
  69. package/dist/core/html-prototype.js +2 -1
  70. package/dist/core/html-prototype.js.map +1 -1
  71. package/dist/core/inbox.d.ts.map +1 -1
  72. package/dist/core/inbox.js +4 -2
  73. package/dist/core/inbox.js.map +1 -1
  74. package/dist/core/incremental-analyzer.d.ts.map +1 -1
  75. package/dist/core/incremental-analyzer.js +2 -1
  76. package/dist/core/incremental-analyzer.js.map +1 -1
  77. package/dist/core/iteration-cache.d.ts.map +1 -1
  78. package/dist/core/iteration-cache.js +2 -1
  79. package/dist/core/iteration-cache.js.map +1 -1
  80. package/dist/core/notification.d.ts.map +1 -1
  81. package/dist/core/notification.js +2 -1
  82. package/dist/core/notification.js.map +1 -1
  83. package/dist/core/operation-log.d.ts.map +1 -1
  84. package/dist/core/operation-log.js +2 -1
  85. package/dist/core/operation-log.js.map +1 -1
  86. package/dist/core/pattern-detector.d.ts.map +1 -1
  87. package/dist/core/pattern-detector.js +3 -2
  88. package/dist/core/pattern-detector.js.map +1 -1
  89. package/dist/core/pipeline-engine.d.ts.map +1 -1
  90. package/dist/core/pipeline-engine.js +2 -1
  91. package/dist/core/pipeline-engine.js.map +1 -1
  92. package/dist/core/plan-store.d.ts.map +1 -1
  93. package/dist/core/plan-store.js +4 -2
  94. package/dist/core/plan-store.js.map +1 -1
  95. package/dist/core/questions.d.ts.map +1 -1
  96. package/dist/core/questions.js +3 -2
  97. package/dist/core/questions.js.map +1 -1
  98. package/dist/core/rag-engine.d.ts.map +1 -1
  99. package/dist/core/rag-engine.js +2 -1
  100. package/dist/core/rag-engine.js.map +1 -1
  101. package/dist/core/refresh-scheduler.d.ts.map +1 -1
  102. package/dist/core/refresh-scheduler.js +4 -3
  103. package/dist/core/refresh-scheduler.js.map +1 -1
  104. package/dist/core/session-state.d.ts.map +1 -1
  105. package/dist/core/session-state.js +7 -5
  106. package/dist/core/session-state.js.map +1 -1
  107. package/dist/core/spec-rules.d.ts.map +1 -1
  108. package/dist/core/spec-rules.js +3 -2
  109. package/dist/core/spec-rules.js.map +1 -1
  110. package/dist/core/structured-extractor.d.ts.map +1 -1
  111. package/dist/core/structured-extractor.js +10 -9
  112. package/dist/core/structured-extractor.js.map +1 -1
  113. package/dist/core/unified-config.d.ts.map +1 -1
  114. package/dist/core/unified-config.js +20 -19
  115. package/dist/core/unified-config.js.map +1 -1
  116. package/dist/core/validator.d.ts.map +1 -1
  117. package/dist/core/validator.js +2 -1
  118. package/dist/core/validator.js.map +1 -1
  119. package/dist/utils/task-utils.d.ts +7 -0
  120. package/dist/utils/task-utils.d.ts.map +1 -1
  121. package/dist/utils/task-utils.js +11 -1
  122. package/dist/utils/task-utils.js.map +1 -1
  123. package/package.json +1 -1
  124. package/templates/html/speccore-ask-guide.html +1 -1
  125. package/templates/html/speccore-ask-pipeline.html +1 -1
  126. package/templates/html/speccore-ask-result.html +1 -1
  127. package/templates/html/speccore-help.html +2 -2
@@ -85,7 +85,7 @@ async function runAnalysis(input) {
85
85
  // 自动检测: 都没指定 → 从 01-产品需求/ 递归读取产品原始需求
86
86
  if (requirements.length === 0 && sources.length === 0) {
87
87
  if (input.scope === 'iteration' && input.iteration) {
88
- const productReqDir = (0, path_1.join)(`Iteration-${input.iteration}`, '010-requirements');
88
+ const productReqDir = (0, path_1.join)((0, task_utils_1.getProjectRoot)(), `Iteration-${input.iteration}`, '010-requirements');
89
89
  if (await (0, fs_extra_1.pathExists)(productReqDir)) {
90
90
  // 递归扫描子目录 ({端名}/ 等)
91
91
  const scanDir = async (dir) => {
@@ -104,7 +104,7 @@ async function runAnalysis(input) {
104
104
  }
105
105
  // 回退路径: 如果没有 01-产品需求/, 回退到 010-requirements/REQUIREMENT.md
106
106
  if (requirements.length === 0) {
107
- const legacyReq = (0, path_1.join)(`Iteration-${input.iteration}`, '010-requirements', 'REQUIREMENT.md');
107
+ const legacyReq = (0, path_1.join)((0, task_utils_1.getProjectRoot)(), `Iteration-${input.iteration}`, '010-requirements', 'REQUIREMENT.md');
108
108
  if (await (0, fs_extra_1.pathExists)(legacyReq)) {
109
109
  requirements = [legacyReq];
110
110
  }
@@ -216,12 +216,12 @@ async function analyzeRequirements(input) {
216
216
  let outputPath;
217
217
  let report;
218
218
  if (input.scope === 'global') {
219
- outputPath = (0, path_1.join)('.speccore', 'GLOBAL', input.output || 'REQ_CONSISTENCY.md');
219
+ outputPath = (0, path_1.join)((0, task_utils_1.getProjectRoot)(), '.speccore', 'GLOBAL', input.output || 'REQ_CONSISTENCY.md');
220
220
  report = buildReqConsistencyReport(input, issues, archImpact);
221
221
  }
222
222
  else if (input.scope === 'task') {
223
223
  // task scope — 已在入口校验
224
- outputPath = (0, path_1.join)(`Iteration-${input.iteration}`, '030-tasks', input.taskId, '00-specs', input.output || 'ANALYSIS.md');
224
+ outputPath = (0, path_1.join)((0, task_utils_1.getProjectRoot)(), `Iteration-${input.iteration}`, '030-tasks', input.taskId, '00-specs', input.output || 'ANALYSIS.md');
225
225
  report = buildTaskReqReport(input, issues, archImpact, sourceContents, sourceSummaries);
226
226
  }
227
227
  else {
@@ -285,7 +285,7 @@ async function analyzeCodebase(input) {
285
285
  }
286
286
  else if (input.scope === 'task') {
287
287
  // task scope — 已在入口校验
288
- outputPath = (0, path_1.join)(`Iteration-${input.iteration}`, '030-tasks', input.taskId, '00-specs', input.output || 'CODE_REVIEW.md');
288
+ outputPath = (0, path_1.join)((0, task_utils_1.getProjectRoot)(), `Iteration-${input.iteration}`, '030-tasks', input.taskId, '00-specs', input.output || 'CODE_REVIEW.md');
289
289
  report = buildTaskCodeReport(input, fileStats, apiInventory, hotspots);
290
290
  }
291
291
  else {
@@ -377,7 +377,7 @@ async function analyzeCombined(input) {
377
377
  report = await buildAIEnhancedReport(input, 'global', { issues, archImpact, fileStats, apiInventory, aiContext, sourceContents });
378
378
  }
379
379
  else if (input.scope === 'task') {
380
- outputPath = (0, path_1.join)(`Iteration-${input.iteration}`, '030-tasks', input.taskId, '00-specs', input.output || 'ANALYSIS.md');
380
+ outputPath = (0, path_1.join)((0, task_utils_1.getProjectRoot)(), `Iteration-${input.iteration}`, '030-tasks', input.taskId, '00-specs', input.output || 'ANALYSIS.md');
381
381
  report = await buildAIEnhancedReport(input, 'task', { issues, archImpact, fileStats, apiInventory, aiContext, sourceContents });
382
382
  }
383
383
  else {
@@ -728,7 +728,7 @@ function scanCompleteness(content) {
728
728
  }
729
729
  async function analyzeArchitectureImpact(content) {
730
730
  const impact = { modules: [], newDependencies: [], risks: [], apis: [] };
731
- const archPath = (0, path_1.join)(process.cwd(), '.speccore', 'GLOBAL', 'ARCHITECTURE.md');
731
+ const archPath = (0, path_1.join)((0, task_utils_1.getProjectRoot)(), '.speccore', 'GLOBAL', 'ARCHITECTURE.md');
732
732
  if (await (0, fs_extra_1.pathExists)(archPath)) {
733
733
  const archContent = await (0, fs_extra_1.readFile)(archPath, 'utf-8');
734
734
  if (archContent.match(/## 模块|## 系统边界|## 服务列表/)) {
@@ -1765,7 +1765,7 @@ async function detectPlatformsFromConstitution() {
1765
1765
  _detectedBackendPlatforms = explicitPlatforms.filter(p => /service|server|api|backend|后台|服务|后端/i.test(p));
1766
1766
  return explicitPlatforms;
1767
1767
  }
1768
- const constitutionPath = (0, path_1.join)(process.cwd(), '.speccore', 'CONSTITUTION.md');
1768
+ const constitutionPath = (0, path_1.join)((0, task_utils_1.getProjectRoot)(), '.speccore', 'CONSTITUTION.md');
1769
1769
  if (require('fs').existsSync(constitutionPath)) {
1770
1770
  const content = require('fs').readFileSync(constitutionPath, 'utf-8');
1771
1771
  const lines = content.split('\n');