usepaso 0.3.1 → 0.4.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.
Files changed (70) hide show
  1. package/README.md +29 -9
  2. package/dist/cli.js +42 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/connect.d.ts +4 -0
  5. package/dist/commands/connect.d.ts.map +1 -0
  6. package/dist/commands/connect.js +199 -0
  7. package/dist/commands/connect.js.map +1 -0
  8. package/dist/commands/doctor.d.ts +3 -0
  9. package/dist/commands/doctor.d.ts.map +1 -0
  10. package/dist/commands/doctor.js +134 -0
  11. package/dist/commands/doctor.js.map +1 -0
  12. package/dist/commands/init.d.ts.map +1 -1
  13. package/dist/commands/init.js +177 -11
  14. package/dist/commands/init.js.map +1 -1
  15. package/dist/commands/inspect.d.ts.map +1 -1
  16. package/dist/commands/inspect.js +14 -7
  17. package/dist/commands/inspect.js.map +1 -1
  18. package/dist/commands/serve.d.ts.map +1 -1
  19. package/dist/commands/serve.js +25 -7
  20. package/dist/commands/serve.js.map +1 -1
  21. package/dist/commands/shared.d.ts +2 -1
  22. package/dist/commands/shared.d.ts.map +1 -1
  23. package/dist/commands/shared.js +20 -27
  24. package/dist/commands/shared.js.map +1 -1
  25. package/dist/commands/test.d.ts +0 -1
  26. package/dist/commands/test.d.ts.map +1 -1
  27. package/dist/commands/test.js +63 -39
  28. package/dist/commands/test.js.map +1 -1
  29. package/dist/commands/validate.d.ts.map +1 -1
  30. package/dist/commands/validate.js +44 -3
  31. package/dist/commands/validate.js.map +1 -1
  32. package/dist/executor.d.ts +15 -0
  33. package/dist/executor.d.ts.map +1 -1
  34. package/dist/executor.js +102 -5
  35. package/dist/executor.js.map +1 -1
  36. package/dist/generators/mcp.d.ts +11 -3
  37. package/dist/generators/mcp.d.ts.map +1 -1
  38. package/dist/generators/mcp.js +210 -30
  39. package/dist/generators/mcp.js.map +1 -1
  40. package/dist/index.d.ts +3 -1
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +2 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/openapi.d.ts +1 -1
  45. package/dist/openapi.d.ts.map +1 -1
  46. package/dist/openapi.js +4 -4
  47. package/dist/openapi.js.map +1 -1
  48. package/dist/parser.d.ts.map +1 -1
  49. package/dist/parser.js +15 -0
  50. package/dist/parser.js.map +1 -1
  51. package/dist/utils/coerce.d.ts +2 -0
  52. package/dist/utils/coerce.d.ts.map +1 -0
  53. package/dist/utils/coerce.js +33 -0
  54. package/dist/utils/coerce.js.map +1 -0
  55. package/dist/utils/color.d.ts +19 -0
  56. package/dist/utils/color.d.ts.map +1 -0
  57. package/dist/utils/color.js +46 -0
  58. package/dist/utils/color.js.map +1 -0
  59. package/dist/utils/env.d.ts +17 -0
  60. package/dist/utils/env.d.ts.map +1 -0
  61. package/dist/utils/env.js +73 -0
  62. package/dist/utils/env.js.map +1 -0
  63. package/dist/utils/redact.d.ts +6 -0
  64. package/dist/utils/redact.d.ts.map +1 -0
  65. package/dist/utils/redact.js +37 -0
  66. package/dist/utils/redact.js.map +1 -0
  67. package/dist/validator.d.ts.map +1 -1
  68. package/dist/validator.js +82 -4
  69. package/dist/validator.js.map +1 -1
  70. package/package.json +2 -10
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # usepaso
1
+ # paso
2
2
 
3
- One paso. Every protocol.
3
+ The agent-readiness toolkit for APIs.
4
4
 
5
- Declare your API's agent capabilities once. UsePaso generates the MCP server. No protocol expertise required.
5
+ Declare your API's capabilities once. paso generates the MCP server. No protocol code required.
6
6
 
