speccore 5.19.3 → 5.22.1
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/README.en.md +63 -210
- package/README.md +110 -252
- package/dist/cli.js +233 -300
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze.d.ts +5 -0
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +235 -543
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/ask.d.ts +8 -0
- package/dist/commands/ask.d.ts.map +1 -0
- package/dist/commands/ask.js +293 -0
- package/dist/commands/ask.js.map +1 -0
- package/dist/commands/bugfix.d.ts +4 -0
- package/dist/commands/bugfix.d.ts.map +1 -1
- package/dist/commands/bugfix.js +122 -2
- package/dist/commands/bugfix.js.map +1 -1
- package/dist/commands/change.d.ts +2 -0
- package/dist/commands/change.d.ts.map +1 -1
- package/dist/commands/change.js +37 -2
- package/dist/commands/change.js.map +1 -1
- package/dist/commands/completion.js +1 -1
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/dev.d.ts +2 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +175 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/doc2spec.d.ts +10 -0
- package/dist/commands/doc2spec.d.ts.map +1 -0
- package/dist/commands/{word2spec.js → doc2spec.js} +55 -19
- package/dist/commands/doc2spec.js.map +1 -0
- package/dist/commands/done.d.ts.map +1 -1
- package/dist/commands/done.js +47 -0
- package/dist/commands/done.js.map +1 -1
- package/dist/commands/execute.d.ts +1 -0
- package/dist/commands/execute.d.ts.map +1 -1
- package/dist/commands/execute.js +118 -11
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/help-quick.js +2 -2
- package/dist/commands/help-quick.js.map +1 -1
- package/dist/commands/help.d.ts +3 -2
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +372 -51
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/import.d.ts +1 -0
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +289 -15
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/init.d.ts +0 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +177 -283
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/iteration/create.d.ts +1 -0
- package/dist/commands/iteration/create.d.ts.map +1 -1
- package/dist/commands/iteration/create.js +1 -0
- package/dist/commands/iteration/create.js.map +1 -1
- package/dist/commands/iteration/split.d.ts +1 -0
- package/dist/commands/iteration/split.d.ts.map +1 -1
- package/dist/commands/iteration/split.js +240 -7
- package/dist/commands/iteration/split.js.map +1 -1
- package/dist/commands/plan.d.ts +1 -0
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +25 -1
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/pr.d.ts +1 -0
- package/dist/commands/pr.d.ts.map +1 -1
- package/dist/commands/pr.js +94 -22
- package/dist/commands/pr.js.map +1 -1
- package/dist/commands/schedule.d.ts +36 -0
- package/dist/commands/schedule.d.ts.map +1 -0
- package/dist/commands/schedule.js +214 -0
- package/dist/commands/schedule.js.map +1 -0
- package/dist/commands/status-panel.d.ts +8 -1
- package/dist/commands/status-panel.d.ts.map +1 -1
- package/dist/commands/status-panel.js +1095 -5
- package/dist/commands/status-panel.js.map +1 -1
- package/dist/commands/task/new.d.ts +4 -0
- package/dist/commands/task/new.d.ts.map +1 -1
- package/dist/commands/task/new.js +87 -0
- package/dist/commands/task/new.js.map +1 -1
- package/dist/core/analyze-engine.d.ts +32 -0
- package/dist/core/analyze-engine.d.ts.map +1 -0
- package/dist/core/analyze-engine.js +935 -0
- package/dist/core/analyze-engine.js.map +1 -0
- package/dist/core/capabilities.d.ts +12 -0
- package/dist/core/capabilities.d.ts.map +1 -0
- package/dist/core/capabilities.js +58 -0
- package/dist/core/capabilities.js.map +1 -0
- package/dist/core/code-scanner.d.ts.map +1 -1
- package/dist/core/code-scanner.js +4 -1
- package/dist/core/code-scanner.js.map +1 -1
- package/dist/core/intent-recognition.d.ts +1 -1
- package/dist/core/intent-recognition.d.ts.map +1 -1
- package/dist/core/intent-recognition.js +5 -5
- package/dist/core/intent-recognition.js.map +1 -1
- package/dist/core/next-steps.js +1 -1
- package/dist/core/next-steps.js.map +1 -1
- package/dist/core/schedule-engine.d.ts +25 -0
- package/dist/core/schedule-engine.d.ts.map +1 -0
- package/dist/core/schedule-engine.js +179 -0
- package/dist/core/schedule-engine.js.map +1 -0
- package/dist/core/schedule-store.d.ts +117 -0
- package/dist/core/schedule-store.d.ts.map +1 -0
- package/dist/core/schedule-store.js +189 -0
- package/dist/core/schedule-store.js.map +1 -0
- package/dist/core/schemas/iteration.schema.d.ts +4 -4
- package/dist/core/schemas/task.schema.d.ts +2 -2
- package/package.json +7 -13
- package/dist/commands/demo.d.ts +0 -10
- package/dist/commands/demo.d.ts.map +0 -1
- package/dist/commands/demo.js +0 -151
- package/dist/commands/demo.js.map +0 -1
- package/dist/commands/goal.d.ts +0 -15
- package/dist/commands/goal.d.ts.map +0 -1
- package/dist/commands/goal.js +0 -232
- package/dist/commands/goal.js.map +0 -1
- package/dist/commands/new-task.d.ts +0 -15
- package/dist/commands/new-task.d.ts.map +0 -1
- package/dist/commands/new-task.js +0 -208
- package/dist/commands/new-task.js.map +0 -1
- package/dist/commands/platform-add.d.ts +0 -12
- package/dist/commands/platform-add.d.ts.map +0 -1
- package/dist/commands/platform-add.js +0 -111
- package/dist/commands/platform-add.js.map +0 -1
- package/dist/commands/retro.d.ts +0 -10
- package/dist/commands/retro.d.ts.map +0 -1
- package/dist/commands/retro.js +0 -131
- package/dist/commands/retro.js.map +0 -1
- package/dist/commands/spec.d.ts +0 -8
- package/dist/commands/spec.d.ts.map +0 -1
- package/dist/commands/spec.js +0 -159
- package/dist/commands/spec.js.map +0 -1
- package/dist/commands/template-add.d.ts +0 -12
- package/dist/commands/template-add.d.ts.map +0 -1
- package/dist/commands/template-add.js +0 -65
- package/dist/commands/template-add.js.map +0 -1
- package/dist/commands/word2spec.d.ts +0 -8
- package/dist/commands/word2spec.d.ts.map +0 -1
- package/dist/commands/word2spec.js.map +0 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 调度任务状态
|
|
3
|
+
*/
|
|
4
|
+
export type ScheduleTaskStatus = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
|
|
5
|
+
/**
|
|
6
|
+
* 单个调度任务
|
|
7
|
+
*/
|
|
8
|
+
export interface ScheduleTask {
|
|
9
|
+
/** 唯一 ID,自动生成 */
|
|
10
|
+
id: string;
|
|
11
|
+
/** 任务名称/描述 */
|
|
12
|
+
name: string;
|
|
13
|
+
/** 目标期次 */
|
|
14
|
+
iteration: string;
|
|
15
|
+
/** 指定执行的 Task ID(单个模式),null 表示批量模式 */
|
|
16
|
+
taskId: string | null;
|
|
17
|
+
/** 是否 --all 批量模式 */
|
|
18
|
+
all: boolean;
|
|
19
|
+
/** 调度时间,格式: "2026-08-10 21:00:00" */
|
|
20
|
+
scheduledAt: string;
|
|
21
|
+
/** ISO 8601 格式的调度时间 */
|
|
22
|
+
scheduledAtISO: string;
|
|
23
|
+
/** 任务状态 */
|
|
24
|
+
status: ScheduleTaskStatus;
|
|
25
|
+
/** 创建时间 */
|
|
26
|
+
createdAt: string;
|
|
27
|
+
/** 实际执行时间 */
|
|
28
|
+
executedAt: string | null;
|
|
29
|
+
/** 执行结果摘要 */
|
|
30
|
+
result: string | null;
|
|
31
|
+
/** 执行参数 (传递给 execute 命令的额外选项) */
|
|
32
|
+
execOptions: {
|
|
33
|
+
batchSize?: number;
|
|
34
|
+
parallel?: number;
|
|
35
|
+
assignee?: string;
|
|
36
|
+
type?: string;
|
|
37
|
+
priority?: string;
|
|
38
|
+
status?: string;
|
|
39
|
+
platform?: string;
|
|
40
|
+
backend?: boolean;
|
|
41
|
+
frontend?: boolean;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 调度存储文件
|
|
46
|
+
*/
|
|
47
|
+
export interface ScheduleStore {
|
|
48
|
+
/** 版本号 */
|
|
49
|
+
version: number;
|
|
50
|
+
/** 所有调度任务 */
|
|
51
|
+
tasks: ScheduleTask[];
|
|
52
|
+
/** 守护进程是否在运行 */
|
|
53
|
+
daemonRunning: boolean;
|
|
54
|
+
/** 守护进程 PID */
|
|
55
|
+
daemonPid: number | null;
|
|
56
|
+
/** 最后更新时间 */
|
|
57
|
+
updatedAt: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 解析时间字符串 "2026-08-10 21:00:00" 为 Date 和 ISO 字符串
|
|
61
|
+
*/
|
|
62
|
+
export declare function parseScheduleTime(timeStr: string): {
|
|
63
|
+
date: Date;
|
|
64
|
+
iso: string;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* 格式化时间为 "YYYY-MM-DD HH:mm:ss"
|
|
68
|
+
*/
|
|
69
|
+
export declare function formatScheduleTime(date: Date): string;
|
|
70
|
+
/**
|
|
71
|
+
* 加载调度存储
|
|
72
|
+
*/
|
|
73
|
+
export declare function loadScheduleStore(): Promise<ScheduleStore>;
|
|
74
|
+
/**
|
|
75
|
+
* 保存调度存储
|
|
76
|
+
*/
|
|
77
|
+
export declare function saveScheduleStore(store: ScheduleStore): Promise<void>;
|
|
78
|
+
/**
|
|
79
|
+
* 创建调度任务
|
|
80
|
+
*/
|
|
81
|
+
export declare function createScheduleTask(params: {
|
|
82
|
+
name: string;
|
|
83
|
+
iteration: string;
|
|
84
|
+
taskId: string | null;
|
|
85
|
+
all: boolean;
|
|
86
|
+
scheduledAt: string;
|
|
87
|
+
execOptions?: ScheduleTask['execOptions'];
|
|
88
|
+
}): Promise<ScheduleTask>;
|
|
89
|
+
/**
|
|
90
|
+
* 获取所有待执行的任务(按调度时间排序)
|
|
91
|
+
*/
|
|
92
|
+
export declare function getPendingTasks(): Promise<ScheduleTask[]>;
|
|
93
|
+
/**
|
|
94
|
+
* 获取所有任务(按状态筛选)
|
|
95
|
+
*/
|
|
96
|
+
export declare function listScheduleTasks(status?: ScheduleTaskStatus): Promise<ScheduleTask[]>;
|
|
97
|
+
/**
|
|
98
|
+
* 更新任务状态
|
|
99
|
+
*/
|
|
100
|
+
export declare function updateScheduleTask(taskId: string, updates: Partial<Pick<ScheduleTask, 'status' | 'executedAt' | 'result'>>): Promise<ScheduleTask | null>;
|
|
101
|
+
/**
|
|
102
|
+
* 取消调度任务
|
|
103
|
+
*/
|
|
104
|
+
export declare function cancelScheduleTask(taskId: string): Promise<ScheduleTask | null>;
|
|
105
|
+
/**
|
|
106
|
+
* 删除调度任务(物理删除)
|
|
107
|
+
*/
|
|
108
|
+
export declare function deleteScheduleTask(taskId: string): Promise<boolean>;
|
|
109
|
+
/**
|
|
110
|
+
* 获取所有已到期但未执行的任务
|
|
111
|
+
*/
|
|
112
|
+
export declare function getDueTasks(): Promise<ScheduleTask[]>;
|
|
113
|
+
/**
|
|
114
|
+
* 更新守护进程状态
|
|
115
|
+
*/
|
|
116
|
+
export declare function updateDaemonStatus(running: boolean, pid: number | null): Promise<void>;
|
|
117
|
+
//# sourceMappingURL=schedule-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule-store.d.ts","sourceRoot":"","sources":["../../src/core/schedule-store.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9F;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iBAAiB;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,oBAAoB;IACpB,GAAG,EAAE,OAAO,CAAC;IACb,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW;IACX,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa;IACb,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iCAAiC;IACjC,WAAW,EAAE;QACX,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa;IACb,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,gBAAgB;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAaD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAgB9E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAQrD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,CAAC,CAWhE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,EAAE,OAAO,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;CAC3C,GAAG,OAAO,CAAC,YAAY,CAAC,CA2BxB;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAK/D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAQ5F;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,YAAY,GAAG,QAAQ,CAAC,CAAC,GACvE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAW9B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAWrF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQzE;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAO3D;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAK5F"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseScheduleTime = parseScheduleTime;
|
|
4
|
+
exports.formatScheduleTime = formatScheduleTime;
|
|
5
|
+
exports.loadScheduleStore = loadScheduleStore;
|
|
6
|
+
exports.saveScheduleStore = saveScheduleStore;
|
|
7
|
+
exports.createScheduleTask = createScheduleTask;
|
|
8
|
+
exports.getPendingTasks = getPendingTasks;
|
|
9
|
+
exports.listScheduleTasks = listScheduleTasks;
|
|
10
|
+
exports.updateScheduleTask = updateScheduleTask;
|
|
11
|
+
exports.cancelScheduleTask = cancelScheduleTask;
|
|
12
|
+
exports.deleteScheduleTask = deleteScheduleTask;
|
|
13
|
+
exports.getDueTasks = getDueTasks;
|
|
14
|
+
exports.updateDaemonStatus = updateDaemonStatus;
|
|
15
|
+
const fs_extra_1 = require("fs-extra");
|
|
16
|
+
const SCHEDULE_PATH = '.speccore/local/schedule.json';
|
|
17
|
+
/**
|
|
18
|
+
* 生成唯一 ID
|
|
19
|
+
*/
|
|
20
|
+
function generateId() {
|
|
21
|
+
const ts = Date.now().toString(36);
|
|
22
|
+
const rand = Math.random().toString(36).substring(2, 8);
|
|
23
|
+
return `sch-${ts}-${rand}`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 解析时间字符串 "2026-08-10 21:00:00" 为 Date 和 ISO 字符串
|
|
27
|
+
*/
|
|
28
|
+
function parseScheduleTime(timeStr) {
|
|
29
|
+
// 支持 "YYYY-MM-DD HH:mm:ss" 格式
|
|
30
|
+
const match = timeStr.match(/^(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2}):(\d{2})$/);
|
|
31
|
+
if (!match) {
|
|
32
|
+
throw new Error(`Invalid time format: "${timeStr}". Expected: YYYY-MM-DD HH:mm:ss (e.g., 2026-08-10 21:00:00)`);
|
|
33
|
+
}
|
|
34
|
+
const [, y, m, d, h, min, s] = match;
|
|
35
|
+
// 使用本地时间构造
|
|
36
|
+
const date = new Date(parseInt(y), parseInt(m) - 1, parseInt(d), parseInt(h), parseInt(min), parseInt(s));
|
|
37
|
+
if (isNaN(date.getTime())) {
|
|
38
|
+
throw new Error(`Invalid date/time: "${timeStr}"`);
|
|
39
|
+
}
|
|
40
|
+
return { date, iso: date.toISOString() };
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 格式化时间为 "YYYY-MM-DD HH:mm:ss"
|
|
44
|
+
*/
|
|
45
|
+
function formatScheduleTime(date) {
|
|
46
|
+
const y = date.getFullYear();
|
|
47
|
+
const m = String(date.getMonth() + 1).padStart(2, '0');
|
|
48
|
+
const d = String(date.getDate()).padStart(2, '0');
|
|
49
|
+
const h = String(date.getHours()).padStart(2, '0');
|
|
50
|
+
const min = String(date.getMinutes()).padStart(2, '0');
|
|
51
|
+
const s = String(date.getSeconds()).padStart(2, '0');
|
|
52
|
+
return `${y}-${m}-${d} ${h}:${min}:${s}`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 加载调度存储
|
|
56
|
+
*/
|
|
57
|
+
async function loadScheduleStore() {
|
|
58
|
+
if (await (0, fs_extra_1.pathExists)(SCHEDULE_PATH)) {
|
|
59
|
+
return await (0, fs_extra_1.readJson)(SCHEDULE_PATH);
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
version: 1,
|
|
63
|
+
tasks: [],
|
|
64
|
+
daemonRunning: false,
|
|
65
|
+
daemonPid: null,
|
|
66
|
+
updatedAt: new Date().toISOString(),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 保存调度存储
|
|
71
|
+
*/
|
|
72
|
+
async function saveScheduleStore(store) {
|
|
73
|
+
await (0, fs_extra_1.ensureDir)('.speccore/local');
|
|
74
|
+
store.updatedAt = new Date().toISOString();
|
|
75
|
+
await (0, fs_extra_1.writeJson)(SCHEDULE_PATH, store, { spaces: 2 });
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 创建调度任务
|
|
79
|
+
*/
|
|
80
|
+
async function createScheduleTask(params) {
|
|
81
|
+
const { date, iso } = parseScheduleTime(params.scheduledAt);
|
|
82
|
+
const now = new Date();
|
|
83
|
+
if (date <= now) {
|
|
84
|
+
throw new Error(`Scheduled time must be in the future. Got: ${params.scheduledAt}, current: ${formatScheduleTime(now)}`);
|
|
85
|
+
}
|
|
86
|
+
const store = await loadScheduleStore();
|
|
87
|
+
const task = {
|
|
88
|
+
id: generateId(),
|
|
89
|
+
name: params.name,
|
|
90
|
+
iteration: params.iteration,
|
|
91
|
+
taskId: params.taskId,
|
|
92
|
+
all: params.all,
|
|
93
|
+
scheduledAt: params.scheduledAt,
|
|
94
|
+
scheduledAtISO: iso,
|
|
95
|
+
status: 'pending',
|
|
96
|
+
createdAt: now.toISOString(),
|
|
97
|
+
executedAt: null,
|
|
98
|
+
result: null,
|
|
99
|
+
execOptions: params.execOptions || {},
|
|
100
|
+
};
|
|
101
|
+
store.tasks.push(task);
|
|
102
|
+
await saveScheduleStore(store);
|
|
103
|
+
return task;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 获取所有待执行的任务(按调度时间排序)
|
|
107
|
+
*/
|
|
108
|
+
async function getPendingTasks() {
|
|
109
|
+
const store = await loadScheduleStore();
|
|
110
|
+
return store.tasks
|
|
111
|
+
.filter(t => t.status === 'pending')
|
|
112
|
+
.sort((a, b) => new Date(a.scheduledAtISO).getTime() - new Date(b.scheduledAtISO).getTime());
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 获取所有任务(按状态筛选)
|
|
116
|
+
*/
|
|
117
|
+
async function listScheduleTasks(status) {
|
|
118
|
+
const store = await loadScheduleStore();
|
|
119
|
+
if (status) {
|
|
120
|
+
return store.tasks.filter(t => t.status === status);
|
|
121
|
+
}
|
|
122
|
+
return [...store.tasks].sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* 更新任务状态
|
|
126
|
+
*/
|
|
127
|
+
async function updateScheduleTask(taskId, updates) {
|
|
128
|
+
const store = await loadScheduleStore();
|
|
129
|
+
const task = store.tasks.find(t => t.id === taskId);
|
|
130
|
+
if (!task)
|
|
131
|
+
return null;
|
|
132
|
+
if (updates.status !== undefined)
|
|
133
|
+
task.status = updates.status;
|
|
134
|
+
if (updates.executedAt !== undefined)
|
|
135
|
+
task.executedAt = updates.executedAt;
|
|
136
|
+
if (updates.result !== undefined)
|
|
137
|
+
task.result = updates.result;
|
|
138
|
+
await saveScheduleStore(store);
|
|
139
|
+
return task;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* 取消调度任务
|
|
143
|
+
*/
|
|
144
|
+
async function cancelScheduleTask(taskId) {
|
|
145
|
+
const store = await loadScheduleStore();
|
|
146
|
+
const task = store.tasks.find(t => t.id === taskId);
|
|
147
|
+
if (!task)
|
|
148
|
+
return null;
|
|
149
|
+
if (task.status !== 'pending') {
|
|
150
|
+
throw new Error(`Cannot cancel task "${taskId}" — current status is "${task.status}"`);
|
|
151
|
+
}
|
|
152
|
+
task.status = 'cancelled';
|
|
153
|
+
await saveScheduleStore(store);
|
|
154
|
+
return task;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* 删除调度任务(物理删除)
|
|
158
|
+
*/
|
|
159
|
+
async function deleteScheduleTask(taskId) {
|
|
160
|
+
const store = await loadScheduleStore();
|
|
161
|
+
const idx = store.tasks.findIndex(t => t.id === taskId);
|
|
162
|
+
if (idx === -1)
|
|
163
|
+
return false;
|
|
164
|
+
store.tasks.splice(idx, 1);
|
|
165
|
+
await saveScheduleStore(store);
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* 获取所有已到期但未执行的任务
|
|
170
|
+
*/
|
|
171
|
+
async function getDueTasks() {
|
|
172
|
+
const store = await loadScheduleStore();
|
|
173
|
+
const now = new Date();
|
|
174
|
+
return store.tasks.filter(t => {
|
|
175
|
+
if (t.status !== 'pending')
|
|
176
|
+
return false;
|
|
177
|
+
return new Date(t.scheduledAtISO) <= now;
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* 更新守护进程状态
|
|
182
|
+
*/
|
|
183
|
+
async function updateDaemonStatus(running, pid) {
|
|
184
|
+
const store = await loadScheduleStore();
|
|
185
|
+
store.daemonRunning = running;
|
|
186
|
+
store.daemonPid = pid;
|
|
187
|
+
await saveScheduleStore(store);
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=schedule-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule-store.js","sourceRoot":"","sources":["../../src/core/schedule-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
export declare const IterationStatusSchema: z.ZodEnum<{
|
|
7
|
-
completed: "completed";
|
|
8
7
|
archived: "archived";
|
|
9
|
-
|
|
8
|
+
completed: "completed";
|
|
10
9
|
active: "active";
|
|
10
|
+
planning: "planning";
|
|
11
11
|
paused: "paused";
|
|
12
12
|
}>;
|
|
13
13
|
export declare const IterationGoalSchema: z.ZodObject<{
|
|
@@ -28,10 +28,10 @@ export declare const IterationSchema: z.ZodObject<{
|
|
|
28
28
|
id: z.ZodString;
|
|
29
29
|
name: z.ZodString;
|
|
30
30
|
status: z.ZodDefault<z.ZodEnum<{
|
|
31
|
-
completed: "completed";
|
|
32
31
|
archived: "archived";
|
|
33
|
-
|
|
32
|
+
completed: "completed";
|
|
34
33
|
active: "active";
|
|
34
|
+
planning: "planning";
|
|
35
35
|
paused: "paused";
|
|
36
36
|
}>>;
|
|
37
37
|
priority: z.ZodDefault<z.ZodEnum<{
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
export declare const TaskStatusSchema: z.ZodEnum<{
|
|
7
|
+
archived: "archived";
|
|
7
8
|
pending: "pending";
|
|
8
9
|
in_progress: "in_progress";
|
|
9
10
|
completed: "completed";
|
|
10
11
|
blocked: "blocked";
|
|
11
|
-
archived: "archived";
|
|
12
12
|
}>;
|
|
13
13
|
export declare const TaskTypeSchema: z.ZodEnum<{
|
|
14
14
|
feature: "feature";
|
|
@@ -61,11 +61,11 @@ export declare const TaskSchema: z.ZodObject<{
|
|
|
61
61
|
document: "document";
|
|
62
62
|
}>;
|
|
63
63
|
status: z.ZodDefault<z.ZodEnum<{
|
|
64
|
+
archived: "archived";
|
|
64
65
|
pending: "pending";
|
|
65
66
|
in_progress: "in_progress";
|
|
66
67
|
completed: "completed";
|
|
67
68
|
blocked: "blocked";
|
|
68
|
-
archived: "archived";
|
|
69
69
|
}>>;
|
|
70
70
|
priority: z.ZodDefault<z.ZodEnum<{
|
|
71
71
|
high: "high";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "speccore",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.22.1",
|
|
4
4
|
"description": "SpecCore - Code by Spec, Not by Vibe.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -8,12 +8,10 @@
|
|
|
8
8
|
"speccore": "./bin/speccore"
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
|
-
"build": "tsc
|
|
11
|
+
"build": "tsc",
|
|
12
12
|
"watch": "tsc --watch",
|
|
13
13
|
"prepublish": "npm run build",
|
|
14
|
-
"test": "
|
|
15
|
-
"test:watch": "vitest",
|
|
16
|
-
"test:coverage": "vitest run --coverage",
|
|
14
|
+
"test": "jest",
|
|
17
15
|
"lint": "eslint src/**/*.ts"
|
|
18
16
|
},
|
|
19
17
|
"keywords": [
|
|
@@ -36,20 +34,16 @@
|
|
|
36
34
|
"dependencies": {
|
|
37
35
|
"commander": "^11.1.0",
|
|
38
36
|
"fs-extra": "^11.2.0",
|
|
39
|
-
"
|
|
40
|
-
"js-yaml": "^4.1.0"
|
|
41
|
-
"zod": "^4.4.3"
|
|
37
|
+
"glob": "^10.3.10",
|
|
38
|
+
"js-yaml": "^4.1.0"
|
|
42
39
|
},
|
|
43
40
|
"devDependencies": {
|
|
44
41
|
"@types/fs-extra": "^11.0.4",
|
|
45
|
-
"@types/inquirer": "^9.0.10",
|
|
46
42
|
"@types/js-yaml": "^4.0.9",
|
|
47
43
|
"@types/node": "^20.10.5",
|
|
48
|
-
"
|
|
49
|
-
"typescript": "^5.3.3",
|
|
50
|
-
"vitest": "^4.1.10"
|
|
44
|
+
"typescript": "^5.3.3"
|
|
51
45
|
},
|
|
52
46
|
"engines": {
|
|
53
47
|
"node": ">=18.0.0"
|
|
54
48
|
}
|
|
55
|
-
}
|
|
49
|
+
}
|
package/dist/commands/demo.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../../src/commands/demo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAoBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCrE"}
|
package/dist/commands/demo.js
DELETED
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* demo - 快速体验命令
|
|
4
|
-
* 5 分钟快速体验 SpecCore 完整流程,内置示例项目
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.demoCommand = demoCommand;
|
|
8
|
-
const logger_1 = require("../utils/logger");
|
|
9
|
-
const fs_extra_1 = require("fs-extra");
|
|
10
|
-
const path_1 = require("path");
|
|
11
|
-
const DEMO_PROJECTS = {
|
|
12
|
-
book: {
|
|
13
|
-
name: '图书管理系统',
|
|
14
|
-
description: 'CRUD + 借阅管理,包含用户认证、图书录入、借阅/归还流程',
|
|
15
|
-
features: ['用户注册登录', '图书增删改查', '借阅管理', '超期罚款'],
|
|
16
|
-
},
|
|
17
|
-
todo: {
|
|
18
|
-
name: '待办事项管理',
|
|
19
|
-
description: '任务创建、状态流转、分类筛选',
|
|
20
|
-
features: ['任务CRUD', '状态流转(未开始/进行中/已完成)', '分类标签', '截止日期提醒'],
|
|
21
|
-
},
|
|
22
|
-
blog: {
|
|
23
|
-
name: '博客系统',
|
|
24
|
-
description: '文章发布、评论管理、标签分类',
|
|
25
|
-
features: ['文章发布编辑', '评论管理', '标签分类', 'Markdown 编辑器'],
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
async function demoCommand(options) {
|
|
29
|
-
if (options.list) {
|
|
30
|
-
showDemoList();
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
const projectKey = options.project || 'book';
|
|
34
|
-
const project = DEMO_PROJECTS[projectKey];
|
|
35
|
-
if (!project) {
|
|
36
|
-
logger_1.logger.error(`未知示例 "${projectKey}"。可用的示例:`);
|
|
37
|
-
showDemoList();
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
const spinner = new logger_1.Spinner(`正在创建 ${project.name} 示例项目...`);
|
|
41
|
-
spinner.start();
|
|
42
|
-
try {
|
|
43
|
-
await createDemoProject(projectKey, project);
|
|
44
|
-
spinner.stop(`${project.name} 示例项目创建完成!`);
|
|
45
|
-
logger_1.logger.info('');
|
|
46
|
-
logger_1.logger.info('🚀 快速体验 SpecCore:');
|
|
47
|
-
logger_1.logger.info(` 1. 查看需求: cat 期次-${projectKey}/00-需求文档/REQUIREMENT.md`);
|
|
48
|
-
logger_1.logger.info(` 2. 查看项目图谱: cat 期次-${projectKey}/00-期次总览/PROJECT_GRAPH.md`);
|
|
49
|
-
logger_1.logger.info(` 3. 查看进度: speccore progress --iteration=期次-${projectKey}`);
|
|
50
|
-
logger_1.logger.info(` 4. 查看状态: speccore status --iteration=期次-${projectKey}`);
|
|
51
|
-
logger_1.logger.info(` 5. 生成报告: speccore report --iteration=期次-${projectKey} --format=markdown`);
|
|
52
|
-
}
|
|
53
|
-
catch (error) {
|
|
54
|
-
spinner.fail(`示例创建失败: ${error}`);
|
|
55
|
-
throw error;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
function showDemoList() {
|
|
59
|
-
logger_1.logger.info('🎮 可用的示例项目:');
|
|
60
|
-
logger_1.logger.info('');
|
|
61
|
-
for (const [key, project] of Object.entries(DEMO_PROJECTS)) {
|
|
62
|
-
logger_1.logger.info(` ${key} - ${project.name}`);
|
|
63
|
-
logger_1.logger.info(` ${project.description}`);
|
|
64
|
-
logger_1.logger.info(` 特性: ${project.features.join('、')}`);
|
|
65
|
-
logger_1.logger.info('');
|
|
66
|
-
}
|
|
67
|
-
logger_1.logger.info('用法: speccore demo --project=<key>');
|
|
68
|
-
logger_1.logger.info('例如: speccore demo --project=todo');
|
|
69
|
-
}
|
|
70
|
-
async function createDemoProject(key, project) {
|
|
71
|
-
const iterationName = `期次-${key}`;
|
|
72
|
-
const iterDir = (0, path_1.join)(process.cwd(), iterationName);
|
|
73
|
-
if (await (0, fs_extra_1.pathExists)(iterDir)) {
|
|
74
|
-
logger_1.logger.warn(`期次 ${iterationName} 已存在,将复用现有结构。`);
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
// 创建期次目录
|
|
78
|
-
await (0, fs_extra_1.ensureDir)((0, path_1.join)(iterDir, '00-需求文档'));
|
|
79
|
-
await (0, fs_extra_1.ensureDir)((0, path_1.join)(iterDir, '00-技术文档'));
|
|
80
|
-
await (0, fs_extra_1.ensureDir)((0, path_1.join)(iterDir, '00-期次总览'));
|
|
81
|
-
// 需求文档
|
|
82
|
-
const featuresList = project.features.map((f, i) => `${i + 1}. ${f}`).join('\n');
|
|
83
|
-
await (0, fs_extra_1.writeFile)((0, path_1.join)(iterDir, '00-需求文档', 'REQUIREMENT.md'), `# ${project.name} - 需求文档\n\n` +
|
|
84
|
-
`## 1. 项目背景\n\n${project.description}\n\n` +
|
|
85
|
-
`## 2. 功能清单\n\n${featuresList}\n\n` +
|
|
86
|
-
`## 3. 非功能需求\n\n- 性能:接口响应时间 < 500ms\n` +
|
|
87
|
-
`- 安全:JWT 认证,密码 BCrypt 加密\n` +
|
|
88
|
-
`- 可用性:99.9%\n\n` +
|
|
89
|
-
`## 4. 验收标准\n\n` +
|
|
90
|
-
project.features.map((f) => `- [ ] ${f} 功能可用`).join('\n') + `\n`);
|
|
91
|
-
// 技术文档
|
|
92
|
-
await (0, fs_extra_1.writeFile)((0, path_1.join)(iterDir, '00-技术文档', 'ARCHITECTURE.md'), `# ${project.name} - 技术架构\n\n` +
|
|
93
|
-
`## 1. 整体架构\n\n采用前后端分离架构\n\n` +
|
|
94
|
-
`\`\`\`\n` +
|
|
95
|
-
`[前端] ← HTTP/REST → [后端] ← [数据库]\n` +
|
|
96
|
-
`\`\`\`\n\n` +
|
|
97
|
-
`## 2. 技术选型\n\n` +
|
|
98
|
-
`| 层 | 技术 |\n` +
|
|
99
|
-
`| :--- | :--- |\n` +
|
|
100
|
-
`| 前端 | Vue 3 + TypeScript + Element Plus |\n` +
|
|
101
|
-
`| 后端 | Spring Boot 3 + MyBatis Plus |\n` +
|
|
102
|
-
`| 数据库 | MySQL 8.0 |\n` +
|
|
103
|
-
`| 缓存 | Redis |\n\n` +
|
|
104
|
-
`## 3. 决策记录\n\n` +
|
|
105
|
-
`| 决策 | 方案 | 理由 |\n` +
|
|
106
|
-
`| :--- | :--- | :--- |\n` +
|
|
107
|
-
`| 认证方案 | JWT | 无状态,适合微服务扩展 |\n` +
|
|
108
|
-
`| 密码加密 | BCrypt | 业界标准,抗暴力破解 |\n` +
|
|
109
|
-
`| API 规范 | RESTful | 通用性强,容易理解 |\n`);
|
|
110
|
-
// 项目图谱
|
|
111
|
-
await (0, fs_extra_1.writeFile)((0, path_1.join)(iterDir, '00-期次总览', 'PROJECT_GRAPH.md'), `# ${project.name} - 项目图谱\n\n` +
|
|
112
|
-
`## 1. 任务依赖关系\n\n` +
|
|
113
|
-
`\`\`\`mermaid\n` +
|
|
114
|
-
`graph TD\n` +
|
|
115
|
-
` Task-001[用户注册登录] --> Task-002[核心业务 CRUD]\n` +
|
|
116
|
-
` Task-002 --> Task-003[高级功能]\n` +
|
|
117
|
-
` Task-002 --> Task-004[管理后台]\n` +
|
|
118
|
-
`\`\`\`\n\n` +
|
|
119
|
-
`## 2. 任务列表\n\n` +
|
|
120
|
-
`| 任务 | 类型 | 状态 | 负责人 | 依赖 |\n` +
|
|
121
|
-
`| :--- | :--- | :--- | :--- | :--- |\n` +
|
|
122
|
-
`| Task-001 用户注册登录 | feature | 🔲 待开发 | | |\n` +
|
|
123
|
-
`| Task-002 核心业务 | feature | 🔲 待开发 | | Task-001 |\n` +
|
|
124
|
-
`| Task-003 高级功能 | feature | 🔲 待开发 | | Task-002 |\n` +
|
|
125
|
-
`| Task-004 管理后台 | feature | 🔲 待开发 | | Task-002 |\n`);
|
|
126
|
-
// 创建示例任务
|
|
127
|
-
const tasks = [
|
|
128
|
-
{ id: 'Task-001', name: '用户注册登录', type: 'feature' },
|
|
129
|
-
{ id: 'Task-002', name: '核心业务', type: 'feature' },
|
|
130
|
-
{ id: 'Task-003', name: '高级功能', type: 'feature' },
|
|
131
|
-
{ id: 'Task-004', name: '管理后台', type: 'feature' },
|
|
132
|
-
];
|
|
133
|
-
for (const task of tasks) {
|
|
134
|
-
const taskDir = (0, path_1.join)(iterDir, task.id);
|
|
135
|
-
await (0, fs_extra_1.ensureDir)((0, path_1.join)(taskDir, 'backend'));
|
|
136
|
-
await (0, fs_extra_1.ensureDir)((0, path_1.join)(taskDir, '_shared'));
|
|
137
|
-
await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, '.task-type'), task.type);
|
|
138
|
-
await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'backend', 'REQ.md'), `# ${task.name} - 后端需求\n\n` +
|
|
139
|
-
`## 1. 需求描述\n\n待补充\n\n` +
|
|
140
|
-
`## 2. 验收标准\n\n- [ ] 功能可用\n`);
|
|
141
|
-
await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'backend', 'TASK.md'), `# ${task.name} - 执行追踪\n\n` +
|
|
142
|
-
`> 任务类型: ${task.type} | 状态: 🔲 待开发\n\n` +
|
|
143
|
-
`## 1. 变更履历\n\n` +
|
|
144
|
-
`| 日期 | 版本 | 变更说明 | 作者 |\n` +
|
|
145
|
-
`| :--- | :--- | :--- | :--- |\n` +
|
|
146
|
-
`| ${new Date().toISOString().split('T')[0]} | v1.0 | 初始创建 | SpecCore |\n`);
|
|
147
|
-
await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'backend', 'TECH.md'), `# ${task.name} - 技术方案\n\n## 1. 方案概述\n\n待补充\n`);
|
|
148
|
-
await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, '_shared', 'API_CONTRACT.yaml'), `# ${task.name} - API 契约\nopenapi: "3.0.3"\ninfo:\n title: ${task.name}\n version: "1.0.0"\npaths: {}\n`);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
//# sourceMappingURL=demo.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../../src/commands/demo.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/goal.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* goal - 完整需求交付命令
|
|
3
|
-
* 从需求描述出发,自动创建任务并生成完整的 Spec 文档结构
|
|
4
|
-
*/
|
|
5
|
-
export interface GoalOptions {
|
|
6
|
-
name?: string;
|
|
7
|
-
desc?: string;
|
|
8
|
-
type?: string;
|
|
9
|
-
taskId?: string;
|
|
10
|
-
iteration?: string;
|
|
11
|
-
backendOnly?: boolean;
|
|
12
|
-
frontendOnly?: boolean;
|
|
13
|
-
}
|
|
14
|
-
export declare function goalCommand(options: GoalOptions): Promise<void>;
|
|
15
|
-
//# sourceMappingURL=goal.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"goal.d.ts","sourceRoot":"","sources":["../../src/commands/goal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqFrE"}
|