@dupecom/botcha-cli 0.1.0 → 0.2.1

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 CHANGED
@@ -70,6 +70,27 @@ Options:
70
70
  - `-v, --verbose` - Show all headers (not just BOTCHA)
71
71
  - `-q, --quiet` - Minimal output
72
72
 
73
+ ### Discover BOTCHA Endpoints
74
+
75
+ Find all BOTCHA discovery endpoints on a domain:
76
+
77
+ ```bash
78
+ botcha discover https://botcha.ai
79
+ ```
80
+
81
+ Checks for:
82
+ - `/robots.txt` - AI agent instructions
83
+ - `/ai.txt` - AI discovery file
84
+ - `/.well-known/ai-plugin.json` - AI plugin manifest
85
+ - `/openapi.json` - OpenAPI specification
86
+ - `/.well-known/botcha.json` - BOTCHA configuration
87
+ - Embedded challenge in HTML
88
+
89
+ Options:
90
+ - `--json` - Output as JSON
91
+ - `-v, --verbose` - Show recommendations for missing endpoints
92
+ - `-q, --quiet` - Minimal output
93
+
73
94
  ## Examples
74
95
 
75
96
  ### CI/CD Integration
@@ -0,0 +1,7 @@
1
+ export interface DiscoverOptions {
2
+ json?: boolean;
3
+ verbose?: boolean;
4
+ quiet?: boolean;
5
+ }
6
+ export declare function discoverCommand(url: string, options: DiscoverOptions): Promise<void>;
7
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAyLD,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAoE1F"}
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Discover command - Find all BOTCHA discovery endpoints
3
+ */
4
+ import { Output, formatUrl } from '../lib/output.js';
5
+ const DISCOVERY_ENDPOINTS = [
6
+ {
7
+ path: '/robots.txt',
8
+ description: 'Robots.txt with BOTCHA instructions',
9
+ check: (content) => {
10
+ const hasBotcha = content.toLowerCase().includes('botcha') ||
11
+ content.includes('User-agent: AI') ||
12
+ content.includes('User-agent: *') && content.includes('Allow: /agent');
13
+ return {
14
+ found: hasBotcha,
15
+ details: hasBotcha ? 'Contains AI agent instructions' : undefined,
16
+ };
17
+ },
18
+ },
19
+ {
20
+ path: '/ai.txt',
21
+ description: 'AI agent discovery file',
22
+ check: (content) => ({
23
+ found: content.length > 0,
24
+ details: content.length > 0 ? 'AI discovery file present' : undefined,
25
+ }),
26
+ },
27
+ {
28
+ path: '/.well-known/ai-plugin.json',
29
+ description: 'AI plugin manifest',
30
+ check: (content) => {
31
+ try {
32
+ const manifest = JSON.parse(content);
33
+ const hasBotcha = manifest.auth?.type === 'botcha' ||
34
+ JSON.stringify(manifest).toLowerCase().includes('botcha');
35
+ return {
36
+ found: true,
37
+ details: hasBotcha
38
+ ? `Plugin: ${manifest.name_for_human || manifest.name || 'unknown'} (BOTCHA auth)`
39
+ : `Plugin: ${manifest.name_for_human || manifest.name || 'unknown'}`,
40
+ };
41
+ }
42
+ catch {
43
+ return { found: false };
44
+ }
45
+ },
46
+ },
47
+ {
48
+ path: '/openapi.json',
49
+ description: 'OpenAPI specification',
50
+ check: (content) => {
51
+ try {
52
+ const spec = JSON.parse(content);
53
+ const hasBotcha = JSON.stringify(spec).toLowerCase().includes('botcha');
54
+ return {
55
+ found: true,
56
+ details: hasBotcha
57
+ ? `OpenAPI ${spec.openapi || spec.swagger || '?'} (BOTCHA documented)`
58
+ : `OpenAPI ${spec.openapi || spec.swagger || '?'}`,
59
+ };
60
+ }
61
+ catch {
62
+ return { found: false };
63
+ }
64
+ },
65
+ },
66
+ {
67
+ path: '/.well-known/botcha.json',
68
+ description: 'BOTCHA configuration',
69
+ check: (content) => {
70
+ try {
71
+ const config = JSON.parse(content);
72
+ return {
73
+ found: true,
74
+ details: `Version: ${config.version || '?'}, Methods: ${config.methods?.join(', ') || '?'}`,
75
+ };
76
+ }
77
+ catch {
78
+ return { found: false };
79
+ }
80
+ },
81
+ },
82
+ ];
83
+ async function checkEndpoint(baseUrl, endpoint, output) {
84
+ const url = new URL(endpoint.path, baseUrl).toString();
85
+ output.debug(`Checking ${url}...`);
86
+ try {
87
+ const response = await fetch(url, {
88
+ headers: {
89
+ 'User-Agent': 'BOTCHA-CLI/0.1.0',
90
+ 'Accept': 'text/plain, application/json, */*',
91
+ },
92
+ });
93
+ if (!response.ok) {
94
+ return {
95
+ endpoint: url,
96
+ path: endpoint.path,
97
+ found: false,
98
+ description: endpoint.description,
99
+ };
100
+ }
101
+ const content = await response.text();
102
+ const result = endpoint.check(content);
103
+ return {
104
+ endpoint: url,
105
+ path: endpoint.path,
106
+ found: result.found,
107
+ description: endpoint.description,
108
+ details: result.details,
109
+ };
110
+ }
111
+ catch (error) {
112
+ output.debug(`Error checking ${url}: ${error instanceof Error ? error.message : String(error)}`);
113
+ return {
114
+ endpoint: url,
115
+ path: endpoint.path,
116
+ found: false,
117
+ description: endpoint.description,
118
+ };
119
+ }
120
+ }
121
+ async function checkEmbeddedChallenge(baseUrl, output) {
122
+ output.debug(`Checking ${baseUrl} for embedded challenge...`);
123
+ try {
124
+ const response = await fetch(baseUrl, {
125
+ headers: {
126
+ 'User-Agent': 'BOTCHA-CLI/0.1.0',
127
+ 'Accept': 'text/html, */*',
128
+ },
129
+ });
130
+ const html = await response.text();
131
+ // Check for embedded BOTCHA script
132
+ const hasEmbedded = html.includes('application/botcha+json') ||
133
+ html.includes('data-botcha') ||
134
+ html.includes('__BOTCHA__');
135
+ // Check for BOTCHA headers
136
+ const hasBotchaHeaders = Array.from(response.headers.keys())
137
+ .some(key => key.toLowerCase().startsWith('x-botcha-'));
138
+ const found = hasEmbedded || hasBotchaHeaders;
139
+ let details;
140
+ if (hasEmbedded) {
141
+ details = 'Embedded challenge script detected';
142
+ }
143
+ else if (hasBotchaHeaders) {
144
+ details = 'BOTCHA headers present';
145
+ }
146
+ return {
147
+ endpoint: baseUrl,
148
+ path: '/',
149
+ found,
150
+ description: 'Embedded challenge in HTML',
151
+ details,
152
+ };
153
+ }
154
+ catch (error) {
155
+ output.debug(`Error checking embedded: ${error instanceof Error ? error.message : String(error)}`);
156
+ return {
157
+ endpoint: baseUrl,
158
+ path: '/',
159
+ found: false,
160
+ description: 'Embedded challenge in HTML',
161
+ };
162
+ }
163
+ }
164
+ export async function discoverCommand(url, options) {
165
+ const output = new Output(options);
166
+ // Ensure URL has a trailing slash for proper path resolution
167
+ const baseUrl = url.endsWith('/') ? url.slice(0, -1) : url;
168
+ output.header(`\n🔍 Discovering BOTCHA endpoints at ${formatUrl(baseUrl)}\n`);
169
+ const spinner = output.spinner('Checking discovery endpoints...');
170
+ // Check all endpoints in parallel
171
+ const results = await Promise.all([
172
+ ...DISCOVERY_ENDPOINTS.map(endpoint => checkEndpoint(baseUrl, endpoint, output)),
173
+ checkEmbeddedChallenge(baseUrl, output),
174
+ ]);
175
+ spinner.stop();
176
+ const foundCount = results.filter(r => r.found).length;
177
+ const totalCount = results.length;
178
+ if (options.json) {
179
+ output.json({
180
+ url: baseUrl,
181
+ results,
182
+ score: foundCount,
183
+ maxScore: totalCount,
184
+ hasProtection: foundCount > 0,
185
+ });
186
+ return;
187
+ }
188
+ // Display results
189
+ console.log('Discovery Results:\n');
190
+ for (const result of results) {
191
+ const icon = result.found ? '✅' : '❌';
192
+ const status = result.found ? result.path : result.path;
193
+ console.log(`${icon} ${status} - ${result.description}`);
194
+ if (result.found && result.details) {
195
+ console.log(` ${result.details}`);
196
+ }
197
+ }
198
+ console.log();
199
+ // Discovery score
200
+ const stars = foundCount >= 4 ? '⭐⭐⭐' :
201
+ foundCount >= 2 ? '⭐⭐' :
202
+ foundCount >= 1 ? '⭐' : '';
203
+ if (foundCount === 0) {
204
+ output.warn(`Discovery Score: ${foundCount}/${totalCount} - No BOTCHA endpoints found`);
205
+ }
206
+ else if (foundCount < 3) {
207
+ output.info(`Discovery Score: ${foundCount}/${totalCount} ${stars}`);
208
+ }
209
+ else {
210
+ output.success(`Discovery Score: ${foundCount}/${totalCount} ${stars}`);
211
+ }
212
+ // Recommendations
213
+ if (options.verbose && foundCount < totalCount) {
214
+ console.log('\nRecommendations:');
215
+ const missing = results.filter(r => !r.found);
216
+ for (const result of missing.slice(0, 3)) {
217
+ console.log(` • Add ${result.path} - ${result.description}`);
218
+ }
219
+ }
220
+ }
221
+ //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ export interface TAPOptions {
2
+ url: string;
3
+ appId?: string;
4
+ json?: boolean;
5
+ verbose?: boolean;
6
+ quiet?: boolean;
7
+ }
8
+ export interface RegisterOptions extends TAPOptions {
9
+ name: string;
10
+ operator?: string;
11
+ trustLevel?: string;
12
+ }
13
+ export interface GetOptions extends TAPOptions {
14
+ agentId: string;
15
+ }
16
+ export interface ListOptions extends TAPOptions {
17
+ tapOnly?: boolean;
18
+ }
19
+ export interface SessionOptions extends TAPOptions {
20
+ agentId: string;
21
+ intent: string;
22
+ userContext?: string;
23
+ }
24
+ /**
25
+ * Register a TAP agent
26
+ * POST /v1/agents/register/tap
27
+ */
28
+ export declare function registerCommand(options: RegisterOptions): Promise<void>;
29
+ /**
30
+ * Get TAP agent details
31
+ * GET /v1/agents/:id/tap
32
+ */
33
+ export declare function getCommand(options: GetOptions): Promise<void>;
34
+ /**
35
+ * List TAP agents
36
+ * GET /v1/agents/tap
37
+ */
38
+ export declare function listCommand(options: ListOptions): Promise<void>;
39
+ /**
40
+ * Create TAP session
41
+ * POST /v1/sessions/tap
42
+ */
43
+ export declare function sessionCommand(options: SessionOptions): Promise<void>;
44
+ declare const _default: {
45
+ register: typeof registerCommand;
46
+ get: typeof getCommand;
47
+ list: typeof listCommand;
48
+ session: typeof sessionCommand;
49
+ };
50
+ export default _default;
51
+ //# sourceMappingURL=tap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tap.d.ts","sourceRoot":"","sources":["../../src/commands/tap.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC5C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAWD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAyG7E;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAyHnE;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+GrE;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA2H3E;;;;;;;AAED,wBAKE"}
@@ -0,0 +1,448 @@
1
+ /**
2
+ * TAP command - Trusted Agent Protocol commands
3
+ */
4
+ import { Output } from '../lib/output.js';
5
+ /** Build an API URL with optional app_id query param */
6
+ function buildUrl(baseUrl, path, appId) {
7
+ const url = new URL(path, baseUrl);
8
+ if (appId) {
9
+ url.searchParams.set('app_id', appId);
10
+ }
11
+ return url.toString();
12
+ }
13
+ /**
14
+ * Register a TAP agent
15
+ * POST /v1/agents/register/tap
16
+ */
17
+ export async function registerCommand(options) {
18
+ const output = new Output(options);
19
+ const startTime = Date.now();
20
+ try {
21
+ // Validate required fields
22
+ if (!options.url) {
23
+ output.error('--url is required');
24
+ process.exit(1);
25
+ }
26
+ if (!options.name) {
27
+ output.error('--name is required');
28
+ process.exit(1);
29
+ }
30
+ output.debug('Registering TAP agent...');
31
+ const baseUrl = new URL(options.url).origin;
32
+ const endpoint = buildUrl(baseUrl, '/v1/agents/register/tap', options.appId);
33
+ // Build request body
34
+ const body = {
35
+ name: options.name,
36
+ };
37
+ if (options.operator) {
38
+ body.operator = options.operator;
39
+ }
40
+ if (options.trustLevel) {
41
+ body.trust_level = options.trustLevel;
42
+ }
43
+ output.debug(`Endpoint: ${endpoint}`);
44
+ output.debug(`Request body: ${JSON.stringify(body, null, 2)}`);
45
+ const response = await fetch(endpoint, {
46
+ method: 'POST',
47
+ headers: {
48
+ 'Content-Type': 'application/json',
49
+ },
50
+ body: JSON.stringify(body),
51
+ });
52
+ const data = await response.json();
53
+ const responseTime = Date.now() - startTime;
54
+ if (!response.ok) {
55
+ if (options.json) {
56
+ output.json({
57
+ success: false,
58
+ error: data.error || 'REGISTRATION_FAILED',
59
+ message: data.message || response.statusText,
60
+ status: response.status,
61
+ });
62
+ }
63
+ else {
64
+ output.error(`Registration failed: ${data.message || response.statusText}`);
65
+ output.section('Status', response.status.toString());
66
+ output.section('Error', data.error || 'UNKNOWN');
67
+ }
68
+ process.exit(1);
69
+ }
70
+ if (options.json) {
71
+ output.json({
72
+ success: true,
73
+ ...data,
74
+ responseTimeMs: responseTime,
75
+ });
76
+ }
77
+ else {
78
+ output.success(`Agent registered in ${responseTime}ms!`);
79
+ output.section('Agent ID', data.agent_id);
80
+ output.section('Name', data.name);
81
+ output.section('App ID', data.app_id);
82
+ if (data.operator) {
83
+ output.section('Operator', data.operator);
84
+ }
85
+ if (data.trust_level) {
86
+ output.section('Trust Level', data.trust_level);
87
+ }
88
+ if (data.tap_enabled) {
89
+ output.section('TAP Enabled', 'true');
90
+ }
91
+ if (options.verbose) {
92
+ console.log('\nFull Response:');
93
+ console.log(JSON.stringify(data, null, 2));
94
+ }
95
+ }
96
+ }
97
+ catch (error) {
98
+ if (options.json) {
99
+ output.json({
100
+ success: false,
101
+ error: error instanceof Error ? error.message : String(error),
102
+ });
103
+ }
104
+ else {
105
+ output.error(`Registration failed: ${error instanceof Error ? error.message : String(error)}`);
106
+ }
107
+ process.exit(1);
108
+ }
109
+ }
110
+ /**
111
+ * Get TAP agent details
112
+ * GET /v1/agents/:id/tap
113
+ */
114
+ export async function getCommand(options) {
115
+ const output = new Output(options);
116
+ const startTime = Date.now();
117
+ try {
118
+ if (!options.url) {
119
+ output.error('--url is required');
120
+ process.exit(1);
121
+ }
122
+ if (!options.agentId) {
123
+ output.error('--agent-id is required');
124
+ process.exit(1);
125
+ }
126
+ output.debug(`Getting TAP agent ${options.agentId}...`);
127
+ const baseUrl = new URL(options.url).origin;
128
+ const endpoint = buildUrl(baseUrl, `/v1/agents/${encodeURIComponent(options.agentId)}/tap`);
129
+ output.debug(`Endpoint: ${endpoint}`);
130
+ const response = await fetch(endpoint, {
131
+ method: 'GET',
132
+ headers: {
133
+ 'Accept': 'application/json',
134
+ },
135
+ });
136
+ const data = await response.json();
137
+ const responseTime = Date.now() - startTime;
138
+ if (!response.ok) {
139
+ if (options.json) {
140
+ output.json({
141
+ success: false,
142
+ error: data.error || 'GET_FAILED',
143
+ message: data.message || response.statusText,
144
+ status: response.status,
145
+ });
146
+ }
147
+ else {
148
+ output.error(`Get failed: ${data.message || response.statusText}`);
149
+ output.section('Status', response.status.toString());
150
+ output.section('Error', data.error || 'UNKNOWN');
151
+ }
152
+ process.exit(1);
153
+ }
154
+ if (options.json) {
155
+ output.json({
156
+ success: true,
157
+ ...data,
158
+ responseTimeMs: responseTime,
159
+ });
160
+ }
161
+ else {
162
+ output.success(`Agent retrieved in ${responseTime}ms!`);
163
+ output.section('Agent ID', data.agent_id);
164
+ output.section('Name', data.name);
165
+ output.section('App ID', data.app_id);
166
+ if (data.operator) {
167
+ output.section('Operator', data.operator);
168
+ }
169
+ if (data.version) {
170
+ output.section('Version', data.version);
171
+ }
172
+ if (data.trust_level) {
173
+ output.section('Trust Level', data.trust_level);
174
+ }
175
+ if (data.tap_enabled !== undefined) {
176
+ output.section('TAP Enabled', data.tap_enabled ? 'true' : 'false');
177
+ }
178
+ if (data.signature_algorithm) {
179
+ output.section('Signature Algorithm', data.signature_algorithm);
180
+ }
181
+ if (data.has_public_key) {
182
+ output.section('Has Public Key', 'true');
183
+ if (data.key_fingerprint) {
184
+ output.section('Key Fingerprint', data.key_fingerprint);
185
+ }
186
+ }
187
+ if (data.created_at) {
188
+ output.section('Created At', data.created_at);
189
+ }
190
+ if (data.capabilities && Array.isArray(data.capabilities)) {
191
+ output.section('Capabilities', data.capabilities.length.toString());
192
+ if (options.verbose && data.capabilities.length > 0) {
193
+ console.log('\nCapabilities:');
194
+ data.capabilities.forEach((cap, idx) => {
195
+ console.log(` ${idx + 1}. ${cap.action}${cap.resource ? ` on ${cap.resource}` : ''}`);
196
+ if (cap.constraints) {
197
+ console.log(` Constraints: ${JSON.stringify(cap.constraints)}`);
198
+ }
199
+ });
200
+ }
201
+ }
202
+ if (options.verbose) {
203
+ console.log('\nFull Response:');
204
+ console.log(JSON.stringify(data, null, 2));
205
+ }
206
+ }
207
+ }
208
+ catch (error) {
209
+ if (options.json) {
210
+ output.json({
211
+ success: false,
212
+ error: error instanceof Error ? error.message : String(error),
213
+ });
214
+ }
215
+ else {
216
+ output.error(`Get failed: ${error instanceof Error ? error.message : String(error)}`);
217
+ }
218
+ process.exit(1);
219
+ }
220
+ }
221
+ /**
222
+ * List TAP agents
223
+ * GET /v1/agents/tap
224
+ */
225
+ export async function listCommand(options) {
226
+ const output = new Output(options);
227
+ const startTime = Date.now();
228
+ try {
229
+ if (!options.url) {
230
+ output.error('--url is required');
231
+ process.exit(1);
232
+ }
233
+ output.debug('Listing TAP agents...');
234
+ const baseUrl = new URL(options.url).origin;
235
+ const endpoint = buildUrl(baseUrl, '/v1/agents/tap', options.appId);
236
+ const url = new URL(endpoint);
237
+ if (options.tapOnly) {
238
+ url.searchParams.set('tap_only', 'true');
239
+ }
240
+ output.debug(`Endpoint: ${url.toString()}`);
241
+ const response = await fetch(url.toString(), {
242
+ method: 'GET',
243
+ headers: {
244
+ 'Accept': 'application/json',
245
+ },
246
+ });
247
+ const data = await response.json();
248
+ const responseTime = Date.now() - startTime;
249
+ if (!response.ok) {
250
+ if (options.json) {
251
+ output.json({
252
+ success: false,
253
+ error: data.error || 'LIST_FAILED',
254
+ message: data.message || response.statusText,
255
+ status: response.status,
256
+ });
257
+ }
258
+ else {
259
+ output.error(`List failed: ${data.message || response.statusText}`);
260
+ output.section('Status', response.status.toString());
261
+ output.section('Error', data.error || 'UNKNOWN');
262
+ }
263
+ process.exit(1);
264
+ }
265
+ if (options.json) {
266
+ output.json({
267
+ success: true,
268
+ ...data,
269
+ responseTimeMs: responseTime,
270
+ });
271
+ }
272
+ else {
273
+ output.success(`Agents retrieved in ${responseTime}ms!`);
274
+ output.section('Total Count', data.count?.toString() || '0');
275
+ if (data.tap_enabled_count !== undefined) {
276
+ output.section('TAP Enabled', data.tap_enabled_count.toString());
277
+ }
278
+ if (data.agents && Array.isArray(data.agents) && data.agents.length > 0) {
279
+ console.log('\nAgents:\n');
280
+ // Display as table
281
+ const headers = ['Agent ID', 'Name', 'Operator', 'Trust Level', 'TAP'];
282
+ const rows = data.agents.map((agent) => [
283
+ agent.agent_id,
284
+ agent.name || '-',
285
+ agent.operator || '-',
286
+ agent.trust_level || '-',
287
+ agent.tap_enabled ? '✓' : '✗',
288
+ ]);
289
+ output.table(headers, rows);
290
+ if (options.verbose) {
291
+ console.log('\nDetailed Information:');
292
+ data.agents.forEach((agent, idx) => {
293
+ console.log(`\n${idx + 1}. ${agent.name} (${agent.agent_id})`);
294
+ if (agent.version) {
295
+ console.log(` Version: ${agent.version}`);
296
+ }
297
+ if (agent.created_at) {
298
+ console.log(` Created: ${agent.created_at}`);
299
+ }
300
+ if (agent.capabilities && Array.isArray(agent.capabilities)) {
301
+ console.log(` Capabilities: ${agent.capabilities.length}`);
302
+ }
303
+ if (agent.last_verified_at) {
304
+ console.log(` Last Verified: ${agent.last_verified_at}`);
305
+ }
306
+ });
307
+ }
308
+ }
309
+ else {
310
+ console.log('\nNo agents found.');
311
+ }
312
+ }
313
+ }
314
+ catch (error) {
315
+ if (options.json) {
316
+ output.json({
317
+ success: false,
318
+ error: error instanceof Error ? error.message : String(error),
319
+ });
320
+ }
321
+ else {
322
+ output.error(`List failed: ${error instanceof Error ? error.message : String(error)}`);
323
+ }
324
+ process.exit(1);
325
+ }
326
+ }
327
+ /**
328
+ * Create TAP session
329
+ * POST /v1/sessions/tap
330
+ */
331
+ export async function sessionCommand(options) {
332
+ const output = new Output(options);
333
+ const startTime = Date.now();
334
+ try {
335
+ if (!options.url) {
336
+ output.error('--url is required');
337
+ process.exit(1);
338
+ }
339
+ if (!options.agentId) {
340
+ output.error('--agent-id is required');
341
+ process.exit(1);
342
+ }
343
+ if (!options.intent) {
344
+ output.error('--intent is required');
345
+ process.exit(1);
346
+ }
347
+ output.debug('Creating TAP session...');
348
+ const baseUrl = new URL(options.url).origin;
349
+ const endpoint = buildUrl(baseUrl, '/v1/sessions/tap');
350
+ // Parse intent JSON
351
+ let intentObj;
352
+ try {
353
+ intentObj = JSON.parse(options.intent);
354
+ }
355
+ catch {
356
+ output.error('--intent must be valid JSON');
357
+ if (!options.json) {
358
+ console.log('\nExample:');
359
+ console.log(' --intent \'{"action":"read","resource":"documents"}\'');
360
+ }
361
+ process.exit(1);
362
+ }
363
+ // Build request body
364
+ const body = {
365
+ agent_id: options.agentId,
366
+ intent: intentObj,
367
+ user_context: options.userContext || crypto.randomUUID(),
368
+ };
369
+ output.debug(`Endpoint: ${endpoint}`);
370
+ output.debug(`Request body: ${JSON.stringify(body, null, 2)}`);
371
+ const response = await fetch(endpoint, {
372
+ method: 'POST',
373
+ headers: {
374
+ 'Content-Type': 'application/json',
375
+ },
376
+ body: JSON.stringify(body),
377
+ });
378
+ const data = await response.json();
379
+ const responseTime = Date.now() - startTime;
380
+ if (!response.ok) {
381
+ if (options.json) {
382
+ output.json({
383
+ success: false,
384
+ error: data.error || 'SESSION_FAILED',
385
+ message: data.message || response.statusText,
386
+ status: response.status,
387
+ });
388
+ }
389
+ else {
390
+ output.error(`Session creation failed: ${data.message || response.statusText}`);
391
+ output.section('Status', response.status.toString());
392
+ output.section('Error', data.error || 'UNKNOWN');
393
+ if (data.error === 'INSUFFICIENT_CAPABILITY') {
394
+ console.log('\nThe agent does not have the required capability for this action.');
395
+ console.log('Register the agent with appropriate capabilities first.');
396
+ }
397
+ }
398
+ process.exit(1);
399
+ }
400
+ if (options.json) {
401
+ output.json({
402
+ success: true,
403
+ ...data,
404
+ responseTimeMs: responseTime,
405
+ });
406
+ }
407
+ else {
408
+ output.success(`Session created in ${responseTime}ms!`);
409
+ output.section('Session ID', data.session_id);
410
+ output.section('Agent ID', data.agent_id);
411
+ if (data.expires_at) {
412
+ output.section('Expires At', data.expires_at);
413
+ }
414
+ if (data.capabilities && Array.isArray(data.capabilities)) {
415
+ output.section('Capabilities', data.capabilities.length.toString());
416
+ }
417
+ if (data.intent) {
418
+ output.section('Intent Action', data.intent.action);
419
+ if (data.intent.resource) {
420
+ output.section('Intent Resource', data.intent.resource);
421
+ }
422
+ }
423
+ if (options.verbose) {
424
+ console.log('\nFull Response:');
425
+ console.log(JSON.stringify(data, null, 2));
426
+ }
427
+ }
428
+ }
429
+ catch (error) {
430
+ if (options.json) {
431
+ output.json({
432
+ success: false,
433
+ error: error instanceof Error ? error.message : String(error),
434
+ });
435
+ }
436
+ else {
437
+ output.error(`Session creation failed: ${error instanceof Error ? error.message : String(error)}`);
438
+ }
439
+ process.exit(1);
440
+ }
441
+ }
442
+ export default {
443
+ register: registerCommand,
444
+ get: getCommand,
445
+ list: listCommand,
446
+ session: sessionCommand,
447
+ };
448
+ //# sourceMappingURL=tap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tap.js","sourceRoot":"","sources":["../../src/commands/tap.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AA8B1C,wDAAwD;AACxD,SAAS,QAAQ,CAAC,OAAe,EAAE,IAAY,EAAE,KAAc;IAC7D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,IAAI,KAAK,EAAE,CAAC;QACV,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAwB;IAC5D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,2BAA2B;QAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAEzC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,yBAAyB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAE7E,qBAAqB;QACrB,MAAM,IAAI,GAAQ;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC;QAEF,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACnC,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;QACxC,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAE/D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAE5C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,qBAAqB;oBAC1C,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU;oBAC5C,MAAM,EAAE,QAAQ,CAAC,MAAM;iBACxB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,wBAAwB,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC5E,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACrD,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,IAAI;gBACb,GAAG,IAAI;gBACP,cAAc,EAAE,YAAY;aAC7B,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,uBAAuB,YAAY,KAAK,CAAC,CAAC;YACzD,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAEtC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;YAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAClD,CAAC;YAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YACxC,CAAC;YAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAmB;IAClD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,qBAAqB,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC;QAExD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,cAAc,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE5F,MAAM,CAAC,KAAK,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YACrC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,QAAQ,EAAE,kBAAkB;aAC7B;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAE5C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,YAAY;oBACjC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU;oBAC5C,MAAM,EAAE,QAAQ,CAAC,MAAM;iBACxB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;gBACnE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACrD,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,IAAI;gBACb,GAAG,IAAI;gBACP,cAAc,EAAE,YAAY;aAC7B,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,sBAAsB,YAAY,KAAK,CAAC,CAAC;YACxD,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAEtC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;YAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAClD,CAAC;YAED,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACnC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACrE,CAAC;YAED,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC7B,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAClE,CAAC;YAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;gBACzC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACzB,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAChD,CAAC;YAED,IAAI,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC1D,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACpE,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;oBAC/B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAQ,EAAE,GAAW,EAAE,EAAE;wBAClD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACvF,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;4BACpB,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;wBACtE,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,eAAe,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAEtC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACpE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE9B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAE5C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YAC3C,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,QAAQ,EAAE,kBAAkB;aAC7B;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAE5C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,aAAa;oBAClC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU;oBAC5C,MAAM,EAAE,QAAQ,CAAC,MAAM;iBACxB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;gBACpE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACrD,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,IAAI;gBACb,GAAG,IAAI;gBACP,cAAc,EAAE,YAAY;aAC7B,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,uBAAuB,YAAY,KAAK,CAAC,CAAC;YACzD,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC;YAE7D,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBACzC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC;YACnE,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAE3B,mBAAmB;gBACnB,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;gBACvE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC;oBAC3C,KAAK,CAAC,QAAQ;oBACd,KAAK,CAAC,IAAI,IAAI,GAAG;oBACjB,KAAK,CAAC,QAAQ,IAAI,GAAG;oBACrB,KAAK,CAAC,WAAW,IAAI,GAAG;oBACxB,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;iBAC9B,CAAC,CAAC;gBAEH,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAE5B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACpB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;oBACvC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,GAAW,EAAE,EAAE;wBAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;wBAC/D,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;4BAClB,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;wBAC9C,CAAC;wBACD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;4BACrB,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;wBACjD,CAAC;wBACD,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;4BAC5D,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;wBAC/D,CAAC;wBACD,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;4BAC3B,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;wBAC7D,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,gBAAgB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAuB;IAC1D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAExC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;QAEvD,oBAAoB;QACpB,IAAI,SAAS,CAAC;QACd,IAAI,CAAC;YACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACzE,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,qBAAqB;QACrB,MAAM,IAAI,GAAQ;YAChB,QAAQ,EAAE,OAAO,CAAC,OAAO;YACzB,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE;SACzD,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAE/D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAE5C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,gBAAgB;oBACrC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU;oBAC5C,MAAM,EAAE,QAAQ,CAAC,MAAM;iBACxB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,4BAA4B,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;gBAChF,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACrD,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC;gBAEjD,IAAI,IAAI,CAAC,KAAK,KAAK,yBAAyB,EAAE,CAAC;oBAC7C,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;oBAClF,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,IAAI;gBACb,GAAG,IAAI;gBACP,cAAc,EAAE,YAAY;aAC7B,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,sBAAsB,YAAY,KAAK,CAAC,CAAC;YACxD,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9C,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE1C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAChD,CAAC;YAED,IAAI,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC1D,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtE,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACpD,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACzB,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrG,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,eAAe;IACb,QAAQ,EAAE,eAAe;IACzB,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,cAAc;CACxB,CAAC"}
package/dist/index.js CHANGED
@@ -7,11 +7,13 @@ import { testCommand } from './commands/test.js';
7
7
  import { solveCommand } from './commands/solve.js';