7
7
  Self-hosted. Open source. Apache 2.0.
8
8
 
@@ -72,22 +72,31 @@ capabilities:
72
72
  description: Item name
73
73
  ```
74
74
 
75
- ## What UsePaso Does With It
75
+ ## What paso Does With It
76
76
 
77
- Each capability becomes an MCP tool. When an agent calls it, UsePaso makes the HTTP request to your API with proper auth, parameters, and error handling.
77
+ Each capability becomes an MCP tool. When an agent calls it, paso makes the HTTP request to your API with proper auth, parameters, and error handling.
78
78
 
79
79
  ## CLI
80
80
 
81
81
  | Command | What it does |
82
82
  |---------|-------------|
83
- | `usepaso init` | Scaffold a `usepaso.yaml` template |
83
+ | `usepaso init` | Scaffold a `usepaso.yaml` template (JSONPlaceholder example) |
84
+ | `usepaso init --blank` | Scaffold a blank template |
84
85
  | `usepaso init --from-openapi` | Generate from an OpenAPI spec |
85
86
  | `usepaso validate` | Check your declaration for errors |
87
+ | `usepaso validate --strict` | Check for best practices (missing constraints, consent) |
86
88
  | `usepaso inspect` | Preview MCP tools that will be generated |
87
89
  | `usepaso test <capability>` | Test a capability against the live API |
88
90
  | `usepaso test --dry-run` | Same thing, minus the consequences |
91
+ | `usepaso test --all --dry-run` | Verify all capabilities resolve correctly |
89
92
  | `usepaso serve` | Start an MCP server (stdio) |
93
+ | `usepaso serve --strict` | Serve with consent gates enforced (two-phase confirmation) |
90
94
  | `usepaso serve --verbose` | Serve with request logging |
95
+ | `usepaso connect <client>` | Wire this server into an MCP client config (claude-desktop, cursor, vscode, windsurf) |
96
+ | `usepaso disconnect <client>` | Remove from an MCP client config |
97
+ | `usepaso doctor` | Check your setup end-to-end |
98
+ | `usepaso completion` | Output shell completion script (bash, zsh, fish) |
99
+ | `usepaso version` | Print the version |
91
100
 
92
101
  ## Programmatic Usage
93
102
 
@@ -96,10 +105,19 @@ import { parseFile, validate, generateMcpServer } from 'usepaso';
96
105
 
97
106
  const decl = parseFile('usepaso.yaml');
98
107
  const errors = validate(decl);
99
- const server = generateMcpServer(decl);
108
+ const { server, toolNames } = generateMcpServer(decl);
100
109
  ```
101
110
 
102
- ## Connect to Claude Desktop
111
+ ## Connect to MCP Clients
112
+
113
+ ```bash
114
+ npx usepaso connect claude-desktop
115
+ npx usepaso connect cursor
116
+ npx usepaso connect vscode
117
+ npx usepaso connect windsurf
118
+ ```
119
+
120
+ Or add manually to your client config:
103
121
 
