@dupecom/botcha-cli 0.2.1 → 0.3.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.
@@ -0,0 +1,9 @@
1
+ export interface InitOptions {
2
+ email: string;
3
+ url?: string;
4
+ json?: boolean;
5
+ verbose?: boolean;
6
+ quiet?: boolean;
7
+ }
8
+ export declare function initCommand(options: InitOptions): Promise<void>;
9
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyErE"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Init command — one-time setup for BOTCHA CLI
3
+ * Creates an app, saves config to ~/.botcha/config.json
4
+ */
5
+ import { Output } from '../lib/output.js';
6
+ import { loadConfig, saveConfig, configPath } from '../lib/config.js';
7
+ export async function initCommand(options) {
8
+ const output = new Output(options);
9
+ if (!options.email) {
10
+ output.error('--email is required');
11
+ process.exit(1);
12
+ }
13
+ const config = loadConfig();
14
+ const url = options.url || config.url;
15
+ output.header('\nBOTCHA Setup\n');
16
+ // Check if already initialized
17
+ if (config.app_id) {
18
+ output.warn(`Already initialized (app_id: ${config.app_id})`);
19
+ output.info('Run with --email to create a new app, or edit ~/.botcha/config.json');
20
+ }
21
+ // Step 1: Create app
22
+ const spinner = output.spinner('Creating app...');
23
+ try {
24
+ const response = await fetch(`${url}/v1/apps`, {
25
+ method: 'POST',
26
+ headers: { 'Content-Type': 'application/json' },
27
+ body: JSON.stringify({ email: options.email }),
28
+ });
29
+ const data = await response.json();
30
+ if (!response.ok) {
31
+ spinner.stop();
32
+ output.error(`App creation failed: ${data.message || response.statusText}`);
33
+ process.exit(1);
34
+ }
35
+ // Save config
36
+ config.url = url;
37
+ config.app_id = data.app_id;
38
+ config.app_secret = data.app_secret;
39
+ config.email = options.email;
40
+ saveConfig(config);
41
+ spinner.stop();
42
+ if (options.json) {
43
+ output.json({
44
+ success: true,
45
+ app_id: data.app_id,
46
+ config_path: configPath(),
47
+ });
48
+ return;
49
+ }
50
+ output.success('App created!');
51
+ output.section('App ID', data.app_id);
52
+ output.section('Config saved to', configPath());
53
+ console.log();
54
+ output.warn('Save your app_secret — it cannot be retrieved again:');
55
+ console.log(` ${data.app_secret}`);
56
+ console.log();
57
+ output.info('Next steps:');
58
+ console.log(' botcha tap register --name "my-agent" --capabilities browse,search');
59
+ console.log(' botcha tap list');
60
+ console.log(' botcha tap session --action browse --resource products');
61
+ console.log();
62
+ }
63
+ catch (error) {
64
+ spinner.stop();
65
+ output.error(`Setup failed: ${error instanceof Error ? error.message : String(error)}`);
66
+ process.exit(1);
67
+ }
68
+ }
69
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAUtE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC;IAEtC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAElC,+BAA+B;IAC/B,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,gCAAgC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IACrF,CAAC;IAED,qBAAqB;IACrB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,UAAU,EAAE;YAC7C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;SAC/C,CAAC,CAAC;QAEH,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAExC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,wBAAwB,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,cAAc;QACd,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;QACjB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACpC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC7B,UAAU,CAAC,MAAM,CAAC,CAAC;QAEnB,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,WAAW,EAAE,UAAU,EAAE;aAC1B,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEhB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,iBAAiB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export interface TAPOptions {
2
- url: string;
2
+ url?: string;
3
3
  appId?: string;
4
4
  json?: boolean;
5
5
  verbose?: boolean;
@@ -9,43 +9,36 @@ export interface RegisterOptions extends TAPOptions {
9
9
  name: string;
10
10
  operator?: string;
11
11
  trustLevel?: string;
12
+ capabilities?: string;
12
13
  }
13
14
  export interface GetOptions extends TAPOptions {
14
- agentId: string;
15
+ agentId?: string;
15
16
  }
16
17
  export interface ListOptions extends TAPOptions {
17
18
  tapOnly?: boolean;
18
19
  }
19
20
  export interface SessionOptions extends TAPOptions {
20
- agentId: string;
21
- intent: string;
21
+ agentId?: string;
22
+ action?: string;
23
+ resource?: string;
24
+ duration?: string;
25
+ intent?: string;
22
26
  userContext?: string;
23
27
  }
24
- /**
25
- * Register a TAP agent
26
- * POST /v1/agents/register/tap
27
- */
28
+ export interface StatusOptions extends TAPOptions {
29
+ sessionId?: string;
30
+ }
28
31
  export declare function registerCommand(options: RegisterOptions): Promise<void>;
29
- /**
30
- * Get TAP agent details
31
- * GET /v1/agents/:id/tap
32
- */
33
32
  export declare function getCommand(options: GetOptions): Promise<void>;
34
- /**
35
- * List TAP agents
36
- * GET /v1/agents/tap
37
- */
38
33
  export declare function listCommand(options: ListOptions): Promise<void>;
39
- /**
40
- * Create TAP session
41
- * POST /v1/sessions/tap
42
- */
43
34
  export declare function sessionCommand(options: SessionOptions): Promise<void>;
35
+ export declare function statusCommand(options: StatusOptions): Promise<void>;
44
36
  declare const _default: {
45
37
  register: typeof registerCommand;
46
38
  get: typeof getCommand;
47
39
  list: typeof listCommand;
48
40
  session: typeof sessionCommand;
41
+ status: typeof statusCommand;
49
42
  };
50
43
  export default _default;
51
44
  //# sourceMappingURL=tap.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"tap.d.ts","sourceRoot":"","sources":["../../src/commands/tap.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,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;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwDD,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAyE7E;AAID,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CnE;AAID,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDrE;AAID,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA+E3E;AAID,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAwGzE;;;;;;;;AAID,wBAME"}
@@ -1,8 +1,10 @@
1
1
  /**
2
2
  * TAP command - Trusted Agent Protocol commands
3
+ * Config-aware: reads ~/.botcha/config.json for defaults
3
4
  */
4
5
  import { Output } from '../lib/output.js';
5
- /** Build an API URL with optional app_id query param */
6
+ import { loadConfig, saveConfig, resolve } from '../lib/config.js';
7
+ // ============ HELPERS ============
6
8
  function buildUrl(baseUrl, path, appId) {
7
9
  const url = new URL(path, baseUrl);
8
10
  if (appId) {
@@ -10,439 +12,410 @@ function buildUrl(baseUrl, path, appId) {
10
12
  }
11
13
  return url.toString();
12
14
  }
13
- /**
14
- * Register a TAP agent
15
- * POST /v1/agents/register/tap
16
- */
15
+ /** Parse --duration "1h" / "30m" / "3600" into seconds */
16
+ function parseDuration(input) {
17
+ const match = input.match(/^(\d+)\s*(h|hr|hrs|hours?|m|min|mins|minutes?|s|sec|secs|seconds?)?$/i);
18
+ if (!match)
19
+ return parseInt(input, 10) || 3600;
20
+ const num = parseInt(match[1], 10);
21
+ const unit = (match[2] || 's').toLowerCase();
22
+ if (unit.startsWith('h'))
23
+ return num * 3600;
24
+ if (unit.startsWith('m'))
25
+ return num * 60;
26
+ return num;
27
+ }
28
+ /** Resolve url/appId/agentId from flags + config, exit if missing */
29
+ function resolveConfig(options, output, need = {}) {
30
+ const config = loadConfig();
31
+ const url = resolve(options.url, config.url);
32
+ const appId = resolve(options.appId, config.app_id);
33
+ const agentId = resolve(options.agentId, config.agent_id);
34
+ if (need.url && !url) {
35
+ output.error('No URL. Pass --url or run: botcha init --email you@example.com');
36
+ process.exit(1);
37
+ }
38
+ if (need.appId && !appId) {
39
+ output.error('No app_id. Pass --app-id or run: botcha init --email you@example.com');
40
+ process.exit(1);
41
+ }
42
+ if (need.agentId && !agentId) {
43
+ output.error('No agent_id. Pass --agent-id or register one: botcha tap register --name "my-agent"');
44
+ process.exit(1);
45
+ }
46
+ return { url: url, appId, agentId, config };
47
+ }
48
+ function handleError(output, options, label, error) {
49
+ if (options.json) {
50
+ output.json({ success: false, error: error instanceof Error ? error.message : String(error) });
51
+ }
52
+ else {
53
+ output.error(`${label}: ${error instanceof Error ? error.message : String(error)}`);
54
+ }
55
+ process.exit(1);
56
+ }
57
+ // ============ REGISTER ============
17
58
  export async function registerCommand(options) {
18
59
  const output = new Output(options);
19
60
  const startTime = Date.now();
20
61
  try {
21
- // Validate required fields
22
- if (!options.url) {
23
- output.error('--url is required');
24
- process.exit(1);
25
- }
26
62
  if (!options.name) {
27
63
  output.error('--name is required');
28
64
  process.exit(1);
29
65
  }
66
+ const { url, appId, config } = resolveConfig(options, output, { url: true, appId: true });
30
67
  output.debug('Registering TAP agent...');
31
- const baseUrl = new URL(options.url).origin;
32
- const endpoint = buildUrl(baseUrl, '/v1/agents/register/tap', options.appId);
68
+ const baseUrl = new URL(url).origin;
69
+ const endpoint = buildUrl(baseUrl, '/v1/agents/register/tap', appId);
33
70
  // Build request body
34
- const body = {
35
- name: options.name,
36
- };
37
- if (options.operator) {
71
+ const body = { name: options.name };
72
+ if (options.operator)
38
73
  body.operator = options.operator;
39
- }
40
- if (options.trustLevel) {
74
+ if (options.trustLevel)
41
75
  body.trust_level = options.trustLevel;
76
+ // Parse --capabilities "browse,search,purchase" into proper format
77
+ if (options.capabilities) {
78
+ body.capabilities = options.capabilities.split(',').map((action) => ({
79
+ action: action.trim(),
80
+ scope: ['*'],
81
+ }));
42
82
  }
43
83
  output.debug(`Endpoint: ${endpoint}`);
44
- output.debug(`Request body: ${JSON.stringify(body, null, 2)}`);
84
+ output.debug(`Body: ${JSON.stringify(body, null, 2)}`);
45
85
  const response = await fetch(endpoint, {
46
86
  method: 'POST',
47
- headers: {
48
- 'Content-Type': 'application/json',
49
- },
87
+ headers: { 'Content-Type': 'application/json' },
50
88
  body: JSON.stringify(body),
51
89
  });
52
90
  const data = await response.json();
53
91
  const responseTime = Date.now() - startTime;
54
92
  if (!response.ok) {
55
93
  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
- });
94
+ output.json({ success: false, error: data.error, message: data.message, status: response.status });
62
95
  }
63
96
  else {
64
97
  output.error(`Registration failed: ${data.message || response.statusText}`);
65
- output.section('Status', response.status.toString());
66
- output.section('Error', data.error || 'UNKNOWN');
67
98
  }
68
99
  process.exit(1);
69
100
  }
101
+ // Save as default agent
102
+ config.agent_id = data.agent_id;
103
+ saveConfig(config);
70
104
  if (options.json) {
71
- output.json({
72
- success: true,
73
- ...data,
74
- responseTimeMs: responseTime,
75
- });
105
+ output.json({ success: true, ...data, responseTimeMs: responseTime });
76
106
  }
77
107
  else {
78
108
  output.success(`Agent registered in ${responseTime}ms!`);
79
109
  output.section('Agent ID', data.agent_id);
80
110
  output.section('Name', data.name);
81
- output.section('App ID', data.app_id);
82
- if (data.operator) {
111
+ if (data.operator)
83
112
  output.section('Operator', data.operator);
84
- }
85
- if (data.trust_level) {
113
+ if (data.trust_level)
86
114
  output.section('Trust Level', data.trust_level);
115
+ if (data.capabilities?.length) {
116
+ output.section('Capabilities', data.capabilities.map((c) => c.action).join(', '));
87
117
  }
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
- }
118
+ console.log();
119
+ output.info('Saved as default agent. Next:');
120
+ console.log(' botcha tap session --action browse --resource products');
95
121
  }
96
122
  }
97
123
  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);
