@prompts-gpt/client 0.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 ADDED
@@ -0,0 +1,15 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0 (2026-05-16)
4
+
5
+ Initial release.
6
+
7
+ - **CLI commands:** `init`, `pull`, `generate`, `sync`, `install-agents`, `project`, `version`, `help`
8
+ - **SDK client:** `PromptsGptClient` with `getProject()`, `pullPrompts()`, `generatePrompt()`
9
+ - **Agent sync:** Writes agent-readable files for Codex (`AGENTS.md`), Cursor (`.cursor/rules/`), VS Code (`.github/copilot-instructions.md`, `.vscode/`), and Copilot (`.github/prompts/`)
10
+ - **Prompt Markdown files:** Written to `.prompts-gpt/` with YAML frontmatter
11
+ - **Manifest:** `manifest.json` for local agent discovery
12
+ - **Credentials:** Saved to `.prompts-gpt/.credentials.json` with `0600` permissions, auto-added to `.gitignore`
13
+ - **Retry logic:** Automatic retries with jitter for 429/502/503/504 responses and network errors
14
+ - **Input validation:** Client-side validation for `goal` length, `context` length, and `tool` values
15
+ - **Security:** Token prefix validation, HTTPS enforcement, path traversal protection
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Prompts-GPT
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,171 @@
1
+ # @prompts-gpt/client
2
+
3
+ CLI and SDK for downloading Prompts-GPT prompt packs into a local project and syncing them into agent-readable files for Codex, Cursor, VS Code, and GitHub Copilot.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ # Initialize with a project token
9
+ npx @prompts-gpt/client init --token <project-token>
10
+
11
+ # Sync prompt packs and agent files
12
+ npx @prompts-gpt/client sync --limit 25 --agent all
13
+
14
+ # Generate a project-aware prompt
15
+ npx @prompts-gpt/client generate --goal "Review this diff" --context "Next.js app" --agent codex,cursor,vscode
16
+ ```
17
+
18
+ ## Installation
19
+
20
+ ```bash
21
+ npm install @prompts-gpt/client
22
+ ```
23
+
24
+ Or use directly with `npx`:
25
+
26
+ ```bash
27
+ npx @prompts-gpt/client <command>
28
+ ```
29
+
30
+ **Requirements:** Node.js >= 18.18
31
+
32
+ ## Authentication
33
+
34
+ Create a project token in the [Prompts-GPT dashboard](https://prompts-gpt.com/dashboard/agents), then initialize:
35
+
36
+ ```bash
37
+ prompts-gpt init --token pgpt_your_token_here
38
+ ```
39
+
40
+ This saves credentials to `.prompts-gpt/.credentials.json` (automatically added to `.gitignore`).
41
+
42
+ Alternatively, set the `PROMPTS_GPT_TOKEN` environment variable.
43
+
44
+ ## CLI Commands
45
+
46
+ ### `init`
47
+
48
+ Save a project token to the local credentials file.
49
+
50
+ ```bash
51
+ prompts-gpt init --token <token> [--api-url https://prompts-gpt.com] [--cwd /path/to/repo]
52
+ ```
53
+
54
+ ### `pull`
55
+
56
+ Download prompt packs from the library.
57
+
58
+ ```bash
59
+ prompts-gpt pull [--query "repo audit"] [--category coding] [--tool Codex] [--limit 25] [--out .prompts-gpt] [--overwrite]
60
+ ```
61
+
62
+ ### `generate`
63
+
64
+ Generate a project-aware prompt via the API.
65
+
66
+ ```bash
67
+ prompts-gpt generate --goal "Review this diff" [--context "Next.js app"] [--tool Codex] [--agent codex,cursor]
68
+ ```
69
+
70
+ ### `sync`
71
+
72
+ Pull library prompts and/or generate a prompt, then write Markdown files, agent integration files, and a manifest.
73
+
74
+ ```bash
75
+ prompts-gpt sync [--goal "Review this diff"] [--limit 25] [--agent all] [--out .prompts-gpt] [--overwrite]
76
+ ```
77
+
78
+ ### `install-agents`
79
+
80
+ Pull prompts and write only the agent integration files (no Markdown).
81
+
82
+ ```bash
83
+ prompts-gpt install-agents [--agent codex,cursor,vscode,copilot]
84
+ ```
85
+
86
+ ### `project`
87
+
88
+ Print the project name and website from the API.
89
+
90
+ ```bash
91
+ prompts-gpt project
92
+ ```
93
+
94
+ ## Programmatic Usage
95
+
96
+ ```typescript
97
+ import { PromptsGptClient, syncPrompts } from "@prompts-gpt/client";
98
+
99
+ const client = new PromptsGptClient({
100
+ token: process.env.PROMPTS_GPT_TOKEN,
101
+ });
102
+
103
+ // Fetch project context
104
+ const project = await client.getProject();
105
+ console.log(project.brandName);
106
+
107
+ // Pull prompt packs
108
+ const prompts = await client.pullPrompts({ limit: 10, tool: "Codex" });
109
+
110
+ // Generate a prompt
111
+ const generated = await client.generatePrompt({
112
+ goal: "Review production diffs for security issues",
113
+ context: "Node.js microservice with PostgreSQL",
114
+ tool: "Codex",
115
+ });
116
+
117
+ // Sync everything to disk
118
+ const result = await syncPrompts([...prompts, generated], {
119
+ agent: "all",
120
+ overwrite: true,
121
+ });
122
+ ```
123
+
124
+ ## Generated Files
125
+
126
+ | Target | Files | Description |
127
+ |--------|-------|-------------|
128
+ | Markdown | `.prompts-gpt/*.md` | Prompt packs with YAML frontmatter |
129
+ | Manifest | `.prompts-gpt/manifest.json` | Index for agent discovery |
130
+ | Codex | `AGENTS.md` | Managed block with prompt-pack links |
131
+ | Cursor | `.cursor/rules/prompts-gpt-*.mdc` | Per-prompt rule files |
132
+ | VS Code | `.github/copilot-instructions.md`, `.vscode/*.code-snippets` | Copilot instructions and snippets |
133
+ | Copilot | `.github/prompts/*.prompt.md` | Prompt files for GitHub Copilot |
134
+
135
+ ## Configuration
136
+
137
+ | Environment Variable | Description |
138
+ |---------------------|-------------|
139
+ | `PROMPTS_GPT_TOKEN` | Project API token (alternative to `init`) |
140
+ | `PROMPTS_GPT_API_URL` | Custom API base URL for self-hosted instances |
141
+
142
+ ## Error Handling
143
+
144
+ The client throws `PromptsGptApiError` for API errors with structured fields:
145
+
146
+ ```typescript
147
+ import { PromptsGptApiError } from "@prompts-gpt/client";
148
+
149
+ try {
150
+ await client.pullPrompts();
151
+ } catch (error) {
152
+ if (error instanceof PromptsGptApiError) {
153
+ console.error(error.message); // Human-readable message
154
+ console.error(error.code); // Machine-readable code (e.g. AUTH_ERROR)
155
+ console.error(error.status); // HTTP status code
156
+ console.error(error.recovery); // Suggested fix
157
+ }
158
+ }
159
+ ```
160
+
161
+ ## Security
162
+
163
+ - Credentials are stored with `0600` file permissions
164
+ - Tokens are validated to start with the `pgpt_` prefix before sending
165
+ - HTTPS is enforced in production
166
+ - Path traversal is blocked for all file writes
167
+ - Project context sent to `generate` is ephemeral and not persisted
168
+
169
+ ## License
170
+
171
+ MIT
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,230 @@
1
+ #!/usr/bin/env node
2
+ import { DEFAULT_PROMPTS_GPT_API_URL, DEFAULT_PROMPTS_GPT_OUT_DIR, PromptsGptApiError, PromptsGptClient, SUPPORTED_AGENT_TARGETS, loadLocalCredentials, saveLocalCredentials, syncPrompts, writeAgentFiles, writePromptMarkdownFiles, } from "./index.js";
3
+ const CLI_EXIT_CODES = { success: 0, general: 1, auth: 2, validation: 3 };
4
+ const VALID_TOOLS = ["Codex", "Claude Code", "Cursor", "GitHub Copilot", "ChatGPT", "Gemini", "Perplexity", "Grok", "DeepSeek", "Claude"];
5
+ async function main() {
6
+ const [command, ...args] = process.argv.slice(2);
7
+ const flags = parseFlags(args);
8
+ if (!command || command === "help" || flags.help) {
9
+ printHelp();
10
+ return;
11
+ }
12
+ if (command === "version" || command === "--version" || flags.version) {
13
+ const version = await getCliVersion();
14
+ console.log(`@prompts-gpt/client v${version}`);
15
+ return;
16
+ }
17
+ if (command === "init") {
18
+ const token = (flags.token || process.env.PROMPTS_GPT_TOKEN);
19
+ if (!token)
20
+ throw new Error("Run `prompts-gpt init --token <project-token>`.");
21
+ if (typeof token !== "string" || token.length > 256)
22
+ throw new Error("Token value is invalid or too long.");
23
+ const result = await saveLocalCredentials({
24
+ token,
25
+ apiUrl: flags.apiUrl || DEFAULT_PROMPTS_GPT_API_URL,
26
+ cwd: flags.cwd || process.cwd(),
27
+ });
28
+ console.log(`Saved Prompts-GPT credentials to ${result.credentialsPath}`);
29
+ console.log("The credentials file is added to .gitignore.");
30
+ return;
31
+ }
32
+ const cwd = flags.cwd || process.cwd();
33
+ const credentials = await loadLocalCredentials(cwd);
34
+ const client = new PromptsGptClient({
35
+ token: flags.token || credentials?.token || process.env.PROMPTS_GPT_TOKEN,
36
+ apiUrl: flags.apiUrl || credentials?.apiUrl || DEFAULT_PROMPTS_GPT_API_URL,
37
+ });
38
+ if (command === "project") {
39
+ const project = await client.getProject();
40
+ console.log(`${project.brandName} (${project.websiteUrl})`);
41
+ return;
42
+ }
43
+ if (command === "pull") {
44
+ const prompts = await client.pullPrompts(buildPullQuery(flags));
45
+ const result = await writePromptMarkdownFiles(prompts, {
46
+ cwd,
47
+ outDir: flags.out || DEFAULT_PROMPTS_GPT_OUT_DIR,
48
+ overwrite: Boolean(flags.overwrite),
49
+ });
50
+ console.log(`Wrote ${result.written.length} prompt file(s) to ${result.outDir}.`);
51
+ if (result.skipped.length)
52
+ console.log(`Skipped ${result.skipped.length} existing file(s). Use --overwrite to replace them.`);
53
+ return;
54
+ }
55
+ if (command === "generate") {
56
+ validateToolFlag(flags.tool);
57
+ const prompt = await generatePromptFromFlags(client, flags);
58
+ const result = await writePromptMarkdownFiles([prompt], {
59
+ cwd,
60
+ outDir: flags.out || DEFAULT_PROMPTS_GPT_OUT_DIR,
61
+ overwrite: Boolean(flags.overwrite),
62
+ });
63
+ const agentFlag = (flags.agent || flags.agents || flags.syncAgents);
64
+ if (agentFlag) {
65
+ const agentResult = await writeAgentFiles([prompt], {
66
+ cwd,
67
+ agent: typeof agentFlag === "string" ? agentFlag : "all",
68
+ overwriteAgentFiles: true,
69
+ });
70
+ console.log(`Synced ${agentResult.written.length} agent file(s) for ${agentResult.targets.join(", ")}.`);
71
+ }
72
+ console.log(`Wrote generated prompt to ${result.written[0] ?? result.outDir}.`);
73
+ if (result.skipped.length)
74
+ console.log("Skipped existing generated prompt. Use --overwrite to replace it.");
75
+ return;
76
+ }
77
+ if (command === "sync") {
78
+ validateToolFlag(flags.tool);
79
+ const prompts = [];
80
+ if (flags.goal) {
81
+ prompts.push(await generatePromptFromFlags(client, flags));
82
+ }
83
+ if (!flags.generatedOnly) {
84
+ prompts.push(...await client.pullPrompts(buildPullQuery(flags)));
85
+ }
86
+ if (prompts.length === 0)
87
+ throw new Error("No prompts to sync. Provide --goal or remove --generated-only.");
88
+ const result = await syncPrompts(prompts, {
89
+ cwd,
90
+ outDir: flags.out || DEFAULT_PROMPTS_GPT_OUT_DIR,
91
+ overwrite: Boolean(flags.overwrite),
92
+ agent: flags.agent || flags.agents || "all",
93
+ });
94
+ console.log(`Synced ${result.markdown.written.length} Markdown prompt file(s) to ${result.markdown.outDir}.`);
95
+ console.log(`Synced ${result.agents.written.length} agent integration file(s): ${result.agents.targets.join(", ")}.`);
96
+ console.log(`Updated manifest: ${result.manifest.manifestPath}`);
97
+ if (result.markdown.skipped.length)
98
+ console.log(`Skipped ${result.markdown.skipped.length} existing Markdown file(s). Use --overwrite to replace them.`);
99
+ return;
100
+ }
101
+ if (command === "install-agents") {
102
+ const prompts = await client.pullPrompts(buildPullQuery(flags));
103
+ const result = await writeAgentFiles(prompts, {
104
+ cwd,
105
+ agent: flags.agent || flags.agents || "all",
106
+ overwriteAgentFiles: true,
107
+ });
108
+ console.log(`Synced ${result.written.length} agent integration file(s): ${result.targets.join(", ")}.`);
109
+ return;
110
+ }
111
+ throw new Error(`Unknown command: ${command}. Run \`prompts-gpt help\` for usage.`);
112
+ }
113
+ function buildPullQuery(flags) {
114
+ return {
115
+ q: (flags.query || flags.q),
116
+ category: flags.category,
117
+ tool: flags.tool,
118
+ outputType: flags.outputType,
119
+ limit: flags.limit,
120
+ };
121
+ }
122
+ function validateToolFlag(tool) {
123
+ if (!tool)
124
+ return;
125
+ const validSet = new Set(VALID_TOOLS);
126
+ if (!validSet.has(tool)) {
127
+ throw new Error(`Invalid --tool "${tool}". Valid tools: ${VALID_TOOLS.join(", ")}.`);
128
+ }
129
+ }
130
+ async function generatePromptFromFlags(client, flags) {
131
+ const goal = flags.goal;
132
+ if (!goal)
133
+ throw new Error("Prompt generation requires --goal.");
134
+ return client.generatePrompt({
135
+ goal,
136
+ context: flags.context || "",
137
+ constraints: flags.constraints || "",
138
+ desiredOutput: flags.desiredOutput || "A reusable prompt pack saved as Markdown.",
139
+ tool: flags.tool || "Codex",
140
+ mode: flags.mode || "implement",
141
+ artifactType: flags.artifactType || "prompt-file",
142
+ includeWebSearch: Boolean(flags.webSearch),
143
+ });
144
+ }
145
+ const MAX_FLAG_VALUE_LENGTH = 2000;
146
+ function parseFlags(args) {
147
+ const flags = {};
148
+ for (let index = 0; index < args.length; index += 1) {
149
+ const arg = args[index];
150
+ if (!arg.startsWith("--"))
151
+ continue;
152
+ const eqIndex = arg.indexOf("=");
153
+ if (eqIndex !== -1) {
154
+ const key = normalizeFlag(arg.slice(2, eqIndex));
155
+ if (!key || key.length > 64)
156
+ continue;
157
+ flags[key] = arg.slice(eqIndex + 1).slice(0, MAX_FLAG_VALUE_LENGTH);
158
+ continue;
159
+ }
160
+ const key = normalizeFlag(arg.slice(2));
161
+ if (!key || key.length > 64)
162
+ continue;
163
+ const next = args[index + 1];
164
+ if (!next || next.startsWith("--")) {
165
+ flags[key] = true;
166
+ }
167
+ else {
168
+ flags[key] = String(next).slice(0, MAX_FLAG_VALUE_LENGTH);
169
+ index += 1;
170
+ }
171
+ }
172
+ return flags;
173
+ }
174
+ function normalizeFlag(raw) {
175
+ return raw.replace(/-([a-z])/g, (_, char) => char.toUpperCase());
176
+ }
177
+ async function getCliVersion() {
178
+ try {
179
+ const { readFile } = await import("node:fs/promises");
180
+ const pkg = JSON.parse(await readFile(new URL("../package.json", import.meta.url), "utf8"));
181
+ return pkg.version ?? "0.0.0";
182
+ }
183
+ catch {
184
+ return "0.0.0";
185
+ }
186
+ }
187
+ function printHelp() {
188
+ console.log(`Prompts-GPT CLI
189
+
190
+ Commands:
191
+ prompts-gpt init --token <token> [--api-url https://prompts-gpt.com] [--cwd /path/to/repo]
192
+ prompts-gpt version
193
+ prompts-gpt project
194
+ prompts-gpt pull [--query "repo audit"] [--category coding] [--tool Codex] [--limit 25] [--out .prompts-gpt] [--overwrite]
195
+ prompts-gpt generate --goal "Review this diff" [--context "Next.js app"] [--agent codex,cursor,vscode]
196
+ prompts-gpt sync [--goal "Review this diff"] [--limit 25] [--agent all] [--out .prompts-gpt] [--cwd /path/to/repo]
197
+ prompts-gpt install-agents [--agent codex,cursor,vscode,copilot]
198
+
199
+ Options:
200
+ --token <token> Project API token (or set PROMPTS_GPT_TOKEN env var)
201
+ --api-url <url> Custom API base URL for self-hosted instances
202
+ --cwd <path> Target local project directory for config and generated files
203
+ --agent <targets> Comma-separated agent targets: codex,cursor,vscode,copilot or all
204
+ --help Show this help message
205
+ --version Show the current CLI version
206
+
207
+ Agent targets:
208
+ codex writes AGENTS.md with prompt-pack links
209
+ cursor writes .cursor/rules/prompts-gpt-*.mdc
210
+ vscode writes .github/copilot-instructions.md and .vscode snippets
211
+ copilot writes .github/prompts/*.prompt.md
212
+
213
+ Supported tools: ${VALID_TOOLS.join(", ")}
214
+ Supported agent targets: ${SUPPORTED_AGENT_TARGETS.join(", ")}
215
+ `);
216
+ }
217
+ main().catch((error) => {
218
+ if (error instanceof PromptsGptApiError) {
219
+ console.error(`${error.message}\n${error.recovery}`);
220
+ process.exitCode = error.status === 401 || error.status === 403
221
+ ? CLI_EXIT_CODES.auth
222
+ : error.code === "VALIDATION_ERROR"
223
+ ? CLI_EXIT_CODES.validation
224
+ : CLI_EXIT_CODES.general;
225
+ return;
226
+ }
227
+ console.error(error instanceof Error ? error.message : String(error));
228
+ process.exitCode = CLI_EXIT_CODES.general;
229
+ });
230
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,167 @@
1
+ export declare const DEFAULT_PROMPTS_GPT_API_URL = "https://prompts-gpt.com";
2
+ export declare const DEFAULT_PROMPTS_GPT_OUT_DIR = ".prompts-gpt";
3
+ export declare const PROMPTS_GPT_CREDENTIALS_FILE = ".credentials.json";
4
+ export declare const PROMPTS_GPT_MANIFEST_FILE = "manifest.json";
5
+ export declare const SUPPORTED_AGENT_TARGETS: readonly ["codex", "cursor", "vscode", "copilot"];
6
+ export type AgentTarget = (typeof SUPPORTED_AGENT_TARGETS)[number] | "all";
7
+ export type PromptPack = {
8
+ slug: string;
9
+ title: string;
10
+ summary: string;
11
+ category: string;
12
+ promptText: string;
13
+ usageNotes: string;
14
+ variables: string[];
15
+ tags: string[];
16
+ supportedTools: string[];
17
+ outputType: string;
18
+ difficulty: string;
19
+ source: "library" | "generated";
20
+ agentTargets: string[];
21
+ recommendedPath: string;
22
+ };
23
+ export type ProjectContext = {
24
+ id: string;
25
+ brandName: string;
26
+ websiteUrl: string;
27
+ industryCategory: string;
28
+ targetCountries: string[];
29
+ targetLanguage: string;
30
+ brandAliases: string[];
31
+ productKeywords: string[];
32
+ targetPersonas: string[];
33
+ competitors: Array<{
34
+ name: string;
35
+ websiteUrl: string | null;
36
+ aliases: string[];
37
+ }>;
38
+ };
39
+ export declare class PromptsGptApiError extends Error {
40
+ status: number;
41
+ code: string;
42
+ recovery: string;
43
+ constructor(message: string, options?: {
44
+ status?: number;
45
+ code?: string;
46
+ recovery?: string;
47
+ });
48
+ }
49
+ type ClientOptions = {
50
+ apiUrl?: string;
51
+ token?: string;
52
+ fetch?: typeof fetch;
53
+ timeoutMs?: number;
54
+ };
55
+ export declare class PromptsGptClient {
56
+ private apiUrl;
57
+ private token;
58
+ private fetchImpl;
59
+ private timeoutMs;
60
+ constructor(options?: ClientOptions);
61
+ getProject(): Promise<ProjectContext>;
62
+ pullPrompts(query?: {
63
+ q?: string;
64
+ query?: string;
65
+ category?: string;
66
+ tool?: string;
67
+ outputType?: string;
68
+ limit?: number | string;
69
+ }): Promise<PromptPack[]>;
70
+ generatePrompt(input: {
71
+ goal: string;
72
+ context?: string;
73
+ constraints?: string;
74
+ desiredOutput?: string;
75
+ tool?: string;
76
+ mode?: string;
77
+ artifactType?: string;
78
+ includeWebSearch?: boolean;
79
+ }): Promise<PromptPack>;
80
+ private request;
81
+ }
82
+ export declare function saveLocalCredentials(input: {
83
+ token: string;
84
+ apiUrl?: string;
85
+ cwd?: string;
86
+ }): Promise<{
87
+ credentialsPath: string;
88
+ }>;
89
+ export declare function loadLocalCredentials(cwd?: string): Promise<{
90
+ token: string | null;
91
+ apiUrl: string;
92
+ } | null>;
93
+ export declare function syncPrompts(prompts: PromptPack[], options?: {
94
+ cwd?: string;
95
+ outDir?: string;
96
+ overwrite?: boolean;
97
+ agent?: AgentTarget | string;
98
+ agents?: AgentTarget | string;
99
+ }): Promise<{
100
+ markdown: {
101
+ outDir: string;
102
+ written: string[];
103
+ skipped: string[];
104
+ };
105
+ agents: {
106
+ written: string[];
107
+ skipped: string[];
108
+ targets: string[];
109
+ };
110
+ manifest: {
111
+ manifestPath: string;
112
+ manifest: {
113
+ version: number;
114
+ generatedAt: string;
115
+ count: number;
116
+ prompts: {
117
+ slug: string;
118
+ title: string;
119
+ source: "library" | "generated";
120
+ category: string;
121
+ supportedTools: string[];
122
+ file: string;
123
+ }[];
124
+ };
125
+ };
126
+ }>;
127
+ export declare function writePromptMarkdownFiles(prompts: PromptPack[], options?: {
128
+ cwd?: string;
129
+ outDir?: string;
130
+ overwrite?: boolean;
131
+ }): Promise<{
132
+ outDir: string;
133
+ written: string[];
134
+ skipped: string[];
135
+ }>;
136
+ export declare function writeAgentFiles(prompts: PromptPack[], options?: {
137
+ cwd?: string;
138
+ agent?: AgentTarget | string;
139
+ agents?: AgentTarget | string;
140
+ overwriteAgentFiles?: boolean;
141
+ }): Promise<{
142
+ written: string[];
143
+ skipped: string[];
144
+ targets: string[];
145
+ }>;
146
+ export declare function writePromptManifest(prompts: PromptPack[], options?: {
147
+ cwd?: string;
148
+ outDir?: string;
149
+ }): Promise<{
150
+ manifestPath: string;
151
+ manifest: {
152
+ version: number;
153
+ generatedAt: string;
154
+ count: number;
155
+ prompts: {
156
+ slug: string;
157
+ title: string;
158
+ source: "library" | "generated";
159
+ category: string;
160
+ supportedTools: string[];
161
+ file: string;
162
+ }[];
163
+ };
164
+ }>;
165
+ export declare function formatPromptMarkdown(prompt: PromptPack): string;
166
+ export {};
167
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,2BAA2B,4BAA4B,CAAC;AACrE,eAAO,MAAM,2BAA2B,iBAAiB,CAAC;AAC1D,eAAO,MAAM,4BAA4B,sBAAsB,CAAC;AAChE,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AACzD,eAAO,MAAM,uBAAuB,mDAAoD,CAAC;AAEzF,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;AAE3E,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;IAChC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CACpF,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;gBAEL,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;CAO7F;AAMD,KAAK,aAAa,GAAG;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAOF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,SAAS,CAAS;gBAEd,OAAO,GAAE,aAAkB;IAOjC,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IAKrC,WAAW,CAAC,KAAK,GAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAW9J,cAAc,CAAC,KAAK,EAAE;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,GAAG,OAAO,CAAC,UAAU,CAAC;YAiBT,OAAO;CAuEtB;AAyBD,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC,CAYxI;AAED,wBAAsB,oBAAoB,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAYxH;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAAA;CAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;GAKzL;AAED,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO;;;;GAqBzI;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAO;;;;GA+BtL;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO;;;;;;;;;;;;;;;GAoB/G;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAgC/D"}
package/dist/index.js ADDED
@@ -0,0 +1,461 @@
1
+ import { mkdir, readFile, writeFile } from "node:fs/promises";
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ export const DEFAULT_PROMPTS_GPT_API_URL = "https://prompts-gpt.com";
5
+ export const DEFAULT_PROMPTS_GPT_OUT_DIR = ".prompts-gpt";
6
+ export const PROMPTS_GPT_CREDENTIALS_FILE = ".credentials.json";
7
+ export const PROMPTS_GPT_MANIFEST_FILE = "manifest.json";
8
+ export const SUPPORTED_AGENT_TARGETS = ["codex", "cursor", "vscode", "copilot"];
9
+ export class PromptsGptApiError extends Error {
10
+ status;
11
+ code;
12
+ recovery;
13
+ constructor(message, options) {
14
+ super(message);
15
+ this.name = "PromptsGptApiError";
16
+ this.status = options?.status ?? 0;
17
+ this.code = options?.code ?? "UNKNOWN_ERROR";
18
+ this.recovery = options?.recovery ?? "Retry the request or create a fresh project token.";
19
+ }
20
+ }
21
+ const DEFAULT_TIMEOUT_MS = 30_000;
22
+ const MAX_RETRIES = 2;
23
+ const RETRYABLE_STATUS_CODES = new Set([429, 502, 503, 504]);
24
+ export class PromptsGptClient {
25
+ apiUrl;
26
+ token;
27
+ fetchImpl;
28
+ timeoutMs;
29
+ constructor(options = {}) {
30
+ this.apiUrl = safeNormalizeApiUrl(options.apiUrl ?? process.env.PROMPTS_GPT_API_URL ?? DEFAULT_PROMPTS_GPT_API_URL);
31
+ this.token = options.token ?? process.env.PROMPTS_GPT_TOKEN ?? null;
32
+ this.fetchImpl = options.fetch ?? globalThis.fetch;
33
+ this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
34
+ }
35
+ async getProject() {
36
+ const data = await this.request("/api/sdk/v1/project");
37
+ return data.project;
38
+ }
39
+ async pullPrompts(query = {}) {
40
+ const params = new URLSearchParams();
41
+ for (const [key, value] of Object.entries(query)) {
42
+ if (value === undefined || value === null || value === "")
43
+ continue;
44
+ params.set(key === "query" ? "q" : key, String(value));
45
+ }
46
+ const suffix = params.toString() ? `?${params.toString()}` : "";
47
+ const data = await this.request(`/api/sdk/v1/prompts${suffix}`);
48
+ return data.prompts;
49
+ }
50
+ async generatePrompt(input) {
51
+ if (!input.goal || input.goal.trim().length < 8) {
52
+ throw new PromptsGptApiError("Goal must be at least 8 characters.", { code: "VALIDATION_ERROR" });
53
+ }
54
+ if (input.goal.length > 160) {
55
+ throw new PromptsGptApiError("Goal must be 160 characters or fewer.", { code: "VALIDATION_ERROR" });
56
+ }
57
+ if (input.context && input.context.length > 1600) {
58
+ throw new PromptsGptApiError("Context must be 1600 characters or fewer.", { code: "VALIDATION_ERROR" });
59
+ }
60
+ const data = await this.request("/api/sdk/v1/prompts/generate", {
61
+ method: "POST",
62
+ body: input,
63
+ });
64
+ return data.prompt;
65
+ }
66
+ async request(pathname, options = {}, retryCount = 0) {
67
+ if (!this.token) {
68
+ throw new PromptsGptApiError("Project token is missing.", {
69
+ status: 401,
70
+ code: "AUTH_ERROR",
71
+ recovery: "Run `prompts-gpt init --token <token>` or set PROMPTS_GPT_TOKEN.",
72
+ });
73
+ }
74
+ const fetchFn = this.fetchImpl;
75
+ if (typeof fetchFn !== "function") {
76
+ throw new PromptsGptApiError("A fetch implementation is required. Use Node 18.18+ or pass fetch in the client options.", {
77
+ code: "MISSING_FETCH",
78
+ });
79
+ }
80
+ const controller = new AbortController();
81
+ const timeout = setTimeout(() => controller.abort(), this.timeoutMs);
82
+ try {
83
+ const response = await fetchFn(new URL(pathname, this.apiUrl), {
84
+ method: options.method ?? "GET",
85
+ headers: {
86
+ authorization: `Bearer ${this.token}`,
87
+ "user-agent": `prompts-gpt-client/${getClientVersion()}`,
88
+ ...(options.body ? { "content-type": "application/json" } : {}),
89
+ },
90
+ body: options.body ? JSON.stringify(options.body) : undefined,
91
+ signal: controller.signal,
92
+ });
93
+ const payload = await response.json().catch(() => null);
94
+ if (!response.ok || !payload?.ok) {
95
+ if (retryCount < MAX_RETRIES && RETRYABLE_STATUS_CODES.has(response.status)) {
96
+ const retryAfter = parseInt(response.headers?.get?.("retry-after") ?? "", 10);
97
+ const baseDelay = Number.isFinite(retryAfter) ? retryAfter * 1000 : (retryCount + 1) * 1000;
98
+ const jitter = Math.random() * 500;
99
+ await sleep(baseDelay + jitter);
100
+ return this.request(pathname, options, retryCount + 1);
101
+ }
102
+ const error = payload?.error;
103
+ throw new PromptsGptApiError(error?.message ?? `Prompts-GPT request failed with ${response.status}.`, {
104
+ status: response.status,
105
+ code: error?.code,
106
+ recovery: error?.recovery,
107
+ });
108
+ }
109
+ return payload.data;
110
+ }
111
+ catch (error) {
112
+ if (error instanceof PromptsGptApiError)
113
+ throw error;
114
+ if (error?.name === "AbortError") {
115
+ throw new PromptsGptApiError(`Request to ${pathname} timed out after ${this.timeoutMs}ms.`, {
116
+ code: "TIMEOUT",
117
+ recovery: "Check your network connection or increase the timeout.",
118
+ });
119
+ }
120
+ if (retryCount < MAX_RETRIES && isNetworkError(error)) {
121
+ const jitter = Math.random() * 500;
122
+ await sleep((retryCount + 1) * 1000 + jitter);
123
+ return this.request(pathname, options, retryCount + 1);
124
+ }
125
+ throw new PromptsGptApiError(error?.message ?? "Network request failed.", {
126
+ code: "NETWORK_ERROR",
127
+ recovery: "Check your network connection and retry.",
128
+ });
129
+ }
130
+ finally {
131
+ clearTimeout(timeout);
132
+ }
133
+ }
134
+ }
135
+ function isNetworkError(error) {
136
+ if (!error)
137
+ return false;
138
+ const message = String(error.message ?? "").toLowerCase();
139
+ return message.includes("fetch") || message.includes("network") || message.includes("econnrefused") || message.includes("enotfound");
140
+ }
141
+ function sleep(ms) {
142
+ return new Promise((resolve) => setTimeout(resolve, ms));
143
+ }
144
+ let cachedVersion = null;
145
+ function getClientVersion() {
146
+ if (cachedVersion)
147
+ return cachedVersion;
148
+ try {
149
+ const pkg = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8"));
150
+ cachedVersion = pkg.version ?? "0.0.0";
151
+ }
152
+ catch {
153
+ cachedVersion = "0.0.0";
154
+ }
155
+ return cachedVersion;
156
+ }
157
+ export async function saveLocalCredentials(input) {
158
+ if (!input.token?.trim())
159
+ throw new Error("Token is required.");
160
+ const cwd = input.cwd ?? process.cwd();
161
+ const outDir = path.resolve(cwd, DEFAULT_PROMPTS_GPT_OUT_DIR);
162
+ await mkdir(outDir, { recursive: true });
163
+ await writeFile(path.join(outDir, PROMPTS_GPT_CREDENTIALS_FILE), `${JSON.stringify({ token: input.token.trim(), apiUrl: normalizeApiUrl(input.apiUrl ?? DEFAULT_PROMPTS_GPT_API_URL) }, null, 2)}\n`, { mode: 0o600 });
164
+ await ensureGitignoreEntry(cwd, `${DEFAULT_PROMPTS_GPT_OUT_DIR}/${PROMPTS_GPT_CREDENTIALS_FILE}`);
165
+ return { credentialsPath: path.join(outDir, PROMPTS_GPT_CREDENTIALS_FILE) };
166
+ }
167
+ export async function loadLocalCredentials(cwd = process.cwd()) {
168
+ const credentialsPath = path.resolve(cwd, DEFAULT_PROMPTS_GPT_OUT_DIR, PROMPTS_GPT_CREDENTIALS_FILE);
169
+ if (!existsSync(credentialsPath))
170
+ return null;
171
+ try {
172
+ const parsed = JSON.parse(await readFile(credentialsPath, "utf8"));
173
+ return {
174
+ token: typeof parsed.token === "string" ? parsed.token : null,
175
+ apiUrl: typeof parsed.apiUrl === "string" ? parsed.apiUrl : DEFAULT_PROMPTS_GPT_API_URL,
176
+ };
177
+ }
178
+ catch {
179
+ return null;
180
+ }
181
+ }
182
+ export async function syncPrompts(prompts, options = {}) {
183
+ const markdown = await writePromptMarkdownFiles(prompts, options);
184
+ const agents = await writeAgentFiles(prompts, options);
185
+ const manifest = await writePromptManifest(prompts, { cwd: options.cwd, outDir: options.outDir });
186
+ return { markdown, agents, manifest };
187
+ }
188
+ export async function writePromptMarkdownFiles(prompts, options = {}) {
189
+ const cwd = options.cwd ?? process.cwd();
190
+ const outDir = assertSafeOutputDir(cwd, options.outDir ?? DEFAULT_PROMPTS_GPT_OUT_DIR);
191
+ const overwrite = Boolean(options.overwrite);
192
+ await mkdir(outDir, { recursive: true });
193
+ const written = [];
194
+ const skipped = [];
195
+ for (const prompt of prompts) {
196
+ const filePath = path.join(outDir, `${safeSlug(prompt.slug || prompt.title)}.md`);
197
+ assertInside(filePath, outDir);
198
+ if (!overwrite && existsSync(filePath)) {
199
+ skipped.push(filePath);
200
+ continue;
201
+ }
202
+ await writeFile(filePath, formatPromptMarkdown(prompt), { flag: overwrite ? "w" : "wx" });
203
+ written.push(filePath);
204
+ }
205
+ await writePromptIndex(prompts, { outDir });
206
+ return { outDir, written, skipped };
207
+ }
208
+ export async function writeAgentFiles(prompts, options = {}) {
209
+ const cwd = options.cwd ?? process.cwd();
210
+ const targets = normalizeAgentTargets(options.agent ?? options.agents ?? "all");
211
+ const overwrite = Boolean(options.overwriteAgentFiles ?? true);
212
+ const written = [];
213
+ const skipped = [];
214
+ const allFiles = targets.flatMap((target) => buildAgentFiles(target, prompts).map((file) => ({ ...file, target })));
215
+ const dirSet = new Set(allFiles.map((file) => path.dirname(assertSafeProjectFile(cwd, file.path))));
216
+ await Promise.all([...dirSet].map((dir) => mkdir(dir, { recursive: true })));
217
+ await Promise.all(allFiles.map(async (file) => {
218
+ const filePath = assertSafeProjectFile(cwd, file.path);
219
+ if (file.managedBlock) {
220
+ const existing = existsSync(filePath) ? await readFile(filePath, "utf8") : "";
221
+ await writeFile(filePath, upsertManagedBlock(existing, file.content));
222
+ written.push(filePath);
223
+ return;
224
+ }
225
+ if (!overwrite && existsSync(filePath)) {
226
+ skipped.push(filePath);
227
+ return;
228
+ }
229
+ await writeFile(filePath, file.content, { flag: overwrite ? "w" : "wx" });
230
+ written.push(filePath);
231
+ }));
232
+ return { written, skipped, targets };
233
+ }
234
+ export async function writePromptManifest(prompts, options = {}) {
235
+ const cwd = options.cwd ?? process.cwd();
236
+ const outDir = assertSafeOutputDir(cwd, options.outDir ?? DEFAULT_PROMPTS_GPT_OUT_DIR);
237
+ await mkdir(outDir, { recursive: true });
238
+ const manifestPath = path.join(outDir, PROMPTS_GPT_MANIFEST_FILE);
239
+ const payload = {
240
+ version: 1,
241
+ generatedAt: new Date().toISOString(),
242
+ count: prompts.length,
243
+ prompts: prompts.map((prompt) => ({
244
+ slug: safeSlug(prompt.slug || prompt.title),
245
+ title: prompt.title,
246
+ source: prompt.source ?? "library",
247
+ category: prompt.category ?? "Prompt Library",
248
+ supportedTools: prompt.supportedTools ?? [],
249
+ file: `${safeSlug(prompt.slug || prompt.title)}.md`,
250
+ })),
251
+ };
252
+ await writeFile(manifestPath, `${JSON.stringify(payload, null, 2)}\n`);
253
+ return { manifestPath, manifest: payload };
254
+ }
255
+ export function formatPromptMarkdown(prompt) {
256
+ return [
257
+ "---",
258
+ `title: ${yamlScalar(prompt.title)}`,
259
+ `slug: ${yamlScalar(prompt.slug)}`,
260
+ `source: ${yamlScalar(prompt.source ?? "library")}`,
261
+ `category: ${yamlScalar(prompt.category ?? "Prompt Library")}`,
262
+ `difficulty: ${yamlScalar(prompt.difficulty ?? "Intermediate")}`,
263
+ `outputType: ${yamlScalar(prompt.outputType ?? "Text")}`,
264
+ `supportedTools: [${(prompt.supportedTools ?? []).map(yamlScalar).join(", ")}]`,
265
+ `tags: [${(prompt.tags ?? []).map(yamlScalar).join(", ")}]`,
266
+ "---",
267
+ "",
268
+ `# ${prompt.title}`,
269
+ "",
270
+ prompt.summary ?? "",
271
+ "",
272
+ "## Prompt",
273
+ "",
274
+ prompt.promptText ?? "",
275
+ "",
276
+ prompt.variables?.length ? "## Variables" : "",
277
+ ...(prompt.variables?.length ? prompt.variables.map((variable) => `- \`${variable}\``) : []),
278
+ prompt.variables?.length ? "" : "",
279
+ prompt.usageNotes ? "## Usage Notes" : "",
280
+ prompt.usageNotes ?? "",
281
+ "",
282
+ ].reduce((acc, line, index, list) => {
283
+ if (line === "" && index > 0 && list[index - 1] === "" && (index < 2 || list[index - 2] === ""))
284
+ return acc;
285
+ acc.push(line);
286
+ return acc;
287
+ }, []).join("\n");
288
+ }
289
+ function buildAgentFiles(target, prompts) {
290
+ if (target === "codex") {
291
+ return [{
292
+ path: "AGENTS.md",
293
+ managedBlock: true,
294
+ content: [
295
+ "# Prompts-GPT Agent Instructions",
296
+ "",
297
+ "Prompts synced by `prompts-gpt sync` live in `.prompts-gpt/`. Use the manifest and prompt files before starting related work.",
298
+ "",
299
+ "## Available Prompt Packs",
300
+ ...prompts.map((prompt) => `- ${prompt.title}: .prompts-gpt/${safeSlug(prompt.slug || prompt.title)}.md`),
301
+ "",
302
+ "When a prompt pack is relevant, load it, adapt variables to the current task, and keep verification tied to the prompt's acceptance criteria.",
303
+ "",
304
+ ].join("\n"),
305
+ }];
306
+ }
307
+ if (target === "cursor") {
308
+ return prompts.map((prompt) => ({
309
+ path: `.cursor/rules/prompts-gpt-${safeSlug(prompt.slug || prompt.title)}.mdc`,
310
+ content: [
311
+ "---",
312
+ `description: ${prompt.summary || prompt.title}`,
313
+ "globs:",
314
+ "alwaysApply: false",
315
+ "---",
316
+ "",
317
+ `# ${prompt.title}`,
318
+ "",
319
+ prompt.promptText,
320
+ "",
321
+ prompt.usageNotes ? `Usage notes: ${prompt.usageNotes}` : "",
322
+ "",
323
+ ].filter(Boolean).join("\n"),
324
+ }));
325
+ }
326
+ if (target === "vscode") {
327
+ return [
328
+ {
329
+ path: ".github/copilot-instructions.md",
330
+ managedBlock: true,
331
+ content: [
332
+ "# Prompts-GPT Copilot Instructions",
333
+ "",
334
+ "Use `.prompts-gpt/manifest.json` and `.prompts-gpt/*.md` as reusable prompt packs for this repository.",
335
+ "",
336
+ ...prompts.map((prompt) => `- ${prompt.title}: .prompts-gpt/${safeSlug(prompt.slug || prompt.title)}.md`),
337
+ "",
338
+ ].join("\n"),
339
+ },
340
+ {
341
+ path: ".vscode/prompts-gpt.code-snippets",
342
+ content: JSON.stringify(buildVsCodeSnippets(prompts), null, 2) + "\n",
343
+ },
344
+ ];
345
+ }
346
+ if (target === "copilot") {
347
+ return prompts.map((prompt) => ({
348
+ path: `.github/prompts/prompts-gpt-${safeSlug(prompt.slug || prompt.title)}.prompt.md`,
349
+ content: formatPromptMarkdown(prompt),
350
+ }));
351
+ }
352
+ return [];
353
+ }
354
+ function buildVsCodeSnippets(prompts) {
355
+ return prompts.reduce((snippets, prompt) => {
356
+ snippets[`Prompts-GPT: ${prompt.title}`] = {
357
+ prefix: `pgpt-${safeSlug(prompt.slug || prompt.title)}`,
358
+ description: prompt.summary || prompt.title,
359
+ body: String(prompt.promptText || "").split(/\r?\n/),
360
+ };
361
+ return snippets;
362
+ }, {});
363
+ }
364
+ function upsertManagedBlock(existing, content) {
365
+ const start = "<!-- prompts-gpt:start -->";
366
+ const end = "<!-- prompts-gpt:end -->";
367
+ const block = `${start}\n${content.trim()}\n${end}`;
368
+ const pattern = new RegExp(`${escapeRegExp(start)}[\\s\\S]*?${escapeRegExp(end)}`);
369
+ if (pattern.test(existing)) {
370
+ return `${existing.replace(pattern, block).trimEnd()}\n`;
371
+ }
372
+ const prefix = existing.trimEnd();
373
+ return `${prefix ? `${prefix}\n\n` : ""}${block}\n`;
374
+ }
375
+ function escapeRegExp(value) {
376
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
377
+ }
378
+ async function writePromptIndex(prompts, { outDir }) {
379
+ const indexPath = path.join(outDir, "README.md");
380
+ const content = [
381
+ "# Prompts-GPT Prompt Packs",
382
+ "",
383
+ "These prompts were synced by `prompts-gpt`. Re-run `prompts-gpt sync` to refresh Markdown and agent files.",
384
+ "",
385
+ "## Prompts",
386
+ ...prompts.map((prompt) => `- [${prompt.title}](./${safeSlug(prompt.slug || prompt.title)}.md) - ${prompt.summary ?? ""}`),
387
+ "",
388
+ ].join("\n");
389
+ assertInside(indexPath, outDir);
390
+ await writeFile(indexPath, content);
391
+ }
392
+ function normalizeAgentTargets(value) {
393
+ const raw = Array.isArray(value) ? value.join(",") : String(value ?? "all");
394
+ const targets = raw.split(",").map((item) => item.trim().toLowerCase()).filter(Boolean);
395
+ const expanded = targets.includes("all") ? [...SUPPORTED_AGENT_TARGETS] : targets;
396
+ const unique = [...new Set(expanded)];
397
+ const validSet = new Set(SUPPORTED_AGENT_TARGETS);
398
+ const invalid = unique.filter((target) => !validSet.has(target));
399
+ if (invalid.length)
400
+ throw new Error(`Unsupported agent target: ${invalid.join(", ")}. Use ${SUPPORTED_AGENT_TARGETS.join(", ")}, or all.`);
401
+ return unique;
402
+ }
403
+ function normalizeApiUrl(value) {
404
+ const url = new URL(value);
405
+ url.pathname = "/";
406
+ url.search = "";
407
+ url.hash = "";
408
+ return url.toString().replace(/\/+$/, "");
409
+ }
410
+ function safeNormalizeApiUrl(value) {
411
+ try {
412
+ return normalizeApiUrl(value);
413
+ }
414
+ catch {
415
+ throw new PromptsGptApiError(`Invalid API URL: ${value}`, {
416
+ code: "INVALID_URL",
417
+ recovery: `Provide a valid URL like ${DEFAULT_PROMPTS_GPT_API_URL}.`,
418
+ });
419
+ }
420
+ }
421
+ function assertSafeOutputDir(cwd, outDir) {
422
+ const root = path.resolve(cwd);
423
+ const resolved = path.resolve(root, outDir);
424
+ if (resolved !== root && !resolved.startsWith(`${root}${path.sep}`)) {
425
+ throw new Error("Output directory must stay inside the current project.");
426
+ }
427
+ return resolved;
428
+ }
429
+ function assertSafeProjectFile(cwd, filePath) {
430
+ const root = path.resolve(cwd);
431
+ const resolved = path.resolve(root, filePath);
432
+ if (!resolved.startsWith(`${root}${path.sep}`)) {
433
+ throw new Error("Agent file path must stay inside the current project.");
434
+ }
435
+ return resolved;
436
+ }
437
+ function assertInside(filePath, directory) {
438
+ if (!filePath.startsWith(`${directory}${path.sep}`)) {
439
+ throw new Error("Refusing to write outside the prompt output directory.");
440
+ }
441
+ }
442
+ function safeSlug(value) {
443
+ return String(value ?? "prompt")
444
+ .toLowerCase()
445
+ .replace(/[^a-z0-9]+/g, "-")
446
+ .replace(/^-+|-+$/g, "")
447
+ .slice(0, 90) || "prompt";
448
+ }
449
+ function yamlScalar(value) {
450
+ return JSON.stringify(String(value ?? ""));
451
+ }
452
+ async function ensureGitignoreEntry(cwd, entry) {
453
+ const gitignorePath = path.resolve(cwd, ".gitignore");
454
+ const existing = existsSync(gitignorePath) ? await readFile(gitignorePath, "utf8") : "";
455
+ const lines = existing.split(/\r?\n/).map((line) => line.trim());
456
+ if (lines.includes(entry))
457
+ return;
458
+ const prefix = existing && !existing.endsWith("\n") ? "\n" : "";
459
+ await writeFile(gitignorePath, `${existing}${prefix}${entry}\n`);
460
+ }
461
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@prompts-gpt/client",
3
+ "version": "0.1.0",
4
+ "description": "CLI and SDK for pulling Prompts-GPT prompt packs into local projects and syncing agent-readable files for Codex, Cursor, VS Code, and Copilot.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "author": "Prompts-GPT <hello@prompts-gpt.com> (https://prompts-gpt.com)",
8
+ "sideEffects": false,
9
+ "homepage": "https://github.com/prompts-gpt/prompts-gpt.com/tree/main/packages/client#readme",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/prompts-gpt/prompts-gpt.com.git",
13
+ "directory": "packages/client"
14
+ },
15
+ "bugs": {
16
+ "url": "https://github.com/prompts-gpt/prompts-gpt.com/issues"
17
+ },
18
+ "keywords": [
19
+ "prompts",
20
+ "ai",
21
+ "codex",
22
+ "cursor",
23
+ "copilot",
24
+ "vscode",
25
+ "prompt-engineering",
26
+ "ai-visibility",
27
+ "agents",
28
+ "cli"
29
+ ],
30
+ "bin": {
31
+ "prompts-gpt": "dist/cli.js"
32
+ },
33
+ "main": "./dist/index.js",
34
+ "types": "./dist/index.d.ts",
35
+ "exports": {
36
+ ".": {
37
+ "types": "./dist/index.d.ts",
38
+ "import": "./dist/index.js"
39
+ }
40
+ },
41
+ "files": [
42
+ "dist",
43
+ "README.md",
44
+ "LICENSE",
45
+ "CHANGELOG.md"
46
+ ],
47
+ "engines": {
48
+ "node": ">=18.18"
49
+ },
50
+ "scripts": {
51
+ "build": "tsc && node scripts/mark-cli-executable.mjs",
52
+ "clean": "rm -rf dist",
53
+ "prepublishOnly": "npm run clean && npm run build",
54
+ "typecheck": "tsc --noEmit"
55
+ },
56
+ "publishConfig": {
57
+ "access": "public",
58
+ "registry": "https://registry.npmjs.org/"
59
+ }
60
+ }