8
8
  import { benchmarkCommand } from './commands/benchmark.js';
9
9
  import { headersCommand } from './commands/headers.js';
10
+ import { discoverCommand } from './commands/discover.js';
11
+ import tapCommand from './commands/tap.js';
10
12
  const program = new Command();
11
13
  program
12
14
  .name('botcha')
13
15
  .description('CLI tool for testing and debugging BOTCHA-protected endpoints')
14
- .version('0.1.0');
16
+ .version('0.2.1');
15
17
  // Test command
16
18
  program
17
19
  .command('test <url>')
@@ -51,6 +53,56 @@ program
51
53
  .option('-v, --verbose', 'Show all headers')
52
54
  .option('-q, --quiet', 'Minimal output')
53
55
  .action(headersCommand);
56
+ // Discover command
57
+ program
58
+ .command('discover <url>')
59
+ .description('Find all BOTCHA discovery endpoints on a domain')
60
+ .option('--json', 'Output as JSON')
61
+ .option('-v, --verbose', 'Show recommendations')
62
+ .option('-q, --quiet', 'Minimal output')
63
+ .action(discoverCommand);
64
+ // TAP command (parent with subcommands)
65
+ const tap = program
66
+ .command('tap')
67
+ .description('Trusted Agent Protocol (TAP) commands');
68
+ tap.command('register')
69
+ .description('Register a TAP agent')
70
+ .requiredOption('--url <url>', 'BOTCHA service URL')
71
+ .requiredOption('--name <name>', 'Agent name')
72
+ .option('--app-id <id>', 'App ID for authentication')
73
+ .option('--operator <operator>', 'Agent operator/organization')
74
+ .option('--trust-level <level>', 'Trust level (basic, verified, enterprise)')
75
+ .option('--json', 'Output as JSON')
76
+ .option('-v, --verbose', 'Show detailed output')
77
+ .option('-q, --quiet', 'Minimal output')
78
+ .action(tapCommand.register);
79
+ tap.command('get')
80
+ .description('Get TAP agent details')
81
+ .requiredOption('--url <url>', 'BOTCHA service URL')
82
+ .requiredOption('--agent-id <id>', 'Agent ID')
83
+ .option('--json', 'Output as JSON')
84
+ .option('-v, --verbose', 'Show detailed output')
85
+ .option('-q, --quiet', 'Minimal output')
86
+ .action(tapCommand.get);
87
+ tap.command('list')
88
+ .description('List TAP agents')
89
+ .requiredOption('--url <url>', 'BOTCHA service URL')
90
+ .option('--app-id <id>', 'App ID for authentication')
91
+ .option('--tap-only', 'Only show TAP-enabled agents')
92
+ .option('--json', 'Output as JSON')
93
+ .option('-v, --verbose', 'Show detailed output')
94
+ .option('-q, --quiet', 'Minimal output')
95
+ .action(tapCommand.list);
96
+ tap.command('session')
97
+ .description('Create TAP session')
98
+ .requiredOption('--url <url>', 'BOTCHA service URL')
99
+ .requiredOption('--agent-id <id>', 'Agent ID')
100
+ .requiredOption('--intent <json>', 'Intent as JSON string')
101
+ .option('--user-context <hash>', 'User context hash')
102
+ .option('--json', 'Output as JSON')
103
+ .option('-v, --verbose', 'Show detailed output')
104
+ .option('-q, --quiet', 'Minimal output')
105
+ .action(tapCommand.session);
54
106
  // Parse and execute