124
+ handleError(output, options, 'Registration failed', error);
108
125
  }
109
126
  }
110
- /**
111
- * Get TAP agent details
112
- * GET /v1/agents/:id/tap
113
- */
127
+ // ============ GET ============
114
128
  export async function getCommand(options) {
115
129
  const output = new Output(options);
116
130
  const startTime = Date.now();
117
131
  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
- });
132
+ const { url, agentId } = resolveConfig(options, output, { url: true, agentId: true });
133
+ output.debug(`Getting TAP agent ${agentId}...`);
134
+ const baseUrl = new URL(url).origin;
135
+ const endpoint = buildUrl(baseUrl, `/v1/agents/${encodeURIComponent(agentId)}/tap`);
136
+ const response = await fetch(endpoint, { headers: { 'Accept': 'application/json' } });
136
137
  const data = await response.json();
137
138
  const responseTime = Date.now() - startTime;
138
139
  if (!response.ok) {
139
140
  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
- });
141
+ output.json({ success: false, error: data.error, message: data.message, status: response.status });
146
142
  }
147
143
  else {
148
- output.error(`Get failed: ${data.message || response.statusText}`);
149
- output.section('Status', response.status.toString());
150
- output.section('Error', data.error || 'UNKNOWN');
144
+ output.error(`Agent not found: ${data.message || response.statusText}`);
151
145
  }
