tuningengines-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 +206 -0
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +22 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +67 -3
- package/dist/client.js.map +1 -1
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +142 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/billing.d.ts.map +1 -1
- package/dist/commands/billing.js +33 -2
- package/dist/commands/billing.js.map +1 -1
- package/dist/commands/jobs.d.ts.map +1 -1
- package/dist/commands/jobs.js +58 -10
- package/dist/commands/jobs.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +20 -2
- package/dist/config.js.map +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +194 -11
- package/dist/mcp.js.map +1 -1
- package/dist/output.d.ts +2 -0
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +13 -1
- package/dist/output.js.map +1 -1
- package/package.json +13 -4
package/README.md
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# Tuning Engines CLI & MCP Server
|
|
2
|
+
|
|
3
|
+
Fine-tune large language models from your terminal or AI assistant. Train custom models on your code repositories with a single command.
|
|
4
|
+
|
|
5
|
+
**[Tuning Engines](https://tuningengines.com)** is a managed fine-tuning platform that handles GPU infrastructure, training orchestration, billing, and model storage — so you can focus on building better models.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **Browser-based auth** — `te auth login` opens your browser to sign up or log in (like `gh auth login`)
|
|
10
|
+
- **Full training lifecycle** — create, monitor, cancel, and retry fine-tuning jobs
|
|
11
|
+
- **Model management** — list, import, export, and delete your trained models
|
|
12
|
+
- **Cost estimation** — get estimates before committing to a training run
|
|
13
|
+
- **S3 integration** — validate credentials and export models to your own S3 buckets
|
|
14
|
+
- **MCP server** — 18 tools for AI assistants (Claude, ChatGPT, Cursor, VS Code Copilot, etc.)
|
|
15
|
+
- **Billing** — check balance, open browser to add credits
|
|
16
|
+
|
|
17
|
+
## Quick Start
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install -g tuningengines-cli
|
|
21
|
+
|
|
22
|
+
# Sign up or log in (opens browser)
|
|
23
|
+
te auth login
|
|
24
|
+
|
|
25
|
+
# Check your balance
|
|
26
|
+
te billing show
|
|
27
|
+
|
|
28
|
+
# Estimate cost for a training job
|
|
29
|
+
te jobs estimate --base-model meta-llama/Llama-3.1-8B --repo-url https://github.com/you/repo
|
|
30
|
+
|
|
31
|
+
# Create a training job
|
|
32
|
+
te jobs create --base-model meta-llama/Llama-3.1-8B \
|
|
33
|
+
--repo-url https://github.com/you/repo \
|
|
34
|
+
--output-name my-model
|
|
35
|
+
|
|
36
|
+
# Watch training progress
|
|
37
|
+
te jobs status <job-id> --watch
|
|
38
|
+
|
|
39
|
+
# List your trained models
|
|
40
|
+
te models list
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## MCP Server Setup
|
|
44
|
+
|
|
45
|
+
The CLI includes a built-in MCP server with 18 tools for AI-powered fine-tuning workflows.
|
|
46
|
+
|
|
47
|
+
### Claude Desktop
|
|
48
|
+
|
|
49
|
+
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"mcpServers": {
|
|
54
|
+
"tuning-engines": {
|
|
55
|
+
"command": "npx",
|
|
56
|
+
"args": ["-y", "tuningengines-cli", "mcp", "serve"],
|
|
57
|
+
"env": {
|
|
58
|
+
"TE_API_KEY": "te_your_key_here"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Claude Code
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
claude mcp add tuning-engines -- npx -y tuningengines-cli mcp serve
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### VS Code / Cursor / Windsurf
|
|
72
|
+
|
|
73
|
+
Add to your MCP settings (`.vscode/mcp.json` or equivalent):
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"servers": {
|
|
78
|
+
"tuning-engines": {
|
|
79
|
+
"command": "npx",
|
|
80
|
+
"args": ["-y", "tuningengines-cli", "mcp", "serve"],
|
|
81
|
+
"env": {
|
|
82
|
+
"TE_API_KEY": "te_your_key_here"
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### ChatGPT
|
|
90
|
+
|
|
91
|
+
ChatGPT supports remote MCP servers. Add via Settings > Connectors with the Tuning Engines MCP URL.
|
|
92
|
+
|
|
93
|
+
## CLI Commands
|
|
94
|
+
|
|
95
|
+
### Authentication
|
|
96
|
+
|
|
97
|
+
| Command | Description |
|
|
98
|
+
|---------|-------------|
|
|
99
|
+
| `te auth login` | Sign up or log in via browser |
|
|
100
|
+
| `te auth logout` | Clear saved credentials |
|
|
101
|
+
| `te auth status` | Show current auth status |
|
|
102
|
+
|
|
103
|
+
### Training Jobs
|
|
104
|
+
|
|
105
|
+
| Command | Description |
|
|
106
|
+
|---------|-------------|
|
|
107
|
+
| `te jobs list` | List all training jobs |
|
|
108
|
+
| `te jobs show <id>` | Show job details |
|
|
109
|
+
| `te jobs create` | Submit a new training job |
|
|
110
|
+
| `te jobs status <id>` | Live job status (supports `--watch`) |
|
|
111
|
+
| `te jobs cancel <id>` | Cancel a running job |
|
|
112
|
+
| `te jobs retry <id>` | Retry from last checkpoint |
|
|
113
|
+
| `te jobs estimate` | Get cost estimate |
|
|
114
|
+
| `te jobs validate-s3` | Pre-validate S3 credentials |
|
|
115
|
+
|
|
116
|
+
### Models
|
|
117
|
+
|
|
118
|
+
| Command | Description |
|
|
119
|
+
|---------|-------------|
|
|
120
|
+
| `te models list` | List your trained models |
|
|
121
|
+
| `te models show <id>` | Show model details |
|
|
122
|
+
| `te models base` | List supported base models |
|
|
123
|
+
| `te models import` | Import a model from S3 |
|
|
124
|
+
| `te models export <id>` | Export a model to S3 |
|
|
125
|
+
| `te models delete <id>` | Delete a model |
|
|
126
|
+
| `te models status <id>` | Check import/export status |
|
|
127
|
+
|
|
128
|
+
### Billing & Account
|
|
129
|
+
|
|
130
|
+
| Command | Description |
|
|
131
|
+
|---------|-------------|
|
|
132
|
+
| `te billing show` | Show balance and transactions |
|
|
133
|
+
| `te billing add-credits` | Open browser to add credits |
|
|
134
|
+
| `te account` | Show account info |
|
|
135
|
+
|
|
136
|
+
### Configuration
|
|
137
|
+
|
|
138
|
+
| Command | Description |
|
|
139
|
+
|---------|-------------|
|
|
140
|
+
| `te config set-token <key>` | Set API key manually |
|
|
141
|
+
| `te config set-url <url>` | Override API URL |
|
|
142
|
+
| `te config show` | Show current config |
|
|
143
|
+
|
|
144
|
+
All commands support `--json` for machine-readable output.
|
|
145
|
+
|
|
146
|
+
## MCP Tools
|
|
147
|
+
|
|
148
|
+
The MCP server exposes these tools for AI assistants:
|
|
149
|
+
|
|
150
|
+
| Tool | Description |
|
|
151
|
+
|------|-------------|
|
|
152
|
+
| `list_jobs` | List training jobs with optional status filter |
|
|
153
|
+
| `show_job` | Get details of a specific training job |
|
|
154
|
+
| `create_job` | Submit a new fine-tuning job (supports `agent`, `quality_tier`) |
|
|
155
|
+
| `cancel_job` | Cancel a running or queued job |
|
|
156
|
+
| `job_status` | Get live status with GPU usage and charges |
|
|
157
|
+
| `retry_job` | Retry a failed job from its last checkpoint |
|
|
158
|
+
| `estimate_job` | Get cost estimate before submitting |
|
|
159
|
+
| `validate_s3` | Validate S3 credentials before job submission |
|
|
160
|
+
| `list_models` | List your trained and imported models |
|
|
161
|
+
| `show_model` | Get details of a specific model |
|
|
162
|
+
| `delete_model` | Delete a model from cloud storage |
|
|
163
|
+
| `import_model` | Import a model from S3 |
|
|
164
|
+
| `export_model` | Export a model to S3 |
|
|
165
|
+
| `model_status` | Check model import/export status |
|
|
166
|
+
| `list_supported_models` | List available base models for fine-tuning |
|
|
167
|
+
| `get_balance` | Check account balance and transactions |
|
|
168
|
+
| `get_account` | Get account information |
|
|
169
|
+
|
|
170
|
+
### Example Prompts
|
|
171
|
+
|
|
172
|
+
- "Fine-tune Llama 3.1 8B on my-org/my-repo and name it custom-model"
|
|
173
|
+
- "How much would 3 epochs of training cost for an 8B model?"
|
|
174
|
+
- "What's the status of my latest training job?"
|
|
175
|
+
- "Show my account balance"
|
|
176
|
+
- "List all my trained models"
|
|
177
|
+
- "Export my model to s3://my-bucket/models/"
|
|
178
|
+
|
|
179
|
+
## Environment Variables
|
|
180
|
+
|
|
181
|
+
| Variable | Description |
|
|
182
|
+
|----------|-------------|
|
|
183
|
+
| `TE_API_KEY` | API key (overrides config file) |
|
|
184
|
+
| `TE_API_URL` | API URL (default: `https://app.tuningengines.com`) |
|
|
185
|
+
|
|
186
|
+
## Authentication
|
|
187
|
+
|
|
188
|
+
`te auth login` uses a secure device authorization flow:
|
|
189
|
+
|
|
190
|
+
1. CLI generates a device code and opens your browser
|
|
191
|
+
2. You sign up or log in (email, Google, or GitHub)
|
|
192
|
+
3. Click "Authorize" to grant CLI access
|
|
193
|
+
4. Token flows back to CLI automatically — no copy-paste needed
|
|
194
|
+
|
|
195
|
+
Token is saved to `~/.tuningengines/config.json` with `0600` permissions.
|
|
196
|
+
|
|
197
|
+
## Links
|
|
198
|
+
|
|
199
|
+
- [Website](https://tuningengines.com)
|
|
200
|
+
- [Documentation](https://tuningengines.com)
|
|
201
|
+
- [GitHub](https://github.com/ockhamlabs/tuning-engines-cli)
|
|
202
|
+
- [npm](https://www.npmjs.com/package/tuningengines-cli)
|
|
203
|
+
|
|
204
|
+
## License
|
|
205
|
+
|
|
206
|
+
MIT
|
package/dist/cli.js
CHANGED
|
@@ -42,11 +42,12 @@ const jobs_1 = require("./commands/jobs");
|
|
|
42
42
|
const models_1 = require("./commands/models");
|
|
43
43
|
const billing_1 = require("./commands/billing");
|
|
44
44
|
const account_1 = require("./commands/account");
|
|
45
|
+
const auth_1 = require("./commands/auth");
|
|
45
46
|
const program = new commander_1.Command();
|
|
46
47
|
program
|
|
47
48
|
.name("te")
|
|
48
49
|
.description("Tuning Engines CLI — fine-tune LLMs from your terminal")
|
|
49
|
-
.version("0.
|
|
50
|
+
.version("0.2.0");
|
|
50
51
|
// Lazy client initialization (only when a command actually needs it)
|
|
51
52
|
const getClient = () => {
|
|
52
53
|
return new client_1.TuningEnginesClient({
|
|
@@ -55,6 +56,7 @@ const getClient = () => {
|
|
|
55
56
|
});
|
|
56
57
|
};
|
|
57
58
|
// Register all command groups
|
|
59
|
+
(0, auth_1.registerAuthCommands)(program);
|
|
58
60
|
(0, config_2.registerConfigCommands)(program);
|
|
59
61
|
(0, jobs_1.registerJobCommands)(program, getClient);
|
|
60
62
|
(0, models_1.registerModelCommands)(program, getClient);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,qCAA+C;AAC/C,qCAAgD;AAChD,8CAA2D;AAC3D,0CAAsD;AACtD,8CAA0D;AAC1D,gDAA6D;AAC7D,gDAA6D;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,qCAA+C;AAC/C,qCAAgD;AAChD,8CAA2D;AAC3D,0CAAsD;AACtD,8CAA0D;AAC1D,gDAA6D;AAC7D,gDAA6D;AAC7D,0CAAuD;AAEvD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,wDAAwD,CAAC;KACrE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,qEAAqE;AACrE,MAAM,SAAS,GAAG,GAAwB,EAAE;IAC1C,OAAO,IAAI,4BAAmB,CAAC;QAC7B,MAAM,EAAE,IAAA,kBAAS,GAAE;QACnB,MAAM,EAAE,IAAA,kBAAS,GAAE;KACpB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,8BAA8B;AAC9B,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,+BAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,0BAAmB,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACxC,IAAA,8BAAqB,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC1C,IAAA,iCAAuB,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC5C,IAAA,iCAAuB,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAE5C,wBAAwB;AACxB,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,yCAAyC,CAAC;KACtD,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,wEAAwE;IACxE,MAAM,EAAE,cAAc,EAAE,GAAG,wDAAa,OAAO,GAAC,CAAC;IACjD,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/client.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export declare class TuningEnginesClient {
|
|
|
17
17
|
}): Promise<any>;
|
|
18
18
|
getJob(jobId: string): Promise<any>;
|
|
19
19
|
createJob(params: {
|
|
20
|
-
base_model
|
|
20
|
+
base_model?: string;
|
|
21
21
|
output_name: string;
|
|
22
22
|
repo_url?: string;
|
|
23
23
|
branch?: string;
|
|
@@ -29,12 +29,14 @@ export declare class TuningEnginesClient {
|
|
|
29
29
|
s3_access_key_id?: string;
|
|
30
30
|
s3_secret_access_key?: string;
|
|
31
31
|
s3_region?: string;
|
|
32
|
+
agent?: string;
|
|
33
|
+
quality_tier?: string;
|
|
32
34
|
}): Promise<any>;
|
|
33
35
|
cancelJob(jobId: string): Promise<any>;
|
|
34
36
|
getJobStatus(jobId: string): Promise<any>;
|
|
35
|
-
retryJob(jobId: string): Promise<any>;
|
|
37
|
+
retryJob(jobId: string, githubToken?: string): Promise<any>;
|
|
36
38
|
estimateJob(params: {
|
|
37
|
-
base_model
|
|
39
|
+
base_model?: string;
|
|
38
40
|
num_epochs?: number;
|
|
39
41
|
max_examples?: number;
|
|
40
42
|
repo_size_mb?: number;
|
|
@@ -60,9 +62,26 @@ export declare class TuningEnginesClient {
|
|
|
60
62
|
s3_region: string;
|
|
61
63
|
delete_after?: boolean;
|
|
62
64
|
}): Promise<any>;
|
|
65
|
+
validateS3(params: {
|
|
66
|
+
s3_bucket: string;
|
|
67
|
+
s3_access_key_id: string;
|
|
68
|
+
s3_secret_access_key: string;
|
|
69
|
+
s3_region: string;
|
|
70
|
+
}): Promise<any>;
|
|
63
71
|
listModels(): Promise<any>;
|
|
64
72
|
getBilling(): Promise<any>;
|
|
65
73
|
getAccount(): Promise<any>;
|
|
74
|
+
static createDeviceSession(apiUrl: string): Promise<{
|
|
75
|
+
device_code: string;
|
|
76
|
+
verification_url: string;
|
|
77
|
+
expires_in: number;
|
|
78
|
+
poll_interval: number;
|
|
79
|
+
}>;
|
|
80
|
+
static pollDeviceSession(apiUrl: string, deviceCode: string): Promise<{
|
|
81
|
+
status: string;
|
|
82
|
+
api_token?: string;
|
|
83
|
+
}>;
|
|
84
|
+
private static requestNoAuth;
|
|
66
85
|
private request;
|
|
67
86
|
}
|
|
68
87
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,aAAa;IAO5B,QAAQ,CAAC,OAAO,CAAC,EAAE;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,GAAG,CAAC;IASV,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAInC,SAAS,CAAC,MAAM,EAAE;QACtB,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -68,8 +68,11 @@ class TuningEnginesClient {
|
|
|
68
68
|
async getJobStatus(jobId) {
|
|
69
69
|
return this.request("GET", `/api/v1/jobs/${jobId}/status`);
|
|
70
70
|
}
|
|
71
|
-
async retryJob(jobId) {
|
|
72
|
-
|
|
71
|
+
async retryJob(jobId, githubToken) {
|
|
72
|
+
const body = {};
|
|
73
|
+
if (githubToken)
|
|
74
|
+
body.github_token = githubToken;
|
|
75
|
+
return this.request("POST", `/api/v1/jobs/${jobId}/retry`, Object.keys(body).length ? body : undefined);
|
|
73
76
|
}
|
|
74
77
|
async estimateJob(params) {
|
|
75
78
|
return this.request("POST", "/api/v1/jobs/estimate", params);
|
|
@@ -93,6 +96,10 @@ class TuningEnginesClient {
|
|
|
93
96
|
async exportModel(modelId, params) {
|
|
94
97
|
return this.request("POST", `/api/v1/user_models/${modelId}/export`, params);
|
|
95
98
|
}
|
|
99
|
+
// --- S3 Validation ---
|
|
100
|
+
async validateS3(params) {
|
|
101
|
+
return this.request("POST", "/api/v1/jobs/validate_s3", params);
|
|
102
|
+
}
|
|
96
103
|
// --- Supported Models ---
|
|
97
104
|
async listModels() {
|
|
98
105
|
return this.request("GET", "/api/v1/models");
|
|
@@ -105,6 +112,63 @@ class TuningEnginesClient {
|
|
|
105
112
|
async getAccount() {
|
|
106
113
|
return this.request("GET", "/api/v1/account");
|
|
107
114
|
}
|
|
115
|
+
// --- Device Auth (unauthenticated) ---
|
|
116
|
+
static async createDeviceSession(apiUrl) {
|
|
117
|
+
return TuningEnginesClient.requestNoAuth(apiUrl, "POST", "/api/v1/auth/device");
|
|
118
|
+
}
|
|
119
|
+
static async pollDeviceSession(apiUrl, deviceCode) {
|
|
120
|
+
return TuningEnginesClient.requestNoAuth(apiUrl, "GET", `/api/v1/auth/device/poll?device_code=${encodeURIComponent(deviceCode)}`);
|
|
121
|
+
}
|
|
122
|
+
static requestNoAuth(apiUrl, method, path, body) {
|
|
123
|
+
return new Promise((resolve, reject) => {
|
|
124
|
+
const baseUrl = apiUrl.replace(/\/$/, "");
|
|
125
|
+
const url = new url_1.URL(path, baseUrl);
|
|
126
|
+
const isHttps = url.protocol === "https:";
|
|
127
|
+
const transport = isHttps ? https : http;
|
|
128
|
+
const options = {
|
|
129
|
+
hostname: url.hostname,
|
|
130
|
+
port: url.port || (isHttps ? 443 : 80),
|
|
131
|
+
path: url.pathname + url.search,
|
|
132
|
+
method,
|
|
133
|
+
headers: {
|
|
134
|
+
"Content-Type": "application/json",
|
|
135
|
+
Accept: "application/json",
|
|
136
|
+
"User-Agent": "tuning-engines-cli/0.2.0",
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
const req = transport.request(options, (res) => {
|
|
140
|
+
let data = "";
|
|
141
|
+
res.on("data", (chunk) => {
|
|
142
|
+
data += chunk.toString();
|
|
143
|
+
});
|
|
144
|
+
res.on("end", () => {
|
|
145
|
+
try {
|
|
146
|
+
const parsed = JSON.parse(data);
|
|
147
|
+
if (res.statusCode && res.statusCode >= 400) {
|
|
148
|
+
const error = parsed.error || { code: "unknown", message: data };
|
|
149
|
+
reject(new Error(`API Error (${res.statusCode}): ${error.message || JSON.stringify(error)}`));
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
resolve(parsed);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
if (res.statusCode && res.statusCode >= 400) {
|
|
157
|
+
reject(new Error(`API Error (${res.statusCode}): ${data}`));
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
resolve(data);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
req.on("error", reject);
|
|
166
|
+
if (body) {
|
|
167
|
+
req.write(JSON.stringify(body));
|
|
168
|
+
}
|
|
169
|
+
req.end();
|
|
170
|
+
});
|
|
171
|
+
}
|
|
108
172
|
// --- HTTP ---
|
|
109
173
|
request(method, path, body) {
|
|
110
174
|
return new Promise((resolve, reject) => {
|
|
@@ -120,7 +184,7 @@ class TuningEnginesClient {
|
|
|
120
184
|
Authorization: `Bearer ${this.apiKey}`,
|
|
121
185
|
"Content-Type": "application/json",
|
|
122
186
|
Accept: "application/json",
|
|
123
|
-
"User-Agent": "tuning-engines-cli/0.
|
|
187
|
+
"User-Agent": "tuning-engines-cli/0.2.0",
|
|
124
188
|
},
|
|
125
189
|
};
|
|
126
190
|
const req = transport.request(options, (res) => {
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,2CAA6B;AAC7B,6BAA0B;AAY1B,MAAa,mBAAmB;IACtB,MAAM,CAAS;IACf,MAAM,CAAS;IAEvB,YAAY,OAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,eAAe;IAEf,KAAK,CAAC,QAAQ,CAAC,OAId;QACC,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,OAAO,EAAE,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,OAAO,EAAE,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,IAAI,OAAO,EAAE,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAClE,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkI3D"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerAuthCommands = registerAuthCommands;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const client_1 = require("../client");
|
|
6
|
+
const config_1 = require("../config");
|
|
7
|
+
function openBrowser(url) {
|
|
8
|
+
const platform = process.platform;
|
|
9
|
+
let cmd;
|
|
10
|
+
if (platform === "darwin") {
|
|
11
|
+
cmd = `open "${url}"`;
|
|
12
|
+
}
|
|
13
|
+
else if (platform === "win32") {
|
|
14
|
+
cmd = `start "" "${url}"`;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
cmd = `xdg-open "${url}"`;
|
|
18
|
+
}
|
|
19
|
+
(0, child_process_1.exec)(cmd, (err) => {
|
|
20
|
+
if (err) {
|
|
21
|
+
console.log(`Could not open browser automatically. Please visit:\n ${url}`);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function sleep(ms) {
|
|
26
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
27
|
+
}
|
|
28
|
+
function registerAuthCommands(program) {
|
|
29
|
+
const auth = program.command("auth").description("Authenticate with Tuning Engines");
|
|
30
|
+
auth
|
|
31
|
+
.command("login")
|
|
32
|
+
.description("Authenticate via browser (sign up or log in)")
|
|
33
|
+
.action(async () => {
|
|
34
|
+
try {
|
|
35
|
+
const config = (0, config_1.loadConfig)();
|
|
36
|
+
if (config.api_key) {
|
|
37
|
+
console.log("You are already authenticated. Run `te auth logout` first to re-authenticate.");
|
|
38
|
+
process.exit(0);
|
|
39
|
+
}
|
|
40
|
+
const apiUrl = (0, config_1.getApiUrl)();
|
|
41
|
+
console.log("Starting authentication...\n");
|
|
42
|
+
const session = await client_1.TuningEnginesClient.createDeviceSession(apiUrl);
|
|
43
|
+
console.log(`Your device code: ${session.device_code}\n`);
|
|
44
|
+
console.log("Opening browser to complete authentication...");
|
|
45
|
+
console.log(`If the browser doesn't open, visit:\n ${session.verification_url}\n`);
|
|
46
|
+
openBrowser(session.verification_url);
|
|
47
|
+
console.log("Waiting for authorization... (press Ctrl+C to cancel)\n");
|
|
48
|
+
const pollInterval = (session.poll_interval || 5) * 1000;
|
|
49
|
+
const expiresAt = Date.now() + (session.expires_in || 600) * 1000;
|
|
50
|
+
while (Date.now() < expiresAt) {
|
|
51
|
+
await sleep(pollInterval);
|
|
52
|
+
try {
|
|
53
|
+
const result = await client_1.TuningEnginesClient.pollDeviceSession(apiUrl, session.device_code);
|
|
54
|
+
if (result.status === "complete" && result.api_token) {
|
|
55
|
+
(0, config_1.saveConfig)({ api_key: result.api_token });
|
|
56
|
+
console.log("Authenticated successfully!");
|
|
57
|
+
// Fetch account info to show who we're logged in as
|
|
58
|
+
try {
|
|
59
|
+
const client = new client_1.TuningEnginesClient({
|
|
60
|
+
apiKey: result.api_token,
|
|
61
|
+
apiUrl,
|
|
62
|
+
});
|
|
63
|
+
const account = await client.getAccount();
|
|
64
|
+
console.log(`Logged in as: ${account.email}`);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// Non-critical — token is saved
|
|
68
|
+
}
|
|
69
|
+
console.log("\nAPI token saved to ~/.tuningengines/config.json");
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (result.status === "expired") {
|
|
73
|
+
console.error("Session expired. Please run `te auth login` again.");
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
if (result.status === "consumed") {
|
|
77
|
+
console.error("This session has already been used. Please run `te auth login` again.");
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
// status === "pending" — keep polling
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
// 429 or transient errors — keep polling
|
|
84
|
+
if (!err.message?.includes("429")) {
|
|
85
|
+
// Log non-rate-limit errors but keep trying
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
console.error("Authentication timed out. Please run `te auth login` again.");
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
console.error(`Authentication failed: ${err.message}`);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
auth
|
|
98
|
+
.command("logout")
|
|
99
|
+
.description("Clear saved authentication token")
|
|
100
|
+
.action(() => {
|
|
101
|
+
(0, config_1.clearApiKey)();
|
|
102
|
+
console.log("Logged out. API token cleared.");
|
|
103
|
+
});
|
|
104
|
+
auth
|
|
105
|
+
.command("status")
|
|
106
|
+
.description("Show current authentication status")
|
|
107
|
+
.action(async () => {
|
|
108
|
+
try {
|
|
109
|
+
const config = (0, config_1.loadConfig)();
|
|
110
|
+
if (!config.api_key) {
|
|
111
|
+
console.log("Not authenticated.");
|
|
112
|
+
console.log("Run `te auth login` to authenticate.");
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const apiUrl = (0, config_1.getApiUrl)();
|
|
116
|
+
const client = new client_1.TuningEnginesClient({
|
|
117
|
+
apiKey: config.api_key,
|
|
118
|
+
apiUrl,
|
|
119
|
+
});
|
|
120
|
+
const account = await client.getAccount();
|
|
121
|
+
console.log(`Authenticated as: ${account.email}`);
|
|
122
|
+
if (account.tenant) {
|
|
123
|
+
console.log(`Organization: ${account.tenant}`);
|
|
124
|
+
}
|
|
125
|
+
if (account.balance_cents !== undefined) {
|
|
126
|
+
const credits = account.balance_cents;
|
|
127
|
+
console.log(`Balance: ${credits.toLocaleString()} Credits ($${(credits / 100).toFixed(2)})`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
if (err.message?.includes("401") || err.message?.includes("403")) {
|
|
132
|
+
console.log("Token is invalid or expired.");
|
|
133
|
+
console.log("Run `te auth login` to re-authenticate.");
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
console.error(`Error checking status: ${err.message}`);
|
|
137
|
+
}
|
|
138
|
+
process.exit(1);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../src/commands/billing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../src/commands/billing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAuBhD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,mBAAmB,GACnC,IAAI,CA8DN"}
|
package/dist/commands/billing.js
CHANGED
|
@@ -34,10 +34,31 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.registerBillingCommands = registerBillingCommands;
|
|
37
|
+
const child_process_1 = require("child_process");
|
|
38
|
+
const config_1 = require("../config");
|
|
37
39
|
const output = __importStar(require("../output"));
|
|
40
|
+
function openBrowser(url) {
|
|
41
|
+
const platform = process.platform;
|
|
42
|
+
let cmd;
|
|
43
|
+
if (platform === "darwin") {
|
|
44
|
+
cmd = `open "${url}"`;
|
|
45
|
+
}
|
|
46
|
+
else if (platform === "win32") {
|
|
47
|
+
cmd = `start "" "${url}"`;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
cmd = `xdg-open "${url}"`;
|
|
51
|
+
}
|
|
52
|
+
(0, child_process_1.exec)(cmd, (err) => {
|
|
53
|
+
if (err) {
|
|
54
|
+
console.log(`Could not open browser automatically. Please visit:\n ${url}`);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
38
58
|
function registerBillingCommands(program, getClient) {
|
|
39
|
-
program
|
|
40
|
-
|
|
59
|
+
const billing = program.command("billing").description("Billing and credits");
|
|
60
|
+
billing
|
|
61
|
+
.command("show")
|
|
41
62
|
.description("Show account balance and recent transactions")
|
|
42
63
|
.option("--json", "Output as JSON")
|
|
43
64
|
.action(async (opts) => {
|
|
@@ -79,5 +100,15 @@ function registerBillingCommands(program, getClient) {
|
|
|
79
100
|
process.exit(1);
|
|
80
101
|
}
|
|
81
102
|
});
|
|
103
|
+
billing
|
|
104
|
+
.command("add-credits")
|
|
105
|
+
.description("Open the billing page in your browser to add credits")
|
|
106
|
+
.action(() => {
|
|
107
|
+
const apiUrl = (0, config_1.getApiUrl)();
|
|
108
|
+
const billingUrl = `${apiUrl}/billing`;
|
|
109
|
+
console.log("Opening billing page to add credits...");
|
|
110
|
+
openBrowser(billingUrl);
|
|
111
|
+
console.log(`\nIf the browser didn't open, visit:\n ${billingUrl}`);
|
|
112
|
+
});
|
|
82
113
|
}
|
|
83
114
|
//# sourceMappingURL=billing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/commands/billing.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/commands/billing.ts"],"names":[],"mappings":"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"}
|