104
122
  ```json
105
123
  {
@@ -115,7 +133,9 @@ const server = generateMcpServer(decl);
115
133
 
116
134
  ## Links
117
135
 
118
- - [Full documentation](https://github.com/5h1vmani/usepaso)
136
+ - [Documentation](https://usepaso.dev/docs/getting-started/)
137
+ - [Blog](https://usepaso.dev/blog/)
138
+ - [Changelog](https://usepaso.dev/changelog/)
119
139
  - [Spec reference](https://github.com/5h1vmani/usepaso/blob/main/spec/usepaso-spec.md)
120
140
  - [Examples](https://github.com/5h1vmani/usepaso/tree/main/examples)
121
141
  - [Python SDK](https://pypi.org/project/usepaso/)
package/dist/cli.js CHANGED
@@ -7,6 +7,8 @@ const validate_1 = require("./commands/validate");
7
7
  const inspect_1 = require("./commands/inspect");
8
8
  const test_1 = require("./commands/test");
9
9
  const serve_1 = require("./commands/serve");
10
+ const doctor_1 = require("./commands/doctor");
11
+ const connect_1 = require("./commands/connect");
10
12
  // eslint-disable-next-line @typescript-eslint/no-require-imports
11
13
  const { version } = require('../package.json');
12
14
  const program = new commander_1.Command();
@@ -16,5 +18,45 @@ program.name('usepaso').description('Make your API agent-ready in minutes').vers
16
18
  (0, inspect_1.registerInspect)(program);
17
19
  (0, test_1.registerTest)(program);
18
20
  (0, serve_1.registerServe)(program);
21
+ (0, doctor_1.registerDoctor)(program);
22
+ (0, connect_1.registerConnect)(program);
23
+ (0, connect_1.registerDisconnect)(program);
24
+ program
25
+ .command('version')
26
+ .description('Print the usepaso version')
27
+ .action(() => {
28
+ console.log(version);
29
+ });
30
+ program
31
+ .command('completion')
32
+ .description('Output shell completion script')
33
+ .option('--shell <shell>', 'Shell type (bash, zsh, fish)', 'bash')
34
+ .action((opts) => {
35
+ const commands = [
36
+ 'init',
37
+ 'validate',
38
+ 'inspect',
39
+ 'test',
40
+ 'serve',
41
+ 'doctor',
42
+ 'connect',
43
+ 'disconnect',
44
+ 'version',
45
+ 'completion',
46
+ ];
47
+ const cmds = commands.join(' ');
48
+ if (opts.shell === 'zsh') {
49
+ console.log(`#compdef usepaso\n_usepaso() {\n local commands=(${cmds})\n _describe 'command' commands\n}\ncompdef _usepaso usepaso`);
50
+ }
51
+ else if (opts.shell === 'fish') {
52
+ for (const cmd of commands) {
53
+ console.log(`complete -c usepaso -n '__fish_use_subcommand' -a '${cmd}'`);
54
+ }
55
+ }
56
+ else {
57
+ // bash
58
+ console.log(`_usepaso() {\n local cur=\${COMP_WORDS[COMP_CWORD]}\n COMPREPLY=( $(compgen -W "${cmds}" -- "$cur") )\n}\ncomplete -F _usepaso usepaso`);
59
+ }
60
+ });
19
61
  program.parse();