152
146
  process.exit(1);
153
147
  }
154
148
  if (options.json) {
155
- output.json({
156
- success: true,
157
- ...data,
158
- responseTimeMs: responseTime,
159
- });
149
+ output.json({ success: true, ...data, responseTimeMs: responseTime });
160
150
  }
161
151
  else {
162
152
  output.success(`Agent retrieved in ${responseTime}ms!`);
163
153
  output.section('Agent ID', data.agent_id);
164
154
  output.section('Name', data.name);
165
155
  output.section('App ID', data.app_id);
166
- if (data.operator) {
156
+ if (data.operator)
167
157
  output.section('Operator', data.operator);
168
- }
169
- if (data.version) {
158
+ if (data.version)
170
159
  output.section('Version', data.version);
171
- }
172
- if (data.trust_level) {
160
+ if (data.trust_level)
173
161
  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
- }
162
+ output.section('TAP Enabled', data.tap_enabled ? 'yes' : 'no');
163
+ if (data.created_at)
164
+ output.section('Created', data.created_at);
165
+ if (data.capabilities?.length) {
166
+ output.section('Capabilities', data.capabilities.map((c) => c.action).join(', '));
201
167
  }
202
168
  if (options.verbose) {
203
- console.log('\nFull Response:');
204
- console.log(JSON.stringify(data, null, 2));
169
+ console.log('\n' + JSON.stringify(data, null, 2));
205
170
  }
206
171
  }
