@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.
Files changed (82) hide show
  1. package/README.md +205 -0
  2. package/dist/agent.d.ts +63 -0
  3. package/dist/agent.d.ts.map +1 -0
  4. package/dist/agent.js +128 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/agents.d.ts +245 -0
  7. package/dist/agents.d.ts.map +1 -0
  8. package/dist/agents.js +602 -0
  9. package/dist/agents.js.map +1 -0
  10. package/dist/billing.d.ts +38 -0
  11. package/dist/billing.d.ts.map +1 -0
  12. package/dist/billing.js +53 -0
  13. package/dist/billing.js.map +1 -0
  14. package/dist/claw.d.ts +83 -0
  15. package/dist/claw.d.ts.map +1 -0
  16. package/dist/claw.js +148 -0
  17. package/dist/claw.js.map +1 -0
  18. package/dist/client.d.ts +62 -0
  19. package/dist/client.d.ts.map +1 -0
  20. package/dist/client.js +82 -0
  21. package/dist/client.js.map +1 -0
  22. package/dist/config.d.ts +28 -0
  23. package/dist/config.d.ts.map +1 -0
  24. package/dist/config.js +107 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/errors.d.ts +9 -0
  27. package/dist/errors.d.ts.map +1 -0
  28. package/dist/errors.js +15 -0
  29. package/dist/errors.js.map +1 -0
  30. package/dist/files.d.ts +60 -0
  31. package/dist/files.d.ts.map +1 -0
  32. package/dist/files.js +128 -0
  33. package/dist/files.js.map +1 -0
  34. package/dist/gateway.d.ts +216 -0
  35. package/dist/gateway.d.ts.map +1 -0
  36. package/dist/gateway.js +1306 -0
  37. package/dist/gateway.js.map +1 -0
  38. package/dist/http.d.ts +41 -0
  39. package/dist/http.d.ts.map +1 -0
  40. package/dist/http.js +206 -0
  41. package/dist/http.js.map +1 -0
  42. package/dist/index.d.ts +22 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +36 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/instances.d.ts +93 -0
  47. package/dist/instances.d.ts.map +1 -0
  48. package/dist/instances.js +196 -0
  49. package/dist/instances.js.map +1 -0
  50. package/dist/job/base.d.ts +80 -0
  51. package/dist/job/base.d.ts.map +1 -0
  52. package/dist/job/base.js +200 -0
  53. package/dist/job/base.js.map +1 -0
  54. package/dist/job/comfyui.d.ts +75 -0
  55. package/dist/job/comfyui.d.ts.map +1 -0
  56. package/dist/job/comfyui.js +454 -0
  57. package/dist/job/comfyui.js.map +1 -0
  58. package/dist/job/gradio.d.ts +48 -0
  59. package/dist/job/gradio.d.ts.map +1 -0
  60. package/dist/job/gradio.js +90 -0
  61. package/dist/job/gradio.js.map +1 -0
  62. package/dist/jobs.d.ts +132 -0
  63. package/dist/jobs.d.ts.map +1 -0
  64. package/dist/jobs.js +244 -0
  65. package/dist/jobs.js.map +1 -0
  66. package/dist/keys.d.ts +39 -0
  67. package/dist/keys.d.ts.map +1 -0
  68. package/dist/keys.js +53 -0
  69. package/dist/keys.js.map +1 -0
  70. package/dist/logs.d.ts +54 -0
  71. package/dist/logs.d.ts.map +1 -0
  72. package/dist/logs.js +256 -0
  73. package/dist/logs.js.map +1 -0
  74. package/dist/renders.d.ts +168 -0
  75. package/dist/renders.d.ts.map +1 -0
  76. package/dist/renders.js +228 -0
  77. package/dist/renders.js.map +1 -0
  78. package/dist/user.d.ts +20 -0
  79. package/dist/user.d.ts.map +1 -0
  80. package/dist/user.js +23 -0
  81. package/dist/user.js.map +1 -0
  82. 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"}
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claw.js","sourceRoot":"","sources":["../src/claw.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -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":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * API error with status code and detail message
3
+ */
4
+ export declare class APIError extends Error {
5
+ readonly statusCode: number;
6
+ readonly detail: string;
7
+ constructor(statusCode: number, detail: string);
8
+ }
9
+ //# sourceMappingURL=errors.d.ts.map
@@ -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"}