@dedesfr/prompter 0.3.1 → 0.3.2

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/dist/cli/index.js CHANGED
@@ -7,7 +7,7 @@ const program = new Command();
7
7
  program
8
8
  .name('prompter')
9
9
  .description('Enhance prompts directly in your AI coding workflow')
10
- .version('0.3.1');
10
+ .version('0.3.2');
11
11
  program
12
12
  .command('init')
13
13
  .description('Initialize Prompter in your project')
@@ -1,4 +1,6 @@
1
1
  export declare class UpdateCommand {
2
2
  execute(): Promise<void>;
3
+ private fileExists;
4
+ private detectConfiguredTools;
3
5
  }
4
6
  //# sourceMappingURL=update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAIA,qBAAa,aAAa;IAChB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAmCjC"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAMA,qBAAa,aAAa;IAChB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YA8DhB,UAAU;YASV,qBAAqB;CAuBtC"}
@@ -1,4 +1,6 @@
1
1
  import chalk from 'chalk';
2
+ import { promises as fs } from 'fs';
3
+ import path from 'path';
2
4
  import { PrompterConfig } from '../core/config.js';
3
5
  import { registry } from '../core/configurators/slash/index.js';
4
6
  export class UpdateCommand {
@@ -12,27 +14,80 @@ export class UpdateCommand {
12
14
  process.exitCode = 1;
13
15
  return;
14
16
  }
17
+ // Detect configured tools
18
+ const configuredTools = await this.detectConfiguredTools(projectPath);
19
+ if (configuredTools.length === 0) {
20
+ console.log(chalk.yellow('⚠️ No configured tools found.'));
21
+ console.log(chalk.gray(' Run `prompter init` to configure tools.\n'));
22
+ process.exitCode = 1;
23
+ return;
24
+ }
15
25
  let updatedCount = 0;
16
- // Update workflow files for all tools
17
- for (const configurator of registry.getAvailable()) {
26
+ let createdCount = 0;
27
+ // Update and add missing workflow files for configured tools only
28
+ for (const toolId of configuredTools) {
29
+ const configurator = registry.get(toolId);
30
+ if (!configurator)
31
+ continue;
18
32
  try {
19
- const files = await configurator.updateExisting(projectPath);
20
- for (const file of files) {
33
+ // Update existing files
34
+ const updatedFiles = await configurator.updateExisting(projectPath);
35
+ for (const file of updatedFiles) {
21
36
  console.log(chalk.green('✓') + ` Updated ${chalk.cyan(file)}`);
22
37
  updatedCount++;
23
38
  }
39
+ // Generate all workflow files (including missing ones)
40
+ const allFiles = await configurator.generateAll(projectPath);
41
+ const newFiles = allFiles.filter(f => !updatedFiles.includes(f));
42
+ for (const file of newFiles) {
43
+ console.log(chalk.green('✓') + ` Created ${chalk.cyan(file)}`);
44
+ createdCount++;
45
+ }
24
46
  }
25
47
  catch (error) {
26
48
  console.log(chalk.red('✗') + ` Failed to update ${configurator.toolId}: ${error}`);
27
49
  }
28
50
  }
29
- if (updatedCount === 0) {
51
+ if (updatedCount === 0 && createdCount === 0) {
30
52
  console.log(chalk.yellow('⚠️ No workflow files found to update.'));
31
53
  console.log(chalk.gray(' Run `prompter init` to create them.\n'));
32
54
  }
33
55
  else {
34
- console.log(chalk.green(`\n✅ Updated ${updatedCount} file(s).\n`));
56
+ const summary = [];
57
+ if (updatedCount > 0)
58
+ summary.push(`${updatedCount} updated`);
59
+ if (createdCount > 0)
60
+ summary.push(`${createdCount} created`);
61
+ console.log(chalk.green(`\n✅ ${summary.join(', ')}.\n`));
62
+ }
63
+ }
64
+ async fileExists(filePath) {
65
+ try {
66
+ await fs.access(filePath);
67
+ return true;
68
+ }
69
+ catch {
70
+ return false;
71
+ }
72
+ }
73
+ async detectConfiguredTools(projectPath) {
74
+ const configuredTools = [];
75
+ const allConfigurators = registry.getAll();
76
+ for (const configurator of allConfigurators) {
77
+ const targets = configurator.getTargets();
78
+ let hasFiles = false;
79
+ for (const target of targets) {
80
+ const filePath = path.join(projectPath, target.path);
81
+ if (await this.fileExists(filePath)) {
82
+ hasFiles = true;
83
+ break;
84
+ }
85
+ }
86
+ if (hasFiles) {
87
+ configuredTools.push(configurator.toolId);
88
+ }
35
89
  }
90
+ return configuredTools;
36
91
  }
37
92
  }
38
93
  //# sourceMappingURL=update.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAEhE,MAAM,OAAO,aAAa;IACtB,KAAK,CAAC,OAAO;QACT,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;QAEtE,uBAAuB;QACvB,IAAI,CAAC,MAAM,cAAc,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACX,CAAC;QAED,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,sCAAsC;QACtC,KAAK,MAAM,YAAY,IAAI,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;YACjD,IAAI,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;gBAC7D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC/D,YAAY,EAAE,CAAC;gBACnB,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,qBAAqB,YAAY,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC;YACvF,CAAC;QACL,CAAC;QAED,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,YAAY,aAAa,CAAC,CAAC,CAAC;QACvE,CAAC;IACL,CAAC;CACJ"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dedesfr/prompter",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "Enhance prompts directly in your AI coding workflow",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/src/cli/index.ts CHANGED
@@ -9,7 +9,7 @@ const program = new Command();
9
9
  program
10
10
  .name('prompter')
11
11
  .description('Enhance prompts directly in your AI coding workflow')
12
- .version('0.3.1');
12
+ .version('0.3.2');
13
13
 
14
14
  program
15
15
  .command('init')
@@ -1,4 +1,6 @@
1
1
  import chalk from 'chalk';
2
+ import { promises as fs } from 'fs';
3
+ import path from 'path';
2
4
  import { PrompterConfig } from '../core/config.js';
3
5
  import { registry } from '../core/configurators/slash/index.js';
4
6
 
@@ -16,26 +18,85 @@ export class UpdateCommand {
16
18
  return;
17
19
  }
18
20
 
21
+ // Detect configured tools
22
+ const configuredTools = await this.detectConfiguredTools(projectPath);
23
+
24
+ if (configuredTools.length === 0) {
25
+ console.log(chalk.yellow('⚠️ No configured tools found.'));
26
+ console.log(chalk.gray(' Run `prompter init` to configure tools.\n'));
27
+ process.exitCode = 1;
28
+ return;
29
+ }
30
+
19
31
  let updatedCount = 0;
32
+ let createdCount = 0;
33
+
34
+ // Update and add missing workflow files for configured tools only
35
+ for (const toolId of configuredTools) {
36
+ const configurator = registry.get(toolId);
37
+ if (!configurator) continue;
20
38
 
21
- // Update workflow files for all tools
22
- for (const configurator of registry.getAvailable()) {
23
39
  try {
24
- const files = await configurator.updateExisting(projectPath);
25
- for (const file of files) {
40
+ // Update existing files
41
+ const updatedFiles = await configurator.updateExisting(projectPath);
42
+ for (const file of updatedFiles) {
26
43
  console.log(chalk.green('✓') + ` Updated ${chalk.cyan(file)}`);
27
44
  updatedCount++;
28
45
  }
46
+
47
+ // Generate all workflow files (including missing ones)
48
+ const allFiles = await configurator.generateAll(projectPath);
49
+ const newFiles = allFiles.filter(f => !updatedFiles.includes(f));
50
+ for (const file of newFiles) {
51
+ console.log(chalk.green('✓') + ` Created ${chalk.cyan(file)}`);
52
+ createdCount++;
53
+ }
29
54
  } catch (error) {
30
55
  console.log(chalk.red('✗') + ` Failed to update ${configurator.toolId}: ${error}`);
31
56
  }
32
57
  }
33
58
 
34
- if (updatedCount === 0) {
59
+ if (updatedCount === 0 && createdCount === 0) {
35
60
  console.log(chalk.yellow('⚠️ No workflow files found to update.'));
36
61
  console.log(chalk.gray(' Run `prompter init` to create them.\n'));
37
62
  } else {
38
- console.log(chalk.green(`\n✅ Updated ${updatedCount} file(s).\n`));
63
+ const summary: string[] = [];
64
+ if (updatedCount > 0) summary.push(`${updatedCount} updated`);
65
+ if (createdCount > 0) summary.push(`${createdCount} created`);
66
+ console.log(chalk.green(`\n✅ ${summary.join(', ')}.\n`));
67
+ }
68
+ }
69
+
70
+ private async fileExists(filePath: string): Promise<boolean> {
71
+ try {
72
+ await fs.access(filePath);
73
+ return true;
74
+ } catch {
75
+ return false;
39
76
  }
40
77
  }
78
+
79
+ private async detectConfiguredTools(projectPath: string): Promise<string[]> {
80
+ const configuredTools: string[] = [];
81
+ const allConfigurators = registry.getAll();
82
+
83
+ for (const configurator of allConfigurators) {
84
+ const targets = configurator.getTargets();
85
+ let hasFiles = false;
86
+
87
+ for (const target of targets) {
88
+ const filePath = path.join(projectPath, target.path);
89
+ if (await this.fileExists(filePath)) {
90
+ hasFiles = true;
91
+ break;
92
+ }
93
+ }
94
+
95
+ if (hasFiles) {
96
+ configuredTools.push(configurator.toolId);
97
+ }
98
+ }
99
+
100
+ return configuredTools;
101
+ }
41
102
  }