20
62
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAA+C;AAC/C,kDAAuD;AACvD,gDAAqD;AACrD,0CAA+C;AAC/C,4CAAiD;AAEjD,iEAAiE;AACjE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE/C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAC9B,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7F,IAAA,mBAAY,EAAC,OAAO,CAAC,CAAC;AACtB,IAAA,2BAAgB,EAAC,OAAO,CAAC,CAAC;AAC1B,IAAA,yBAAe,EAAC,OAAO,CAAC,CAAC;AACzB,IAAA,mBAAY,EAAC,OAAO,CAAC,CAAC;AACtB,IAAA,qBAAa,EAAC,OAAO,CAAC,CAAC;AAEvB,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAA+C;AAC/C,kDAAuD;AACvD,gDAAqD;AACrD,0CAA+C;AAC/C,4CAAiD;AACjD,8CAAmD;AACnD,gDAAyE;AAEzE,iEAAiE;AACjE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE/C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAC9B,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7F,IAAA,mBAAY,EAAC,OAAO,CAAC,CAAC;AACtB,IAAA,2BAAgB,EAAC,OAAO,CAAC,CAAC;AAC1B,IAAA,yBAAe,EAAC,OAAO,CAAC,CAAC;AACzB,IAAA,mBAAY,EAAC,OAAO,CAAC,CAAC;AACtB,IAAA,qBAAa,EAAC,OAAO,CAAC,CAAC;AACvB,IAAA,uBAAc,EAAC,OAAO,CAAC,CAAC;AACxB,IAAA,yBAAe,EAAC,OAAO,CAAC,CAAC;AACzB,IAAA,4BAAkB,EAAC,OAAO,CAAC,CAAC;AAE5B,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,GAAG,EAAE;IACX,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,YAAY,CAAC;KACrB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,EAAE,MAAM,CAAC;KACjE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IACf,MAAM,QAAQ,GAAG;QACf,MAAM;QACN,UAAU;QACV,SAAS;QACT,MAAM;QACN,OAAO;QACP,QAAQ;QACR,SAAS;QACT,YAAY;QACZ,SAAS;QACT,YAAY;KACb,CAAC;IACF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CACT,qDAAqD,IAAI,gEAAgE,CAC1H,CAAC;IACJ,CAAC;SAAM,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;QACjC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,sDAAsD,GAAG,GAAG,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO;QACP,OAAO,CAAC,GAAG,CACT,qFAAqF,IAAI,iDAAiD,CAC3I,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerConnect(program: Command): void;
3
+ export declare function registerDisconnect(program: Command): void;
4
+ //# sourceMappingURL=connect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+IpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwDtD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+CzD"}
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerConnect = registerConnect;
4
+ exports.registerDisconnect = registerDisconnect;
5
+ const path_1 = require("path");
6
+ const fs_1 = require("fs");
7
+ const os_1 = require("os");
8
+ const shared_1 = require("./shared");
9
+ const color_1 = require("../utils/color");
10
+ const env_1 = require("../utils/env");
11
+ const CLIENTS = ['claude-desktop', 'cursor', 'vscode', 'windsurf'];
12
+ function resolveClientConfig(client) {
13
+ const home = (0, os_1.homedir)();
14
+ const platform = process.platform;
15
+ switch (client) {
16
+ case 'claude-desktop': {
17
+ let configDir;
18
+ if (platform === 'win32') {
19
+ configDir = (0, path_1.join)(process.env.APPDATA || (0, path_1.join)(home, 'AppData', 'Roaming'), 'Claude');
20
+ }
21
+ else if (platform === 'darwin') {
22
+ configDir = (0, path_1.join)(home, 'Library', 'Application Support', 'Claude');
23
+ }
24
+ else {
25
+ configDir = (0, path_1.join)(home, '.config', 'Claude');
26
+ }
27
+ return {
28
+ configPath: (0, path_1.join)(configDir, 'claude_desktop_config.json'),
29
+ wrapInMcpServers: true,
30
+ useAbsolutePath: true,
31
+ displayName: 'Claude Desktop',
32
+ restartHint: 'Restart Claude Desktop to connect.',
33
+ };
34
+ }
35
+ case 'cursor':
36
+ return {
37
+ configPath: (0, path_1.resolve)('.cursor', 'mcp.json'),
38
+ wrapInMcpServers: true,
39
+ useAbsolutePath: false,
40
+ displayName: 'Cursor',
41
+ restartHint: 'Restart Cursor to connect.',
42
+ };
43
+ case 'vscode':
44
+ return {
45
+ configPath: (0, path_1.resolve)('.vscode', 'mcp.json'),
46
+ wrapInMcpServers: false,
47
+ useAbsolutePath: false,
48
+ displayName: 'VS Code',
49
+ restartHint: 'Reload VS Code to connect.',
50
+ };
51
+ case 'windsurf': {
52
+ let configDir;
53
+ if (platform === 'win32') {
54
+ configDir = (0, path_1.join)(process.env.APPDATA || (0, path_1.join)(home, 'AppData', 'Roaming'), 'Codeium', 'Windsurf');
55
+ }
56
+ else {
57
+ configDir = (0, path_1.join)(home, '.codeium', 'windsurf');
58
+ }
59
+ return {
60
+ configPath: (0, path_1.join)(configDir, 'mcp_config.json'),
61
+ wrapInMcpServers: true,
62
+ useAbsolutePath: false,
63
+ displayName: 'Windsurf',
64
+ restartHint: 'Restart Windsurf to connect.',
65
+ };
66
+ }
67
+ default:
68
+ throw new Error(`Unknown client: "${client}"`);
69
+ }
70
+ }
71
+ function buildEntry(yamlPath, hasToken, useAbsolutePath) {
72
+ // IDE clients (Cursor, VS Code, Windsurf) run from the project root.
73
+ // Use bare "usepaso serve" so the config is portable across machines.
74
+ // Claude Desktop doesn't set CWD, so it needs the absolute path.
75
+ const args = useAbsolutePath
76
+ ? ['usepaso', 'serve', '-f', (0, path_1.resolve)(yamlPath)]
77
+ : ['usepaso', 'serve'];
78
+ const entry = { command: 'npx', args };
79
+ if (!hasToken) {
80
+ entry.env = { USEPASO_AUTH_TOKEN: 'your-token' };
81
+ }
82
+ return entry;
83
+ }
84
+ function readJsonFile(path) {
85
+ if (!(0, fs_1.existsSync)(path))
86
+ return {};
87
+ const raw = (0, fs_1.readFileSync)(path, 'utf-8');
88
+ try {
89
+ return JSON.parse(raw);
90
+ }
91
+ catch (err) {
92
+ throw new Error(`Failed to parse ${path}: ${err instanceof Error ? err.message : err}\nFix the JSON manually or delete the file and try again.`, { cause: err });
93
+ }
94
+ }
95
+ function getServers(config, clientConfig) {
96
+ if (clientConfig.wrapInMcpServers) {
97
+ if (!config.mcpServers || typeof config.mcpServers !== 'object') {
98
+ config.mcpServers = {};
99
+ }
100
+ return config.mcpServers;
101
+ }
102
+ if (!config.servers || typeof config.servers !== 'object') {
103
+ config.servers = {};
104
+ }
105
+ return config.servers;
106
+ }
107
+ function writeConfig(configPath, config) {
108
+ const configDir = (0, path_1.dirname)(configPath);
109
+ if (!(0, fs_1.existsSync)(configDir)) {
110
+ (0, fs_1.mkdirSync)(configDir, { recursive: true });
111
+ }
112
+ (0, fs_1.writeFileSync)(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
113
+ }
114
+ function validateClient(client) {
115
+ if (!CLIENTS.includes(client)) {
116
+ throw new Error(`Unknown client: "${client}". Supported clients: ${CLIENTS.join(', ')}`);
117
+ }
118
+ return client;
119
+ }
120
+ function registerConnect(program) {
121
+ program
122
+ .command('connect')
123
+ .description('Add this server to an MCP client config')
124
+ .argument('<client>', `Client to configure (${CLIENTS.join(', ')})`)
125
+ .option('-f, --file <path>', 'Path to usepaso.yaml', 'usepaso.yaml')
126
+ .option('--env <path>', 'Path to .env file (default: .env next to usepaso.yaml)')
127
+ .option('--force', 'Overwrite existing entry for this service')
128
+ .action((client, opts) => {
129
+ try {
130
+ const validClient = validateClient(client);
131
+ const filePath = (0, path_1.resolve)(opts.file);
132
+ const decl = (0, shared_1.loadAndValidate)(filePath);
133
+ // Load .env so we can detect whether a token is available
134
+ (0, env_1.loadEnvFile)(filePath, opts.env);
135
+ const hasToken = !!process.env.USEPASO_AUTH_TOKEN;
136
+ const slug = (0, shared_1.slugify)(decl.service.name);
137
+ const clientConfig = resolveClientConfig(validClient);
138
+ const existing = readJsonFile(clientConfig.configPath);
139
+ const entry = buildEntry(filePath, hasToken, clientConfig.useAbsolutePath);
140
+ const servers = getServers(existing, clientConfig);
141
+ if (servers[slug] && !opts.force) {
142
+ throw new Error(`Entry "${slug}" already exists in ${clientConfig.displayName} config. Use --force to overwrite.`);
143
+ }
144
+ const isUpdate = !!servers[slug];
145
+ servers[slug] = entry;
146
+ writeConfig(clientConfig.configPath, existing);
147
+ const verb = isUpdate ? 'Updated' : 'Added';
148
+ console.log(`${(0, color_1.green)(verb)} "${(0, color_1.cyan)(decl.service.name)}" in ${clientConfig.displayName} config.`);
149
+ console.log((0, color_1.dim)(` Config: ${clientConfig.configPath}`));
150
+ if (!hasToken) {
151
+ console.log('');
152
+ console.log((0, color_1.yellow)('Note: No auth token found. Set USEPASO_AUTH_TOKEN in .env or your environment.'));
153
+ }
154
+ console.log('');
155
+ console.log(clientConfig.restartHint);
156
+ }
157
+ catch (err) {
158
+ console.error((0, color_1.red)(err instanceof Error ? err.message : String(err)));
159
+ process.exit(1);
160
+ }
161
+ });
162
+ }
163
+ function registerDisconnect(program) {
164
+ program
165
+ .command('disconnect')
166
+ .description('Remove this server from an MCP client config')
167
+ .argument('<client>', `Client to update (${CLIENTS.join(', ')})`)
168
+ .option('-f, --file <path>', 'Path to usepaso.yaml', 'usepaso.yaml')
169
+ .action((client, opts) => {
170
+ try {
171
+ const validClient = validateClient(client);
172
+ const filePath = (0, path_1.resolve)(opts.file);
173
+ const decl = (0, shared_1.loadAndValidate)(filePath);
174
+ const slug = (0, shared_1.slugify)(decl.service.name);
175
+ const clientConfig = resolveClientConfig(validClient);
176
+ if (!(0, fs_1.existsSync)(clientConfig.configPath)) {
177
+ console.log((0, color_1.dim)(`No config file found at ${clientConfig.configPath}. Nothing to remove.`));
178
+ return;
179
+ }
180
+ const existing = readJsonFile(clientConfig.configPath);
181
+ const servers = getServers(existing, clientConfig);
182
+ if (!servers[slug]) {
183
+ console.log((0, color_1.dim)(`Entry "${slug}" not found in ${clientConfig.displayName} config. Nothing to remove.`));
184
+ return;
185
+ }
186
+ delete servers[slug];
187
+ writeConfig(clientConfig.configPath, existing);
188
+ console.log(`${(0, color_1.green)('Removed')} "${(0, color_1.cyan)(decl.service.name)}" from ${clientConfig.displayName} config.`);
189
+ console.log((0, color_1.dim)(` Config: ${clientConfig.configPath}`));
190
+ console.log('');
191
+ console.log(clientConfig.restartHint);
192
+ }
193
+ catch (err) {
194
+ console.error((0, color_1.red)(err instanceof Error ? err.message : String(err)));
195
+ process.exit(1);
196
+ }
197
+ });
198
+ }
199
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerDoctor(program: Command): void;
3
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4HrD"}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerDoctor = registerDoctor;
4
+ const path_1 = require("path");
5
+ const fs_1 = require("fs");
6
+ const parser_1 = require("../parser");
7
+ const validator_1 = require("../validator");
8
+ const color_1 = require("../utils/color");
9
+ const env_1 = require("../utils/env");
10
+ function registerDoctor(program) {
11
+ program
12
+ .command('doctor')
13
+ .description('Check your usepaso setup for common issues')
14
+ .option('-f, --file <path>', 'Path to usepaso.yaml', 'usepaso.yaml')
15
+ .option('--env <path>', 'Path to .env file (default: .env next to usepaso.yaml)')
16
+ .action(async (opts) => {
17
+ const filePath = (0, path_1.resolve)(opts.file);
18
+ let failed = 0;
19
+ function ok(label, detail) {
20
+ const suffix = detail ? ` ${(0, color_1.dim)(`(${detail})`)}` : '';
21
+ console.log(` ${(0, color_1.green)('ok')} ${label}${suffix}`);
22
+ }
23
+ function fail(label, hint) {
24
+ console.log(` ${(0, color_1.red)('FAIL')} ${label}`);
25
+ console.log(` ${(0, color_1.dim)('│')} ${(0, color_1.dim)(hint)}`);
26
+ failed++;
27
+ }
28
+ console.log('');
29
+ console.log((0, color_1.cyan)('usepaso doctor'));
30
+ console.log('');
31
+ // 1. File exists
32
+ if (!(0, fs_1.existsSync)(filePath)) {
33
+ fail('usepaso.yaml found', `Run usepaso init to create one.`);
34
+ console.log('');
35
+ console.log(`${failed} check failed.`);
36
+ process.exit(1);
37
+ }
38
+ ok('usepaso.yaml found');
39
+ // 2. YAML parses
40
+ let decl;
41
+ try {
42
+ decl = (0, parser_1.parseFile)(filePath);
43
+ ok('YAML parses correctly');
44
+ }
45
+ catch (err) {
46
+ fail('YAML parses correctly', err instanceof Error ? err.message : String(err));
47
+ console.log('');
48
+ console.log(`${failed} check(s) failed.`);
49
+ process.exit(1);
50
+ }
51
+ // 3. Validation
52
+ const results = (0, validator_1.validate)(decl);
53
+ const errors = results.filter((e) => e.level !== 'warning');
54
+ const warnings = results.filter((e) => e.level === 'warning');
55
+ if (errors.length > 0) {
56
+ fail('Validation passes', `${errors.length} error(s). Run usepaso validate for details.`);
57
+ }
58
+ else {
59
+ const warnSuffix = warnings.length > 0 ? `, ${warnings.length} warning(s)` : '';
60
+ ok('Validation passes', `${decl.capabilities.length} capabilities${warnSuffix}`);
61
+ }
62
+ // 4. .env file
63
+ const dir = (0, path_1.dirname)(filePath);
64
+ const envPath = opts.env || (0, path_1.join)(dir, '.env');
65
+ if ((0, fs_1.existsSync)(envPath)) {
66
+ (0, env_1.loadEnvFile)(filePath, opts.env);
67
+ ok('.env file found', opts.env ? envPath : undefined);
68
+ if ((0, env_1.isEnvTrackedByGit)((0, path_1.dirname)(envPath))) {
69
+ console.log(` ${(0, color_1.yellow)('WARN')} .env is tracked by git. Run: git rm --cached .env`);
70
+ }
71
+ // Check file permissions on Unix (skip on Windows)
72
+ if (process.platform !== 'win32') {
73
+ try {
74
+ const mode = (0, fs_1.statSync)(envPath).mode;
75
+ const othersRead = mode & 0o004;
76
+ if (othersRead) {
77
+ console.log(` ${(0, color_1.yellow)('WARN')} .env is world-readable. Run: chmod 600 .env`);
78
+ }
79
+ }
80
+ catch {
81
+ // Ignore stat errors
82
+ }
83
+ }
84
+ }
85
+ else {
86
+ ok('.env file', 'not found, using environment variables');
87
+ }
88
+ // 5. Auth token
89
+ const authType = decl.service?.auth?.type;
90
+ const token = process.env.USEPASO_AUTH_TOKEN;
91
+ if (authType && authType !== 'none') {
92
+ if (token) {
93
+ if (token === '') {
94
+ fail('USEPASO_AUTH_TOKEN set', 'Token is empty. Set a valid token.');
95
+ }
96
+ else {
97
+ ok('USEPASO_AUTH_TOKEN set');
98
+ }
99
+ }
100
+ else {
101
+ fail('USEPASO_AUTH_TOKEN set', 'Set it with: export USEPASO_AUTH_TOKEN=your-token');
102
+ }
103
+ }
104
+ else {
105
+ ok('Auth', 'type is "none", no token needed');
106
+ }
107
+ // 6. Base URL reachable
108
+ const baseUrl = decl.service?.base_url;
109
+ if (baseUrl) {
110
+ try {
111
+ const start = Date.now();
112
+ await fetch(baseUrl, {
113
+ method: 'HEAD',
114
+ signal: AbortSignal.timeout(5000),
115
+ });
116
+ const ms = Date.now() - start;
117
+ ok('Base URL reachable', `${baseUrl}, ${ms}ms`);
118
+ }
119
+ catch {
120
+ fail('Base URL reachable', `Could not reach ${baseUrl}. Check the URL and your network.`);
121
+ }
122
+ }
123
+ console.log('');
124
+ console.log((0, color_1.dim)('─'.repeat(40)));
125
+ if (failed === 0) {
126
+ console.log((0, color_1.green)('All checks passed.'));
127
+ }
128
+ else {
129
+ console.log(`${(0, color_1.red)(String(failed))} check(s) failed.`);
130
+ process.exit(1);
131
+ }
132
+ });
133
+ }
134
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwEnD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4HpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwJnD"}