speccore 5.19.2 → 5.22.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 (138) hide show
  1. package/README.en.md +63 -210
  2. package/README.md +108 -252
  3. package/dist/cli.js +224 -300
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/analyze.d.ts +5 -0
  6. package/dist/commands/analyze.d.ts.map +1 -1
  7. package/dist/commands/analyze.js +235 -543
  8. package/dist/commands/analyze.js.map +1 -1
  9. package/dist/commands/ask.d.ts +8 -0
  10. package/dist/commands/ask.d.ts.map +1 -0
  11. package/dist/commands/ask.js +293 -0
  12. package/dist/commands/ask.js.map +1 -0
  13. package/dist/commands/bugfix.d.ts +4 -0
  14. package/dist/commands/bugfix.d.ts.map +1 -1
  15. package/dist/commands/bugfix.js +122 -2
  16. package/dist/commands/bugfix.js.map +1 -1
  17. package/dist/commands/change.d.ts +2 -0
  18. package/dist/commands/change.d.ts.map +1 -1
  19. package/dist/commands/change.js +37 -2
  20. package/dist/commands/change.js.map +1 -1
  21. package/dist/commands/completion.js +1 -1
  22. package/dist/commands/completion.js.map +1 -1
  23. package/dist/commands/dev.d.ts +2 -0
  24. package/dist/commands/dev.d.ts.map +1 -1
  25. package/dist/commands/dev.js +175 -1
  26. package/dist/commands/dev.js.map +1 -1
  27. package/dist/commands/doc2spec.d.ts +10 -0
  28. package/dist/commands/doc2spec.d.ts.map +1 -0
  29. package/dist/commands/{word2spec.js → doc2spec.js} +55 -19
  30. package/dist/commands/doc2spec.js.map +1 -0
  31. package/dist/commands/done.d.ts.map +1 -1
  32. package/dist/commands/done.js +47 -0
  33. package/dist/commands/done.js.map +1 -1
  34. package/dist/commands/execute.d.ts +1 -0
  35. package/dist/commands/execute.d.ts.map +1 -1
  36. package/dist/commands/execute.js +118 -11
  37. package/dist/commands/execute.js.map +1 -1
  38. package/dist/commands/help-quick.js +2 -2
  39. package/dist/commands/help-quick.js.map +1 -1
  40. package/dist/commands/help.d.ts +3 -2
  41. package/dist/commands/help.d.ts.map +1 -1
  42. package/dist/commands/help.js +372 -51
  43. package/dist/commands/help.js.map +1 -1
  44. package/dist/commands/import.d.ts +1 -0
  45. package/dist/commands/import.d.ts.map +1 -1
  46. package/dist/commands/import.js +289 -15
  47. package/dist/commands/import.js.map +1 -1
  48. package/dist/commands/init.d.ts +0 -1
  49. package/dist/commands/init.d.ts.map +1 -1
  50. package/dist/commands/init.js +177 -283
  51. package/dist/commands/init.js.map +1 -1
  52. package/dist/commands/iteration/create.d.ts +1 -0
  53. package/dist/commands/iteration/create.d.ts.map +1 -1
  54. package/dist/commands/iteration/create.js +1 -0
  55. package/dist/commands/iteration/create.js.map +1 -1
  56. package/dist/commands/iteration/split.d.ts +1 -0
  57. package/dist/commands/iteration/split.d.ts.map +1 -1
  58. package/dist/commands/iteration/split.js +240 -7
  59. package/dist/commands/iteration/split.js.map +1 -1
  60. package/dist/commands/plan.d.ts +1 -0
  61. package/dist/commands/plan.d.ts.map +1 -1
  62. package/dist/commands/plan.js +25 -1
  63. package/dist/commands/plan.js.map +1 -1
  64. package/dist/commands/pr.d.ts +1 -0
  65. package/dist/commands/pr.d.ts.map +1 -1
  66. package/dist/commands/pr.js +94 -22
  67. package/dist/commands/pr.js.map +1 -1
  68. package/dist/commands/schedule.d.ts +27 -0
  69. package/dist/commands/schedule.d.ts.map +1 -0
  70. package/dist/commands/schedule.js +203 -0
  71. package/dist/commands/schedule.js.map +1 -0
  72. package/dist/commands/status-panel.d.ts +8 -1
  73. package/dist/commands/status-panel.d.ts.map +1 -1
  74. package/dist/commands/status-panel.js +1095 -5
  75. package/dist/commands/status-panel.js.map +1 -1
  76. package/dist/commands/task/new.d.ts +4 -0
  77. package/dist/commands/task/new.d.ts.map +1 -1
  78. package/dist/commands/task/new.js +87 -0
  79. package/dist/commands/task/new.js.map +1 -1
  80. package/dist/core/analyze-engine.d.ts +32 -0
  81. package/dist/core/analyze-engine.d.ts.map +1 -0
  82. package/dist/core/analyze-engine.js +935 -0
  83. package/dist/core/analyze-engine.js.map +1 -0
  84. package/dist/core/capabilities.d.ts +12 -0
  85. package/dist/core/capabilities.d.ts.map +1 -0
  86. package/dist/core/capabilities.js +58 -0
  87. package/dist/core/capabilities.js.map +1 -0
  88. package/dist/core/code-scanner.d.ts.map +1 -1
  89. package/dist/core/code-scanner.js +4 -1
  90. package/dist/core/code-scanner.js.map +1 -1
  91. package/dist/core/intent-recognition.d.ts +1 -1
  92. package/dist/core/intent-recognition.d.ts.map +1 -1
  93. package/dist/core/intent-recognition.js +5 -5
  94. package/dist/core/intent-recognition.js.map +1 -1
  95. package/dist/core/next-steps.js +1 -1
  96. package/dist/core/next-steps.js.map +1 -1
  97. package/dist/core/schedule-engine.d.ts +25 -0
  98. package/dist/core/schedule-engine.d.ts.map +1 -0
  99. package/dist/core/schedule-engine.js +179 -0
  100. package/dist/core/schedule-engine.js.map +1 -0
  101. package/dist/core/schedule-store.d.ts +104 -0
  102. package/dist/core/schedule-store.d.ts.map +1 -0
  103. package/dist/core/schedule-store.js +188 -0
  104. package/dist/core/schedule-store.js.map +1 -0
  105. package/dist/core/schemas/iteration.schema.d.ts +4 -4
  106. package/dist/core/schemas/task.schema.d.ts +2 -2
  107. package/package.json +7 -13
  108. package/dist/commands/demo.d.ts +0 -10
  109. package/dist/commands/demo.d.ts.map +0 -1
  110. package/dist/commands/demo.js +0 -151
  111. package/dist/commands/demo.js.map +0 -1
  112. package/dist/commands/goal.d.ts +0 -15
  113. package/dist/commands/goal.d.ts.map +0 -1
  114. package/dist/commands/goal.js +0 -232
  115. package/dist/commands/goal.js.map +0 -1
  116. package/dist/commands/new-task.d.ts +0 -15
  117. package/dist/commands/new-task.d.ts.map +0 -1
  118. package/dist/commands/new-task.js +0 -208
  119. package/dist/commands/new-task.js.map +0 -1
  120. package/dist/commands/platform-add.d.ts +0 -12
  121. package/dist/commands/platform-add.d.ts.map +0 -1
  122. package/dist/commands/platform-add.js +0 -111
  123. package/dist/commands/platform-add.js.map +0 -1
  124. package/dist/commands/retro.d.ts +0 -10
  125. package/dist/commands/retro.d.ts.map +0 -1
  126. package/dist/commands/retro.js +0 -131
  127. package/dist/commands/retro.js.map +0 -1
  128. package/dist/commands/spec.d.ts +0 -8
  129. package/dist/commands/spec.d.ts.map +0 -1
  130. package/dist/commands/spec.js +0 -159
  131. package/dist/commands/spec.js.map +0 -1
  132. package/dist/commands/template-add.d.ts +0 -12
  133. package/dist/commands/template-add.d.ts.map +0 -1
  134. package/dist/commands/template-add.js +0 -65
  135. package/dist/commands/template-add.js.map +0 -1
  136. package/dist/commands/word2spec.d.ts +0 -8
  137. package/dist/commands/word2spec.d.ts.map +0 -1
  138. package/dist/commands/word2spec.js.map +0 -1
