@winspan/claude-forge 0.2.13 → 0.2.15

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 (79) hide show
  1. package/README.md +2 -1
  2. package/dist/autopilot/intent-engine.d.ts +4 -1
  3. package/dist/autopilot/intent-engine.d.ts.map +1 -1
  4. package/dist/autopilot/intent-engine.js +6 -1
  5. package/dist/autopilot/intent-engine.js.map +1 -1
  6. package/dist/autopilot/quality-gate.d.ts +14 -0
  7. package/dist/autopilot/quality-gate.d.ts.map +1 -1
  8. package/dist/autopilot/quality-gate.js +93 -2
  9. package/dist/autopilot/quality-gate.js.map +1 -1
  10. package/dist/claudemd/index.d.ts.map +1 -1
  11. package/dist/claudemd/index.js +5 -0
  12. package/dist/claudemd/index.js.map +1 -1
  13. package/dist/cli/commands/claudemd.d.ts.map +1 -1
  14. package/dist/cli/commands/claudemd.js +3 -0
  15. package/dist/cli/commands/claudemd.js.map +1 -1
  16. package/dist/cli/commands/init/doctor.d.ts.map +1 -1
  17. package/dist/cli/commands/init/doctor.js +19 -1
  18. package/dist/cli/commands/init/doctor.js.map +1 -1
  19. package/dist/cli/commands/logs.d.ts.map +1 -1
  20. package/dist/cli/commands/logs.js +38 -2
  21. package/dist/cli/commands/logs.js.map +1 -1
  22. package/dist/daemon/handlers/post-tool-use-handler.d.ts.map +1 -1
  23. package/dist/daemon/handlers/post-tool-use-handler.js +20 -2
  24. package/dist/daemon/handlers/post-tool-use-handler.js.map +1 -1
  25. package/dist/daemon/handlers/pre-tool-use-handler.d.ts.map +1 -1
  26. package/dist/daemon/handlers/pre-tool-use-handler.js +3 -2
  27. package/dist/daemon/handlers/pre-tool-use-handler.js.map +1 -1
  28. package/dist/daemon/handlers/stop-handler.d.ts +1 -0
  29. package/dist/daemon/handlers/stop-handler.d.ts.map +1 -1
  30. package/dist/daemon/handlers/stop-handler.js +14 -5
  31. package/dist/daemon/handlers/stop-handler.js.map +1 -1
  32. package/dist/daemon/handlers/user-prompt-handler.d.ts +11 -0
  33. package/dist/daemon/handlers/user-prompt-handler.d.ts.map +1 -1
  34. package/dist/daemon/handlers/user-prompt-handler.js +48 -5
  35. package/dist/daemon/handlers/user-prompt-handler.js.map +1 -1
  36. package/dist/daemon/index.d.ts.map +1 -1
  37. package/dist/daemon/index.js +12 -2
  38. package/dist/daemon/index.js.map +1 -1
  39. package/dist/pattern-engine/pattern-evolver.d.ts.map +1 -1
  40. package/dist/pattern-engine/pattern-evolver.js +1 -0
  41. package/dist/pattern-engine/pattern-evolver.js.map +1 -1
  42. package/dist/pipeline/index.d.ts +6 -1
  43. package/dist/pipeline/index.d.ts.map +1 -1
  44. package/dist/pipeline/index.js +9 -6
  45. package/dist/pipeline/index.js.map +1 -1
  46. package/dist/pipeline/phase-manager.d.ts +11 -3
  47. package/dist/pipeline/phase-manager.d.ts.map +1 -1
  48. package/dist/pipeline/phase-manager.js +61 -10
  49. package/dist/pipeline/phase-manager.js.map +1 -1
  50. package/dist/profile/index.js +1 -1
  51. package/dist/profile/index.js.map +1 -1
  52. package/dist/resume/index.d.ts.map +1 -1
  53. package/dist/resume/index.js +1 -0
  54. package/dist/resume/index.js.map +1 -1
  55. package/dist/skill-registry/evolver/index.d.ts.map +1 -1
  56. package/dist/skill-registry/evolver/index.js +2 -3
  57. package/dist/skill-registry/evolver/index.js.map +1 -1
  58. package/dist/skill-registry/evolver/optimization-engine.d.ts.map +1 -1
  59. package/dist/skill-registry/evolver/optimization-engine.js +68 -10
  60. package/dist/skill-registry/evolver/optimization-engine.js.map +1 -1
  61. package/dist/skill-registry/index.d.ts +1 -1
  62. package/dist/skill-registry/index.d.ts.map +1 -1
  63. package/dist/skill-registry/index.js +2 -2
  64. package/dist/skill-registry/index.js.map +1 -1
  65. package/dist/skill-registry/orchestrator.d.ts +2 -1
  66. package/dist/skill-registry/orchestrator.d.ts.map +1 -1
  67. package/dist/skill-registry/orchestrator.js +15 -6
  68. package/dist/skill-registry/orchestrator.js.map +1 -1
  69. package/dist/skill-registry/registry.d.ts +9 -0
  70. package/dist/skill-registry/registry.d.ts.map +1 -1
  71. package/dist/skill-registry/registry.js +33 -4
  72. package/dist/skill-registry/registry.js.map +1 -1
  73. package/dist/skill-registry/scanner.js +1 -1
  74. package/dist/skill-registry/scanner.js.map +1 -1
  75. package/dist/utils/plan-reader.d.ts +27 -0
  76. package/dist/utils/plan-reader.d.ts.map +1 -0
  77. package/dist/utils/plan-reader.js +112 -0
  78. package/dist/utils/plan-reader.js.map +1 -0
  79. package/package.json +1 -1
