px2cc 2.1.1 → 2.2.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.
Files changed (4) hide show
  1. package/README.md +27 -5
  2. package/bin.js +7 -17
  3. package/cli.js +60 -20
  4. package/package.json +1 -1
package/README.md CHANGED
@@ -8,6 +8,7 @@
8
8
  - 🎭 动态获取所有可用的系统角色和用户角色
9
9
  - 🤖 支持安装为Claude Code Subagents (通过自然语言提及调用)
10
10
  - ⚙️ 支持安装为Claude Code Commands (通过 `/command` 调用)
11
+ - 🏷️ 支持自定义Agent和Command的安装名字
11
12
  - 🎨 友好的交互式界面
12
13
  - 📁 自动创建和管理 `.claude` 目录结构
13
14
 
@@ -29,7 +30,8 @@ npx px2cc
29
30
  然后按照交互式提示:
30
31
  1. 选择要安装的PromptX角色
31
32
  2. 选择安装类型(Agent 或 Command)
32
- 3. 确认安装
33
+ 3. 选择是否自定义安装名字(可选)
34
+ 4. 确认安装
33
35
 
34
36
  ## 安装类型
35
37
 
@@ -46,6 +48,24 @@ npx px2cc
46
48
  - **系统角色** 📦 - PromptX内置的专业角色
47
49
  - **用户角色** 👤 - 用户自定义创建的角色
48
50
 
51
+ ## 自定义命名
52
+
53
+ 从 v2.2.0 开始支持自定义安装名字功能:
54
+
55
+ - **默认命名规则**:
56
+ - Agent: `角色名-agent` (如 `assistant-agent`)
57
+ - Command: `角色名` (如 `assistant`)
58
+
59
+ - **自定义命名**:
60
+ - 可以自由指定Agent或Command的名字
61
+ - 支持字母、数字、下划线和连字符
62
+ - 避免与现有文件重名冲突
63
+
64
+ - **使用场景**:
65
+ - 多版本管理:`assistant-v1`, `assistant-v2`
66
+ - 功能区分:`code-assistant`, `writing-assistant`
67
+ - 个人偏好:`my-helper`, `ai-buddy`
68
+
49
69
  ## 系统要求
50
70
 
51
71
  - Node.js >= 16.0.0
@@ -67,7 +87,9 @@ $ px2cc
67
87
 
68
88
  ? 请选择要安装的PromptX角色: assistant (系统角色)
69
89
  ? 安装 assistant 为: Agent - 通过提及"assistant-agent subagent"调用
70
- ? 确认安装到Claude Code? Yes
90
+ ? 是否要自定义安装名字? Yes
91
+ ? 请输入自定义Agent名字 (默认: assistant-agent): my-assistant
92
+ ? 确认安装 assistant 为 my-assistant 到Claude Code? Yes
71
93
 
72
94
  📖 加载 assistant 角色定义...
73
95
  🔧 生成 assistant agent文件...
@@ -75,11 +97,11 @@ $ px2cc
75
97
  ✅ 角色安装完成!
76
98
 
77
99
  📄 生成的文件:
78
- - .claude/agents/assistant-agent.md
100
+ - .claude/agents/my-assistant.md
79
101
 
80
102
  🎉 现在你可以在Claude Code中使用:
81
- Use the assistant-agent subagent to help with my task
82
- Have the assistant-agent subagent review my code
103
+ Use the my-assistant subagent to help with my task
104
+ Have the my-assistant subagent review my code
83
105
 
84
106
  💡 提示: 重启Claude Code以确保新配置生效