207
172
  }
208
173
  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);
174
+ handleError(output, options, 'Get failed', error);
219
175
  }
220
176
  }
221
- /**
222
- * List TAP agents
223
- * GET /v1/agents/tap
224
- */
177
+ // ============ LIST ============
225
178
  export async function listCommand(options) {
226
179
  const output = new Output(options);
227
180
  const startTime = Date.now();
228
181
  try {
229
- if (!options.url) {
230
- output.error('--url is required');
231
- process.exit(1);
232
- }
182
+ const { url, appId } = resolveConfig(options, output, { url: true, appId: true });
233
183
  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
- });
184
+ const baseUrl = new URL(url).origin;
185
+ const endpoint = buildUrl(baseUrl, '/v1/agents/tap', appId);
186
+ const fullUrl = new URL(endpoint);
187
+ if (options.tapOnly)
188
+ fullUrl.searchParams.set('tap_only', 'true');
189
+ const response = await fetch(fullUrl.toString(), { headers: { 'Accept': 'application/json' } });
247
190
  const data = await response.json();
248
191
  const responseTime = Date.now() - startTime;
249
192
  if (!response.ok) {
250
193
  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
- });
194
+ output.json({ success: false, error: data.error, message: data.message, status: response.status });
257
195
  }
258
196
  else {
259
197
  output.error(`List failed: ${data.message || response.statusText}`);
260
- output.section('Status', response.status.toString());
261
- output.section('Error', data.error || 'UNKNOWN');
262
198
  }
263
199
  process.exit(1);
264
200
  }
265
201
  if (options.json) {
266
- output.json({
267
- success: true,
268
- ...data,
269
- responseTimeMs: responseTime,
270
- });
202
+ output.json({ success: true, ...data, responseTimeMs: responseTime });
271
203
  }
272
204
  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 ? '✓' : '✗',
205
+ output.success(`${data.count || 0} agent(s) found (${responseTime}ms)`);
206
+ if (data.agents?.length > 0) {
207
+ console.log();
208
+ const headers = ['Agent ID', 'Name', 'Capabilities', 'Trust', 'TAP'];
209
+ const rows = data.agents.map((a) => [
210
+ a.agent_id,
211
+ a.name || '-',
212
+ a.capabilities?.map((c) => c.action).join(',') || '-',
213
+ a.trust_level || '-',
214
+ a.tap_enabled ? 'yes' : 'no',
288
215
  ]);
289
216
  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
217
  }
