adspecs 0.1.19 → 0.1.21
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/.adspecs/feature.json +16 -16
- package/.adspecs/feature.yml +28 -28
- package/.adspecs/paths.json +17 -17
- package/.adspecs/templates/04-/345/211/215/347/253/257/345/212/237/350/203/275/350/256/276/350/256/241/346/250/241/346/235/277.md +1 -1
- package/.adspecs/templates/05-/345/220/216/347/253/257/344/273/273/345/212/241/346/270/205/345/215/225/346/250/241/346/235/277.md +613 -724
- package/.adspecs/templates/05b-/345/211/215/347/253/257/344/273/273/345/212/241/346/270/205/345/215/225/346/250/241/346/235/277.md +51 -51
- package/.claude-plugin/marketplace.json +23 -23
- package/.claude-plugin/plugin.json +18 -18
- package/.qoder-plugin/plugin.json +31 -31
- package/CLAUDE.md +1 -5
- package/INSTALL.md +3 -3
- package/README.md +395 -395
- package/bin/adspecs.js +129 -129
- package/hooks/commit-queue.js +245 -245
- package/hooks/hooks.json +63 -63
- package/hooks/session-start.js +44 -44
- package/hooks/wiki-queue.js +127 -127
- package/package.json +61 -61
- package/references/ant6-front-standard/index.md +99 -99
- package/references/antd-front-demo/public/mockServiceWorker.js +361 -361
- package/references/ecp-end-standard/index.md +63 -63
- package/references/python-end-standard/01-Python/345/220/216/347/253/257/347/274/226/347/240/201/350/247/204/350/214/203.md +372 -372
- package/references/python-end-standard/02-/346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/344/270/216/344/275/277/347/224/250/350/247/204/350/214/203.md +226 -226
- package/references/python-end-standard/03-Celery/345/274/202/346/255/245/344/273/273/345/212/241/350/247/204/350/214/203.md +237 -237
- package/references/python-end-standard/04-Redis/344/275/277/347/224/250/350/247/204/350/214/203.md +231 -231
- package/scripts/postinstall.js +107 -107
- package/scripts/sync-version.js +105 -105
- package/skills/.claude/.wiki-update-queue +26 -26
- package/skills/adspecs-constitution/SKILL.md +157 -0
- package/skills/adspecs-export-word/SKILL.md +498 -498
- package/skills/adspecs-export-word/references/md-to-docx.js +862 -862
- package/skills/adspecs-export-word/references/package-lock.json +220 -220
- package/skills/adspecs-export-word/references/package.json +10 -10
- package/skills/adspecs-front-prototype/SKILL.md +405 -405
- package/skills/adspecs-front-spec/SKILL.md +4 -4
- package/skills/adspecs-front-tasks/SKILL.md +213 -173
- package/skills/adspecs-plan/SKILL.md +59 -69
- package/skills/adspecs-prd/SKILL.md +13 -5
- package/skills/adspecs-prd-to-demo/SKILL.md +532 -0
- package/skills/adspecs-tasks/SKILL.md +175 -204
- package/skills/adspecs-update-status/SKILL.md +382 -382
- package/skills/adspecs-utest/SKILL.md +107 -116
- package/skills/grill-me/SKILL.md +7 -0
- package/skills/grill-me/agents/openai.yaml +5 -0
- package/skills/playwright-cli/SKILL.md +420 -0
- package/skills/playwright-cli/references/element-attributes.md +23 -0
- package/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/skills/playwright-cli/references/request-mocking.md +87 -0
- package/skills/playwright-cli/references/running-code.md +241 -0
- package/skills/playwright-cli/references/session-management.md +225 -0
- package/skills/playwright-cli/references/storage-state.md +275 -0
- package/skills/playwright-cli/references/test-generation.md +433 -0
- package/skills/playwright-cli/references/tracing.md +139 -0
- package/skills/playwright-cli/references/video-recording.md +143 -0
- package/skills/playwright-trace/SKILL.md +171 -0
- package/skills/project-init/SKILL.md +93 -22
- package/skills/project-init/references/front-demo/.claude/settings.local.json +9 -0
- package/skills/wiki-update/SKILL.md +232 -232
- package/src/commands/doctor.js +197 -197
- package/src/commands/init.js +83 -83
- package/src/commands/plugin.js +165 -165
- package/src/commands/update.js +87 -87
- package/src/lib/area-scanner.js +129 -129
- package/src/lib/copier.js +104 -104
- package/src/lib/dir-utils.js +161 -133
- package/src/lib/json-merge.js +114 -114
- package/src/lib/paths-defaults.js +37 -37
- package/src/lib/prompts.js +428 -347
- package/src/lib/readme-gen.js +143 -143
- package/src/lib/report.js +338 -327
- package/src/lib/scaffolder.js +551 -518
- package/src/lib/short-name.js +36 -36
- package/src/utils.js +80 -80
- package/references/antd-front-demo/.env +0 -15
package/bin/adspecs.js
CHANGED
|
@@ -1,129 +1,129 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
const { Command } = require('commander');
|
|
5
|
-
const path = require('path');
|
|
6
|
-
const fs = require('fs');
|
|
7
|
-
|
|
8
|
-
// 读取 package.json 获取版本号
|
|
9
|
-
const pkgPath = path.resolve(__dirname, '..', 'package.json');
|
|
10
|
-
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
11
|
-
|
|
12
|
-
const program = new Command();
|
|
13
|
-
|
|
14
|
-
program
|
|
15
|
-
.name('adspecs')
|
|
16
|
-
.description('adspecs — AI first 工程规范驱动开发 CLI')
|
|
17
|
-
.version(pkg.version, '-v, --version', '输出版本号');
|
|
18
|
-
|
|
19
|
-
// ============ init 命令 ============
|
|
20
|
-
program
|
|
21
|
-
.command('init')
|
|
22
|
-
.description('初始化项目目录结构(等价于 Claude Code 的 /project-init 技能)')
|
|
23
|
-
.option('--project-name <name>', '项目名称')
|
|
24
|
-
.option('--project-dir <dir>', '项目目录名(留空=当前目录)')
|
|
25
|
-
.option('--company <name>', '公司名称', 'XX有限公司')
|
|
26
|
-
.option('--confidentiality <level>', '文件密级: 公开|内部资料|机密|绝密', '内部资料')
|
|
27
|
-
.option('--mode <mode>', '初始化模式: simple|classic|full|demo')
|
|
28
|
-
.option('--front-demo <stack>', '前端演示技术栈: vue|antd', 'vue')
|
|
29
|
-
.option('--modules <list>', '后端模块列表(逗号分隔,格式 {port}-crm-{name}:{package})')
|
|
30
|
-
.option('--non-interactive', '非交互模式,所有未提供的参数使用默认值')
|
|
31
|
-
.option('--force', '跳过冲突决策,所有已存在区域直接重新创建')
|
|
32
|
-
.option('-y, --yes', '自动确认执行(跳过执行前确认步骤,但保留冲突决策提示)')
|
|
33
|
-
.action(async (options) => {
|
|
34
|
-
try {
|
|
35
|
-
const initCmd = require('../src/commands/init');
|
|
36
|
-
await initCmd(options);
|
|
37
|
-
} catch (err) {
|
|
38
|
-
console.error('❌ 初始化失败:', err.message);
|
|
39
|
-
if (process.env.DEBUG) console.error(err.stack);
|
|
40
|
-
process.exit(1);
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
// ============ plugin 命令组 ============
|
|
45
|
-
const pluginCmd = program
|
|
46
|
-
.command('plugin')
|
|
47
|
-
.description('Claude Code 插件管理');
|
|
48
|
-
|
|
49
|
-
pluginCmd
|
|
50
|
-
.command('install')
|
|
51
|
-
.description('注册当前 adspecs 为 Claude Code 插件')
|
|
52
|
-
.option('--scope <scope>', '安装范围: user|project', 'user')
|
|
53
|
-
.action(async (options) => {
|
|
54
|
-
try {
|
|
55
|
-
const pluginCmd = require('../src/commands/plugin');
|
|
56
|
-
await pluginCmd.install(options);
|
|
57
|
-
} catch (err) {
|
|
58
|
-
console.error('❌ 插件注册失败:', err.message);
|
|
59
|
-
if (process.env.DEBUG) console.error(err.stack);
|
|
60
|
-
process.exit(1);
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
pluginCmd
|
|
65
|
-
.command('uninstall')
|
|
66
|
-
.description('从 Claude Code 中卸载 adspecs 插件')
|
|
67
|
-
.option('--scope <scope>', '卸载范围: user|project', 'user')
|
|
68
|
-
.action(async (options) => {
|
|
69
|
-
try {
|
|
70
|
-
const pluginCmd = require('../src/commands/plugin');
|
|
71
|
-
await pluginCmd.uninstall(options);
|
|
72
|
-
} catch (err) {
|
|
73
|
-
console.error('❌ 插件卸载失败:', err.message);
|
|
74
|
-
if (process.env.DEBUG) console.error(err.stack);
|
|
75
|
-
process.exit(1);
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
// ============ doctor 命令 ============
|
|
80
|
-
program
|
|
81
|
-
.command('doctor')
|
|
82
|
-
.description('检查环境依赖(Node.js、git、Python、PowerShell 等)')
|
|
83
|
-
.action(async () => {
|
|
84
|
-
try {
|
|
85
|
-
const doctorCmd = require('../src/commands/doctor');
|
|
86
|
-
await doctorCmd();
|
|
87
|
-
} catch (err) {
|
|
88
|
-
console.error('❌ 环境检查失败:', err.message);
|
|
89
|
-
if (process.env.DEBUG) console.error(err.stack);
|
|
90
|
-
process.exit(1);
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
// ============ update 命令 ============
|
|
95
|
-
program
|
|
96
|
-
.command('update')
|
|
97
|
-
.description('升级 adspecs 到最新版本(等价于 npm install -g adspecs@latest)')
|
|
98
|
-
.option('--version <version>', '升级到指定版本(默认 latest)')
|
|
99
|
-
.action(async (options) => {
|
|
100
|
-
try {
|
|
101
|
-
const updateCmd = require('../src/commands/update');
|
|
102
|
-
await updateCmd(options);
|
|
103
|
-
} catch (err) {
|
|
104
|
-
console.error('❌ 升级失败:', err.message);
|
|
105
|
-
if (process.env.DEBUG) console.error(err.stack);
|
|
106
|
-
process.exit(1);
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
// ============ 帮助信息增强 ============
|
|
111
|
-
program.addHelpText('after', `
|
|
112
|
-
示例:
|
|
113
|
-
$ adspecs init # 交互式初始化
|
|
114
|
-
$ adspecs init --mode simple # 快速初始化(交互选择其余参数)
|
|
115
|
-
$ adspecs init --non-interactive # 完全非交互(使用默认值)
|
|
116
|
-
$ adspecs init --project-name "我的项目" --mode full --front-demo antd
|
|
117
|
-
$ adspecs plugin install # 注册为 Claude Code 插件(默认 user 范围)
|
|
118
|
-
$ adspecs plugin install --scope project # 仅注册到当前项目
|
|
119
|
-
$ adspecs plugin install --scope user # 注册到当前用户(全局可用)
|
|
120
|
-
$ adspecs plugin uninstall --scope project # 从当前项目卸载
|
|
121
|
-
$ adspecs doctor # 检查环境依赖
|
|
122
|
-
$ adspecs update # 升级到最新版本
|
|
123
|
-
$ adspecs update --version 0.2.0 # 升级到指定版本
|
|
124
|
-
|
|
125
|
-
文档:
|
|
126
|
-
https://gitee.com/yuebon/adspecs
|
|
127
|
-
`);
|
|
128
|
-
|
|
129
|
-
program.parse();
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const { Command } = require('commander');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
const fs = require('fs');
|
|
7
|
+
|
|
8
|
+
// 读取 package.json 获取版本号
|
|
9
|
+
const pkgPath = path.resolve(__dirname, '..', 'package.json');
|
|
10
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
11
|
+
|
|
12
|
+
const program = new Command();
|
|
13
|
+
|
|
14
|
+
program
|
|
15
|
+
.name('adspecs')
|
|
16
|
+
.description('adspecs — AI first 工程规范驱动开发 CLI')
|
|
17
|
+
.version(pkg.version, '-v, --version', '输出版本号');
|
|
18
|
+
|
|
19
|
+
// ============ init 命令 ============
|
|
20
|
+
program
|
|
21
|
+
.command('init')
|
|
22
|
+
.description('初始化项目目录结构(等价于 Claude Code 的 /project-init 技能)')
|
|
23
|
+
.option('--project-name <name>', '项目名称')
|
|
24
|
+
.option('--project-dir <dir>', '项目目录名(留空=当前目录)')
|
|
25
|
+
.option('--company <name>', '公司名称', 'XX有限公司')
|
|
26
|
+
.option('--confidentiality <level>', '文件密级: 公开|内部资料|机密|绝密', '内部资料')
|
|
27
|
+
.option('--mode <mode>', '初始化模式: simple|classic|full|demo')
|
|
28
|
+
.option('--front-demo <stack>', '前端演示技术栈: vue|antd', 'vue')
|
|
29
|
+
.option('--modules <list>', '后端模块列表(逗号分隔,格式 {port}-crm-{name}:{package})')
|
|
30
|
+
.option('--non-interactive', '非交互模式,所有未提供的参数使用默认值')
|
|
31
|
+
.option('--force', '跳过冲突决策,所有已存在区域直接重新创建')
|
|
32
|
+
.option('-y, --yes', '自动确认执行(跳过执行前确认步骤,但保留冲突决策提示)')
|
|
33
|
+
.action(async (options) => {
|
|
34
|
+
try {
|
|
35
|
+
const initCmd = require('../src/commands/init');
|
|
36
|
+
await initCmd(options);
|
|
37
|
+
} catch (err) {
|
|
38
|
+
console.error('❌ 初始化失败:', err.message);
|
|
39
|
+
if (process.env.DEBUG) console.error(err.stack);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// ============ plugin 命令组 ============
|
|
45
|
+
const pluginCmd = program
|
|
46
|
+
.command('plugin')
|
|
47
|
+
.description('Claude Code 插件管理');
|
|
48
|
+
|
|
49
|
+
pluginCmd
|
|
50
|
+
.command('install')
|
|
51
|
+
.description('注册当前 adspecs 为 Claude Code 插件')
|
|
52
|
+
.option('--scope <scope>', '安装范围: user|project', 'user')
|
|
53
|
+
.action(async (options) => {
|
|
54
|
+
try {
|
|
55
|
+
const pluginCmd = require('../src/commands/plugin');
|
|
56
|
+
await pluginCmd.install(options);
|
|
57
|
+
} catch (err) {
|
|
58
|
+
console.error('❌ 插件注册失败:', err.message);
|
|
59
|
+
if (process.env.DEBUG) console.error(err.stack);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
pluginCmd
|
|
65
|
+
.command('uninstall')
|
|
66
|
+
.description('从 Claude Code 中卸载 adspecs 插件')
|
|
67
|
+
.option('--scope <scope>', '卸载范围: user|project', 'user')
|
|
68
|
+
.action(async (options) => {
|
|
69
|
+
try {
|
|
70
|
+
const pluginCmd = require('../src/commands/plugin');
|
|
71
|
+
await pluginCmd.uninstall(options);
|
|
72
|
+
} catch (err) {
|
|
73
|
+
console.error('❌ 插件卸载失败:', err.message);
|
|
74
|
+
if (process.env.DEBUG) console.error(err.stack);
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
// ============ doctor 命令 ============
|
|
80
|
+
program
|
|
81
|
+
.command('doctor')
|
|
82
|
+
.description('检查环境依赖(Node.js、git、Python、PowerShell 等)')
|
|
83
|
+
.action(async () => {
|
|
84
|
+
try {
|
|
85
|
+
const doctorCmd = require('../src/commands/doctor');
|
|
86
|
+
await doctorCmd();
|
|
87
|
+
} catch (err) {
|
|
88
|
+
console.error('❌ 环境检查失败:', err.message);
|
|
89
|
+
if (process.env.DEBUG) console.error(err.stack);
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// ============ update 命令 ============
|
|
95
|
+
program
|
|
96
|
+
.command('update')
|
|
97
|
+
.description('升级 adspecs 到最新版本(等价于 npm install -g adspecs@latest)')
|
|
98
|
+
.option('--version <version>', '升级到指定版本(默认 latest)')
|
|
99
|
+
.action(async (options) => {
|
|
100
|
+
try {
|
|
101
|
+
const updateCmd = require('../src/commands/update');
|
|
102
|
+
await updateCmd(options);
|
|
103
|
+
} catch (err) {
|
|
104
|
+
console.error('❌ 升级失败:', err.message);
|
|
105
|
+
if (process.env.DEBUG) console.error(err.stack);
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
// ============ 帮助信息增强 ============
|
|
111
|
+
program.addHelpText('after', `
|
|
112
|
+
示例:
|
|
113
|
+
$ adspecs init # 交互式初始化
|
|
114
|
+
$ adspecs init --mode simple # 快速初始化(交互选择其余参数)
|
|
115
|
+
$ adspecs init --non-interactive # 完全非交互(使用默认值)
|
|
116
|
+
$ adspecs init --project-name "我的项目" --mode full --front-demo antd
|
|
117
|
+
$ adspecs plugin install # 注册为 Claude Code 插件(默认 user 范围)
|
|
118
|
+
$ adspecs plugin install --scope project # 仅注册到当前项目
|
|
119
|
+
$ adspecs plugin install --scope user # 注册到当前用户(全局可用)
|
|
120
|
+
$ adspecs plugin uninstall --scope project # 从当前项目卸载
|
|
121
|
+
$ adspecs doctor # 检查环境依赖
|
|
122
|
+
$ adspecs update # 升级到最新版本
|
|
123
|
+
$ adspecs update --version 0.2.0 # 升级到指定版本
|
|
124
|
+
|
|
125
|
+
文档:
|
|
126
|
+
https://gitee.com/yuebon/adspecs
|
|
127
|
+
`);
|
|
128
|
+
|
|
129
|
+
program.parse();
|