@true-and-useful/janee 0.4.4 → 0.5.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 +20 -12
- package/dist/cli/commands/capability.d.ts +26 -0
- package/dist/cli/commands/capability.d.ts.map +1 -0
- package/dist/cli/commands/capability.js +269 -0
- package/dist/cli/commands/capability.js.map +1 -0
- package/dist/cli/commands/remove.d.ts +3 -1
- package/dist/cli/commands/remove.d.ts.map +1 -1
- package/dist/cli/commands/remove.js +10 -8
- package/dist/cli/commands/remove.js.map +1 -1
- package/dist/cli/commands/search.d.ts +4 -1
- package/dist/cli/commands/search.d.ts.map +1 -1
- package/dist/cli/commands/search.js +31 -3
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/index.js +40 -1
- package/dist/cli/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -299,19 +299,27 @@ capabilities:
|
|
|
299
299
|
## CLI Reference
|
|
300
300
|
|
|
301
301
|
```bash
|
|
302
|
-
janee init
|
|
303
|
-
janee add
|
|
302
|
+
janee init # Set up ~/.janee/ with example config
|
|
303
|
+
janee add # Add a service (interactive)
|
|
304
304
|
janee add stripe -u https://api.stripe.com -k sk_xxx # Add with args
|
|
305
|
-
janee remove <service>
|
|
306
|
-
janee
|
|
307
|
-
janee list
|
|
308
|
-
janee
|
|
309
|
-
janee
|
|
310
|
-
janee
|
|
311
|
-
janee
|
|
312
|
-
janee
|
|
313
|
-
janee
|
|
314
|
-
janee
|
|
305
|
+
janee remove <service> # Remove a service
|
|
306
|
+
janee remove <service> --yes # Remove without confirmation
|
|
307
|
+
janee list # List configured services
|
|
308
|
+
janee list --json # Output as JSON (for integrations)
|
|
309
|
+
janee search [query] # Search service directory
|
|
310
|
+
janee search stripe --json # Search with JSON output
|
|
311
|
+
janee cap list # List capabilities
|
|
312
|
+
janee cap list --json # List capabilities as JSON
|
|
313
|
+
janee cap add <name> --service <service> # Add capability
|
|
314
|
+
janee cap edit <name> # Edit capability
|
|
315
|
+
janee cap remove <name> # Remove capability
|
|
316
|
+
janee serve # Start MCP server
|
|
317
|
+
janee logs # View audit log
|
|
318
|
+
janee logs -f # Tail audit log
|
|
319
|
+
janee logs --json # Output as JSON
|
|
320
|
+
janee sessions # List active sessions
|
|
321
|
+
janee sessions --json # Output as JSON
|
|
322
|
+
janee revoke <id> # Kill a session
|
|
315
323
|
```
|
|
316
324
|
|
|
317
325
|
### Non-interactive Setup (for AI agents)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability management commands
|
|
3
|
+
*/
|
|
4
|
+
export declare function capabilityListCommand(options?: {
|
|
5
|
+
json?: boolean;
|
|
6
|
+
}): Promise<void>;
|
|
7
|
+
export declare function capabilityAddCommand(name: string, options: {
|
|
8
|
+
service?: string;
|
|
9
|
+
ttl?: string;
|
|
10
|
+
autoApprove?: boolean;
|
|
11
|
+
requiresReason?: boolean;
|
|
12
|
+
allow?: string[];
|
|
13
|
+
deny?: string[];
|
|
14
|
+
}): Promise<void>;
|
|
15
|
+
export declare function capabilityEditCommand(name: string, options: {
|
|
16
|
+
ttl?: string;
|
|
17
|
+
autoApprove?: boolean;
|
|
18
|
+
requiresReason?: boolean;
|
|
19
|
+
allow?: string[];
|
|
20
|
+
deny?: string[];
|
|
21
|
+
clearRules?: boolean;
|
|
22
|
+
}): Promise<void>;
|
|
23
|
+
export declare function capabilityRemoveCommand(name: string, options?: {
|
|
24
|
+
yes?: boolean;
|
|
25
|
+
}): Promise<void>;
|
|
26
|
+
//# sourceMappingURL=capability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/capability.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAsB,qBAAqB,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAgF3F;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,GACA,OAAO,CAAC,IAAI,CAAC,CA6Df;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GACA,OAAO,CAAC,IAAI,CAAC,CAuDf;AAED,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9B,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Capability management commands
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.capabilityListCommand = capabilityListCommand;
|
|
40
|
+
exports.capabilityAddCommand = capabilityAddCommand;
|
|
41
|
+
exports.capabilityEditCommand = capabilityEditCommand;
|
|
42
|
+
exports.capabilityRemoveCommand = capabilityRemoveCommand;
|
|
43
|
+
const config_yaml_1 = require("../config-yaml");
|
|
44
|
+
async function capabilityListCommand(options = {}) {
|
|
45
|
+
try {
|
|
46
|
+
if (!(0, config_yaml_1.hasYAMLConfig)()) {
|
|
47
|
+
if (options.json) {
|
|
48
|
+
console.log(JSON.stringify({ error: 'No config found' }, null, 2));
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
console.log('No config found. Run `janee init` first.');
|
|
52
|
+
}
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
const config = (0, config_yaml_1.loadYAMLConfig)();
|
|
56
|
+
const capabilityNames = Object.keys(config.capabilities);
|
|
57
|
+
if (options.json) {
|
|
58
|
+
// JSON output
|
|
59
|
+
const capabilities = capabilityNames.map(name => {
|
|
60
|
+
const cap = config.capabilities[name];
|
|
61
|
+
return {
|
|
62
|
+
name,
|
|
63
|
+
service: cap.service,
|
|
64
|
+
ttl: cap.ttl,
|
|
65
|
+
autoApprove: cap.autoApprove,
|
|
66
|
+
requiresReason: cap.requiresReason,
|
|
67
|
+
allowRules: cap.rules?.allow || [],
|
|
68
|
+
denyRules: cap.rules?.deny || []
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
console.log(JSON.stringify({ capabilities }, null, 2));
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// Human-readable output
|
|
75
|
+
if (capabilityNames.length === 0) {
|
|
76
|
+
console.log('No capabilities configured yet.');
|
|
77
|
+
console.log('');
|
|
78
|
+
console.log('Add a capability:');
|
|
79
|
+
console.log(' janee cap add <name> --service <service>');
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
console.log('');
|
|
83
|
+
console.log('Capabilities:');
|
|
84
|
+
for (const name of capabilityNames) {
|
|
85
|
+
const cap = config.capabilities[name];
|
|
86
|
+
const allowCount = cap.rules?.allow?.length || 0;
|
|
87
|
+
const denyCount = cap.rules?.deny?.length || 0;
|
|
88
|
+
const rules = allowCount + denyCount > 0 ? ` [${allowCount} allow, ${denyCount} deny]` : '';
|
|
89
|
+
console.log(` ${name}`);
|
|
90
|
+
console.log(` Service: ${cap.service}`);
|
|
91
|
+
console.log(` TTL: ${cap.ttl}`);
|
|
92
|
+
if (cap.autoApprove !== undefined) {
|
|
93
|
+
console.log(` Auto-approve: ${cap.autoApprove}`);
|
|
94
|
+
}
|
|
95
|
+
if (cap.requiresReason !== undefined) {
|
|
96
|
+
console.log(` Requires reason: ${cap.requiresReason}`);
|
|
97
|
+
}
|
|
98
|
+
if (rules) {
|
|
99
|
+
console.log(` Rules: ${rules}`);
|
|
100
|
+
}
|
|
101
|
+
console.log('');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if (error instanceof Error) {
|
|
106
|
+
if (options.json) {
|
|
107
|
+
console.log(JSON.stringify({ error: error.message }, null, 2));
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
console.error('❌ Error:', error.message);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
if (options.json) {
|
|
115
|
+
console.log(JSON.stringify({ error: 'Unknown error occurred' }, null, 2));
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
console.error('❌ Unknown error occurred');
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async function capabilityAddCommand(name, options) {
|
|
125
|
+
try {
|
|
126
|
+
if (!(0, config_yaml_1.hasYAMLConfig)()) {
|
|
127
|
+
console.error('❌ No config found. Run `janee init` first.');
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
const config = (0, config_yaml_1.loadYAMLConfig)();
|
|
131
|
+
// Check if capability already exists
|
|
132
|
+
if (config.capabilities[name]) {
|
|
133
|
+
console.error(`❌ Capability "${name}" already exists. Use 'janee cap edit' to modify it.`);
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
// Service is required
|
|
137
|
+
if (!options.service) {
|
|
138
|
+
console.error('❌ --service is required');
|
|
139
|
+
process.exit(1);
|
|
140
|
+
}
|
|
141
|
+
// Check if service exists
|
|
142
|
+
if (!config.services[options.service]) {
|
|
143
|
+
console.error(`❌ Service "${options.service}" not found. Add it first with 'janee add'.`);
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
// Create capability
|
|
147
|
+
const capability = {
|
|
148
|
+
service: options.service,
|
|
149
|
+
ttl: options.ttl || '1h',
|
|
150
|
+
autoApprove: options.autoApprove,
|
|
151
|
+
requiresReason: options.requiresReason
|
|
152
|
+
};
|
|
153
|
+
// Add rules if provided
|
|
154
|
+
if (options.allow || options.deny) {
|
|
155
|
+
capability.rules = {};
|
|
156
|
+
if (options.allow) {
|
|
157
|
+
capability.rules.allow = options.allow;
|
|
158
|
+
}
|
|
159
|
+
if (options.deny) {
|
|
160
|
+
capability.rules.deny = options.deny;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
config.capabilities[name] = capability;
|
|
164
|
+
(0, config_yaml_1.saveYAMLConfig)(config);
|
|
165
|
+
console.log(`✅ Added capability "${name}"`);
|
|
166
|
+
console.log(` Service: ${capability.service}`);
|
|
167
|
+
console.log(` TTL: ${capability.ttl}`);
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
if (error instanceof Error) {
|
|
171
|
+
console.error('❌ Error:', error.message);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
console.error('❌ Unknown error occurred');
|
|
175
|
+
}
|
|
176
|
+
process.exit(1);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async function capabilityEditCommand(name, options) {
|
|
180
|
+
try {
|
|
181
|
+
if (!(0, config_yaml_1.hasYAMLConfig)()) {
|
|
182
|
+
console.error('❌ No config found. Run `janee init` first.');
|
|
183
|
+
process.exit(1);
|
|
184
|
+
}
|
|
185
|
+
const config = (0, config_yaml_1.loadYAMLConfig)();
|
|
186
|
+
// Check if capability exists
|
|
187
|
+
if (!config.capabilities[name]) {
|
|
188
|
+
console.error(`❌ Capability "${name}" not found`);
|
|
189
|
+
process.exit(1);
|
|
190
|
+
}
|
|
191
|
+
const capability = config.capabilities[name];
|
|
192
|
+
// Update fields if provided
|
|
193
|
+
if (options.ttl) {
|
|
194
|
+
capability.ttl = options.ttl;
|
|
195
|
+
}
|
|
196
|
+
if (options.autoApprove !== undefined) {
|
|
197
|
+
capability.autoApprove = options.autoApprove;
|
|
198
|
+
}
|
|
199
|
+
if (options.requiresReason !== undefined) {
|
|
200
|
+
capability.requiresReason = options.requiresReason;
|
|
201
|
+
}
|
|
202
|
+
// Handle rules
|
|
203
|
+
if (options.clearRules) {
|
|
204
|
+
delete capability.rules;
|
|
205
|
+
}
|
|
206
|
+
else if (options.allow || options.deny) {
|
|
207
|
+
if (!capability.rules) {
|
|
208
|
+
capability.rules = {};
|
|
209
|
+
}
|
|
210
|
+
if (options.allow) {
|
|
211
|
+
capability.rules.allow = options.allow;
|
|
212
|
+
}
|
|
213
|
+
if (options.deny) {
|
|
214
|
+
capability.rules.deny = options.deny;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
(0, config_yaml_1.saveYAMLConfig)(config);
|
|
218
|
+
console.log(`✅ Updated capability "${name}"`);
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
if (error instanceof Error) {
|
|
222
|
+
console.error('❌ Error:', error.message);
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
console.error('❌ Unknown error occurred');
|
|
226
|
+
}
|
|
227
|
+
process.exit(1);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
async function capabilityRemoveCommand(name, options = {}) {
|
|
231
|
+
try {
|
|
232
|
+
if (!(0, config_yaml_1.hasYAMLConfig)()) {
|
|
233
|
+
console.error('❌ No config found. Run `janee init` first.');
|
|
234
|
+
process.exit(1);
|
|
235
|
+
}
|
|
236
|
+
const config = (0, config_yaml_1.loadYAMLConfig)();
|
|
237
|
+
// Check if capability exists
|
|
238
|
+
if (!config.capabilities[name]) {
|
|
239
|
+
console.error(`❌ Capability "${name}" not found`);
|
|
240
|
+
process.exit(1);
|
|
241
|
+
}
|
|
242
|
+
// Confirm deletion (skip if --yes flag is set)
|
|
243
|
+
if (!options.yes) {
|
|
244
|
+
const readline = await Promise.resolve().then(() => __importStar(require('readline/promises')));
|
|
245
|
+
const { stdin: input, stdout: output } = await Promise.resolve().then(() => __importStar(require('process')));
|
|
246
|
+
const rl = readline.createInterface({ input, output });
|
|
247
|
+
const answer = await rl.question(`Are you sure you want to remove capability "${name}"? (y/N): `);
|
|
248
|
+
rl.close();
|
|
249
|
+
if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
|
|
250
|
+
console.log('❌ Cancelled');
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// Remove capability
|
|
255
|
+
delete config.capabilities[name];
|
|
256
|
+
(0, config_yaml_1.saveYAMLConfig)(config);
|
|
257
|
+
console.log(`✅ Capability "${name}" removed successfully!`);
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
if (error instanceof Error) {
|
|
261
|
+
console.error('❌ Error:', error.message);
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
console.error('❌ Unknown error occurred');
|
|
265
|
+
}
|
|
266
|
+
process.exit(1);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=capability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability.js","sourceRoot":"","sources":["../../../src/cli/commands/capability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/remove.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/remove.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAmEvG"}
|
|
@@ -37,7 +37,7 @@ exports.removeCommand = removeCommand;
|
|
|
37
37
|
const readline = __importStar(require("readline/promises"));
|
|
38
38
|
const process_1 = require("process");
|
|
39
39
|
const config_yaml_1 = require("../config-yaml");
|
|
40
|
-
async function removeCommand(serviceName) {
|
|
40
|
+
async function removeCommand(serviceName, options = {}) {
|
|
41
41
|
try {
|
|
42
42
|
// Check for YAML config
|
|
43
43
|
if (!(0, config_yaml_1.hasYAMLConfig)()) {
|
|
@@ -50,7 +50,6 @@ async function removeCommand(serviceName) {
|
|
|
50
50
|
console.error(`❌ Service "${serviceName}" not found`);
|
|
51
51
|
process.exit(1);
|
|
52
52
|
}
|
|
53
|
-
const rl = readline.createInterface({ input: process_1.stdin, output: process_1.stdout });
|
|
54
53
|
// Check for capabilities using this service
|
|
55
54
|
const dependentCaps = Object.entries(config.capabilities)
|
|
56
55
|
.filter(([_, cap]) => cap.service === serviceName)
|
|
@@ -60,12 +59,15 @@ async function removeCommand(serviceName) {
|
|
|
60
59
|
dependentCaps.forEach(cap => console.log(` - ${cap}`));
|
|
61
60
|
console.log();
|
|
62
61
|
}
|
|
63
|
-
// Confirm deletion
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
62
|
+
// Confirm deletion (skip if --yes flag is set)
|
|
63
|
+
if (!options.yes) {
|
|
64
|
+
const rl = readline.createInterface({ input: process_1.stdin, output: process_1.stdout });
|
|
65
|
+
const answer = await rl.question(`Are you sure you want to remove service "${serviceName}"? This cannot be undone. (y/N): `);
|
|
66
|
+
rl.close();
|
|
67
|
+
if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
|
|
68
|
+
console.log('❌ Cancelled');
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
69
71
|
}
|
|
70
72
|
// Remove service
|
|
71
73
|
delete config.services[serviceName];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/cli/commands/remove.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/cli/commands/remove.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Search the service directory
|
|
3
3
|
*/
|
|
4
|
-
export declare function searchCommand(query?: string,
|
|
4
|
+
export declare function searchCommand(query?: string, options?: {
|
|
5
|
+
verbose?: boolean;
|
|
6
|
+
json?: boolean;
|
|
7
|
+
}): void;
|
|
5
8
|
//# sourceMappingURL=search.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmCH,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CA0DvG"}
|
|
@@ -20,12 +20,35 @@ function formatService(service, verbose = false) {
|
|
|
20
20
|
}
|
|
21
21
|
return lines.join('\n');
|
|
22
22
|
}
|
|
23
|
-
function
|
|
23
|
+
function serviceToJSON(service) {
|
|
24
|
+
return {
|
|
25
|
+
name: service.name,
|
|
26
|
+
description: service.description,
|
|
27
|
+
baseUrl: service.baseUrl,
|
|
28
|
+
authType: service.auth.type,
|
|
29
|
+
authFields: service.auth.fields,
|
|
30
|
+
category: service.tags[0] || 'other',
|
|
31
|
+
tags: service.tags,
|
|
32
|
+
docs: service.docs
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function searchCommand(query, options = {}) {
|
|
36
|
+
const verbose = options.verbose || false;
|
|
37
|
+
const json = options.json || false;
|
|
24
38
|
if (!query) {
|
|
25
|
-
// List all
|
|
39
|
+
// List all services
|
|
40
|
+
const categories = (0, directory_1.listByCategory)();
|
|
41
|
+
const allServices = [];
|
|
42
|
+
for (const [_, services] of categories) {
|
|
43
|
+
allServices.push(...services);
|
|
44
|
+
}
|
|
45
|
+
if (json) {
|
|
46
|
+
console.log(JSON.stringify(allServices.map(serviceToJSON), null, 2));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// Human-readable output
|
|
26
50
|
console.log('📚 Janee Service Directory\n');
|
|
27
51
|
console.log('Usage: janee search <query>\n');
|
|
28
|
-
const categories = (0, directory_1.listByCategory)();
|
|
29
52
|
for (const [category, services] of categories) {
|
|
30
53
|
console.log(`\n${category.toUpperCase()}`);
|
|
31
54
|
console.log('─'.repeat(40));
|
|
@@ -37,6 +60,11 @@ function searchCommand(query, verbose = false) {
|
|
|
37
60
|
return;
|
|
38
61
|
}
|
|
39
62
|
const results = (0, directory_1.searchDirectory)(query);
|
|
63
|
+
if (json) {
|
|
64
|
+
console.log(JSON.stringify(results.map(serviceToJSON), null, 2));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
// Human-readable output
|
|
40
68
|
if (results.length === 0) {
|
|
41
69
|
console.log(`No services found matching "${query}"`);
|
|
42
70
|
console.log('\nRun "janee search" to see all available services');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":";AAAA;;GAEG;;
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -15,6 +15,7 @@ const logs_1 = require("./commands/logs");
|
|
|
15
15
|
const sessions_1 = require("./commands/sessions");
|
|
16
16
|
const revoke_1 = require("./commands/revoke");
|
|
17
17
|
const search_1 = require("./commands/search");
|
|
18
|
+
const capability_1 = require("./commands/capability");
|
|
18
19
|
const fs_1 = require("fs");
|
|
19
20
|
const path_1 = require("path");
|
|
20
21
|
// Read version from package.json
|
|
@@ -48,6 +49,7 @@ program
|
|
|
48
49
|
program
|
|
49
50
|
.command('remove <service>')
|
|
50
51
|
.description('Remove a service from Janee')
|
|
52
|
+
.option('-y, --yes', 'Skip confirmation prompt')
|
|
51
53
|
.action(remove_1.removeCommand);
|
|
52
54
|
program
|
|
53
55
|
.command('serve')
|
|
@@ -79,6 +81,43 @@ program
|
|
|
79
81
|
.command('search [query]')
|
|
80
82
|
.description('Search the service directory')
|
|
81
83
|
.option('-v, --verbose', 'Show full details for each service')
|
|
82
|
-
.
|
|
84
|
+
.option('--json', 'Output as JSON')
|
|
85
|
+
.action((query, options) => (0, search_1.searchCommand)(query, options));
|
|
86
|
+
// Capability management subcommands
|
|
87
|
+
const cap = program.command('cap').description('Manage capabilities');
|
|
88
|
+
cap
|
|
89
|
+
.command('list')
|
|
90
|
+
.description('List all capabilities')
|
|
91
|
+
.option('--json', 'Output as JSON')
|
|
92
|
+
.action(capability_1.capabilityListCommand);
|
|
93
|
+
cap
|
|
94
|
+
.command('add <name>')
|
|
95
|
+
.description('Add a new capability')
|
|
96
|
+
.requiredOption('-s, --service <service>', 'Service to use')
|
|
97
|
+
.option('-t, --ttl <duration>', 'TTL (e.g., 1h, 30m)', '1h')
|
|
98
|
+
.option('--auto-approve', 'Auto-approve requests')
|
|
99
|
+
.option('--no-auto-approve', 'Require manual approval')
|
|
100
|
+
.option('--requires-reason', 'Require reason for requests')
|
|
101
|
+
.option('--no-requires-reason', 'Do not require reason')
|
|
102
|
+
.option('--allow <pattern...>', 'Allow rules (e.g., "GET /v1/*")')
|
|
103
|
+
.option('--deny <pattern...>', 'Deny rules (e.g., "DELETE *")')
|
|
104
|
+
.action(capability_1.capabilityAddCommand);
|
|
105
|
+
cap
|
|
106
|
+
.command('edit <name>')
|
|
107
|
+
.description('Edit an existing capability')
|
|
108
|
+
.option('-t, --ttl <duration>', 'Update TTL (e.g., 1h, 30m)')
|
|
109
|
+
.option('--auto-approve', 'Enable auto-approve')
|
|
110
|
+
.option('--no-auto-approve', 'Disable auto-approve')
|
|
111
|
+
.option('--requires-reason', 'Require reason for requests')
|
|
112
|
+
.option('--no-requires-reason', 'Do not require reason')
|
|
113
|
+
.option('--allow <pattern...>', 'Replace allow rules')
|
|
114
|
+
.option('--deny <pattern...>', 'Replace deny rules')
|
|
115
|
+
.option('--clear-rules', 'Clear all rules')
|
|
116
|
+
.action(capability_1.capabilityEditCommand);
|
|
117
|
+
cap
|
|
118
|
+
.command('remove <name>')
|
|
119
|
+
.description('Remove a capability')
|
|
120
|
+
.option('-y, --yes', 'Skip confirmation prompt')
|
|
121
|
+
.action(capability_1.capabilityRemoveCommand);
|
|
83
122
|
program.parse();
|
|
84
123
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|