speccore 1.0.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.
- package/README.en.md +401 -0
- package/README.md +401 -0
- package/bin/speccore +2 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +450 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/archive.d.ts +10 -0
- package/dist/commands/archive.d.ts.map +1 -0
- package/dist/commands/archive.js +138 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/audit.d.ts +10 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +278 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/baseline.d.ts +13 -0
- package/dist/commands/baseline.d.ts.map +1 -0
- package/dist/commands/baseline.js +227 -0
- package/dist/commands/baseline.js.map +1 -0
- package/dist/commands/bugfix.d.ts +13 -0
- package/dist/commands/bugfix.d.ts.map +1 -0
- package/dist/commands/bugfix.js +181 -0
- package/dist/commands/bugfix.js.map +1 -0
- package/dist/commands/change.d.ts +14 -0
- package/dist/commands/change.d.ts.map +1 -0
- package/dist/commands/change.js +150 -0
- package/dist/commands/change.js.map +1 -0
- package/dist/commands/config.d.ts +7 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +110 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/dashboard.d.ts +9 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +209 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/demo.d.ts +10 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +151 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/execute.d.ts +18 -0
- package/dist/commands/execute.d.ts.map +1 -0
- package/dist/commands/execute.js +127 -0
- package/dist/commands/execute.js.map +1 -0
- package/dist/commands/global-status.d.ts +9 -0
- package/dist/commands/global-status.d.ts.map +1 -0
- package/dist/commands/global-status.js +135 -0
- package/dist/commands/global-status.js.map +1 -0
- package/dist/commands/goal.d.ts +15 -0
- package/dist/commands/goal.d.ts.map +1 -0
- package/dist/commands/goal.js +282 -0
- package/dist/commands/goal.js.map +1 -0
- package/dist/commands/handover.d.ts +11 -0
- package/dist/commands/handover.d.ts.map +1 -0
- package/dist/commands/handover.js +169 -0
- package/dist/commands/handover.js.map +1 -0
- package/dist/commands/health.d.ts +7 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +80 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/help.d.ts +10 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +93 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/history.d.ts +9 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +87 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/impact.d.ts +12 -0
- package/dist/commands/impact.d.ts.map +1 -0
- package/dist/commands/impact.js +238 -0
- package/dist/commands/impact.js.map +1 -0
- package/dist/commands/import.d.ts +15 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +366 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +564 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/iteration/create.d.ts +7 -0
- package/dist/commands/iteration/create.d.ts.map +1 -0
- package/dist/commands/iteration/create.js +141 -0
- package/dist/commands/iteration/create.js.map +1 -0
- package/dist/commands/iteration/split.d.ts +9 -0
- package/dist/commands/iteration/split.d.ts.map +1 -0
- package/dist/commands/iteration/split.js +165 -0
- package/dist/commands/iteration/split.js.map +1 -0
- package/dist/commands/iteration-from-global.d.ts +11 -0
- package/dist/commands/iteration-from-global.d.ts.map +1 -0
- package/dist/commands/iteration-from-global.js +294 -0
- package/dist/commands/iteration-from-global.js.map +1 -0
- package/dist/commands/plan.d.ts +12 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +126 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/progress.d.ts +10 -0
- package/dist/commands/progress.d.ts.map +1 -0
- package/dist/commands/progress.js +89 -0
- package/dist/commands/progress.js.map +1 -0
- package/dist/commands/rename.d.ts +14 -0
- package/dist/commands/rename.d.ts.map +1 -0
- package/dist/commands/rename.js +298 -0
- package/dist/commands/rename.js.map +1 -0
- package/dist/commands/report.d.ts +10 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +124 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/research.d.ts +14 -0
- package/dist/commands/research.d.ts.map +1 -0
- package/dist/commands/research.js +181 -0
- package/dist/commands/research.js.map +1 -0
- package/dist/commands/retro.d.ts +10 -0
- package/dist/commands/retro.d.ts.map +1 -0
- package/dist/commands/retro.js +130 -0
- package/dist/commands/retro.js.map +1 -0
- package/dist/commands/spec.d.ts +8 -0
- package/dist/commands/spec.d.ts.map +1 -0
- package/dist/commands/spec.js +155 -0
- package/dist/commands/spec.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +48 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync-global.d.ts +13 -0
- package/dist/commands/sync-global.d.ts.map +1 -0
- package/dist/commands/sync-global.js +218 -0
- package/dist/commands/sync-global.js.map +1 -0
- package/dist/commands/sync.d.ts +13 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +170 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/task/new.d.ts +13 -0
- package/dist/commands/task/new.d.ts.map +1 -0
- package/dist/commands/task/new.js +195 -0
- package/dist/commands/task/new.js.map +1 -0
- package/dist/commands/template-add.d.ts +12 -0
- package/dist/commands/template-add.d.ts.map +1 -0
- package/dist/commands/template-add.js +65 -0
- package/dist/commands/template-add.js.map +1 -0
- package/dist/commands/validate.d.ts +10 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +37 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/welcome.d.ts +9 -0
- package/dist/commands/welcome.d.ts.map +1 -0
- package/dist/commands/welcome.js +166 -0
- package/dist/commands/welcome.js.map +1 -0
- package/dist/core/context.d.ts +31 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +145 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/global-layer.d.ts +124 -0
- package/dist/core/global-layer.d.ts.map +1 -0
- package/dist/core/global-layer.js +456 -0
- package/dist/core/global-layer.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +24 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/intent-recognition.d.ts +48 -0
- package/dist/core/intent-recognition.d.ts.map +1 -0
- package/dist/core/intent-recognition.js +485 -0
- package/dist/core/intent-recognition.js.map +1 -0
- package/dist/core/state.d.ts +26 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/state.js +187 -0
- package/dist/core/state.js.map +1 -0
- package/dist/core/template-engine.d.ts +28 -0
- package/dist/core/template-engine.d.ts.map +1 -0
- package/dist/core/template-engine.js +57 -0
- package/dist/core/template-engine.js.map +1 -0
- package/dist/core/validator.d.ts +26 -0
- package/dist/core/validator.d.ts.map +1 -0
- package/dist/core/validator.js +246 -0
- package/dist/core/validator.js.map +1 -0
- package/dist/core/yaml-parser.d.ts +25 -0
- package/dist/core/yaml-parser.d.ts.map +1 -0
- package/dist/core/yaml-parser.js +113 -0
- package/dist/core/yaml-parser.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/file.d.ts +29 -0
- package/dist/utils/file.d.ts.map +1 -0
- package/dist/utils/file.js +126 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/git.d.ts +25 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +77 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/logger.d.ts +41 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +184 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.taskNewCommand = taskNewCommand;
|
|
37
|
+
const fs_extra_1 = require("fs-extra");
|
|
38
|
+
const path_1 = require("path");
|
|
39
|
+
const logger_1 = require("../../utils/logger");
|
|
40
|
+
const context_1 = require("../../core/context");
|
|
41
|
+
async function taskNewCommand(options) {
|
|
42
|
+
if (!options.name) {
|
|
43
|
+
logger_1.logger.error('Task name is required. Use --name <name>');
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const spinner = new logger_1.Spinner(`Creating task: ${options.name}`);
|
|
47
|
+
spinner.start();
|
|
48
|
+
try {
|
|
49
|
+
const iteration = await (0, context_1.getDefaultIteration)(options.iteration);
|
|
50
|
+
if (!iteration) {
|
|
51
|
+
spinner.fail('No active iteration found. Please specify --iteration or create one first.');
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const iterationDir = `期次-${iteration}`;
|
|
55
|
+
// Determine task ID
|
|
56
|
+
const taskId = options.id || await findNextTaskId(iterationDir);
|
|
57
|
+
const taskDir = (0, path_1.join)(iterationDir, `Task-${taskId}`);
|
|
58
|
+
if (await (0, fs_extra_1.pathExists)(taskDir)) {
|
|
59
|
+
spinner.fail(`Task already exists: Task-${taskId}`);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
// Create directories
|
|
63
|
+
if (!options.frontendOnly) {
|
|
64
|
+
await (0, fs_extra_1.ensureDir)((0, path_1.join)(taskDir, 'backend'));
|
|
65
|
+
}
|
|
66
|
+
if (!options.backendOnly) {
|
|
67
|
+
await (0, fs_extra_1.ensureDir)((0, path_1.join)(taskDir, 'frontend'));
|
|
68
|
+
}
|
|
69
|
+
await (0, fs_extra_1.ensureDir)((0, path_1.join)(taskDir, '_shared'));
|
|
70
|
+
// Write task type
|
|
71
|
+
await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, '.task-type'), options.type || 'feature');
|
|
72
|
+
// Generate task content
|
|
73
|
+
const taskContent = await generateTaskContent(options);
|
|
74
|
+
// Write backend files
|
|
75
|
+
if (!options.frontendOnly) {
|
|
76
|
+
await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'backend', 'REQ.md'), taskContent.req);
|
|
77
|
+
await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'backend', 'TECH.md'), taskContent.tech);
|
|
78
|
+
await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'backend', 'TASK.md'), taskContent.task);
|
|
79
|
+
}
|
|
80
|
+
// Write frontend files
|
|
81
|
+
if (!options.backendOnly) {
|
|
82
|
+
await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'frontend', 'REQ.md'), taskContent.req);
|
|
83
|
+
await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'frontend', 'TECH.md'), taskContent.tech);
|
|
84
|
+
await (0, fs_extra_1.writeFile)((0, path_1.join)(taskDir, 'frontend', 'TASK.md'), taskContent.task);
|
|
85
|
+
}
|
|
86
|
+
// Update context
|
|
87
|
+
await (0, context_1.updateContext)({
|
|
88
|
+
currentTask: `Task-${taskId}`,
|
|
89
|
+
currentIteration: iteration,
|
|
90
|
+
lastUpdated: new Date().toISOString()
|
|
91
|
+
});
|
|
92
|
+
spinner.stop(`Task created: Task-${taskId} - ${options.name}`);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
spinner.fail(`Failed to create task: ${error}`);
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async function findNextTaskId(iterationDir) {
|
|
100
|
+
const { readdir } = await Promise.resolve().then(() => __importStar(require('fs-extra')));
|
|
101
|
+
const entries = await readdir(iterationDir, { withFileTypes: true });
|
|
102
|
+
const taskDirs = entries
|
|
103
|
+
.filter(e => e.isDirectory() && e.name.startsWith('Task-'))
|
|
104
|
+
.map(e => parseInt(e.name.replace('Task-', '')))
|
|
105
|
+
.filter(n => !isNaN(n));
|
|
106
|
+
const maxId = Math.max(0, ...taskDirs);
|
|
107
|
+
return String(maxId + 1).padStart(3, '0');
|
|
108
|
+
}
|
|
109
|
+
async function generateTaskContent(options) {
|
|
110
|
+
const name = options.name || 'New Task';
|
|
111
|
+
const desc = options.desc || '';
|
|
112
|
+
const type = options.type || 'feature';
|
|
113
|
+
const req = `# ${name}
|
|
114
|
+
|
|
115
|
+
## 需求描述
|
|
116
|
+
|
|
117
|
+
${desc}
|
|
118
|
+
|
|
119
|
+
## 验收标准
|
|
120
|
+
|
|
121
|
+
- [ ] AC-1:
|
|
122
|
+
- [ ] AC-2:
|
|
123
|
+
- [ ] AC-3:
|
|
124
|
+
|
|
125
|
+
## 输入/输出
|
|
126
|
+
|
|
127
|
+
### 输入
|
|
128
|
+
|
|
129
|
+
### 输出
|
|
130
|
+
|
|
131
|
+
## 业务规则
|
|
132
|
+
|
|
133
|
+
## 错误处理
|
|
134
|
+
`;
|
|
135
|
+
const tech = `# ${name} - 技术方案
|
|
136
|
+
|
|
137
|
+
## 1. 方案概述
|
|
138
|
+
|
|
139
|
+
## 2. 接口设计
|
|
140
|
+
|
|
141
|
+
### 2.1 API 定义
|
|
142
|
+
|
|
143
|
+
### 2.2 请求/响应格式
|
|
144
|
+
|
|
145
|
+
## 3. 数据模型
|
|
146
|
+
|
|
147
|
+
## 4. 核心逻辑
|
|
148
|
+
|
|
149
|
+
### 4.1 流程图
|
|
150
|
+
|
|
151
|
+
### 4.2 伪代码
|
|
152
|
+
|
|
153
|
+
## 5. 测试策略
|
|
154
|
+
|
|
155
|
+
### 5.1 单元测试
|
|
156
|
+
|
|
157
|
+
### 5.2 集成测试
|
|
158
|
+
|
|
159
|
+
## 6. 风险与应对
|
|
160
|
+
`;
|
|
161
|
+
const task = `# ${name}
|
|
162
|
+
|
|
163
|
+
## 任务信息
|
|
164
|
+
- 类型: ${type}
|
|
165
|
+
- 状态: 🔲 待开发
|
|
166
|
+
- 优先级: medium
|
|
167
|
+
- 预计耗时: 2h
|
|
168
|
+
- 创建时间: ${new Date().toISOString().split('T')[0]}
|
|
169
|
+
|
|
170
|
+
## 变更履历
|
|
171
|
+
| 时间 | 变更内容 | 变更人 |
|
|
172
|
+
| :--- | :--- | :--- |
|
|
173
|
+
| ${new Date().toISOString().split('T')[0]} | 创建任务 | CLI |
|
|
174
|
+
|
|
175
|
+
## 产出物
|
|
176
|
+
| 产出物 | 状态 | 路径 |
|
|
177
|
+
| :--- | :--- | :--- |
|
|
178
|
+
| REQ.md | ✅ | ./REQ.md |
|
|
179
|
+
| TECH.md | ✅ | ./TECH.md |
|
|
180
|
+
| TASK.md | ✅ | ./TASK.md |
|
|
181
|
+
| API_CONTRACT.yaml | ⏳ | ./_shared/API_CONTRACT.yaml |
|
|
182
|
+
|
|
183
|
+
## 依赖关系
|
|
184
|
+
| 依赖任务 | 依赖原因 | 状态 |
|
|
185
|
+
| :--- | :--- | :--- |
|
|
186
|
+
| | | |
|
|
187
|
+
|
|
188
|
+
## 阻塞关系
|
|
189
|
+
| 被阻塞任务 | 阻塞原因 | 状态 |
|
|
190
|
+
| :--- | :--- | :--- |
|
|
191
|
+
| | | |
|
|
192
|
+
`;
|
|
193
|
+
return { req, tech, task };
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=new.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../../src/commands/task/new.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* template-add - 添加代码生成模板命令
|
|
3
|
+
* 将现有代码提取为可复用的模板,保存到 .speccore/PATTERNS/TEMPLATES/
|
|
4
|
+
*/
|
|
5
|
+
export interface TemplateAddOptions {
|
|
6
|
+
name?: string;
|
|
7
|
+
type?: string;
|
|
8
|
+
files?: string;
|
|
9
|
+
desc?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function templateAddCommand(options: TemplateAddOptions): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=template-add.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-add.d.ts","sourceRoot":"","sources":["../../src/commands/template-add.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+DnF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* template-add - 添加代码生成模板命令
|
|
4
|
+
* 将现有代码提取为可复用的模板,保存到 .speccore/PATTERNS/TEMPLATES/
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.templateAddCommand = templateAddCommand;
|
|
8
|
+
const logger_1 = require("../utils/logger");
|
|
9
|
+
const fs_extra_1 = require("fs-extra");
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
async function templateAddCommand(options) {
|
|
12
|
+
if (!options.name) {
|
|
13
|
+
logger_1.logger.error('请提供模板名称。用法: speccore template-add --name "<模板名>" --type=<类型> --files=<文件路径>');
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (!options.files) {
|
|
17
|
+
logger_1.logger.error('请提供代码文件路径。用法: speccore template-add --files=<文件路径>');
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const spinner = new logger_1.Spinner('正在添加代码模板...');
|
|
21
|
+
spinner.start();
|
|
22
|
+
try {
|
|
23
|
+
const templateType = options.type || 'crud';
|
|
24
|
+
const templateDir = (0, path_1.join)(process.cwd(), '.speccore', 'PATTERNS', 'TEMPLATES', templateType, options.name);
|
|
25
|
+
await (0, fs_extra_1.ensureDir)(templateDir);
|
|
26
|
+
// 复制代码文件
|
|
27
|
+
const filePaths = options.files.split(',').map((f) => f.trim());
|
|
28
|
+
for (const filePath of filePaths) {
|
|
29
|
+
const fileName = (0, path_1.basename)(filePath);
|
|
30
|
+
await (0, fs_extra_1.copy)(filePath, (0, path_1.join)(templateDir, fileName));
|
|
31
|
+
logger_1.logger.info(`✅ 已复制: ${fileName}`);
|
|
32
|
+
}
|
|
33
|
+
// 创建模板描述文件
|
|
34
|
+
await (0, fs_extra_1.writeFile)((0, path_1.join)(templateDir, 'README.md'), `# ${options.name} 模板\n\n` +
|
|
35
|
+
`- **类型**: ${templateType}\n` +
|
|
36
|
+
`- **描述**: ${options.desc || '请补充模板描述'}\n` +
|
|
37
|
+
`- **创建日期**: ${new Date().toISOString().split('T')[0]}\n` +
|
|
38
|
+
`- **文件列表**:\n${filePaths.map((f) => ` - ${(0, path_1.basename)(f)}`).join('\n')}\n`);
|
|
39
|
+
// 更新 PATTERNS/README.md 索引
|
|
40
|
+
const patternsReadme = (0, path_1.join)(process.cwd(), '.speccore', 'PATTERNS', 'README.md');
|
|
41
|
+
if (await (0, fs_extra_1.pathExists)(patternsReadme)) {
|
|
42
|
+
let content = await (0, fs_extra_1.readFile)(patternsReadme, 'utf-8');
|
|
43
|
+
const entry = `| ${options.name} | ${templateType} | ${options.desc || '-'} | ${new Date().toISOString().split('T')[0]} |\n`;
|
|
44
|
+
if (!content.includes(options.name)) {
|
|
45
|
+
content += entry;
|
|
46
|
+
await (0, fs_extra_1.writeFile)(patternsReadme, content);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
spinner.stop(`模板 "${options.name}" 已添加`);
|
|
50
|
+
logger_1.logger.info('');
|
|
51
|
+
logger_1.logger.info(`📄 模板详情:`);
|
|
52
|
+
logger_1.logger.info(` 名称: ${options.name}`);
|
|
53
|
+
logger_1.logger.info(` 类型: ${templateType}`);
|
|
54
|
+
logger_1.logger.info(` 位置: .speccore/PATTERNS/TEMPLATES/${templateType}/${options.name}/`);
|
|
55
|
+
logger_1.logger.info(` 文件数: ${filePaths.length}`);
|
|
56
|
+
if (options.desc) {
|
|
57
|
+
logger_1.logger.info(` 描述: ${options.desc}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
spinner.fail(`添加模板失败: ${error}`);
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=template-add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-add.js","sourceRoot":"","sources":["../../src/commands/template-add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface ValidateOptions {
|
|
2
|
+
iteration?: string;
|
|
3
|
+
task?: string;
|
|
4
|
+
type?: string;
|
|
5
|
+
fix?: boolean;
|
|
6
|
+
strict?: boolean;
|
|
7
|
+
format?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function validateCommand(options: ValidateOptions): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAyC7E"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateCommand = validateCommand;
|
|
4
|
+
const validator_1 = require("../core/validator");
|
|
5
|
+
const logger_1 = require("../utils/logger");
|
|
6
|
+
const context_1 = require("../core/context");
|
|
7
|
+
async function validateCommand(options) {
|
|
8
|
+
const spinner = new logger_1.Spinner('Validating Spec compliance');
|
|
9
|
+
spinner.start();
|
|
10
|
+
try {
|
|
11
|
+
const iteration = await (0, context_1.getDefaultIteration)(options.iteration);
|
|
12
|
+
const result = await (0, validator_1.validateProject)(iteration || undefined, options.task || undefined, {
|
|
13
|
+
fix: options.fix,
|
|
14
|
+
strict: options.strict
|
|
15
|
+
});
|
|
16
|
+
spinner.stop('Validation complete');
|
|
17
|
+
// Auto-fix if requested
|
|
18
|
+
if (options.fix) {
|
|
19
|
+
const fixedCount = await (0, validator_1.autoFix)(result);
|
|
20
|
+
if (fixedCount > 0) {
|
|
21
|
+
logger_1.logger.info(`Auto-fixed ${fixedCount} issues`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// Output results
|
|
25
|
+
const output = (0, validator_1.formatValidationResult)(result, (options.format || 'text'));
|
|
26
|
+
console.log(output);
|
|
27
|
+
// Exit with error code if validation failed
|
|
28
|
+
if (result.errors.length > 0) {
|
|
29
|
+
process.exitCode = 1;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
spinner.fail(`Validation failed: ${error}`);
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":";;AAaA,0CAyCC;AAtDD,iDAAqF;AACrF,4CAAkD;AAClD,6CAAsD;AAW/C,KAAK,UAAU,eAAe,CAAC,OAAwB;IAC5D,MAAM,OAAO,GAAG,IAAI,gBAAO,CAAC,4BAA4B,CAAC,CAAC;IAC1D,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,IAAA,6BAAmB,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE/D,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAe,EAClC,SAAS,IAAI,SAAS,EACtB,OAAO,CAAC,IAAI,IAAI,SAAS,EACzB;YACE,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CACF,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAEpC,wBAAwB;QACxB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,MAAM,UAAU,GAAG,MAAM,IAAA,mBAAO,EAAC,MAAM,CAAC,CAAC;YACzC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBACnB,eAAM,CAAC,IAAI,CAAC,cAAc,UAAU,SAAS,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,MAAM,MAAM,GAAG,IAAA,kCAAsB,EACnC,MAAM,EACN,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAoB,CAC9C,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpB,4CAA4C;QAC5C,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../src/commands/welcome.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAoF3E"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* welcome - 首次使用引导命令
|
|
4
|
+
* 交互式引导新用户完成第一个完整功能开发
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.welcomeCommand = welcomeCommand;
|
|
8
|
+
const logger_1 = require("../utils/logger");
|
|
9
|
+
const fs_extra_1 = require("fs-extra");
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
async function welcomeCommand(options) {
|
|
12
|
+
logger_1.logger.info('👋 欢迎使用 SpecCore!');
|
|
13
|
+
logger_1.logger.info('');
|
|
14
|
+
logger_1.logger.info('SpecCore 是一个面向 AI 原生团队的规范驱动研发工程框架。');
|
|
15
|
+
logger_1.logger.info('核心理念:Code by Spec, Not by Vibe.');
|
|
16
|
+
logger_1.logger.info('');
|
|
17
|
+
const spinner = new logger_1.Spinner('正在检测项目状态...');
|
|
18
|
+
spinner.start();
|
|
19
|
+
try {
|
|
20
|
+
const isInitialized = await checkInitialization();
|
|
21
|
+
if (!isInitialized || options.force) {
|
|
22
|
+
spinner.stop('项目未初始化,开始引导设置...');
|
|
23
|
+
await guideInit();
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
spinner.stop('项目已初始化。');
|
|
27
|
+
}
|
|
28
|
+
// Step 2: 引导创建期次
|
|
29
|
+
logger_1.logger.info('');
|
|
30
|
+
logger_1.logger.info('📋 第二步:创建你的第一个期次');
|
|
31
|
+
logger_1.logger.info('');
|
|
32
|
+
logger_1.logger.info('期次是 SpecCore 的项目管理单元,通常按时间或功能划分。');
|
|
33
|
+
logger_1.logger.info('例如: 期次-2026-07-会议预定');
|
|
34
|
+
logger_1.logger.info('');
|
|
35
|
+
logger_1.logger.info('运行以下命令创建期次:');
|
|
36
|
+
logger_1.logger.info(' $ speccore iteration create --name "<期次名称>"');
|
|
37
|
+
logger_1.logger.info('');
|
|
38
|
+
// Step 3: 引导创建任务
|
|
39
|
+
logger_1.logger.info('📝 第三步:创建开发任务');
|
|
40
|
+
logger_1.logger.info('');
|
|
41
|
+
logger_1.logger.info('使用智能入口创建任务:');
|
|
42
|
+
logger_1.logger.info(' $ speccore spec "做一个用户登录功能,支持手机号+密码"');
|
|
43
|
+
logger_1.logger.info('');
|
|
44
|
+
logger_1.logger.info('或直接创建:');
|
|
45
|
+
logger_1.logger.info(' $ speccore task new --name "用户登录" --desc "手机号+密码登录"');
|
|
46
|
+
logger_1.logger.info('');
|
|
47
|
+
// Step 4: 引导查看和开发
|
|
48
|
+
logger_1.logger.info('⚡ 第四步:查看进度并开始开发');
|
|
49
|
+
logger_1.logger.info('');
|
|
50
|
+
logger_1.logger.info('查看项目状态:');
|
|
51
|
+
logger_1.logger.info(' $ speccore progress');
|
|
52
|
+
logger_1.logger.info(' $ speccore status');
|
|
53
|
+
logger_1.logger.info('');
|
|
54
|
+
logger_1.logger.info('生成执行计划:');
|
|
55
|
+
logger_1.logger.info(' $ speccore plan');
|
|
56
|
+
logger_1.logger.info('');
|
|
57
|
+
// Step 5: 审查和归档
|
|
58
|
+
logger_1.logger.info('✅ 第五步:审查和归档');
|
|
59
|
+
logger_1.logger.info('');
|
|
60
|
+
logger_1.logger.info('审查代码产出:');
|
|
61
|
+
logger_1.logger.info(' $ speccore validate');
|
|
62
|
+
logger_1.logger.info('');
|
|
63
|
+
logger_1.logger.info('归档已完成任务:');
|
|
64
|
+
logger_1.logger.info(' $ speccore archive --all');
|
|
65
|
+
logger_1.logger.info('');
|
|
66
|
+
// 常用命令速查
|
|
67
|
+
logger_1.logger.info('---');
|
|
68
|
+
logger_1.logger.info('📖 常用命令速查:');
|
|
69
|
+
logger_1.logger.info('');
|
|
70
|
+
logger_1.logger.info('| 场景 | 命令 |');
|
|
71
|
+
logger_1.logger.info('| :--- | :--- |');
|
|
72
|
+
logger_1.logger.info('| 自然语言入口 | speccore spec "<描述>" |');
|
|
73
|
+
logger_1.logger.info('| 查看进度 | speccore progress |');
|
|
74
|
+
logger_1.logger.info('| 创建任务 | speccore task new --name "<名称>" |');
|
|
75
|
+
logger_1.logger.info('| Bug 修复 | speccore bugfix --name "<Bug>" |');
|
|
76
|
+
logger_1.logger.info('| 需求变更 | speccore change --task=<Task> --desc="<描述>" |');
|
|
77
|
+
logger_1.logger.info('| 生成报告 | speccore report --format=html |');
|
|
78
|
+
logger_1.logger.info('| 查看帮助 | speccore help |');
|
|
79
|
+
logger_1.logger.info('');
|
|
80
|
+
logger_1.logger.info('💡 提示: 使用 speccore spec 可以通过自然语言描述自动执行!');
|
|
81
|
+
logger_1.logger.info(' 例如: speccore spec "查看进度"');
|
|
82
|
+
logger_1.logger.info(' 例如: speccore spec "开始干活"');
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
spinner.fail(`引导初始化失败: ${error}`);
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async function checkInitialization() {
|
|
90
|
+
return await (0, fs_extra_1.pathExists)((0, path_1.join)(process.cwd(), '.speccore'));
|
|
91
|
+
}
|
|
92
|
+
async function guideInit() {
|
|
93
|
+
logger_1.logger.info('');
|
|
94
|
+
logger_1.logger.info('🔧 正在初始化 SpecCore 项目...');
|
|
95
|
+
const speccoreDir = (0, path_1.join)(process.cwd(), '.speccore');
|
|
96
|
+
await (0, fs_extra_1.ensureDir)((0, path_1.join)(speccoreDir, 'PROJECT'));
|
|
97
|
+
await (0, fs_extra_1.ensureDir)((0, path_1.join)(speccoreDir, 'PATTERNS'));
|
|
98
|
+
await (0, fs_extra_1.ensureDir)((0, path_1.join)(speccoreDir, 'ITERATIONS'));
|
|
99
|
+
await (0, fs_extra_1.ensureDir)((0, path_1.join)(speccoreDir, 'RULES'));
|
|
100
|
+
await (0, fs_extra_1.ensureDir)((0, path_1.join)(speccoreDir, 'local'));
|
|
101
|
+
// 创建基础配置
|
|
102
|
+
const context = {
|
|
103
|
+
currentIteration: '',
|
|
104
|
+
currentTask: '',
|
|
105
|
+
currentAssignee: '',
|
|
106
|
+
lastUpdated: new Date().toISOString(),
|
|
107
|
+
history: [],
|
|
108
|
+
};
|
|
109
|
+
await (0, fs_extra_1.writeFile)((0, path_1.join)(speccoreDir, 'local', 'context.json'), JSON.stringify(context, null, 2));
|
|
110
|
+
// 创建 SETTINGS.md
|
|
111
|
+
await (0, fs_extra_1.writeFile)((0, path_1.join)(speccoreDir, 'SETTINGS.md'), `# SpecCore 框架配置
|
|
112
|
+
|
|
113
|
+
> 修改后,AI 将在下一次执行命令时自动生效。
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 1. 执行人追踪(Assignee Tracking)
|
|
118
|
+
|
|
119
|
+
| 配置项 | 可选值 | 默认值 | 说明 |
|
|
120
|
+
| :--- | :--- | :--- | :--- |
|
|
121
|
+
| \`assignee.enabled\` | \`true\`/\`false\` | \`true\` | 是否启用执行人追踪 |
|
|
122
|
+
| \`assignee.mode\` | \`strict\`/\`loose\`/\`off\` | \`loose\` | 强制程度 |
|
|
123
|
+
|
|
124
|
+
### 模式说明
|
|
125
|
+
| 模式 | 行为 |
|
|
126
|
+
| :--- | :--- |
|
|
127
|
+
| **\`strict\`** | 校验执行人与 Git 提交者,不一致时阻断命令执行 |
|
|
128
|
+
| **\`loose\`** | 自动填写 Git 提交者,仅发出警告(推荐) |
|
|
129
|
+
| **\`off\`** | 不读取、不校验、不推荐任何人 |
|
|
130
|
+
|
|
131
|
+
## 2. 双向追溯配置
|
|
132
|
+
|
|
133
|
+
| 配置项 | 可选值 | 默认值 | 说明 |
|
|
134
|
+
| :--- | :--- | :--- | :--- |
|
|
135
|
+
| \`trace.enabled\` | \`true\`/\`false\` | \`true\` | 是否启用双向追溯 |
|
|
136
|
+
| \`trace.auto_annotate\` | \`true\`/\`false\` | \`true\` | 生成代码时是否自动添加 @spec 注释 |
|
|
137
|
+
|
|
138
|
+
## 3. 其他配置
|
|
139
|
+
|
|
140
|
+
| 配置项 | 可选值 | 默认值 | 说明 |
|
|
141
|
+
| :--- | :--- | :--- | :--- |
|
|
142
|
+
| \`archive.auto_cleanup\` | \`true\`/\`false\` | \`false\` | 归档时是否自动清理未使用的资源 |
|
|
143
|
+
| \`plan.parallel_suggest\` | \`true\`/\`false\` | \`true\` | 是否自动推荐并行开发策略 |
|
|
144
|
+
| \`validation.strict_mode\` | \`true\`/\`false\` | \`false\` | 合规性检查是否为严格模式 |
|
|
145
|
+
| \`sync.auto_check\` | \`true\`/\`false\` | \`true\` | 开发完成后是否自动检查反向同步 |
|
|
146
|
+
|
|
147
|
+
## 4. 配置变更记录
|
|
148
|
+
|
|
149
|
+
| 日期 | 变更项 | 旧值 | 新值 | 变更人 |
|
|
150
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
151
|
+
`);
|
|
152
|
+
// 创建 ITERATIONS/README.md
|
|
153
|
+
await (0, fs_extra_1.writeFile)((0, path_1.join)(speccoreDir, 'ITERATIONS', 'README.md'), `# 期次索引
|
|
154
|
+
|
|
155
|
+
| 期次名称 | 时间范围 | 状态 | 负责人 | 备注 |
|
|
156
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
157
|
+
`);
|
|
158
|
+
// 创建 PROJECT/TEAM.md
|
|
159
|
+
await (0, fs_extra_1.writeFile)((0, path_1.join)(speccoreDir, 'PROJECT', 'TEAM.md'), `# 团队与 Git 映射
|
|
160
|
+
|
|
161
|
+
| 成员 | Git 用户名 | 角色 | 技术栈 | 负责模块 |
|
|
162
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
163
|
+
`);
|
|
164
|
+
logger_1.logger.success('项目初始化完成!');
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=welcome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/commands/welcome.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface Context {
|
|
2
|
+
currentIteration: string;
|
|
3
|
+
currentTask: string;
|
|
4
|
+
currentAssignee: string;
|
|
5
|
+
lastUpdated: string;
|
|
6
|
+
lastAction: string;
|
|
7
|
+
lastIntent: string;
|
|
8
|
+
interruptedAt: string;
|
|
9
|
+
iterationStatus: string;
|
|
10
|
+
pendingTasks: number;
|
|
11
|
+
inProgressTasks: number;
|
|
12
|
+
completedTasks: number;
|
|
13
|
+
blockedTasks: number;
|
|
14
|
+
customAliases: Record<string, string>;
|
|
15
|
+
history: ContextHistoryEntry[];
|
|
16
|
+
}
|
|
17
|
+
export interface ContextHistoryEntry {
|
|
18
|
+
command: string;
|
|
19
|
+
timestamp: string;
|
|
20
|
+
iteration?: string;
|
|
21
|
+
task?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function loadContext(): Promise<Context>;
|
|
24
|
+
export declare function saveContext(context: Context): Promise<void>;
|
|
25
|
+
export declare function updateContext(partial: Partial<Context>): Promise<void>;
|
|
26
|
+
export declare function recordHistory(command: string, iteration?: string, task?: string): Promise<void>;
|
|
27
|
+
export declare function detectActiveIteration(): Promise<string>;
|
|
28
|
+
export declare function detectCurrentAssignee(): Promise<string>;
|
|
29
|
+
export declare function getDefaultIteration(iteration?: string): Promise<string>;
|
|
30
|
+
export declare function getDefaultAssignee(assignee?: string): Promise<string>;
|
|
31
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,OAAO;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAID,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAoBpD;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAIjE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAI5E;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAarG;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,CAmC7D;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,CAa7D;AAED,wBAAsB,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG7E;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG3E"}
|