aodw-skill 0.7.17 → 0.7.19
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/.aodw-next/01-core/csf-thinking-framework.md +1 -1
- package/.aodw-next/02-workflow/rt-manager.md +22 -1
- package/.aodw-next/02-workflow/ui-workflow-rules.md +0 -3
- package/.aodw-next/README.md +0 -1
- package/.aodw-next/SKILL.md +5 -5
- package/.aodw-next/manifest.yaml +0 -5
- package/AODW_Adapters/README.md +24 -31
- package/README.md +53 -6
- package/bin/aodw.js +17 -186
- package/bin/commands/new.js +4 -120
- package/bin/processors/index.js +1 -35
- package/bin/update-adapters-from-template.js +1 -15
- package/package.json +4 -4
- package/.aodw-next/01-core/ai-interaction-rules-summary.md +0 -37
- package/.aodw-next/01-core/ai-knowledge-rules-summary.md +0 -25
- package/.aodw-next/01-core/git-discipline-summary.md +0 -36
- package/.aodw-next/02-workflow/rt-id-generation-rules.md +0 -24
- package/.aodw-next/02-workflow/rt-manager-summary.md +0 -15
- package/.aodw-next/02-workflow/ui-workflow-rules-summary.md +0 -39
- package/.aodw-next/03-standards/stacks/rust-axum/ai-coding-rules-backend.md +0 -134
- package/.aodw-next/06-project/README.md +0 -16
- package/.aodw-next/07-optimization/token-usage-analysis.md +0 -253
- package/.aodw-next/templates/TEMPLATE-APPLICATION-GUIDE.md +0 -110
- package/.aodw-next/templates/audit-report-template.md +0 -232
- package/.aodw-next/templates/changelog-template.md +0 -16
- package/.aodw-next/templates/checklists/coding-standards-template.md +0 -130
- package/.aodw-next/templates/csf-review-template.md +0 -201
- package/.aodw-next/templates/impact-template.md +0 -17
- package/.aodw-next/templates/invariants-template.md +0 -12
- package/.aodw-next/templates/plan-lite-template.md +0 -20
- package/.aodw-next/templates/rt-decision-template.md +0 -13
- package/.aodw-next/templates/rt-intake-template.md +0 -33
- package/.aodw-next/templates/spec-lite-template.md +0 -26
- package/.aodw-next/templates/tests-template.md +0 -13
- package/.aodw-next/templates/tools-config/README.md +0 -112
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-check.md +0 -7
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-done.md +0 -7
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-full.md +0 -7
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-governance.md +0 -7
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-impact.md +0 -7
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-init.md +0 -7
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-invariants.md +0 -7
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-lite.md +0 -7
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-module.md +0 -7
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-new.md +0 -7
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-open.md +0 -7
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-pause.md +0 -7
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-resume.md +0 -7
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-tests.md +0 -7
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw-upgrade.md +0 -7
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/.agent/rules/aodw.md +0 -35
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-check.md +0 -16
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-done.md +0 -16
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-full.md +0 -14
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-governance.md +0 -13
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-impact.md +0 -13
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-init.md +0 -13
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-invariants.md +0 -13
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-lite.md +0 -14
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-module.md +0 -13
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-new.md +0 -30
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-open.md +0 -10
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-pause.md +0 -12
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-resume.md +0 -12
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-tests.md +0 -13
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw-upgrade.md +0 -12
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/antigravity/global_workflows/aodw.md +0 -18
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/claude/CLAUDE.md +0 -17
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-check.md +0 -30
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-done.md +0 -52
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-full.md +0 -31
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-governance.md +0 -34
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-impact.md +0 -25
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-init.md +0 -75
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-invariants.md +0 -29
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-lite.md +0 -23
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-module.md +0 -24
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-new.md +0 -70
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-open.md +0 -19
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-pause.md +0 -19
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-resume.md +0 -20
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-tests.md +0 -26
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw-upgrade.md +0 -27
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/aodw.md +0 -69
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/deploypromote.md +0 -20
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/commands/featuretotester.md +0 -32
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/deploy/feature_to_master_push_test_local.sh +0 -390
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/deploy/promote_only.sh +0 -210
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/deploy/rollback_prod.sh +0 -99
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/cursor/.cursor/rules/aodw.mdc +0 -26
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-check.md +0 -29
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-done.md +0 -52
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-full.md +0 -30
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-governance.md +0 -33
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-impact.md +0 -24
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-init.md +0 -75
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-invariants.md +0 -28
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-lite.md +0 -22
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-module.md +0 -23
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-new.md +0 -92
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-open.md +0 -18
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-pause.md +0 -18
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-resume.md +0 -19
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-tests.md +0 -25
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw-upgrade.md +0 -26
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/.agent/rules/aodw.md +0 -68
- package/AODW_Adapters/_backup/v3.1.0-pre-refactor/gemini/GEMINI.md +0 -17
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-analyze.md +0 -15
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-complete.md +0 -15
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-control.md +0 -14
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-decide.md +0 -16
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-governance.md +0 -7
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-implement.md +0 -16
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-init.md +0 -7
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-intake.md +0 -15
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-open.md +0 -7
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-simplified.md +0 -107
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/.agent/rules/aodw-verify.md +0 -14
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-analyze.md +0 -24
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-complete.md +0 -23
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-control.md +0 -21
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-decide.md +0 -26
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-governance.md +0 -13
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-implement.md +0 -21
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-init.md +0 -13
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-intake.md +0 -28
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-open.md +0 -10
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw-verify.md +0 -20
- package/AODW_Adapters/_backup/v4.0.0-simplified/antigravity/global_workflows/aodw.md +0 -18
- package/AODW_Adapters/gemini/.agent/rules/aodw-next.md +0 -70
- package/AODW_Adapters/gemini/GEMINI.md +0 -18
- package/AODW_Adapters/general/.github/copilot-instructions.md +0 -34
- package/AODW_Adapters/general/AGENTS.md +0 -70
- package/docs/README.md +0 -26
- package/docs/adapter-evaluation.md +0 -55
- package/docs/backend-guidelines.md +0 -335
- package/docs/frontend-guidelines.md +0 -266
- package/docs/installation-variants.md +0 -88
- package/docs/migration-guide-0.2.0.md +0 -250
- package/docs/platform-matrix.md +0 -83
package/bin/commands/new.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import fs from 'fs-extra';
|
|
2
2
|
import path from 'path';
|
|
3
|
-
import http from 'http';
|
|
4
|
-
import https from 'https';
|
|
5
|
-
import { URL } from 'url';
|
|
6
3
|
import inquirer from 'inquirer';
|
|
7
4
|
import chalk from 'chalk';
|
|
8
|
-
import { getProjectConfig
|
|
5
|
+
import { getProjectConfig } from '../utils/config.js';
|
|
9
6
|
|
|
10
7
|
function getProjectName() {
|
|
11
8
|
// 1. Try .aodw/project.yaml
|
|
@@ -25,35 +22,6 @@ function getProjectName() {
|
|
|
25
22
|
return path.basename(process.cwd());
|
|
26
23
|
}
|
|
27
24
|
|
|
28
|
-
function fetchIdFromServer(serverUrl, project) {
|
|
29
|
-
return new Promise((resolve, reject) => {
|
|
30
|
-
const url = new URL('/api/next-id', serverUrl);
|
|
31
|
-
url.searchParams.set('project', project);
|
|
32
|
-
|
|
33
|
-
const client = url.protocol === 'https:' ? https : http;
|
|
34
|
-
|
|
35
|
-
const req = client.get(url.toString(), (res) => {
|
|
36
|
-
if (res.statusCode !== 200) {
|
|
37
|
-
reject(new Error(`Server returned status ${res.statusCode}`));
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
let data = '';
|
|
42
|
-
res.on('data', (chunk) => data += chunk);
|
|
43
|
-
res.on('end', () => {
|
|
44
|
-
try {
|
|
45
|
-
const json = JSON.parse(data);
|
|
46
|
-
resolve(json.id);
|
|
47
|
-
} catch (e) {
|
|
48
|
-
reject(e);
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
req.on('error', (e) => reject(e));
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
|
|
57
25
|
function getLocalMaxSeq() {
|
|
58
26
|
const rtDir = path.join(process.cwd(), 'RT');
|
|
59
27
|
if (!fs.existsSync(rtDir)) return 0;
|
|
@@ -77,34 +45,7 @@ function getLocalNextId() {
|
|
|
77
45
|
return `RT-${String(maxSeq + 1).padStart(3, '0')}`;
|
|
78
46
|
}
|
|
79
47
|
|
|
80
|
-
function syncIdToServer(serverUrl, project, seq) {
|
|
81
|
-
return new Promise((resolve, reject) => {
|
|
82
|
-
const url = new URL('/api/sync-id', serverUrl);
|
|
83
|
-
url.searchParams.set('project', project);
|
|
84
|
-
url.searchParams.set('seq', seq.toString());
|
|
85
|
-
|
|
86
|
-
const client = url.protocol === 'https:' ? https : http;
|
|
87
|
-
|
|
88
|
-
const req = client.request(url.toString(), { method: 'POST' }, (res) => {
|
|
89
|
-
if (res.statusCode === 200) {
|
|
90
|
-
resolve(true);
|
|
91
|
-
} else {
|
|
92
|
-
reject(new Error(`Server returned status ${res.statusCode}`));
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
req.on('error', (e) => reject(e));
|
|
97
|
-
req.end();
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
|
|
102
48
|
export async function createNewRT(options) {
|
|
103
|
-
const userConfig = getUserConfig();
|
|
104
|
-
|
|
105
|
-
// Determine Server URL: Flag > Config > Env Var
|
|
106
|
-
const serverUrl = options.server || userConfig.server_url || process.env.AODW_ID_SERVER;
|
|
107
|
-
|
|
108
49
|
// Determine Project Name: Flag > Config/Package/Dir
|
|
109
50
|
const project = options.project || getProjectName();
|
|
110
51
|
|
|
@@ -120,66 +61,9 @@ export async function createNewRT(options) {
|
|
|
120
61
|
title = answers.title;
|
|
121
62
|
}
|
|
122
63
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
if (isCollaborativeMode) {
|
|
128
|
-
// In collaborative mode, server URL is required
|
|
129
|
-
if (!serverUrl || serverUrl.trim() === '') {
|
|
130
|
-
console.error(chalk.red('Error: Collaborative mode requires a server URL.'));
|
|
131
|
-
console.error(chalk.yellow('Please configure the server URL by running: aodw config'));
|
|
132
|
-
console.error(chalk.yellow('Or set the AODW_ID_SERVER environment variable.'));
|
|
133
|
-
process.exit(1);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
try {
|
|
137
|
-
console.log(chalk.blue(`Fetching ID from server (${serverUrl})...`));
|
|
138
|
-
const serverId = await fetchIdFromServer(serverUrl, project);
|
|
139
|
-
const serverSeq = parseInt(serverId.replace('RT-', ''), 10);
|
|
140
|
-
|
|
141
|
-
// Get local max ID and compare
|
|
142
|
-
const localMaxSeq = getLocalMaxSeq();
|
|
143
|
-
|
|
144
|
-
if (serverSeq <= localMaxSeq) {
|
|
145
|
-
// Server ID is outdated, use local max + 1
|
|
146
|
-
const finalSeq = localMaxSeq + 1;
|
|
147
|
-
id = `RT-${String(finalSeq).padStart(3, '0')}`;
|
|
148
|
-
console.log(chalk.yellow(`⚠ Server ID (${serverId}) ≤ local max (RT-${String(localMaxSeq).padStart(3, '0')})`));
|
|
149
|
-
console.log(chalk.green(`Using local ID: ${id}`));
|
|
150
|
-
|
|
151
|
-
// Sync to server
|
|
152
|
-
try {
|
|
153
|
-
await syncIdToServer(serverUrl, project, finalSeq);
|
|
154
|
-
console.log(chalk.blue(`✔ Synced ID to server: ${id}`));
|
|
155
|
-
} catch (syncErr) {
|
|
156
|
-
console.warn(chalk.yellow(`⚠ Failed to sync ID to server: ${syncErr.message}`));
|
|
157
|
-
console.warn(chalk.yellow(' The server may not support sync-id API, but RT creation will continue.'));
|
|
158
|
-
}
|
|
159
|
-
} else {
|
|
160
|
-
id = serverId;
|
|
161
|
-
console.log(chalk.green(`Obtained ID: ${id}`));
|
|
162
|
-
}
|
|
163
|
-
} catch (e) {
|
|
164
|
-
console.error(chalk.red(`Failed to fetch ID from server: ${e.message}`));
|
|
165
|
-
const { useLocal } = await inquirer.prompt([{
|
|
166
|
-
type: 'confirm',
|
|
167
|
-
name: 'useLocal',
|
|
168
|
-
message: 'Do you want to fall back to local ID generation? (Warning: Risk of collision)',
|
|
169
|
-
default: false
|
|
170
|
-
}]);
|
|
171
|
-
if (!useLocal) process.exit(1);
|
|
172
|
-
id = getLocalNextId();
|
|
173
|
-
}
|
|
174
|
-
} else {
|
|
175
|
-
// Independent mode: always use local generation, ignore server_url
|
|
176
|
-
// This ensures that when user chooses independent mode, no network request is made
|
|
177
|
-
id = getLocalNextId();
|
|
178
|
-
console.log(chalk.yellow(`Using local ID generation: ${id}`));
|
|
179
|
-
if (serverUrl) {
|
|
180
|
-
console.log(chalk.gray(`Note: server_url is configured but ignored in independent mode`));
|
|
181
|
-
}
|
|
182
|
-
}
|
|
64
|
+
// 固定独立模式:始终本地生成 RT-ID
|
|
65
|
+
const id = getLocalNextId();
|
|
66
|
+
console.log(chalk.yellow(`Using local ID generation: ${id}`));
|
|
183
67
|
|
|
184
68
|
// Create Directory
|
|
185
69
|
const rtPath = path.join(process.cwd(), 'RT', id);
|
package/bin/processors/index.js
CHANGED
|
@@ -61,7 +61,7 @@ export class CursorProcessor extends BaseProcessor {
|
|
|
61
61
|
let processed = content.replace(/\{\{REF_PREFIX\}\}/g, '@');
|
|
62
62
|
// Replace AODW_DIR placeholder (Next version - fixed to .aodw-next)
|
|
63
63
|
processed = processed.replace(/\{\{AODW_DIR\}\}/g, '.aodw-next');
|
|
64
|
-
|
|
64
|
+
|
|
65
65
|
// For Rules (.mdc): Inject globs and alwaysApply
|
|
66
66
|
if (this.targetPath.endsWith('.mdc')) {
|
|
67
67
|
processed = this.injectFrontmatter(processed, 'globs', '*');
|
|
@@ -73,18 +73,6 @@ export class CursorProcessor extends BaseProcessor {
|
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
export class CopilotProcessor extends BaseProcessor {
|
|
77
|
-
transform(content) {
|
|
78
|
-
// For Prompts: Inject model and mode
|
|
79
|
-
if (this.targetPath.endsWith('.prompt.md')) {
|
|
80
|
-
let newContent = this.injectFrontmatter(content, 'model', 'gpt-4o');
|
|
81
|
-
newContent = this.injectFrontmatter(newContent, 'mode', 'chat');
|
|
82
|
-
return newContent;
|
|
83
|
-
}
|
|
84
|
-
return content;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
76
|
export class ClaudeProcessor extends BaseProcessor {
|
|
89
77
|
transform(content) {
|
|
90
78
|
// Replace template placeholders: empty for Claude
|
|
@@ -95,25 +83,3 @@ export class ClaudeProcessor extends BaseProcessor {
|
|
|
95
83
|
return processed;
|
|
96
84
|
}
|
|
97
85
|
}
|
|
98
|
-
|
|
99
|
-
export class GeminiProcessor extends BaseProcessor {
|
|
100
|
-
transform(content) {
|
|
101
|
-
// Replace template placeholders: empty for Gemini
|
|
102
|
-
let processed = content.replace(/\{\{REF_PREFIX\}\}/g, '');
|
|
103
|
-
// Replace AODW_DIR placeholder (Next version - fixed to .aodw-next)
|
|
104
|
-
processed = processed.replace(/\{\{AODW_DIR\}\}/g, '.aodw-next');
|
|
105
|
-
// Gemini uses standard markdown, no frontmatter needed
|
|
106
|
-
return processed;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
export class GeneralProcessor extends BaseProcessor {
|
|
111
|
-
transform(content) {
|
|
112
|
-
// Replace template placeholders: empty for General
|
|
113
|
-
let processed = content.replace(/\{\{REF_PREFIX\}\}/g, '');
|
|
114
|
-
// Replace AODW_DIR placeholder (Next version - fixed to .aodw-next)
|
|
115
|
-
processed = processed.replace(/\{\{AODW_DIR\}\}/g, '.aodw-next');
|
|
116
|
-
// General uses standard markdown, no frontmatter needed
|
|
117
|
-
return processed;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
@@ -16,9 +16,7 @@ import { fileURLToPath } from 'url';
|
|
|
16
16
|
import {
|
|
17
17
|
AntigravityProcessor,
|
|
18
18
|
CursorProcessor,
|
|
19
|
-
ClaudeProcessor
|
|
20
|
-
GeminiProcessor,
|
|
21
|
-
GeneralProcessor
|
|
19
|
+
ClaudeProcessor
|
|
22
20
|
} from './processors/index.js';
|
|
23
21
|
|
|
24
22
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
@@ -66,18 +64,6 @@ async function updateAdapters() {
|
|
|
66
64
|
await fs.ensureDir(path.dirname(claudeTarget));
|
|
67
65
|
await installFile(SOURCE_TEMPLATE, claudeTarget, ClaudeProcessor);
|
|
68
66
|
|
|
69
|
-
// Gemini
|
|
70
|
-
console.log('\n📦 Updating Gemini adapter...');
|
|
71
|
-
const geminiTarget = path.join(TARGET_ADAPTERS, 'gemini/.agent/rules/aodw-next.md');
|
|
72
|
-
await fs.ensureDir(path.dirname(geminiTarget));
|
|
73
|
-
await installFile(SOURCE_TEMPLATE, geminiTarget, GeminiProcessor);
|
|
74
|
-
|
|
75
|
-
// General
|
|
76
|
-
console.log('\n📦 Updating General adapter...');
|
|
77
|
-
const generalTarget = path.join(TARGET_ADAPTERS, 'general/AGENTS.md');
|
|
78
|
-
await fs.ensureDir(path.dirname(generalTarget));
|
|
79
|
-
await installFile(SOURCE_TEMPLATE, generalTarget, GeneralProcessor);
|
|
80
|
-
|
|
81
67
|
console.log('\n✅ All adapters updated successfully!');
|
|
82
68
|
console.log('\n📝 Note: These files are fallback files for CLI installation.');
|
|
83
69
|
console.log(' CLI will use the template directly if available.');
|
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aodw-skill",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.19",
|
|
4
4
|
"description": "Next-channel CLI tool to scaffold AODW in your project",
|
|
5
5
|
"main": "bin/aodw.js",
|
|
6
6
|
"files": [
|
|
7
7
|
"bin/",
|
|
8
8
|
".aodw-next/",
|
|
9
|
-
"AODW_Adapters/"
|
|
10
|
-
"docs/"
|
|
9
|
+
"AODW_Adapters/"
|
|
11
10
|
],
|
|
12
11
|
"bin": {
|
|
13
12
|
"aodw-skill": "bin/aodw.js"
|
|
14
13
|
},
|
|
15
14
|
"scripts": {
|
|
16
|
-
"test": "echo \"Error: no test specified\" && exit 1"
|
|
15
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
16
|
+
"pack:check": "npm pack --dry-run"
|
|
17
17
|
},
|
|
18
18
|
"keywords": [
|
|
19
19
|
"aodw",
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# AI 交互规则摘要
|
|
2
|
-
|
|
3
|
-
## 0. UI 任务判断(前置)
|
|
4
|
-
|
|
5
|
-
涉及页面/界面/布局/组件/表单/Dashboard/交互体验 → 视为 UI 任务,进入 UI 专用流程(详见 `.aodw-next/02-workflow/ui-workflow-rules.md`)。
|
|
6
|
-
|
|
7
|
-
## 1. 提问类型
|
|
8
|
-
|
|
9
|
-
- **决策型**:必须提供选项 + 推荐 + 理由,支持 custom 回答
|
|
10
|
-
- **信息型**:必须提供示例答案,限制 ≤10 词
|
|
11
|
-
|
|
12
|
-
## 2. 格式规范
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
Q1. <问题>
|
|
16
|
-
A. <选项1> B. <选项2> C. <选项3>
|
|
17
|
-
Recommended: B(理由:……)
|
|
18
|
-
请回复:A/B/C 或 custom:<答案>
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## 3. 每轮限制
|
|
22
|
-
|
|
23
|
-
- 单轮最多 5 个问题,建议 ≤3 个
|
|
24
|
-
- 必须 Ask → Wait → Respond → Continue,不得连续提问
|
|
25
|
-
|
|
26
|
-
## 4. 中断与暂停
|
|
27
|
-
|
|
28
|
-
- 用户说"暂停" → 立即停止,切换普通模式
|
|
29
|
-
- 用户说"继续 AODW" → 恢复流程
|
|
30
|
-
|
|
31
|
-
## 5. 实现前门槛(四要素)
|
|
32
|
-
|
|
33
|
-
编码前必须满足:假设已声明 / 歧义已处理 / 成功标准已定义 / 最小方案已确认。缺一不可。
|
|
34
|
-
|
|
35
|
-
## 6. 分支验证
|
|
36
|
-
|
|
37
|
-
任何代码修改前必须 `git branch --show-current`,在 main/master 上**立即停止**。
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# AI 知识规则摘要
|
|
2
|
-
|
|
3
|
-
## 1. 文档分类
|
|
4
|
-
|
|
5
|
-
- **Spec 文档**:spec.md / rt-lite.md(需求定义)
|
|
6
|
-
- **Plan 文档**:plan.md / rt-lite.md §2(实现方案)
|
|
7
|
-
- **过程文档**:impact.md / invariants.md / tests.md / changelog.md
|
|
8
|
-
- **知识文档**:模块 README / modules-index.yaml
|
|
9
|
-
|
|
10
|
-
## 2. Spec-Lite 的 rt-lite.md
|
|
11
|
-
|
|
12
|
-
不再创建独立的 spec-lite.md 和 plan-lite.md,全部整合在 rt-lite.md 中。
|
|
13
|
-
|
|
14
|
-
## 3. 文档同步原则
|
|
15
|
-
|
|
16
|
-
- 代码改动后必须同步更新相关文档
|
|
17
|
-
- 文档与代码不一致视为 Bug
|
|
18
|
-
- RT 完成前必须执行知识蒸馏(更新模块文档和 modules-index.yaml)
|
|
19
|
-
|
|
20
|
-
## 4. 知识蒸馏(RT 完成前提)
|
|
21
|
-
|
|
22
|
-
合并前必须:
|
|
23
|
-
1. 读取 modules-index.yaml 找到受影响模块
|
|
24
|
-
2. 更新对应模块 README
|
|
25
|
-
3. 确认文档反映最新代码状态
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# Git Discipline 摘要
|
|
2
|
-
|
|
3
|
-
## 0. 确认门控
|
|
4
|
-
|
|
5
|
-
AI 可执行所有 Git 操作,但不可逆操作(commit / merge / push / tag / worktree add-remove / branch delete)执行前**必须向用户确认**。
|
|
6
|
-
|
|
7
|
-
无需确认:读取文件、git log/status/diff、创建/切换分支。
|
|
8
|
-
|
|
9
|
-
## 1. 分支命名
|
|
10
|
-
|
|
11
|
-
格式:`feature/RT-{seq}-{short-name}`(kebab-case,2-4 词)
|
|
12
|
-
示例:`feature/RT-001-login-fix`
|
|
13
|
-
|
|
14
|
-
## 2. Worktree
|
|
15
|
-
|
|
16
|
-
一个 RT = 一个 Worktree = 一个 Feature 分支。
|
|
17
|
-
- 创建:Decision 阶段 `git worktree add ../Project-RT-XXX feature/RT-XXX-name`
|
|
18
|
-
- 清理:RT 完成合并后删除
|
|
19
|
-
|
|
20
|
-
## 3. 提交信息
|
|
21
|
-
|
|
22
|
-
格式:`<type>(<scope>): <subject>` + `Refs: RT-XXX`
|
|
23
|
-
示例:`fix(auth): handle token expiration — Refs: RT-001`
|
|
24
|
-
|
|
25
|
-
## 4. 标签
|
|
26
|
-
|
|
27
|
-
完成后打标签:`done-RT-XXX`
|
|
28
|
-
|
|
29
|
-
## 5. 合并
|
|
30
|
-
|
|
31
|
-
- 禁止 fast-forward,使用 `--no-ff`
|
|
32
|
-
- 合并前必须通过 lint + test + 编码规范检查
|
|
33
|
-
|
|
34
|
-
## 6. 完成流程
|
|
35
|
-
|
|
36
|
-
知识蒸馏 → 确认合并 → 确认清理 → 播报完成
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# RT-ID 生成规则(本地模式)
|
|
2
|
-
|
|
3
|
-
## 0. 强制策略
|
|
4
|
-
|
|
5
|
-
AODW 使用**本地生成 RT-ID**,不依赖远程服务。
|
|
6
|
-
|
|
7
|
-
## 1. 生成逻辑
|
|
8
|
-
|
|
9
|
-
1. 扫描项目 `RT/` 目录下所有 `RT-XXX` 格式的目录
|
|
10
|
-
2. 找到最大序号 `N`
|
|
11
|
-
3. 生成新 ID:`RT-{N+1}`(补零到 3 位,如 `RT-001`, `RT-002`)
|
|
12
|
-
4. 如果生成的 ID 对应的目录已存在:递增序号直到找到可用 ID
|
|
13
|
-
|
|
14
|
-
## 2. 检查清单
|
|
15
|
-
|
|
16
|
-
- [ ] 已扫描 `RT/` 目录找到最大序号
|
|
17
|
-
- [ ] 已生成 `RT-{N+1}` 格式的 ID
|
|
18
|
-
- [ ] 已确认该 ID 对应的目录不存在
|
|
19
|
-
|
|
20
|
-
## 3. 格式规范
|
|
21
|
-
|
|
22
|
-
- 格式:`RT-XXX`(3 位数字,左侧补零)
|
|
23
|
-
- 示例:`RT-001`, `RT-042`, `RT-123`
|
|
24
|
-
- 目录:`RT/RT-XXX/`
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# RT-Manager Summary
|
|
2
|
-
|
|
3
|
-
## 主要职责
|
|
4
|
-
- RT 编号、目录、分支管理
|
|
5
|
-
- Intake 流程与 Spec-Full/Spec-Lite 分流
|
|
6
|
-
- 状态机维护:created → intaking → decided → in-progress → reviewing → done
|
|
7
|
-
|
|
8
|
-
## 强制前置检查
|
|
9
|
-
- 必须在 feature 分支上工作
|
|
10
|
-
- 未切分支不得修改业务代码
|
|
11
|
-
|
|
12
|
-
## 核心门禁
|
|
13
|
-
- decided → in-progress 前必须具备 spec/plan
|
|
14
|
-
- Plan 完成后必须等待用户确认
|
|
15
|
-
- 提交前必须展示 diff 与 status
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# UI Workflow Rules (Summary)
|
|
2
|
-
|
|
3
|
-
> **注意**:这是 UI 工作流规则的摘要版本,包含核心检查点和流程。
|
|
4
|
-
> 完整版本请阅读:`02-workflow/ui-workflow-rules.md`
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## 核心检查点
|
|
9
|
-
|
|
10
|
-
### UI 任务必须
|
|
11
|
-
- 用户确认后再执行
|
|
12
|
-
- 明确任务范围和验收标准
|
|
13
|
-
- 记录关键决策和理由
|
|
14
|
-
|
|
15
|
-
### 代码规范
|
|
16
|
-
- 遵循 `03-standards/stacks/` 中的 UI 规范
|
|
17
|
-
- 使用对应的 UI Kit 组件
|
|
18
|
-
- 遵循无障碍设计原则
|
|
19
|
-
|
|
20
|
-
### Git 规范
|
|
21
|
-
- 遵循 `01-core/git-discipline.md`
|
|
22
|
-
- UI 任务使用 feature 分支
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## 快速参考
|
|
27
|
-
|
|
28
|
-
| 阶段 | 检查点 | 相关规范 |
|
|
29
|
-
|-------|---------|---------|
|
|
30
|
-
| 立项 | 明确范围、确认验收标准 | 01-core/ai-interaction-rules |
|
|
31
|
-
| 设计 | 组件选择、设计稿评审 | 01-core/ai-interaction-rules |
|
|
32
|
-
| 实现 | 代码规范、UI Kit 使用 | 03-standards/stacks/ |
|
|
33
|
-
| 验证 | 用户确认、无障碍检查 | 01-core/ai-interaction-rules |
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## 需要详细信息时
|
|
38
|
-
|
|
39
|
-
请阅读完整版:`02-workflow/ui-workflow-rules.md`
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
# AI Coding Rules - Backend Development (Rust)
|
|
2
|
-
|
|
3
|
-
> **注意**:本文件是 `.aodw-next/03-standards/ai-coding-rules.md` 的子规范文件。
|
|
4
|
-
> 请先阅读主文件了解通用编码原则。
|
|
5
|
-
|
|
6
|
-
**适用场景**:
|
|
7
|
-
- 后端开发(Rust + Axum + SQLx)
|
|
8
|
-
- 命令行工具开发
|
|
9
|
-
- 高性能组件开发
|
|
10
|
-
|
|
11
|
-
**依赖规范**:
|
|
12
|
-
- [Rust API Guidelines](https://rust-lang.github.io/api-guidelines/)
|
|
13
|
-
- [Effective Rust](https://www.lurklurk.org/effective-rust/)
|
|
14
|
-
|
|
15
|
-
## 1. 核心原则 (Core Principals)
|
|
16
|
-
|
|
17
|
-
### 1.1 稳定性优先 (Stability First)
|
|
18
|
-
- **绝对禁止在业务逻辑中使用 `unwrap()` 或 `expect()`**。
|
|
19
|
-
- 仅允许在 `tests/`, `examples/`, 或 `bin/` 的初始化阶段(无法恢复的启动错误)使用。
|
|
20
|
-
- 业务代码必须使用 `match`, `if let`, 或 `?` 传播 `Result`。
|
|
21
|
-
- **避免 Panic**:任何可能 Panic 的操作(如数组索引 `arr[i]`)都应使用安全版本(如 `arr.get(i)`)。
|
|
22
|
-
|
|
23
|
-
### 1.2 错误处理 (Error Handling)
|
|
24
|
-
- 使用 `thiserror` 定义库/模块级别的错误枚举。
|
|
25
|
-
- 使用 `anyhow` 处理顶层应用(Application)的错误传播。
|
|
26
|
-
- **Axum Handler** 必须返回实现了 `IntoResponse` 的 Result 类型(通常自定义 `AppError`)。
|
|
27
|
-
|
|
28
|
-
### 1.3 异步规范 (Async)
|
|
29
|
-
- 避免在异步上下文中执行阻塞操作(如标准 `std::fs` 或大量 CPU 计算)。
|
|
30
|
-
- 使用 `tokio::fs` 替代 `std::fs`。
|
|
31
|
-
- 长时间计算任务使用 `tokio::task::spawn_blocking`。
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## 2. 代码风格与命名 (Style & Naming)
|
|
36
|
-
|
|
37
|
-
遵循 `rustfmt` 默认配置。
|
|
38
|
-
|
|
39
|
-
- **Types (Structs, Enums, Traits)**: `PascalCase`
|
|
40
|
-
- **Functions, Methods, Variables, Modules**: `snake_case`
|
|
41
|
-
- **Constants, Statics**: `SCREAMING_SNAKE_CASE`
|
|
42
|
-
- **File Names**: `snake_case.rs`
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
## 3. 目录结构规范 (Directory Structure)
|
|
47
|
-
|
|
48
|
-
```
|
|
49
|
-
backend/
|
|
50
|
-
src/
|
|
51
|
-
bin/ # 独立可执行文件(工具脚本)
|
|
52
|
-
routes/ # Axum 路由处理函数 (Handlers)
|
|
53
|
-
mod.rs # 路由注册
|
|
54
|
-
users.rs # 用户模块路由
|
|
55
|
-
models/ # 数据模型 (Structs) & DB 映射
|
|
56
|
-
services/ # 业务逻辑层 (可选,复杂逻辑从 routes 剥离)
|
|
57
|
-
utils/ # 通用工具函数
|
|
58
|
-
main.rs # 应用入口,仅包含启动配置
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
- **Routes**: 负责 HTTP 解析、参数校验、调用 Service/Model、返回响应。
|
|
62
|
-
- **Services/Models**: 负责核心业务逻辑和数据持久化,不应依赖 HTTP 层细节。
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## 4. 最佳实践 (Best Practices)
|
|
67
|
-
|
|
68
|
-
### 4.1 SQLx 使用
|
|
69
|
-
- 优先使用 `sqlx::query_as!` 宏进行编译时 SQL 检查。
|
|
70
|
-
- 如果必须使用动态 SQL,确保使用参数化查询 (`bind`) 防止注入。
|
|
71
|
-
- 数据库模型 Struct 字段应与 DB 列名一致,或使用 `#[sqlx(rename = "...")]`。
|
|
72
|
-
|
|
73
|
-
### 4.2 Axum Handler
|
|
74
|
-
- 保持 Handler 瘦身:如果逻辑超过 50 行,考虑提取到 Service 层或独立函数。
|
|
75
|
-
- 使用 `State` 抽取共享状态(如 DB Pool)。
|
|
76
|
-
|
|
77
|
-
### 4.3 日志 (Logging)
|
|
78
|
-
- 使用 `tracing` 而非 `println!`。
|
|
79
|
-
- 关键业务路径必须有 `info!` 日志。
|
|
80
|
-
- 错误分支必须有 `error!` 日志,包含上下文信息。
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
## 5. 工具链配置 (Tooling)
|
|
85
|
-
|
|
86
|
-
所有 Rust 项目必须包含以下配置:
|
|
87
|
-
|
|
88
|
-
### 5.1 工具初始化(必须)
|
|
89
|
-
|
|
90
|
-
在开始开发前,必须运行工具初始化:
|
|
91
|
-
- 通过 AI 命令:"初始化工具" 或 "设置开发工具"
|
|
92
|
-
- 通过 CLI 命令:`aodw-skill init-tools`
|
|
93
|
-
|
|
94
|
-
工具初始化会自动:
|
|
95
|
-
- 检测 rustfmt、clippy、cargo 是否已安装
|
|
96
|
-
- 从模板生成 `rustfmt.toml` 和 `clippy.toml` 配置文件
|
|
97
|
-
- 配置 pre-commit hooks(如果使用)
|
|
98
|
-
|
|
99
|
-
### 5.2 配置文件
|
|
100
|
-
|
|
101
|
-
**rustfmt.toml**(从模板生成):
|
|
102
|
-
- 模板位置:`.aodw-next/templates/tools-config/backend/rustfmt.config.template.toml`
|
|
103
|
-
- 生成位置:项目根目录 `rustfmt.toml`
|
|
104
|
-
- 主要配置:
|
|
105
|
-
```toml
|
|
106
|
-
edition = "2021"
|
|
107
|
-
max_width = 100
|
|
108
|
-
use_small_heuristics = "Max"
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
**clippy.toml**(从模板生成):
|
|
112
|
-
- 模板位置:`.aodw-next/templates/tools-config/backend/clippy.config.template.toml`
|
|
113
|
-
- 生成位置:项目根目录 `clippy.toml` 或 `Cargo.toml` 的 `[lints.clippy]` 部分
|
|
114
|
-
- 主要配置:
|
|
115
|
-
- 零警告策略:`warn = "all"`, `deny = ["warnings"]`
|
|
116
|
-
- 复杂度限制:`cognitive-complexity-threshold = 15`(见模板 `clippy.config.template.toml`)
|
|
117
|
-
- 文件长度限制:`too_many_lines_threshold = 400`
|
|
118
|
-
|
|
119
|
-
### 5.3 提交前检查(必须)
|
|
120
|
-
|
|
121
|
-
所有代码提交前必须通过以下检查:
|
|
122
|
-
- `cargo fmt -- --check`(代码格式化检查)
|
|
123
|
-
- `cargo clippy -- -D warnings`(零警告策略)
|
|
124
|
-
- `cargo test`(单元测试)
|
|
125
|
-
|
|
126
|
-
这些检查应配置在 pre-commit hooks 中,确保提交前自动执行。
|
|
127
|
-
|
|
128
|
-
---
|
|
129
|
-
|
|
130
|
-
## 6. 代码质量指标 (Metrics)
|
|
131
|
-
|
|
132
|
-
- **函数长度**: 软限制 60 行。超过则拆分。
|
|
133
|
-
- **文件长度**: 软限制 400 行。
|
|
134
|
-
- **复杂度**: 单个函数 Cyclomatic Complexity < 15。
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# 06-project 目录
|
|
2
|
-
|
|
3
|
-
本目录用于存放项目级别的用户生成文件,初始为空。
|
|
4
|
-
|
|
5
|
-
## 文件说明
|
|
6
|
-
|
|
7
|
-
运行 `aodw-skill init-overview` 后,本目录会自动生成以下文件:
|
|
8
|
-
|
|
9
|
-
- `ai-overview.md` - 项目概览文档(技术栈、架构、模块职责等)
|
|
10
|
-
- `modules-index.yaml` - 模块索引文件(映射代码目录到模块文档)
|
|
11
|
-
|
|
12
|
-
## 注意事项
|
|
13
|
-
|
|
14
|
-
- 这些文件是**用户生成内容**,更新 AODW-Next 时会被保护,不会被覆盖
|
|
15
|
-
- 模板文件位于 `../templates/` 目录下
|
|
16
|
-
- AI 修改代码前会读取这些文件来理解项目结构
|