@hypercli.com/sdk 2026.3.13-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 +205 -0
- package/dist/agent.d.ts +63 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +128 -0
- package/dist/agent.js.map +1 -0
- package/dist/agents.d.ts +245 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +602 -0
- package/dist/agents.js.map +1 -0
- package/dist/billing.d.ts +38 -0
- package/dist/billing.d.ts.map +1 -0
- package/dist/billing.js +53 -0
- package/dist/billing.js.map +1 -0
- package/dist/claw.d.ts +83 -0
- package/dist/claw.d.ts.map +1 -0
- package/dist/claw.js +148 -0
- package/dist/claw.js.map +1 -0
- package/dist/client.d.ts +62 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +82 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +28 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +107 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +9 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +15 -0
- package/dist/errors.js.map +1 -0
- package/dist/files.d.ts +60 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +128 -0
- package/dist/files.js.map +1 -0
- package/dist/gateway.d.ts +216 -0
- package/dist/gateway.d.ts.map +1 -0
- package/dist/gateway.js +1306 -0
- package/dist/gateway.js.map +1 -0
- package/dist/http.d.ts +41 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +206 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/instances.d.ts +93 -0
- package/dist/instances.d.ts.map +1 -0
- package/dist/instances.js +196 -0
- package/dist/instances.js.map +1 -0
- package/dist/job/base.d.ts +80 -0
- package/dist/job/base.d.ts.map +1 -0
- package/dist/job/base.js +200 -0
- package/dist/job/base.js.map +1 -0
- package/dist/job/comfyui.d.ts +75 -0
- package/dist/job/comfyui.d.ts.map +1 -0
- package/dist/job/comfyui.js +454 -0
- package/dist/job/comfyui.js.map +1 -0
- package/dist/job/gradio.d.ts +48 -0
- package/dist/job/gradio.d.ts.map +1 -0
- package/dist/job/gradio.js +90 -0
- package/dist/job/gradio.js.map +1 -0
- package/dist/jobs.d.ts +132 -0
- package/dist/jobs.d.ts.map +1 -0
- package/dist/jobs.js +244 -0
- package/dist/jobs.js.map +1 -0
- package/dist/keys.d.ts +39 -0
- package/dist/keys.d.ts.map +1 -0
- package/dist/keys.js +53 -0
- package/dist/keys.js.map +1 -0
- package/dist/logs.d.ts +54 -0
- package/dist/logs.d.ts.map +1 -0
- package/dist/logs.js +256 -0
- package/dist/logs.js.map +1 -0
- package/dist/renders.d.ts +168 -0
- package/dist/renders.d.ts.map +1 -0
- package/dist/renders.js +228 -0
- package/dist/renders.js.map +1 -0
- package/dist/user.d.ts +20 -0
- package/dist/user.d.ts.map +1 -0
- package/dist/user.js +23 -0
- package/dist/user.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAyBD,qBAAa,OAAO;IACN,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAEpC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAKjC;;OAEG;IACG,YAAY,CAAC,KAAK,GAAE,MAAW,EAAE,IAAI,GAAE,MAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAShF;;OAEG;IACG,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAIlE"}
|
package/dist/billing.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
function balanceFromDict(data) {
|
|
2
|
+
return {
|
|
3
|
+
total: data.total_balance || '0',
|
|
4
|
+
rewards: data.rewards_balance || '0',
|
|
5
|
+
paid: data.balance || '0',
|
|
6
|
+
available: data.available_balance || '0',
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
function transactionFromDict(data) {
|
|
10
|
+
return {
|
|
11
|
+
id: data.id || '',
|
|
12
|
+
userId: data.user_id || '',
|
|
13
|
+
amount: data.amount || 0,
|
|
14
|
+
amountUsd: data.amount_usd || 0,
|
|
15
|
+
transactionType: data.transaction_type || '',
|
|
16
|
+
status: data.status || '',
|
|
17
|
+
rewards: data.rewards || false,
|
|
18
|
+
jobId: data.job_id || null,
|
|
19
|
+
createdAt: data.created_at || '',
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export class Billing {
|
|
23
|
+
http;
|
|
24
|
+
constructor(http) {
|
|
25
|
+
this.http = http;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get account balance
|
|
29
|
+
*/
|
|
30
|
+
async balance() {
|
|
31
|
+
const data = await this.http.get('/api/balance');
|
|
32
|
+
return balanceFromDict(data);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* List transactions
|
|
36
|
+
*/
|
|
37
|
+
async transactions(limit = 50, page = 1) {
|
|
38
|
+
const data = await this.http.get('/api/tx', {
|
|
39
|
+
page: String(page),
|
|
40
|
+
page_size: String(limit),
|
|
41
|
+
});
|
|
42
|
+
const txList = data.transactions || [];
|
|
43
|
+
return txList.map(transactionFromDict);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get a specific transaction
|
|
47
|
+
*/
|
|
48
|
+
async getTransaction(transactionId) {
|
|
49
|
+
const data = await this.http.get(`/api/tx/${transactionId}`);
|
|
50
|
+
return transactionFromDict(data);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=billing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing.js","sourceRoot":"","sources":["../src/billing.ts"],"names":[],"mappings":"AAwBA,SAAS,eAAe,CAAC,IAAS;IAChC,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,aAAa,IAAI,GAAG;QAChC,OAAO,EAAE,IAAI,CAAC,eAAe,IAAI,GAAG;QACpC,IAAI,EAAE,IAAI,CAAC,OAAO,IAAI,GAAG;QACzB,SAAS,EAAE,IAAI,CAAC,iBAAiB,IAAI,GAAG;KACzC,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAS;IACpC,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;QACjB,MAAM,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;QAC1B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC;QACxB,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;QAC/B,eAAe,EAAE,IAAI,CAAC,gBAAgB,IAAI,EAAE;QAC5C,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;QACzB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK;QAC9B,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI;QAC1B,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,OAAO;IACE;IAApB,YAAoB,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAExC;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACjD,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,EAAE,OAAe,CAAC;QACrD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;YAC1C,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;YAClB,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC;SACzB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,aAAqB;QACxC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,aAAa,EAAE,CAAC,CAAC;QAC7D,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;CACF"}
|
package/dist/claw.d.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HyperClaw API client - AI agent inference using OpenAI-compatible API
|
|
3
|
+
*
|
|
4
|
+
* Note: OpenAI client integration is not included in this SDK.
|
|
5
|
+
* Use the OpenAI Node.js SDK directly with HyperClaw endpoints.
|
|
6
|
+
*/
|
|
7
|
+
import type { HTTPClient } from './http.js';
|
|
8
|
+
export interface ClawKey {
|
|
9
|
+
key: string;
|
|
10
|
+
planId: string;
|
|
11
|
+
expiresAt: Date;
|
|
12
|
+
tpmLimit: number;
|
|
13
|
+
rpmLimit: number;
|
|
14
|
+
userId: string | null;
|
|
15
|
+
}
|
|
16
|
+
export interface ClawPlan {
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
priceUsd: number;
|
|
20
|
+
tpmLimit: number;
|
|
21
|
+
rpmLimit: number;
|
|
22
|
+
}
|
|
23
|
+
export interface ClawModel {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
contextLength: number;
|
|
27
|
+
supportsVision: boolean;
|
|
28
|
+
supportsFunctionCalling: boolean;
|
|
29
|
+
supportsToolChoice: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* HyperClaw API Client
|
|
33
|
+
*
|
|
34
|
+
* For chat completions, use the OpenAI Node.js SDK directly:
|
|
35
|
+
*
|
|
36
|
+
* ```typescript
|
|
37
|
+
* import OpenAI from 'openai';
|
|
38
|
+
*
|
|
39
|
+
* const openai = new OpenAI({
|
|
40
|
+
* apiKey: client.claw.apiKey,
|
|
41
|
+
* baseURL: client.claw.baseUrl,
|
|
42
|
+
* });
|
|
43
|
+
*
|
|
44
|
+
* const response = await openai.chat.completions.create({
|
|
45
|
+
* model: 'kimi-k2.5',
|
|
46
|
+
* messages: [{ role: 'user', content: 'Hello!' }],
|
|
47
|
+
* });
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export declare class Claw {
|
|
51
|
+
private http;
|
|
52
|
+
static readonly CLAW_API_BASE = "https://api.hyperclaw.app/v1";
|
|
53
|
+
static readonly DEV_API_BASE = "https://dev-api.hyperclaw.app/v1";
|
|
54
|
+
readonly apiKey: string;
|
|
55
|
+
readonly baseUrl: string;
|
|
56
|
+
constructor(http: HTTPClient, clawApiKey?: string, dev?: boolean);
|
|
57
|
+
private get baseUrlWithoutV1();
|
|
58
|
+
/**
|
|
59
|
+
* Get current API key status and subscription details
|
|
60
|
+
*/
|
|
61
|
+
keyStatus(): Promise<ClawKey>;
|
|
62
|
+
/**
|
|
63
|
+
* List available subscription plans
|
|
64
|
+
*/
|
|
65
|
+
plans(): Promise<ClawPlan[]>;
|
|
66
|
+
/**
|
|
67
|
+
* List available models
|
|
68
|
+
*/
|
|
69
|
+
models(): Promise<ClawModel[]>;
|
|
70
|
+
/**
|
|
71
|
+
* Get discovery service health status
|
|
72
|
+
*/
|
|
73
|
+
discoveryHealth(): Promise<{
|
|
74
|
+
hostsTotal: number;
|
|
75
|
+
hostsHealthy: number;
|
|
76
|
+
fallbacksActive: number;
|
|
77
|
+
}>;
|
|
78
|
+
/**
|
|
79
|
+
* Get discovery service configuration (requires API key)
|
|
80
|
+
*/
|
|
81
|
+
discoveryConfig(apiKey?: string): Promise<any>;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=claw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claw.d.ts","sourceRoot":"","sources":["../src/claw.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,uBAAuB,EAAE,OAAO,CAAC;IACjC,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AA0CD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,IAAI;IAQb,OAAO,CAAC,IAAI;IAPd,MAAM,CAAC,QAAQ,CAAC,aAAa,kCAAkC;IAC/D,MAAM,CAAC,QAAQ,CAAC,YAAY,sCAAsC;IAElE,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAGtB,IAAI,EAAE,UAAU,EACxB,UAAU,CAAC,EAAE,MAAM,EACnB,GAAG,GAAE,OAAe;IAMtB,OAAO,KAAK,gBAAgB,GAE3B;IAED;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAenC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAelC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAoBpC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC;QAC/B,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IAUF;;OAEG;IACG,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CAgBrD"}
|
package/dist/claw.js
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
function clawKeyFromDict(data) {
|
|
2
|
+
let expiresAt;
|
|
3
|
+
if (typeof data.expires_at === 'string') {
|
|
4
|
+
expiresAt = new Date(data.expires_at.replace('Z', '+00:00'));
|
|
5
|
+
}
|
|
6
|
+
else {
|
|
7
|
+
expiresAt = new Date(data.expires_at);
|
|
8
|
+
}
|
|
9
|
+
return {
|
|
10
|
+
key: data.key,
|
|
11
|
+
planId: data.plan_id,
|
|
12
|
+
expiresAt,
|
|
13
|
+
tpmLimit: data.tpm_limit || 0,
|
|
14
|
+
rpmLimit: data.rpm_limit || 0,
|
|
15
|
+
userId: data.user_id || null,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function clawPlanFromDict(data) {
|
|
19
|
+
return {
|
|
20
|
+
id: data.id,
|
|
21
|
+
name: data.name,
|
|
22
|
+
priceUsd: data.price_usd,
|
|
23
|
+
tpmLimit: data.tpm_limit,
|
|
24
|
+
rpmLimit: data.rpm_limit,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function clawModelFromDict(data) {
|
|
28
|
+
const caps = data.capabilities || {};
|
|
29
|
+
return {
|
|
30
|
+
id: data.id,
|
|
31
|
+
name: data.name || data.id,
|
|
32
|
+
contextLength: data.context_length || 0,
|
|
33
|
+
supportsVision: caps.supports_vision || false,
|
|
34
|
+
supportsFunctionCalling: caps.supports_function_calling || false,
|
|
35
|
+
supportsToolChoice: caps.supports_tool_choice || false,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* HyperClaw API Client
|
|
40
|
+
*
|
|
41
|
+
* For chat completions, use the OpenAI Node.js SDK directly:
|
|
42
|
+
*
|
|
43
|
+
* ```typescript
|
|
44
|
+
* import OpenAI from 'openai';
|
|
45
|
+
*
|
|
46
|
+
* const openai = new OpenAI({
|
|
47
|
+
* apiKey: client.claw.apiKey,
|
|
48
|
+
* baseURL: client.claw.baseUrl,
|
|
49
|
+
* });
|
|
50
|
+
*
|
|
51
|
+
* const response = await openai.chat.completions.create({
|
|
52
|
+
* model: 'kimi-k2.5',
|
|
53
|
+
* messages: [{ role: 'user', content: 'Hello!' }],
|
|
54
|
+
* });
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export class Claw {
|
|
58
|
+
http;
|
|
59
|
+
static CLAW_API_BASE = 'https://api.hyperclaw.app/v1';
|
|
60
|
+
static DEV_API_BASE = 'https://dev-api.hyperclaw.app/v1';
|
|
61
|
+
apiKey;
|
|
62
|
+
baseUrl;
|
|
63
|
+
constructor(http, clawApiKey, dev = false) {
|
|
64
|
+
this.http = http;
|
|
65
|
+
this.apiKey = clawApiKey || http['apiKey'];
|
|
66
|
+
this.baseUrl = dev ? Claw.DEV_API_BASE : Claw.CLAW_API_BASE;
|
|
67
|
+
}
|
|
68
|
+
get baseUrlWithoutV1() {
|
|
69
|
+
return this.baseUrl.replace('/v1', '');
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get current API key status and subscription details
|
|
73
|
+
*/
|
|
74
|
+
async keyStatus() {
|
|
75
|
+
const response = await fetch(`${this.baseUrlWithoutV1}/api/keys/status`, {
|
|
76
|
+
headers: {
|
|
77
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
if (!response.ok) {
|
|
81
|
+
throw new Error(`Failed to get key status: ${response.statusText}`);
|
|
82
|
+
}
|
|
83
|
+
const data = await response.json();
|
|
84
|
+
return clawKeyFromDict(data);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* List available subscription plans
|
|
88
|
+
*/
|
|
89
|
+
async plans() {
|
|
90
|
+
const response = await fetch(`${this.baseUrlWithoutV1}/api/plans`, {
|
|
91
|
+
headers: {
|
|
92
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
if (!response.ok) {
|
|
96
|
+
throw new Error(`Failed to get plans: ${response.statusText}`);
|
|
97
|
+
}
|
|
98
|
+
const data = await response.json();
|
|
99
|
+
return (data.plans || []).map(clawPlanFromDict);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* List available models
|
|
103
|
+
*/
|
|
104
|
+
async models() {
|
|
105
|
+
const response = await fetch(`${this.baseUrl}/models`, {
|
|
106
|
+
headers: {
|
|
107
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
if (!response.ok) {
|
|
111
|
+
throw new Error(`Failed to get models: ${response.statusText}`);
|
|
112
|
+
}
|
|
113
|
+
const data = await response.json();
|
|
114
|
+
return (data.data || []).map((m) => clawModelFromDict({
|
|
115
|
+
id: m.id,
|
|
116
|
+
name: m.name || m.id,
|
|
117
|
+
context_length: m.context_length || 0,
|
|
118
|
+
capabilities: m.capabilities || {},
|
|
119
|
+
}));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get discovery service health status
|
|
123
|
+
*/
|
|
124
|
+
async discoveryHealth() {
|
|
125
|
+
const response = await fetch(`${this.baseUrlWithoutV1}/discovery/health`);
|
|
126
|
+
if (!response.ok) {
|
|
127
|
+
throw new Error(`Failed to get discovery health: ${response.statusText}`);
|
|
128
|
+
}
|
|
129
|
+
return (await response.json());
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get discovery service configuration (requires API key)
|
|
133
|
+
*/
|
|
134
|
+
async discoveryConfig(apiKey) {
|
|
135
|
+
const headers = {};
|
|
136
|
+
if (apiKey) {
|
|
137
|
+
headers['X-API-KEY'] = apiKey;
|
|
138
|
+
}
|
|
139
|
+
const response = await fetch(`${this.baseUrlWithoutV1}/discovery/config`, {
|
|
140
|
+
headers,
|
|
141
|
+
});
|
|
142
|
+
if (!response.ok) {
|
|
143
|
+
throw new Error(`Failed to get discovery config: ${response.statusText}`);
|
|
144
|
+
}
|
|
145
|
+
return await response.json();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=claw.js.map
|
package/dist/claw.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claw.js","sourceRoot":"","sources":["../src/claw.ts"],"names":[],"mappings":"AAkCA,SAAS,eAAe,CAAC,IAAS;IAChC,IAAI,SAAe,CAAC;IACpB,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACxC,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,MAAM,EAAE,IAAI,CAAC,OAAO;QACpB,SAAS;QACT,QAAQ,EAAE,IAAI,CAAC,SAAS,IAAI,CAAC;QAC7B,QAAQ,EAAE,IAAI,CAAC,SAAS,IAAI,CAAC;QAC7B,MAAM,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAS;IACjC,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,SAAS;QACxB,QAAQ,EAAE,IAAI,CAAC,SAAS;QACxB,QAAQ,EAAE,IAAI,CAAC,SAAS;KACzB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAS;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;IACrC,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE;QAC1B,aAAa,EAAE,IAAI,CAAC,cAAc,IAAI,CAAC;QACvC,cAAc,EAAE,IAAI,CAAC,eAAe,IAAI,KAAK;QAC7C,uBAAuB,EAAE,IAAI,CAAC,yBAAyB,IAAI,KAAK;QAChE,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,IAAI,KAAK;KACvD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,IAAI;IAQL;IAPV,MAAM,CAAU,aAAa,GAAG,8BAA8B,CAAC;IAC/D,MAAM,CAAU,YAAY,GAAG,kCAAkC,CAAC;IAElD,MAAM,CAAS;IACf,OAAO,CAAS;IAEhC,YACU,IAAgB,EACxB,UAAmB,EACnB,MAAe,KAAK;QAFZ,SAAI,GAAJ,IAAI,CAAY;QAIxB,IAAI,CAAC,MAAM,GAAG,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;IAC9D,CAAC;IAED,IAAY,gBAAgB;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,kBAAkB,EAAE;YACvE,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACzC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,YAAY,EAAE;YACjE,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACzC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,SAAS,EAAE;YACrD,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACzC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC;YACzD,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE;YACpB,cAAc,EAAE,CAAC,CAAC,cAAc,IAAI,CAAC;YACrC,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,EAAE;SACnC,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QAKnB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,mBAAmB,CAAC,CAAC;QAE1E,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAQ,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,MAAe;QACnC,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;QAChC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,mBAAmB,EAAE;YACxE,OAAO;SACR,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Billing } from './billing.js';
|
|
2
|
+
import { Jobs } from './jobs.js';
|
|
3
|
+
import { UserAPI } from './user.js';
|
|
4
|
+
import { Instances } from './instances.js';
|
|
5
|
+
import { Renders } from './renders.js';
|
|
6
|
+
import { Files } from './files.js';
|
|
7
|
+
import { HyperAgent } from './agent.js';
|
|
8
|
+
import { KeysAPI } from './keys.js';
|
|
9
|
+
import { Deployments } from './agents.js';
|
|
10
|
+
export interface HyperCLIOptions {
|
|
11
|
+
apiKey?: string;
|
|
12
|
+
apiUrl?: string;
|
|
13
|
+
agentApiKey?: string;
|
|
14
|
+
agentDev?: boolean;
|
|
15
|
+
agentsWsUrl?: string;
|
|
16
|
+
timeout?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* HyperCLI API Client
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* import { HyperCLI } from '@hypercli/sdk';
|
|
24
|
+
*
|
|
25
|
+
* const client = new HyperCLI(); // Uses HYPERCLI_API_KEY from env or ~/.hypercli/config
|
|
26
|
+
* // or
|
|
27
|
+
* const client = new HyperCLI({ apiKey: 'your_key' });
|
|
28
|
+
*
|
|
29
|
+
* // Billing
|
|
30
|
+
* const balance = await client.billing.balance();
|
|
31
|
+
* console.log(`Balance: $${balance.total}`);
|
|
32
|
+
*
|
|
33
|
+
* // Jobs
|
|
34
|
+
* const job = await client.jobs.create({
|
|
35
|
+
* image: 'nvidia/cuda:12.0',
|
|
36
|
+
* gpuType: 'l40s',
|
|
37
|
+
* command: 'python train.py',
|
|
38
|
+
* });
|
|
39
|
+
* console.log(`Job: ${job.jobId}`);
|
|
40
|
+
*
|
|
41
|
+
* // User
|
|
42
|
+
* const user = await client.user.get();
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare class HyperCLI {
|
|
46
|
+
private _apiKey;
|
|
47
|
+
private _apiUrl;
|
|
48
|
+
private _http;
|
|
49
|
+
readonly billing: Billing;
|
|
50
|
+
readonly jobs: Jobs;
|
|
51
|
+
readonly user: UserAPI;
|
|
52
|
+
readonly instances: Instances;
|
|
53
|
+
readonly renders: Renders;
|
|
54
|
+
readonly files: Files;
|
|
55
|
+
readonly keys: KeysAPI;
|
|
56
|
+
readonly agent: HyperAgent;
|
|
57
|
+
readonly deployments: Deployments;
|
|
58
|
+
constructor(options?: HyperCLIOptions);
|
|
59
|
+
get apiUrl(): string;
|
|
60
|
+
get apiKey(): string;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAa;IAE1B,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,IAAI,EAAE,IAAI,CAAC;IAC3B,SAAgB,IAAI,EAAE,OAAO,CAAC;IAC9B,SAAgB,SAAS,EAAE,SAAS,CAAC;IACrC,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,KAAK,EAAE,KAAK,CAAC;IAC7B,SAAgB,IAAI,EAAE,OAAO,CAAC;IAC9B,SAAgB,KAAK,EAAE,UAAU,CAAC;IAClC,SAAgB,WAAW,EAAE,WAAW,CAAC;gBAE7B,OAAO,GAAE,eAAoB;IA+BzC,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;CACF"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main HyperCLI client
|
|
3
|
+
*/
|
|
4
|
+
import { HTTPClient } from './http.js';
|
|
5
|
+
import { getApiKey, getApiUrl } from './config.js';
|
|
6
|
+
import { Billing } from './billing.js';
|
|
7
|
+
import { Jobs } from './jobs.js';
|
|
8
|
+
import { UserAPI } from './user.js';
|
|
9
|
+
import { Instances } from './instances.js';
|
|
10
|
+
import { Renders } from './renders.js';
|
|
11
|
+
import { Files } from './files.js';
|
|
12
|
+
import { HyperAgent } from './agent.js';
|
|
13
|
+
import { KeysAPI } from './keys.js';
|
|
14
|
+
import { Deployments } from './agents.js';
|
|
15
|
+
/**
|
|
16
|
+
* HyperCLI API Client
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { HyperCLI } from '@hypercli/sdk';
|
|
21
|
+
*
|
|
22
|
+
* const client = new HyperCLI(); // Uses HYPERCLI_API_KEY from env or ~/.hypercli/config
|
|
23
|
+
* // or
|
|
24
|
+
* const client = new HyperCLI({ apiKey: 'your_key' });
|
|
25
|
+
*
|
|
26
|
+
* // Billing
|
|
27
|
+
* const balance = await client.billing.balance();
|
|
28
|
+
* console.log(`Balance: $${balance.total}`);
|
|
29
|
+
*
|
|
30
|
+
* // Jobs
|
|
31
|
+
* const job = await client.jobs.create({
|
|
32
|
+
* image: 'nvidia/cuda:12.0',
|
|
33
|
+
* gpuType: 'l40s',
|
|
34
|
+
* command: 'python train.py',
|
|
35
|
+
* });
|
|
36
|
+
* console.log(`Job: ${job.jobId}`);
|
|
37
|
+
*
|
|
38
|
+
* // User
|
|
39
|
+
* const user = await client.user.get();
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export class HyperCLI {
|
|
43
|
+
_apiKey;
|
|
44
|
+
_apiUrl;
|
|
45
|
+
_http;
|
|
46
|
+
billing;
|
|
47
|
+
jobs;
|
|
48
|
+
user;
|
|
49
|
+
instances;
|
|
50
|
+
renders;
|
|
51
|
+
files;
|
|
52
|
+
keys;
|
|
53
|
+
agent;
|
|
54
|
+
deployments;
|
|
55
|
+
constructor(options = {}) {
|
|
56
|
+
// Handle explicit undefined vs explicitly passed empty string
|
|
57
|
+
this._apiKey = options.apiKey !== undefined ? options.apiKey : (getApiKey() || '');
|
|
58
|
+
if (!this._apiKey) {
|
|
59
|
+
throw new Error('API key required. Set HYPERCLI_API_KEY env var, ' +
|
|
60
|
+
'create ~/.hypercli/config, or pass apiKey parameter.');
|
|
61
|
+
}
|
|
62
|
+
this._apiUrl = options.apiUrl || getApiUrl();
|
|
63
|
+
this._http = new HTTPClient(this._apiUrl, this._apiKey, options.timeout);
|
|
64
|
+
// API namespaces
|
|
65
|
+
this.billing = new Billing(this._http);
|
|
66
|
+
this.jobs = new Jobs(this._http);
|
|
67
|
+
this.user = new UserAPI(this._http);
|
|
68
|
+
this.instances = new Instances(this._http);
|
|
69
|
+
this.renders = new Renders(this._http);
|
|
70
|
+
this.files = new Files(this._http);
|
|
71
|
+
this.keys = new KeysAPI(this._http);
|
|
72
|
+
this.agent = new HyperAgent(this._http, options.agentApiKey, options.agentDev);
|
|
73
|
+
this.deployments = new Deployments(this._http, options.agentApiKey, this._apiUrl, options.agentsWsUrl);
|
|
74
|
+
}
|
|
75
|
+
get apiUrl() {
|
|
76
|
+
return this._apiUrl;
|
|
77
|
+
}
|
|
78
|
+
get apiKey() {
|
|
79
|
+
return this._apiKey;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAW1C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,OAAO,QAAQ;IACX,OAAO,CAAS;IAChB,OAAO,CAAS;IAChB,KAAK,CAAa;IAEV,OAAO,CAAU;IACjB,IAAI,CAAO;IACX,IAAI,CAAU;IACd,SAAS,CAAY;IACrB,OAAO,CAAU;IACjB,KAAK,CAAQ;IACb,IAAI,CAAU;IACd,KAAK,CAAa;IAClB,WAAW,CAAc;IAEzC,YAAY,UAA2B,EAAE;QACvC,8DAA8D;QAC9D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEnF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,kDAAkD;gBAClD,sDAAsD,CACvD,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAEzE,iBAAiB;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/E,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAChC,IAAI,CAAC,KAAK,EACV,OAAO,CAAC,WAAW,EACnB,IAAI,CAAC,OAAO,EACZ,OAAO,CAAC,WAAW,CACpB,CAAC;IACJ,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare const CONFIG_DIR: string;
|
|
2
|
+
export declare const CONFIG_FILE: string;
|
|
3
|
+
export declare const DEFAULT_API_URL = "https://api.hypercli.com";
|
|
4
|
+
export declare const DEFAULT_WS_URL = "wss://api.hypercli.com";
|
|
5
|
+
export declare const WS_LOGS_PATH = "/orchestra/ws/logs";
|
|
6
|
+
export declare const GHCR_IMAGES = "ghcr.io/compute3ai/images";
|
|
7
|
+
export declare const COMFYUI_IMAGE = "ghcr.io/compute3ai/images/comfyui";
|
|
8
|
+
/**
|
|
9
|
+
* Get config value: env var > config file > default
|
|
10
|
+
*/
|
|
11
|
+
export declare function getConfigValue(key: string, defaultValue?: string): string | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Get API key from env or config file
|
|
14
|
+
*/
|
|
15
|
+
export declare function getApiKey(): string | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Get API URL
|
|
18
|
+
*/
|
|
19
|
+
export declare function getApiUrl(): string;
|
|
20
|
+
/**
|
|
21
|
+
* Get WebSocket URL
|
|
22
|
+
*/
|
|
23
|
+
export declare function getWsUrl(): string;
|
|
24
|
+
/**
|
|
25
|
+
* Save configuration to ~/.hypercli/config
|
|
26
|
+
*/
|
|
27
|
+
export declare function configure(apiKey: string, apiUrl?: string): void;
|
|
28
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,UAAU,QAA+B,CAAC;AACvD,eAAO,MAAM,WAAW,QAA6B,CAAC;AAEtD,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAC1D,eAAO,MAAM,cAAc,2BAA2B,CAAC;AACvD,eAAO,MAAM,YAAY,uBAAuB,CAAC;AAGjD,eAAO,MAAM,WAAW,8BAA8B,CAAC;AACvD,eAAO,MAAM,aAAa,sCAA2B,CAAC;AA4BtD;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAerF;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAE9C;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CASjC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAyB/D"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration handling for HyperCLI SDK
|
|
3
|
+
* Priority: env vars > config file > defaults
|
|
4
|
+
*/
|
|
5
|
+
import { homedir } from 'os';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import { readFileSync, existsSync } from 'fs';
|
|
8
|
+
import { writeFileSync, mkdirSync, chmodSync } from 'fs';
|
|
9
|
+
export const CONFIG_DIR = join(homedir(), '.hypercli');
|
|
10
|
+
export const CONFIG_FILE = join(CONFIG_DIR, 'config');
|
|
11
|
+
export const DEFAULT_API_URL = 'https://api.hypercli.com';
|
|
12
|
+
export const DEFAULT_WS_URL = 'wss://api.hypercli.com';
|
|
13
|
+
export const WS_LOGS_PATH = '/orchestra/ws/logs'; // WebSocket path for job logs
|
|
14
|
+
// GHCR images
|
|
15
|
+
export const GHCR_IMAGES = 'ghcr.io/compute3ai/images';
|
|
16
|
+
export const COMFYUI_IMAGE = `${GHCR_IMAGES}/comfyui`;
|
|
17
|
+
/**
|
|
18
|
+
* Load config from ~/.hypercli/config
|
|
19
|
+
*/
|
|
20
|
+
function loadConfigFile() {
|
|
21
|
+
const config = {};
|
|
22
|
+
if (!existsSync(CONFIG_FILE)) {
|
|
23
|
+
return config;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const content = readFileSync(CONFIG_FILE, 'utf-8');
|
|
27
|
+
for (const line of content.split('\n')) {
|
|
28
|
+
const trimmed = line.trim();
|
|
29
|
+
if (trimmed && !trimmed.startsWith('#') && trimmed.includes('=')) {
|
|
30
|
+
const [key, ...valueParts] = trimmed.split('=');
|
|
31
|
+
config[key.trim()] = valueParts.join('=').trim();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// Ignore read errors
|
|
37
|
+
}
|
|
38
|
+
return config;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get config value: env var > config file > default
|
|
42
|
+
*/
|
|
43
|
+
export function getConfigValue(key, defaultValue) {
|
|
44
|
+
// Try environment variable first
|
|
45
|
+
const envVal = process.env[key];
|
|
46
|
+
if (envVal) {
|
|
47
|
+
return envVal;
|
|
48
|
+
}
|
|
49
|
+
// Try config file
|
|
50
|
+
const config = loadConfigFile();
|
|
51
|
+
const fileVal = config[key];
|
|
52
|
+
if (fileVal) {
|
|
53
|
+
return fileVal;
|
|
54
|
+
}
|
|
55
|
+
return defaultValue;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Get API key from env or config file
|
|
59
|
+
*/
|
|
60
|
+
export function getApiKey() {
|
|
61
|
+
return getConfigValue('HYPERCLI_API_KEY');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get API URL
|
|
65
|
+
*/
|
|
66
|
+
export function getApiUrl() {
|
|
67
|
+
return getConfigValue('HYPERCLI_API_URL', DEFAULT_API_URL) || DEFAULT_API_URL;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get WebSocket URL
|
|
71
|
+
*/
|
|
72
|
+
export function getWsUrl() {
|
|
73
|
+
const ws = getConfigValue('HYPERCLI_WS_URL');
|
|
74
|
+
if (ws) {
|
|
75
|
+
return ws;
|
|
76
|
+
}
|
|
77
|
+
// Derive from API URL
|
|
78
|
+
const apiUrl = getApiUrl();
|
|
79
|
+
return apiUrl.replace('https://', 'wss://').replace('http://', 'ws://');
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Save configuration to ~/.hypercli/config
|
|
83
|
+
*/
|
|
84
|
+
export function configure(apiKey, apiUrl) {
|
|
85
|
+
// Create directory if it doesn't exist
|
|
86
|
+
if (!existsSync(CONFIG_DIR)) {
|
|
87
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
88
|
+
}
|
|
89
|
+
// Load existing config
|
|
90
|
+
const config = loadConfigFile();
|
|
91
|
+
// Update values
|
|
92
|
+
config['HYPERCLI_API_KEY'] = apiKey;
|
|
93
|
+
if (apiUrl) {
|
|
94
|
+
config['HYPERCLI_API_URL'] = apiUrl;
|
|
95
|
+
}
|
|
96
|
+
// Write config file
|
|
97
|
+
const lines = Object.entries(config).map(([k, v]) => `${k}=${v}`);
|
|
98
|
+
writeFileSync(CONFIG_FILE, lines.join('\n') + '\n', 'utf-8');
|
|
99
|
+
// Set permissions to 0600 (owner read/write only)
|
|
100
|
+
try {
|
|
101
|
+
chmodSync(CONFIG_FILE, 0o600);
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// Ignore permission errors (Windows doesn't support chmod)
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEzD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAEtD,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAC1D,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAC;AACvD,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAC,CAAC,8BAA8B;AAEhF,cAAc;AACd,MAAM,CAAC,MAAM,WAAW,GAAG,2BAA2B,CAAC;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,WAAW,UAAU,CAAC;AAEtD;;GAEG;AACH,SAAS,cAAc;IACrB,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjE,MAAM,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAChD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qBAAqB;IACvB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,YAAqB;IAC/D,iCAAiC;IACjC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,kBAAkB;IAClB,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,cAAc,CAAC,kBAAkB,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,cAAc,CAAC,kBAAkB,EAAE,eAAe,CAAC,IAAI,eAAe,CAAC;AAChF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,MAAM,EAAE,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC7C,IAAI,EAAE,EAAE,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,sBAAsB;IACtB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,MAAe;IACvD,uCAAuC;IACvC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,uBAAuB;IACvB,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAEhC,gBAAgB;IAChB,MAAM,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC;IACpC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC;IACtC,CAAC;IAED,oBAAoB;IACpB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClE,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAE7D,kDAAkD;IAClD,IAAI,CAAC;QACH,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,2DAA2D;IAC7D,CAAC;AACH,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;aAEf,UAAU,EAAE,MAAM;aAClB,MAAM,EAAE,MAAM;gBADd,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM;CAMjC"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API error with status code and detail message
|
|
3
|
+
*/
|
|
4
|
+
export class APIError extends Error {
|
|
5
|
+
statusCode;
|
|
6
|
+
detail;
|
|
7
|
+
constructor(statusCode, detail) {
|
|
8
|
+
super(`API Error ${statusCode}: ${detail}`);
|
|
9
|
+
this.statusCode = statusCode;
|
|
10
|
+
this.detail = detail;
|
|
11
|
+
this.name = 'APIError';
|
|
12
|
+
Object.setPrototypeOf(this, APIError.prototype);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEf;IACA;IAFlB,YACkB,UAAkB,EAClB,MAAc;QAE9B,KAAK,CAAC,aAAa,UAAU,KAAK,MAAM,EAAE,CAAC,CAAC;QAH5B,eAAU,GAAV,UAAU,CAAQ;QAClB,WAAM,GAAN,MAAM,CAAQ;QAG9B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;CACF"}
|