openmatrix 0.1.99 → 0.2.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.
Files changed (35) hide show
  1. package/dist/agents/impl/coder-agent.js +42 -42
  2. package/dist/agents/impl/executor-agent.js +75 -75
  3. package/dist/agents/impl/planner-agent.js +63 -63
  4. package/dist/agents/impl/reviewer-agent.js +66 -66
  5. package/dist/agents/impl/tester-agent.js +56 -56
  6. package/dist/cli/commands/report.js +45 -45
  7. package/dist/cli/commands/start.js +163 -34
  8. package/dist/cli/commands/step.js +62 -35
  9. package/dist/orchestrator/ai-reviewer.d.ts +29 -1
  10. package/dist/orchestrator/ai-reviewer.js +312 -207
  11. package/dist/orchestrator/approval-manager.js +14 -13
  12. package/dist/orchestrator/executor.d.ts +10 -1
  13. package/dist/orchestrator/executor.js +56 -2
  14. package/dist/orchestrator/meeting-manager.js +32 -31
  15. package/dist/orchestrator/phase-executor.js +7 -5
  16. package/dist/orchestrator/scheduler.d.ts +8 -6
  17. package/dist/orchestrator/scheduler.js +53 -22
  18. package/dist/orchestrator/state-machine.js +2 -2
  19. package/dist/orchestrator/task-planner.d.ts +81 -2
  20. package/dist/orchestrator/task-planner.js +683 -122
  21. package/dist/storage/state-manager.d.ts +6 -0
  22. package/dist/storage/state-manager.js +28 -0
  23. package/package.json +55 -55
  24. package/scripts/build-check.js +19 -19
  25. package/scripts/install-skills.js +57 -57
  26. package/skills/approve.md +250 -250
  27. package/skills/auto.md +298 -298
  28. package/skills/meeting.md +324 -324
  29. package/skills/om.md +112 -112
  30. package/skills/openmatrix.md +112 -112
  31. package/skills/start.md +24 -1
  32. package/dist/cli/commands/upgrade.d.ts +0 -2
  33. package/dist/cli/commands/upgrade.js +0 -329
  34. package/dist/orchestrator/task-planner.old.d.ts +0 -87
  35. package/dist/orchestrator/task-planner.old.js +0 -444
