@chanaka_nakandala/integration-agent 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +87 -0
  3. package/dist/cache/file-cache.d.ts +10 -0
  4. package/dist/cache/file-cache.d.ts.map +1 -0
  5. package/dist/cache/file-cache.js +79 -0
  6. package/dist/cache/file-cache.js.map +1 -0
  7. package/dist/cli/init-command.d.ts +2 -0
  8. package/dist/cli/init-command.d.ts.map +1 -0
  9. package/dist/cli/init-command.js +115 -0
  10. package/dist/cli/init-command.js.map +1 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +493 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/scrapers/docs-scraper.d.ts +28 -0
  16. package/dist/scrapers/docs-scraper.d.ts.map +1 -0
  17. package/dist/scrapers/docs-scraper.js +200 -0
  18. package/dist/scrapers/docs-scraper.js.map +1 -0
  19. package/dist/search/keyword-search.d.ts +39 -0
  20. package/dist/search/keyword-search.d.ts.map +1 -0
  21. package/dist/search/keyword-search.js +127 -0
  22. package/dist/search/keyword-search.js.map +1 -0
  23. package/dist/tools/code-generation-tool.d.ts +33 -0
  24. package/dist/tools/code-generation-tool.d.ts.map +1 -0
  25. package/dist/tools/code-generation-tool.js +62 -0
  26. package/dist/tools/code-generation-tool.js.map +1 -0
  27. package/dist/tools/search-result-formatter.d.ts +27 -0
  28. package/dist/tools/search-result-formatter.d.ts.map +1 -0
  29. package/dist/tools/search-result-formatter.js +89 -0
  30. package/dist/tools/search-result-formatter.js.map +1 -0
  31. package/dist/tools/search-tool.d.ts +9 -0
  32. package/dist/tools/search-tool.d.ts.map +1 -0
  33. package/dist/tools/search-tool.js +32 -0
  34. package/dist/tools/search-tool.js.map +1 -0
  35. package/dist/tools/template-loader.d.ts +54 -0
  36. package/dist/tools/template-loader.d.ts.map +1 -0
  37. package/dist/tools/template-loader.js +148 -0
  38. package/dist/tools/template-loader.js.map +1 -0
  39. package/dist/types/search.d.ts +21 -0
  40. package/dist/types/search.d.ts.map +1 -0
  41. package/dist/types/search.js +2 -0
  42. package/dist/types/search.js.map +1 -0
  43. package/package.json +63 -0
  44. package/templates/README.md +98 -0
  45. package/templates/authenticate/curl.template +97 -0
  46. package/templates/authenticate/java.template +155 -0
  47. package/templates/authenticate/python.template +111 -0
  48. package/templates/authenticate/typescript.template +98 -0
  49. package/templates/create_menu/curl.template +145 -0
  50. package/templates/create_menu/java.template +285 -0
  51. package/templates/create_menu/python.template +159 -0
  52. package/templates/create_menu/typescript.template +184 -0
  53. package/templates/receive_order/curl.template +138 -0
  54. package/templates/receive_order/java.template +263 -0
  55. package/templates/receive_order/python.template +157 -0
  56. package/templates/receive_order/typescript.template +194 -0
  57. package/templates/update_item_availability/curl.template +143 -0
  58. package/templates/update_item_availability/java.template +279 -0
  59. package/templates/update_item_availability/python.template +203 -0
  60. package/templates/update_item_availability/typescript.template +194 -0
  61. package/templates/update_order_status/curl.template +138 -0
  62. package/templates/update_order_status/java.template +202 -0
  63. package/templates/update_order_status/python.template +142 -0
  64. package/templates/update_order_status/typescript.template +139 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Grubtech
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,87 @@
1
+ # @grubtech/integration-agent
2
+
3
+ > AI-powered MCP server for Grubtech API integration support
4
+
5
+ [![npm version](https://img.shields.io/npm/v/@grubtech/integration-agent.svg)](https://www.npmjs.com/package/@grubtech/integration-agent)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+
8
+ An MCP (Model Context Protocol) server that provides instant, AI-powered assistance for integrating with Grubtech APIs through Claude Code. Get code generation, documentation search, and integration guidance directly in your development environment.
9
+
10
+ ## Features
11
+
12
+ - šŸš€ **Code Generation** - Generate integration code in TypeScript, Python, Java, or cURL
13
+ - šŸ” **Documentation Search** - Search Grubtech API docs using natural language
14
+ - šŸ“ **20 Ready-to-Use Templates** - 5 operations Ɨ 4 languages
15
+ - šŸ¤– **Claude Code Integration** - Works seamlessly with Claude Code
16
+ - šŸ”’ **100% Local** - Runs entirely on your machine
17
+ - šŸ“¦ **Zero Configuration** - Works with \`npx\` out of the box
18
+
19
+ ## Quick Start
20
+
21
+ ### Using with Claude Code (Recommended)
22
+
23
+ 1. **Configure MCP Server**
24
+
25
+ Create or edit: \`~/.config/claude/code_mcp_settings.json\`
26
+
27
+ \`\`\`json
28
+ {
29
+ "mcpServers": {
30
+ "grubtech-integration-support": {
31
+ "command": "npx",
32
+ "args": ["-y", "@grubtech/integration-agent", "mcp-server"]
33
+ }
34
+ }
35
+ }
36
+ \`\`\`
37
+
38
+ 2. **Restart Claude Code**
39
+
40
+ 3. **Start Using!**
41
+ \`\`\`
42
+ Generate authentication code for Grubtech in TypeScript
43
+ \`\`\`
44
+
45
+ ## Available Tools
46
+
47
+ ### generate_integration_code
48
+
49
+ Generate code snippets for Grubtech integration tasks (20 templates available).
50
+
51
+ **Example Prompts:**
52
+ \`\`\`
53
+ Generate authentication code in TypeScript
54
+ Show me how to sync menus using Python
55
+ Create a Java webhook for receiving orders
56
+ \`\`\`
57
+
58
+ ### search_grubtech_docs
59
+
60
+ Search Grubtech API documentation.
61
+
62
+ **Example Prompts:**
63
+ \`\`\`
64
+ Search for authentication methods
65
+ How do I update item availability?
66
+ \`\`\`
67
+
68
+ ## Installation
69
+
70
+ ### NPX (Recommended)
71
+ \`\`\`bash
72
+ npx @grubtech/integration-agent mcp-server
73
+ \`\`\`
74
+
75
+ ### Global
76
+ \`\`\`bash
77
+ npm install -g @grubtech/integration-agent
78
+ \`\`\`
79
+
80
+ ## Requirements
81
+
82
+ - Node.js 18+
83
+ - Claude Code
84
+
85
+ ## License
86
+
87
+ MIT Ā© Grubtech
@@ -0,0 +1,10 @@
1
+ import type { CachedDocument } from '@grubtech/agent-core';
2
+ export declare class FileCache {
3
+ private cacheDir;
4
+ private readonly TTL;
5
+ constructor(cacheDir?: string);
6
+ get(key: string): Promise<CachedDocument | null>;
7
+ set(key: string, document: Omit<CachedDocument, 'cachedAt' | 'expiresAt'>): Promise<void>;
8
+ getAllCachedDocs(): Promise<CachedDocument[]>;
9
+ }
10
+ //# sourceMappingURL=file-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-cache.d.ts","sourceRoot":"","sources":["../../src/cache/file-cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAuB;gBAE/B,QAAQ,GAAE,MAA4B;IAI5C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAyBhD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAczF,gBAAgB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;CAmCpD"}
@@ -0,0 +1,79 @@
1
+ import { promises as fs } from 'fs';
2
+ import { join } from 'path';
3
+ import { homedir } from 'os';
4
+ export class FileCache {
5
+ cacheDir;
6
+ TTL = 24 * 60 * 60 * 1000; // 24 hours
7
+ constructor(cacheDir = '~/.grubtech/cache') {
8
+ this.cacheDir = cacheDir.replace('~', homedir());
9
+ }
10
+ async get(key) {
11
+ try {
12
+ const filePath = join(this.cacheDir, 'docs', `${key}.json`);
13
+ const data = await fs.readFile(filePath, 'utf-8');
14
+ const cached = JSON.parse(data);
15
+ // Check TTL
16
+ if (new Date(cached.expiresAt) < new Date()) {
17
+ await fs.unlink(filePath); // Delete expired
18
+ console.error(`Cache expired: ${key}`);
19
+ return null;
20
+ }
21
+ console.error(`Cache hit: ${key}`);
22
+ return cached;
23
+ }
24
+ catch (error) {
25
+ if (error.code === 'ENOENT') {
26
+ console.error(`Cache miss: ${key}`);
27
+ }
28
+ else {
29
+ console.error(`Cache read error for ${key}:`, error);
30
+ }
31
+ return null;
32
+ }
33
+ }
34
+ async set(key, document) {
35
+ const now = new Date();
36
+ const cached = {
37
+ ...document,
38
+ cachedAt: now,
39
+ expiresAt: new Date(now.getTime() + this.TTL),
40
+ };
41
+ const filePath = join(this.cacheDir, 'docs', `${key}.json`);
42
+ await fs.mkdir(join(this.cacheDir, 'docs'), { recursive: true });
43
+ await fs.writeFile(filePath, JSON.stringify(cached, null, 2));
44
+ console.error(`Cached: ${key}`);
45
+ }
46
+ async getAllCachedDocs() {
47
+ const docs = [];
48
+ const docsDir = join(this.cacheDir, 'docs');
49
+ try {
50
+ await fs.mkdir(docsDir, { recursive: true });
51
+ const files = await fs.readdir(docsDir);
52
+ for (const file of files) {
53
+ if (!file.endsWith('.json'))
54
+ continue;
55
+ try {
56
+ const filePath = join(docsDir, file);
57
+ const data = await fs.readFile(filePath, 'utf-8');
58
+ const cached = JSON.parse(data);
59
+ // Check TTL
60
+ if (new Date(cached.expiresAt) < new Date()) {
61
+ await fs.unlink(filePath); // Delete expired
62
+ continue;
63
+ }
64
+ docs.push(cached);
65
+ }
66
+ catch (error) {
67
+ console.error(`Error reading cache file ${file}:`, error);
68
+ }
69
+ }
70
+ console.error(`Loaded ${docs.length} cached documents`);
71
+ return docs;
72
+ }
73
+ catch (error) {
74
+ console.error('Error loading cached documents:', error);
75
+ return [];
76
+ }
77
+ }
78
+ }
79
+ //# sourceMappingURL=file-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-cache.js","sourceRoot":"","sources":["../../src/cache/file-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAG7B,MAAM,OAAO,SAAS;IACZ,QAAQ,CAAS;IACR,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;IAEvD,YAAY,WAAmB,mBAAmB;QAChD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;YAC5D,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC;YAElD,YAAY;YACZ,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;gBAC5C,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB;gBAC5C,OAAO,CAAC,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAC;gBACvC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC;YACnC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,QAAwD;QAC7E,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAmB;YAC7B,GAAG,QAAQ;YACX,QAAQ,EAAE,GAAG;YACb,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;SAC9C,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;QAC5D,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,IAAI,GAAqB,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE5C,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAExC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,SAAS;gBAEtC,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBACrC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC;oBAElD,YAAY;oBACZ,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;wBAC5C,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB;wBAC5C,SAAS;oBACX,CAAC;oBAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACpB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,MAAM,mBAAmB,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YACxD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export declare function initCommand(): Promise<void>;
2
+ //# sourceMappingURL=init-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-command.d.ts","sourceRoot":"","sources":["../../src/cli/init-command.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAwDjD"}
@@ -0,0 +1,115 @@
1
+ import { promises as fs } from 'fs';
2
+ import { join, dirname } from 'path';
3
+ import { homedir } from 'os';
4
+ import { fileURLToPath } from 'url';
5
+ export async function initCommand() {
6
+ console.log('šŸš€ Initializing Grubtech Integration Agent...\n');
7
+ // 1. Check Claude Code installation
8
+ const claudeConfigPath = getClaudeConfigPath();
9
+ const mcpConfigFile = join(claudeConfigPath, 'mcp.json');
10
+ try {
11
+ await fs.access(claudeConfigPath);
12
+ console.log('āœ“ Claude Code configuration directory found');
13
+ }
14
+ catch {
15
+ console.warn('āš ļø Claude Code config directory not found. Is Claude Code installed?');
16
+ console.warn(` Expected at: ${claudeConfigPath}\n`);
17
+ }
18
+ // 2. Create cache directory
19
+ const cacheDir = join(homedir(), '.grubtech', 'cache');
20
+ await fs.mkdir(join(cacheDir, 'docs'), { recursive: true });
21
+ console.log('āœ“ Created cache directory at ~/.grubtech/cache/');
22
+ // 3. Configure MCP
23
+ let mcpConfig = {};
24
+ try {
25
+ const existing = await fs.readFile(mcpConfigFile, 'utf-8');
26
+ mcpConfig = JSON.parse(existing);
27
+ console.log('āœ“ Found existing MCP configuration');
28
+ }
29
+ catch {
30
+ console.log('āœ“ Creating new MCP configuration');
31
+ }
32
+ // Add/update Grubtech MCP server config
33
+ if (!mcpConfig.mcpServers) {
34
+ mcpConfig.mcpServers = {};
35
+ }
36
+ mcpConfig.mcpServers['grubtech-integration-support'] = {
37
+ command: 'npx',
38
+ args: ['@grubtech/integration-agent', 'mcp-server'],
39
+ };
40
+ // Write config
41
+ await fs.mkdir(claudeConfigPath, { recursive: true });
42
+ await fs.writeFile(mcpConfigFile, JSON.stringify(mcpConfig, null, 2));
43
+ console.log('āœ“ Updated MCP configuration');
44
+ // 4. Install agent personas
45
+ await installAgentPersonas();
46
+ // 5. Display success message
47
+ console.log('\nāœ… Setup complete!\n');
48
+ console.log('Next steps:');
49
+ console.log(' 1. Restart Claude Code');
50
+ console.log(' 2. Select an agent persona from the personas menu:');
51
+ console.log(' - Grubtech Integration Developer (technical, code-first)');
52
+ console.log(' - Grubtech Integration BA (planning, requirements, documentation)');
53
+ console.log(' 3. Try asking: "How do I authenticate with Grubtech APIs?"\n');
54
+ }
55
+ async function installAgentPersonas() {
56
+ console.log('\nšŸ“¦ Installing agent personas...');
57
+ const agentsDir = getClaudeAgentsPath();
58
+ await fs.mkdir(agentsDir, { recursive: true });
59
+ // Get source directory (package root)
60
+ const packageRoot = join(dirname(fileURLToPath(import.meta.url)), '..', '..', '..');
61
+ const agentPersonasSource = join(packageRoot, 'agent-personas');
62
+ const agents = [
63
+ {
64
+ source: join(agentPersonasSource, 'developer-agent.yaml'),
65
+ target: join(agentsDir, 'grubtech-developer.yaml'),
66
+ name: 'Grubtech Integration Developer',
67
+ },
68
+ {
69
+ source: join(agentPersonasSource, 'ba-agent.yaml'),
70
+ target: join(agentsDir, 'grubtech-ba.yaml'),
71
+ name: 'Grubtech Integration BA',
72
+ },
73
+ ];
74
+ for (const agent of agents) {
75
+ try {
76
+ // Check if source exists
77
+ await fs.access(agent.source);
78
+ // Check if target already exists
79
+ let shouldCopy = true;
80
+ try {
81
+ await fs.access(agent.target);
82
+ console.log(` āš ļø ${agent.name} already exists at ${agent.target}`);
83
+ console.log(' Overwriting with latest version...');
84
+ }
85
+ catch {
86
+ // Target doesn't exist, proceed with copy
87
+ }
88
+ if (shouldCopy) {
89
+ await fs.copyFile(agent.source, agent.target);
90
+ console.log(` āœ“ Installed ${agent.name}`);
91
+ }
92
+ }
93
+ catch (error) {
94
+ console.warn(` āš ļø Failed to install ${agent.name}: ${error.message}`);
95
+ }
96
+ }
97
+ console.log('\nāœ“ Agent personas installed to ~/.claude/agents/');
98
+ }
99
+ function getClaudeConfigPath() {
100
+ const home = homedir();
101
+ switch (process.platform) {
102
+ case 'win32':
103
+ return join(home, 'AppData', 'Roaming', 'Claude', 'config');
104
+ case 'darwin':
105
+ return join(home, 'Library', 'Application Support', 'Claude', 'config');
106
+ default:
107
+ return join(home, '.config', 'claude');
108
+ }
109
+ }
110
+ function getClaudeAgentsPath() {
111
+ const home = homedir();
112
+ // Claude Code agents directory is always at ~/.claude/agents/ on all platforms
113
+ return join(home, '.claude', 'agents');
114
+ }
115
+ //# sourceMappingURL=init-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-command.js","sourceRoot":"","sources":["../../src/cli/init-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}