@@ -9,6 +9,11 @@ const path_1 = require("path");
9
9
  const child_process_1 = require("child_process");
10
10
  const logger_1 = require("../utils/logger");
11
11
  const context_1 = require("../core/context");
12
+ const readline_1 = require("readline");
13
+ function promptUser(q) {
14
+ const rl = (0, readline_1.createInterface)({ input: process.stdin, output: process.stdout });
15
+ return new Promise(r => rl.question(`${q} `, a => { rl.close(); r(a.trim()); }));
16
+ }
12
17
  async function prCommand(options) {
13
18
  const iteration = await (0, context_1.getDefaultIteration)(options.iteration);
14
19
  if (!iteration) {
@@ -16,7 +21,6 @@ async function prCommand(options) {
16
21
  return;
17
22
  }
18
23
  const iterDir = `期次-${iteration}`;
19
- // Find task
20
24
  let taskId = options.task;
21
25
  if (!taskId) {
22
26
  const branch = (0, child_process_1.execSync)('git branch --show-current', { encoding: 'utf-8' }).trim();
@@ -37,42 +41,110 @@ async function prCommand(options) {
37
41
  }
38
42
  const taskName = taskEntry.name;
39
43
  const backendDir = (0, path_1.join)(iterDir, taskName, 'backend');
40
- const spinner = new logger_1.Spinner(`创建 PR: ${taskName}`);
41
- spinner.start();
42
44
  try {
43
- // Push current branch
44
45
  const branch = (0, child_process_1.execSync)('git branch --show-current', { encoding: 'utf-8' }).trim();
46
+ // ── Interactive mode ──
47
+ if (options.interactive) {
48
+ await interactivePrFlow(branch, backendDir, taskName, iteration, options);
49
+ return;
50
+ }
51
+ // ── Auto mode ──
52
+ const spinner = new logger_1.Spinner(`创建 PR: ${taskName}`);
53
+ spinner.start();
45
54
  (0, child_process_1.execSync)(`git push -u origin "${branch}" 2>/dev/null`, { stdio: 'pipe' });
46
- // Build PR title + body
47
55
  const title = options.title || taskName;
48
56
  const body = await buildPrBody(backendDir, taskName, iteration);
49
- // Detect base branch
50
57
  const base = options.base || 'main';
51
- // Create PR via gh CLI
52
58
  const draftFlag = options.draft ? ' --draft' : '';
53
59
  const result = (0, child_process_1.execSync)(`gh pr create --base "${base}" --head "${branch}" --title "${title}" --body "${body}"${draftFlag}`, { encoding: 'utf-8', stdio: 'pipe' }).trim();
54
60
  spinner.stop(`✅ PR 已创建: ${result}`);
55
- // Update TASK.md with PR link
56
- const taskMdPath = (0, path_1.join)(backendDir, 'TASK.md');
57
- if (await (0, fs_extra_1.pathExists)(taskMdPath)) {
58
- let taskMd = await (0, fs_extra_1.readFile)(taskMdPath, 'utf-8');
59
- if (!taskMd.includes('## PR')) {
60
- taskMd += `\n\n## PR\n\n| URL | 状态 |\n| :--- | :--- |\n| ${result} | 🔄 待审查 |\n`;
61
- }
62
- else {
63
- taskMd = taskMd.replace('| :--- | :--- |\n', `| :--- | :--- |\n| ${result} | 🔄 待审查 |\n`);
64
- }
65
- await require('fs-extra').writeFile(taskMdPath, taskMd);
66
- }
61
+ await updateTaskMd(backendDir, result);
67
62
  logger_1.logger.info(`\n 📄 ${result}`);
68
- logger_1.logger.info(' 💡 审查通过后: speccore lifecycle --task=' + taskId + ' --status=done');
69
- logger_1.logger.info('');
63
+ logger_1.logger.info(' 💡 审查通过后: speccore lifecycle --task=' + taskId + ' --status=done\n');
70
64
  }
71
65
  catch (error) {
72
- spinner.fail(`PR 创建失败: ${error}`);
66
+ logger_1.logger.error(`PR 创建失败: ${error}`);
73
67
  logger_1.logger.info(' 💡 请确保已安装 gh CLI: brew install gh && gh auth login');
74
68
  }
75
69
  }
70
+ // ── 分步交互 ──
71
+ async function interactivePrFlow(branch, backendDir, taskName, iteration, options) {
72
+ // 1. 预览变更
73
+ logger_1.logger.info('📋 当前变更:');
74
+ logger_1.logger.info('');
75
+ const status = (0, child_process_1.execSync)('git status --short', { encoding: 'utf-8' }).trim();
76
+ if (!status) {
77
+ logger_1.logger.info(' (无变更)');
78
+ return;
79
+ }
80
+ logger_1.logger.info(status);
81
+ logger_1.logger.info('');
82
+ // 2. 选文件 → add
83
+ const addAns = await promptUser(`提交哪些文件? [a]全部 [p]挑选 [s]跳过提交: `);
84
+ if (addAns === 's') {
85
+ logger_1.logger.info('跳过提交,直接推送已有 commit...');
86
+ }
87
+ else if (addAns === 'p') {
88
+ const files = await promptUser('输入文件路径(空格分隔): ');
89
+ const selected = files.split(/\s+/).filter(Boolean);
90
+ if (selected.length > 0) {
91
+ (0, child_process_1.execSync)(`git add ${selected.join(' ')}`, { stdio: 'pipe' });
92
+ logger_1.logger.info(`✅ 已添加 ${selected.length} 个文件`);
93
+ }
94
+ }
95
+ else {
96
+ (0, child_process_1.execSync)('git add .', { stdio: 'pipe' });
97
+ logger_1.logger.info('✅ 已添加全部文件');
98
+ }
99
+ // 3. commit(如果有 staged 文件)
100
+ const staged = (0, child_process_1.execSync)('git diff --cached --name-only', { encoding: 'utf-8' }).trim();
101
+ if (staged) {
102
+ logger_1.logger.info(`\n📦 待提交:\n${staged}\n`);
103
+ const commitAns = await promptUser('是否 commit? [y/n]: ');
104
+ if (commitAns === 'y') {
105
+ const msg = await promptUser(`Commit 信息(默认: ${taskName}): `);
106
+ (0, child_process_1.execSync)(`git commit -m "${msg || taskName}"`, { stdio: 'pipe' });
107
+ logger_1.logger.info('✅ 已 commit');
108
+ }
109
+ }
110
+ // 4. 推送
111
+ const pushAns = await promptUser('\n推送到 origin? [y/n]: ');
112
+ if (pushAns !== 'y') {
113
+ logger_1.logger.info('已取消推送');
114
+ return;
115
+ }
116
+ (0, child_process_1.execSync)(`git push -u origin "${branch}"`, { stdio: 'pipe' });
117
+ logger_1.logger.info(`✅ 已推送 ${branch}`);
118
+ // 5. 创建 PR
119
+ const prAns = await promptUser('\n创建 PR? [y/n]: ');
120
+ if (prAns !== 'y') {
121
+ logger_1.logger.info('已跳过 PR 创建');
122
+ return;
123
+ }
124
+ const spinner = new logger_1.Spinner('创建 PR');
125
+ spinner.start();
126
+ const title = options.title || taskName;
127
+ const body = await buildPrBody(backendDir, taskName, iteration);
128
+ const base = options.base || 'main';
129
+ const draftFlag = options.draft ? ' --draft' : '';
130
+ const result = (0, child_process_1.execSync)(`gh pr create --base "${base}" --head "${branch}" --title "${title}" --body "${body}"${draftFlag}`, { encoding: 'utf-8', stdio: 'pipe' }).trim();
131
+ spinner.stop(`✅ PR 已创建: ${result}`);
132
+ await updateTaskMd(backendDir, result);
133
+ logger_1.logger.info(`\n 📄 ${result}\n`);
134
+ }
135
+ async function updateTaskMd(backendDir, prUrl) {
136
+ const taskMdPath = (0, path_1.join)(backendDir, 'TASK.md');
137
+ if (!(await (0, fs_extra_1.pathExists)(taskMdPath)))
138
+ return;
139
+ let md = await (0, fs_extra_1.readFile)(taskMdPath, 'utf-8');
140
+ if (!md.includes('## PR')) {
141
+ md += `\n\n## PR\n\n| URL | 状态 |\n| :--- | :--- |\n| ${prUrl} | 🔄 待审查 |\n`;
142
+ }
143
+ else {
144
+ md = md.replace('| :--- | :--- |\n', `| :--- | :--- |\n| ${prUrl} | 🔄 待审查 |\n`);
145
+ }
146
+ await require('fs-extra').writeFile(taskMdPath, md);
147
+ }
76
148
  async function buildPrBody(backendDir, taskName, iteration) {
77
149
  let body = `## ${taskName}\n\n`;
78
150
  // Add REQ summary
@@ -1 +1 @@
1
- {"version":3,"file":"pr.js","sourceRoot":"","sources":["../../src/commands/pr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pr.js","sourceRoot":"","sources":["../../src/commands/pr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export interface ScheduleCreateOptions {
2
+ task?: string;
3
+ all?: boolean;
4
+ iteration?: string;
5
+ at: string;
6
+ name?: string;
7
+ }
8
+ export declare function scheduleCreateCommand(options: ScheduleCreateOptions): Promise<void>;
9
+ export interface ScheduleListOptions {
10
+ status?: string;
11
+ all?: boolean;
12
+ }
13
+ export declare function scheduleListCommand(options: ScheduleListOptions): Promise<void>;
14
+ export interface ScheduleCancelOptions {
15
+ id: string;
16
+ }
17
+ export declare function scheduleCancelCommand(options: ScheduleCancelOptions): Promise<void>;
18
+ export interface ScheduleDeleteOptions {
19
+ id: string;
20
+ }
21
+ export declare function scheduleDeleteCommand(options: ScheduleDeleteOptions): Promise<void>;
22
+ export interface ScheduleDaemonOptions {
23
+ action?: string;
24
+ foreground?: boolean;
25
+ }
26
+ export declare function scheduleDaemonCommand(options: ScheduleDaemonOptions): Promise<void>;
27
+ //# sourceMappingURL=schedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDzF;AAKD,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCrF;AAKD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBzF;AAKD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBzF;AAKD,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DzF"}
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scheduleCreateCommand = scheduleCreateCommand;
4
+ exports.scheduleListCommand = scheduleListCommand;
5
+ exports.scheduleCancelCommand = scheduleCancelCommand;
6
+ exports.scheduleDeleteCommand = scheduleDeleteCommand;
7
+ exports.scheduleDaemonCommand = scheduleDaemonCommand;
8
+ const logger_1 = require("../utils/logger");
9
+ const context_1 = require("../core/context");
10
+ const schedule_store_1 = require("../core/schedule-store");
11
+ const schedule_engine_1 = require("../core/schedule-engine");
12
+ async function scheduleCreateCommand(options) {
13
+ try {
14
+ // 验证参数
15
+ if (!options.task && !options.all) {
16
+ logger_1.logger.error('必须指定 --task <task-id> 或 --all');
17
+ return;
18
+ }
19
+ if (options.task && options.all) {
20
+ logger_1.logger.error('--task 和 --all 不能同时使用');
21
+ return;
22
+ }
23
+ if (!options.at) {
24
+ logger_1.logger.error('必须指定 --at "YYYY-MM-DD HH:mm:ss"');
25
+ return;
26
+ }
27
+ const iteration = await (0, context_1.getDefaultIteration)(options.iteration);
28
+ if (!iteration) {
29
+ logger_1.logger.error('未找到活跃期次,请使用 --iteration 指定');
30
+ return;
31
+ }
32
+ const taskName = options.name
33
+ || (options.all
34
+ ? `Batch execute all tasks [${iteration}]`
35
+ : `Execute ${options.task} [${iteration}]`);
36
+ const scheduled = await (0, schedule_store_1.createScheduleTask)({
37
+ name: taskName,
38
+ iteration,
39
+ taskId: options.task || null,
40
+ all: !!options.all,
41
+ scheduledAt: options.at,
42
+ });
43
+ logger_1.logger.success(`调度任务已创建`);
44
+ logger_1.logger.info('');
45
+ logger_1.logger.info(` ID: ${scheduled.id}`);
46
+ logger_1.logger.info(` 任务: ${scheduled.name}`);
47
+ logger_1.logger.info(` 期次: ${scheduled.iteration}`);
48
+ logger_1.logger.info(` 执行时间: ${scheduled.scheduledAt}`);
49
+ logger_1.logger.info(` 状态: ${statusLabel(scheduled.status)}`);
50
+ logger_1.logger.info('');
51
+ logger_1.logger.info('💡 确保 schedule daemon 在运行: speccore schedule daemon start');
52
+ }
53
+ catch (error) {
54
+ logger_1.logger.error(`创建调度任务失败: ${error.message}`);
55
+ }
56
+ }
57
+ async function scheduleListCommand(options) {
58
+ try {
59
+ const status = options.status;
60
+ const tasks = await (0, schedule_store_1.listScheduleTasks)(status);
61
+ if (tasks.length === 0) {
62
+ logger_1.logger.info('没有调度任务');
63
+ const ds = await (0, schedule_engine_1.daemonStatus)();
64
+ logger_1.logger.info(`调度守护进程: ${ds.running ? '运行中' : '未运行'}`);
65
+ return;
66
+ }
67
+ const ds = await (0, schedule_engine_1.daemonStatus)();
68
+ logger_1.logger.info('');
69
+ logger_1.logger.info(`调度守护进程: ${ds.running ? `🟢 运行中 (PID: ${ds.pid})` : '🔴 未运行'}`);
70
+ logger_1.logger.info('');
71
+ logger_1.logger.info(`共 ${tasks.length} 个调度任务:`);
72
+ logger_1.logger.info('');
73
+ // 表头
74
+ const idHeader = 'ID';
75
+ const nameHeader = '任务名称';
76
+ const timeHeader = '执行时间';
77
+ const statusHeader = '状态';
78
+ logger_1.logger.info(` ${idHeader.padEnd(18)} ${nameHeader.padEnd(30)} ${timeHeader.padEnd(20)} ${statusHeader}`);
79
+ logger_1.logger.info(` ${'─'.repeat(18)} ${'─'.repeat(30)} ${'─'.repeat(20)} ${'─'.repeat(10)}`);
80
+ for (const task of tasks) {
81
+ const shortId = task.id.slice(0, 16);
82
+ const shortName = task.name.length > 28 ? task.name.slice(0, 27) + '…' : task.name;
83
+ const stLabel = statusLabel(task.status);
84
+ logger_1.logger.info(` ${shortId.padEnd(18)} ${shortName.padEnd(30)} ${task.scheduledAt.padEnd(20)} ${stLabel}`);
85
+ }
86
+ logger_1.logger.info('');
87
+ logger_1.logger.info('💡 speccore schedule cancel --id=<id> 取消任务');
88
+ logger_1.logger.info(' speccore schedule daemon start 启动守护进程');
89
+ }
90
+ catch (error) {
91
+ logger_1.logger.error(`查看调度任务失败: ${error.message}`);
92
+ }
93
+ }
94
+ async function scheduleCancelCommand(options) {
95
+ try {
96
+ if (!options.id) {
97
+ logger_1.logger.error('请指定要取消的任务 ID: --id=<id>');
98
+ return;
99
+ }
100
+ const task = await (0, schedule_store_1.cancelScheduleTask)(options.id);
101
+ if (!task) {
102
+ logger_1.logger.error(`未找到调度任务: ${options.id}`);
103
+ logger_1.logger.info('💡 使用 speccore schedule list 查看所有任务');
104
+ return;
105
+ }
106
+ logger_1.logger.success(`已取消调度任务: ${task.name}`);
107
+ logger_1.logger.info(` 原定执行时间: ${task.scheduledAt}`);
108
+ }
109
+ catch (error) {
110
+ logger_1.logger.error(`取消任务失败: ${error.message}`);
111
+ }
112
+ }
113
+ async function scheduleDeleteCommand(options) {
114
+ try {
115
+ if (!options.id) {
116
+ logger_1.logger.error('请指定要删除的任务 ID: --id=<id>');
117
+ return;
118
+ }
119
+ const deleted = await (0, schedule_store_1.deleteScheduleTask)(options.id);
120
+ if (!deleted) {
121
+ logger_1.logger.error(`未找到调度任务: ${options.id}`);
122
+ return;
123
+ }
124
+ logger_1.logger.success(`已删除调度记录: ${options.id}`);
125
+ }
126
+ catch (error) {
127
+ logger_1.logger.error(`删除记录失败: ${error.message}`);
128
+ }
129
+ }
130
+ async function scheduleDaemonCommand(options) {
131
+ try {
132
+ // --foreground 模式(由 start 子命令内部使用)
133
+ if (options.foreground) {
134
+ await (0, schedule_engine_1.runDaemonLoop)();
135
+ return;
136
+ }
137
+ const action = options.action || 'status';
138
+ switch (action) {
139
+ case 'start': {
140
+ logger_1.logger.info('正在启动调度守护进程...');
141
+ const started = (0, schedule_engine_1.startDaemon)();
142
+ if (started) {
143
+ logger_1.logger.info('💡 使用 speccore schedule list 查看待执行任务');
144
+ logger_1.logger.info(' speccore schedule daemon stop 停止守护进程');
145
+ logger_1.logger.info(' speccore schedule daemon status 查看状态');
146
+ }
147
+ break;
148
+ }
149
+ case 'stop': {
150
+ logger_1.logger.info('正在停止调度守护进程...');
151
+ (0, schedule_engine_1.stopDaemon)();
152
+ logger_1.logger.success('调度守护进程已停止');
153
+ break;
154
+ }
155
+ case 'restart': {
156
+ logger_1.logger.info('正在重启调度守护进程...');
157
+ (0, schedule_engine_1.stopDaemon)();
158
+ // 等待一下
159
+ await new Promise(resolve => setTimeout(resolve, 1000));
160
+ (0, schedule_engine_1.startDaemon)();
161
+ break;
162
+ }
163
+ case 'status':
164
+ default: {
165
+ const ds = await (0, schedule_engine_1.daemonStatus)();
166
+ logger_1.logger.info('');
167
+ if (ds.running) {
168
+ logger_1.logger.info(`调度守护进程: 🟢 运行中`);
169
+ logger_1.logger.info(` PID: ${ds.pid || 'unknown'}`);
170
+ }
171
+ else {
172
+ logger_1.logger.info(`调度守护进程: 🔴 未运行`);
173
+ }
174
+ logger_1.logger.info('');
175
+ const pendingTasks = await (0, schedule_store_1.listScheduleTasks)('pending');
176
+ logger_1.logger.info(`待执行任务: ${pendingTasks.length} 个`);
177
+ if (pendingTasks.length > 0) {
178
+ logger_1.logger.info(`下一个任务: ${pendingTasks[0].name} @ ${pendingTasks[0].scheduledAt}`);
179
+ }
180
+ logger_1.logger.info('');
181
+ logger_1.logger.info('💡 speccore schedule daemon start 启动守护进程');
182
+ break;
183
+ }
184
+ }
185
+ }
186
+ catch (error) {
187
+ logger_1.logger.error(`守护进程操作失败: ${error.message}`);
188
+ }
189
+ }
190
+ // ============================================================
191
+ // Helpers
192
+ // ============================================================
193
+ function statusLabel(status) {
194
+ const map = {
195
+ pending: '⏳ 待执行',
196
+ running: '🔄 执行中',
197
+ completed: '✅ 已完成',
198
+ failed: '❌ 失败',
199
+ cancelled: '🚫 已取消',
200
+ };
201
+ return map[status] || status;
202
+ }
203
+ //# sourceMappingURL=schedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule.js","sourceRoot":"","sources":["../../src/commands/schedule.ts"],"names":[],"mappings":";;AA6BA,sDAgDC;AAUD,kDAyCC;AASD,sDAmBC;AASD,sDAiBC;AAUD,sDA8DC;AA9PD,4CAAyC;AACzC,6CAAsD;AACtD,2DAQgC;AAChC,6DAKiC;AAa1B,KAAK,UAAU,qBAAqB,CAAC,OAA8B;IACxE,IAAI,CAAC;QACH,OAAO;QACP,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAClC,eAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChC,eAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,eAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAA,6BAAmB,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC/D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI;eACxB,CAAC,OAAO,CAAC,GAAG;gBACb,CAAC,CAAC,4BAA4B,SAAS,GAAG;gBAC1C,CAAC,CAAC,WAAW,OAAO,CAAC,IAAI,KAAK,SAAS,GAAG,CAAC,CAAC;QAEhD,MAAM,SAAS,GAAG,MAAM,IAAA,mCAAkB,EAAC;YACzC,IAAI,EAAE,QAAQ;YACd,SAAS;YACT,MAAM,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;YAC5B,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG;YAClB,WAAW,EAAE,OAAO,CAAC,EAAE;SACxB,CAAC,CAAC;QAEH,eAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1B,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,eAAM,CAAC,IAAI,CAAC,eAAe,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,eAAM,CAAC,IAAI,CAAC,aAAa,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,eAAM,CAAC,IAAI,CAAC,aAAa,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;QAChD,eAAM,CAAC,IAAI,CAAC,WAAW,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QAChD,eAAM,CAAC,IAAI,CAAC,aAAa,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1D,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,eAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IAE3E,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,eAAM,CAAC,KAAK,CAAC,aAAa,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAUM,KAAK,UAAU,mBAAmB,CAAC,OAA4B;IACpE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,CAAC,MAAwC,CAAC;QAChE,MAAM,KAAK,GAAG,MAAM,IAAA,kCAAiB,EAAC,MAAM,CAAC,CAAC;QAE9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,eAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtB,MAAM,EAAE,GAAG,MAAM,IAAA,8BAAY,GAAE,CAAC;YAChC,eAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,IAAA,8BAAY,GAAE,CAAC;QAChC,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,eAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5E,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,eAAM,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;QACxC,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEhB,KAAK;QACL,MAAM,QAAQ,GAAG,IAAI,CAAC;QACtB,MAAM,UAAU,GAAG,MAAM,CAAC;QAC1B,MAAM,UAAU,GAAG,MAAM,CAAC;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC;QAC1B,eAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;QAC1G,eAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAEzF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACnF,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,eAAM,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;QAC3G,CAAC;QAED,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,eAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QAC3D,eAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;IAEjE,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,eAAM,CAAC,KAAK,CAAC,aAAa,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AASM,KAAK,UAAU,qBAAqB,CAAC,OAA8B;IACxE,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,eAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAA,mCAAkB,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,eAAM,CAAC,KAAK,CAAC,YAAY,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YACvC,eAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,eAAM,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,eAAM,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,eAAM,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AASM,KAAK,UAAU,qBAAqB,CAAC,OAA8B;IACxE,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,eAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAA,mCAAkB,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,eAAM,CAAC,KAAK,CAAC,YAAY,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QAED,eAAM,CAAC,OAAO,CAAC,YAAY,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,eAAM,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAUM,KAAK,UAAU,qBAAqB,CAAC,OAA8B;IACxE,IAAI,CAAC;QACH,mCAAmC;QACnC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,IAAA,+BAAa,GAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC;QAE1C,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,eAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC7B,MAAM,OAAO,GAAG,IAAA,6BAAW,GAAE,CAAC;gBAC9B,IAAI,OAAO,EAAE,CAAC;oBACZ,eAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;oBACpD,eAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;oBACxD,eAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;gBACzD,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,eAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC7B,IAAA,4BAAU,GAAE,CAAC;gBACb,eAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAC5B,MAAM;YACR,CAAC;YAED,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,eAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC7B,IAAA,4BAAU,GAAE,CAAC;gBACb,OAAO;gBACP,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;gBACxD,IAAA,6BAAW,GAAE,CAAC;gBACd,MAAM;YACR,CAAC;YAED,KAAK,QAAQ,CAAC;YACd,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,EAAE,GAAG,MAAM,IAAA,8BAAY,GAAE,CAAC;gBAChC,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChB,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;oBACf,eAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBAC9B,eAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBACN,eAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAChC,CAAC;gBACD,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChB,MAAM,YAAY,GAAG,MAAM,IAAA,kCAAiB,EAAC,SAAS,CAAC,CAAC;gBACxD,eAAM,CAAC,IAAI,CAAC,UAAU,YAAY,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC/C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,eAAM,CAAC,IAAI,CAAC,UAAU,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;gBACjF,CAAC;gBACD,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChB,eAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;gBACzD,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,eAAM,CAAC,KAAK,CAAC,aAAa,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,UAAU;AACV,+DAA+D;AAC/D,SAAS,WAAW,CAAC,MAA0B;IAC7C,MAAM,GAAG,GAAuC;QAC9C,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,QAAQ;QACjB,SAAS,EAAE,OAAO;QAClB,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,QAAQ;KACpB,CAAC;IACF,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;AAC/B,CAAC"}
@@ -1,2 +1,9 @@
1
- export declare function statusPanelCommand(): Promise<void>;
1
+ export interface StatusPanelOptions {
2
+ export?: string;
3
+ assignee?: string;
4
+ platform?: string;
5
+ type?: string;
6
+ }
7
+ export declare function statusPanelCommand(options?: StatusPanelOptions): Promise<void>;
8
+ export declare function defaultPhase(iterDir: string): Promise<string>;
2
9
  //# sourceMappingURL=status-panel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"status-panel.d.ts","sourceRoot":"","sources":["../../src/commands/status-panel.ts"],"names":[],"mappings":"AASA,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CA4CxD"}
1
+ {"version":3,"file":"status-panel.d.ts","sourceRoot":"","sources":["../../src/commands/status-panel.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyGxF;AAwXD,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUnE"}