aidevo 1.0.0-beta.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 (110) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +431 -0
  3. package/dist/cli/commands/dashboard.d.ts +2 -0
  4. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  5. package/dist/cli/commands/dashboard.js +70 -0
  6. package/dist/cli/commands/dashboard.js.map +1 -0
  7. package/dist/cli/commands/init.d.ts +2 -0
  8. package/dist/cli/commands/init.d.ts.map +1 -0
  9. package/dist/cli/commands/init.js +362 -0
  10. package/dist/cli/commands/init.js.map +1 -0
  11. package/dist/cli/commands/log.d.ts +2 -0
  12. package/dist/cli/commands/log.d.ts.map +1 -0
  13. package/dist/cli/commands/log.js +438 -0
  14. package/dist/cli/commands/log.js.map +1 -0
  15. package/dist/cli/commands/migrate.d.ts +2 -0
  16. package/dist/cli/commands/migrate.d.ts.map +1 -0
  17. package/dist/cli/commands/migrate.js +183 -0
  18. package/dist/cli/commands/migrate.js.map +1 -0
  19. package/dist/cli/commands/reindex.d.ts +10 -0
  20. package/dist/cli/commands/reindex.d.ts.map +1 -0
  21. package/dist/cli/commands/reindex.js +94 -0
  22. package/dist/cli/commands/reindex.js.map +1 -0
  23. package/dist/cli/commands/report.d.ts +2 -0
  24. package/dist/cli/commands/report.d.ts.map +1 -0
  25. package/dist/cli/commands/report.js +219 -0
  26. package/dist/cli/commands/report.js.map +1 -0
  27. package/dist/cli/commands/rules.d.ts +2 -0
  28. package/dist/cli/commands/rules.d.ts.map +1 -0
  29. package/dist/cli/commands/rules.js +143 -0
  30. package/dist/cli/commands/rules.js.map +1 -0
  31. package/dist/cli/commands/start.d.ts +2 -0
  32. package/dist/cli/commands/start.d.ts.map +1 -0
  33. package/dist/cli/commands/start.js +173 -0
  34. package/dist/cli/commands/start.js.map +1 -0
  35. package/dist/cli/commands/status.d.ts +2 -0
  36. package/dist/cli/commands/status.d.ts.map +1 -0
  37. package/dist/cli/commands/status.js +74 -0
  38. package/dist/cli/commands/status.js.map +1 -0
  39. package/dist/cli/commands/update.d.ts +2 -0
  40. package/dist/cli/commands/update.d.ts.map +1 -0
  41. package/dist/cli/commands/update.js +146 -0
  42. package/dist/cli/commands/update.js.map +1 -0
  43. package/dist/cli/index.d.ts +3 -0
  44. package/dist/cli/index.d.ts.map +1 -0
  45. package/dist/cli/index.js +85 -0
  46. package/dist/cli/index.js.map +1 -0
  47. package/dist/mcp/server.d.ts +10 -0
  48. package/dist/mcp/server.d.ts.map +1 -0
  49. package/dist/mcp/server.js +632 -0
  50. package/dist/mcp/server.js.map +1 -0
  51. package/dist/schemas/run-json.d.ts +252 -0
  52. package/dist/schemas/run-json.d.ts.map +1 -0
  53. package/dist/schemas/run-json.js +22 -0
  54. package/dist/schemas/run-json.js.map +1 -0
  55. package/dist/server/api.d.ts +24 -0
  56. package/dist/server/api.d.ts.map +1 -0
  57. package/dist/server/api.js +196 -0
  58. package/dist/server/api.js.map +1 -0
  59. package/dist/server/index.d.ts +2 -0
  60. package/dist/server/index.d.ts.map +1 -0
  61. package/dist/server/index.js +166 -0
  62. package/dist/server/index.js.map +1 -0
  63. package/dist/utils/display.d.ts +12 -0
  64. package/dist/utils/display.d.ts.map +1 -0
  65. package/dist/utils/display.js +52 -0
  66. package/dist/utils/display.js.map +1 -0
  67. package/dist/utils/fs.d.ts +9 -0
  68. package/dist/utils/fs.d.ts.map +1 -0
  69. package/dist/utils/fs.js +43 -0
  70. package/dist/utils/fs.js.map +1 -0
  71. package/dist/utils/git.d.ts +4 -0
  72. package/dist/utils/git.d.ts.map +1 -0
  73. package/dist/utils/git.js +18 -0
  74. package/dist/utils/git.js.map +1 -0
  75. package/dist/utils/paths.d.ts +25 -0
  76. package/dist/utils/paths.d.ts.map +1 -0
  77. package/dist/utils/paths.js +45 -0
  78. package/dist/utils/paths.js.map +1 -0
  79. package/dist/utils/rules.d.ts +44 -0
  80. package/dist/utils/rules.d.ts.map +1 -0
  81. package/dist/utils/rules.js +208 -0
  82. package/dist/utils/rules.js.map +1 -0
  83. package/dist/utils/run-data.d.ts +37 -0
  84. package/dist/utils/run-data.d.ts.map +1 -0
  85. package/dist/utils/run-data.js +353 -0
  86. package/dist/utils/run-data.js.map +1 -0
  87. package/dist/utils/tokens.d.ts +26 -0
  88. package/dist/utils/tokens.d.ts.map +1 -0
  89. package/dist/utils/tokens.js +173 -0
  90. package/dist/utils/tokens.js.map +1 -0
  91. package/package.json +48 -0
  92. package/src/assets/skills/audit.md +98 -0
  93. package/src/assets/skills/bug-fixer.md +48 -0
  94. package/src/assets/skills/code-generator.md +82 -0
  95. package/src/assets/skills/commit-code.md +67 -0
  96. package/src/assets/skills/dashboard-generator.md +65 -0
  97. package/src/assets/skills/dev-flower.md +85 -0
  98. package/src/assets/skills/deviation-recorder.md +89 -0
  99. package/src/assets/skills/docx-to-markdown.md +69 -0
  100. package/src/assets/skills/mcp-reviewer.md +43 -0
  101. package/src/assets/skills/requirement-analyzer.md +103 -0
  102. package/src/assets/skills/rules-evolver.md +48 -0
  103. package/src/assets/skills/self-reviewer.md +53 -0
  104. package/src/assets/skills/task-splitter.md +58 -0
  105. package/src/assets/skills/workflow-orchestrator.md +204 -0
  106. package/src/assets/templates/demo-run.json +910 -0
  107. package/src/assets/templates/run.json +63 -0
  108. package/src/dashboard/assets/index-BMygHuaU.js +111 -0
  109. package/src/dashboard/assets/index-BW0UZ6Es.css +1 -0
  110. package/src/dashboard/index.html +13 -0
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Token usage collection from AI tool session files.
3
+ *
4
+ * Currently supports: Claude Code
5
+ * Data source: ~/.claude/projects/{project-hash}/{session}.jsonl
6
+ */
7
+ export interface TokenUsage {
8
+ inputTokens: number;
9
+ outputTokens: number;
10
+ cacheCreationTokens: number;
11
+ cacheReadTokens: number;
12
+ totalTokens: number;
13
+ }
14
+ /**
15
+ * Collect token usage from Claude Code for the current project.
16
+ *
17
+ * @param projectRoot - Project root directory
18
+ * @param sinceTimestamp - Only count tokens after this ISO timestamp
19
+ * @returns Token usage, or null if Claude Code data not found
20
+ */
21
+ export declare function collectClaudeTokens(projectRoot: string, sinceTimestamp?: string): TokenUsage | null;
22
+ /**
23
+ * Collect token usage between two timestamps (for a specific task).
24
+ */
25
+ export declare function collectClaudeTokensBetween(projectRoot: string, startTime: string, endTime: string): TokenUsage | null;
26
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/utils/tokens.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAsGD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,MAAM,GACtB,UAAU,GAAG,IAAI,CAQnB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,UAAU,GAAG,IAAI,CAuDnB"}
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Token usage collection from AI tool session files.
3
+ *
4
+ * Currently supports: Claude Code
5
+ * Data source: ~/.claude/projects/{project-hash}/{session}.jsonl
6
+ */
7
+ import { resolve } from 'node:path';
8
+ import { homedir } from 'node:os';
9
+ import { readFileSync, readdirSync, statSync, existsSync } from 'node:fs';
10
+ /**
11
+ * Convert a project root path to Claude Code's project directory name.
12
+ * /Users/foo/my-project → -Users-foo-my-project
13
+ */
14
+ function projectPathToClaudeDir(projectRoot) {
15
+ return projectRoot.replace(/\//g, '-');
16
+ }
17
+ /**
18
+ * Find the Claude Code project session directory.
19
+ */
20
+ function getClaudeProjectDir(projectRoot) {
21
+ const claudeDir = resolve(homedir(), '.claude', 'projects');
22
+ if (!existsSync(claudeDir))
23
+ return null;
24
+ const dirName = projectPathToClaudeDir(projectRoot);
25
+ const fullPath = resolve(claudeDir, dirName);
26
+ if (!existsSync(fullPath))
27
+ return null;
28
+ return fullPath;
29
+ }
30
+ /**
31
+ * Find the most recently modified .jsonl session file in a Claude project dir.
32
+ */
33
+ function findLatestSessionFile(projectDir) {
34
+ const files = readdirSync(projectDir)
35
+ .filter(f => f.endsWith('.jsonl'))
36
+ .map(f => ({
37
+ name: f,
38
+ path: resolve(projectDir, f),
39
+ mtime: statSync(resolve(projectDir, f)).mtimeMs,
40
+ }))
41
+ .sort((a, b) => b.mtime - a.mtime);
42
+ return files.length > 0 ? files[0].path : null;
43
+ }
44
+ /**
45
+ * Parse token usage from a Claude Code session .jsonl file.
46
+ *
47
+ * @param sessionFile - Path to the .jsonl file
48
+ * @param sinceTimestamp - Only count messages after this ISO timestamp (optional)
49
+ * @returns Accumulated token usage
50
+ */
51
+ function parseSessionTokens(sessionFile, sinceTimestamp) {
52
+ const usage = {
53
+ inputTokens: 0,
54
+ outputTokens: 0,
55
+ cacheCreationTokens: 0,
56
+ cacheReadTokens: 0,
57
+ totalTokens: 0,
58
+ };
59
+ const sinceMs = sinceTimestamp ? new Date(sinceTimestamp).getTime() : 0;
60
+ // Read file in chunks from the end if we have a timestamp filter
61
+ // For simplicity, read the whole file (session files are typically < 50MB)
62
+ let content;
63
+ try {
64
+ content = readFileSync(sessionFile, 'utf-8');
65
+ }
66
+ catch {
67
+ return usage;
68
+ }
69
+ const lines = content.split('\n');
70
+ for (const line of lines) {
71
+ if (!line.trim())
72
+ continue;
73
+ let entry;
74
+ try {
75
+ entry = JSON.parse(line);
76
+ }
77
+ catch {
78
+ continue;
79
+ }
80
+ // Only process assistant messages (they contain usage data)
81
+ if (entry.type !== 'assistant')
82
+ continue;
83
+ // Filter by timestamp if specified
84
+ if (sinceMs > 0 && entry.timestamp) {
85
+ const msgMs = new Date(entry.timestamp).getTime();
86
+ if (msgMs < sinceMs)
87
+ continue;
88
+ }
89
+ const msgUsage = entry.message?.usage;
90
+ if (!msgUsage)
91
+ continue;
92
+ usage.inputTokens += msgUsage.input_tokens || 0;
93
+ usage.outputTokens += msgUsage.output_tokens || 0;
94
+ usage.cacheCreationTokens += msgUsage.cache_creation_input_tokens || 0;
95
+ usage.cacheReadTokens += msgUsage.cache_read_input_tokens || 0;
96
+ }
97
+ usage.totalTokens = usage.inputTokens + usage.outputTokens
98
+ + usage.cacheCreationTokens + usage.cacheReadTokens;
99
+ return usage;
100
+ }
101
+ /**
102
+ * Collect token usage from Claude Code for the current project.
103
+ *
104
+ * @param projectRoot - Project root directory
105
+ * @param sinceTimestamp - Only count tokens after this ISO timestamp
106
+ * @returns Token usage, or null if Claude Code data not found
107
+ */
108
+ export function collectClaudeTokens(projectRoot, sinceTimestamp) {
109
+ const projectDir = getClaudeProjectDir(projectRoot);
110
+ if (!projectDir)
111
+ return null;
112
+ const sessionFile = findLatestSessionFile(projectDir);
113
+ if (!sessionFile)
114
+ return null;
115
+ return parseSessionTokens(sessionFile, sinceTimestamp);
116
+ }
117
+ /**
118
+ * Collect token usage between two timestamps (for a specific task).
119
+ */
120
+ export function collectClaudeTokensBetween(projectRoot, startTime, endTime) {
121
+ const projectDir = getClaudeProjectDir(projectRoot);
122
+ if (!projectDir)
123
+ return null;
124
+ const sessionFile = findLatestSessionFile(projectDir);
125
+ if (!sessionFile)
126
+ return null;
127
+ const startMs = new Date(startTime).getTime();
128
+ const endMs = new Date(endTime).getTime();
129
+ const usage = {
130
+ inputTokens: 0,
131
+ outputTokens: 0,
132
+ cacheCreationTokens: 0,
133
+ cacheReadTokens: 0,
134
+ totalTokens: 0,
135
+ };
136
+ let content;
137
+ try {
138
+ content = readFileSync(sessionFile, 'utf-8');
139
+ }
140
+ catch {
141
+ return null;
142
+ }
143
+ const lines = content.split('\n');
144
+ for (const line of lines) {
145
+ if (!line.trim())
146
+ continue;
147
+ let entry;
148
+ try {
149
+ entry = JSON.parse(line);
150
+ }
151
+ catch {
152
+ continue;
153
+ }
154
+ if (entry.type !== 'assistant')
155
+ continue;
156
+ if (!entry.timestamp)
157
+ continue;
158
+ const msgMs = new Date(entry.timestamp).getTime();
159
+ if (msgMs < startMs || msgMs > endMs)
160
+ continue;
161
+ const msgUsage = entry.message?.usage;
162
+ if (!msgUsage)
163
+ continue;
164
+ usage.inputTokens += msgUsage.input_tokens || 0;
165
+ usage.outputTokens += msgUsage.output_tokens || 0;
166
+ usage.cacheCreationTokens += msgUsage.cache_creation_input_tokens || 0;
167
+ usage.cacheReadTokens += msgUsage.cache_read_input_tokens || 0;
168
+ }
169
+ usage.totalTokens = usage.inputTokens + usage.outputTokens
170
+ + usage.cacheCreationTokens + usage.cacheReadTokens;
171
+ return usage;
172
+ }
173
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/utils/tokens.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "aidevo",
3
+ "version": "1.0.0-beta.1",
4
+ "description": "AI Development Observability Platform - Track what AI actually does in your codebase",
5
+ "type": "module",
6
+ "bin": {
7
+ "aidevo": "./dist/cli/index.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "build:test": "tsc -p tsconfig.test.json",
12
+ "test": "npm run build:test && node --test dist-test/tests/*.test.js",
13
+ "dev": "tsc --watch",
14
+ "start": "node dist/cli/index.js",
15
+ "prepublishOnly": "npm run build && cd dashboard && npm run build"
16
+ },
17
+ "keywords": [
18
+ "ai",
19
+ "development",
20
+ "observability",
21
+ "claude",
22
+ "cursor",
23
+ "devops",
24
+ "dashboard"
25
+ ],
26
+ "author": "wen tao",
27
+ "license": "MIT",
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "git+https://github.com/LWTlong/ai-dev-os.git"
31
+ },
32
+ "homepage": "https://github.com/LWTlong/ai-dev-os#readme",
33
+ "bugs": {
34
+ "url": "https://github.com/LWTlong/ai-dev-os/issues"
35
+ },
36
+ "engines": {
37
+ "node": ">=18.0.0"
38
+ },
39
+ "files": [
40
+ "dist",
41
+ "src/assets",
42
+ "src/dashboard"
43
+ ],
44
+ "devDependencies": {
45
+ "@types/node": "^25.4.0",
46
+ "typescript": "^5.9.3"
47
+ }
48
+ }
@@ -0,0 +1,98 @@
1
+ ---
2
+ name: audit
3
+ description: 扫描项目代码,生成与项目完全匹配的 AI 开发规范,直接写入 .aidevos/rules/。
4
+ globs: ['.aidevos/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
5
+ ---
6
+
7
+ # audit (项目审计)
8
+
9
+ ## 提示
10
+
11
+ 此 Skill 由用户人工触发,不纳入 workflow-orchestrator 自动化流程。
12
+
13
+ ## 角色
14
+
15
+ 你是一个顶级的架构师,擅长通过分析现有项目代码库(逻辑、公共组件、业务组件)来沉淀自动化指令。你的目标是编写能让 AI 生成代码"如出一辙"的规则。
16
+
17
+ ## 核心目标
18
+
19
+ 通过扫描真实项目代码 + 分析现有规则,构建一套与项目完全匹配的 AI 开发规范体系,使 AI 生成代码一次通过率达到 90% 以上。
20
+
21
+ ## 执行阶段
22
+
23
+ ### 阶段一:加载现有规则
24
+
25
+ 读取并理解项目现有的所有规则来源:
26
+ 1. **AIDevOS 规则**:`.aidevos/rules/*.md`
27
+ 2. **全局规则文件**:
28
+ - Claude Code 用户:`CLAUDE.md`
29
+ - Cursor 用户:`.cursor/rules/*/*.md`
30
+
31
+ ### 阶段二:项目真实结构建模
32
+
33
+ 1. 扫描范围(排除 node_modules/dist/build/.git)
34
+ 2. 技术栈识别(框架、UI 库、状态管理、请求封装、路由模式)
35
+ 3. 深度分析:
36
+ - 公共组件:使用方式、Props 约定、插槽设计
37
+ - API 封装:请求函数命名、参数传递、错误处理
38
+ - 状态管理:Store 结构、Action/Mutation 模式
39
+ - 路由模式:路由配置、权限控制、懒加载
40
+ - 类型系统:接口定义、泛型使用、枚举约定
41
+ - 样式方案:CSS Modules / Tailwind / CSS-in-JS
42
+ - i18n 方案:文案管理、语言切换、命名约定
43
+
44
+ ### 阶段三:规则审计
45
+
46
+ 对现有 `.aidevos/rules/` 进行审计:
47
+ - **重复检测**:语义重复、约束重复
48
+ - **冲突检测**:A 强制 vs B 禁止
49
+ - **失配检测**:引用不存在的组件/API
50
+ - **缺失关键约束**:对照真实代码,发现未覆盖的模式
51
+
52
+ ### 阶段四:生成规则并直接写入
53
+
54
+ 基于真实代码生成或更新 `.aidevos/rules/` 下的规则文件:
55
+
56
+ | 文件 | 内容 |
57
+ |------|------|
58
+ | `code-style.md` | 编码风格:命名规范、文件组织、注释要求 |
59
+ | `component-usage.md` | 组件使用:UI 库组件选择、自定义组件约定、Props 传递 |
60
+ | `api-patterns.md` | API 封装:请求函数模式、错误处理、类型定义 |
61
+ | `state-management.md` | 状态管理:Store 结构、Action 命名、数据流 |
62
+ | `i18n-rules.md` | 国际化:文案位置、key 命名、禁止硬编码 |
63
+ | `architecture.md` | 架构约束:目录结构、模块划分、依赖关系 |
64
+ | `type-system.md` | 类型系统:接口定义、泛型使用、any 禁用 |
65
+
66
+ **所有规则必须**:
67
+ 1. 基于真实项目代码(不臆造)
68
+ 2. 可执行、可验证(不能是模糊建议)
69
+ 3. 包含正确示例和错误示例
70
+ 4. 引用真实存在的组件/API 路径
71
+
72
+ ### 阶段五:输出确认
73
+
74
+ 生成完成后输出:
75
+ ```
76
+ ✓ 已生成/更新 .aidevos/rules/ 下的规则文件:
77
+ - code-style.md
78
+ - component-usage.md
79
+ - api-patterns.md
80
+ - state-management.md
81
+ - i18n-rules.md
82
+ - architecture.md
83
+ - type-system.md
84
+
85
+ 基于项目代码扫描,识别:
86
+ - 技术栈:[Vue 3 + TypeScript + Pinia + Element Plus]
87
+ - 请求封装:[src/api/request.ts]
88
+ - 公共组件:[src/components/common/]
89
+ - 状态管理:[src/store/]
90
+ ```
91
+
92
+ ## 质量控制原则
93
+
94
+ 1. 所有结论必须基于真实代码
95
+ 2. 不允许猜测组件、虚构 API 模式
96
+ 3. 优化目标为"AI 生成代码一致性"
97
+ 4. 所有规则必须可执行、可验证
98
+ 5. 规则文件使用 Markdown 格式,结构清晰
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: bug-fixer
3
+ description: 处理自检不通过或测试产生的 Bug 缺陷。基于 review 结果或用户反馈进行专项修复,并将 Bug 记录写入 run.json.bugs[]。
4
+ globs: ['.aidevos/runs/*/*/run.json', '.aidevos/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
5
+ ---
6
+
7
+ # bug-fixer (缺陷修复器)
8
+
9
+ > **铁律**:1) 修复后必须在 `run.json.bugs[]` 追加 Bug 记录并更新 `summary.bugCount` 2) 写入后输出 `✓ run.json updated: bugs[], summary` 3) 修复前必须回顾项目所有规范(`.aidevos/rules/`、`CLAUDE.md` 或 `.cursor/rules/*/*.md`)判断是否为规范偏离 4) 如属于 AI 偏差(非功能 Bug),建议用户使用 deviation-recorder 记录
10
+
11
+ ## 角色
12
+
13
+ 你是一个经验丰富的高级救火队长。你擅于快速定位由于规范不匹配、组件搭配错误或业务逻辑理解偏差导致的隐患代码,并给予重构性的精准修复。
14
+
15
+ ## 路径约定
16
+
17
+ > **[run_id]**:当前需求/功能的唯一标识
18
+ > **[dev_name]**:通过 `git config user.name` 获取,转全小写并用 `-` 替换空格。
19
+ > **数据根目录**:`.aidevos/runs/[run_id]/[dev_name]/`
20
+ > **数据文件**:`run.json`
21
+
22
+ ## 执行指令
23
+
24
+ 1. **获取修复任务:**
25
+ - 读取 `run.json.reviews[]` 中最近一条 `result: "fail"` 的 review 记录,或从用户反馈中获取 Bug 描述。
26
+
27
+ 2. **定位与分析:**
28
+ - 根据 Bug 的描述或错误堆栈,定位到具体的问题文件。
29
+ - 回顾项目所有规范,以识别是不是架构偏离问题导致的:
30
+ - **AIDevOS 规则**:`.aidevos/rules/` 下的所有 `.md` 文件
31
+ - **全局规则文件**:`CLAUDE.md`(Claude Code 项目)或 `.cursor/rules/*/*.md`(Cursor 项目)
32
+
33
+ 3. **修复策略执行:**
34
+ - 严谨地修改问题代码。
35
+ - 修复完成后请求再次自检触发,保证没有产生衍生问题。
36
+
37
+ 4. **记录反馈(强制,不可跳过):**
38
+ - 如果此 Bug 源于 AI 生成代码与用户期望的偏差,应建议用户使用 deviation-recorder 记录到 `run.json.deviations[]`。
39
+ - 执行以下命令记录 Bug 和修复:
40
+ ```bash
41
+ # 记录 Bug
42
+ aidevo log bug --title "Bug简述" --severity high --source self-review --task TASK-XX --files "file1.ts,file2.ts"
43
+ # 修复后标记
44
+ aidevo log bug-fix --id BUG-XX --fix "修复方案描述"
45
+ # 记录修改的文件
46
+ aidevo log file --path "修改的文件路径" --change-type modified --lines-added XX --lines-removed XX
47
+ ```
48
+ CLI 会自动更新 summary 统计和 timeline。
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: code-generator
3
+ description: 严格按照 run.json.tasks[] 和项目规范生成业务代码,并更新任务状态。
4
+ globs: ['.aidevos/runs/*/*/run.json', '.aidevos/rules/*.md', 'CLAUDE.md', '.cursor/rules/*/*.md']
5
+ ---
6
+
7
+ # code-generator (代码生成器)
8
+
9
+ > **铁律**:1) 必须先读取项目所有规范再写代码(`.aidevos/rules/`、`CLAUDE.md` 或 `.cursor/rules/*/*.md`) 2) 完成后必须更新 `run.json.tasks[].status` 和 `summary.completedTasks` 3) 写入后输出 `✓ run.json updated: tasks[], summary, files[]` 4) 禁止臆想不存在的 API / 组件 5) 禁止魔法字符串,文案必须走 i18n
10
+
11
+ ## 角色
12
+
13
+ 你是一个极其严谨的、深刻理解项目架构的高级工程师。你严格执行任务清单,产出百分之百符合架构要求的代码。
14
+
15
+ ## 路径约定
16
+
17
+ > **[run_id]**:当前需求/功能的唯一标识
18
+ > **[dev_name]**:通过 `git config user.name` 获取,转全小写并用 `-` 替换空格。
19
+ > **数据根目录**:`.aidevos/runs/[run_id]/[dev_name]/`
20
+ > **数据文件**:`run.json`
21
+
22
+ ## 执行指令
23
+
24
+ 1. **确定当前任务并记录开始时间:**
25
+
26
+ - 读取 `run.json.tasks[]`。
27
+ - 寻找**第一个** `status: "pending"` 或 `status: "in-progress"` 的任务作为本次工作的核心目标。
28
+ - 如果所有任务 `status: "done"`,提示工作结束。
29
+ - **立即执行**(记录任务开始时间,用于耗时统计):
30
+ ```bash
31
+ aidevo log task-start --id TASK-XX
32
+ ```
33
+
34
+ 2. **强制规则加载与参考文档读取:**
35
+
36
+ **a) 读取项目规范(必须):**
37
+ - 仔细阅读项目所有规范:
38
+ - **AIDevOS 规则**:`.aidevos/rules/` 下的所有 `.md` 文件(从 `rules.json` 自动生成的分类视图)
39
+ - **全局规则文件**:`CLAUDE.md`(Claude Code 项目)或 `.cursor/rules/*/*.md`(Cursor 项目)
40
+ - 规范包括:编码风格、组件使用、API 封装、i18n、状态管理、架构约束等。
41
+
42
+ **b) 读取接口文档(如果存在):**
43
+ - 检查数据根目录下是否存在接口文档:
44
+ - `api.md` / `interface.md` / `接口文档.md`
45
+ - 如果当前任务涉及 API 调用,优先参考接口文档中的定义:
46
+ - 接口路径、请求方式、参数结构、响应格式
47
+ - 按照接口文档的定义生成 API 调用代码
48
+ - 如果没有接口文档,根据 `analysis.md` 中的推断或任务描述编写。
49
+
50
+ 3. **编写代码:**
51
+
52
+ - 严格按照所选任务的需求生成/修改代码。
53
+ - **通用禁区:**
54
+ - 禁止不符合项目规范的代码模式(从 rules 读取具体约束)。
55
+ - 禁止魔法字符串,页面文本必须进 i18n 文件。
56
+ - 禁止使用项目约定之外的路径别名。
57
+ - 不要臆造或假定不存在的组件 API。
58
+ - 确保代码逻辑健壮(类型定义、异常处理、必要注释)。
59
+
60
+ 4. **状态更新(强制,不可跳过):**
61
+ 完成当前任务代码后,**必须按顺序**执行以下命令记录:
62
+
63
+ **a) 记录所有文件变更(必须,不能遗漏):**
64
+ ```bash
65
+ aidevo log file --path "src/views/xxx.vue" --change-type modified --lines-added 50 --lines-removed 10
66
+ aidevo log file --path "src/api/yyy.ts" --change-type created --lines-added 30
67
+ ```
68
+ - **对每个修改过的文件都必须执行一次** `aidevo log file`
69
+ - `--change-type` 可选值:`created`(新建)、`modified`(修改)、`deleted`(删除)
70
+ - `--lines-added` 和 `--lines-removed` 从 git diff 或编辑器统计获取
71
+
72
+ **b) 标记任务完成:**
73
+ ```bash
74
+ aidevo log task-done --id TASK-XX
75
+ ```
76
+
77
+ CLI 会自动更新 summary.filesChanged、summary.linesAdded、timeline 和 files[] 数组。
78
+
79
+ **检查清单**:
80
+ - ✅ 所有新建/修改/删除的文件都已记录
81
+ - ✅ 行数统计准确
82
+ - ✅ 任务状态已标记完成
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: commit-code
3
+ description: 完整的代码提交流程:更新代码 -> 检测冲突 -> 生成 commit message -> 提交 -> 推送。
4
+ globs: []
5
+ ---
6
+
7
+ # commit-code (代码提交助手)
8
+
9
+ ## 角色
10
+
11
+ 你是一个严谨的代码提交助手,负责确保代码安全地提交和推送。
12
+
13
+ ## 执行步骤
14
+
15
+ ### 1. 获取当前分支信息
16
+
17
+ ```bash
18
+ git branch --show-current
19
+ ```
20
+
21
+ ### 2. 检查远程分支并更新代码
22
+
23
+ 1. `git fetch origin`
24
+ 2. 检查远程分支是否存在:`git ls-remote --heads origin [branch_name]`
25
+ - 不存在 -> `git push -u origin [branch_name]`
26
+ - 存在 -> `git pull origin [branch_name]`
27
+ 3. 检测冲突:
28
+ - 有冲突 -> 提示用户手动解决,停止执行
29
+ - 无冲突 -> 继续
30
+
31
+ ### 3. 检查代码改动
32
+
33
+ - `git status` 检查是否有改动
34
+ - `git diff --stat` 获取改动统计
35
+
36
+ ### 4. 生成提交信息
37
+
38
+ 1. 读取需求信息(如果 `analysis.md` 存在)
39
+ 2. 分析改动类型:feat / fix / refactor / docs / chore
40
+ 3. 确定改动范围(scope):根据改动文件的主要目录
41
+ 4. 生成格式化的 commit message:
42
+
43
+ ```
44
+ <type>(<scope>): <简短描述>
45
+
46
+ <改动列表>
47
+
48
+ Closes #[branch_name]
49
+ ```
50
+
51
+ ### 5. 提交代码
52
+
53
+ ```bash
54
+ git add .
55
+ git commit -m "<message>"
56
+ ```
57
+
58
+ ### 6. 推送到远程(需用户确认)
59
+
60
+ - 询问用户是否推送
61
+ - 确认后执行 `git push origin [branch_name]`
62
+
63
+ ## 注意事项
64
+
65
+ 1. 检测到冲突立即停止,提示用户手动解决
66
+ 2. 必须用户确认才推送
67
+ 3. 推送失败不影响本地提交
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: dashboard-generator
3
+ description: 根据 run.json 数据自动生成/更新数据看板。现已由 `aidevo dashboard` CLI 命令替代(实时 Web Dashboard)。
4
+ globs: ['.aidevos/runs/*/*/run.json']
5
+ ---
6
+
7
+ # dashboard-generator (数据看板生成器)
8
+
9
+ > **注意**:此 Skill 的功能已由 `aidevo dashboard` CLI 命令替代。CLI 命令启动本地 HTTP Server + SSE 实时推送,提供更好的可视化体验。以下文档保留作为参考。
10
+
11
+ ## 角色
12
+
13
+ 你是一个数据可视化专家。你的职责是读取 `run.json` 中的所有结构化数据,提取关键指标,生成或更新一份美观的 ECharts 深色主题数据看板(单文件 HTML)。
14
+
15
+ ## 路径约定
16
+
17
+ > **[run_id]**:当前需求/功能的唯一标识
18
+ > **[dev_name]**:通过 `git config user.name` 获取,转全小写并用 `-` 替换空格。
19
+ > **数据根目录**:`.aidevos/runs/[run_id]/[dev_name]/`
20
+ > **数据源**:`run.json`(单一数据源)
21
+
22
+ ## 数据源 (run.json 字段映射)
23
+
24
+ | JSON Path | 提取内容 |
25
+ |-----------|---------|
26
+ | `summary.totalTasks` / `summary.completedTasks` | 任务完成进度 |
27
+ | `workflow[]` | 阶段数、各阶段状态 |
28
+ | `deviations[]` | 偏差总数、根因分类、类别分布、涉及文件 |
29
+ | `bugs[]` | 缺陷总数、涉及文件 |
30
+ | `reviews[]` | 自检次数、通过/未通过数 |
31
+ | `files[]` | 文件变更数、热点文件 |
32
+ | `rules[]` | 已沉淀规则列表 |
33
+ | `meta.startTime` / `meta.endTime` | 开发周期 |
34
+ | `timeline[]` | 事件时间线 |
35
+
36
+ ## 看板结构
37
+
38
+ ### KPI 卡片行(6 列,可点击查看详情)
39
+
40
+ | 卡片 | 数据来源 | 颜色 |
41
+ |------|---------|------|
42
+ | Tasks Completed | summary.completedTasks / summary.totalTasks | green |
43
+ | Stage Progress | workflow 中 completed 数 / workflow 总数 | blue |
44
+ | Deviations | summary.deviationCount | orange |
45
+ | Bugs | summary.bugCount | red |
46
+ | Review Pass Rate | summary.reviewPassCount / summary.reviewCount | purple |
47
+ | Files Changed | summary.filesChanged | cyan |
48
+
49
+ ### 图表区域
50
+
51
+ | 图表 | 类型 | 数据源 |
52
+ |------|------|--------|
53
+ | 各阶段任务完成情况 | horizontal bar | tasks[](按 stageName 分组) |
54
+ | 偏差根因分析 | pie (donut) | deviations[](按 rootCauseCategory 分组) |
55
+ | 偏差类别分布 | horizontal bar | deviations[](按 deviationCategory 分组) |
56
+ | 文件修改热点 | horizontal bar | files[](按 changeCount 排序) |
57
+ | 偏差与规则趋势 | bar + line (双轴) | deviations[] 数量 + rules[] 累计数 |
58
+ | 开发时间线 | timeline | timeline[] |
59
+
60
+ ## 技术要求
61
+
62
+ - **ECharts CDN**:`https://cdn.jsdelivr.net/npm/echarts@5.5.0/dist/echarts.min.js`
63
+ - **深色主题**:背景 `#0f1923`,卡片 `#162231`,边框 `#1e2d3d`,文字 `#e0e6ed`
64
+ - **响应式**:`window.addEventListener('resize', ...)` 让图表自适应
65
+ - **无外部依赖**:除 ECharts CDN 外不依赖其他库