309
218
  else {
310
- console.log('\nNo agents found.');
219
+ console.log('\n No agents yet. Create one:');
220
+ console.log(' botcha tap register --name "my-agent" --capabilities browse,search');
311
221
  }
312
222
  }
313
223
  }
314
224
  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);
225
+ handleError(output, options, 'List failed', error);
325
226
  }
326
227
  }
327
- /**
328
- * Create TAP session
329
- * POST /v1/sessions/tap
330
- */
228
+ // ============ SESSION ============
331
229
  export async function sessionCommand(options) {
332
230
  const output = new Output(options);
333
231
  const startTime = Date.now();
334
232
  try {
335
- if (!options.url) {
336
- output.error('--url is required');
337
- process.exit(1);
233
+ const { url, agentId } = resolveConfig(options, output, { url: true, agentId: true });
234
+ // Build intent from friendly flags OR raw JSON
235
+ let intentObj;
236
+ if (options.intent) {
237
+ try {
238
+ intentObj = JSON.parse(options.intent);
239
+ }
240
+ catch {
241
+ output.error('--intent must be valid JSON. Or use: --action browse --resource products --duration 1h');
242
+ process.exit(1);
243
+ }
338
244
  }
339
- if (!options.agentId) {
340
- output.error('--agent-id is required');
341
- process.exit(1);
245
+ else if (options.action) {
246
+ intentObj = { action: options.action };
247
+ if (options.resource)
248
+ intentObj.resource = options.resource;
249
+ if (options.duration)
250
+ intentObj.duration = parseDuration(options.duration);
342
251
  }
343
- if (!options.intent) {
344
- output.error('--intent is required');
252
+ else {
253
+ output.error('Specify intent. Either:\n --action browse --resource products --duration 1h\n --intent \'{"action":"browse","resource":"products"}\'');
345
254
  process.exit(1);
346
255
  }
347
256
  output.debug('Creating TAP session...');
348
- const baseUrl = new URL(options.url).origin;
257
+ const baseUrl = new URL(url).origin;
349
258
  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
259
  const body = {
365
- agent_id: options.agentId,
260
+ agent_id: agentId,
366
261
  intent: intentObj,
367
262
  user_context: options.userContext || crypto.randomUUID(),
368
263
  };
369
- output.debug(`Endpoint: ${endpoint}`);
370
- output.debug(`Request body: ${JSON.stringify(body, null, 2)}`);
371
264
  const response = await fetch(endpoint, {
372
265
  method: 'POST',
373
- headers: {
374
- 'Content-Type': 'application/json',
375
- },
266
+ headers: { 'Content-Type': 'application/json' },
376
267
  body: JSON.stringify(body),
377
268
  });
378
269
  const data = await response.json();
379
270
  const responseTime = Date.now() - startTime;
380
271
  if (!response.ok) {
381
272
  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
- });
273
+ output.json({ success: false, error: data.error, message: data.message, status: response.status });
388
274
  }
389
275
  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');
276
+ output.error(`Session failed: ${data.message || response.statusText}`);
393
277
  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.');
278
+ console.log('\n Agent lacks this capability. Re-register with:');
279
+ console.log(` botcha tap register --name "my-agent" --capabilities ${intentObj.action || 'browse'}`);
396
280
  }
397
281
  }
398
282
  process.exit(1);
399
283
  }
400
284
  if (options.json) {
401
- output.json({
402
- success: true,
403
- ...data,
404
- responseTimeMs: responseTime,
405
- });
285
+ output.json({ success: true, ...data, responseTimeMs: responseTime });
406
286
  }
407
287
  else {
408
288
  output.success(`Session created in ${responseTime}ms!`);
409
289
  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
- }
290
+ output.section('Agent', data.agent_id);
291
+ output.section('Expires', data.expires_at);
417
292
  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
- }
293
+ const parts = [data.intent.action, data.intent.resource].filter(Boolean);
294
+ output.section('Intent', parts.join(' on '));
422
295
  }
423
- if (options.verbose) {
424
- console.log('\nFull Response:');
425
- console.log(JSON.stringify(data, null, 2));
296
+ if (data.capabilities?.length) {
297
+ output.section('Capabilities', data.capabilities.map((c) => c.action).join(', '));
426
298
  }
299
+ console.log();
300
+ output.info('Check session:');
301
+ console.log(` botcha tap status --session-id ${data.session_id}`);
427
302
  }