@@ -0,0 +1,112 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ /**
4
+ * 返回指定项目和日期的计划文件路径
5
+ */
6
+ export function getPlanFilePath(projectPath, date) {
7
+ const d = date ?? new Date();
8
+ const dateStr = d.getFullYear()
9
+ + '-' + String(d.getMonth() + 1).padStart(2, '0')
10
+ + '-' + String(d.getDate()).padStart(2, '0');
11
+ return path.join(projectPath, '.claude-forge', 'plans', `${dateStr}.md`);
12
+ }
13
+ /**
14
+ * 读取并解析计划文件。
15
+ * 读取顺序:今天 → 昨天(兜底跨夜 session)
16
+ * 出错返回 null。
17
+ */
18
+ export function readPlanFile(projectPath, date) {
19
+ const dates = date ? [date] : (() => {
20
+ const today = new Date();
21
+ const yesterday = new Date(today);
22
+ yesterday.setDate(yesterday.getDate() - 1);
23
+ return [today, yesterday];
24
+ })();
25
+ for (const d of dates) {
26
+ try {
27
+ const filePath = getPlanFilePath(projectPath, d);
28
+ if (!fs.existsSync(filePath))
29
+ continue;
30
+ const content = fs.readFileSync(filePath, 'utf-8');
31
+ const tasks = parsePlanTasks(content);
32
+ if (tasks.length === 0)
33
+ continue;
34
+ const dateStr = d.getFullYear()
35
+ + '-' + String(d.getMonth() + 1).padStart(2, '0')
36
+ + '-' + String(d.getDate()).padStart(2, '0');
37
+ const hasInProgress = tasks.some(t => t.status === 'in-progress');
38
+ const hasIncomplete = tasks.some(t => t.status === 'pending' || t.status === 'in-progress');
39
+ return { date: dateStr, filePath, tasks, hasInProgress, hasIncomplete };
40
+ }
41
+ catch {
42
+ // 出错继续尝试下一个日期
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ /**
48
+ * 构建会话开始时注入的计划上下文。
49
+ * 若今日或昨日没有活跃计划,返回 null。
50
+ */
51
+ export function buildSessionStartPlanContext(projectPath) {
52
+ try {
53
+ const planFile = readPlanFile(projectPath);
54
+ if (!planFile)
55
+ return null;
56
+ const { date, tasks } = planFile;
57
+ const pending = tasks.filter(t => t.status === 'pending');
58
+ const inProgress = tasks.filter(t => t.status === 'in-progress');
59
+ const done = tasks.filter(t => t.status === 'done');
60
+ const parts = [];
61
+ parts.push(`[Forge 计划] 上次工作进度(${date})`);
62
+ if (inProgress.length > 0) {
63
+ parts.push('进行中:');
64
+ for (const t of inProgress)
65
+ parts.push(` - [~] ${t.title}`);
66
+ }
67
+ if (pending.length > 0) {
68
+ parts.push('待处理:');
69
+ for (const t of pending)
70
+ parts.push(` - [ ] ${t.title}`);
71
+ }
72
+ if (done.length > 0) {
73
+ parts.push(`已完成:${done.length} 项`);
74
+ }
75
+ parts.push('请问是否继续上述任务?若是,直接开始;若否,请说明新需求。');
76
+ return parts.join('\n');
77
+ }
78
+ catch {
79
+ return null;
80
+ }
81
+ }
82
+ /**
83
+ * 从 Markdown 内容解析任务清单
84
+ * - `- [ ]` → pending
85
+ * - `- [x]` / `- [X]` → done
86
+ * - 其他任何标记(`[~]` `[-]` `[>]` 等)→ in-progress
87
+ */
88
+ function parsePlanTasks(content) {
89
+ const tasks = [];
90
+ const lines = content.split('\n');
91
+ for (const line of lines) {
92
+ // 匹配 `- [?] 任务文字` 格式(支持任意空白前缀)
93
+ const match = line.match(/^\s*-\s+\[([^\]]*)\]\s+(.+)$/);
94
+ if (!match)
95
+ continue;
96
+ const marker = match[1];
97
+ const title = match[2].trim();
98
+ let status;
99
+ if (marker === '') {
100
+ status = 'pending';
101
+ }
102
+ else if (marker.toLowerCase() === 'x') {
103
+ status = 'done';
104
+ }
105
+ else {
106
+ status = 'in-progress';
107
+ }
108
+ tasks.push({ title, status });
109
+ }
110
+ return tasks;
111
+ }
112
+ //# sourceMappingURL=plan-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-reader.js","sourceRoot":"","sources":["../../src/utils/plan-reader.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@winspan/claude-forge",
3
- "version": "0.2.13",
3
+ "version": "0.2.15",
4
4
  "description": "SDLC intelligent orchestration engine for Claude Code",
5
5
  "main": "dist/cli/index.js",
6
6
  "type": "module",