@chusky/sdk 0.1.0
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/LICENSE +21 -0
- package/README.md +59 -0
- package/dist/client.d.ts +113 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +223 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +21 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +20 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/stream.d.ts +3 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +31 -0
- package/dist/stream.js.map +1 -0
- package/dist/types.d.ts +180 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/docs/api-contract.md +58 -0
- package/package.json +29 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Chusky contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Chusky TypeScript SDK
|
|
2
|
+
|
|
3
|
+
This package is the public developer boundary for Chusky. It is intentionally separate from the Telegram bot, Redis store, Composio credentials, and internal `CHUCK_*` tool names. Developers place their scoped `chsk_` project key in `CHUSKY_API_KEY`. On the self-hosted Oracle server only, `CHUSKY_PROJECT_KEY` is the private root/bootstrap credential used to provision those project keys.
|
|
4
|
+
|
|
5
|
+
```ts
|
|
6
|
+
import { Chusky } from "@chusky/sdk";
|
|
7
|
+
|
|
8
|
+
const chusky = new Chusky({ apiKey: process.env.CHUSKY_API_KEY!, baseUrl: process.env.CHUSKY_BASE_URL, userId: "customer_123" });
|
|
9
|
+
const thread = await chusky.threads.create();
|
|
10
|
+
|
|
11
|
+
for await (const event of chusky.threads.runs(thread.id).stream(
|
|
12
|
+
{ input: "Prepare a concise renewal brief." },
|
|
13
|
+
{ idempotencyKey: crypto.randomUUID() },
|
|
14
|
+
)) {
|
|
15
|
+
if (event.type === "run.delta") process.stdout.write(event.text);
|
|
16
|
+
if (event.type === "run.approval_required") {
|
|
17
|
+
// Present the exact approval to an authenticated human.
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Provisioning a project key
|
|
23
|
+
|
|
24
|
+
Run this only on a trusted backend or operator machine. Never expose the root
|
|
25
|
+
`CHUSKY_PROJECT_KEY` to a browser, developer, or end user.
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
import { createChuskyAdmin } from "@chusky/sdk";
|
|
29
|
+
const admin = createChuskyAdmin({ apiKey: process.env.CHUSKY_PROJECT_KEY!, baseUrl: process.env.CHUSKY_BASE_URL });
|
|
30
|
+
const project = await admin.projects.create({ name: "My App", scopes: ["*"] });
|
|
31
|
+
console.log(project.key); // save once; list() never returns it
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Dashboard self-service keys
|
|
35
|
+
|
|
36
|
+
A verified Chusky dashboard user can create up to 10 project keys from
|
|
37
|
+
**Developer API** in the dashboard. The raw `chsk_` secret appears only when a
|
|
38
|
+
key is created or rotated. Put that scoped value in the application's trusted
|
|
39
|
+
server environment:
|
|
40
|
+
|
|
41
|
+
```env
|
|
42
|
+
CHUSKY_API_KEY=chsk_...
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
The dashboard never exposes `CHUSKY_PROJECT_KEY`; that Oracle-only root secret
|
|
46
|
+
remains solely for trusted operator `/v1/admin/*` provisioning.
|
|
47
|
+
|
|
48
|
+
## Contract and security
|
|
49
|
+
|
|
50
|
+
- The SDK targets the versioned `/v1` Developer API described in [`docs/api-contract.md`](docs/api-contract.md). Do not point it at private `/cli/*` endpoints or use CLI device tokens as developer API keys.
|
|
51
|
+
- `CHUSKY_PROJECT_KEY` is root-only: use it with `chusky.projects.create()` to provision a scoped `chsk_` project key. A developer stores that scoped key as `CHUSKY_API_KEY` in their own server environment. Project secrets are returned once, persisted only as hashes, may be rotated or revoked, and must never be exposed in browser code.
|
|
52
|
+
- Durable POST operations should receive an `idempotencyKey`; retries only reuse a key for the exact same operation. Streaming run connections are intentionally not replayed: recover their persisted state through `get()` or `events()`.
|
|
53
|
+
- Approval decisions always require an authenticated end-user context in the server. The SDK must never auto-approve a tool call.
|
|
54
|
+
- `stream()` yields NDJSON events and supports `AbortSignal`, so consumers can stop a particular run without cancelling unrelated durable work.
|
|
55
|
+
- The machine-readable API contract is [`openapi.yaml`](openapi.yaml).
|
|
56
|
+
|
|
57
|
+
## Available resources
|
|
58
|
+
|
|
59
|
+
`projects`, `threads`, `runs`, `tasks`, `approvals`, `files`, `webhooks`, `audit`, and `usage` are available today. Files use short-lived, direct Cloudflare R2 URLs: create an upload intent, upload with the returned URL, call `files.complete()`, then request a download URL. Webhook subscriptions are stored encrypted and return their signing secret exactly once; delivery retries and dead-letter administration remain a server-operations concern.
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { Approval, AuditEvent, ChuskyClientOptions, CreateRunParams, CreateThreadParams, DeveloperProject, FileDownload, FileRecord, FileUpload, Page, RequestOptions, Run, RunEvent, RunStreamEvent, Task, Thread, Usage, Webhook, WebhookDelivery } from "./types.js";
|
|
2
|
+
export declare class Chusky {
|
|
3
|
+
readonly threads: ThreadsResource;
|
|
4
|
+
readonly tasks: TasksResource;
|
|
5
|
+
readonly approvals: ApprovalsResource;
|
|
6
|
+
readonly files: FilesResource;
|
|
7
|
+
readonly audit: AuditResource;
|
|
8
|
+
readonly webhooks: WebhooksResource;
|
|
9
|
+
readonly usage: UsageResource;
|
|
10
|
+
readonly projects: ProjectsResource;
|
|
11
|
+
private readonly baseUrl;
|
|
12
|
+
private readonly apiKey;
|
|
13
|
+
private readonly userId;
|
|
14
|
+
private readonly fetchImpl;
|
|
15
|
+
private readonly timeoutMs;
|
|
16
|
+
private readonly userAgent;
|
|
17
|
+
constructor(options: ChuskyClientOptions);
|
|
18
|
+
request<T>(path: string, init?: RequestInit, options?: RequestOptions): Promise<T>;
|
|
19
|
+
/** @internal Shared transport for resource streams. */
|
|
20
|
+
streamRequest(path: string, init: RequestInit, options?: RequestOptions): Promise<{
|
|
21
|
+
response: Response;
|
|
22
|
+
dispose: () => void;
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
/** Trusted-server client for provisioning project keys. */
|
|
26
|
+
export declare function createChuskyAdmin(options: Omit<ChuskyClientOptions, "userId"> & {
|
|
27
|
+
userId?: string;
|
|
28
|
+
}): Chusky;
|
|
29
|
+
export declare class ThreadsResource {
|
|
30
|
+
private readonly client;
|
|
31
|
+
constructor(client: Chusky);
|
|
32
|
+
create(params?: CreateThreadParams, options?: RequestOptions): Promise<Thread>;
|
|
33
|
+
get(threadId: string, options?: RequestOptions): Promise<Thread>;
|
|
34
|
+
list(params?: {
|
|
35
|
+
cursor?: string;
|
|
36
|
+
limit?: number;
|
|
37
|
+
}, options?: RequestOptions): Promise<Page<Thread>>;
|
|
38
|
+
runs(threadId: string): RunsResource;
|
|
39
|
+
}
|
|
40
|
+
export declare class RunsResource {
|
|
41
|
+
private readonly client;
|
|
42
|
+
private readonly threadId;
|
|
43
|
+
constructor(client: Chusky, threadId: string);
|
|
44
|
+
create(params: CreateRunParams, options?: RequestOptions): Promise<Run>;
|
|
45
|
+
get(runId: string, options?: RequestOptions): Promise<Run>;
|
|
46
|
+
list(params?: {
|
|
47
|
+
cursor?: string;
|
|
48
|
+
limit?: number;
|
|
49
|
+
}, options?: RequestOptions): Promise<Page<Run>>;
|
|
50
|
+
cancel(runId: string, options?: RequestOptions): Promise<Run>;
|
|
51
|
+
events(runId: string, after?: number, options?: RequestOptions): Promise<Page<RunEvent>>;
|
|
52
|
+
stream(params: Omit<CreateRunParams, "wait">, options?: RequestOptions): AsyncIterable<RunStreamEvent>;
|
|
53
|
+
}
|
|
54
|
+
export declare class TasksResource {
|
|
55
|
+
private readonly client;
|
|
56
|
+
constructor(client: Chusky);
|
|
57
|
+
get(taskId: string, options?: RequestOptions): Promise<Task>;
|
|
58
|
+
list(params?: {
|
|
59
|
+
cursor?: string;
|
|
60
|
+
limit?: number;
|
|
61
|
+
}, options?: RequestOptions): Promise<Page<Task>>;
|
|
62
|
+
}
|
|
63
|
+
export declare class ApprovalsResource {
|
|
64
|
+
private readonly client;
|
|
65
|
+
constructor(client: Chusky);
|
|
66
|
+
get(approvalId: string, options?: RequestOptions): Promise<Approval>;
|
|
67
|
+
decide(approvalId: string, decision: "approve" | "deny", options?: RequestOptions): Promise<Run>;
|
|
68
|
+
}
|
|
69
|
+
export declare class FilesResource {
|
|
70
|
+
private readonly client;
|
|
71
|
+
constructor(client: Chusky);
|
|
72
|
+
create(params: {
|
|
73
|
+
name: string;
|
|
74
|
+
contentType: string;
|
|
75
|
+
size: number;
|
|
76
|
+
}, options?: RequestOptions): Promise<FileUpload>;
|
|
77
|
+
complete(fileId: string, options?: RequestOptions): Promise<FileRecord>;
|
|
78
|
+
get(fileId: string, options?: RequestOptions): Promise<FileDownload>;
|
|
79
|
+
delete(fileId: string, options?: RequestOptions): Promise<void>;
|
|
80
|
+
}
|
|
81
|
+
export declare class AuditResource {
|
|
82
|
+
private readonly client;
|
|
83
|
+
constructor(client: Chusky);
|
|
84
|
+
list(after?: number, options?: RequestOptions): Promise<Page<AuditEvent>>;
|
|
85
|
+
}
|
|
86
|
+
export declare class WebhooksResource {
|
|
87
|
+
private readonly client;
|
|
88
|
+
constructor(client: Chusky);
|
|
89
|
+
create(url: string, options?: RequestOptions): Promise<Webhook>;
|
|
90
|
+
list(options?: RequestOptions): Promise<Page<Webhook>>;
|
|
91
|
+
deliveries(webhookId: string, options?: RequestOptions): Promise<Page<WebhookDelivery>>;
|
|
92
|
+
delete(webhookId: string, options?: RequestOptions): Promise<void>;
|
|
93
|
+
}
|
|
94
|
+
export declare class UsageResource {
|
|
95
|
+
private readonly client;
|
|
96
|
+
constructor(client: Chusky);
|
|
97
|
+
get(options?: RequestOptions): Promise<Usage>;
|
|
98
|
+
}
|
|
99
|
+
/** Root-key-only control plane for provisioning developer projects. */
|
|
100
|
+
export declare class ProjectsResource {
|
|
101
|
+
private readonly client;
|
|
102
|
+
constructor(client: Chusky);
|
|
103
|
+
create(params: {
|
|
104
|
+
name: string;
|
|
105
|
+
scopes?: string[];
|
|
106
|
+
}, options?: RequestOptions): Promise<DeveloperProject>;
|
|
107
|
+
list(options?: RequestOptions): Promise<Page<DeveloperProject>>;
|
|
108
|
+
audit(after?: number, options?: RequestOptions): Promise<Page<AuditEvent>>;
|
|
109
|
+
updateScopes(projectId: string, scopes: string[], options?: RequestOptions): Promise<DeveloperProject>;
|
|
110
|
+
rotateKey(projectId: string, options?: RequestOptions): Promise<DeveloperProject>;
|
|
111
|
+
revoke(projectId: string, options?: RequestOptions): Promise<void>;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { ChuskyAuthenticationError, ChuskyError, ChuskyRateLimitError } from "./errors.js";
|
|
2
|
+
import { readNdjson } from "./stream.js";
|
|
3
|
+
const DEFAULT_BASE_URL = "https://api.chusky.ai";
|
|
4
|
+
export class Chusky {
|
|
5
|
+
threads;
|
|
6
|
+
tasks;
|
|
7
|
+
approvals;
|
|
8
|
+
files;
|
|
9
|
+
audit;
|
|
10
|
+
webhooks;
|
|
11
|
+
usage;
|
|
12
|
+
projects;
|
|
13
|
+
baseUrl;
|
|
14
|
+
apiKey;
|
|
15
|
+
userId;
|
|
16
|
+
fetchImpl;
|
|
17
|
+
timeoutMs;
|
|
18
|
+
userAgent;
|
|
19
|
+
constructor(options) {
|
|
20
|
+
if (!options.apiKey.trim())
|
|
21
|
+
throw new ChuskyError("apiKey is required");
|
|
22
|
+
if (!options.userId.trim())
|
|
23
|
+
throw new ChuskyError("userId is required");
|
|
24
|
+
this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, "");
|
|
25
|
+
this.apiKey = options.apiKey;
|
|
26
|
+
this.userId = options.userId;
|
|
27
|
+
this.fetchImpl = options.fetch ?? globalThis.fetch;
|
|
28
|
+
this.timeoutMs = options.timeoutMs ?? 30_000;
|
|
29
|
+
this.userAgent = options.userAgent ?? "chusky-typescript/0.1.0";
|
|
30
|
+
this.threads = new ThreadsResource(this);
|
|
31
|
+
this.tasks = new TasksResource(this);
|
|
32
|
+
this.approvals = new ApprovalsResource(this);
|
|
33
|
+
this.files = new FilesResource(this);
|
|
34
|
+
this.audit = new AuditResource(this);
|
|
35
|
+
this.webhooks = new WebhooksResource(this);
|
|
36
|
+
this.usage = new UsageResource(this);
|
|
37
|
+
this.projects = new ProjectsResource(this);
|
|
38
|
+
}
|
|
39
|
+
async request(path, init = {}, options = {}) {
|
|
40
|
+
const controller = new AbortController();
|
|
41
|
+
const timer = setTimeout(() => controller.abort(new ChuskyError("Chusky request timed out")), this.timeoutMs);
|
|
42
|
+
const relayAbort = () => controller.abort(options.signal?.reason);
|
|
43
|
+
options.signal?.addEventListener("abort", relayAbort, { once: true });
|
|
44
|
+
try {
|
|
45
|
+
const headers = new Headers(init.headers);
|
|
46
|
+
headers.set("Authorization", `Bearer ${this.apiKey}`);
|
|
47
|
+
headers.set("X-Chusky-User-Id", this.userId);
|
|
48
|
+
headers.set("Accept", "application/json");
|
|
49
|
+
headers.set("User-Agent", this.userAgent);
|
|
50
|
+
if (init.body && !headers.has("Content-Type"))
|
|
51
|
+
headers.set("Content-Type", "application/json");
|
|
52
|
+
if (options.idempotencyKey)
|
|
53
|
+
headers.set("Idempotency-Key", options.idempotencyKey);
|
|
54
|
+
for (const [key, value] of new Headers(options.headers))
|
|
55
|
+
headers.set(key, value);
|
|
56
|
+
const response = await this.fetchImpl(`${this.baseUrl}/v1${path}`, { ...init, headers, signal: controller.signal });
|
|
57
|
+
if (!response.ok)
|
|
58
|
+
throw await toError(response);
|
|
59
|
+
if (response.status === 204)
|
|
60
|
+
return undefined;
|
|
61
|
+
return await response.json();
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
clearTimeout(timer);
|
|
65
|
+
options.signal?.removeEventListener("abort", relayAbort);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** @internal Shared transport for resource streams. */
|
|
69
|
+
async streamRequest(path, init, options = {}) {
|
|
70
|
+
const controller = new AbortController();
|
|
71
|
+
const timer = setTimeout(() => controller.abort(new ChuskyError("Chusky stream request timed out")), this.timeoutMs);
|
|
72
|
+
const relayAbort = () => controller.abort(options.signal?.reason);
|
|
73
|
+
options.signal?.addEventListener("abort", relayAbort, { once: true });
|
|
74
|
+
try {
|
|
75
|
+
const headers = new Headers(init.headers);
|
|
76
|
+
headers.set("Authorization", `Bearer ${this.apiKey}`);
|
|
77
|
+
headers.set("X-Chusky-User-Id", this.userId);
|
|
78
|
+
headers.set("Accept", "application/x-ndjson");
|
|
79
|
+
headers.set("User-Agent", this.userAgent);
|
|
80
|
+
headers.set("Content-Type", "application/json");
|
|
81
|
+
if (options.idempotencyKey)
|
|
82
|
+
headers.set("Idempotency-Key", options.idempotencyKey);
|
|
83
|
+
const response = await this.fetchImpl(`${this.baseUrl}/v1${path}`, { ...init, headers, signal: controller.signal });
|
|
84
|
+
if (!response.ok)
|
|
85
|
+
throw await toError(response);
|
|
86
|
+
return { response, dispose: () => options.signal?.removeEventListener("abort", relayAbort) };
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
options.signal?.removeEventListener("abort", relayAbort);
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
clearTimeout(timer);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/** Trusted-server client for provisioning project keys. */
|
|
98
|
+
export function createChuskyAdmin(options) {
|
|
99
|
+
return new Chusky({ ...options, userId: options.userId ?? "operator" });
|
|
100
|
+
}
|
|
101
|
+
export class ThreadsResource {
|
|
102
|
+
client;
|
|
103
|
+
constructor(client) {
|
|
104
|
+
this.client = client;
|
|
105
|
+
}
|
|
106
|
+
create(params = {}, options) { return this.client.request("/threads", { method: "POST", body: JSON.stringify(params) }, options); }
|
|
107
|
+
get(threadId, options) { return this.client.request(`/threads/${encodeURIComponent(threadId)}`, {}, options); }
|
|
108
|
+
list(params = {}, options) {
|
|
109
|
+
const query = new URLSearchParams();
|
|
110
|
+
if (params.cursor)
|
|
111
|
+
query.set("cursor", params.cursor);
|
|
112
|
+
if (params.limit)
|
|
113
|
+
query.set("limit", String(params.limit));
|
|
114
|
+
return this.client.request(`/threads${query.size ? `?${query}` : ""}`, {}, options);
|
|
115
|
+
}
|
|
116
|
+
runs(threadId) { return new RunsResource(this.client, threadId); }
|
|
117
|
+
}
|
|
118
|
+
export class RunsResource {
|
|
119
|
+
client;
|
|
120
|
+
threadId;
|
|
121
|
+
constructor(client, threadId) {
|
|
122
|
+
this.client = client;
|
|
123
|
+
this.threadId = threadId;
|
|
124
|
+
}
|
|
125
|
+
create(params, options) { return this.client.request(`/threads/${encodeURIComponent(this.threadId)}/runs`, { method: "POST", body: JSON.stringify(params) }, options); }
|
|
126
|
+
get(runId, options) { return this.client.request(`/threads/${encodeURIComponent(this.threadId)}/runs/${encodeURIComponent(runId)}`, {}, options); }
|
|
127
|
+
list(params = {}, options) { const query = new URLSearchParams(); if (params.cursor)
|
|
128
|
+
query.set("cursor", params.cursor); if (params.limit)
|
|
129
|
+
query.set("limit", String(params.limit)); return this.client.request(`/threads/${encodeURIComponent(this.threadId)}/runs${query.size ? `?${query}` : ""}`, {}, options); }
|
|
130
|
+
cancel(runId, options) { return this.client.request(`/threads/${encodeURIComponent(this.threadId)}/runs/${encodeURIComponent(runId)}/cancel`, { method: "POST", body: "{}" }, options); }
|
|
131
|
+
events(runId, after, options) { return this.client.request(`/threads/${encodeURIComponent(this.threadId)}/runs/${encodeURIComponent(runId)}/events${after ? `?after=${after}` : ""}`, {}, options); }
|
|
132
|
+
async *stream(params, options = {}) {
|
|
133
|
+
const { response, dispose } = await this.client.streamRequest(`/threads/${encodeURIComponent(this.threadId)}/runs/stream`, { method: "POST", body: JSON.stringify(params) }, options);
|
|
134
|
+
try {
|
|
135
|
+
yield* readNdjson(response.body);
|
|
136
|
+
}
|
|
137
|
+
finally {
|
|
138
|
+
dispose();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export class TasksResource {
|
|
143
|
+
client;
|
|
144
|
+
constructor(client) {
|
|
145
|
+
this.client = client;
|
|
146
|
+
}
|
|
147
|
+
get(taskId, options) { return this.client.request(`/tasks/${encodeURIComponent(taskId)}`, {}, options); }
|
|
148
|
+
list(params = {}, options) { const q = new URLSearchParams(); if (params.cursor)
|
|
149
|
+
q.set("cursor", params.cursor); if (params.limit)
|
|
150
|
+
q.set("limit", String(params.limit)); return this.client.request(`/tasks${q.size ? `?${q}` : ""}`, {}, options); }
|
|
151
|
+
}
|
|
152
|
+
export class ApprovalsResource {
|
|
153
|
+
client;
|
|
154
|
+
constructor(client) {
|
|
155
|
+
this.client = client;
|
|
156
|
+
}
|
|
157
|
+
get(approvalId, options) { return this.client.request(`/approvals/${encodeURIComponent(approvalId)}`, {}, options); }
|
|
158
|
+
decide(approvalId, decision, options) { return this.client.request(`/approvals/${encodeURIComponent(approvalId)}`, { method: "POST", body: JSON.stringify({ decision }) }, options); }
|
|
159
|
+
}
|
|
160
|
+
export class FilesResource {
|
|
161
|
+
client;
|
|
162
|
+
constructor(client) {
|
|
163
|
+
this.client = client;
|
|
164
|
+
}
|
|
165
|
+
create(params, options) { return this.client.request("/files", { method: "POST", body: JSON.stringify(params) }, options); }
|
|
166
|
+
complete(fileId, options) { return this.client.request(`/files/${encodeURIComponent(fileId)}/complete`, { method: "POST", body: "{}" }, options); }
|
|
167
|
+
get(fileId, options) { return this.client.request(`/files/${encodeURIComponent(fileId)}`, {}, options); }
|
|
168
|
+
delete(fileId, options) { return this.client.request(`/files/${encodeURIComponent(fileId)}`, { method: "DELETE" }, options); }
|
|
169
|
+
}
|
|
170
|
+
export class AuditResource {
|
|
171
|
+
client;
|
|
172
|
+
constructor(client) {
|
|
173
|
+
this.client = client;
|
|
174
|
+
}
|
|
175
|
+
list(after, options) { return this.client.request(`/audit-events${after ? `?after=${after}` : ""}`, {}, options); }
|
|
176
|
+
}
|
|
177
|
+
export class WebhooksResource {
|
|
178
|
+
client;
|
|
179
|
+
constructor(client) {
|
|
180
|
+
this.client = client;
|
|
181
|
+
}
|
|
182
|
+
create(url, options) { return this.client.request("/webhooks", { method: "POST", body: JSON.stringify({ url }) }, options); }
|
|
183
|
+
list(options) { return this.client.request("/webhooks", {}, options); }
|
|
184
|
+
deliveries(webhookId, options) { return this.client.request(`/webhooks/${encodeURIComponent(webhookId)}/deliveries`, {}, options); }
|
|
185
|
+
delete(webhookId, options) { return this.client.request(`/webhooks/${encodeURIComponent(webhookId)}`, { method: "DELETE" }, options); }
|
|
186
|
+
}
|
|
187
|
+
export class UsageResource {
|
|
188
|
+
client;
|
|
189
|
+
constructor(client) {
|
|
190
|
+
this.client = client;
|
|
191
|
+
}
|
|
192
|
+
get(options) { return this.client.request("/usage", {}, options); }
|
|
193
|
+
}
|
|
194
|
+
/** Root-key-only control plane for provisioning developer projects. */
|
|
195
|
+
export class ProjectsResource {
|
|
196
|
+
client;
|
|
197
|
+
constructor(client) {
|
|
198
|
+
this.client = client;
|
|
199
|
+
}
|
|
200
|
+
create(params, options) { return this.client.request("/admin/projects", { method: "POST", body: JSON.stringify(params) }, options); }
|
|
201
|
+
list(options) { return this.client.request("/admin/projects", {}, options); }
|
|
202
|
+
audit(after, options) { return this.client.request(`/admin/audit-events${after ? `?after=${after}` : ""}`, {}, options); }
|
|
203
|
+
updateScopes(projectId, scopes, options) { return this.client.request(`/admin/projects/${encodeURIComponent(projectId)}`, { method: "PATCH", body: JSON.stringify({ scopes }) }, options); }
|
|
204
|
+
rotateKey(projectId, options) { return this.client.request(`/admin/projects/${encodeURIComponent(projectId)}/rotate-key`, { method: "POST", body: "{}" }, options); }
|
|
205
|
+
revoke(projectId, options) { return this.client.request(`/admin/projects/${encodeURIComponent(projectId)}`, { method: "DELETE" }, options); }
|
|
206
|
+
}
|
|
207
|
+
async function toError(response) {
|
|
208
|
+
const requestId = response.headers.get("x-request-id") ?? undefined;
|
|
209
|
+
const retryAfter = Number(response.headers.get("retry-after") ?? "") || undefined;
|
|
210
|
+
let body;
|
|
211
|
+
try {
|
|
212
|
+
body = await response.json();
|
|
213
|
+
}
|
|
214
|
+
catch { /* non-JSON error response */ }
|
|
215
|
+
const message = body?.error?.message ?? `Chusky API returned HTTP ${response.status}`;
|
|
216
|
+
const details = { status: response.status, code: body?.error?.code, requestId };
|
|
217
|
+
if (response.status === 401 || response.status === 403)
|
|
218
|
+
return new ChuskyAuthenticationError(message, details);
|
|
219
|
+
if (response.status === 429)
|
|
220
|
+
return new ChuskyRateLimitError(message, { ...details, retryAfter });
|
|
221
|
+
return new ChuskyError(message, details);
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare class ChuskyError extends Error {
|
|
2
|
+
readonly status?: number;
|
|
3
|
+
readonly code?: string;
|
|
4
|
+
readonly requestId?: string;
|
|
5
|
+
constructor(message: string, options?: {
|
|
6
|
+
status?: number;
|
|
7
|
+
code?: string;
|
|
8
|
+
requestId?: string;
|
|
9
|
+
cause?: unknown;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
export declare class ChuskyAuthenticationError extends ChuskyError {
|
|
13
|
+
constructor(message: string, options?: ConstructorParameters<typeof ChuskyError>[1]);
|
|
14
|
+
}
|
|
15
|
+
export declare class ChuskyRateLimitError extends ChuskyError {
|
|
16
|
+
readonly retryAfter?: number;
|
|
17
|
+
constructor(message: string, options?: ConstructorParameters<typeof ChuskyError>[1] & {
|
|
18
|
+
retryAfter?: number;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO;CAOnH;AAED,qBAAa,yBAA0B,SAAQ,WAAW;gBAC5C,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAM;CACxF;AAED,qBAAa,oBAAqB,SAAQ,WAAW;IACnD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;gBACjB,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAO;CAClH"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export class ChuskyError extends Error {
|
|
2
|
+
status;
|
|
3
|
+
code;
|
|
4
|
+
requestId;
|
|
5
|
+
constructor(message, options = {}) {
|
|
6
|
+
super(message, { cause: options.cause });
|
|
7
|
+
this.name = "ChuskyError";
|
|
8
|
+
this.status = options.status;
|
|
9
|
+
this.code = options.code;
|
|
10
|
+
this.requestId = options.requestId;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class ChuskyAuthenticationError extends ChuskyError {
|
|
14
|
+
constructor(message, options = {}) { super(message, options); this.name = "ChuskyAuthenticationError"; }
|
|
15
|
+
}
|
|
16
|
+
export class ChuskyRateLimitError extends ChuskyError {
|
|
17
|
+
retryAfter;
|
|
18
|
+
constructor(message, options = {}) { super(message, options); this.name = "ChuskyRateLimitError"; this.retryAfter = options.retryAfter; }
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,MAAM,CAAU;IAChB,IAAI,CAAU;IACd,SAAS,CAAU;IAE5B,YAAY,OAAe,EAAE,UAAmF,EAAE;QAChH,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,WAAW;IACxD,YAAY,OAAe,EAAE,UAAwD,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC,CAAC,CAAC;CAC/J;AAED,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IAC1C,UAAU,CAAU;IAC7B,YAAY,OAAe,EAAE,UAAkF,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;CAC1N"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { Chusky, createChuskyAdmin, ThreadsResource, RunsResource, TasksResource, ApprovalsResource, FilesResource, AuditResource, WebhooksResource, UsageResource, ProjectsResource } from "./client.js";
|
|
2
|
+
export { ChuskyError, ChuskyAuthenticationError, ChuskyRateLimitError } from "./errors.js";
|
|
3
|
+
export type { Approval, AuditEvent, ChuskyClientOptions, CreateRunParams, CreateThreadParams, DeveloperProject, FileDownload, FileRecord, FileUpload, JsonObject, Page, RequestOptions, Run, RunEvent, RunStreamEvent, Task, Thread, Usage, Webhook, WebhookDelivery } from "./types.js";
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1M,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC3F,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { Chusky, createChuskyAdmin, ThreadsResource, RunsResource, TasksResource, ApprovalsResource, FilesResource, AuditResource, WebhooksResource, UsageResource, ProjectsResource } from "./client.js";
|
|
2
|
+
export { ChuskyError, ChuskyAuthenticationError, ChuskyRateLimitError } from "./errors.js";
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1M,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/stream.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAEA,qFAAqF;AACrF,wBAAuB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAoB9F"}
|
package/dist/stream.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ChuskyError } from "./errors.js";
|
|
2
|
+
/** Parses NDJSON so a stream works in Node, browsers, workers, and edge runtimes. */
|
|
3
|
+
export async function* readNdjson(body) {
|
|
4
|
+
if (!body)
|
|
5
|
+
throw new ChuskyError("Chusky returned an empty stream response");
|
|
6
|
+
const reader = body.getReader();
|
|
7
|
+
const decoder = new TextDecoder();
|
|
8
|
+
let pending = "";
|
|
9
|
+
try {
|
|
10
|
+
while (true) {
|
|
11
|
+
const { value, done } = await reader.read();
|
|
12
|
+
pending += decoder.decode(value, { stream: !done });
|
|
13
|
+
let newline;
|
|
14
|
+
while ((newline = pending.indexOf("\n")) >= 0) {
|
|
15
|
+
const line = pending.slice(0, newline).trim();
|
|
16
|
+
pending = pending.slice(newline + 1);
|
|
17
|
+
if (line)
|
|
18
|
+
yield JSON.parse(line);
|
|
19
|
+
}
|
|
20
|
+
if (done)
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
const finalLine = pending.trim();
|
|
24
|
+
if (finalLine)
|
|
25
|
+
yield JSON.parse(finalLine);
|
|
26
|
+
}
|
|
27
|
+
finally {
|
|
28
|
+
reader.releaseLock();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,qFAAqF;AACrF,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,UAAU,CAAI,IAAuC;IAC1E,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,WAAW,CAAC,0CAA0C,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YACpD,IAAI,OAAe,CAAC;YACpB,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC9C,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBACrC,IAAI,IAAI;oBAAE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;YACxC,CAAC;YACD,IAAI,IAAI;gBAAE,MAAM;QAClB,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,SAAS;YAAE,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAM,CAAC;IAClD,CAAC;YAAS,CAAC;QAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IAAC,CAAC;AACrC,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
export type JsonObject = Record<string, unknown>;
|
|
2
|
+
export interface RequestOptions {
|
|
3
|
+
/** Cancels this request without cancelling other Chusky work. */
|
|
4
|
+
signal?: AbortSignal | null;
|
|
5
|
+
/** Required for POST operations that create or change durable state. */
|
|
6
|
+
idempotencyKey?: string;
|
|
7
|
+
/** Additional headers, useful for tracing or a staged API version. */
|
|
8
|
+
headers?: HeadersInit;
|
|
9
|
+
}
|
|
10
|
+
export interface Page<T> {
|
|
11
|
+
data: T[];
|
|
12
|
+
nextCursor?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface FileUpload {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
contentType: string;
|
|
18
|
+
size: number;
|
|
19
|
+
status: "pending" | "available" | "rejected";
|
|
20
|
+
uploadUrl: string;
|
|
21
|
+
expiresAt: string;
|
|
22
|
+
}
|
|
23
|
+
export interface FileDownload {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
contentType: string;
|
|
27
|
+
size: number;
|
|
28
|
+
status: "pending" | "available" | "rejected";
|
|
29
|
+
downloadUrl: string;
|
|
30
|
+
expiresAt: string;
|
|
31
|
+
}
|
|
32
|
+
export interface FileRecord {
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
contentType: string;
|
|
36
|
+
size: number;
|
|
37
|
+
status: "pending" | "available" | "rejected";
|
|
38
|
+
}
|
|
39
|
+
export interface AuditEvent {
|
|
40
|
+
id: string;
|
|
41
|
+
action: string;
|
|
42
|
+
requestId: string;
|
|
43
|
+
status: number;
|
|
44
|
+
at: number;
|
|
45
|
+
}
|
|
46
|
+
export interface Webhook {
|
|
47
|
+
id: string;
|
|
48
|
+
url: string;
|
|
49
|
+
createdAt: string;
|
|
50
|
+
secret?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface WebhookDelivery {
|
|
53
|
+
id: string;
|
|
54
|
+
status: "queued" | "delivering" | "delivered" | "failed";
|
|
55
|
+
attempts: number;
|
|
56
|
+
lastError?: string;
|
|
57
|
+
createdAt: string;
|
|
58
|
+
deliveredAt?: string;
|
|
59
|
+
}
|
|
60
|
+
export interface DeveloperProject {
|
|
61
|
+
id: string;
|
|
62
|
+
name: string;
|
|
63
|
+
keyPrefix: string;
|
|
64
|
+
scopes: string[];
|
|
65
|
+
createdAt: string;
|
|
66
|
+
revokedAt?: string;
|
|
67
|
+
key?: string;
|
|
68
|
+
}
|
|
69
|
+
export interface Usage {
|
|
70
|
+
messages: number;
|
|
71
|
+
cost: number;
|
|
72
|
+
files: {
|
|
73
|
+
count: number;
|
|
74
|
+
declaredBytes: number;
|
|
75
|
+
available: number;
|
|
76
|
+
};
|
|
77
|
+
runs: {
|
|
78
|
+
count: number;
|
|
79
|
+
active: number;
|
|
80
|
+
};
|
|
81
|
+
tasks: {
|
|
82
|
+
count: number;
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export interface Thread {
|
|
86
|
+
id: string;
|
|
87
|
+
externalId?: string;
|
|
88
|
+
metadata: JsonObject;
|
|
89
|
+
createdAt: string;
|
|
90
|
+
updatedAt: string;
|
|
91
|
+
}
|
|
92
|
+
export interface CreateThreadParams {
|
|
93
|
+
externalId?: string;
|
|
94
|
+
metadata?: JsonObject;
|
|
95
|
+
}
|
|
96
|
+
export interface Run {
|
|
97
|
+
id: string;
|
|
98
|
+
threadId: string;
|
|
99
|
+
status: "queued" | "running" | "requires_approval" | "completed" | "failed" | "cancelled";
|
|
100
|
+
input: string;
|
|
101
|
+
output?: string;
|
|
102
|
+
taskId?: string;
|
|
103
|
+
approvalId?: string;
|
|
104
|
+
error?: {
|
|
105
|
+
code: string;
|
|
106
|
+
message: string;
|
|
107
|
+
};
|
|
108
|
+
createdAt: string;
|
|
109
|
+
updatedAt: string;
|
|
110
|
+
}
|
|
111
|
+
export interface CreateRunParams {
|
|
112
|
+
input: string;
|
|
113
|
+
metadata?: JsonObject;
|
|
114
|
+
/** Wait for a terminal result. Use stream() for token-level progress. */
|
|
115
|
+
wait?: boolean;
|
|
116
|
+
}
|
|
117
|
+
export interface Task {
|
|
118
|
+
id: string;
|
|
119
|
+
status: "queued" | "running" | "blocked" | "completed" | "failed" | "cancelled";
|
|
120
|
+
title: string;
|
|
121
|
+
objective: string;
|
|
122
|
+
checkpoint?: string;
|
|
123
|
+
nextAction?: string;
|
|
124
|
+
result?: string;
|
|
125
|
+
error?: string;
|
|
126
|
+
createdAt: string;
|
|
127
|
+
updatedAt: string;
|
|
128
|
+
}
|
|
129
|
+
export interface Approval {
|
|
130
|
+
id: string;
|
|
131
|
+
status: "pending" | "approved" | "denied" | "consumed";
|
|
132
|
+
toolSlug: string;
|
|
133
|
+
args: JsonObject;
|
|
134
|
+
expiresAt: string;
|
|
135
|
+
}
|
|
136
|
+
export type RunStreamEvent = {
|
|
137
|
+
type: "run.started";
|
|
138
|
+
run: Run;
|
|
139
|
+
} | {
|
|
140
|
+
type: "run.delta";
|
|
141
|
+
runId: string;
|
|
142
|
+
text: string;
|
|
143
|
+
} | {
|
|
144
|
+
type: "run.tool_started";
|
|
145
|
+
runId: string;
|
|
146
|
+
toolSlug: string;
|
|
147
|
+
} | {
|
|
148
|
+
type: "run.approval_required";
|
|
149
|
+
run: Run;
|
|
150
|
+
approval: Approval;
|
|
151
|
+
} | {
|
|
152
|
+
type: "run.completed";
|
|
153
|
+
run: Run;
|
|
154
|
+
} | {
|
|
155
|
+
type: "run.failed";
|
|
156
|
+
run: Run;
|
|
157
|
+
error: {
|
|
158
|
+
code: string;
|
|
159
|
+
message: string;
|
|
160
|
+
};
|
|
161
|
+
} | {
|
|
162
|
+
type: "run.cancelled";
|
|
163
|
+
run: Run;
|
|
164
|
+
};
|
|
165
|
+
export interface RunEvent {
|
|
166
|
+
id: string;
|
|
167
|
+
type: string;
|
|
168
|
+
at: number;
|
|
169
|
+
text?: string;
|
|
170
|
+
}
|
|
171
|
+
export interface ChuskyClientOptions {
|
|
172
|
+
apiKey: string;
|
|
173
|
+
/** Stable developer-owned identifier for the end user whose Chusky state is used. */
|
|
174
|
+
userId: string;
|
|
175
|
+
baseUrl?: string;
|
|
176
|
+
fetch?: typeof globalThis.fetch;
|
|
177
|
+
timeoutMs?: number;
|
|
178
|
+
userAgent?: string;
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Chusky Developer API v1 contract
|
|
2
|
+
|
|
3
|
+
This document is the implementation contract for the SDK. It prevents the existing CLI service protocol from becoming an accidental public API.
|
|
4
|
+
|
|
5
|
+
## Principles
|
|
6
|
+
|
|
7
|
+
1. `/v1` is the only public prefix. Existing `/cli`, Telegram, channel, and workflow routes remain private transport endpoints.
|
|
8
|
+
2. `CHUSKY_PROJECT_KEY` is the root bootstrap/admin key on the Oracle server. It creates project-scoped `chsk_` keys, returned once and persisted as hashes only. A developer puts their scoped key in `CHUSKY_API_KEY` in their own server environment. An end-user identifier is supplied in `X-Chusky-User-Id` and is never inferred from a phone number, display name, or channel identity. The first-party web dashboard may use its Better Auth session cookie for user-scoped `/v1` resources; API keys remain server-side credentials.
|
|
9
|
+
3. Project keys are revocable and scope-enforced (`resource:read`, `resource:write`, `resource:*`, or `*`). Never use CLI device tokens for the SDK.
|
|
10
|
+
4. Durable mutations accept `Idempotency-Key`; persist method, normalized path, body digest, response status/body, and a 24-hour replay window. A reused key with a different body returns `409 idempotency_mismatch`. Live streaming is not replayable; reconnect through persisted run state and events.
|
|
11
|
+
5. Every response has `X-Request-Id`. Errors use `{ "error": { "code", "message", "requestId" } }`.
|
|
12
|
+
6. Runs may require approval. The server persists the exact pending action and binds a decision to its end user; neither the SDK nor a webhook payload is authorization.
|
|
13
|
+
|
|
14
|
+
## Dashboard API-key management
|
|
15
|
+
|
|
16
|
+
Verified Better Auth users may manage only their own projects through
|
|
17
|
+
`/v1/account/projects`. These cookie-authenticated routes create, list, update
|
|
18
|
+
scopes, rotate, and revoke project keys. They never accept or return
|
|
19
|
+
`CHUSKY_PROJECT_KEY`; raw `chsk_` keys are returned only by create and rotation.
|
|
20
|
+
Each verified account may have at most 10 active projects. Root-created projects
|
|
21
|
+
remain ownerless operator records and are not visible through account routes.
|
|
22
|
+
|
|
23
|
+
## Resources
|
|
24
|
+
|
|
25
|
+
| Resource | Endpoint | Notes |
|
|
26
|
+
| --- | --- | --- |
|
|
27
|
+
| Threads | `POST /v1/threads`, `GET /v1/threads/:threadId` | Conversation/memory boundary for one explicit SDK end user. |
|
|
28
|
+
| Projects | `GET/POST /v1/admin/projects`, `DELETE /v1/admin/projects/:id` | Root-key-only project provisioning and key revocation. |
|
|
29
|
+
| Dashboard projects | `GET/POST /v1/account/projects`, `PATCH /v1/account/projects/:id`, `POST .../rotate-key`, `DELETE .../:id` | Better-Auth-cookie-only, verified-user project management. |
|
|
30
|
+
| Runs | `POST /v1/threads/:threadId/runs` | Executes durable Chusky work. `wait` is bounded. |
|
|
31
|
+
| Run stream | `POST /v1/threads/:threadId/runs/stream` | `application/x-ndjson`; emits typed run events. |
|
|
32
|
+
| Runs | `GET /v1/threads/:threadId/runs/:runId`, `POST .../cancel` | Cancellation is request-specific; durable task results stay queryable. |
|
|
33
|
+
| Tasks | `GET /v1/tasks`, `GET /v1/tasks/:taskId` | Cursor pagination, project and end-user authorized. |
|
|
34
|
+
| Approvals | `GET /v1/approvals/:approvalId`, `POST /v1/approvals/:approvalId` | Decision body is `{ decision: "approve" | "deny" }`. |
|
|
35
|
+
| Files | `POST /v1/files`, `POST /v1/files/:fileId/complete`, `GET/DELETE /v1/files/:fileId` | Direct R2 upload URLs are short-lived; a `HEAD` verification must succeed before download; deletion is owner-scoped. |
|
|
36
|
+
| Webhooks | `POST /v1/webhooks`, `GET /v1/webhooks`, `DELETE /v1/webhooks/:id` | HTTPS-only subscription; secret is encrypted at rest and returned only on creation. |
|
|
37
|
+
| Delivery history | `GET /v1/webhooks/:id/deliveries` | Bounded, safe delivery status for operational diagnosis; delete disables future deliveries. |
|
|
38
|
+
| Observability | `GET /v1/audit-events`, `GET /v1/usage` | Bounded per-user audit trail and current usage snapshot. |
|
|
39
|
+
|
|
40
|
+
## Event stream
|
|
41
|
+
|
|
42
|
+
The stream contains one JSON object per line and may emit:
|
|
43
|
+
|
|
44
|
+
`run.started`, `run.delta`, `run.tool_started`, `run.approval_required`, `run.completed`, `run.failed`.
|
|
45
|
+
|
|
46
|
+
Events are append-only for a single run. The terminal `completed` or `failed` event includes the canonical run record. Connections can be retried by querying the run; do not assume an interrupted stream means work failed.
|
|
47
|
+
|
|
48
|
+
## Required test cases before enabling `/v1`
|
|
49
|
+
|
|
50
|
+
- API-key malformed, revoked, expired, wrong-project, wrong-scope, and hash-only storage.
|
|
51
|
+
- Idempotency replay and mismatch; retry after a lost response.
|
|
52
|
+
- Cross-tenant thread/task/approval denial, including guessed IDs.
|
|
53
|
+
- Stream ordering, client cancellation, backend failure, and reconnect-to-run status.
|
|
54
|
+
- Approval expiry, exact-action binding, double-click race, and user/project mismatch.
|
|
55
|
+
- Cursor tampering and stable pagination under new writes.
|
|
56
|
+
- Per-project/end-user rate and spend limits, `429`/`Retry-After`, audit records, and request IDs.
|
|
57
|
+
- R2 intent expiry, content-type/size verification, pending-file download denial, and tenant isolation.
|
|
58
|
+
- Webhook signature verification, retry/backoff, endpoint disablement, and dead-letter replay.
|
package/package.json
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@chusky/sdk",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "TypeScript SDK for Chusky's developer API.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"main": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": ["dist", "README.md", "docs", "LICENSE"],
|
|
17
|
+
"engines": { "node": ">=18" },
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc -p tsconfig.json",
|
|
20
|
+
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
21
|
+
"test": "tsx --test --test-concurrency=1 tests/*.test.ts",
|
|
22
|
+
"prepublishOnly": "npm run typecheck && npm run build && npm test"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@types/node": "^22.0.0",
|
|
26
|
+
"tsx": "^4.19.0",
|
|
27
|
+
"typescript": "^5.7.0"
|
|
28
|
+
}
|
|
29
|
+
}
|