@dedesfr/prompter 0.9.0 → 1.1.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 +35 -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.map +1 -1
- package/dist/commands/init.js +35 -9
- 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 +0 -2
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +19 -48
- 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/config.d.ts +0 -7
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +0 -128
- package/dist/core/config.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/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/prompt-templates.d.ts +0 -23
- package/dist/core/prompt-templates.d.ts.map +0 -1
- package/dist/core/prompt-templates.js +0 -3485
- package/dist/core/prompt-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/ai-humanizer/SKILL.md +0 -50
- package/skills/api-contract-generator/SKILL.md +0 -243
- package/skills/apply/SKILL.md +0 -23
- package/skills/archive/SKILL.md +0 -27
- 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/SKILL.md +0 -216
- 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-explainer/SKILL.md +0 -155
- package/skills/document-translator/SKILL.md +0 -58
- package/skills/enhance/SKILL.md +0 -47
- 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/epic-generator/SKILL.md +0 -204
- package/skills/epic-single/SKILL.md +0 -63
- package/skills/erd-generator/SKILL.md +0 -138
- 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/fsd-generator/SKILL.md +0 -163
- 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/prd-agent-generator/SKILL.md +0 -132
- package/skills/prd-generator/SKILL.md +0 -211
- package/skills/product-brief/SKILL.md +0 -141
- 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/proposal/SKILL.md +0 -28
- package/skills/qa-test-scenario/SKILL.md +0 -149
- package/skills/skill-creator/SKILL.md +0 -173
- package/skills/sph-generator/SKILL.md +0 -488
- package/skills/story-generator/SKILL.md +0 -285
- package/skills/story-single/SKILL.md +0 -86
- package/skills/tdd-generator/SKILL.md +0 -300
- package/skills/tdd-lite-generator/SKILL.md +0 -230
- 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/skills/wireframe-generator/SKILL.md +0 -227
- 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 -597
- 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 -129
- 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 -10
- package/src/core/configurators/slash/base.ts +0 -109
- package/src/core/configurators/slash/claude.ts +0 -10
- package/src/core/configurators/slash/codex.ts +0 -10
- package/src/core/configurators/slash/droid.ts +0 -10
- package/src/core/configurators/slash/forge.ts +0 -10
- package/src/core/configurators/slash/github-copilot.ts +0 -10
- package/src/core/configurators/slash/index.ts +0 -10
- package/src/core/configurators/slash/kilocode.ts +0 -10
- package/src/core/configurators/slash/opencode.ts +0 -10
- 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 -3
- package/src/core/templates/project-template.ts +0 -32
- 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
|
@@ -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":"AAQA,qBAAa,aAAa;IAChB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAiEhB,qBAAqB;CAiBtC"}
|
package/dist/commands/update.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import { promises as fs } from 'fs';
|
|
3
3
|
import path from 'path';
|
|
4
|
-
import {
|
|
5
|
-
import { PrompterConfig, AVAILABLE_PROMPTS, PROMPTER_DIR } from '../core/config.js';
|
|
4
|
+
import { PrompterConfig } from '../core/config.js';
|
|
6
5
|
import { registry } from '../core/configurators/slash/index.js';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
6
|
+
import { fetchAndCacheSkills, RegistryAuthError } from '../core/registry.js';
|
|
7
|
+
import { getToken } from '../core/auth-store.js';
|
|
9
8
|
export class UpdateCommand {
|
|
10
9
|
async execute() {
|
|
11
10
|
const projectPath = process.cwd();
|
|
@@ -26,9 +25,22 @@ export class UpdateCommand {
|
|
|
26
25
|
return;
|
|
27
26
|
}
|
|
28
27
|
let updatedCount = 0;
|
|
29
|
-
//
|
|
30
|
-
const
|
|
31
|
-
|
|
28
|
+
// Fetch skills from registry (falls back to local cache)
|
|
29
|
+
const token = await getToken();
|
|
30
|
+
let availableSkills = await (async () => {
|
|
31
|
+
try {
|
|
32
|
+
return await fetchAndCacheSkills(token);
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
if (err instanceof RegistryAuthError) {
|
|
36
|
+
console.log(chalk.yellow(`\n⚠ ${err.message}`));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
console.log(chalk.yellow('\n⚠ ' + err.message));
|
|
40
|
+
}
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
})();
|
|
32
44
|
for (const toolId of configuredTools) {
|
|
33
45
|
const configurator = registry.get(toolId);
|
|
34
46
|
if (!configurator)
|
|
@@ -46,13 +58,6 @@ export class UpdateCommand {
|
|
|
46
58
|
console.log(chalk.red('✗') + ` Failed to update ${configurator.toolId}: ${error}`);
|
|
47
59
|
}
|
|
48
60
|
}
|
|
49
|
-
// Update existing prompts in prompter/core/
|
|
50
|
-
const prompterPath = path.join(projectPath, PROMPTER_DIR);
|
|
51
|
-
const updatedCorePrompts = await this.updateCorePrompts(prompterPath);
|
|
52
|
-
for (const promptName of updatedCorePrompts) {
|
|
53
|
-
console.log(chalk.green('✓') + ` Updated ${chalk.cyan(`${PROMPTER_DIR}/core/${promptName}`)}`);
|
|
54
|
-
updatedCount++;
|
|
55
|
-
}
|
|
56
61
|
if (updatedCount === 0) {
|
|
57
62
|
console.log(chalk.yellow('⚠️ No workflow files found to update.'));
|
|
58
63
|
console.log(chalk.gray(' Run `prompter init` to create them.\n'));
|
|
@@ -61,15 +66,6 @@ export class UpdateCommand {
|
|
|
61
66
|
console.log(chalk.green(`\n✅ ${updatedCount} file(s) updated.\n`));
|
|
62
67
|
}
|
|
63
68
|
}
|
|
64
|
-
async fileExists(filePath) {
|
|
65
|
-
try {
|
|
66
|
-
await fs.access(filePath);
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
return false;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
69
|
async detectConfiguredTools(projectPath) {
|
|
74
70
|
const configuredTools = [];
|
|
75
71
|
const allConfigurators = registry.getAll();
|
|
@@ -86,30 +82,5 @@ export class UpdateCommand {
|
|
|
86
82
|
}
|
|
87
83
|
return configuredTools;
|
|
88
84
|
}
|
|
89
|
-
async updateCorePrompts(prompterPath) {
|
|
90
|
-
const updatedPrompts = [];
|
|
91
|
-
const corePath = path.join(prompterPath, 'core');
|
|
92
|
-
if (!await this.fileExists(corePath)) {
|
|
93
|
-
return updatedPrompts;
|
|
94
|
-
}
|
|
95
|
-
for (const prompt of AVAILABLE_PROMPTS) {
|
|
96
|
-
const promptFilePath = path.join(corePath, prompt.sourceFile);
|
|
97
|
-
if (await this.fileExists(promptFilePath)) {
|
|
98
|
-
try {
|
|
99
|
-
const content = PROMPT_TEMPLATES[prompt.value];
|
|
100
|
-
if (!content) {
|
|
101
|
-
console.log(chalk.yellow(` Warning: Template not found for ${prompt.name}`));
|
|
102
|
-
continue;
|
|
103
|
-
}
|
|
104
|
-
await fs.writeFile(promptFilePath, content, 'utf-8');
|
|
105
|
-
updatedPrompts.push(prompt.sourceFile);
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
console.log(chalk.red(` Error updating ${prompt.name}: ${error}`));
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
return updatedPrompts;
|
|
113
|
-
}
|
|
114
85
|
}
|
|
115
86
|
//# 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,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,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"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -9,14 +9,7 @@ export interface ToolChoice {
|
|
|
9
9
|
available: boolean;
|
|
10
10
|
successLabel: string;
|
|
11
11
|
}
|
|
12
|
-
export interface PromptChoice {
|
|
13
|
-
name: string;
|
|
14
|
-
value: string;
|
|
15
|
-
description: string;
|
|
16
|
-
sourceFile: string;
|
|
17
|
-
}
|
|
18
12
|
export declare const SUPPORTED_TOOLS: ToolChoice[];
|
|
19
|
-
export declare const AVAILABLE_PROMPTS: PromptChoice[];
|
|
20
13
|
export declare class PrompterConfig {
|
|
21
14
|
static ensurePrompterDir(projectPath: string): Promise<string>;
|
|
22
15
|
static prompterDirExists(projectPath: string): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,aAAa,CAAC;AAEvC,eAAO,MAAM,gBAAgB;;;CAG5B,CAAC;AAEF,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,aAAa,CAAC;AAEvC,eAAO,MAAM,gBAAgB;;;CAG5B,CAAC;AAEF,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,eAAe,EAAE,UAAU,EASvC,CAAC;AAGF,qBAAa,cAAc;WACV,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAMvD,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CASxE"}
|
package/dist/core/config.js
CHANGED
|
@@ -15,134 +15,6 @@ export const SUPPORTED_TOOLS = [
|
|
|
15
15
|
{ name: 'Forge', value: 'forge', available: true, successLabel: 'Forge' },
|
|
16
16
|
{ name: 'Droid', value: 'droid', available: true, successLabel: 'Droid' }
|
|
17
17
|
];
|
|
18
|
-
export const AVAILABLE_PROMPTS = [
|
|
19
|
-
{
|
|
20
|
-
name: 'AI Humanizer',
|
|
21
|
-
value: 'ai-humanizer',
|
|
22
|
-
description: 'Transform AI-generated text into natural, human-like content',
|
|
23
|
-
sourceFile: 'ai-humanizer.md'
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
name: 'API Contract Generator',
|
|
27
|
-
value: 'api-contract-generator',
|
|
28
|
-
description: 'Generate OpenAPI specification from FSD and ERD',
|
|
29
|
-
sourceFile: 'api-contract-generator.md'
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
name: 'Apply',
|
|
33
|
-
value: 'apply',
|
|
34
|
-
description: 'Implement and apply an approved change proposal',
|
|
35
|
-
sourceFile: 'apply.md'
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
name: 'Archive',
|
|
39
|
-
value: 'archive',
|
|
40
|
-
description: 'Archive a completed change and update specs',
|
|
41
|
-
sourceFile: 'archive.md'
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
name: 'Design System',
|
|
45
|
-
value: 'design-system',
|
|
46
|
-
description: 'Generate comprehensive design system documentation for components and tokens',
|
|
47
|
-
sourceFile: 'design-system.md'
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
name: 'Document Explainer',
|
|
51
|
-
value: 'document-explainer',
|
|
52
|
-
description: 'Analyze and explain complex documents into clear, actionable insights',
|
|
53
|
-
sourceFile: 'document-explainer.md'
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
name: 'Epic (Single)',
|
|
57
|
-
value: 'epic-single',
|
|
58
|
-
description: 'Generate comprehensive epic documentation',
|
|
59
|
-
sourceFile: 'epic-single.md'
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
name: 'Epic Generator',
|
|
63
|
-
value: 'epic-generator',
|
|
64
|
-
description: 'Generate comprehensive EPICs from FSD and TDD documentation',
|
|
65
|
-
sourceFile: 'epic-generator.md'
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
name: 'ERD Generator',
|
|
69
|
-
value: 'erd-generator',
|
|
70
|
-
description: 'Generate Entity Relationship Diagram from FSD',
|
|
71
|
-
sourceFile: 'erd-generator.md'
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
name: 'FSD Generator',
|
|
75
|
-
value: 'fsd-generator',
|
|
76
|
-
description: 'Generate Functional Specification Document from PRD',
|
|
77
|
-
sourceFile: 'fsd-generator.md'
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
name: 'PRD Agent Generator',
|
|
81
|
-
value: 'prd-agent-generator',
|
|
82
|
-
description: 'Create AGENT.md files with Product Requirements Document prompts',
|
|
83
|
-
sourceFile: 'prd-agent-generator.md'
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
name: 'PRD Generator',
|
|
87
|
-
value: 'prd-generator',
|
|
88
|
-
description: 'Generate detailed Product Requirements Documents',
|
|
89
|
-
sourceFile: 'prd-generator.md'
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
name: 'Product Brief',
|
|
93
|
-
value: 'product-brief',
|
|
94
|
-
description: 'Create concise product brief documents',
|
|
95
|
-
sourceFile: 'product-brief.md'
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
name: 'Proposal',
|
|
99
|
-
value: 'proposal',
|
|
100
|
-
description: 'Create a new change proposal with spec deltas',
|
|
101
|
-
sourceFile: 'proposal.md'
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
name: 'QA Test Scenario',
|
|
105
|
-
value: 'qa-test-scenario',
|
|
106
|
-
description: 'Generate comprehensive test scenarios and test cases',
|
|
107
|
-
sourceFile: 'qa-test-scenario.md'
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
name: 'Skill Creator',
|
|
111
|
-
value: 'skill-creator',
|
|
112
|
-
description: 'Create structured skill documentation for AI agents',
|
|
113
|
-
sourceFile: 'skill-creator.md'
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
name: 'Story (Single)',
|
|
117
|
-
value: 'story-single',
|
|
118
|
-
description: 'Generate detailed user story documentation',
|
|
119
|
-
sourceFile: 'story-single.md'
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
name: 'Story Generator',
|
|
123
|
-
value: 'story-generator',
|
|
124
|
-
description: 'Generate comprehensive user stories from EPICs and FSD',
|
|
125
|
-
sourceFile: 'story-generator.md'
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
name: 'TDD Generator',
|
|
129
|
-
value: 'tdd-generator',
|
|
130
|
-
description: 'Generate comprehensive Technical Design Document',
|
|
131
|
-
sourceFile: 'tdd-generator.md'
|
|
132
|
-
},
|
|
133
|
-
{
|
|
134
|
-
name: 'TDD-Lite Generator',
|
|
135
|
-
value: 'tdd-lite-generator',
|
|
136
|
-
description: 'Generate lean Technical Design Document (TDD-Lite)',
|
|
137
|
-
sourceFile: 'tdd-lite-generator.md'
|
|
138
|
-
},
|
|
139
|
-
{
|
|
140
|
-
name: 'Wireframe Generator',
|
|
141
|
-
value: 'wireframe-generator',
|
|
142
|
-
description: 'Generate UI/UX wireframes from technical specs',
|
|
143
|
-
sourceFile: 'wireframe-generator.md'
|
|
144
|
-
}
|
|
145
|
-
];
|
|
146
18
|
export class PrompterConfig {
|
|
147
19
|
static async ensurePrompterDir(projectPath) {
|
|
148
20
|
const prompterPath = path.join(projectPath, PROMPTER_DIR);
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AAEvC,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,KAAK,EAAE,iCAAiC;IACxC,GAAG,EAAE,+BAA+B;CACvC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AAEvC,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,KAAK,EAAE,iCAAiC;IACxC,GAAG,EAAE,+BAA+B;CACvC,CAAC;AASF,MAAM,CAAC,MAAM,eAAe,GAAiB;IACzC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE;IAC3F,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE;IACtF,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE;IACzE,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE;IACpG,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE;IAClF,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE;IACpF,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE;IACzE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE;CAC5E,CAAC;AAGF,MAAM,OAAO,cAAc;IACvB,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAC1D,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QAC9C,IAAI,CAAC;YACD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAC1D,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SkillMetadata } from './skill-discovery.js';
|
|
2
|
+
export declare function getRegistryUrl(): string;
|
|
3
|
+
interface SkillEntry {
|
|
4
|
+
name: string;
|
|
5
|
+
files: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function fetchSkillList(token?: string | null): Promise<SkillEntry[]>;
|
|
8
|
+
export declare class RegistryAuthError extends Error {
|
|
9
|
+
constructor(message: string);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Fetch skill list from registry, download all skill files to local cache,
|
|
13
|
+
* and return SkillMetadata[] compatible with discoverSkills() output.
|
|
14
|
+
* Falls back to local cache on network failure.
|
|
15
|
+
*/
|
|
16
|
+
export declare function fetchAndCacheSkills(token?: string | null): Promise<SkillMetadata[]>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAMrD,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,UAAU,UAAU;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB;AAUD,wBAAsB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAajF;AAkCD,qBAAa,iBAAkB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI9B;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA6BzF"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import os from 'os';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
const DEFAULT_REGISTRY_URL = 'https://anvil.bezhoe.id/api/prompter';
|
|
6
|
+
const CACHE_DIR = path.join(os.homedir(), '.prompter', 'cache', 'skills');
|
|
7
|
+
const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
8
|
+
export function getRegistryUrl() {
|
|
9
|
+
return process.env.PROMPTER_REGISTRY_URL ?? DEFAULT_REGISTRY_URL;
|
|
10
|
+
}
|
|
11
|
+
function authHeaders(token) {
|
|
12
|
+
return token ? { Authorization: `Bearer ${token}` } : {};
|
|
13
|
+
}
|
|
14
|
+
export async function fetchSkillList(token) {
|
|
15
|
+
const url = `${getRegistryUrl()}/index.json`;
|
|
16
|
+
const res = await fetch(url, { headers: authHeaders(token) });
|
|
17
|
+
if (res.status === 401) {
|
|
18
|
+
throw new RegistryAuthError('Session expired. Run `prompter login`.');
|
|
19
|
+
}
|
|
20
|
+
if (!res.ok) {
|
|
21
|
+
throw new Error(`Registry returned ${res.status} for ${url}`);
|
|
22
|
+
}
|
|
23
|
+
const body = await res.json();
|
|
24
|
+
return body.skills ?? [];
|
|
25
|
+
}
|
|
26
|
+
async function isCacheFresh(skillCacheDir) {
|
|
27
|
+
try {
|
|
28
|
+
const skillMd = path.join(skillCacheDir, 'SKILL.md');
|
|
29
|
+
const stat = await fs.stat(skillMd);
|
|
30
|
+
return Date.now() - stat.mtimeMs < CACHE_TTL_MS;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function downloadSkill(entry, token) {
|
|
37
|
+
const skillCacheDir = path.join(CACHE_DIR, entry.name);
|
|
38
|
+
if (await isCacheFresh(skillCacheDir))
|
|
39
|
+
return;
|
|
40
|
+
await fs.mkdir(skillCacheDir, { recursive: true });
|
|
41
|
+
const files = entry.files.includes('SKILL.md') ? entry.files : ['SKILL.md', ...entry.files];
|
|
42
|
+
const registryUrl = getRegistryUrl();
|
|
43
|
+
for (const file of files) {
|
|
44
|
+
const url = `${registryUrl}/${entry.name}/${file}`;
|
|
45
|
+
const res = await fetch(url, { headers: authHeaders(token) });
|
|
46
|
+
if (res.status === 401)
|
|
47
|
+
throw new RegistryAuthError('Session expired. Run `prompter login`.');
|
|
48
|
+
if (!res.ok)
|
|
49
|
+
continue; // skip non-critical files silently
|
|
50
|
+
const content = await res.text();
|
|
51
|
+
await fs.writeFile(path.join(skillCacheDir, file), content, 'utf-8');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export class RegistryAuthError extends Error {
|
|
55
|
+
constructor(message) {
|
|
56
|
+
super(message);
|
|
57
|
+
this.name = 'RegistryAuthError';
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Fetch skill list from registry, download all skill files to local cache,
|
|
62
|
+
* and return SkillMetadata[] compatible with discoverSkills() output.
|
|
63
|
+
* Falls back to local cache on network failure.
|
|
64
|
+
*/
|
|
65
|
+
export async function fetchAndCacheSkills(token) {
|
|
66
|
+
let entries;
|
|
67
|
+
let usingCache = false;
|
|
68
|
+
try {
|
|
69
|
+
entries = await fetchSkillList(token);
|
|
70
|
+
await Promise.all(entries.map(e => downloadSkill(e, token)));
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
if (err instanceof RegistryAuthError)
|
|
74
|
+
throw err;
|
|
75
|
+
// Network failure — fall back to cache
|
|
76
|
+
const cached = await loadFromCache();
|
|
77
|
+
if (cached.length > 0) {
|
|
78
|
+
console.log(chalk.yellow('⚠ Registry unreachable — using cached skills.'));
|
|
79
|
+
usingCache = true;
|
|
80
|
+
return cached;
|
|
81
|
+
}
|
|
82
|
+
throw new Error(`Could not reach registry at ${getRegistryUrl()} and no local cache found.\n` +
|
|
83
|
+
` Check your internet connection or run with --offline to skip skill selection.`);
|
|
84
|
+
}
|
|
85
|
+
if (!usingCache) {
|
|
86
|
+
return loadFromCache();
|
|
87
|
+
}
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
async function loadFromCache() {
|
|
91
|
+
const { discoverSkills } = await import('./skill-discovery.js');
|
|
92
|
+
return discoverSkills(CACHE_DIR);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dedesfr/prompter",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Enhance prompts directly in your AI coding workflow",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist/",
|
|
9
|
+
"bin/",
|
|
10
|
+
"README.md",
|
|
11
|
+
"CHANGELOG.md"
|
|
12
|
+
],
|
|
7
13
|
"bin": {
|
|
8
14
|
"prompter": "./bin/prompter.js"
|
|
9
15
|
},
|