428
303
  }
429
304
  catch (error) {
305
+ handleError(output, options, 'Session failed', error);
306
+ }
307
+ }
308
+ // ============ STATUS ============
309
+ export async function statusCommand(options) {
310
+ const output = new Output(options);
311
+ const startTime = Date.now();
312
+ try {
313
+ const { url, agentId, appId } = resolveConfig(options, output, { url: true });
314
+ const baseUrl = new URL(url).origin;
315
+ // If session ID given, show that session
316
+ if (options.sessionId) {
317
+ const endpoint = buildUrl(baseUrl, `/v1/sessions/${encodeURIComponent(options.sessionId)}/tap`);
318
+ const response = await fetch(endpoint, { headers: { 'Accept': 'application/json' } });
319
+ const data = await response.json();
320
+ const responseTime = Date.now() - startTime;
321
+ if (!response.ok) {
322
+ if (options.json) {
323
+ output.json({ success: false, error: data.error, message: data.message });
324
+ }
325
+ else {
326
+ output.error(`Session not found: ${data.message || response.statusText}`);
327
+ }
328
+ process.exit(1);
329
+ }
330
+ if (options.json) {
331
+ output.json({ success: true, ...data, responseTimeMs: responseTime });
332
+ return;
333
+ }
334
+ output.header('\nSession Status\n');
335
+ output.section('Session ID', data.session_id);
336
+ output.section('Agent', data.agent_id);
337
+ if (data.intent) {
338
+ const parts = [data.intent.action, data.intent.resource].filter(Boolean);
339
+ output.section('Intent', parts.join(' on '));
340
+ }
341
+ output.section('Created', data.created_at);
342
+ output.section('Expires', data.expires_at);
343
+ if (data.time_remaining != null) {
344
+ const mins = Math.floor(data.time_remaining / 60000);
345
+ const secs = Math.floor((data.time_remaining % 60000) / 1000);
346
+ output.section('Time Left', `${mins}m ${secs}s`);
347
+ }
348
+ return;
349
+ }
350
+ // Otherwise, show overview: agent info + agent list
430
351
  if (options.json) {
431
- output.json({
432
- success: false,
433
- error: error instanceof Error ? error.message : String(error),
434
- });
352
+ const result = { success: true };
353
+ if (agentId) {
354
+ const agentRes = await fetch(buildUrl(baseUrl, `/v1/agents/${encodeURIComponent(agentId)}/tap`), { headers: { 'Accept': 'application/json' } });
355
+ if (agentRes.ok)
356
+ result.agent = await agentRes.json();
357
+ }
358
+ if (appId) {
359
+ const listRes = await fetch(buildUrl(baseUrl, '/v1/agents/tap', appId), { headers: { 'Accept': 'application/json' } });
360
+ if (listRes.ok)
361
+ result.agents = await listRes.json();
362
+ }
363
+ output.json(result);
364
+ return;
365
+ }
366
+ output.header('\nBOTCHA Status\n');
367
+ output.section('URL', url);
368
+ if (appId)
369
+ output.section('App ID', appId);
370
+ // Show default agent
371
+ if (agentId) {
372
+ output.section('Default Agent', agentId);
373
+ try {
374
+ const agentRes = await fetch(buildUrl(baseUrl, `/v1/agents/${encodeURIComponent(agentId)}/tap`), { headers: { 'Accept': 'application/json' } });
375
+ if (agentRes.ok) {
376
+ const agent = await agentRes.json();
377
+ output.section(' Name', agent.name);
378
+ if (agent.capabilities?.length) {
379
+ output.section(' Capabilities', agent.capabilities.map((c) => c.action).join(', '));
380
+ }
381
+ output.section(' Trust Level', agent.trust_level || 'basic');
382
+ }
383
+ }
384
+ catch {
385
+ // Non-fatal
386
+ }
435
387
  }
436
388
  else {
437
- output.error(`Session creation failed: ${error instanceof Error ? error.message : String(error)}`);
389
+ output.warn('No default agent. Register one:');
390
+ console.log(' botcha tap register --name "my-agent" --capabilities browse,search');
391
+ }
392
+ // Show agent count
393
+ if (appId) {
394
+ try {
395
+ const listRes = await fetch(buildUrl(baseUrl, '/v1/agents/tap', appId), { headers: { 'Accept': 'application/json' } });
396
+ if (listRes.ok) {
397
+ const list = await listRes.json();
398
+ console.log();
399
+ output.section('Total Agents', (list.count || 0).toString());
400
+ output.section('TAP Enabled', (list.tap_enabled_count || 0).toString());
401
+ }
402
+ }
403
+ catch {
404
+ // Non-fatal
405
+ }
438
406
  }
439
- process.exit(1);
407
+ console.log();
408
+ }
409
+ catch (error) {
410
+ handleError(output, options, 'Status failed', error);
440
411
  }
441
412
  }
