@majkapp/majk-chat-cli 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/README.md +746 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1001 -0
- package/dist/cli.js.map +1 -0
- package/dist/interactive/interactive.d.ts +27 -0
- package/dist/interactive/interactive.d.ts.map +1 -0
- package/dist/interactive/interactive.js +361 -0
- package/dist/interactive/interactive.js.map +1 -0
- package/dist/tools/bash.tool.d.ts +11 -0
- package/dist/tools/bash.tool.d.ts.map +1 -0
- package/dist/tools/bash.tool.js +140 -0
- package/dist/tools/bash.tool.js.map +1 -0
- package/dist/tools/filesystem.tool.d.ts +20 -0
- package/dist/tools/filesystem.tool.d.ts.map +1 -0
- package/dist/tools/filesystem.tool.js +312 -0
- package/dist/tools/filesystem.tool.js.map +1 -0
- package/dist/utils/config.d.ts +8 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +140 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/credentials.d.ts +45 -0
- package/dist/utils/credentials.d.ts.map +1 -0
- package/dist/utils/credentials.js +265 -0
- package/dist/utils/credentials.js.map +1 -0
- package/dist/utils/models.d.ts +10 -0
- package/dist/utils/models.d.ts.map +1 -0
- package/dist/utils/models.js +56 -0
- package/dist/utils/models.js.map +1 -0
- package/dist/utils/output.d.ts +133 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +306 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/tool-filter.d.ts +35 -0
- package/dist/utils/tool-filter.d.ts.map +1 -0
- package/dist/utils/tool-filter.js +94 -0
- package/dist/utils/tool-filter.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.OutputHandler = void 0;
|
|
40
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
41
|
+
const uuid_1 = require("uuid");
|
|
42
|
+
const process = __importStar(require("process"));
|
|
43
|
+
class OutputHandler {
|
|
44
|
+
format;
|
|
45
|
+
options;
|
|
46
|
+
sessionId = (0, uuid_1.v4)();
|
|
47
|
+
startTime = Date.now();
|
|
48
|
+
turnCount = 0;
|
|
49
|
+
finalResult = '';
|
|
50
|
+
totalUsage = {
|
|
51
|
+
input_tokens: 0,
|
|
52
|
+
output_tokens: 0,
|
|
53
|
+
server_tool_use: { web_search_requests: 0 }
|
|
54
|
+
};
|
|
55
|
+
constructor(format = 'text', options = {}) {
|
|
56
|
+
this.format = format;
|
|
57
|
+
this.options = options;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Initialize stream-json session
|
|
61
|
+
*/
|
|
62
|
+
initializeSession(tools, mcpServers = [], model = '') {
|
|
63
|
+
if (this.format === 'stream-json') {
|
|
64
|
+
const init = {
|
|
65
|
+
type: 'system',
|
|
66
|
+
subtype: 'init',
|
|
67
|
+
cwd: this.options.cwd || process.cwd(),
|
|
68
|
+
session_id: this.sessionId,
|
|
69
|
+
tools,
|
|
70
|
+
mcp_servers: mcpServers,
|
|
71
|
+
model,
|
|
72
|
+
permissionMode: 'default',
|
|
73
|
+
slash_commands: [],
|
|
74
|
+
apiKeySource: 'environment',
|
|
75
|
+
output_style: 'default',
|
|
76
|
+
uuid: (0, uuid_1.v4)()
|
|
77
|
+
};
|
|
78
|
+
console.log(JSON.stringify(init));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Output a complete message
|
|
83
|
+
*/
|
|
84
|
+
outputMessage(role, content, usage, toolCalls) {
|
|
85
|
+
this.turnCount++;
|
|
86
|
+
if (this.format === 'text') {
|
|
87
|
+
if (role === 'assistant') {
|
|
88
|
+
console.log(chalk_1.default.cyan('\nAssistant:'));
|
|
89
|
+
console.log(content);
|
|
90
|
+
}
|
|
91
|
+
else if (role === 'user') {
|
|
92
|
+
console.log(chalk_1.default.green('\nUser:'));
|
|
93
|
+
console.log(content);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else if (this.format === 'stream-json') {
|
|
97
|
+
// Text content message
|
|
98
|
+
const textMessage = {
|
|
99
|
+
type: role,
|
|
100
|
+
message: {
|
|
101
|
+
id: `msg_${(0, uuid_1.v4)().replace(/-/g, '')}`,
|
|
102
|
+
type: 'message',
|
|
103
|
+
role,
|
|
104
|
+
model: this.options.model,
|
|
105
|
+
content: [{
|
|
106
|
+
type: 'text',
|
|
107
|
+
text: content
|
|
108
|
+
}],
|
|
109
|
+
stop_reason: null,
|
|
110
|
+
stop_sequence: null,
|
|
111
|
+
usage: usage ? {
|
|
112
|
+
input_tokens: usage.prompt_tokens || 0,
|
|
113
|
+
cache_creation_input_tokens: 0,
|
|
114
|
+
cache_read_input_tokens: 0,
|
|
115
|
+
cache_creation: {
|
|
116
|
+
ephemeral_5m_input_tokens: 0,
|
|
117
|
+
ephemeral_1h_input_tokens: 0
|
|
118
|
+
},
|
|
119
|
+
output_tokens: usage.completion_tokens || 0,
|
|
120
|
+
service_tier: 'standard'
|
|
121
|
+
} : undefined
|
|
122
|
+
},
|
|
123
|
+
parent_tool_use_id: null,
|
|
124
|
+
session_id: this.sessionId,
|
|
125
|
+
uuid: (0, uuid_1.v4)()
|
|
126
|
+
};
|
|
127
|
+
console.log(JSON.stringify(textMessage));
|
|
128
|
+
// Track usage
|
|
129
|
+
if (usage) {
|
|
130
|
+
this.totalUsage.input_tokens += usage.prompt_tokens || 0;
|
|
131
|
+
this.totalUsage.output_tokens += usage.completion_tokens || 0;
|
|
132
|
+
}
|
|
133
|
+
// Store final result for summary
|
|
134
|
+
if (role === 'assistant') {
|
|
135
|
+
this.finalResult = content;
|
|
136
|
+
}
|
|
137
|
+
// Output tool calls as separate messages
|
|
138
|
+
if (toolCalls && toolCalls.length > 0) {
|
|
139
|
+
for (const toolCall of toolCalls) {
|
|
140
|
+
this.outputToolCallMessage(toolCall);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Output a tool call as a message
|
|
147
|
+
*/
|
|
148
|
+
outputToolCallMessage(toolCall) {
|
|
149
|
+
const toolMessage = {
|
|
150
|
+
type: 'assistant',
|
|
151
|
+
message: {
|
|
152
|
+
id: `msg_${(0, uuid_1.v4)().replace(/-/g, '')}`,
|
|
153
|
+
type: 'message',
|
|
154
|
+
role: 'assistant',
|
|
155
|
+
model: this.options.model,
|
|
156
|
+
content: [{
|
|
157
|
+
type: 'tool_use',
|
|
158
|
+
id: toolCall.id || `toolu_${(0, uuid_1.v4)().replace(/-/g, '')}`,
|
|
159
|
+
name: toolCall.function.name,
|
|
160
|
+
input: JSON.parse(toolCall.function.arguments)
|
|
161
|
+
}],
|
|
162
|
+
stop_reason: null,
|
|
163
|
+
stop_sequence: null,
|
|
164
|
+
usage: {
|
|
165
|
+
input_tokens: 0,
|
|
166
|
+
output_tokens: 0,
|
|
167
|
+
service_tier: 'standard'
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
parent_tool_use_id: null,
|
|
171
|
+
session_id: this.sessionId,
|
|
172
|
+
uuid: (0, uuid_1.v4)()
|
|
173
|
+
};
|
|
174
|
+
console.log(JSON.stringify(toolMessage));
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Output a tool call (legacy method for text format)
|
|
178
|
+
*/
|
|
179
|
+
outputToolCall(toolName, args) {
|
|
180
|
+
if (this.format === 'text') {
|
|
181
|
+
console.log(chalk_1.default.magenta(`\n🔧 Calling tool: ${toolName}`));
|
|
182
|
+
console.log(chalk_1.default.gray(JSON.stringify(args, null, 2)));
|
|
183
|
+
}
|
|
184
|
+
// For stream-json, tool calls are handled in outputMessage
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Output a tool result
|
|
188
|
+
*/
|
|
189
|
+
outputToolResult(toolUseId, result) {
|
|
190
|
+
if (this.format === 'text') {
|
|
191
|
+
console.log(chalk_1.default.blue(`\n✅ Tool result:`));
|
|
192
|
+
if (typeof result === 'string') {
|
|
193
|
+
console.log(result);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
console.log(JSON.stringify(result, null, 2));
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else if (this.format === 'stream-json') {
|
|
200
|
+
const resultMessage = {
|
|
201
|
+
type: 'user',
|
|
202
|
+
message: {
|
|
203
|
+
type: 'message',
|
|
204
|
+
role: 'user',
|
|
205
|
+
content: [{
|
|
206
|
+
type: 'tool_result',
|
|
207
|
+
tool_use_id: toolUseId,
|
|
208
|
+
content: typeof result === 'string' ? result : JSON.stringify(result)
|
|
209
|
+
}]
|
|
210
|
+
},
|
|
211
|
+
parent_tool_use_id: null,
|
|
212
|
+
session_id: this.sessionId,
|
|
213
|
+
uuid: (0, uuid_1.v4)()
|
|
214
|
+
};
|
|
215
|
+
console.log(JSON.stringify(resultMessage));
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Output an error
|
|
220
|
+
*/
|
|
221
|
+
outputError(error) {
|
|
222
|
+
const errorMessage = error instanceof Error ? error.message : error;
|
|
223
|
+
if (this.format === 'text') {
|
|
224
|
+
console.error(chalk_1.default.red('\n❌ Error:'), errorMessage);
|
|
225
|
+
}
|
|
226
|
+
else if (this.format === 'stream-json') {
|
|
227
|
+
const result = {
|
|
228
|
+
type: 'result',
|
|
229
|
+
subtype: 'error',
|
|
230
|
+
is_error: true,
|
|
231
|
+
duration_ms: Date.now() - this.startTime,
|
|
232
|
+
duration_api_ms: 0,
|
|
233
|
+
num_turns: this.turnCount,
|
|
234
|
+
result: errorMessage,
|
|
235
|
+
session_id: this.sessionId,
|
|
236
|
+
total_cost_usd: 0,
|
|
237
|
+
usage: this.totalUsage,
|
|
238
|
+
permission_denials: [],
|
|
239
|
+
uuid: (0, uuid_1.v4)()
|
|
240
|
+
};
|
|
241
|
+
console.log(JSON.stringify(result));
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Output completion signal
|
|
246
|
+
*/
|
|
247
|
+
outputComplete(usage, apiDuration = 0) {
|
|
248
|
+
if (this.format === 'text') {
|
|
249
|
+
if (usage) {
|
|
250
|
+
console.log(chalk_1.default.gray(`\n📊 Tokens: ${usage.total_tokens} (prompt: ${usage.prompt_tokens}, completion: ${usage.completion_tokens})`));
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
else if (this.format === 'stream-json') {
|
|
254
|
+
// Update final usage
|
|
255
|
+
if (usage) {
|
|
256
|
+
this.totalUsage.input_tokens = usage.prompt_tokens || 0;
|
|
257
|
+
this.totalUsage.output_tokens = usage.completion_tokens || 0;
|
|
258
|
+
}
|
|
259
|
+
const result = {
|
|
260
|
+
type: 'result',
|
|
261
|
+
subtype: 'success',
|
|
262
|
+
is_error: false,
|
|
263
|
+
duration_ms: Date.now() - this.startTime,
|
|
264
|
+
duration_api_ms: apiDuration,
|
|
265
|
+
num_turns: this.turnCount,
|
|
266
|
+
result: this.finalResult,
|
|
267
|
+
session_id: this.sessionId,
|
|
268
|
+
total_cost_usd: this.calculateCost(this.totalUsage),
|
|
269
|
+
usage: {
|
|
270
|
+
...this.totalUsage,
|
|
271
|
+
service_tier: 'standard'
|
|
272
|
+
},
|
|
273
|
+
permission_denials: [],
|
|
274
|
+
uuid: (0, uuid_1.v4)()
|
|
275
|
+
};
|
|
276
|
+
console.log(JSON.stringify(result));
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Start a spinner (only for text format)
|
|
281
|
+
*/
|
|
282
|
+
startSpinner(message) {
|
|
283
|
+
if (this.format === 'text') {
|
|
284
|
+
const ora = require('ora');
|
|
285
|
+
return ora(message).start();
|
|
286
|
+
}
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Calculate approximate cost (simplified)
|
|
291
|
+
*/
|
|
292
|
+
calculateCost(usage) {
|
|
293
|
+
// Rough cost calculation - you may want to make this more accurate
|
|
294
|
+
const inputCost = (usage.input_tokens || 0) * 0.000003; // $3 per 1M tokens
|
|
295
|
+
const outputCost = (usage.output_tokens || 0) * 0.000015; // $15 per 1M tokens
|
|
296
|
+
return inputCost + outputCost;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Get session ID
|
|
300
|
+
*/
|
|
301
|
+
getSessionId() {
|
|
302
|
+
return this.sessionId;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
exports.OutputHandler = OutputHandler;
|
|
306
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool filtering utilities with wildcard and pattern support
|
|
3
|
+
*/
|
|
4
|
+
export interface ToolPattern {
|
|
5
|
+
pattern: string;
|
|
6
|
+
regex: RegExp;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Parse tool patterns from a string (comma or space separated)
|
|
10
|
+
* Supports wildcards (*) and specific patterns like "Bash(git:*)"
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseToolPatterns(input: string | undefined): ToolPattern[];
|
|
13
|
+
/**
|
|
14
|
+
* Check if a tool name matches any of the patterns
|
|
15
|
+
*/
|
|
16
|
+
export declare function matchesPattern(toolName: string, patterns: ToolPattern[]): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Filter tool list based on allowed and disallowed patterns
|
|
19
|
+
* Disallowed patterns take precedence over allowed patterns
|
|
20
|
+
*/
|
|
21
|
+
export declare function filterTools(tools: string[], allowedPatterns: ToolPattern[], disallowedPatterns: ToolPattern[]): string[];
|
|
22
|
+
/**
|
|
23
|
+
* Create a tool filter function for use in tool registries
|
|
24
|
+
*/
|
|
25
|
+
export declare function createToolFilter(allowedInput?: string, disallowedInput?: string): (toolName: string) => boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Examples of supported patterns:
|
|
28
|
+
* - "mcp__*" - All MCP tools
|
|
29
|
+
* - "mcp__filesystem__*" - All filesystem MCP tools
|
|
30
|
+
* - "Bash" - Exact match for Bash tool
|
|
31
|
+
* - "Bash(git:*)" - Bash tool with git commands (if supported by tool)
|
|
32
|
+
* - "Edit,Read" - Multiple specific tools
|
|
33
|
+
* - "mcp__* Edit Read" - Mix of wildcards and specific tools
|
|
34
|
+
*/
|
|
35
|
+
//# sourceMappingURL=tool-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-filter.d.ts","sourceRoot":"","sources":["../../src/utils/tool-filter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,EAAE,CA4B1E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAIjF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EAAE,EACf,eAAe,EAAE,WAAW,EAAE,EAC9B,kBAAkB,EAAE,WAAW,EAAE,GAChC,MAAM,EAAE,CAeV;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,CAAC,EAAE,MAAM,EACrB,eAAe,CAAC,EAAE,MAAM,GACvB,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAkB/B;AAED;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Tool filtering utilities with wildcard and pattern support
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.parseToolPatterns = parseToolPatterns;
|
|
7
|
+
exports.matchesPattern = matchesPattern;
|
|
8
|
+
exports.filterTools = filterTools;
|
|
9
|
+
exports.createToolFilter = createToolFilter;
|
|
10
|
+
/**
|
|
11
|
+
* Parse tool patterns from a string (comma or space separated)
|
|
12
|
+
* Supports wildcards (*) and specific patterns like "Bash(git:*)"
|
|
13
|
+
*/
|
|
14
|
+
function parseToolPatterns(input) {
|
|
15
|
+
if (!input)
|
|
16
|
+
return [];
|
|
17
|
+
// Split by comma or space, filter empty strings
|
|
18
|
+
const patterns = input
|
|
19
|
+
.split(/[,\s]+/)
|
|
20
|
+
.map(p => p.trim())
|
|
21
|
+
.filter(p => p.length > 0);
|
|
22
|
+
return patterns.map(pattern => {
|
|
23
|
+
// Convert pattern to regex
|
|
24
|
+
let regexPattern = pattern
|
|
25
|
+
// Escape special regex characters except * and ()
|
|
26
|
+
.replace(/[.+?^${}|[\]\\]/g, '\\$&')
|
|
27
|
+
// Convert * to .* for wildcard matching
|
|
28
|
+
.replace(/\*/g, '.*')
|
|
29
|
+
// Handle parentheses patterns like Bash(git:*)
|
|
30
|
+
.replace(/\(/g, '\\(')
|
|
31
|
+
.replace(/\)/g, '\\)');
|
|
32
|
+
// Ensure exact match (not partial)
|
|
33
|
+
regexPattern = `^${regexPattern}$`;
|
|
34
|
+
return {
|
|
35
|
+
pattern,
|
|
36
|
+
regex: new RegExp(regexPattern, 'i')
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Check if a tool name matches any of the patterns
|
|
42
|
+
*/
|
|
43
|
+
function matchesPattern(toolName, patterns) {
|
|
44
|
+
if (patterns.length === 0)
|
|
45
|
+
return false;
|
|
46
|
+
return patterns.some(p => p.regex.test(toolName));
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Filter tool list based on allowed and disallowed patterns
|
|
50
|
+
* Disallowed patterns take precedence over allowed patterns
|
|
51
|
+
*/
|
|
52
|
+
function filterTools(tools, allowedPatterns, disallowedPatterns) {
|
|
53
|
+
return tools.filter(tool => {
|
|
54
|
+
// If disallowed, reject immediately
|
|
55
|
+
if (matchesPattern(tool, disallowedPatterns)) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
// If no allowed patterns specified, allow all (except disallowed)
|
|
59
|
+
if (allowedPatterns.length === 0) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
// Check if matches allowed patterns
|
|
63
|
+
return matchesPattern(tool, allowedPatterns);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Create a tool filter function for use in tool registries
|
|
68
|
+
*/
|
|
69
|
+
function createToolFilter(allowedInput, disallowedInput) {
|
|
70
|
+
const allowedPatterns = parseToolPatterns(allowedInput);
|
|
71
|
+
const disallowedPatterns = parseToolPatterns(disallowedInput);
|
|
72
|
+
return (toolName) => {
|
|
73
|
+
// Disallowed takes precedence
|
|
74
|
+
if (matchesPattern(toolName, disallowedPatterns)) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
// If no allowed patterns, allow all (except disallowed)
|
|
78
|
+
if (allowedPatterns.length === 0) {
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
// Must match at least one allowed pattern
|
|
82
|
+
return matchesPattern(toolName, allowedPatterns);
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Examples of supported patterns:
|
|
87
|
+
* - "mcp__*" - All MCP tools
|
|
88
|
+
* - "mcp__filesystem__*" - All filesystem MCP tools
|
|
89
|
+
* - "Bash" - Exact match for Bash tool
|
|
90
|
+
* - "Bash(git:*)" - Bash tool with git commands (if supported by tool)
|
|
91
|
+
* - "Edit,Read" - Multiple specific tools
|
|
92
|
+
* - "mcp__* Edit Read" - Mix of wildcards and specific tools
|
|
93
|
+
*/
|
|
94
|
+
//# sourceMappingURL=tool-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-filter.js","sourceRoot":"","sources":["../../src/utils/tool-filter.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAWH,8CA4BC;AAKD,wCAIC;AAMD,kCAmBC;AAKD,4CAqBC;AA5FD;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,KAAyB;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAEtB,gDAAgD;IAChD,MAAM,QAAQ,GAAG,KAAK;SACnB,KAAK,CAAC,QAAQ,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE7B,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QAC5B,2BAA2B;QAC3B,IAAI,YAAY,GAAG,OAAO;YACxB,kDAAkD;aACjD,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC;YACpC,wCAAwC;aACvC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;YACrB,+CAA+C;aAC9C,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;aACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAEzB,mCAAmC;QACnC,YAAY,GAAG,IAAI,YAAY,GAAG,CAAC;QAEnC,OAAO;YACL,OAAO;YACP,KAAK,EAAE,IAAI,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC;SACrC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,QAAgB,EAAE,QAAuB;IACtE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAExC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW,CACzB,KAAe,EACf,eAA8B,EAC9B,kBAAiC;IAEjC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QACzB,oCAAoC;QACpC,IAAI,cAAc,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,kEAAkE;QAClE,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,oCAAoC;QACpC,OAAO,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAC9B,YAAqB,EACrB,eAAwB;IAExB,MAAM,eAAe,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACxD,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAE9D,OAAO,CAAC,QAAgB,EAAE,EAAE;QAC1B,8BAA8B;QAC9B,IAAI,cAAc,CAAC,QAAQ,EAAE,kBAAkB,CAAC,EAAE,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,wDAAwD;QACxD,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,0CAA0C;QAC1C,OAAO,cAAc,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACnD,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG"}
|
package/package.json
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@majkapp/majk-chat-cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "CLI for multi-provider LLM chat interactions",
|
|
5
|
+
"main": "dist/cli.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"majk-chat": "./dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist/**/*",
|
|
11
|
+
"README.md",
|
|
12
|
+
"package.json"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"dev": "ts-node src/cli.ts",
|
|
17
|
+
"test": "jest",
|
|
18
|
+
"clean": "rm -rf dist",
|
|
19
|
+
"prepare": "echo 'Skipping build in prepare - use npm run build from root'"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"cli",
|
|
23
|
+
"llm",
|
|
24
|
+
"chat",
|
|
25
|
+
"openai",
|
|
26
|
+
"anthropic",
|
|
27
|
+
"bedrock",
|
|
28
|
+
"azure"
|
|
29
|
+
],
|
|
30
|
+
"author": "Jules White",
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@majkapp/majk-chat-core": "file:../majk-chat-core",
|
|
34
|
+
"@majkapp/majk-chat-mcp": "file:../majk-chat-mcp",
|
|
35
|
+
"@majkapp/majk-chat-basic-tools": "file:../majk-chat-basic-tools",
|
|
36
|
+
"@majkapp/majk-chat-sessions": "file:../majk-chat-sessions",
|
|
37
|
+
"chalk": "^4.1.2",
|
|
38
|
+
"commander": "^12.0.0",
|
|
39
|
+
"dotenv": "^16.4.0",
|
|
40
|
+
"fs-extra": "^11.2.0",
|
|
41
|
+
"inquirer": "^8.2.7",
|
|
42
|
+
"ora": "^5.4.1",
|
|
43
|
+
"readline": "^1.3.0",
|
|
44
|
+
"uuid": "^9.0.1",
|
|
45
|
+
"yaml": "^2.4.0"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/fs-extra": "^11.0.0",
|
|
49
|
+
"@types/inquirer": "^9.0.0",
|
|
50
|
+
"@types/jest": "^30.0.0",
|
|
51
|
+
"@types/node": "^20.14.0",
|
|
52
|
+
"@types/uuid": "^9.0.7",
|
|
53
|
+
"jest": "^29.7.0",
|
|
54
|
+
"ts-jest": "^29.1.5",
|
|
55
|
+
"ts-node": "^10.9.2",
|
|
56
|
+
"typescript": "^5.5.0"
|
|
57
|
+
},
|
|
58
|
+
"engines": {
|
|
59
|
+
"node": ">=18.0.0"
|
|
60
|
+
},
|
|
61
|
+
"publishConfig": {
|
|
62
|
+
"access": "public"
|
|
63
|
+
}
|
|
64
|
+
}
|