@hypercli.com/sdk 0.9.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 +629 -0
- package/dist/acp-driver.d.ts +72 -0
- package/dist/acp-driver.d.ts.map +1 -0
- package/dist/acp-driver.js +147 -0
- package/dist/acp-driver.js.map +1 -0
- package/dist/acp-pool.d.ts +70 -0
- package/dist/acp-pool.d.ts.map +1 -0
- package/dist/acp-pool.js +181 -0
- package/dist/acp-pool.js.map +1 -0
- package/dist/acp.d.ts +179 -0
- package/dist/acp.d.ts.map +1 -0
- package/dist/acp.js +487 -0
- package/dist/acp.js.map +1 -0
- package/dist/agent-persona.d.ts +68 -0
- package/dist/agent-persona.d.ts.map +1 -0
- package/dist/agent-persona.js +78 -0
- package/dist/agent-persona.js.map +1 -0
- package/dist/agent-slots.d.ts +18 -0
- package/dist/agent-slots.d.ts.map +1 -0
- package/dist/agent-slots.js +24 -0
- package/dist/agent-slots.js.map +1 -0
- package/dist/agent-urls.d.ts +47 -0
- package/dist/agent-urls.d.ts.map +1 -0
- package/dist/agent-urls.js +178 -0
- package/dist/agent-urls.js.map +1 -0
- package/dist/agent.d.ts +482 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +926 -0
- package/dist/agent.js.map +1 -0
- package/dist/agents.d.ts +1452 -0
- package/dist/agents.d.ts.map +1 -0
- package/dist/agents.js +4022 -0
- package/dist/agents.js.map +1 -0
- package/dist/billing.d.ts +72 -0
- package/dist/billing.d.ts.map +1 -0
- package/dist/billing.js +93 -0
- package/dist/billing.js.map +1 -0
- package/dist/browser-jobs.d.ts +24 -0
- package/dist/browser-jobs.d.ts.map +1 -0
- package/dist/browser-jobs.js +209 -0
- package/dist/browser-jobs.js.map +1 -0
- package/dist/browser.d.ts +41 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +57 -0
- package/dist/browser.js.map +1 -0
- package/dist/buzz-activity.d.ts +169 -0
- package/dist/buzz-activity.d.ts.map +1 -0
- package/dist/buzz-activity.js +844 -0
- package/dist/buzz-activity.js.map +1 -0
- package/dist/channels.d.ts +99 -0
- package/dist/channels.d.ts.map +1 -0
- package/dist/channels.js +27 -0
- package/dist/channels.js.map +1 -0
- package/dist/chat-integrations.d.ts +44 -0
- package/dist/chat-integrations.d.ts.map +1 -0
- package/dist/chat-integrations.js +138 -0
- package/dist/chat-integrations.js.map +1 -0
- package/dist/client.d.ts +88 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +144 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +44 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +192 -0
- package/dist/config.js.map +1 -0
- package/dist/connectors.d.ts +80 -0
- package/dist/connectors.d.ts.map +1 -0
- package/dist/connectors.js +2 -0
- package/dist/connectors.js.map +1 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +26 -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/http.d.ts +56 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +362 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -0
- package/dist/instances.d.ts +94 -0
- package/dist/instances.d.ts.map +1 -0
- package/dist/instances.js +197 -0
- package/dist/instances.js.map +1 -0
- package/dist/integrations.d.ts +111 -0
- package/dist/integrations.d.ts.map +1 -0
- package/dist/integrations.js +206 -0
- package/dist/integrations.js.map +1 -0
- package/dist/job/base.d.ts +86 -0
- package/dist/job/base.d.ts.map +1 -0
- package/dist/job/base.js +206 -0
- package/dist/job/base.js.map +1 -0
- package/dist/job/comfyui.d.ts +259 -0
- package/dist/job/comfyui.d.ts.map +1 -0
- package/dist/job/comfyui.js +1563 -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/job-codecs.d.ts +66 -0
- package/dist/job-codecs.d.ts.map +1 -0
- package/dist/job-codecs.js +132 -0
- package/dist/job-codecs.js.map +1 -0
- package/dist/jobs.d.ts +148 -0
- package/dist/jobs.d.ts.map +1 -0
- package/dist/jobs.js +480 -0
- package/dist/jobs.js.map +1 -0
- package/dist/keys.d.ts +99 -0
- package/dist/keys.d.ts.map +1 -0
- package/dist/keys.js +145 -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/managed-context.d.ts +20 -0
- package/dist/managed-context.d.ts.map +1 -0
- package/dist/managed-context.js +95 -0
- package/dist/managed-context.js.map +1 -0
- package/dist/mcp.d.ts +7 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +8 -0
- package/dist/mcp.js.map +1 -0
- package/dist/memory.d.ts +87 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +79 -0
- package/dist/memory.js.map +1 -0
- package/dist/models.d.ts +15 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +19 -0
- package/dist/models.js.map +1 -0
- package/dist/openclaw-control-ui-origin.d.ts +23 -0
- package/dist/openclaw-control-ui-origin.d.ts.map +1 -0
- package/dist/openclaw-control-ui-origin.js +53 -0
- package/dist/openclaw-control-ui-origin.js.map +1 -0
- package/dist/renders.d.ts +187 -0
- package/dist/renders.d.ts.map +1 -0
- package/dist/renders.js +360 -0
- package/dist/renders.js.map +1 -0
- package/dist/routines.d.ts +59 -0
- package/dist/routines.d.ts.map +1 -0
- package/dist/routines.js +135 -0
- package/dist/routines.js.map +1 -0
- package/dist/runners.d.ts +61 -0
- package/dist/runners.d.ts.map +1 -0
- package/dist/runners.js +127 -0
- package/dist/runners.js.map +1 -0
- package/dist/sessions.d.ts +280 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +292 -0
- package/dist/sessions.js.map +1 -0
- package/dist/skills.d.ts +170 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +2 -0
- package/dist/skills.js.map +1 -0
- package/dist/user.d.ts +78 -0
- package/dist/user.d.ts.map +1 -0
- package/dist/user.js +143 -0
- package/dist/user.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/dist/voice-session.d.ts +66 -0
- package/dist/voice-session.d.ts.map +1 -0
- package/dist/voice-session.js +366 -0
- package/dist/voice-session.js.map +1 -0
- package/dist/voice-transcription-session.d.ts +64 -0
- package/dist/voice-transcription-session.d.ts.map +1 -0
- package/dist/voice-transcription-session.js +228 -0
- package/dist/voice-transcription-session.js.map +1 -0
- package/dist/voice.d.ts +62 -0
- package/dist/voice.d.ts.map +1 -0
- package/dist/voice.js +134 -0
- package/dist/voice.js.map +1 -0
- package/dist/workspace-tomd.d.ts +61 -0
- package/dist/workspace-tomd.d.ts.map +1 -0
- package/dist/workspace-tomd.js +177 -0
- package/dist/workspace-tomd.js.map +1 -0
- package/dist/workspaces.d.ts +255 -0
- package/dist/workspaces.d.ts.map +1 -0
- package/dist/workspaces.js +653 -0
- package/dist/workspaces.js.map +1 -0
- package/package.json +115 -0
- package/runtime/config-require.browser.js +4 -0
- package/runtime/config-require.d.ts +2 -0
- package/runtime/config-require.node.js +8 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { jobFromDict, jobListPageFromDict, jobMetricsFromDict, lifecycleEventFromDict, normalizeTags, } from './job-codecs.js';
|
|
2
|
+
function getBrowserWebSocket() {
|
|
3
|
+
const ctor = globalThis.WebSocket;
|
|
4
|
+
if (!ctor)
|
|
5
|
+
throw new Error('WebSocket is not available in this browser environment');
|
|
6
|
+
return ctor;
|
|
7
|
+
}
|
|
8
|
+
function productWsBase(http) {
|
|
9
|
+
return http.base
|
|
10
|
+
.replace('https://', 'wss://')
|
|
11
|
+
.replace('http://', 'ws://')
|
|
12
|
+
.replace(/\/api$/, '');
|
|
13
|
+
}
|
|
14
|
+
function buildListParams(options = {}) {
|
|
15
|
+
const params = {};
|
|
16
|
+
if (options.state) {
|
|
17
|
+
params.state = options.state;
|
|
18
|
+
}
|
|
19
|
+
const normalizedTags = normalizeTags(options.tags);
|
|
20
|
+
if (normalizedTags && normalizedTags.length > 0) {
|
|
21
|
+
params.tag = normalizedTags;
|
|
22
|
+
}
|
|
23
|
+
if (options.page !== undefined) {
|
|
24
|
+
params.page = options.page;
|
|
25
|
+
}
|
|
26
|
+
if (options.pageSize !== undefined) {
|
|
27
|
+
params.page_size = options.pageSize;
|
|
28
|
+
}
|
|
29
|
+
return params;
|
|
30
|
+
}
|
|
31
|
+
function addSocketListener(socket, type, listener) {
|
|
32
|
+
if (socket.addEventListener) {
|
|
33
|
+
socket.addEventListener(type, listener);
|
|
34
|
+
return () => socket.removeEventListener?.(type, listener);
|
|
35
|
+
}
|
|
36
|
+
const key = `on${type}`;
|
|
37
|
+
const previous = socket[key];
|
|
38
|
+
const wrapped = (event) => {
|
|
39
|
+
previous?.(event);
|
|
40
|
+
listener(event);
|
|
41
|
+
};
|
|
42
|
+
socket[key] = wrapped;
|
|
43
|
+
return () => {
|
|
44
|
+
if (socket[key] === wrapped)
|
|
45
|
+
socket[key] = previous ?? null;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function frameText(data) {
|
|
49
|
+
if (typeof data === 'string')
|
|
50
|
+
return data;
|
|
51
|
+
if (data instanceof ArrayBuffer)
|
|
52
|
+
return new TextDecoder().decode(data);
|
|
53
|
+
if (ArrayBuffer.isView(data)) {
|
|
54
|
+
return new TextDecoder().decode(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));
|
|
55
|
+
}
|
|
56
|
+
throw new Error('unsupported WebSocket frame type');
|
|
57
|
+
}
|
|
58
|
+
async function* websocketJsonStream(url, parseFrame) {
|
|
59
|
+
const SocketCtor = getBrowserWebSocket();
|
|
60
|
+
const socket = new SocketCtor(url);
|
|
61
|
+
const queue = [];
|
|
62
|
+
const cleanups = [];
|
|
63
|
+
let done = false;
|
|
64
|
+
let failed = null;
|
|
65
|
+
let pending = null;
|
|
66
|
+
let rejectPending = null;
|
|
67
|
+
const resolveNext = (value) => {
|
|
68
|
+
if (pending) {
|
|
69
|
+
pending({ done: false, value });
|
|
70
|
+
pending = null;
|
|
71
|
+
rejectPending = null;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
queue.push(value);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const fail = (error) => {
|
|
78
|
+
failed = error;
|
|
79
|
+
done = true;
|
|
80
|
+
if (rejectPending) {
|
|
81
|
+
rejectPending(error);
|
|
82
|
+
pending = null;
|
|
83
|
+
rejectPending = null;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
cleanups.push(addSocketListener(socket, 'message', (event) => {
|
|
87
|
+
try {
|
|
88
|
+
const parsed = JSON.parse(frameText(event.data));
|
|
89
|
+
const value = parseFrame(parsed);
|
|
90
|
+
if (value !== undefined)
|
|
91
|
+
resolveNext(value);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
fail(error instanceof Error ? error : new Error('invalid WebSocket frame'));
|
|
95
|
+
}
|
|
96
|
+
}));
|
|
97
|
+
cleanups.push(addSocketListener(socket, 'close', () => {
|
|
98
|
+
done = true;
|
|
99
|
+
if (pending) {
|
|
100
|
+
pending({ done: true, value: undefined });
|
|
101
|
+
pending = null;
|
|
102
|
+
rejectPending = null;
|
|
103
|
+
}
|
|
104
|
+
}));
|
|
105
|
+
cleanups.push(addSocketListener(socket, 'error', () => {
|
|
106
|
+
fail(new Error('WebSocket connection failed'));
|
|
107
|
+
}));
|
|
108
|
+
try {
|
|
109
|
+
while (!done || queue.length > 0) {
|
|
110
|
+
if (failed)
|
|
111
|
+
throw failed;
|
|
112
|
+
const value = queue.shift();
|
|
113
|
+
if (value) {
|
|
114
|
+
yield value;
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
const result = await new Promise((resolve, reject) => {
|
|
118
|
+
pending = resolve;
|
|
119
|
+
rejectPending = reject;
|
|
120
|
+
});
|
|
121
|
+
if (result.done)
|
|
122
|
+
break;
|
|
123
|
+
yield result.value;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
for (const cleanup of cleanups)
|
|
128
|
+
cleanup();
|
|
129
|
+
socket.close();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Browser-safe GPU jobs API. It intentionally omits Node-only exec/shell
|
|
134
|
+
* helpers, but keeps REST job operations and lifecycle/metrics WebSockets.
|
|
135
|
+
*/
|
|
136
|
+
export class BrowserJobs {
|
|
137
|
+
http;
|
|
138
|
+
constructor(http) {
|
|
139
|
+
this.http = http;
|
|
140
|
+
}
|
|
141
|
+
async list(stateOrOptions, tags) {
|
|
142
|
+
let options;
|
|
143
|
+
if (typeof stateOrOptions === 'string') {
|
|
144
|
+
options = { state: stateOrOptions, tags };
|
|
145
|
+
}
|
|
146
|
+
else if (stateOrOptions) {
|
|
147
|
+
options = stateOrOptions;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
options = tags ? { tags } : {};
|
|
151
|
+
}
|
|
152
|
+
return (await this.listPage(options)).jobs;
|
|
153
|
+
}
|
|
154
|
+
async listPage(options = {}) {
|
|
155
|
+
const data = await this.http.get('/api/jobs', buildListParams(options));
|
|
156
|
+
if (typeof data === 'object' && data && Array.isArray(data.jobs)) {
|
|
157
|
+
return jobListPageFromDict(data, options.page ?? 1, options.pageSize ?? 50);
|
|
158
|
+
}
|
|
159
|
+
const jobs = (data || []).map(jobFromDict);
|
|
160
|
+
return {
|
|
161
|
+
jobs,
|
|
162
|
+
totalCount: jobs.length,
|
|
163
|
+
page: options.page ?? 1,
|
|
164
|
+
pageSize: options.pageSize ?? (jobs.length || 50),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
async get(jobId) {
|
|
168
|
+
const data = await this.http.get(`/api/jobs/${jobId}`);
|
|
169
|
+
return jobFromDict(data);
|
|
170
|
+
}
|
|
171
|
+
async cancel(jobId) {
|
|
172
|
+
return await this.http.delete(`/api/jobs/${jobId}`);
|
|
173
|
+
}
|
|
174
|
+
async extend(jobId, runtime) {
|
|
175
|
+
const data = await this.http.patch(`/api/jobs/${jobId}`, { runtime });
|
|
176
|
+
return jobFromDict(data);
|
|
177
|
+
}
|
|
178
|
+
async logs(jobId) {
|
|
179
|
+
const data = await this.http.get(`/api/jobs/${jobId}/logs`);
|
|
180
|
+
return data.logs || '';
|
|
181
|
+
}
|
|
182
|
+
async metrics(jobId) {
|
|
183
|
+
const stream = this.metricsStream(jobId, { interval: 60 });
|
|
184
|
+
const result = await stream.next();
|
|
185
|
+
await stream.return(undefined).catch(() => undefined);
|
|
186
|
+
if (result.done)
|
|
187
|
+
throw new Error('metrics stream closed before first snapshot');
|
|
188
|
+
return result.value;
|
|
189
|
+
}
|
|
190
|
+
async *metricsStream(jobId, options = {}) {
|
|
191
|
+
const interval = options.interval ?? 5;
|
|
192
|
+
const job = await this.get(jobId);
|
|
193
|
+
const url = `${productWsBase(this.http)}/orchestra/ws/metrics/jobs/${encodeURIComponent(job.jobKey)}?interval=${encodeURIComponent(String(interval))}`;
|
|
194
|
+
yield* websocketJsonStream(url, (parsed) => {
|
|
195
|
+
if (parsed?.event === 'metrics_error') {
|
|
196
|
+
throw new Error(String(parsed.detail || 'metrics stream failed'));
|
|
197
|
+
}
|
|
198
|
+
if (parsed?.event !== 'metrics_snapshot')
|
|
199
|
+
return undefined;
|
|
200
|
+
return jobMetricsFromDict(parsed.data || {});
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
async *lifecycleStream(jobId) {
|
|
204
|
+
const job = await this.get(jobId);
|
|
205
|
+
const url = `${productWsBase(this.http)}/orchestra/ws/lifecycle/${encodeURIComponent(job.jobKey)}`;
|
|
206
|
+
yield* websocketJsonStream(url, lifecycleEventFromDict);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=browser-jobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-jobs.js","sourceRoot":"","sources":["../src/browser-jobs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Billing } from './billing.js';
|
|
2
|
+
import { BrowserJobs } from './browser-jobs.js';
|
|
3
|
+
import { Instances } from './instances.js';
|
|
4
|
+
import { KeysAPI } from './keys.js';
|
|
5
|
+
import { HyperAgent } from './agent.js';
|
|
6
|
+
import { UserAPI } from './user.js';
|
|
7
|
+
import { VoiceAPI } from './voice.js';
|
|
8
|
+
import { WorkspacesAPI } from './workspaces.js';
|
|
9
|
+
import { SessionsAPI } from './sessions.js';
|
|
10
|
+
export * from './sessions.js';
|
|
11
|
+
export * from './chat-integrations.js';
|
|
12
|
+
export { buildAdditionalMcpEnv } from './mcp.js';
|
|
13
|
+
export { DEFAULT_RUNNER_CONTROL_URL, defaultRunnerControlUrl } from './agent-urls.js';
|
|
14
|
+
export { BrowserJobs } from './browser-jobs.js';
|
|
15
|
+
export { API_KEY_BASELINE_FAMILIES, issueApiKeyFromJwt, type ApiKey, type ApiKeyBaselineFamily, type ApiKeyBaselineValue, type CreateApiKeyOptions, type IssueApiKeyFromJwtOptions, } from './keys.js';
|
|
16
|
+
export type { Job, JobLifecycleEvent, JobListPage, JobMetrics, } from './job-codecs.js';
|
|
17
|
+
export interface BrowserHyperCLIOptions {
|
|
18
|
+
apiUrl: string;
|
|
19
|
+
token: string;
|
|
20
|
+
agentApiKey?: string;
|
|
21
|
+
agentDev?: boolean;
|
|
22
|
+
agentsApiBaseUrl?: string;
|
|
23
|
+
timeout?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Browser-safe HyperCLI client for JWT-authenticated frontend apps.
|
|
27
|
+
*/
|
|
28
|
+
export declare class BrowserHyperCLI {
|
|
29
|
+
private readonly http;
|
|
30
|
+
readonly billing: Billing;
|
|
31
|
+
readonly jobs: BrowserJobs;
|
|
32
|
+
readonly agent: HyperAgent;
|
|
33
|
+
readonly user: UserAPI;
|
|
34
|
+
readonly instances: Instances;
|
|
35
|
+
readonly keys: KeysAPI;
|
|
36
|
+
readonly voice: VoiceAPI;
|
|
37
|
+
readonly workspaces: WorkspacesAPI;
|
|
38
|
+
readonly sessions: SessionsAPI;
|
|
39
|
+
constructor(options: BrowserHyperCLIOptions);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,KAAK,MAAM,EACX,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,GAAG,EACH,iBAAiB,EACjB,WAAW,EACX,UAAU,GACX,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAOD;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAElC,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,IAAI,EAAE,WAAW,CAAC;IAClC,SAAgB,KAAK,EAAE,UAAU,CAAC;IAClC,SAAgB,IAAI,EAAE,OAAO,CAAC;IAC9B,SAAgB,SAAS,EAAE,SAAS,CAAC;IACrC,SAAgB,IAAI,EAAE,OAAO,CAAC;IAC9B,SAAgB,KAAK,EAAE,QAAQ,CAAC;IAChC,SAAgB,UAAU,EAAE,aAAa,CAAC;IAC1C,SAAgB,QAAQ,EAAE,WAAW,CAAC;gBAE1B,OAAO,EAAE,sBAAsB;CA0B5C"}
|
package/dist/browser.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Billing } from './billing.js';
|
|
2
|
+
import { BrowserJobs } from './browser-jobs.js';
|
|
3
|
+
import { getAgentsApiBaseUrl } from './config.js';
|
|
4
|
+
import { resolveAgentsApiBase } from './agent-urls.js';
|
|
5
|
+
import { HTTPClient } from './http.js';
|
|
6
|
+
import { Instances } from './instances.js';
|
|
7
|
+
import { KeysAPI } from './keys.js';
|
|
8
|
+
import { HyperAgent } from './agent.js';
|
|
9
|
+
import { UserAPI } from './user.js';
|
|
10
|
+
import { VoiceAPI } from './voice.js';
|
|
11
|
+
import { WorkspacesAPI } from './workspaces.js';
|
|
12
|
+
import { SessionsAPI } from './sessions.js';
|
|
13
|
+
export * from './sessions.js';
|
|
14
|
+
export * from './chat-integrations.js';
|
|
15
|
+
export { buildAdditionalMcpEnv } from './mcp.js';
|
|
16
|
+
export { DEFAULT_RUNNER_CONTROL_URL, defaultRunnerControlUrl } from './agent-urls.js';
|
|
17
|
+
export { BrowserJobs } from './browser-jobs.js';
|
|
18
|
+
export { API_KEY_BASELINE_FAMILIES, issueApiKeyFromJwt, } from './keys.js';
|
|
19
|
+
function normalizeApiUrl(apiUrl) {
|
|
20
|
+
const trimmed = apiUrl.trim().replace(/\/+$/, '');
|
|
21
|
+
return trimmed.endsWith('/api') ? trimmed.slice(0, -4) : trimmed;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Browser-safe HyperCLI client for JWT-authenticated frontend apps.
|
|
25
|
+
*/
|
|
26
|
+
export class BrowserHyperCLI {
|
|
27
|
+
http;
|
|
28
|
+
billing;
|
|
29
|
+
jobs;
|
|
30
|
+
agent;
|
|
31
|
+
user;
|
|
32
|
+
instances;
|
|
33
|
+
keys;
|
|
34
|
+
voice;
|
|
35
|
+
workspaces;
|
|
36
|
+
sessions;
|
|
37
|
+
constructor(options) {
|
|
38
|
+
const apiUrl = normalizeApiUrl(options.apiUrl);
|
|
39
|
+
this.http = new HTTPClient(apiUrl, options.token, options.timeout);
|
|
40
|
+
this.billing = new Billing(this.http);
|
|
41
|
+
this.jobs = new BrowserJobs(this.http);
|
|
42
|
+
const agentsApiBaseUrl = resolveAgentsApiBase(options.agentsApiBaseUrl ||
|
|
43
|
+
getAgentsApiBaseUrl(Boolean(options.agentDev), apiUrl), true);
|
|
44
|
+
const agentsHttp = new HTTPClient(agentsApiBaseUrl, options.agentApiKey ?? options.token, options.timeout);
|
|
45
|
+
this.sessions = new SessionsAPI(agentsHttp);
|
|
46
|
+
this.agent = new HyperAgent(this.http, options.agentApiKey ?? options.token, Boolean(options.agentDev), agentsApiBaseUrl);
|
|
47
|
+
this.user = new UserAPI(this.http, this.http, agentsHttp);
|
|
48
|
+
this.instances = new Instances(this.http);
|
|
49
|
+
this.keys = new KeysAPI(this.http);
|
|
50
|
+
this.voice = new VoiceAPI(agentsHttp);
|
|
51
|
+
this.workspaces = new WorkspacesAPI(options.agentApiKey ?? options.token, {
|
|
52
|
+
agentsApiBase: agentsApiBaseUrl,
|
|
53
|
+
timeout: options.timeout,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import type { Agent, Deployments } from './agents.js';
|
|
2
|
+
export declare const BUZZ_OBSERVER_EVENT_KIND = 24200;
|
|
3
|
+
export interface BuzzObserverFrame {
|
|
4
|
+
seq: number;
|
|
5
|
+
timestamp: string;
|
|
6
|
+
kind: string;
|
|
7
|
+
agentIndex: number | null;
|
|
8
|
+
channelId: string | null;
|
|
9
|
+
sessionId: string | null;
|
|
10
|
+
turnId: string | null;
|
|
11
|
+
startedAt?: string;
|
|
12
|
+
payload: unknown;
|
|
13
|
+
}
|
|
14
|
+
export interface BuzzActivitySubscription {
|
|
15
|
+
close(): void;
|
|
16
|
+
}
|
|
17
|
+
export interface BuzzActivityHandlers {
|
|
18
|
+
onFrame(frame: BuzzObserverFrame): void;
|
|
19
|
+
onHistoryEnd?(): void;
|
|
20
|
+
onClose?(event: {
|
|
21
|
+
code: number;
|
|
22
|
+
reason: string;
|
|
23
|
+
}): void;
|
|
24
|
+
onError?(error: Error): void;
|
|
25
|
+
signal?: AbortSignal;
|
|
26
|
+
/**
|
|
27
|
+
* Owner key as nsec/hex string or raw bytes; omit to use the agent secret.
|
|
28
|
+
* SECURITY: never pass an owner key in browser/webview contexts — the owner
|
|
29
|
+
* identity is not throwaway like the per-agent key. This option exists for
|
|
30
|
+
* trusted local clients (e.g. a desktop keychain) where the key never
|
|
31
|
+
* leaves the device; it is used only for local key derivation and is never
|
|
32
|
+
* transmitted, persisted, or logged.
|
|
33
|
+
*/
|
|
34
|
+
ownerSecretKey?: string | Uint8Array;
|
|
35
|
+
/** Relay history lookback in seconds; default 86400. */
|
|
36
|
+
sinceSeconds?: number;
|
|
37
|
+
/** REQ limit; default 500. */
|
|
38
|
+
limit?: number;
|
|
39
|
+
}
|
|
40
|
+
export interface BuzzEnvConfig {
|
|
41
|
+
relayUrl: string;
|
|
42
|
+
ownerPubHex: string;
|
|
43
|
+
}
|
|
44
|
+
type BuzzDeploymentsClient = Pick<Deployments, 'get' | 'secret'>;
|
|
45
|
+
/**
|
|
46
|
+
* Decode an agent/owner secret given as an nsec bech32 string, a 64-char hex
|
|
47
|
+
* string, or a raw 32-byte array. Throws on anything else.
|
|
48
|
+
*/
|
|
49
|
+
export declare function decodeBuzzSecret(nsecOrHex: string | Uint8Array): Uint8Array;
|
|
50
|
+
/** Derive the x-only hex pubkey for a 32-byte secret key. */
|
|
51
|
+
export declare function buzzPublicKeyHex(secretKey: Uint8Array): string;
|
|
52
|
+
/**
|
|
53
|
+
* NIP-44 v2 conversation key: HKDF-extract(salt "nip44-v2", ECDH shared x).
|
|
54
|
+
* Symmetric across the (owner, agent) pair.
|
|
55
|
+
*/
|
|
56
|
+
export declare function buzzConversationKey(secretKey: Uint8Array, peerPubHex: string): Uint8Array;
|
|
57
|
+
/**
|
|
58
|
+
* Decrypt a NIP-44 v2 payload: base64 of [version=2][nonce32][ciphertext][mac32].
|
|
59
|
+
* Rejects non-v2 versions, bad MACs, bad lengths, and malformed padding.
|
|
60
|
+
*/
|
|
61
|
+
export declare function decryptBuzzPayload(conversationKey: Uint8Array, payload: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Resolve the Buzz relay URL and owner pubkey from a launch-config env map.
|
|
64
|
+
* Owner comes from `BUZZ_AUTH_TAG` (JSON `["auth", owner_pubkey_hex, ...]`,
|
|
65
|
+
* element [1]) with `BUZZ_ACP_AGENT_OWNER` (bare 64-hex) as fallback.
|
|
66
|
+
* Throws a clear "not Buzz-backed" error when no relay URL is present.
|
|
67
|
+
*/
|
|
68
|
+
export declare function resolveBuzzOwnerFromEnv(env: Record<string, unknown>): BuzzEnvConfig;
|
|
69
|
+
/**
|
|
70
|
+
* Subscribe to a Buzz-backed agent's observer telemetry stream.
|
|
71
|
+
*
|
|
72
|
+
* Resolves the agent, reads `BUZZ_RELAY_URL`/owner pubkey from its
|
|
73
|
+
* launch-config env, reveals the agent `BUZZ_PRIVATE_KEY`, then REQ-subscribes
|
|
74
|
+
* the relay for kind-24200 frames and decrypts them locally. Reconnects with
|
|
75
|
+
* bounded backoff (1s/2s/4s) resuming from the last accepted frame; gives up
|
|
76
|
+
* via `onClose`.
|
|
77
|
+
*/
|
|
78
|
+
export declare function subscribeBuzzActivity(deployments: BuzzDeploymentsClient, agentIdOrName: string, handlers: BuzzActivityHandlers): Promise<BuzzActivitySubscription>;
|
|
79
|
+
export type { BuzzDeploymentsClient };
|
|
80
|
+
/**
|
|
81
|
+
* Pinned route name for the legacy hyper-acp introspection listener. Current
|
|
82
|
+
* hosted Buzz launches use raw outbound ACP over `HYPER_ACP_WS_URL` and do not
|
|
83
|
+
* provision this route.
|
|
84
|
+
*/
|
|
85
|
+
export declare const HYPER_ACP_ROUTE_NAME = "hyper-acp";
|
|
86
|
+
/** Thrown when the agent's launch config has no `hyper-acp` edge route. */
|
|
87
|
+
export declare class BuzzActivityRouteUnavailableError extends Error {
|
|
88
|
+
constructor(message: string);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Soft-signal error emitted via `onError` when the in-pod stream skipped a
|
|
92
|
+
* lagging client ahead. Transient by definition — the subscription is alive.
|
|
93
|
+
*/
|
|
94
|
+
export declare class BuzzActivityGapError extends Error {
|
|
95
|
+
readonly dropped: number;
|
|
96
|
+
constructor(dropped: number);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Handler contract identical to the relay transport. No NIP-44 / owner
|
|
100
|
+
* resolution here: the deployment-provisioned app token replaces it.
|
|
101
|
+
*/
|
|
102
|
+
export interface BuzzActivityRouteHandlers {
|
|
103
|
+
onFrame(frame: BuzzObserverFrame): void;
|
|
104
|
+
onHistoryEnd?(): void;
|
|
105
|
+
onClose?(event: {
|
|
106
|
+
code: number;
|
|
107
|
+
reason: string;
|
|
108
|
+
}): void;
|
|
109
|
+
onError?(error: Error): void;
|
|
110
|
+
signal?: AbortSignal;
|
|
111
|
+
}
|
|
112
|
+
export interface BuzzActivityRouteTarget {
|
|
113
|
+
/** Fully derived edge WebSocket URL, for example `wss://hyper-acp-foo.agents.example/`. */
|
|
114
|
+
wsUrl: string;
|
|
115
|
+
/** In-pod port the route forwards to (the pinned 7799 today). */
|
|
116
|
+
port: number;
|
|
117
|
+
}
|
|
118
|
+
type BuzzRouteDeploymentsClient = Pick<Deployments, 'get' | 'secret'>;
|
|
119
|
+
/**
|
|
120
|
+
* Resolve the `hyper-acp` edge URL from an already-loaded Agent model.
|
|
121
|
+
* Host derivation mirrors the platform contract: prefix defaults to the route
|
|
122
|
+
* name on both sides, so `prefix` is `${prefix}-${agent.hostname}` and a bare
|
|
123
|
+
* prefix is the root host itself. Returns null when the route is absent or
|
|
124
|
+
* the agent hostname is not ready — callers use that to select the relay
|
|
125
|
+
* transport instead.
|
|
126
|
+
*/
|
|
127
|
+
export declare function resolveBuzzActivityRouteTarget(agent: Pick<Agent, 'routes' | 'hostname'>): BuzzActivityRouteTarget | null;
|
|
128
|
+
/**
|
|
129
|
+
* Subscribe to a legacy Buzz-backed agent's observer stream through the
|
|
130
|
+
* agent's `hyper-acp` WS route. Current hosted Buzz launches do not provision
|
|
131
|
+
* this observer route; the active path uses raw outbound ACP over
|
|
132
|
+
* `HYPER_ACP_WS_URL`.
|
|
133
|
+
*
|
|
134
|
+
* Auth is app-level and entirely in-band: the route is `auth: false` at the
|
|
135
|
+
* edge, so no platform JWT, cookie priming, or header tricks are involved.
|
|
136
|
+
* The token is the deployment-provisioned `HYPER_ACP_WS_TOKEN`; each
|
|
137
|
+
* connect attempt reveals the secret through the OpenClaw-style per-secret
|
|
138
|
+
* endpoint — fresh per attempt, with a launch-epoch freshness guard
|
|
139
|
+
* mirroring the OpenClaw gateway flow. After the WebSocket upgrade the client's FIRST text
|
|
140
|
+
* frame is exactly `{"type":"auth","token":...}`; the server answers exactly
|
|
141
|
+
* one `{"type":"auth_ok"}` text frame and then replays. A close with code
|
|
142
|
+
* 4401 before `auth_ok` means the token was rejected: terminal for the
|
|
143
|
+
* subscription — the retry loop is skipped and `onClose` fires immediately
|
|
144
|
+
* with that code/reason (consumers treat 4401 as no-reconnect).
|
|
145
|
+
*
|
|
146
|
+
* Token-fetch failures on the FIRST attempt (empty value, stale launch
|
|
147
|
+
* epoch, or a `secret()` APIError 401/403/404) reject this promise as-is —
|
|
148
|
+
* they are never converted to {@link BuzzActivityRouteUnavailableError}. On
|
|
149
|
+
* a mid-life reconnect they surface via `onError` and end the subscription
|
|
150
|
+
* with a terminal `onClose`.
|
|
151
|
+
*
|
|
152
|
+
* A recognizable protocol message (`replay_end`, `replay_gap`, or an
|
|
153
|
+
* observer-shaped frame) arriving BEFORE `auth_ok` is a protocol violation
|
|
154
|
+
* — the signature of a skewed deployment (backend secret present, pod
|
|
155
|
+
* missing the token). It surfaces exactly one `onError` per subscription
|
|
156
|
+
* and never touches the retry budget, history-end, or dedup state (so a
|
|
157
|
+
* wedged stream cannot look healthy); the socket stays open so a healed pod
|
|
158
|
+
* recovers on its own.
|
|
159
|
+
*
|
|
160
|
+
* Reconnects with bounded backoff (1s/2s/4s). The server's session log
|
|
161
|
+
* re-plays from disk on reconnect; overlap dedup on (timestamp, seq) makes
|
|
162
|
+
* duplicates a no-op. A served `replay_end` also resets the retry budget,
|
|
163
|
+
* the route analogue of the relay transport's EOSE reset. A
|
|
164
|
+
* `{"type":"replay_gap"}` frame surfaces as a soft
|
|
165
|
+
* {@link BuzzActivityGapError}; the stream stays alive.
|
|
166
|
+
*/
|
|
167
|
+
export declare function subscribeBuzzActivityRoute(deployments: BuzzRouteDeploymentsClient, agentIdOrName: string, handlers: BuzzActivityRouteHandlers): Promise<BuzzActivitySubscription>;
|
|
168
|
+
export type { BuzzRouteDeploymentsClient };
|
|
169
|
+
//# sourceMappingURL=buzz-activity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buzz-activity.d.ts","sourceRoot":"","sources":["../src/buzz-activity.ts"],"names":[],"mappings":"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"}
|