413
+ // ============ EXPORT ============
442
414
  export default {
443
415
  register: registerCommand,
444
416
  get: getCommand,
445
417
  list: listCommand,
446
418
  session: sessionCommand,
419
+ status: statusCommand,
447
420
  };
448
421
  //# sourceMappingURL=tap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tap.js","sourceRoot":"","sources":["../../src/commands/tap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tap.js","sourceRoot":"","sources":["../../src/commands/tap.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -8,12 +8,23 @@ import { solveCommand } from './commands/solve.js';
8
8
  import { benchmarkCommand } from './commands/benchmark.js';
9
9
  import { headersCommand } from './commands/headers.js';
10
10
  import { discoverCommand } from './commands/discover.js';
11
+ import { initCommand } from './commands/init.js';
11
12
  import tapCommand from './commands/tap.js';
12
13
  const program = new Command();
13
14
  program
14
15
  .name('botcha')
15
16
  .description('CLI tool for testing and debugging BOTCHA-protected endpoints')
16
- .version('0.2.1');
17
+ .version('0.3.0');
18
+ // Init command (one-time setup)
19
+ program
20
+ .command('init')
21
+ .description('One-time setup: create an app and save config to ~/.botcha')
22
+ .requiredOption('--email <email>', 'Email for your BOTCHA app')
23
+ .option('--url <url>', 'BOTCHA service URL (default: https://botcha.ai)')
24
+ .option('--json', 'Output as JSON')
25
+ .option('-v, --verbose', 'Show detailed output')
26
+ .option('-q, --quiet', 'Minimal output')
27
+ .action(initCommand);
17
28
  // Test command
18
29
  program
19
30
  .command('test <url>')
@@ -61,48 +72,61 @@ program
61
72
  .option('-v, --verbose', 'Show recommendations')
62
73
  .option('-q, --quiet', 'Minimal output')
63
74
  .action(discoverCommand);
64
- // TAP command (parent with subcommands)
75
+ // ============ TAP COMMANDS ============
76
+ // --url and --app-id are optional (reads from ~/.botcha/config.json)
65
77
  const tap = program
66
78
  .command('tap')
67
79
  .description('Trusted Agent Protocol (TAP) commands');
68
80
  tap.command('register')
69
81
  .description('Register a TAP agent')
70
- .requiredOption('--url <url>', 'BOTCHA service URL')
71
82
  .requiredOption('--name <name>', 'Agent name')
72
- .option('--app-id <id>', 'App ID for authentication')
83
+ .option('--capabilities <list>', 'Comma-separated capabilities (browse,search,purchase)')
73
84
  .option('--operator <operator>', 'Agent operator/organization')
74
85
  .option('--trust-level <level>', 'Trust level (basic, verified, enterprise)')
86
+ .option('--url <url>', 'BOTCHA service URL')
87
+ .option('--app-id <id>', 'App ID')
75
88
  .option('--json', 'Output as JSON')
76
89
  .option('-v, --verbose', 'Show detailed output')
77
90
  .option('-q, --quiet', 'Minimal output')
78
91
  .action(tapCommand.register);
79
92
  tap.command('get')
80
93
  .description('Get TAP agent details')
81
- .requiredOption('--url <url>', 'BOTCHA service URL')
82
- .requiredOption('--agent-id <id>', 'Agent ID')
94
+ .option('--agent-id <id>', 'Agent ID (default: last registered)')
95
+ .option('--url <url>', 'BOTCHA service URL')
83
96
  .option('--json', 'Output as JSON')
84
97
  .option('-v, --verbose', 'Show detailed output')
85
98
  .option('-q, --quiet', 'Minimal output')
86
99
  .action(tapCommand.get);
87
100
  tap.command('list')
88
101
  .description('List TAP agents')
