@dedesfr/prompter 0.8.23 → 1.0.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.
- package/CHANGELOG.md +70 -0
- package/README.md +105 -77
- package/dist/cli/index.js +25 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/init.d.ts +1 -7
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +60 -299
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts +4 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +56 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +4 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +14 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +31 -41
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/whoami.d.ts +4 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +42 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/core/auth-store.d.ts +10 -0
- package/dist/core/auth-store.d.ts.map +1 -0
- package/dist/core/auth-store.js +39 -0
- package/dist/core/auth-store.js.map +1 -0
- package/dist/core/configurators/slash/antigravity.d.ts +2 -5
- package/dist/core/configurators/slash/antigravity.d.ts.map +1 -1
- package/dist/core/configurators/slash/antigravity.js +2 -57
- package/dist/core/configurators/slash/antigravity.js.map +1 -1
- package/dist/core/configurators/slash/base.d.ts +6 -18
- package/dist/core/configurators/slash/base.d.ts.map +1 -1
- package/dist/core/configurators/slash/base.js +8 -77
- package/dist/core/configurators/slash/base.js.map +1 -1
- package/dist/core/configurators/slash/claude.d.ts +2 -5
- package/dist/core/configurators/slash/claude.d.ts.map +1 -1
- package/dist/core/configurators/slash/claude.js +2 -57
- package/dist/core/configurators/slash/claude.js.map +1 -1
- package/dist/core/configurators/slash/codex.d.ts +2 -5
- package/dist/core/configurators/slash/codex.d.ts.map +1 -1
- package/dist/core/configurators/slash/codex.js +2 -57
- package/dist/core/configurators/slash/codex.js.map +1 -1
- package/dist/core/configurators/slash/droid.d.ts +2 -5
- package/dist/core/configurators/slash/droid.d.ts.map +1 -1
- package/dist/core/configurators/slash/droid.js +2 -32
- package/dist/core/configurators/slash/droid.js.map +1 -1
- package/dist/core/configurators/slash/forge.d.ts +2 -5
- package/dist/core/configurators/slash/forge.d.ts.map +1 -1
- package/dist/core/configurators/slash/forge.js +2 -32
- package/dist/core/configurators/slash/forge.js.map +1 -1
- package/dist/core/configurators/slash/github-copilot.d.ts +2 -7
- package/dist/core/configurators/slash/github-copilot.d.ts.map +1 -1
- package/dist/core/configurators/slash/github-copilot.js +2 -96
- package/dist/core/configurators/slash/github-copilot.js.map +1 -1
- package/dist/core/configurators/slash/index.d.ts +1 -1
- package/dist/core/configurators/slash/index.d.ts.map +1 -1
- package/dist/core/configurators/slash/index.js +1 -1
- package/dist/core/configurators/slash/index.js.map +1 -1
- package/dist/core/configurators/slash/kilocode.d.ts +2 -5
- package/dist/core/configurators/slash/kilocode.d.ts.map +1 -1
- package/dist/core/configurators/slash/kilocode.js +2 -57
- package/dist/core/configurators/slash/kilocode.js.map +1 -1
- package/dist/core/configurators/slash/opencode.d.ts +2 -5
- package/dist/core/configurators/slash/opencode.d.ts.map +1 -1
- package/dist/core/configurators/slash/opencode.js +2 -57
- package/dist/core/configurators/slash/opencode.js.map +1 -1
- package/dist/core/configurators/slash/registry.d.ts +4 -4
- package/dist/core/configurators/slash/registry.d.ts.map +1 -1
- package/dist/core/configurators/slash/registry.js.map +1 -1
- package/dist/core/registry.d.ts +18 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +94 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/templates/index.d.ts +0 -1
- package/dist/core/templates/index.d.ts.map +1 -1
- package/dist/core/templates/index.js +0 -1
- package/dist/core/templates/index.js.map +1 -1
- package/package.json +7 -1
- package/AGENTS.md +0 -123
- package/CLAUDE.md +0 -17
- package/build.js +0 -20
- package/convex-setup.md +0 -403
- package/dist/core/templates/slash-command-templates.d.ts +0 -7
- package/dist/core/templates/slash-command-templates.d.ts.map +0 -1
- package/dist/core/templates/slash-command-templates.js +0 -1041
- package/dist/core/templates/slash-command-templates.js.map +0 -1
- package/prompt/ai-humanizer.md +0 -45
- package/prompt/api-contract-generator.md +0 -234
- package/prompt/apply.md +0 -17
- package/prompt/archive.md +0 -21
- package/prompt/design-system.md +0 -210
- package/prompt/document-explainer.md +0 -149
- package/prompt/epic-generator.md +0 -198
- package/prompt/epic-single.md +0 -47
- package/prompt/erd-generator.md +0 -130
- package/prompt/fsd-generator.md +0 -157
- package/prompt/prd-agent-generator.md +0 -147
- package/prompt/prd-generator.md +0 -195
- package/prompt/product-brief.md +0 -289
- package/prompt/proposal.md +0 -22
- package/prompt/qa-test-scenario.md +0 -133
- package/prompt/skill-creator.md +0 -350
- package/prompt/story-generator.md +0 -278
- package/prompt/story-single.md +0 -70
- package/prompt/tdd-generator.md +0 -294
- package/prompt/tdd-lite-generator.md +0 -224
- package/prompt/wireframe-generator.md +0 -219
- package/skills/ai-context-generator/SKILL.md +0 -54
- package/skills/ai-context-generator/references/AGENTS.template.md +0 -83
- package/skills/ai-context-generator/references/CLAUDE.template.md +0 -39
- package/skills/ai-context-generator/references/behavioral-guidelines.md +0 -71
- package/skills/ai-context-generator/references/discovery-checklist.md +0 -40
- package/skills/ai-context-generator/references/examples/AGENTS.good.md +0 -103
- package/skills/ai-context-generator/references/extraction-checklist.md +0 -23
- package/skills/ai-context-generator/references/overlays/laravel.md +0 -44
- package/skills/cerebro/SKILL.md +0 -187
- package/skills/cerebro/references/agents.md +0 -213
- package/skills/code-review/SKILL.md +0 -373
- package/skills/code-review/assets/report-template-agent.md +0 -212
- package/skills/code-review/assets/report-template-compact.md +0 -81
- package/skills/code-review/assets/report-template-full.md +0 -264
- package/skills/code-review/assets/report-template-human.md +0 -168
- package/skills/code-review/references/universal-patterns.md +0 -495
- package/skills/design-md/README.md +0 -34
- package/skills/design-md/SKILL.md +0 -172
- package/skills/design-md/examples/DESIGN.md +0 -154
- package/skills/design-system-generator/SKILL.md +0 -324
- package/skills/design-system-generator/assets/design-system-template.md +0 -348
- package/skills/design-system-generator/references/extraction-patterns.md +0 -321
- package/skills/doc-builder/SKILL.md +0 -115
- package/skills/doc-builder/references/ui-patterns.md +0 -394
- package/skills/document-translator/SKILL.md +0 -58
- package/skills/enhance-prompt/README.md +0 -34
- package/skills/enhance-prompt/SKILL.md +0 -204
- package/skills/enhance-prompt/references/KEYWORDS.md +0 -114
- package/skills/feature-planner/SKILL.md +0 -305
- package/skills/feature-planner/assets/implementation-plan-template.md +0 -85
- package/skills/frontend-design/LICENSE.txt +0 -177
- package/skills/frontend-design/SKILL.md +0 -42
- package/skills/gamma-builder/SKILL.md +0 -134
- package/skills/laravel-code-review/SKILL.md +0 -383
- package/skills/laravel-code-review/assets/report-template-agent.md +0 -195
- package/skills/laravel-code-review/assets/report-template-compact.md +0 -79
- package/skills/laravel-code-review/assets/report-template-full.md +0 -253
- package/skills/laravel-code-review/assets/report-template-human.md +0 -159
- package/skills/laravel-code-review/references/laravel-patterns.md +0 -571
- package/skills/laravel-code-review/references/php84-features.md +0 -442
- package/skills/mcp-builder/LICENSE.txt +0 -202
- package/skills/mcp-builder/SKILL.md +0 -236
- package/skills/mcp-builder/reference/evaluation.md +0 -602
- package/skills/mcp-builder/reference/mcp_best_practices.md +0 -249
- package/skills/mcp-builder/reference/node_mcp_server.md +0 -970
- package/skills/mcp-builder/reference/python_mcp_server.md +0 -719
- package/skills/mcp-builder/scripts/connections.py +0 -151
- package/skills/mcp-builder/scripts/evaluation.py +0 -373
- package/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
- package/skills/mcp-builder/scripts/requirements.txt +0 -2
- package/skills/meeting-notes/SKILL.md +0 -159
- package/skills/meeting-notes/evals/evals.json +0 -23
- package/skills/project-orchestrator/SKILL.md +0 -487
- package/skills/project-orchestrator/assets/caddy-vps-setup.md +0 -180
- package/skills/project-orchestrator/assets/plan-summary-template.md +0 -159
- package/skills/prompter-specs/SKILL.md +0 -115
- package/skills/prompter-workflow/SKILL.md +0 -166
- package/skills/prompter-workflow/evals/evals.json +0 -89
- package/skills/sph-generator/SKILL.md +0 -488
- package/skills/ui-ux-pro/SKILL.md +0 -199
- package/skills/ui-ux-pro/assets/design-spec-template.md +0 -173
- package/skills/ui-ux-pro/references/component-patterns.md +0 -255
- package/skills/ui-ux-pro/references/design-principles.md +0 -167
- package/src/cli/index.ts +0 -223
- package/src/commands/archive.ts +0 -302
- package/src/commands/change.ts +0 -292
- package/src/commands/config.ts +0 -233
- package/src/commands/guide.ts +0 -50
- package/src/commands/init.ts +0 -899
- package/src/commands/list.ts +0 -194
- package/src/commands/show.ts +0 -138
- package/src/commands/spec.ts +0 -251
- package/src/commands/update.ts +0 -156
- package/src/commands/upgrade.ts +0 -30
- package/src/commands/validate.ts +0 -326
- package/src/core/artifact-graph/graph.ts +0 -167
- package/src/core/artifact-graph/index.ts +0 -44
- package/src/core/artifact-graph/instruction-loader.ts +0 -302
- package/src/core/artifact-graph/resolver.ts +0 -226
- package/src/core/artifact-graph/schema.ts +0 -124
- package/src/core/artifact-graph/state.ts +0 -64
- package/src/core/artifact-graph/types.ts +0 -65
- package/src/core/completions/command-registry.ts +0 -382
- package/src/core/completions/completion-provider.ts +0 -128
- package/src/core/completions/generators/bash-generator.ts +0 -191
- package/src/core/completions/generators/fish-generator.ts +0 -188
- package/src/core/completions/generators/powershell-generator.ts +0 -223
- package/src/core/completions/generators/zsh-generator.ts +0 -281
- package/src/core/completions/templates/bash-templates.ts +0 -24
- package/src/core/completions/templates/fish-templates.ts +0 -40
- package/src/core/completions/templates/powershell-templates.ts +0 -25
- package/src/core/completions/templates/zsh-templates.ts +0 -36
- package/src/core/completions/types.ts +0 -90
- package/src/core/config-schema.ts +0 -230
- package/src/core/config.ts +0 -181
- package/src/core/configurators/slash/antigravity.ts +0 -70
- package/src/core/configurators/slash/base.ts +0 -203
- package/src/core/configurators/slash/claude.ts +0 -70
- package/src/core/configurators/slash/codex.ts +0 -70
- package/src/core/configurators/slash/droid.ts +0 -44
- package/src/core/configurators/slash/forge.ts +0 -44
- package/src/core/configurators/slash/github-copilot.ts +0 -114
- package/src/core/configurators/slash/index.ts +0 -10
- package/src/core/configurators/slash/kilocode.ts +0 -70
- package/src/core/configurators/slash/opencode.ts +0 -70
- package/src/core/configurators/slash/registry.ts +0 -51
- package/src/core/converters/json-converter.ts +0 -62
- package/src/core/global-config.ts +0 -136
- package/src/core/parsers/change-parser.ts +0 -234
- package/src/core/parsers/markdown-parser.ts +0 -237
- package/src/core/parsers/requirement-blocks.ts +0 -234
- package/src/core/prompt-templates.ts +0 -3504
- package/src/core/schemas/base.schema.ts +0 -20
- package/src/core/schemas/change.schema.ts +0 -42
- package/src/core/schemas/index.ts +0 -20
- package/src/core/schemas/spec.schema.ts +0 -17
- package/src/core/skill-discovery.ts +0 -68
- package/src/core/specs-apply.ts +0 -483
- package/src/core/styles/palette.ts +0 -8
- package/src/core/templates/agents-template.ts +0 -459
- package/src/core/templates/claude-template.ts +0 -2
- package/src/core/templates/index.ts +0 -4
- package/src/core/templates/project-template.ts +0 -32
- package/src/core/templates/slash-command-templates.ts +0 -1068
- package/src/core/validation/constants.ts +0 -48
- package/src/core/validation/types.ts +0 -19
- package/src/core/validation/validator.ts +0 -449
- package/src/core/view.ts +0 -219
- package/src/index.ts +0 -1
- package/src/utils/change-metadata.ts +0 -171
- package/src/utils/change-utils.ts +0 -131
- package/src/utils/file-system.ts +0 -252
- package/src/utils/index.ts +0 -12
- package/src/utils/interactive.ts +0 -29
- package/src/utils/item-discovery.ts +0 -66
- package/src/utils/match.ts +0 -26
- package/src/utils/shell-detection.ts +0 -62
- package/src/utils/task-progress.ts +0 -43
- package/tsconfig.json +0 -28
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { password } from '@inquirer/prompts';
|
|
3
|
+
import { setAuthData } from '../core/auth-store.js';
|
|
4
|
+
import { getRegistryUrl } from '../core/registry.js';
|
|
5
|
+
export class LoginCommand {
|
|
6
|
+
async execute() {
|
|
7
|
+
console.log(chalk.blue('\n🔑 Prompter Login\n'));
|
|
8
|
+
let licenseKey;
|
|
9
|
+
try {
|
|
10
|
+
licenseKey = await password({ message: 'Enter your license key:' });
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
console.log(chalk.yellow('\nLogin cancelled.'));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (!licenseKey.trim()) {
|
|
17
|
+
console.log(chalk.red('License key cannot be empty.'));
|
|
18
|
+
process.exitCode = 1;
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const registryUrl = getRegistryUrl();
|
|
22
|
+
let res;
|
|
23
|
+
try {
|
|
24
|
+
res = await fetch(`${registryUrl}/auth/validate`, {
|
|
25
|
+
method: 'POST',
|
|
26
|
+
headers: { 'Content-Type': 'application/json' },
|
|
27
|
+
body: JSON.stringify({ key: licenseKey.trim() })
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
console.log(chalk.red(`\n✗ Could not reach registry at ${registryUrl}`));
|
|
32
|
+
console.log(chalk.gray(' Check your internet connection and try again.'));
|
|
33
|
+
process.exitCode = 1;
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (res.status === 401 || res.status === 403) {
|
|
37
|
+
console.log(chalk.red('\n✗ Invalid license key.'));
|
|
38
|
+
process.exitCode = 1;
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (!res.ok) {
|
|
42
|
+
console.log(chalk.red(`\n✗ Registry error (${res.status}). Try again later.`));
|
|
43
|
+
process.exitCode = 1;
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const body = await res.json();
|
|
47
|
+
await setAuthData({ token: body.token, email: body.email, tier: body.tier });
|
|
48
|
+
console.log(chalk.green('\n✓ Logged in successfully.'));
|
|
49
|
+
if (body.email)
|
|
50
|
+
console.log(chalk.gray(` Email: ${body.email}`));
|
|
51
|
+
if (body.tier)
|
|
52
|
+
console.log(chalk.gray(` Tier: ${body.tier}`));
|
|
53
|
+
console.log();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAGA,qBAAa,aAAa;IAChB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAWjC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getToken, clearToken } from '../core/auth-store.js';
|
|
3
|
+
export class LogoutCommand {
|
|
4
|
+
async execute() {
|
|
5
|
+
const token = await getToken();
|
|
6
|
+
if (!token) {
|
|
7
|
+
console.log(chalk.yellow('Not logged in.'));
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
await clearToken();
|
|
11
|
+
console.log(chalk.green('✓ Logged out.'));
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE7D,MAAM,OAAO,aAAa;IACtB,KAAK,CAAC,OAAO;QACT,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;QAE/B,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC5C,OAAO;QACX,CAAC;QAED,MAAM,UAAU,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IAC9C,CAAC;CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AASA,qBAAa,aAAa;IAChB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAyEhB,UAAU;YASV,qBAAqB;YAiBrB,iBAAiB;CA8BlC"}
|
package/dist/commands/update.js
CHANGED
|
@@ -4,7 +4,8 @@ import path from 'path';
|
|
|
4
4
|
import { PrompterConfig, AVAILABLE_PROMPTS, PROMPTER_DIR } from '../core/config.js';
|
|
5
5
|
import { registry } from '../core/configurators/slash/index.js';
|
|
6
6
|
import { PROMPT_TEMPLATES } from '../core/prompt-templates.js';
|
|
7
|
-
import {
|
|
7
|
+
import { fetchAndCacheSkills, RegistryAuthError } from '../core/registry.js';
|
|
8
|
+
import { getToken } from '../core/auth-store.js';
|
|
8
9
|
export class UpdateCommand {
|
|
9
10
|
async execute() {
|
|
10
11
|
const projectPath = process.cwd();
|
|
@@ -25,17 +26,33 @@ export class UpdateCommand {
|
|
|
25
26
|
return;
|
|
26
27
|
}
|
|
27
28
|
let updatedCount = 0;
|
|
28
|
-
//
|
|
29
|
+
// Fetch skills from registry (falls back to local cache)
|
|
30
|
+
const token = await getToken();
|
|
31
|
+
let availableSkills = await (async () => {
|
|
32
|
+
try {
|
|
33
|
+
return await fetchAndCacheSkills(token);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
if (err instanceof RegistryAuthError) {
|
|
37
|
+
console.log(chalk.yellow(`\n⚠ ${err.message}`));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.log(chalk.yellow('\n⚠ ' + err.message));
|
|
41
|
+
}
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
})();
|
|
29
45
|
for (const toolId of configuredTools) {
|
|
30
46
|
const configurator = registry.get(toolId);
|
|
31
47
|
if (!configurator)
|
|
32
48
|
continue;
|
|
33
49
|
try {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
50
|
+
if (availableSkills.length > 0) {
|
|
51
|
+
const updatedSkillFiles = await configurator.updateExistingSkills(projectPath, availableSkills);
|
|
52
|
+
for (const file of updatedSkillFiles) {
|
|
53
|
+
console.log(chalk.green('✓') + ` Updated ${chalk.cyan(file)}`);
|
|
54
|
+
updatedCount++;
|
|
55
|
+
}
|
|
39
56
|
}
|
|
40
57
|
}
|
|
41
58
|
catch (error) {
|
|
@@ -49,26 +66,6 @@ export class UpdateCommand {
|
|
|
49
66
|
console.log(chalk.green('✓') + ` Updated ${chalk.cyan(`${PROMPTER_DIR}/core/${promptName}`)}`);
|
|
50
67
|
updatedCount++;
|
|
51
68
|
}
|
|
52
|
-
// Update existing skill workflow files
|
|
53
|
-
const skillsDir = path.join(projectPath, 'skills');
|
|
54
|
-
const availableSkills = await discoverSkills(skillsDir);
|
|
55
|
-
if (availableSkills.length > 0) {
|
|
56
|
-
for (const toolId of configuredTools) {
|
|
57
|
-
const configurator = registry.get(toolId);
|
|
58
|
-
if (!configurator)
|
|
59
|
-
continue;
|
|
60
|
-
try {
|
|
61
|
-
const updatedSkillFiles = await configurator.updateExistingSkills(projectPath, availableSkills);
|
|
62
|
-
for (const file of updatedSkillFiles) {
|
|
63
|
-
console.log(chalk.green('✓') + ` Updated ${chalk.cyan(file)}`);
|
|
64
|
-
updatedCount++;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
catch (error) {
|
|
68
|
-
console.log(chalk.red('✗') + ` Failed to update skills for ${configurator.toolId}: ${error}`);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
69
|
if (updatedCount === 0) {
|
|
73
70
|
console.log(chalk.yellow('⚠️ No workflow files found to update.'));
|
|
74
71
|
console.log(chalk.gray(' Run `prompter init` to create them.\n'));
|
|
@@ -90,17 +87,14 @@ export class UpdateCommand {
|
|
|
90
87
|
const configuredTools = [];
|
|
91
88
|
const allConfigurators = registry.getAll();
|
|
92
89
|
for (const configurator of allConfigurators) {
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
hasFiles = true;
|
|
99
|
-
break;
|
|
100
|
-
}
|
|
90
|
+
const skillsRoot = path.join(projectPath, configurator.getSkillsRootDir());
|
|
91
|
+
try {
|
|
92
|
+
const stat = await fs.stat(skillsRoot);
|
|
93
|
+
if (stat.isDirectory())
|
|
94
|
+
configuredTools.push(configurator.toolId);
|
|
101
95
|
}
|
|
102
|
-
|
|
103
|
-
|
|
96
|
+
catch {
|
|
97
|
+
// directory doesn't exist — tool not configured
|
|
104
98
|
}
|
|
105
99
|
}
|
|
106
100
|
return configuredTools;
|
|
@@ -108,14 +102,11 @@ export class UpdateCommand {
|
|
|
108
102
|
async updateCorePrompts(prompterPath) {
|
|
109
103
|
const updatedPrompts = [];
|
|
110
104
|
const corePath = path.join(prompterPath, 'core');
|
|
111
|
-
// Check if core directory exists
|
|
112
105
|
if (!await this.fileExists(corePath)) {
|
|
113
106
|
return updatedPrompts;
|
|
114
107
|
}
|
|
115
|
-
// Update each existing prompt file
|
|
116
108
|
for (const prompt of AVAILABLE_PROMPTS) {
|
|
117
109
|
const promptFilePath = path.join(corePath, prompt.sourceFile);
|
|
118
|
-
// Only update if file exists
|
|
119
110
|
if (await this.fileExists(promptFilePath)) {
|
|
120
111
|
try {
|
|
121
112
|
const content = PROMPT_TEMPLATES[prompt.value];
|
|
@@ -123,7 +114,6 @@ export class UpdateCommand {
|
|
|
123
114
|
console.log(chalk.yellow(` Warning: Template not found for ${prompt.name}`));
|
|
124
115
|
continue;
|
|
125
116
|
}
|
|
126
|
-
// Update the prompt file
|
|
127
117
|
await fs.writeFile(promptFilePath, content, 'utf-8');
|
|
128
118
|
updatedPrompts.push(prompt.sourceFile);
|
|
129
119
|
}
|
|
@@ -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,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAIA,qBAAa,aAAa;IAChB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAsCjC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getToken } from '../core/auth-store.js';
|
|
3
|
+
import { getRegistryUrl } from '../core/registry.js';
|
|
4
|
+
export class WhoamiCommand {
|
|
5
|
+
async execute() {
|
|
6
|
+
const token = await getToken();
|
|
7
|
+
if (!token) {
|
|
8
|
+
console.log(chalk.yellow('Not logged in. Run `prompter login`.'));
|
|
9
|
+
process.exitCode = 1;
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const registryUrl = getRegistryUrl();
|
|
13
|
+
let res;
|
|
14
|
+
try {
|
|
15
|
+
res = await fetch(`${registryUrl}/auth/me`, {
|
|
16
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
console.log(chalk.red(`✗ Could not reach registry at ${registryUrl}`));
|
|
21
|
+
process.exitCode = 1;
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (res.status === 401) {
|
|
25
|
+
console.log(chalk.red('Session expired. Run `prompter login` again.'));
|
|
26
|
+
process.exitCode = 1;
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (!res.ok) {
|
|
30
|
+
console.log(chalk.red(`Registry error (${res.status}). Try again later.`));
|
|
31
|
+
process.exitCode = 1;
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const body = await res.json();
|
|
35
|
+
console.log(chalk.green('✓ Logged in'));
|
|
36
|
+
if (body.email)
|
|
37
|
+
console.log(chalk.gray(` Email: ${body.email}`));
|
|
38
|
+
if (body.tier)
|
|
39
|
+
console.log(chalk.gray(` Tier: ${body.tier}`));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=whoami.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,OAAO,aAAa;IACtB,KAAK,CAAC,OAAO;QACT,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;QAE/B,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACX,CAAC;QAED,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;QACrC,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACD,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,UAAU,EAAE;gBACxC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;aAChD,CAAC,CAAC;QACP,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,WAAW,EAAE,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACX,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,GAAG,CAAC,MAAM,qBAAqB,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACX,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAuC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,IAAI;YAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;CACJ"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface AuthData {
|
|
2
|
+
token: string;
|
|
3
|
+
email?: string;
|
|
4
|
+
tier?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function getToken(): Promise<string | null>;
|
|
7
|
+
export declare function getAuthData(): Promise<AuthData | null>;
|
|
8
|
+
export declare function setAuthData(data: AuthData): Promise<void>;
|
|
9
|
+
export declare function clearToken(): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=auth-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-store.d.ts","sourceRoot":"","sources":["../../src/core/auth-store.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,QAAQ;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQvD;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAO5D;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/D;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAMhD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import os from 'os';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
const AUTH_FILE = path.join(os.homedir(), '.prompter', 'auth.json');
|
|
5
|
+
async function ensureDir() {
|
|
6
|
+
await fs.mkdir(path.dirname(AUTH_FILE), { recursive: true });
|
|
7
|
+
}
|
|
8
|
+
export async function getToken() {
|
|
9
|
+
try {
|
|
10
|
+
const raw = await fs.readFile(AUTH_FILE, 'utf-8');
|
|
11
|
+
const data = JSON.parse(raw);
|
|
12
|
+
return data.token ?? null;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function getAuthData() {
|
|
19
|
+
try {
|
|
20
|
+
const raw = await fs.readFile(AUTH_FILE, 'utf-8');
|
|
21
|
+
return JSON.parse(raw);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export async function setAuthData(data) {
|
|
28
|
+
await ensureDir();
|
|
29
|
+
await fs.writeFile(AUTH_FILE, JSON.stringify(data, null, 2), { encoding: 'utf-8', mode: 0o600 });
|
|
30
|
+
}
|
|
31
|
+
export async function clearToken() {
|
|
32
|
+
try {
|
|
33
|
+
await fs.unlink(AUTH_FILE);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// file didn't exist — that's fine
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=auth-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-store.js","sourceRoot":"","sources":["../../src/core/auth-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AAQpE,KAAK,UAAU,SAAS;IACpB,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC1B,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,IAAI,GAAa,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC7B,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAa,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC5C,MAAM,SAAS,EAAE,CAAC;IAClB,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC5B,IAAI,CAAC;QACD,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACL,kCAAkC;IACtC,CAAC;AACL,CAAC"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export declare class AntigravityConfigurator extends SlashCommandConfigurator {
|
|
1
|
+
import { ToolConfigurator } from './base.js';
|
|
2
|
+
export declare class AntigravityConfigurator extends ToolConfigurator {
|
|
4
3
|
readonly toolId = "antigravity";
|
|
5
4
|
readonly isAvailable = true;
|
|
6
|
-
protected getRelativePath(id: SlashCommandId): string;
|
|
7
|
-
protected getFrontmatter(id: SlashCommandId): string | undefined;
|
|
8
5
|
protected getSkillTargetDir(skillName: string): string;
|
|
9
6
|
}
|
|
10
7
|
//# sourceMappingURL=antigravity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"antigravity.d.ts","sourceRoot":"","sources":["../../../../src/core/configurators/slash/antigravity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"antigravity.d.ts","sourceRoot":"","sources":["../../../../src/core/configurators/slash/antigravity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,qBAAa,uBAAwB,SAAQ,gBAAgB;IACzD,QAAQ,CAAC,MAAM,iBAAiB;IAChC,QAAQ,CAAC,WAAW,QAAQ;IAE5B,SAAS,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAGzD"}
|
|
@@ -1,62 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
enhance: '.agent/workflows/prompter-enhance.md',
|
|
4
|
-
'prd-generator': '.agent/workflows/prd-generator.md',
|
|
5
|
-
'prd-agent-generator': '.agent/workflows/prd-agent-generator.md',
|
|
6
|
-
'product-brief': '.agent/workflows/product-brief.md',
|
|
7
|
-
'epic-single': '.agent/workflows/epic-single.md',
|
|
8
|
-
'epic-generator': '.agent/workflows/epic-generator.md',
|
|
9
|
-
'story-single': '.agent/workflows/story-single.md',
|
|
10
|
-
'story-generator': '.agent/workflows/story-generator.md',
|
|
11
|
-
'qa-test-scenario': '.agent/workflows/qa-test-scenario.md',
|
|
12
|
-
'skill-creator': '.agent/workflows/skill-creator.md',
|
|
13
|
-
'ai-humanizer': '.agent/workflows/ai-humanizer.md',
|
|
14
|
-
'api-contract-generator': '.agent/workflows/api-contract-generator.md',
|
|
15
|
-
'apply': '.agent/workflows/apply.md',
|
|
16
|
-
'archive': '.agent/workflows/archive.md',
|
|
17
|
-
'design-system': '.agent/workflows/design-system.md',
|
|
18
|
-
'erd-generator': '.agent/workflows/erd-generator.md',
|
|
19
|
-
'fsd-generator': '.agent/workflows/fsd-generator.md',
|
|
20
|
-
'proposal': '.agent/workflows/proposal.md',
|
|
21
|
-
'tdd-generator': '.agent/workflows/tdd-generator.md',
|
|
22
|
-
'tdd-lite-generator': '.agent/workflows/tdd-lite-generator.md',
|
|
23
|
-
'wireframe-generator': '.agent/workflows/wireframe-generator.md',
|
|
24
|
-
'document-explainer': '.agent/workflows/document-explainer.md'
|
|
25
|
-
};
|
|
26
|
-
const DESCRIPTIONS = {
|
|
27
|
-
enhance: 'Enhance a rough prompt into a professional specification',
|
|
28
|
-
'prd-generator': 'Generate a comprehensive Product Requirements Document (PRD)',
|
|
29
|
-
'prd-agent-generator': 'Generate a PRD with autonomous assumptions (non-interactive mode)',
|
|
30
|
-
'product-brief': 'Generate an executive-level product brief (1-page summary)',
|
|
31
|
-
'epic-single': 'Generate a single well-defined Jira Epic',
|
|
32
|
-
'epic-generator': 'Generate a comprehensive set of EPICs from documentation',
|
|
33
|
-
'story-single': 'Generate a single Jira User Story from requirements',
|
|
34
|
-
'story-generator': 'Generate comprehensive user stories from EPICs and FSD',
|
|
35
|
-
'qa-test-scenario': 'Generate focused QA test scenarios from PRD',
|
|
36
|
-
'skill-creator': 'Create a modular skill package that extends AI agent capabilities',
|
|
37
|
-
'ai-humanizer': 'Humanize and proofread AI-generated content for natural, publication-ready output',
|
|
38
|
-
'api-contract-generator': 'Generate OpenAPI specification from FSD and ERD',
|
|
39
|
-
'apply': 'Implement and apply an approved change proposal',
|
|
40
|
-
'archive': 'Archive a completed change and update specs',
|
|
41
|
-
'design-system': 'Generate comprehensive design system documentation for components and tokens',
|
|
42
|
-
'erd-generator': 'Generate Entity Relationship Diagram from FSD',
|
|
43
|
-
'fsd-generator': 'Generate Functional Specification Document from PRD',
|
|
44
|
-
'proposal': 'Create a new change proposal with spec deltas',
|
|
45
|
-
'tdd-generator': 'Generate comprehensive Technical Design Document',
|
|
46
|
-
'tdd-lite-generator': 'Generate lean Technical Design Document (TDD-Lite)',
|
|
47
|
-
'wireframe-generator': 'Generate UI/UX wireframes from technical specs',
|
|
48
|
-
'document-explainer': 'Analyze and explain complex documents into clear, actionable insights'
|
|
49
|
-
};
|
|
50
|
-
export class AntigravityConfigurator extends SlashCommandConfigurator {
|
|
1
|
+
import { ToolConfigurator } from './base.js';
|
|
2
|
+
export class AntigravityConfigurator extends ToolConfigurator {
|
|
51
3
|
toolId = 'antigravity';
|
|
52
4
|
isAvailable = true;
|
|
53
|
-
getRelativePath(id) {
|
|
54
|
-
return FILE_PATHS[id];
|
|
55
|
-
}
|
|
56
|
-
getFrontmatter(id) {
|
|
57
|
-
const description = DESCRIPTIONS[id];
|
|
58
|
-
return `---\ndescription: ${description}\n---`;
|
|
59
|
-
}
|
|
60
5
|
getSkillTargetDir(skillName) {
|
|
61
6
|
return `.agent/skills/${skillName}`;
|
|
62
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../../../src/core/configurators/slash/antigravity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../../../src/core/configurators/slash/antigravity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,OAAO,uBAAwB,SAAQ,gBAAgB;IAChD,MAAM,GAAG,aAAa,CAAC;IACvB,WAAW,GAAG,IAAI,CAAC;IAElB,iBAAiB,CAAC,SAAiB;QACzC,OAAO,iBAAiB,SAAS,EAAE,CAAC;IACxC,CAAC;CACJ"}
|
|
@@ -1,37 +1,25 @@
|
|
|
1
|
-
import { SlashCommandId } from '../../templates/index.js';
|
|
2
1
|
import { SkillMetadata } from '../../skill-discovery.js';
|
|
3
|
-
export interface SlashCommandTarget {
|
|
4
|
-
id: SlashCommandId;
|
|
5
|
-
path: string;
|
|
6
|
-
kind: 'slash';
|
|
7
|
-
}
|
|
8
2
|
export interface SkillTarget {
|
|
9
3
|
name: string;
|
|
10
4
|
path: string;
|
|
11
5
|
kind: 'skill';
|
|
12
6
|
}
|
|
13
|
-
export declare abstract class
|
|
7
|
+
export declare abstract class ToolConfigurator {
|
|
14
8
|
abstract readonly toolId: string;
|
|
15
9
|
abstract readonly isAvailable: boolean;
|
|
16
|
-
getTargets(filterIds?: SlashCommandId[]): SlashCommandTarget[];
|
|
17
|
-
generateAll(projectPath: string, filterIds?: SlashCommandId[]): Promise<string[]>;
|
|
18
|
-
updateExisting(projectPath: string): Promise<string[]>;
|
|
19
|
-
protected abstract getRelativePath(id: SlashCommandId): string;
|
|
20
|
-
protected abstract getFrontmatter(id: SlashCommandId): string | undefined;
|
|
21
10
|
/**
|
|
22
|
-
* Returns the relative directory path where
|
|
23
|
-
*
|
|
24
|
-
* e.g. `.claude/skills/laravel-code-review`
|
|
11
|
+
* Returns the relative directory path where a skill directory is placed
|
|
12
|
+
* inside the tool's config dir. e.g. `.claude/skills/laravel-code-review`
|
|
25
13
|
*/
|
|
26
14
|
protected abstract getSkillTargetDir(skillName: string): string;
|
|
27
|
-
|
|
15
|
+
/** Returns the directory where all skills for this tool are placed, e.g. `.claude/skills` */
|
|
16
|
+
getSkillsRootDir(): string;
|
|
28
17
|
getSkillTargets(skills: SkillMetadata[]): SkillTarget[];
|
|
29
18
|
generateSkills(projectPath: string, skills: SkillMetadata[]): Promise<string[]>;
|
|
30
19
|
updateExistingSkills(projectPath: string, skills: SkillMetadata[]): Promise<string[]>;
|
|
31
20
|
removeSkillFiles(projectPath: string, skillNames: string[]): Promise<string[]>;
|
|
21
|
+
removeAllDeployedSkills(projectPath: string): Promise<void>;
|
|
32
22
|
private copyDir;
|
|
33
23
|
private dirExists;
|
|
34
|
-
protected updateBody(filePath: string, body: string): Promise<void>;
|
|
35
|
-
private fileExists;
|
|
36
24
|
}
|
|
37
25
|
//# sourceMappingURL=base.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/core/configurators/slash/base.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/core/configurators/slash/base.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACjB;AAED,8BAAsB,gBAAgB;IAClC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAEvC;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAE/D,6FAA6F;IAC7F,gBAAgB,IAAI,MAAM;IAM1B,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,WAAW,EAAE;IAQjD,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAY/E,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAgBrF,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAgB9E,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAKnD,OAAO;YAgBP,SAAS;CAQ1B"}
|
|
@@ -1,60 +1,9 @@
|
|
|
1
1
|
import { promises as fs } from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
getTargets(filterIds) {
|
|
8
|
-
// If filterIds is undefined, generate all commands
|
|
9
|
-
// If filterIds is an empty array, generate nothing
|
|
10
|
-
// If filterIds has items, generate only those
|
|
11
|
-
const commandsToGenerate = filterIds === undefined
|
|
12
|
-
? ALL_COMMANDS
|
|
13
|
-
: ALL_COMMANDS.filter(id => filterIds.includes(id));
|
|
14
|
-
return commandsToGenerate.map((id) => ({
|
|
15
|
-
id,
|
|
16
|
-
path: this.getRelativePath(id),
|
|
17
|
-
kind: 'slash'
|
|
18
|
-
}));
|
|
19
|
-
}
|
|
20
|
-
async generateAll(projectPath, filterIds) {
|
|
21
|
-
const createdOrUpdated = [];
|
|
22
|
-
for (const target of this.getTargets(filterIds)) {
|
|
23
|
-
const body = this.getBody(target.id);
|
|
24
|
-
const filePath = path.join(projectPath, target.path);
|
|
25
|
-
// Ensure directory exists
|
|
26
|
-
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
27
|
-
if (await this.fileExists(filePath)) {
|
|
28
|
-
await this.updateBody(filePath, body);
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
const frontmatter = this.getFrontmatter(target.id);
|
|
32
|
-
const sections = [];
|
|
33
|
-
if (frontmatter) {
|
|
34
|
-
sections.push(frontmatter.trim());
|
|
35
|
-
}
|
|
36
|
-
sections.push(`${PROMPTER_MARKERS.start}\n${body}\n${PROMPTER_MARKERS.end}`);
|
|
37
|
-
const content = sections.join('\n') + '\n';
|
|
38
|
-
await fs.writeFile(filePath, content, 'utf-8');
|
|
39
|
-
}
|
|
40
|
-
createdOrUpdated.push(target.path);
|
|
41
|
-
}
|
|
42
|
-
return createdOrUpdated;
|
|
43
|
-
}
|
|
44
|
-
async updateExisting(projectPath) {
|
|
45
|
-
const updated = [];
|
|
46
|
-
for (const target of this.getTargets()) {
|
|
47
|
-
const filePath = path.join(projectPath, target.path);
|
|
48
|
-
if (await this.fileExists(filePath)) {
|
|
49
|
-
const body = this.getBody(target.id);
|
|
50
|
-
await this.updateBody(filePath, body);
|
|
51
|
-
updated.push(target.path);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return updated;
|
|
55
|
-
}
|
|
56
|
-
getBody(id) {
|
|
57
|
-
return TemplateManager.getSlashCommandBody(id).trim();
|
|
3
|
+
export class ToolConfigurator {
|
|
4
|
+
/** Returns the directory where all skills for this tool are placed, e.g. `.claude/skills` */
|
|
5
|
+
getSkillsRootDir() {
|
|
6
|
+
return path.dirname(this.getSkillTargetDir('__placeholder__'));
|
|
58
7
|
}
|
|
59
8
|
// --- Skill directory management ---
|
|
60
9
|
getSkillTargets(skills) {
|
|
@@ -97,6 +46,10 @@ export class SlashCommandConfigurator {
|
|
|
97
46
|
}
|
|
98
47
|
return removed;
|
|
99
48
|
}
|
|
49
|
+
async removeAllDeployedSkills(projectPath) {
|
|
50
|
+
const dir = path.join(projectPath, this.getSkillsRootDir());
|
|
51
|
+
await fs.rm(dir, { recursive: true, force: true });
|
|
52
|
+
}
|
|
100
53
|
async copyDir(src, dest) {
|
|
101
54
|
await fs.mkdir(dest, { recursive: true });
|
|
102
55
|
const entries = await fs.readdir(src, { withFileTypes: true });
|
|
@@ -120,27 +73,5 @@ export class SlashCommandConfigurator {
|
|
|
120
73
|
return false;
|
|
121
74
|
}
|
|
122
75
|
}
|
|
123
|
-
// --- Shared helpers ---
|
|
124
|
-
async updateBody(filePath, body) {
|
|
125
|
-
const content = await fs.readFile(filePath, 'utf-8');
|
|
126
|
-
const startIndex = content.indexOf(PROMPTER_MARKERS.start);
|
|
127
|
-
const endIndex = content.indexOf(PROMPTER_MARKERS.end);
|
|
128
|
-
if (startIndex === -1 || endIndex === -1 || endIndex <= startIndex) {
|
|
129
|
-
throw new Error(`Missing Prompter markers in ${filePath}`);
|
|
130
|
-
}
|
|
131
|
-
const before = content.slice(0, startIndex + PROMPTER_MARKERS.start.length);
|
|
132
|
-
const after = content.slice(endIndex);
|
|
133
|
-
const updatedContent = `${before}\n${body}\n${after}`;
|
|
134
|
-
await fs.writeFile(filePath, updatedContent, 'utf-8');
|
|
135
|
-
}
|
|
136
|
-
async fileExists(filePath) {
|
|
137
|
-
try {
|
|
138
|
-
await fs.access(filePath);
|
|
139
|
-
return true;
|
|
140
|
-
}
|
|
141
|
-
catch {
|
|
142
|
-
return false;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
76
|
}
|
|
146
77
|
//# sourceMappingURL=base.js.map
|