85
107
  ```
package/bin.js CHANGED
@@ -1,25 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * Px2CC 启动器 - 通用版本
5
- * 直接调用主函数,确保跨平台兼容
4
+ * Px2CC 启动器 - Windows兼容版本
6
5
  */
7
6
 
8
7
  // 设置环境变量来抑制PromptX内部日志
9
8
  process.env.LOG_LEVEL = 'silent';
10
9
 
11
- // 动态导入并直接调用main函数
12
- (async () => {
13
- try {
14
- const { main } = await import('./cli.js');
15
- if (typeof main === 'function') {
16
- await main();
17
- } else {
18
- // 如果没有导出main函数,直接导入模块(会自动执行)
19
- await import('./cli.js');
20
- }
21
- } catch (error) {
22
- console.error('启动失败:', error.message);
23
- process.exit(1);
24
- }
25
- })();
10
+ // 简单直接的导入方式 - Windows兼容
11
+ import('./cli.js').catch(error => {
12
+ console.error('启动失败:', error.message);
13
+ console.error('请检查Node.js版本是否 >= 18.0.0');
14
+ process.exit(1);
15
+ });
package/cli.js CHANGED
@@ -191,16 +191,54 @@ async function showRoleMenu(systemRoles, userRoles, availableServers) {
191
191
  }
192
192
  ]
193
193
  },
194
+ {
195
+ type: 'confirm',
196
+ name: 'customName',
197
+ message: '是否要自定义安装名字?',
198
+ default: false
199
+ }
200
+ ]);
201
+
202
+ let customName = '';
203
+ if (typeAnswer.customName) {
204
+ const nameAnswer = await inquirer.prompt([
205
+ {
206
+ type: 'input',
207
+ name: 'name',
208
+ message: typeAnswer.installType === 'agents'
209
+ ? `请输入自定义Agent名字 (默认: ${roleAnswer.selectedRole.role}-agent):`
210
+ : `请输入自定义Command名字 (默认: ${roleAnswer.selectedRole.role}):`,
211
+ default: typeAnswer.installType === 'agents'
212
+ ? `${roleAnswer.selectedRole.role}-agent`
213
+ : roleAnswer.selectedRole.role,
214
+ validate: (input) => {
215
+ if (!input.trim()) {
216
+ return '名字不能为空';
217
+ }
218
+ // 检查名字格式
219
+ if (!/^[a-zA-Z0-9_-]+$/.test(input.trim())) {
220
+ return '名字只能包含字母、数字、下划线和连字符';
221
+ }
222
+ return true;
223
+ }
224
+ }
225
+ ]);
226
+ customName = nameAnswer.name.trim();
227
+ }
228
+
229
+ const confirmAnswer = await inquirer.prompt([
194
230
  {
195
231
  type: 'confirm',
196
232
  name: 'confirm',
197
- message: '确认安装到Claude Code?',
233
+ message: customName
234
+ ? `确认安装 ${roleAnswer.selectedRole.role} 为 ${chalk.yellow(customName)} 到Claude Code?`
235
+ : '确认安装到Claude Code?',
198
236
  default: true
199
237
  }
200
238
  ]);
201
239
 
202
240
  let selectedTools = [];
203
- if (typeAnswer.confirm) {
241
+ if (confirmAnswer.confirm) {
204
242
  // 选择MCP服务器和工具
205
243
  selectedTools = await selectMCPServers(roleAnswer.selectedRole.role, availableServers);
206
244
  }
@@ -208,7 +246,8 @@ async function showRoleMenu(systemRoles, userRoles, availableServers) {
208
246
  return {
209
247
  selectedRole: roleAnswer.selectedRole,
210
248
  installType: typeAnswer.installType,
211
- confirm: typeAnswer.confirm,
249
+ confirm: confirmAnswer.confirm,
250
+ customName: customName,
212
251
  selectedTools: selectedTools
213
252
  };
214
253
  }
@@ -229,7 +268,7 @@ function checkDirectory() {
229
268
  }
230
269
 
231
270
  // 安装角色
232
- async function installRole(selectedRole, installType, claudeDir, manager, selectedTools) {
271
+ async function installRole(selectedRole, installType, claudeDir, selectedTools, customName = '') {
233
272
  const roleName = selectedRole.role;
234
273
  const results = {};
235
274
 
@@ -240,10 +279,12 @@ async function installRole(selectedRole, installType, claudeDir, manager, select
240
279
  const processedContent = await processor.processRole(roleName, mode);
241
280
 
242
281
  // 根据安装模式创建相应文件
282
+ const finalName = customName || (installType === 'agents' ? `${roleName}-agent` : roleName);
283
+
243
284
  if (installType === 'agents') {
244
- console.log(chalk.cyan(`🔧 生成 ${roleName} subagent文件...`));
285
+ console.log(chalk.cyan(`🔧 生成 ${finalName} subagent文件...`));
245
286
  const agentConfig = {
246
- name: `${roleName}-agent`,
287
+ name: finalName,
247
288
  description: `基于PromptX ${roleName}角色的专业AI助手 - 完整action实现`,
248
289
  content: processedContent,
249
290
  targetDir: claudeDir
@@ -260,15 +301,15 @@ async function installRole(selectedRole, installType, claudeDir, manager, select
260
301
  if (!subagentResult.success) {
261
302
  throw new Error(`创建Subagent失败: ${subagentResult.error}`);
262
303
  }
263
- results.agentFile = `${roleName}-agent.md`;
264
- results.usage = `Use the ${roleName}-agent subagent to [任务描述]`;
304
+ results.agentFile = `${finalName}.md`;
305
+ results.usage = `Use the ${finalName} subagent to [任务描述]`;
265
306
  }
266
307
 
267
308
  if (installType === 'commands') {
268
- console.log(chalk.cyan(`📋 生成 ${roleName} command文件...`));
309
+ console.log(chalk.cyan(`📋 生成 ${finalName} command文件...`));
269
310
 
270
311
  const commandConfig = {
271
- name: roleName,
312
+ name: finalName,
272
313
  description: `基于PromptX ${roleName}角色的专业助手 - 完整action实现`,
273
314
  content: processedContent,
274
315
  targetDir: claudeDir
@@ -285,8 +326,8 @@ async function installRole(selectedRole, installType, claudeDir, manager, select
285
326
  if (!commandResult.success) {
286
327
  throw new Error(`创建Command失败: ${commandResult.error}`);
287
328
  }
288
- results.commandFile = `${roleName}.md`;
289
- results.usage = `/${roleName}`;
329
+ results.commandFile = `${finalName}.md`;
330
+ results.usage = `/${finalName}`;
290
331
  }
291
332
 
292
333
  results.roleName = roleName;
@@ -348,7 +389,7 @@ export async function main() {
348
389
  console.log(chalk.blue(`\n🎭 开始安装角色: ${selectedRole.role} (${installType})`));
349
390
 
350
391
  // 安装角色
351
- const result = await installRole(selectedRole, installType, claudeDir, manager, selectedTools);
392
+ const result = await installRole(selectedRole, installType, claudeDir, selectedTools, selections.customName);
352
393
 
353
394
  console.log(chalk.green.bold('\n✅ 角色安装完成!'));
354
395
  console.log(`\n📄 生成的文件:`);
@@ -373,10 +414,9 @@ export async function main() {
373
414
  }
374
415
  }
375
416
 
376
- // 运行主程序 - 简化条件判断以提高兼容性
377
- if (import.meta.url === new URL(process.argv[1], 'file:').href || process.argv[1].endsWith('cli.js')) {
378
- main().catch(error => {
379
- console.error(chalk.red('❌ 程序异常:'), error.message);
380
- process.exit(1);
381
- });
382
- }
417
+ // 运行主程序 - Windows兼容版本
418
+ // 通过bin.js调用时直接执行,通过import调用时也执行
419
+ main().catch(error => {
420
+ console.error(chalk.red('❌ 程序异常:'), error.message);
421
+ process.exit(1);
422
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "px2cc",
3
- "version": "2.1.1",
3
+ "version": "2.2.0",
4
4
  "description": "CLI tool that implements complete PromptX Action flow in Claude Code - role activation, dependency loading, cognition networks & memory systems",
5
5
  "main": "cli.js",
6
6
  "type": "module",