89
- .requiredOption('--url <url>', 'BOTCHA service URL')
90
- .option('--app-id <id>', 'App ID for authentication')
91
102
  .option('--tap-only', 'Only show TAP-enabled agents')
103
+ .option('--url <url>', 'BOTCHA service URL')
104
+ .option('--app-id <id>', 'App ID')
92
105
  .option('--json', 'Output as JSON')
93
106
  .option('-v, --verbose', 'Show detailed output')
94
107
  .option('-q, --quiet', 'Minimal output')
95
108
  .action(tapCommand.list);
96
109
  tap.command('session')
97
110
  .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')
111
+ .option('--action <action>', 'Intent action (browse, search, purchase, etc.)')
112
+ .option('--resource <resource>', 'Intent resource (products, reviews, etc.)')
113
+ .option('--duration <duration>', 'Session duration (1h, 30m, 3600)')
114
+ .option('--intent <json>', 'Raw intent as JSON (alternative to --action/--resource/--duration)')
115
+ .option('--agent-id <id>', 'Agent ID (default: last registered)')
101
116
  .option('--user-context <hash>', 'User context hash')
117
+ .option('--url <url>', 'BOTCHA service URL')
102
118
  .option('--json', 'Output as JSON')
103
119
  .option('-v, --verbose', 'Show detailed output')
104
120
  .option('-q, --quiet', 'Minimal output')
105
121
  .action(tapCommand.session);
122
+ tap.command('status')
123
+ .description('Show current agent, session, and config')
124
+ .option('--session-id <id>', 'Check a specific session')
125
+ .option('--url <url>', 'BOTCHA service URL')
126
+ .option('--json', 'Output as JSON')
127
+ .option('-v, --verbose', 'Show detailed output')
128
+ .option('-q, --quiet', 'Minimal output')
129
+ .action(tapCommand.status);
106
130
  // Parse and execute
107
131
  program.parse();
108
132
  //# 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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface BotchaConfig {
2
+ url: string;
3
+ app_id?: string;
4
+ app_secret?: string;
5
+ agent_id?: string;
6
+ email?: string;
7
+ }
8
+ export declare function loadConfig(): BotchaConfig;
9
+ export declare function saveConfig(config: BotchaConfig): void;
10
+ export declare function configPath(): string;
11
+ /**
12
+ * Resolve a value from: explicit flag > config > undefined
13
+ * Used to make --url and --app-id optional when config exists.
14
+ */
15
+ export declare function resolve(explicit: string | undefined, configValue: string | undefined): string | undefined;
16
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AASD,wBAAgB,UAAU,IAAI,YAAY,CAUzC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAGrD;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEzG"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Persistent config for BOTCHA CLI
3
+ * Stores settings in ~/.botcha/config.json
4
+ */
5
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ import { homedir } from 'node:os';
8
+ const CONFIG_DIR = join(homedir(), '.botcha');
9
+ const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
10
+ const DEFAULT_CONFIG = {
11
+ url: 'https://botcha.ai',
12
+ };
13
+ export function loadConfig() {
14
+ try {
15
+ if (!existsSync(CONFIG_FILE)) {
16
+ return { ...DEFAULT_CONFIG };
17
+ }
18
+ const raw = readFileSync(CONFIG_FILE, 'utf-8');
19
+ return { ...DEFAULT_CONFIG, ...JSON.parse(raw) };
20
+ }
21
+ catch {
22
+ return { ...DEFAULT_CONFIG };
23
+ }
24
+ }
25
+ export function saveConfig(config) {
26
+ mkdirSync(CONFIG_DIR, { recursive: true });
27
+ writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2) + '\n', 'utf-8');
28
+ }
29
+ export function configPath() {
30
+ return CONFIG_FILE;
31
+ }
32
+ /**
33
+ * Resolve a value from: explicit flag > config > undefined
34
+ * Used to make --url and --app-id optional when config exists.
35
+ */
36
+ export function resolve(explicit, configValue) {
37
+ return explicit || configValue;
38
+ }
39
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAUlC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,MAAM,cAAc,GAAiB;IACnC,GAAG,EAAE,mBAAmB;CACzB,CAAC;AAEF,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;QAC/B,CAAC;QACD,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,QAA4B,EAAE,WAA+B;IACnF,OAAO,QAAQ,IAAI,WAAW,CAAC;AACjC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dupecom/botcha-cli",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "CLI tool for testing and debugging BOTCHA-protected endpoints",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",