@@ -1,329 +0,0 @@
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
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.upgradeCommand = void 0;
40
- // src/cli/commands/upgrade.ts
41
- const commander_1 = require("commander");
42
- const upgrade_detector_js_1 = require("../../orchestrator/upgrade-detector.js");
43
- const readline = __importStar(require("readline"));
44
- const chalk_1 = __importDefault(require("chalk"));
45
- exports.upgradeCommand = new commander_1.Command('upgrade')
46
- .description('自动检测项目可改进点并提供升级建议')
47
- .argument('[hint]', '用户提示 (可选,用于聚焦检测方向)')
48
- .option('--json', '输出 JSON 格式 (供 Skill 解析)')
49
- .option('--auto', '自动执行所有改进建议 (无需确认)')
50
- .option('--categories <items>', '指定检测类别 (逗号分隔)', 'bug,quality,capability,ux,style,security,common')
51
- .option('--min-priority <level>', '最小优先级 (critical|high|medium|low)', 'low')
52
- .option('--max <number>', '最大建议数量', '50')
53
- .option('--scan <dirs>', '扫描目录 (逗号分隔)', 'src,skills,tests,docs')
54
- .option('--interactive', '交互式选择要执行的改进', false)
55
- .action(async (hint, options) => {
56
- const projectRoot = process.cwd();
57
- // 解析配置
58
- const config = {
59
- userHint: hint,
60
- categories: options.categories.split(',').map((c) => c.trim()),
61
- minPriority: options.minPriority,
62
- maxSuggestions: parseInt(options.max),
63
- scanDirs: options.scan.split(',').map((d) => d.trim())
64
- };
65
- // 创建检测器
66
- const detector = new upgrade_detector_js_1.UpgradeDetector(projectRoot, config);
67
- if (!options.json) {
68
- console.log(chalk_1.default.bold.cyan('\n🔍 OpenMatrix 升级检测器'));
69
- console.log('━'.repeat(42));
70
- console.log(`📁 项目路径: ${projectRoot}`);
71
- if (hint) {
72
- console.log(`💡 用户提示: ${hint}`);
73
- }
74
- console.log('\n⏳ 正在扫描项目...\n');
75
- }
76
- try {
77
- // 执行检测
78
- const result = await detector.detect();
79
- // JSON 输出
80
- if (options.json) {
81
- console.log(JSON.stringify(result, null, 2));
82
- return;
83
- }
84
- // 显示结果
85
- displayResult(result);
86
- // 交互式选择
87
- if (options.interactive && result.suggestions.length > 0) {
88
- const selected = await interactiveSelect(result.suggestions);
89
- if (selected.length > 0) {
90
- await executeSelected(selected, result.projectType);
91
- }
92
- }
93
- else if (options.auto && result.suggestions.length > 0) {
94
- // 自动执行所有
95
- await executeAll(result.suggestions, result.projectType);
96
- }
97
- else if (result.suggestions.length > 0) {
98
- // 询问用户
99
- const shouldExecute = await askForExecution();
100
- if (shouldExecute) {
101
- await executeAll(result.suggestions, result.projectType);
102
- }
103
- }
104
- }
105
- catch (error) {
106
- if (options.json) {
107
- console.log(JSON.stringify({ error: String(error) }));
108
- }
109
- else {
110
- console.error(chalk_1.default.red('\n❌ 检测失败:'), error);
111
- }
112
- process.exit(1);
113
- }
114
- });
115
- /**
116
- * 显示检测结果
117
- */
118
- function displayResult(result) {
119
- const { projectType, projectName, suggestions, summary } = result;
120
- console.log(chalk_1.default.bold(`📦 项目: ${projectName}`));
121
- console.log(` 类型: ${formatProjectType(projectType)}`);
122
- console.log(` 扫描时间: ${new Date(result.timestamp).toLocaleString()}\n`);
123
- // 摘要
124
- console.log(chalk_1.default.bold('📊 检测摘要'));
125
- console.log('━'.repeat(42));
126
- const categoryLabels = {
127
- bug: '🐛 代码缺陷',
128
- quality: '🔧 代码质量',
129
- capability: '📦 缺失能力',
130
- ux: '👤 用户体验',
131
- style: '🎨 代码风格',
132
- security: '🔒 安全问题',
133
- common: '⚠️ 常见问题',
134
- prompt: '🤖 Prompt 问题',
135
- skill: '⚡ Skill 问题',
136
- agent: '🧠 Agent 配置'
137
- };
138
- for (const [cat, count] of Object.entries(summary.byCategory)) {
139
- if (count > 0) {
140
- console.log(` ${categoryLabels[cat]}: ${chalk_1.default.yellow(count)}`);
141
- }
142
- }
143
- console.log(`\n 总计: ${chalk_1.default.bold(summary.total)} 个建议`);
144
- console.log(` 可自动修复: ${chalk_1.default.green(summary.autoFixable)} 个\n`);
145
- if (suggestions.length === 0) {
146
- console.log(chalk_1.default.green('✅ 未发现问题,项目状态良好!\n'));
147
- return;
148
- }
149
- // 详细建议
150
- console.log(chalk_1.default.bold('📋 改进建议'));
151
- console.log('━'.repeat(42) + '\n');
152
- // 按优先级分组
153
- const critical = suggestions.filter(s => s.priority === 'critical');
154
- const high = suggestions.filter(s => s.priority === 'high');
155
- const medium = suggestions.filter(s => s.priority === 'medium');
156
- const low = suggestions.filter(s => s.priority === 'low');
157
- if (critical.length > 0) {
158
- console.log(chalk_1.default.red.bold('🚨 关键问题:\n'));
159
- for (const s of critical) {
160
- displaySuggestion(s);
161
- }
162
- }
163
- if (high.length > 0) {
164
- console.log(chalk_1.default.yellow.bold('⚠️ 高优先级:\n'));
165
- for (const s of high) {
166
- displaySuggestion(s);
167
- }
168
- }
169
- if (medium.length > 0) {
170
- console.log(chalk_1.default.blue.bold('📋 中优先级:\n'));
171
- for (const s of medium) {
172
- displaySuggestion(s);
173
- }
174
- }
175
- if (low.length > 0) {
176
- console.log(chalk_1.default.gray.bold('💡 低优先级:\n'));
177
- for (const s of low.slice(0, 10)) { // 限制显示
178
- displaySuggestion(s);
179
- }
180
- if (low.length > 10) {
181
- console.log(chalk_1.default.gray(` ... 还有 ${low.length - 10} 个低优先级建议\n`));
182
- }
183
- }
184
- // 提示
185
- console.log(chalk_1.default.gray('━'.repeat(42)));
186
- console.log(chalk_1.default.gray('💡 提示:'));
187
- console.log(chalk_1.default.gray(' --interactive 交互式选择改进项'));
188
- console.log(chalk_1.default.gray(' --auto 自动执行所有改进'));
189
- console.log();
190
- }
191
- /**
192
- * 显示单个建议
193
- */
194
- function displaySuggestion(s) {
195
- const priorityColors = {
196
- critical: chalk_1.default.red,
197
- high: chalk_1.default.yellow,
198
- medium: chalk_1.default.blue,
199
- low: chalk_1.default.gray
200
- };
201
- const categoryIcons = {
202
- bug: '🐛',
203
- quality: '🔧',
204
- capability: '📦',
205
- ux: '👤',
206
- style: '🎨',
207
- security: '🔒',
208
- common: '⚠️',
209
- prompt: '🤖',
210
- skill: '⚡',
211
- agent: '🧠'
212
- };
213
- const color = priorityColors[s.priority];
214
- console.log(` ${color(`[${s.id}]`)} ${categoryIcons[s.category]} ${s.title}`);
215
- console.log(` 位置: ${s.location.file}${s.location.line ? `:${s.location.line}` : ''}`);
216
- console.log(` 建议: ${chalk_1.default.gray(s.suggestion)}`);
217
- if (s.autoFixable) {
218
- console.log(` ${chalk_1.default.green('✓ 可自动修复')}`);
219
- }
220
- console.log();
221
- }
222
- /**
223
- * 格式化项目类型
224
- */
225
- function formatProjectType(type) {
226
- const labels = {
227
- openmatrix: '🤖 OpenMatrix',
228
- 'ai-project': '🧠 AI 项目',
229
- nodejs: '📦 Node.js',
230
- typescript: '📘 TypeScript',
231
- python: '🐍 Python',
232
- go: '🔷 Go',
233
- rust: '🦀 Rust',
234
- java: '☕ Java',
235
- csharp: '💜 C#',
236
- cpp: '⚙️ C/C++',
237
- php: '🐘 PHP',
238
- unknown: '❓ 未知'
239
- };
240
- return labels[type];
241
- }
242
- /**
243
- * 交互式选择
244
- */
245
- async function interactiveSelect(suggestions) {
246
- console.log(chalk_1.default.bold.cyan('\n🎯 交互式选择'));
247
- console.log('━'.repeat(42));
248
- console.log('选择要执行的改进项 (空格选择,回车确认):\n');
249
- const rl = readline.createInterface({
250
- input: process.stdin,
251
- output: process.stdout
252
- });
253
- // 显示选项
254
- suggestions.forEach((s, i) => {
255
- console.log(` [ ] ${i + 1}. ${s.title} (${s.priority})`);
256
- });
257
- console.log('\n输入序号 (用逗号分隔),或输入 "all" 选择全部:');
258
- return new Promise((resolve) => {
259
- rl.question('> ', (answer) => {
260
- rl.close();
261
- if (answer.trim().toLowerCase() === 'all') {
262
- resolve(suggestions);
263
- return;
264
- }
265
- const indices = answer.split(',')
266
- .map(s => parseInt(s.trim()) - 1)
267
- .filter(i => i >= 0 && i < suggestions.length);
268
- resolve(indices.map(i => suggestions[i]));
269
- });
270
- });
271
- }
272
- /**
273
- * 询问是否执行
274
- */
275
- async function askForExecution() {
276
- const rl = readline.createInterface({
277
- input: process.stdin,
278
- output: process.stdout
279
- });
280
- return new Promise((resolve) => {
281
- rl.question('\n是否执行这些改进? (y/N) ', (answer) => {
282
- rl.close();
283
- resolve(answer.trim().toLowerCase() === 'y');
284
- });
285
- });
286
- }
287
- /**
288
- * 执行选中的改进
289
- */
290
- async function executeSelected(suggestions, projectType) {
291
- console.log(chalk_1.default.bold.cyan('\n🚀 执行改进'));
292
- console.log('━'.repeat(42));
293
- console.log(`选择了 ${suggestions.length} 个改进项\n`);
294
- // 这里需要调用 /om:start 来执行实际的改进
295
- // 输出 JSON 格式供 Skill 解析
296
- console.log(JSON.stringify({
297
- action: 'execute_upgrades',
298
- projectType,
299
- suggestions: suggestions.map(s => ({
300
- id: s.id,
301
- title: s.title,
302
- category: s.category,
303
- priority: s.priority,
304
- location: s.location,
305
- suggestion: s.suggestion
306
- }))
307
- }, null, 2));
308
- }
309
- /**
310
- * 执行所有改进
311
- */
312
- async function executeAll(suggestions, projectType) {
313
- console.log(chalk_1.default.bold.cyan('\n🚀 自动执行所有改进'));
314
- console.log('━'.repeat(42));
315
- // 输出 JSON 供 Skill 处理
316
- console.log(JSON.stringify({
317
- action: 'execute_all_upgrades',
318
- projectType,
319
- count: suggestions.length,
320
- suggestions: suggestions.map(s => ({
321
- id: s.id,
322
- title: s.title,
323
- category: s.category,
324
- priority: s.priority,
325
- location: s.location,
326
- suggestion: s.suggestion
327
- }))
328
- }, null, 2));
329
- }
@@ -1,87 +0,0 @@
1
- import type { ParsedTask } from '../types/index.js';
2
- export interface TaskBreakdown {
3
- taskId: string;
4
- title: string;
5
- description: string;
6
- priority: 'P0' | 'P1' | 'P2' | 'P3';
7
- dependencies: string[];
8
- estimatedComplexity: 'low' | 'medium' | 'high';
9
- assignedAgent: 'planner' | 'coder' | 'tester' | 'reviewer' | 'researcher' | 'executor';
10
- acceptanceCriteria?: string[];
11
- testTaskId?: string;
12
- phase: 'design' | 'develop' | 'verify' | 'accept';
13
- }
14
- export interface UserAnswers {
15
- objective?: string;
16
- techStack?: string[];
17
- testCoverage?: string;
18
- documentationLevel?: string;
19
- additionalContext?: Record<string, string>;
20
- /** 是否启用 E2E 测试 */
21
- e2eTests?: boolean;
22
- /** E2E 测试类型 (web/mobile/gui) */
23
- e2eType?: 'web' | 'mobile' | 'gui';
24
- }
25
- /**
26
- * TaskPlanner - 任务拆解器
27
- *
28
- * 增强版特性:
29
- * 1. 更细粒度的任务拆分 (每个目标拆分为设计+实现+测试)
30
- * 2. 测试任务配对 (每个开发任务自动生成对应测试任务)
31
- * 3. 验收标准注入 (从用户回答中提取)
32
- * 4. 用户上下文注入 (将用户回答注入任务描述)
33
- * 5. 依赖关系分析 (自动分析任务间依赖)
34
- */
35
- export declare class TaskPlanner {
36
- private userAnswers;
37
- constructor(userAnswers?: UserAnswers);
38
- /**
39
- * 设置用户回答
40
- */
41
- setUserAnswers(answers: UserAnswers): void;
42
- /**
43
- * Break down a parsed task into sub-tasks
44
- *
45
- * 增强版: 生成更细粒度的任务,包含设计、开发、测试配对
46
- */
47
- breakdown(parsedTask: ParsedTask, answers: Record<string, string>): TaskBreakdown[];
48
- /**
49
- * 提取用户上下文
50
- */
51
- private extractUserContext;
52
- /**
53
- * 解析数组类型的回答
54
- */
55
- private parseArrayAnswer;
56
- /**
57
- * 构建任务描述 (注入用户上下文)
58
- */
59
- private buildTaskDescription;
60
- /**
61
- * 构建测试任务描述
62
- */
63
- private buildTestDescription;
64
- /**
65
- * 构建 E2E 测试任务描述
66
- */
67
- private buildE2ETestDescription;
68
- /**
69
- * 获取 E2E 测试类型配置
70
- */
71
- private getE2ETypeConfig;
72
- /**
73
- * 生成用户流程测试用例
74
- */
75
- private generateUserFlows;
76
- /**
77
- * 解析覆盖率数值
78
- */
79
- private parseCoverage;
80
- /**
81
- * 生成验收标准
82
- */
83
- private generateAcceptanceCriteria;
84
- private generateTaskId;
85
- private determinePriority;
86
- private estimateComplexity;
87
- }