@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.
- package/LICENSE +21 -0
- package/README.md +87 -0
- package/dist/cache/file-cache.d.ts +10 -0
- package/dist/cache/file-cache.d.ts.map +1 -0
- package/dist/cache/file-cache.js +79 -0
- package/dist/cache/file-cache.js.map +1 -0
- package/dist/cli/init-command.d.ts +2 -0
- package/dist/cli/init-command.d.ts.map +1 -0
- package/dist/cli/init-command.js +115 -0
- package/dist/cli/init-command.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +493 -0
- package/dist/index.js.map +1 -0
- package/dist/scrapers/docs-scraper.d.ts +28 -0
- package/dist/scrapers/docs-scraper.d.ts.map +1 -0
- package/dist/scrapers/docs-scraper.js +200 -0
- package/dist/scrapers/docs-scraper.js.map +1 -0
- package/dist/search/keyword-search.d.ts +39 -0
- package/dist/search/keyword-search.d.ts.map +1 -0
- package/dist/search/keyword-search.js +127 -0
- package/dist/search/keyword-search.js.map +1 -0
- package/dist/tools/code-generation-tool.d.ts +33 -0
- package/dist/tools/code-generation-tool.d.ts.map +1 -0
- package/dist/tools/code-generation-tool.js +62 -0
- package/dist/tools/code-generation-tool.js.map +1 -0
- package/dist/tools/search-result-formatter.d.ts +27 -0
- package/dist/tools/search-result-formatter.d.ts.map +1 -0
- package/dist/tools/search-result-formatter.js +89 -0
- package/dist/tools/search-result-formatter.js.map +1 -0
- package/dist/tools/search-tool.d.ts +9 -0
- package/dist/tools/search-tool.d.ts.map +1 -0
- package/dist/tools/search-tool.js +32 -0
- package/dist/tools/search-tool.js.map +1 -0
- package/dist/tools/template-loader.d.ts +54 -0
- package/dist/tools/template-loader.d.ts.map +1 -0
- package/dist/tools/template-loader.js +148 -0
- package/dist/tools/template-loader.js.map +1 -0
- package/dist/types/search.d.ts +21 -0
- package/dist/types/search.d.ts.map +1 -0
- package/dist/types/search.js +2 -0
- package/dist/types/search.js.map +1 -0
- package/package.json +63 -0
- package/templates/README.md +98 -0
- package/templates/authenticate/curl.template +97 -0
- package/templates/authenticate/java.template +155 -0
- package/templates/authenticate/python.template +111 -0
- package/templates/authenticate/typescript.template +98 -0
- package/templates/create_menu/curl.template +145 -0
- package/templates/create_menu/java.template +285 -0
- package/templates/create_menu/python.template +159 -0
- package/templates/create_menu/typescript.template +184 -0
- package/templates/receive_order/curl.template +138 -0
- package/templates/receive_order/java.template +263 -0
- package/templates/receive_order/python.template +157 -0
- package/templates/receive_order/typescript.template +194 -0
- package/templates/update_item_availability/curl.template +143 -0
- package/templates/update_item_availability/java.template +279 -0
- package/templates/update_item_availability/python.template +203 -0
- package/templates/update_item_availability/typescript.template +194 -0
- package/templates/update_order_status/curl.template +138 -0
- package/templates/update_order_status/java.template +202 -0
- package/templates/update_order_status/python.template +142 -0
- 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
|
+
[](https://www.npmjs.com/package/@grubtech/integration-agent)
|
6
|
+
[](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":"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"}
|
@@ -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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"}
|
package/dist/index.d.ts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|