55
107
  program.parse();
56
108
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,+DAA+D,CAAC;KAC5E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC;KAC/C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC;KACvC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,gDAAgD,CAAC;KAC7D,cAAc,CAAC,aAAa,EAAE,6BAA6B,CAAC;KAC5D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC;KAC/C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC;KACvC,MAAM,CAAC,YAAY,CAAC,CAAC;AAExB,oBAAoB;AACpB,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,2BAA2B,EAAE,6BAA6B,EAAE,IAAI,CAAC;KACxE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC;KAC/C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC;KACvC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;IACvB,gBAAgB,CAAC,GAAG,EAAE;QACpB,GAAG,OAAO;QACV,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;KAC7C,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC;KAC3C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC;KACvC,MAAM,CAAC,cAAc,CAAC,CAAC;AAE1B,oBAAoB;AACpB,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@dupecom/botcha-cli",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "CLI tool for testing and debugging BOTCHA-protected endpoints",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
8
  "bin": {
9
- "botcha": "./bin/botcha.js"
9
+ "botcha": "bin/botcha.js"
10
10
  },
11
11
  "files": [
12
12
  "dist",
@@ -16,7 +16,7 @@
16
16
  "scripts": {
17
17
  "build": "tsc",
18
18
  "dev": "tsx src/index.ts",
19
- "prepublishOnly": "npm run build"
19
+ "prepublishOnly": "bun run build"
20
20
  },
21
21
  "keywords": [
22
22
  "botcha",
@@ -31,11 +31,11 @@
31
31
  "license": "MIT",
32
32
  "repository": {
33
33
  "type": "git",
34
- "url": "https://github.com/i8ramin/botcha"
34
+ "url": "git+https://github.com/dupe-com/botcha.git"
35
35
  },
36
36
  "homepage": "https://botcha.ai",
37
37
  "dependencies": {
38
- "@dupecom/botcha": "^0.4.1",
38
+ "@dupecom/botcha": "^0.13.1",
39
39
  "chalk": "^5.3.0",
40
40
  "commander": "^12.1.0"
41
41
  },