@dccxx/auggiegw 1.0.23 → 1.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -2200,6 +2200,9 @@ var AUGMENT_DIR = path.join(os.homedir(), ".augment");
2200
2200
  var AUGMENT_SESSION_FILE = path.join(AUGMENT_DIR, "session.json");
2201
2201
  var AUGMENT_COMMANDS_DIR = path.join(AUGMENT_DIR, "commands");
2202
2202
  var AUGMENT_AGENTS_DIR = path.join(AUGMENT_DIR, "agents");
2203
+ var CLAUDE_DIR = path.join(os.homedir(), ".claude");
2204
+ var CLAUDE_COMMANDS_DIR = path.join(CLAUDE_DIR, "commands");
2205
+ var CLAUDE_AGENTS_DIR = path.join(CLAUDE_DIR, "agents");
2203
2206
  function loadConfig() {
2204
2207
  const apiUrl = process.env.AUGMENT_GATEWAY_URL || "https://augmentgateway.1app.space";
2205
2208
  return { apiUrl };
@@ -2322,18 +2325,30 @@ async function getAllPrompts(token, apiUrl, spinner) {
2322
2325
  return allPrompts;
2323
2326
  }
2324
2327
  async function savePromptToFile(prompt) {
2325
- try {
2326
- await fs.mkdir(AUGMENT_COMMANDS_DIR, { recursive: true });
2327
- const markdownContent = `---
2328
+ const markdownContent = `---
2328
2329
  description: ${prompt.name}
2329
2330
  type: "manual"
2330
2331
  ---
2331
2332
 
2332
2333
  ${prompt.content}`;
2334
+ let augmentError = null;
2335
+ let claudeError = null;
2336
+ try {
2337
+ await fs.mkdir(AUGMENT_COMMANDS_DIR, { recursive: true });
2333
2338
  const filePath = path.join(AUGMENT_COMMANDS_DIR, `${prompt.command}.md`);
2334
2339
  await fs.writeFile(filePath, markdownContent, "utf-8");
2335
2340
  } catch (error) {
2336
- throw new Error(`Failed to save prompt file for command '${prompt.command}': ${error}`);
2341
+ augmentError = new Error(`Failed to save to .augment: ${error}`);
2342
+ }
2343
+ try {
2344
+ await fs.mkdir(CLAUDE_COMMANDS_DIR, { recursive: true });
2345
+ const filePath = path.join(CLAUDE_COMMANDS_DIR, `${prompt.command}.md`);
2346
+ await fs.writeFile(filePath, markdownContent, "utf-8");
2347
+ } catch (error) {
2348
+ claudeError = new Error(`Failed to save to .claude: ${error}`);
2349
+ }
2350
+ if (augmentError && claudeError) {
2351
+ throw new Error(`Failed to save prompt file for command '${prompt.command}': ${augmentError.message}; ${claudeError.message}`);
2337
2352
  }
2338
2353
  }
2339
2354
  async function deleteAllCommandFiles() {
@@ -2362,10 +2377,24 @@ async function getKit(kitId, apiUrl) {
2362
2377
  }
2363
2378
  return data;
2364
2379
  }
2380
+ function mapModelName(model) {
2381
+ const lowerModel = model.toLowerCase();
2382
+ if (lowerModel.includes("opus")) {
2383
+ return "opus";
2384
+ }
2385
+ if (lowerModel.includes("sonnet")) {
2386
+ return "sonnet";
2387
+ }
2388
+ if (lowerModel.includes("haiku")) {
2389
+ return "haiku";
2390
+ }
2391
+ return model;
2392
+ }
2365
2393
  async function saveSubagentToFile(subagent) {
2394
+ let augmentError = null;
2395
+ let claudeError = null;
2366
2396
  try {
2367
- await fs.mkdir(AUGMENT_AGENTS_DIR, { recursive: true });
2368
- const markdownContent = `---
2397
+ const augmentMarkdownContent = `---
2369
2398
  name: "${subagent.name}"
2370
2399
  description: "${subagent.description}"
2371
2400
  model: "${subagent.model}"
@@ -2373,10 +2402,30 @@ color: "${subagent.color}"
2373
2402
  ---
2374
2403
 
2375
2404
  ${subagent.content}`;
2405
+ await fs.mkdir(AUGMENT_AGENTS_DIR, { recursive: true });
2376
2406
  const filePath = path.join(AUGMENT_AGENTS_DIR, `${subagent.name}.md`);
2377
- await fs.writeFile(filePath, markdownContent, "utf-8");
2407
+ await fs.writeFile(filePath, augmentMarkdownContent, "utf-8");
2378
2408
  } catch (error) {
2379
- throw new Error(`Failed to save subagent file for '${subagent.name}': ${error}`);
2409
+ augmentError = new Error(`Failed to save to .augment: ${error}`);
2410
+ }
2411
+ try {
2412
+ const mappedModel = mapModelName(subagent.model);
2413
+ const claudeMarkdownContent = `---
2414
+ name: "${subagent.name}"
2415
+ description: "${subagent.description}"
2416
+ model: "${mappedModel}"
2417
+ color: "${subagent.color}"
2418
+ ---
2419
+
2420
+ ${subagent.content}`;
2421
+ await fs.mkdir(CLAUDE_AGENTS_DIR, { recursive: true });
2422
+ const filePath = path.join(CLAUDE_AGENTS_DIR, `${subagent.name}.md`);
2423
+ await fs.writeFile(filePath, claudeMarkdownContent, "utf-8");
2424
+ } catch (error) {
2425
+ claudeError = new Error(`Failed to save to .claude: ${error}`);
2426
+ }
2427
+ if (augmentError && claudeError) {
2428
+ throw new Error(`Failed to save subagent file for '${subagent.name}': ${augmentError.message}; ${claudeError.message}`);
2380
2429
  }
2381
2430
  }
2382
2431
  async function promptInput(question, hidden = false) {
@@ -2742,7 +2791,8 @@ async function handleKit(kitId) {
2742
2791
  subagentsCount++;
2743
2792
  }
2744
2793
  }
2745
- spinner.succeed(`Successfully installed kit "${kit.name}": ${promptsCount} prompts, ${subagentsCount} subagents`);
2794
+ spinner.succeed(`Successfully installed kit "${kit.name}": ${promptsCount} prompts, ${subagentsCount} subagents
2795
+ Files saved to ~/.augment/ and ~/.claude/ directories`);
2746
2796
  } catch (error) {
2747
2797
  spinner.fail(`Kit fetch failed: ${error}`);
2748
2798
  process.exit(1);
@@ -2771,4 +2821,4 @@ program2.command("switch-account").description("Switch to a newer account from t
2771
2821
  program2.command("kit <kit-id>").description("Fetch and install a kit (prompts and subagents) from the public API").action(handleKit);
2772
2822
  program2.parse();
2773
2823
 
2774
- //# debugId=C5CF051D7C5655BB64756E2164756E21
2824
+ //# debugId=061E1F59864147E164756E2164756E21
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dccxx/auggiegw",
3
- "version": "1.0.23",
3
+ "version": "1.0.25",
4
4
  "description": "A Node.js TypeScript package",
5
5
  "main": "./dist/cli.js",
6
6
  "types": "./dist/cli.d.ts",
@@ -0,0 +1,140 @@
1
+ # Kit Command - Requirements
2
+
3
+ ## Feature Overview
4
+
5
+ The `kit` command enables users to fetch and install pre-packaged collections of prompts and subagents from a public API endpoint. A "kit" is a bundle containing custom prompts and subagents that extend the functionality of the Auggie CLI. Files are synced to dual directories for compatibility: `~/.augment/commands/` and `~/.claude/commands/` for prompts, `~/.augment/agents/` and `~/.claude/agents/` for subagents.
6
+
7
+ ## User Story
8
+
9
+ **As a** CLI user
10
+ **I want to** install a kit by providing its ID
11
+ **So that** I can quickly add multiple prompts and subagents to my Auggie environment without manual configuration
12
+
13
+ ## Implementation Reference
14
+
15
+ - Entry point: `src/cli.ts:883-929` (handleKit function)
16
+ - API function: `src/cli.ts:369-385` (getKit function)
17
+ - Data models: `src/cli.ts:90-110` (SubagentData, KitData, GetKitResponse)
18
+ - File writers: `src/cli.ts:333-349` (savePromptToFile), `src/cli.ts:387-405` (saveSubagentToFile)
19
+
20
+ ## Acceptance Criteria
21
+
22
+ ### Command Invocation
23
+
24
+ - [x] WHEN the user runs `auggiegw kit <kit-id>`, THE SYSTEM SHALL fetch the kit from the public API endpoint.
25
+ - [x] IF the kit-id argument is missing, THEN THE SYSTEM SHALL display "Error: Kit ID is required" and usage message, and exit with code 1.
26
+
27
+ ### API Integration
28
+
29
+ - [x] THE SYSTEM SHALL make a GET request to `{apiUrl}/api/public/kit/{kitId}` without authentication headers.
30
+ - [x] THE SYSTEM SHALL parse the response as JSON with structure `{ success: boolean, message: string, data: KitData }`.
31
+ - [x] IF the HTTP response status is not OK, THEN THE SYSTEM SHALL throw an error with message "HTTP error! status: {status}".
32
+ - [x] IF the response `success` field is false, THEN THE SYSTEM SHALL throw an error with the API's message or "Failed to get kit".
33
+
34
+ ### Data Processing
35
+
36
+ - [x] WHEN the kit data is received, THE SYSTEM SHALL extract the kit name, prompts array, and subagents array.
37
+ - [x] THE SYSTEM SHALL process prompts sequentially before processing subagents.
38
+ - [x] THE SYSTEM SHALL track the count of successfully saved prompts and subagents.
39
+
40
+ ### Prompt Installation
41
+
42
+ - [x] WHEN processing prompts, THE SYSTEM SHALL create the directory `~/.augment/commands/` if it does not exist.
43
+ - [x] WHEN processing prompts, THE SYSTEM SHALL create the directory `~/.claude/commands/` if it does not exist.
44
+ - [x] FOR EACH prompt in the kit, THE SYSTEM SHALL save a markdown file to `~/.augment/commands/{command}.md` with YAML frontmatter containing `description` and `type: "manual"` fields.
45
+ - [x] FOR EACH prompt in the kit, THE SYSTEM SHALL save a markdown file to `~/.claude/commands/{command}.md` with YAML frontmatter containing `description` and `type: "manual"` fields.
46
+ - [x] THE SYSTEM SHALL overwrite existing prompt files with the same filename without confirmation.
47
+ - [x] IF a prompt file fails to save, THEN THE SYSTEM SHALL throw an error with message "Failed to save prompt file for command '{command}': {error}".
48
+ - [x] IF a prompt file fails to save to one directory (either `.augment` or `.claude`), THEN THE SYSTEM SHALL still attempt to save to the other directory before throwing an error.
49
+
50
+ ### Subagent Installation
51
+
52
+ - [x] WHEN processing subagents, THE SYSTEM SHALL create the directory `~/.augment/agents/` if it does not exist.
53
+ - [x] WHEN processing subagents, THE SYSTEM SHALL create the directory `~/.claude/agents/` if it does not exist.
54
+ - [x] FOR EACH subagent in the kit, THE SYSTEM SHALL save a markdown file to `~/.augment/agents/{name}.md` with YAML frontmatter containing `name`, `description`, `model`, and `color` fields.
55
+ - [x] FOR EACH subagent in the kit, THE SYSTEM SHALL save a markdown file to `~/.claude/agents/{name}.md` with YAML frontmatter containing `name`, `description`, `model`, and `color` fields.
56
+ - [x] THE SYSTEM SHALL overwrite existing subagent files with the same filename without confirmation.
57
+ - [x] IF a subagent file fails to save, THEN THE SYSTEM SHALL throw an error with message "Failed to save subagent file for '{name}': {error}".
58
+ - [x] IF a subagent file fails to save to one directory (either `.augment` or `.claude`), THEN THE SYSTEM SHALL still attempt to save to the other directory before throwing an error.
59
+
60
+ ### User Feedback
61
+
62
+ - [x] WHILE fetching the kit, THE SYSTEM SHALL display a spinner with text "Fetching kit {kitId}...".
63
+ - [x] WHILE processing the kit, THE SYSTEM SHALL update the spinner text to "Processing kit \"{name}\"...".
64
+ - [x] WHILE saving prompts, THE SYSTEM SHALL update the spinner text to "Saving {count} prompts...".
65
+ - [x] WHILE saving subagents, THE SYSTEM SHALL update the spinner text to "Saving {count} subagents...".
66
+ - [x] WHEN installation completes successfully, THE SYSTEM SHALL display "Successfully installed kit \"{name}\": {promptsCount} prompts, {subagentsCount} subagents".
67
+ - [x] WHEN installation completes successfully, THE SYSTEM SHALL display a message indicating files were saved to both `~/.augment/` and `~/.claude/` directories.
68
+ - [x] IF any error occurs during the process, THEN THE SYSTEM SHALL display "Kit fetch failed: {error}" and exit with code 1.
69
+
70
+ ### File Format Specifications
71
+
72
+ - [x] THE SYSTEM SHALL format prompt files with YAML frontmatter followed by content, using the template:
73
+ ```
74
+ ---
75
+ description: {prompt.name}
76
+ type: "manual"
77
+ ---
78
+
79
+ {prompt.content}
80
+ ```
81
+
82
+ - [x] THE SYSTEM SHALL format subagent files with YAML frontmatter followed by content, using the template:
83
+ ```
84
+ ---
85
+ name: "{subagent.name}"
86
+ description: "{subagent.description}"
87
+ model: "{subagent.model}"
88
+ color: "{subagent.color}"
89
+ ---
90
+
91
+ {subagent.content}
92
+ ```
93
+
94
+ - [x] THE SYSTEM SHALL use identical file formats for both `~/.augment/` and `~/.claude/` directories.
95
+
96
+ ## API Contract
97
+
98
+ ### Request
99
+ - **Method**: GET
100
+ - **Endpoint**: `{apiUrl}/api/public/kit/{kitId}`
101
+ - **Authentication**: None (public endpoint)
102
+ - **Parameters**: `kitId` (path parameter)
103
+
104
+ ### Response
105
+ ```typescript
106
+ {
107
+ success: boolean;
108
+ message: string;
109
+ data: {
110
+ id: string;
111
+ name: string;
112
+ description: string;
113
+ prompts: Array<{
114
+ name: string; // Display name for frontmatter
115
+ command: string; // Filename (without .md extension)
116
+ content: string; // Markdown content body
117
+ }>;
118
+ subagents: Array<{
119
+ name: string; // Filename (without .md extension)
120
+ description: string;
121
+ model: string;
122
+ color: string;
123
+ content: string; // Markdown content body
124
+ }>;
125
+ };
126
+ }
127
+ ```
128
+
129
+ ## Implementation Notes
130
+
131
+ **Status**: Completed
132
+ **Last Updated**: 2026-01-20
133
+ **Files**: `src/cli.ts:883-929` (handleKit), `src/cli.ts:333-349` (savePromptToFile), `src/cli.ts:387-405` (saveSubagentToFile)
134
+ **Deviations**: None
135
+
136
+ ### Implementation Details
137
+ - Prompts saved to both: `~/.augment/commands/` and `~/.claude/commands/`
138
+ - Subagents saved to both: `~/.augment/agents/` and `~/.claude/agents/`
139
+ - Error handling: Attempts both directories even if one fails
140
+ - Success message indicates dual-directory syncing