langmart-gateway-type3 3.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/.env.example +29 -0
- package/README.md +480 -0
- package/dist/bash-tools.d.ts +56 -0
- package/dist/bash-tools.d.ts.map +1 -0
- package/dist/bash-tools.js +188 -0
- package/dist/bash-tools.js.map +1 -0
- package/dist/core-tools.d.ts +94 -0
- package/dist/core-tools.d.ts.map +1 -0
- package/dist/core-tools.js +694 -0
- package/dist/core-tools.js.map +1 -0
- package/dist/debug-utils.d.ts +22 -0
- package/dist/debug-utils.d.ts.map +1 -0
- package/dist/debug-utils.js +37 -0
- package/dist/debug-utils.js.map +1 -0
- package/dist/devops-tools.d.ts +147 -0
- package/dist/devops-tools.d.ts.map +1 -0
- package/dist/devops-tools.js +718 -0
- package/dist/devops-tools.js.map +1 -0
- package/dist/gateway-config.d.ts +56 -0
- package/dist/gateway-config.d.ts.map +1 -0
- package/dist/gateway-config.js +198 -0
- package/dist/gateway-config.js.map +1 -0
- package/dist/gateway-mode.d.ts +58 -0
- package/dist/gateway-mode.d.ts.map +1 -0
- package/dist/gateway-mode.js +240 -0
- package/dist/gateway-mode.js.map +1 -0
- package/dist/gateway-server.d.ts +208 -0
- package/dist/gateway-server.d.ts.map +1 -0
- package/dist/gateway-server.js +1811 -0
- package/dist/gateway-server.js.map +1 -0
- package/dist/headless-session.d.ts +192 -0
- package/dist/headless-session.d.ts.map +1 -0
- package/dist/headless-session.js +584 -0
- package/dist/headless-session.js.map +1 -0
- package/dist/index-server.d.ts +4 -0
- package/dist/index-server.d.ts.map +1 -0
- package/dist/index-server.js +129 -0
- package/dist/index-server.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +101 -0
- package/dist/index.js.map +1 -0
- package/dist/key-vault.d.ts +102 -0
- package/dist/key-vault.d.ts.map +1 -0
- package/dist/key-vault.js +365 -0
- package/dist/key-vault.js.map +1 -0
- package/dist/local-vault.d.ts +195 -0
- package/dist/local-vault.d.ts.map +1 -0
- package/dist/local-vault.js +571 -0
- package/dist/local-vault.js.map +1 -0
- package/dist/marketplace-tools.d.ts +104 -0
- package/dist/marketplace-tools.d.ts.map +1 -0
- package/dist/marketplace-tools.js +2846 -0
- package/dist/marketplace-tools.js.map +1 -0
- package/dist/mcp-manager.d.ts +114 -0
- package/dist/mcp-manager.d.ts.map +1 -0
- package/dist/mcp-manager.js +338 -0
- package/dist/mcp-manager.js.map +1 -0
- package/dist/web-tools.d.ts +86 -0
- package/dist/web-tools.d.ts.map +1 -0
- package/dist/web-tools.js +431 -0
- package/dist/web-tools.js.map +1 -0
- package/dist/websocket-handler.d.ts +131 -0
- package/dist/websocket-handler.d.ts.map +1 -0
- package/dist/websocket-handler.js +596 -0
- package/dist/websocket-handler.js.map +1 -0
- package/dist/welcome-pages.d.ts +6 -0
- package/dist/welcome-pages.d.ts.map +1 -0
- package/dist/welcome-pages.js +200 -0
- package/dist/welcome-pages.js.map +1 -0
- package/package.json +168 -0
- package/scripts/install-remote.sh +282 -0
- package/scripts/start.sh +85 -0
- package/scripts/status.sh +79 -0
- package/scripts/stop.sh +67 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Welcome Page Content for LangMart CLI
|
|
4
|
+
* Simple text-based pages without box-drawing characters
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.buildWelcomePage = void 0;
|
|
8
|
+
const buildWelcomePage = (pageNumber) => {
|
|
9
|
+
switch (pageNumber) {
|
|
10
|
+
case 0:
|
|
11
|
+
return buildMainWelcomePage();
|
|
12
|
+
case 1:
|
|
13
|
+
return buildBasicsGuidePage();
|
|
14
|
+
case 2:
|
|
15
|
+
return buildAddProviderGuidePage();
|
|
16
|
+
case 3:
|
|
17
|
+
return buildChatGuidePage();
|
|
18
|
+
default:
|
|
19
|
+
return buildMainWelcomePage();
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
exports.buildWelcomePage = buildWelcomePage;
|
|
23
|
+
const buildMainWelcomePage = () => {
|
|
24
|
+
return [
|
|
25
|
+
'',
|
|
26
|
+
' 🎯 Welcome to LangMart CLI',
|
|
27
|
+
' Self-Hosted AI Gateway & Chat Interface',
|
|
28
|
+
'',
|
|
29
|
+
' Page 1/4',
|
|
30
|
+
'',
|
|
31
|
+
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
|
32
|
+
'',
|
|
33
|
+
' 💡 What is LangMart?',
|
|
34
|
+
'',
|
|
35
|
+
' LangMart is your self-hosted AI gateway that gives you:',
|
|
36
|
+
'',
|
|
37
|
+
' ✓ Unified access to 20+ LLM providers',
|
|
38
|
+
' (OpenAI, Anthropic, Groq, Google, Ollama, and more)',
|
|
39
|
+
'',
|
|
40
|
+
' ✓ Complete control over your API keys and data',
|
|
41
|
+
' (stored locally in encrypted vault)',
|
|
42
|
+
'',
|
|
43
|
+
' ✓ Built-in AI assistant with powerful tools',
|
|
44
|
+
' (connection management, file operations, web search)',
|
|
45
|
+
'',
|
|
46
|
+
' ✓ Chat with any LLM using OpenAI-compatible API',
|
|
47
|
+
'',
|
|
48
|
+
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
|
49
|
+
'',
|
|
50
|
+
' 📖 What\'s Next?',
|
|
51
|
+
'',
|
|
52
|
+
' This guide will show you:',
|
|
53
|
+
' • The basics of using LangMart',
|
|
54
|
+
' • How to add your first AI provider',
|
|
55
|
+
' • How to chat with AI models',
|
|
56
|
+
'',
|
|
57
|
+
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
|
58
|
+
'',
|
|
59
|
+
' Press Space or Enter to continue →',
|
|
60
|
+
' Press ESC to skip guide',
|
|
61
|
+
''
|
|
62
|
+
];
|
|
63
|
+
};
|
|
64
|
+
const buildBasicsGuidePage = () => {
|
|
65
|
+
return [
|
|
66
|
+
'',
|
|
67
|
+
' 📚 Getting Started - The Basics',
|
|
68
|
+
'',
|
|
69
|
+
' Page 2/4',
|
|
70
|
+
'',
|
|
71
|
+
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
|
72
|
+
'',
|
|
73
|
+
' 🎯 What Can You Do Here?',
|
|
74
|
+
'',
|
|
75
|
+
' ✓ Chat with 20+ AI models',
|
|
76
|
+
' (OpenAI, Claude, Gemini, Llama, and more)',
|
|
77
|
+
'',
|
|
78
|
+
' ✓ Manage your AI provider connections',
|
|
79
|
+
'',
|
|
80
|
+
' ✓ Discover and register new models',
|
|
81
|
+
'',
|
|
82
|
+
' ✓ Store API keys securely in local vault',
|
|
83
|
+
'',
|
|
84
|
+
' ✓ Use AI with built-in tools',
|
|
85
|
+
' (files, web, connections)',
|
|
86
|
+
'',
|
|
87
|
+
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
|
88
|
+
'',
|
|
89
|
+
' ⚡ Quick Actions',
|
|
90
|
+
'',
|
|
91
|
+
' Tab Select AI model for chat',
|
|
92
|
+
' ESC Open main menu / settings',
|
|
93
|
+
' /help Show all commands',
|
|
94
|
+
' /tools List available AI tools',
|
|
95
|
+
' /status Check system health',
|
|
96
|
+
' /clear Start fresh conversation',
|
|
97
|
+
'',
|
|
98
|
+
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
|
99
|
+
'',
|
|
100
|
+
' 💡 Key Concepts',
|
|
101
|
+
'',
|
|
102
|
+
' Connection = Link to an AI provider (Groq, OpenAI, etc.)',
|
|
103
|
+
' Model = Specific AI (GPT-4, Claude, Llama, etc.)',
|
|
104
|
+
' Vault = Encrypted local storage for API keys',
|
|
105
|
+
' Tools = Functions AI can use (read files, etc.)',
|
|
106
|
+
''
|
|
107
|
+
];
|
|
108
|
+
};
|
|
109
|
+
const buildAddProviderGuidePage = () => {
|
|
110
|
+
return [
|
|
111
|
+
'',
|
|
112
|
+
' 🔌 Adding Your First AI Provider',
|
|
113
|
+
'',
|
|
114
|
+
' Page 3/4',
|
|
115
|
+
'',
|
|
116
|
+
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
|
117
|
+
'',
|
|
118
|
+
' 🤖 Easy Way: Just Ask the AI!',
|
|
119
|
+
'',
|
|
120
|
+
' Simply type your request in chat:',
|
|
121
|
+
'',
|
|
122
|
+
' → "Add Groq with API key gsk_..."',
|
|
123
|
+
' → "Connect to OpenAI with my key"',
|
|
124
|
+
' → "Set up Anthropic Claude"',
|
|
125
|
+
'',
|
|
126
|
+
' AI will automatically:',
|
|
127
|
+
' ✓ Validate your key',
|
|
128
|
+
' ✓ Create connection',
|
|
129
|
+
' ✓ Discover models',
|
|
130
|
+
'',
|
|
131
|
+
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
|
132
|
+
'',
|
|
133
|
+
' 🛠️ Manual Way: Through Menu',
|
|
134
|
+
'',
|
|
135
|
+
' 1. Press ESC → Settings & Configuration',
|
|
136
|
+
' 2. Select "Add Connection"',
|
|
137
|
+
' 3. Choose provider & enter API key',
|
|
138
|
+
' 4. Select "Self-hosted" for local storage',
|
|
139
|
+
'',
|
|
140
|
+
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
|
141
|
+
'',
|
|
142
|
+
' 🎁 Free Providers to Try:',
|
|
143
|
+
'',
|
|
144
|
+
' Groq Fast, generous free tier (recommended)',
|
|
145
|
+
' Ollama 100% free, runs locally',
|
|
146
|
+
' Gemini Google\'s AI with free tier',
|
|
147
|
+
'',
|
|
148
|
+
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
|
149
|
+
'',
|
|
150
|
+
' 💡 After Adding:',
|
|
151
|
+
' Ask AI: "Discover models from [provider]"',
|
|
152
|
+
''
|
|
153
|
+
];
|
|
154
|
+
};
|
|
155
|
+
const buildChatGuidePage = () => {
|
|
156
|
+
return [
|
|
157
|
+
'',
|
|
158
|
+
' 💬 Chatting with AI Models',
|
|
159
|
+
'',
|
|
160
|
+
' Page 4/4',
|
|
161
|
+
'',
|
|
162
|
+
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
|
163
|
+
'',
|
|
164
|
+
' Step 1: Pick a Model',
|
|
165
|
+
'',
|
|
166
|
+
' Press Tab → Browse models in tabs',
|
|
167
|
+
' Type to filter: "groq" or "claude" or "gpt"',
|
|
168
|
+
' Press Enter to select',
|
|
169
|
+
'',
|
|
170
|
+
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
|
171
|
+
'',
|
|
172
|
+
' Step 2: Just Chat!',
|
|
173
|
+
'',
|
|
174
|
+
' Type your message → Press Enter → Get response',
|
|
175
|
+
'',
|
|
176
|
+
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
|
177
|
+
'',
|
|
178
|
+
' 🛠️ AI Can Use Tools Automatically!',
|
|
179
|
+
'',
|
|
180
|
+
' Try asking:',
|
|
181
|
+
'',
|
|
182
|
+
' "List my connections" → Shows providers',
|
|
183
|
+
' "Discover models from Groq" → Finds models',
|
|
184
|
+
' "Test connection 1" → Checks it works',
|
|
185
|
+
' "Search the web for..." → Gets info',
|
|
186
|
+
' "Read file /path/to/file" → Shows content',
|
|
187
|
+
'',
|
|
188
|
+
' Available tools: Connections • Files • Web • System',
|
|
189
|
+
' Type /tools to see complete list',
|
|
190
|
+
'',
|
|
191
|
+
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━',
|
|
192
|
+
'',
|
|
193
|
+
' 💡 Quick Tips',
|
|
194
|
+
'',
|
|
195
|
+
' /clear Start fresh conversation',
|
|
196
|
+
' ↑ ↓ arrows Navigate input history',
|
|
197
|
+
''
|
|
198
|
+
];
|
|
199
|
+
};
|
|
200
|
+
//# sourceMappingURL=welcome-pages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"welcome-pages.js","sourceRoot":"","sources":["../welcome-pages.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEI,MAAM,gBAAgB,GAAG,CAAC,UAAkB,EAAY,EAAE;IAC7D,QAAQ,UAAU,EAAE,CAAC;QACjB,KAAK,CAAC;YACF,OAAO,oBAAoB,EAAE,CAAC;QAClC,KAAK,CAAC;YACF,OAAO,oBAAoB,EAAE,CAAC;QAClC,KAAK,CAAC;YACF,OAAO,yBAAyB,EAAE,CAAC;QACvC,KAAK,CAAC;YACF,OAAO,kBAAkB,EAAE,CAAC;QAChC;YACI,OAAO,oBAAoB,EAAE,CAAC;IACtC,CAAC;AACL,CAAC,CAAC;AAbW,QAAA,gBAAgB,oBAa3B;AAEF,MAAM,oBAAoB,GAAG,GAAa,EAAE;IACxC,OAAO;QACH,EAAE;QACF,8CAA8C;QAC9C,wDAAwD;QACxD,EAAE;QACF,sCAAsC;QACtC,EAAE;QACF,4EAA4E;QAC5E,EAAE;QACF,wBAAwB;QACxB,EAAE;QACF,2DAA2D;QAC3D,EAAE;QACF,yCAAyC;QACzC,yDAAyD;QACzD,EAAE;QACF,kDAAkD;QAClD,yCAAyC;QACzC,EAAE;QACF,+CAA+C;QAC/C,0DAA0D;QAC1D,EAAE;QACF,mDAAmD;QACnD,EAAE;QACF,4EAA4E;QAC5E,EAAE;QACF,oBAAoB;QACpB,EAAE;QACF,6BAA6B;QAC7B,kCAAkC;QAClC,uCAAuC;QACvC,gCAAgC;QAChC,EAAE;QACF,4EAA4E;QAC5E,EAAE;QACF,gDAAgD;QAChD,0CAA0C;QAC1C,EAAE;KACL,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,GAAa,EAAE;IACxC,OAAO;QACH,EAAE;QACF,mDAAmD;QACnD,EAAE;QACF,sCAAsC;QACtC,EAAE;QACF,4EAA4E;QAC5E,EAAE;QACF,4BAA4B;QAC5B,EAAE;QACF,6BAA6B;QAC7B,+CAA+C;QAC/C,EAAE;QACF,yCAAyC;QACzC,EAAE;QACF,sCAAsC;QACtC,EAAE;QACF,4CAA4C;QAC5C,EAAE;QACF,gCAAgC;QAChC,+BAA+B;QAC/B,EAAE;QACF,4EAA4E;QAC5E,EAAE;QACF,mBAAmB;QACnB,EAAE;QACF,wCAAwC;QACxC,yCAAyC;QACzC,iCAAiC;QACjC,uCAAuC;QACvC,mCAAmC;QACnC,wCAAwC;QACxC,EAAE;QACF,4EAA4E;QAC5E,EAAE;QACF,mBAAmB;QACnB,EAAE;QACF,4DAA4D;QAC5D,yDAAyD;QACzD,qDAAqD;QACrD,wDAAwD;QACxD,EAAE;KACL,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,GAAa,EAAE;IAC7C,OAAO;QACH,EAAE;QACF,iDAAiD;QACjD,EAAE;QACF,sCAAsC;QACtC,EAAE;QACF,4EAA4E;QAC5E,EAAE;QACF,iCAAiC;QACjC,EAAE;QACF,qCAAqC;QACrC,EAAE;QACF,qCAAqC;QACrC,qCAAqC;QACrC,+BAA+B;QAC/B,EAAE;QACF,0BAA0B;QAC1B,uBAAuB;QACvB,uBAAuB;QACvB,qBAAqB;QACrB,EAAE;QACF,4EAA4E;QAC5E,EAAE;QACF,iCAAiC;QACjC,EAAE;QACF,2CAA2C;QAC3C,8BAA8B;QAC9B,sCAAsC;QACtC,6CAA6C;QAC7C,EAAE;QACF,4EAA4E;QAC5E,EAAE;QACF,6BAA6B;QAC7B,EAAE;QACF,oDAAoD;QACpD,qCAAqC;QACrC,yCAAyC;QACzC,EAAE;QACF,4EAA4E;QAC5E,EAAE;QACF,oBAAoB;QACpB,6CAA6C;QAC7C,EAAE;KACL,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,GAAa,EAAE;IACtC,OAAO;QACH,EAAE;QACF,+CAA+C;QAC/C,EAAE;QACF,sCAAsC;QACtC,EAAE;QACF,4EAA4E;QAC5E,EAAE;QACF,wBAAwB;QACxB,EAAE;QACF,qCAAqC;QACrC,+CAA+C;QAC/C,yBAAyB;QACzB,EAAE;QACF,4EAA4E;QAC5E,EAAE;QACF,sBAAsB;QACtB,EAAE;QACF,kDAAkD;QAClD,EAAE;QACF,4EAA4E;QAC5E,EAAE;QACF,wCAAwC;QACxC,EAAE;QACF,eAAe;QACf,EAAE;QACF,gDAAgD;QAChD,8CAA8C;QAC9C,iDAAiD;QACjD,2CAA2C;QAC3C,+CAA+C;QAC/C,EAAE;QACF,uDAAuD;QACvD,oCAAoC;QACpC,EAAE;QACF,4EAA4E;QAC5E,EAAE;QACF,iBAAiB;QACjB,EAAE;QACF,wCAAwC;QACxC,sCAAsC;QACtC,EAAE;KACL,CAAC;AACN,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "langmart-gateway-type3",
|
|
3
|
+
"version": "3.0.0",
|
|
4
|
+
"description": "LangMart Type 3 Gateway - Seller-Managed Gateway with Local Vault",
|
|
5
|
+
"main": "dist/index-server.js",
|
|
6
|
+
"types": "dist/index-server.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"langmart-gateway": "./dist/index-server.js",
|
|
9
|
+
"gw3": "./dist/index-server.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"dev": "ts-node index-server.ts",
|
|
14
|
+
"start": "bash scripts/start.sh",
|
|
15
|
+
"stop": "bash scripts/stop.sh",
|
|
16
|
+
"restart": "npm run stop && sleep 2 && npm run start",
|
|
17
|
+
"status": "bash scripts/status.sh",
|
|
18
|
+
"cli": "ts-node cli.ts",
|
|
19
|
+
"ui": "vite-node cli-split-layout.tsx",
|
|
20
|
+
"ui:debug": "vite-node cli-split-layout.tsx --debug",
|
|
21
|
+
"self": "vite-node cli-split-layout.tsx",
|
|
22
|
+
"ui:tsx": "tsx cli-interactive.tsx",
|
|
23
|
+
"ui:ts-node": "node --loader ts-node/esm cli-interactive.tsx",
|
|
24
|
+
"test:vault": "vite-node test-vault-auth.ts",
|
|
25
|
+
"test:auth": "vite-node test-auth-flow.ts",
|
|
26
|
+
"clean": "rm -rf dist",
|
|
27
|
+
"typecheck": "tsc --noEmit",
|
|
28
|
+
"prepublishOnly": "npm run build",
|
|
29
|
+
"publish:dry": "npm publish --dry-run",
|
|
30
|
+
"publish:github": "npm publish --registry=https://npm.pkg.github.com"
|
|
31
|
+
},
|
|
32
|
+
"files": [
|
|
33
|
+
"dist/index-server.js",
|
|
34
|
+
"dist/index-server.js.map",
|
|
35
|
+
"dist/index-server.d.ts",
|
|
36
|
+
"dist/index-server.d.ts.map",
|
|
37
|
+
"dist/index.js",
|
|
38
|
+
"dist/index.js.map",
|
|
39
|
+
"dist/index.d.ts",
|
|
40
|
+
"dist/index.d.ts.map",
|
|
41
|
+
"dist/gateway-server.js",
|
|
42
|
+
"dist/gateway-server.js.map",
|
|
43
|
+
"dist/gateway-server.d.ts",
|
|
44
|
+
"dist/gateway-server.d.ts.map",
|
|
45
|
+
"dist/gateway-mode.js",
|
|
46
|
+
"dist/gateway-mode.js.map",
|
|
47
|
+
"dist/gateway-mode.d.ts",
|
|
48
|
+
"dist/gateway-mode.d.ts.map",
|
|
49
|
+
"dist/gateway-config.js",
|
|
50
|
+
"dist/gateway-config.js.map",
|
|
51
|
+
"dist/gateway-config.d.ts",
|
|
52
|
+
"dist/gateway-config.d.ts.map",
|
|
53
|
+
"dist/local-vault.js",
|
|
54
|
+
"dist/local-vault.js.map",
|
|
55
|
+
"dist/local-vault.d.ts",
|
|
56
|
+
"dist/local-vault.d.ts.map",
|
|
57
|
+
"dist/key-vault.js",
|
|
58
|
+
"dist/key-vault.js.map",
|
|
59
|
+
"dist/key-vault.d.ts",
|
|
60
|
+
"dist/key-vault.d.ts.map",
|
|
61
|
+
"dist/websocket-handler.js",
|
|
62
|
+
"dist/websocket-handler.js.map",
|
|
63
|
+
"dist/websocket-handler.d.ts",
|
|
64
|
+
"dist/websocket-handler.d.ts.map",
|
|
65
|
+
"dist/headless-session.js",
|
|
66
|
+
"dist/headless-session.js.map",
|
|
67
|
+
"dist/headless-session.d.ts",
|
|
68
|
+
"dist/headless-session.d.ts.map",
|
|
69
|
+
"dist/marketplace-tools.js",
|
|
70
|
+
"dist/marketplace-tools.js.map",
|
|
71
|
+
"dist/marketplace-tools.d.ts",
|
|
72
|
+
"dist/marketplace-tools.d.ts.map",
|
|
73
|
+
"dist/devops-tools.js",
|
|
74
|
+
"dist/devops-tools.js.map",
|
|
75
|
+
"dist/devops-tools.d.ts",
|
|
76
|
+
"dist/devops-tools.d.ts.map",
|
|
77
|
+
"dist/core-tools.js",
|
|
78
|
+
"dist/core-tools.js.map",
|
|
79
|
+
"dist/core-tools.d.ts",
|
|
80
|
+
"dist/core-tools.d.ts.map",
|
|
81
|
+
"dist/web-tools.js",
|
|
82
|
+
"dist/web-tools.js.map",
|
|
83
|
+
"dist/web-tools.d.ts",
|
|
84
|
+
"dist/web-tools.d.ts.map",
|
|
85
|
+
"dist/bash-tools.js",
|
|
86
|
+
"dist/bash-tools.js.map",
|
|
87
|
+
"dist/bash-tools.d.ts",
|
|
88
|
+
"dist/bash-tools.d.ts.map",
|
|
89
|
+
"dist/mcp-manager.js",
|
|
90
|
+
"dist/mcp-manager.js.map",
|
|
91
|
+
"dist/mcp-manager.d.ts",
|
|
92
|
+
"dist/mcp-manager.d.ts.map",
|
|
93
|
+
"dist/debug-utils.js",
|
|
94
|
+
"dist/debug-utils.js.map",
|
|
95
|
+
"dist/debug-utils.d.ts",
|
|
96
|
+
"dist/debug-utils.d.ts.map",
|
|
97
|
+
"dist/welcome-pages.js",
|
|
98
|
+
"dist/welcome-pages.js.map",
|
|
99
|
+
"dist/welcome-pages.d.ts",
|
|
100
|
+
"dist/welcome-pages.d.ts.map",
|
|
101
|
+
"scripts/start.sh",
|
|
102
|
+
"scripts/stop.sh",
|
|
103
|
+
"scripts/status.sh",
|
|
104
|
+
"scripts/install-remote.sh",
|
|
105
|
+
".env.example",
|
|
106
|
+
"README.md"
|
|
107
|
+
],
|
|
108
|
+
"keywords": [
|
|
109
|
+
"gateway",
|
|
110
|
+
"seller",
|
|
111
|
+
"websocket",
|
|
112
|
+
"server",
|
|
113
|
+
"llm",
|
|
114
|
+
"local-vault",
|
|
115
|
+
"langmart",
|
|
116
|
+
"ai-marketplace"
|
|
117
|
+
],
|
|
118
|
+
"author": "LangMart",
|
|
119
|
+
"license": "MIT",
|
|
120
|
+
"repository": {
|
|
121
|
+
"type": "git",
|
|
122
|
+
"url": "git+https://github.com/YiHuangDB/LangMartDesign.git",
|
|
123
|
+
"directory": "gateway-type3"
|
|
124
|
+
},
|
|
125
|
+
"bugs": {
|
|
126
|
+
"url": "https://github.com/YiHuangDB/LangMartDesign/issues"
|
|
127
|
+
},
|
|
128
|
+
"homepage": "https://github.com/YiHuangDB/LangMartDesign/tree/main/gateway-type3#readme",
|
|
129
|
+
"publishConfig": {
|
|
130
|
+
"registry": "https://registry.npmjs.org",
|
|
131
|
+
"access": "public"
|
|
132
|
+
},
|
|
133
|
+
"dependencies": {
|
|
134
|
+
"@modelcontextprotocol/sdk": "^1.18.2",
|
|
135
|
+
"@swc/core": "^1.13.5",
|
|
136
|
+
"@swc/helpers": "^0.5.17",
|
|
137
|
+
"@types/glob": "^8.1.0",
|
|
138
|
+
"@types/react": "^19.2.0",
|
|
139
|
+
"axios": "^1.6.7",
|
|
140
|
+
"cheerio": "^1.1.2",
|
|
141
|
+
"clipboardy": "^5.0.0",
|
|
142
|
+
"express": "^4.18.2",
|
|
143
|
+
"glob": "^11.0.3",
|
|
144
|
+
"ink": "^6.3.1",
|
|
145
|
+
"ink-spinner": "^5.0.0",
|
|
146
|
+
"ink-text-input": "^6.0.0",
|
|
147
|
+
"pg": "^8.16.3",
|
|
148
|
+
"react": "^19.2.0",
|
|
149
|
+
"ssh2": "^1.17.0",
|
|
150
|
+
"terminal-image": "^4.1.0",
|
|
151
|
+
"uuid": "^9.0.1",
|
|
152
|
+
"ws": "^8.16.0"
|
|
153
|
+
},
|
|
154
|
+
"devDependencies": {
|
|
155
|
+
"@swc-node/register": "^1.11.1",
|
|
156
|
+
"@types/express": "^5.0.3",
|
|
157
|
+
"@types/node": "^20.11.16",
|
|
158
|
+
"@types/uuid": "^9.0.8",
|
|
159
|
+
"@types/ws": "^8.5.10",
|
|
160
|
+
"ts-node": "^10.9.2",
|
|
161
|
+
"tsx": "^4.20.6",
|
|
162
|
+
"typescript": "^5.3.3",
|
|
163
|
+
"vite-node": "^3.2.4"
|
|
164
|
+
},
|
|
165
|
+
"engines": {
|
|
166
|
+
"node": ">=18.0.0"
|
|
167
|
+
}
|
|
168
|
+
}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Remote Installation Script for LangMart Gateway Type 3
|
|
3
|
+
# Usage: curl -fsSL https://raw.githubusercontent.com/YiHuangDB/LangMartDesign/main/gateway-type3/scripts/install-remote.sh | bash
|
|
4
|
+
# Or: bash install-remote.sh [OPTIONS]
|
|
5
|
+
#
|
|
6
|
+
# Options:
|
|
7
|
+
# --marketplace-url URL Marketplace WebSocket URL (default: ws://localhost:8081)
|
|
8
|
+
# --api-key KEY Gateway API key for authentication
|
|
9
|
+
# --port PORT Gateway port (default: 8083)
|
|
10
|
+
# --install-dir DIR Installation directory (default: /opt/langmart-gateway)
|
|
11
|
+
# --service Install as systemd service
|
|
12
|
+
# --help Show this help message
|
|
13
|
+
|
|
14
|
+
set -e
|
|
15
|
+
|
|
16
|
+
# Colors
|
|
17
|
+
RED='\033[0;31m'
|
|
18
|
+
GREEN='\033[0;32m'
|
|
19
|
+
YELLOW='\033[1;33m'
|
|
20
|
+
BLUE='\033[0;34m'
|
|
21
|
+
CYAN='\033[0;36m'
|
|
22
|
+
NC='\033[0m' # No Color
|
|
23
|
+
|
|
24
|
+
# Default configuration
|
|
25
|
+
INSTALL_DIR="/opt/langmart-gateway"
|
|
26
|
+
GATEWAY_PORT="8083"
|
|
27
|
+
MARKETPLACE_URL="ws://localhost:8081"
|
|
28
|
+
GATEWAY_API_KEY=""
|
|
29
|
+
INSTALL_SERVICE=false
|
|
30
|
+
GITHUB_TOKEN=""
|
|
31
|
+
|
|
32
|
+
# Parse command line arguments
|
|
33
|
+
while [[ $# -gt 0 ]]; do
|
|
34
|
+
case $1 in
|
|
35
|
+
--marketplace-url)
|
|
36
|
+
MARKETPLACE_URL="$2"
|
|
37
|
+
shift 2
|
|
38
|
+
;;
|
|
39
|
+
--api-key)
|
|
40
|
+
GATEWAY_API_KEY="$2"
|
|
41
|
+
shift 2
|
|
42
|
+
;;
|
|
43
|
+
--port)
|
|
44
|
+
GATEWAY_PORT="$2"
|
|
45
|
+
shift 2
|
|
46
|
+
;;
|
|
47
|
+
--install-dir)
|
|
48
|
+
INSTALL_DIR="$2"
|
|
49
|
+
shift 2
|
|
50
|
+
;;
|
|
51
|
+
--service)
|
|
52
|
+
INSTALL_SERVICE=true
|
|
53
|
+
shift
|
|
54
|
+
;;
|
|
55
|
+
--github-token)
|
|
56
|
+
GITHUB_TOKEN="$2"
|
|
57
|
+
shift 2
|
|
58
|
+
;;
|
|
59
|
+
--help)
|
|
60
|
+
echo "LangMart Gateway Type 3 - Remote Installation Script"
|
|
61
|
+
echo ""
|
|
62
|
+
echo "Usage: $0 [OPTIONS]"
|
|
63
|
+
echo ""
|
|
64
|
+
echo "Options:"
|
|
65
|
+
echo " --marketplace-url URL Marketplace WebSocket URL (default: ws://localhost:8081)"
|
|
66
|
+
echo " --api-key KEY Gateway API key for authentication"
|
|
67
|
+
echo " --port PORT Gateway port (default: 8083)"
|
|
68
|
+
echo " --install-dir DIR Installation directory (default: /opt/langmart-gateway)"
|
|
69
|
+
echo " --service Install as systemd service"
|
|
70
|
+
echo " --github-token TOKEN GitHub token for npm package access"
|
|
71
|
+
echo " --help Show this help message"
|
|
72
|
+
echo ""
|
|
73
|
+
echo "Example:"
|
|
74
|
+
echo " $0 --marketplace-url ws://10.0.1.117:8081 --api-key sk-test-key --service"
|
|
75
|
+
exit 0
|
|
76
|
+
;;
|
|
77
|
+
*)
|
|
78
|
+
echo -e "${RED}Unknown option: $1${NC}"
|
|
79
|
+
exit 1
|
|
80
|
+
;;
|
|
81
|
+
esac
|
|
82
|
+
done
|
|
83
|
+
|
|
84
|
+
echo -e "${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"
|
|
85
|
+
echo -e "${BLUE}║ LangMart Gateway Type 3 - Remote Installation ║${NC}"
|
|
86
|
+
echo -e "${BLUE}╚════════════════════════════════════════════════════════════╝${NC}"
|
|
87
|
+
echo ""
|
|
88
|
+
|
|
89
|
+
# Check if running as root
|
|
90
|
+
if [ "$EUID" -ne 0 ]; then
|
|
91
|
+
echo -e "${YELLOW}Warning: Not running as root. You may need sudo for some operations.${NC}"
|
|
92
|
+
fi
|
|
93
|
+
|
|
94
|
+
# Check Node.js installation
|
|
95
|
+
echo -e "${CYAN}[1/6] Checking Node.js installation...${NC}"
|
|
96
|
+
if ! command -v node &> /dev/null; then
|
|
97
|
+
echo -e "${YELLOW}Node.js not found. Installing Node.js 20.x...${NC}"
|
|
98
|
+
|
|
99
|
+
# Detect OS
|
|
100
|
+
if [ -f /etc/debian_version ]; then
|
|
101
|
+
# Debian/Ubuntu
|
|
102
|
+
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
|
103
|
+
sudo apt-get install -y nodejs
|
|
104
|
+
elif [ -f /etc/redhat-release ]; then
|
|
105
|
+
# RHEL/CentOS/Fedora
|
|
106
|
+
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
|
|
107
|
+
sudo yum install -y nodejs
|
|
108
|
+
elif [ "$(uname)" == "Darwin" ]; then
|
|
109
|
+
# macOS
|
|
110
|
+
if command -v brew &> /dev/null; then
|
|
111
|
+
brew install node@20
|
|
112
|
+
else
|
|
113
|
+
echo -e "${RED}Please install Homebrew first: https://brew.sh${NC}"
|
|
114
|
+
exit 1
|
|
115
|
+
fi
|
|
116
|
+
else
|
|
117
|
+
echo -e "${RED}Unsupported OS. Please install Node.js 18+ manually.${NC}"
|
|
118
|
+
exit 1
|
|
119
|
+
fi
|
|
120
|
+
fi
|
|
121
|
+
|
|
122
|
+
NODE_VERSION=$(node -v)
|
|
123
|
+
echo -e "${GREEN}✓ Node.js ${NODE_VERSION} installed${NC}"
|
|
124
|
+
|
|
125
|
+
# Check npm
|
|
126
|
+
if ! command -v npm &> /dev/null; then
|
|
127
|
+
echo -e "${RED}npm not found. Please install npm.${NC}"
|
|
128
|
+
exit 1
|
|
129
|
+
fi
|
|
130
|
+
|
|
131
|
+
NPM_VERSION=$(npm -v)
|
|
132
|
+
echo -e "${GREEN}✓ npm ${NPM_VERSION} installed${NC}"
|
|
133
|
+
|
|
134
|
+
# Create installation directory
|
|
135
|
+
echo -e "${CYAN}[2/6] Creating installation directory...${NC}"
|
|
136
|
+
sudo mkdir -p "$INSTALL_DIR"
|
|
137
|
+
sudo chown -R $(whoami):$(whoami) "$INSTALL_DIR"
|
|
138
|
+
cd "$INSTALL_DIR"
|
|
139
|
+
echo -e "${GREEN}✓ Directory created: ${INSTALL_DIR}${NC}"
|
|
140
|
+
|
|
141
|
+
# Configure npm for GitHub Packages
|
|
142
|
+
echo -e "${CYAN}[3/6] Configuring npm registry...${NC}"
|
|
143
|
+
if [ -n "$GITHUB_TOKEN" ]; then
|
|
144
|
+
echo "@langmart:registry=https://npm.pkg.github.com" > .npmrc
|
|
145
|
+
echo "//npm.pkg.github.com/:_authToken=${GITHUB_TOKEN}" >> .npmrc
|
|
146
|
+
echo -e "${GREEN}✓ GitHub Packages configured${NC}"
|
|
147
|
+
else
|
|
148
|
+
echo -e "${YELLOW}No GitHub token provided. Using public npm registry fallback...${NC}"
|
|
149
|
+
# For public packages or when cloning directly
|
|
150
|
+
fi
|
|
151
|
+
|
|
152
|
+
# Initialize package.json if not exists
|
|
153
|
+
if [ ! -f package.json ]; then
|
|
154
|
+
echo '{"name": "langmart-gateway-instance", "version": "1.0.0", "private": true}' > package.json
|
|
155
|
+
fi
|
|
156
|
+
|
|
157
|
+
# Install the gateway package
|
|
158
|
+
echo -e "${CYAN}[4/6] Installing @langmart/gateway-type3...${NC}"
|
|
159
|
+
if [ -n "$GITHUB_TOKEN" ]; then
|
|
160
|
+
npm install @langmart/gateway-type3@latest
|
|
161
|
+
else
|
|
162
|
+
# Direct clone fallback for development
|
|
163
|
+
echo -e "${YELLOW}Cloning from GitHub repository...${NC}"
|
|
164
|
+
git clone --depth 1 https://github.com/YiHuangDB/LangMartDesign.git /tmp/langmart-clone
|
|
165
|
+
cp -r /tmp/langmart-clone/gateway-type3/* .
|
|
166
|
+
rm -rf /tmp/langmart-clone
|
|
167
|
+
npm install --production
|
|
168
|
+
npm run build
|
|
169
|
+
fi
|
|
170
|
+
echo -e "${GREEN}✓ Gateway package installed${NC}"
|
|
171
|
+
|
|
172
|
+
# Create environment file
|
|
173
|
+
echo -e "${CYAN}[5/6] Creating environment configuration...${NC}"
|
|
174
|
+
cat > .env << EOF
|
|
175
|
+
# LangMart Gateway Type 3 Configuration
|
|
176
|
+
# Generated by install-remote.sh on $(date)
|
|
177
|
+
|
|
178
|
+
# Gateway identification
|
|
179
|
+
INSTANCE_ID=gw3-$(hostname)-$(date +%s | tail -c 5)
|
|
180
|
+
GATEWAY_PORT=${GATEWAY_PORT}
|
|
181
|
+
|
|
182
|
+
# Marketplace connection
|
|
183
|
+
MARKETPLACE_URL=${MARKETPLACE_URL}
|
|
184
|
+
|
|
185
|
+
# Gateway authentication
|
|
186
|
+
GATEWAY_API_KEY=${GATEWAY_API_KEY}
|
|
187
|
+
|
|
188
|
+
# Local vault configuration
|
|
189
|
+
VAULT_PATH=.vault/credentials.enc
|
|
190
|
+
VAULT_PASSWORD=$(openssl rand -base64 32)
|
|
191
|
+
|
|
192
|
+
# Environment
|
|
193
|
+
NODE_ENV=production
|
|
194
|
+
EOF
|
|
195
|
+
|
|
196
|
+
echo -e "${GREEN}✓ Environment file created${NC}"
|
|
197
|
+
|
|
198
|
+
# Create start/stop scripts
|
|
199
|
+
cat > start.sh << 'STARTEOF'
|
|
200
|
+
#!/bin/bash
|
|
201
|
+
cd "$(dirname "$0")"
|
|
202
|
+
source .env 2>/dev/null || true
|
|
203
|
+
|
|
204
|
+
if [ -d node_modules/@langmart/gateway-type3 ]; then
|
|
205
|
+
# Installed via npm
|
|
206
|
+
node node_modules/@langmart/gateway-type3/dist/index-server.js
|
|
207
|
+
else
|
|
208
|
+
# Direct installation
|
|
209
|
+
node dist/index-server.js
|
|
210
|
+
fi
|
|
211
|
+
STARTEOF
|
|
212
|
+
chmod +x start.sh
|
|
213
|
+
|
|
214
|
+
cat > stop.sh << 'STOPEOF'
|
|
215
|
+
#!/bin/bash
|
|
216
|
+
PORT=${GATEWAY_PORT:-8083}
|
|
217
|
+
PID=$(lsof -ti:$PORT)
|
|
218
|
+
if [ -n "$PID" ]; then
|
|
219
|
+
kill $PID
|
|
220
|
+
echo "Gateway stopped (PID: $PID)"
|
|
221
|
+
else
|
|
222
|
+
echo "Gateway not running"
|
|
223
|
+
fi
|
|
224
|
+
STOPEOF
|
|
225
|
+
chmod +x stop.sh
|
|
226
|
+
|
|
227
|
+
# Install as systemd service if requested
|
|
228
|
+
if [ "$INSTALL_SERVICE" = true ]; then
|
|
229
|
+
echo -e "${CYAN}[6/6] Installing systemd service...${NC}"
|
|
230
|
+
|
|
231
|
+
sudo tee /etc/systemd/system/langmart-gateway.service > /dev/null << EOF
|
|
232
|
+
[Unit]
|
|
233
|
+
Description=LangMart Gateway Type 3
|
|
234
|
+
After=network.target
|
|
235
|
+
|
|
236
|
+
[Service]
|
|
237
|
+
Type=simple
|
|
238
|
+
User=$(whoami)
|
|
239
|
+
WorkingDirectory=${INSTALL_DIR}
|
|
240
|
+
EnvironmentFile=${INSTALL_DIR}/.env
|
|
241
|
+
ExecStart=/usr/bin/node ${INSTALL_DIR}/start.sh
|
|
242
|
+
Restart=on-failure
|
|
243
|
+
RestartSec=10
|
|
244
|
+
|
|
245
|
+
[Install]
|
|
246
|
+
WantedBy=multi-user.target
|
|
247
|
+
EOF
|
|
248
|
+
|
|
249
|
+
sudo systemctl daemon-reload
|
|
250
|
+
sudo systemctl enable langmart-gateway
|
|
251
|
+
echo -e "${GREEN}✓ Systemd service installed${NC}"
|
|
252
|
+
echo -e "${CYAN} Start: sudo systemctl start langmart-gateway${NC}"
|
|
253
|
+
echo -e "${CYAN} Stop: sudo systemctl stop langmart-gateway${NC}"
|
|
254
|
+
echo -e "${CYAN} Status: sudo systemctl status langmart-gateway${NC}"
|
|
255
|
+
echo -e "${CYAN} Logs: sudo journalctl -u langmart-gateway -f${NC}"
|
|
256
|
+
else
|
|
257
|
+
echo -e "${CYAN}[6/6] Skipping systemd service installation...${NC}"
|
|
258
|
+
fi
|
|
259
|
+
|
|
260
|
+
echo ""
|
|
261
|
+
echo -e "${GREEN}╔════════════════════════════════════════════════════════════╗${NC}"
|
|
262
|
+
echo -e "${GREEN}║ Installation Complete! ║${NC}"
|
|
263
|
+
echo -e "${GREEN}╚════════════════════════════════════════════════════════════╝${NC}"
|
|
264
|
+
echo ""
|
|
265
|
+
echo -e "${CYAN}Installation Directory: ${INSTALL_DIR}${NC}"
|
|
266
|
+
echo -e "${CYAN}Gateway Port: ${GATEWAY_PORT}${NC}"
|
|
267
|
+
echo -e "${CYAN}Marketplace URL: ${MARKETPLACE_URL}${NC}"
|
|
268
|
+
echo ""
|
|
269
|
+
echo -e "${YELLOW}Before starting, configure your API key:${NC}"
|
|
270
|
+
echo -e " ${CYAN}1. Edit ${INSTALL_DIR}/.env${NC}"
|
|
271
|
+
echo -e " ${CYAN}2. Set GATEWAY_API_KEY=your-api-key${NC}"
|
|
272
|
+
echo ""
|
|
273
|
+
echo -e "${YELLOW}To start the gateway:${NC}"
|
|
274
|
+
if [ "$INSTALL_SERVICE" = true ]; then
|
|
275
|
+
echo -e " ${CYAN}sudo systemctl start langmart-gateway${NC}"
|
|
276
|
+
else
|
|
277
|
+
echo -e " ${CYAN}cd ${INSTALL_DIR} && ./start.sh${NC}"
|
|
278
|
+
fi
|
|
279
|
+
echo ""
|
|
280
|
+
echo -e "${YELLOW}To verify installation:${NC}"
|
|
281
|
+
echo -e " ${CYAN}curl http://localhost:${GATEWAY_PORT}/health${NC}"
|
|
282
|
+
echo ""
|