@chusky/sdk 0.2.0 → 0.3.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/CHANGELOG.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  Releases use semantic versioning and are tagged `sdk-vX.Y.Z`.
4
4
 
5
+ ## Unreleased
6
+
7
+ ## 0.3.1 - 2026-09-21
8
+
9
+ - Rewrote the SDK README with production setup, security, durability, approvals, missions, company workflows, and resource guidance.
10
+ - Added runnable TypeScript examples for quickstarts, streaming, governed agents, missions, approvals, departments, files, and webhooks.
11
+ - Included the examples directory in published packages.
12
+
13
+ ## 0.3.0 - 2026-09-21
14
+
15
+ - Added typed SDK resources for autonomous missions, proof/evidence verification, provider-event resume, replanning, context, departments, and outcome packages.
16
+ - Added matching authenticated CLI client methods and interactive commands for mission recovery, context, department handoffs, and outcome planning.
17
+ - Documented the shared autonomy contract and CLI parity.
18
+
5
19
  ## 0.2.0
6
20
 
7
21
  - Added typed `calls` and `meetings` resources.
@@ -9,10 +23,10 @@ Releases use semantic versioning and are tagged `sdk-vX.Y.Z`.
9
23
  - Added Recall meeting preparation, join, leave, context, and profile methods.
10
24
  - Added typed connected-app, reminder, recurring-job, memory, scratchpad, channel, and CLI-device resources.
11
25
  - Included `docs.json` and `openapi.yaml` in the published package.
12
-
13
- ## 0.1.2
14
-
15
- - Added typed resources for tools, skills, artifacts, videos, workers, channels, activity, and account operations.
16
- - Added durable `wait: false` runs, resumable budgets, direct R2 upload helpers, and binary artifact downloads.
17
- - Added server enforced tool policies, skill loading, task retry/cancel, and webhook delivery controls.
18
-
26
+
27
+ ## 0.1.2
28
+
29
+ - Added typed resources for tools, skills, artifacts, videos, workers, channels, activity, and account operations.
30
+ - Added durable `wait: false` runs, resumable budgets, direct R2 upload helpers, and binary artifact downloads.
31
+ - Added server enforced tool policies, skill loading, task retry/cancel, and webhook delivery controls.
32
+
package/README.md CHANGED
@@ -1,90 +1,377 @@
1
1
  # Chusky TypeScript SDK
2
2
 
3
- ## Documentation
3
+ The official TypeScript client for the Chusky Developer API.
4
4
 
5
- The complete Mintlify-style documentation is in [`docs/`](docs/index.mdx), including the quickstart, concepts, streaming, model selection, calls and live voice, Recall meetings, files, approvals, durable tasks, tools, skills, artifacts, video jobs, workers, channels, webhooks, security, errors, release operations, and production guidance. Embedded chat is documented in [`docs/embedded-chat.mdx`](docs/embedded-chat.mdx); import the browser element from `@chusky/sdk/widget` and keep the project key on your server. The Mintlify navigation configuration is [`docs.json`](docs.json).
5
+ Chusky gives applications a persistent, tool-using agent that can stream
6
+ responses, run durable work, use connected business applications, pause for
7
+ human approval, produce artifacts, and continue after restarts. The SDK is the
8
+ server-side boundary for those capabilities; it does not expose Redis,
9
+ Composio credentials, or Chusky's internal `CHUCK_*` tool implementations.
6
10
 
7
- 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. SDK applications use `CHUSKY_API_KEY`, containing their scoped `chsk_` API key. `CHUSKY_PROJECT_KEY` is used only by the self-hosted Chusky operator to provision those API keys; it is never an SDK application credential.
11
+ ## Install
12
+
13
+ ```bash
14
+ npm install @chusky/sdk
15
+ ```
16
+
17
+ Requirements: Node.js 18 or newer.
18
+
19
+ ## Five-minute quickstart
20
+
21
+ Create a project-scoped API key in the Chusky dashboard under **Developer API**
22
+ or provision one from a trusted operator environment. Then keep it on your
23
+ server:
24
+
25
+ ```env
26
+ CHUSKY_API_KEY=chsk_your_project_key
27
+ CHUSKY_BASE_URL=https://api.chusky.ai
28
+ ```
29
+
30
+ Never put `CHUSKY_API_KEY` in browser JavaScript, a mobile binary, a public
31
+ repository, or client-side environment variables.
8
32
 
9
33
  ```ts
10
34
  import { Chusky } from "@chusky/sdk";
11
35
 
12
- const chusky = new Chusky({ apiKey: process.env.CHUSKY_API_KEY!, baseUrl: process.env.CHUSKY_BASE_URL, userId: "customer_123" });
13
- const thread = await chusky.threads.create();
14
-
15
- for await (const event of chusky.threads.runs(thread.id).stream(
16
- { input: "Prepare a concise renewal brief." },
17
- { idempotencyKey: crypto.randomUUID() },
18
- )) {
19
- if (event.type === "run.delta") process.stdout.write(event.text);
20
- if (event.type === "run.approval_required") {
21
- // Present the exact approval to an authenticated human.
22
- }
36
+ const chusky = new Chusky({
37
+ apiKey: process.env.CHUSKY_API_KEY!,
38
+ baseUrl: process.env.CHUSKY_BASE_URL,
39
+ // Use your application's stable user or tenant identity. Do not use a
40
+ // secret, email address, or the root operator identity here.
41
+ userId: "customer_123",
42
+ });
43
+
44
+ const { thread, run } = await chusky.runs.create(
45
+ { input: "Prepare a concise renewal brief.", wait: false },
46
+ { idempotencyKey: "renewal-brief-customer-123-2026-09-21" },
47
+ );
48
+
49
+ const completed = await chusky.runs.wait(thread.id, run.id, {
50
+ timeoutMs: 120_000,
51
+ });
52
+
53
+ console.log(completed.status);
54
+ console.log(completed.output ?? "The run did not produce text output.");
55
+ ```
56
+
57
+ `userId` is an application-owned identity boundary. Chusky uses it to isolate
58
+ threads, runs, memories, approvals, files, tasks, reminders, connected
59
+ accounts, and durable work. Use the same stable value whenever that user
60
+ returns.
61
+
62
+ ## Examples
63
+
64
+ The [`examples/`](examples/) directory contains complete TypeScript examples
65
+ that can be adapted directly into a server application:
66
+
67
+ | Example | Shows |
68
+ | --- | --- |
69
+ | [`quickstart.ts`](examples/quickstart.ts) | Create a durable run and wait for completion |
70
+ | [`streaming.ts`](examples/streaming.ts) | Stream response deltas and handle approval events |
71
+ | [`company-agent.ts`](examples/company-agent.ts) | Use an agent template, policy, budget, and idempotency |
72
+ | [`mission.ts`](examples/mission.ts) | Run multi-step work with proof, evidence, and verification |
73
+ | [`approvals.ts`](examples/approvals.ts) | Present and decide a pending human approval |
74
+ | [`context-and-departments.ts`](examples/context-and-departments.ts) | Save shared context and create a typed department handoff |
75
+ | [`files.ts`](examples/files.ts) | Upload bytes through a short-lived storage intent |
76
+ | [`webhooks.ts`](examples/webhooks.ts) | Register a delivery endpoint and inspect deliveries |
77
+
78
+ Run an example from the SDK repository with `tsx`:
79
+
80
+ ```bash
81
+ CHUSKY_API_KEY=chsk_... npx tsx examples/quickstart.ts
82
+ ```
83
+
84
+ PowerShell:
85
+
86
+ ```powershell
87
+ $env:CHUSKY_API_KEY = "chsk_..."
88
+ npx tsx examples/quickstart.ts
89
+ ```
90
+
91
+ Examples make real API requests. Use a development project key and a test
92
+ identity when trying them.
93
+
94
+ ## The execution model
95
+
96
+ ```text
97
+ Your server
98
+ ↓
99
+ @chusky/sdk
100
+ ↓ authenticated /v1 API
101
+ Chusky runtime
102
+ ↓
103
+ agent loop → native tools / Composio / durable workflows
104
+ ↓
105
+ business result, artifact, webhook, or approval
106
+ ```
107
+
108
+ There are three useful execution modes:
109
+
110
+ 1. **Synchronous** — set `wait: true` when the result should return in the
111
+ request lifecycle and the work is short.
112
+ 2. **Durable** — set `wait: false` to receive a task-backed run immediately,
113
+ then use `runs.get()`, `runs.wait()`, `runs.events()`, `tasks.get()`, or a
114
+ webhook to observe it.
115
+ 3. **Streaming** — use `threads.runs(threadId).stream()` for incremental text
116
+ and approval events. Streaming is a delivery channel, not the source of
117
+ truth; persisted run state remains available through `get()` and `events()`.
118
+
119
+ ## Idempotency and retries
120
+
121
+ Use an `idempotencyKey` for every durable POST that your server may retry after
122
+ an interruption. Reuse the same key only for the exact same operation and
123
+ request body.
124
+
125
+ ```ts
126
+ const operationKey = `research:${customerId}:${requestId}`;
127
+
128
+ const firstAttempt = await chusky.runs.create(
129
+ { input: "Research our renewal risk and draft next steps.", wait: false },
130
+ { idempotencyKey: operationKey },
131
+ );
132
+
133
+ // A network retry with operationKey returns the same durable operation rather
134
+ // than creating a duplicate run.
135
+ ```
136
+
137
+ Do not generate a new idempotency key for a retry unless you intentionally want
138
+ to start a new operation.
139
+
140
+ ## Human approvals
141
+
142
+ Chusky keeps routine reads and reversible work autonomous while pausing
143
+ materially risky actions according to the project policy. A run can return
144
+ `requires_approval` and include an `approvalId`.
145
+
146
+ Your application should show the action, target, and relevant context to an
147
+ authenticated human, then call `approvals.decide()`. Never auto-approve from a
148
+ browser callback or from model output.
149
+
150
+ ```ts
151
+ const approvals = await chusky.approvals.list();
152
+ const pending = approvals.data.find((item) => item.status === "pending");
153
+
154
+ if (pending) {
155
+ // Render pending.request and the bounded action details in your own UI.
156
+ const decision = await chusky.approvals.decide(
157
+ pending.id,
158
+ "approve",
159
+ { idempotencyKey: `approval:${pending.id}:approve` },
160
+ );
161
+ console.log("Approval handled", decision);
23
162
  }
24
163
  ```
25
164
 
26
- For company workflows, provision an agent profile from a specialist template
27
- and create a durable run in one call. The project key's scopes and the company
28
- policy are enforced by Chusky; send an idempotency key so retries do not create
29
- duplicate threads or tasks.
165
+ The exact approval boundary is enforced server-side. The SDK is not a way to
166
+ bypass it.
167
+
168
+ ## Agent templates and company workflows
169
+
170
+ Use a built-in specialist template or create a governed agent profile for a
171
+ company workflow. Policies, allowed tools, budgets, and approvals are applied
172
+ by Chusky before execution.
30
173
 
31
174
  ```ts
32
175
  const templates = await chusky.agents.templates();
33
- const agent = await chusky.agents.create({ template: "lead-research", name: "Fintech lead scout" });
34
- const { thread, run } = await chusky.runs.create({
35
- input: "Find fintech companies with more than 50 employees and prepare sourced CRM-ready profiles.",
36
- agentId: agent.id,
37
- wait: false,
38
- }, { idempotencyKey: "customer-42-lead-research-2026-09-14" });
39
- console.log(thread.id, run.id, run.status);
176
+ console.log(templates.data.map((template) => template.slug));
177
+
178
+ const agent = await chusky.agents.create({
179
+ template: "lead-research",
180
+ name: "Fintech lead scout",
181
+ instructions: "Return sourced, deduplicated company profiles.",
182
+ policy: {
183
+ tools: {
184
+ allow: ["crm.read", "web.search", "email.draft"],
185
+ requireApproval: ["email.send", "crm.write"],
186
+ },
187
+ budget: { duration: "30m", maxToolCalls: 80, maxCost: 8 },
188
+ },
189
+ });
190
+
191
+ const { thread, run } = await chusky.runs.create(
192
+ {
193
+ agentId: agent.id,
194
+ input: "Find qualified fintech leads with more than 50 employees.",
195
+ wait: false,
196
+ },
197
+ { idempotencyKey: "acme-fintech-leads-2026-09-21" },
198
+ );
199
+
200
+ console.log(`Run ${run.id} started in thread ${thread.id}`);
40
201
  ```
41
202
 
42
- Poll with `chusky.runs.get(thread.id, run.id)` or use the task ID on the run
43
- with `chusky.tasks.get()`. Composio remains responsible for OAuth, connected
44
- accounts, and tool execution; Chusky enforces the orchestration policy and
45
- approval boundary.
203
+ Composio owns OAuth, connected accounts, token refresh, and external tool
204
+ execution. Chusky owns the agent profile, policy, orchestration, approvals,
205
+ durability, and result delivery.
46
206
 
47
- ## Operator-only API key provisioning
207
+ ## Durable missions
48
208
 
49
- Run this only on a trusted backend or operator machine. Never expose the root
50
- `CHUSKY_PROJECT_KEY` to a browser, developer, or end user.
209
+ Use missions when the work has multiple steps, dependencies, budgets, evidence,
210
+ waits, or a definition of done. The mission API supports pause, resume,
211
+ repair, cancellation, provider-event continuation, replanning, proof, and
212
+ verification.
51
213
 
52
214
  ```ts
53
- import { createChuskyAdmin } from "@chusky/sdk";
54
- const admin = createChuskyAdmin({ apiKey: process.env.CHUSKY_PROJECT_KEY!, baseUrl: process.env.CHUSKY_BASE_URL });
55
- const project = await admin.projects.create({ name: "My App", scopes: ["*"] });
56
- console.log(project.key); // save once; list() never returns it
215
+ const mission = await chusky.missions.create({
216
+ title: "Qualified fintech leads",
217
+ objective: "Find 20 fintech companies matching our ICP.",
218
+ definitionOfDone: "Every lead has a source, qualification reason, and CRM-ready payload.",
219
+ verificationMode: "strict",
220
+ requiredEvidence: ["source URL", "qualification assertion", "deduplication check"],
221
+ steps: [
222
+ { id: "research", title: "Research companies", objective: "Collect source-backed facts." },
223
+ { id: "qualify", title: "Qualify leads", objective: "Apply the ICP and remove duplicates.", dependsOn: ["research"] },
224
+ { id: "prepare", title: "Prepare CRM payload", objective: "Create an approval-ready import.", dependsOn: ["qualify"] },
225
+ ],
226
+ maxDurationSeconds: 3 * 60 * 60,
227
+ maxSteps: 30,
228
+ maxToolCalls: 100,
229
+ maxCost: 15,
230
+ }, { idempotencyKey: "acme-lead-mission-2026-09-21" });
231
+
232
+ const proof = await chusky.missions.proof(mission.id);
233
+ console.log(proof.status, proof.nextAction, proof.verification);
57
234
  ```
58
235
 
59
- ## Dashboard self-service keys
236
+ Treat `proof()` and `verify()` as the external completion record. Do not claim
237
+ that a mission completed because a model produced a plausible paragraph; use
238
+ the recorded steps, evidence, and verification state.
60
239
 
61
- A verified Chusky dashboard user can create up to 10 project keys from
62
- **Developer API** in the dashboard. The raw `chsk_` secret appears only when a
63
- key is created or rotated. Put that scoped value in the application's trusted
64
- server environment:
240
+ ## Shared context, departments, and outcomes
65
241
 
66
- ```env
67
- CHUSKY_API_KEY=chsk_...
242
+ The operating layer lets applications preserve useful, sensitivity-aware
243
+ context and hand work between specialized departments.
244
+
245
+ ```ts
246
+ await chusky.context.save({
247
+ scope: "customer",
248
+ scopeId: "customer_123",
249
+ kind: "preference",
250
+ key: "renewal_window",
251
+ value: "Customer prefers renewal discussions in October.",
252
+ source: "crm",
253
+ confidence: 0.9,
254
+ sensitivity: "normal",
255
+ });
256
+
257
+ const salesContext = await chusky.context.list({
258
+ scope: "customer",
259
+ scopeId: "customer_123",
260
+ purpose: "renewal",
261
+ });
262
+
263
+ const packet = await chusky.departments.handoff("customer-success", {
264
+ objective: "Prepare a renewal risk review for the account team.",
265
+ inputs: { customerId: "customer_123" },
266
+ constraints: ["Use verified CRM facts only."],
267
+ evidenceRequired: ["account health source", "open risk owner"],
268
+ approvalBoundary: "Draft only; do not contact the customer.",
269
+ });
270
+
271
+ console.log(packet.id, packet.status, salesContext.data.length);
272
+ ```
273
+
274
+ ## Files and artifacts
275
+
276
+ File uploads use a short-lived storage URL. The SDK also exposes artifact
277
+ metadata and verified downloads for files generated by Chusky.
278
+
279
+ ```ts
280
+ const body = new TextEncoder().encode("customer_id,renewal_date\n123,2026-10-01\n");
281
+ const upload = await chusky.files.create({
282
+ name: "renewals.csv",
283
+ contentType: "text/csv",
284
+ size: body.byteLength,
285
+ }, { idempotencyKey: "upload-renewals-2026-09-21" });
286
+
287
+ const response = await fetch(upload.uploadUrl, {
288
+ method: "PUT",
289
+ headers: { "Content-Type": "text/csv" },
290
+ body,
291
+ });
292
+ if (!response.ok) throw new Error(`Upload failed: ${response.status}`);
293
+
294
+ const file = await chusky.files.complete(upload.id);
295
+ console.log(file.id, file.status);
296
+ ```
297
+
298
+ ## Webhooks
299
+
300
+ Register a server endpoint for durable delivery notifications and make the
301
+ handler idempotent by recording the delivery ID before applying the event.
302
+
303
+ ```ts
304
+ const webhook = await chusky.webhooks.create(
305
+ "https://app.example.com/api/chusky/events",
306
+ { idempotencyKey: "webhook-register-events-v1" },
307
+ );
308
+
309
+ const deliveries = await chusky.webhooks.deliveries(webhook.id);
310
+ console.log(deliveries.data.map((delivery) => delivery.status));
311
+ ```
312
+
313
+ ## Operator provisioning
314
+
315
+ `createChuskyAdmin()` is for a trusted operator service only. It uses the root
316
+ project key to provision scoped project keys and must never be shipped to an
317
+ end-user application.
318
+
319
+ ```ts
320
+ import { createChuskyAdmin } from "@chusky/sdk";
321
+
322
+ const admin = createChuskyAdmin({
323
+ apiKey: process.env.CHUSKY_PROJECT_KEY!,
324
+ baseUrl: process.env.CHUSKY_BASE_URL,
325
+ });
326
+
327
+ const project = await admin.projects.create({
328
+ name: "Acme production",
329
+ scopes: ["runs:create", "runs:read", "missions:read", "missions:create"],
330
+ });
331
+
332
+ console.log(project.key); // Store once. It is not returned by list().
68
333
  ```
69
334
 
70
- The dashboard never exposes `CHUSKY_PROJECT_KEY`; that Oracle-only root secret
71
- remains solely for trusted operator `/v1/admin/*` provisioning.
335
+ ## Resource map
72
336
 
73
- ## Contract and security
337
+ | Resource | Use it for |
338
+ | --- | --- |
339
+ | `threads`, `runs` | Conversations and durable agent execution |
340
+ | `agents`, `company` | Governed profiles and company telemetry |
341
+ | `tasks`, `approvals` | Recovery and human decisions |
342
+ | `missions` | Multi-step autonomous work with proof |
343
+ | `context`, `departments`, `outcomes` | Shared operating context and typed handoffs |
344
+ | `files`, `artifacts` | Input uploads and generated output downloads |
345
+ | `meetings`, `calls` | Meeting lifecycle and voice operations |
346
+ | `apps`, `channels`, `devices` | Connected account and delivery management |
347
+ | `reminders`, `jobs`, `memory`, `scratchpad` | Owner-scoped autonomous operations |
348
+ | `webhooks`, `audit`, `usage` | Delivery, traceability, and usage visibility |
74
349
 
75
- - 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.
76
- - SDK applications authenticate with `CHUSKY_API_KEY` and send it only from a trusted server. `CHUSKY_PROJECT_KEY` is root-only operator infrastructure for provisioning or rotating scoped `chsk_` API keys; it must never be shipped in an SDK application or browser bundle. Project secrets are returned once, persisted only as hashes, may be rotated or revoked, and must never be exposed in browser code.
77
- - 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()`.
78
- - Approval decisions always require an authenticated end-user context in the server. The SDK must never auto-approve a tool call.
79
- - `stream()` yields NDJSON events and supports `AbortSignal`, so consumers can stop a particular run without cancelling unrelated durable work.
80
- - The machine-readable API contract is [`openapi.yaml`](openapi.yaml).
350
+ ## Security and production checklist
81
351
 
82
- ## Available resources
352
+ - Keep `CHUSKY_API_KEY` on a trusted server and scope it to one project.
353
+ - Use a stable, non-secret `userId` for every request.
354
+ - Use idempotency keys for retryable durable writes.
355
+ - Treat run output, tool results, emails, documents, and web pages as untrusted
356
+ input—not authorization.
357
+ - Never auto-approve an external action from model output.
358
+ - Verify webhook signatures and deduplicate delivery IDs before processing.
359
+ - Use `AbortSignal` to cancel a request without cancelling unrelated durable
360
+ work.
361
+ - Use `proof()` and `verify()` before treating a mission as complete.
362
+ - Set budgets for duration, tool calls, and cost on long-running work.
363
+ - Keep the SDK server-side; use the separate chat widget only with a server
364
+ proxy that never exposes the project key.
83
365
 
84
- The current resources are `projects`, `threads`, `runs`, `company`, `tasks`, `approvals`, `files`, `tools`, `skills`, `artifacts`, `videos`, `workers`, `channels`, `activity`, `calls`, `meetings`, `apps`, `reminders`, `jobs`, `memory`, `scratchpad`, `devices`, `account.voiceOptions()`, `webhooks`, `audit`, and `usage`. Calls create the same approval-gated outbound request used by the other Chusky surfaces; the server selects Twilio or Bland and never exposes provider credentials. Meetings cover Recall-based Zoom, Google Meet, Microsoft Teams, and Webex lifecycle operations, private preparation, participant/outcome snapshots, and approved active-meeting context. `company.runs()`, `company.audit()`, and `company.usage()` read bounded, cross-caller telemetry for a company project and require its `company:read` scope. 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. `files.upload()` is a convenience helper for this sequence. Artifact downloads return verified bytes from the Daytona workspace through the API.
366
+ ## API and documentation
85
367
 
86
- See [`docs/architecture.mdx`](docs/architecture.mdx) for the request, durability, capability, storage, and delivery boundaries that implement these resources.
368
+ - [Developer API contract](docs/api-contract.md)
369
+ - [Full documentation](docs/index.mdx)
370
+ - [Autonomous missions](docs/missions.mdx)
371
+ - [OpenAPI specification](openapi.yaml)
372
+ - [Release guide](docs/releases.mdx)
373
+ - [Examples](examples/)
87
374
 
88
- Runs can be short and synchronous or durable and asynchronous. Pass `wait: false` to `runs.create()` to receive a task-backed run immediately; inspect it with `tasks.get()`, retry or cancel it, and resume a failed or approval-paused run with `runs.resume()`. Use `budget.duration` (`5m`, `30m`, `1h`, `3h`, `6h`, `3d`, or `1w`) together with `budget.maxToolCalls` and `budget.maxCost` to bound work. Tool and skill allowlists are enforced server-side before the agent receives its catalog.
375
+ ## License
89
376
 
90
- Webhook deliveries are queryable and can be retried through the SDK. Keep the endpoint idempotent and treat delivery IDs as deduplication keys.
377
+ MIT
package/dist/client.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { AccountPreferences, Activity, AppConnection, Approval, ApprovalDecision, Artifact, AuditEvent, CallApproval, CallsResponse, ChannelConnection, ChuskyClientOptions, CliDevice, CompanyAgent, CompanyAgentCreateParams, CompanyAgentTemplate, CompanyAuditEvent, CompanyBranding, CompanyRunSummary, CompanyUsage, CreateRunParams, CreateThreadParams, DeveloperProject, Delivery, FileDownload, FileRecord, FileUpload, JoinMeetingParams, LinkableChannelProvider, LiveVoicePreference, MeetingBrief, MeetingContext, MeetingProfile, MeetingRecord, MeetingsResponse, MemoryFact, Page, RecurringJob, Reminder, RequestOptions, Run, RunEvent, RunStreamEvent, ScratchpadEntry, Skill, SkillFile, Task, Thread, Tool, Usage, VideoJob, VoiceCallProfile, VoiceOptions, Webhook, WebhookDelivery, Worker } from "./types.js";
1
+ import type { AccountPreferences, Activity, AppConnection, Approval, ApprovalDecision, Artifact, AuditEvent, CallRecord, CallsResponse, ChannelConnection, ChuskyClientOptions, CliDevice, CompanyAgent, CompanyAgentCreateParams, CompanyAgentTemplate, CompanyAuditEvent, CompanyBranding, CompanyRunSummary, CompanyUsage, ContextNode, CreateRunParams, CreateThreadParams, DepartmentCatalogItem, DepartmentSpace, DeveloperProject, Delivery, FileDownload, FileRecord, FileUpload, JobOccurrence, JoinMeetingParams, LinkableChannelProvider, LiveVoicePreference, MeetingBrief, MeetingContext, MeetingProfile, MeetingRecord, MeetingsResponse, MemoryFact, Mission, MissionCreateParams, MissionEvidence, MissionProof, OutcomePackage, OutcomePlan, Page, RecurringJob, Reminder, RequestOptions, Run, RunEvent, RunStreamEvent, ScratchpadEntry, Skill, SkillFile, Task, Thread, Tool, Usage, VideoJob, VoiceCallProfile, VoiceOptions, Webhook, WebhookDelivery, WorkPacket, Worker } from "./types.js";
2
2
  export declare class Chusky {
3
3
  readonly threads: ThreadsResource;
4
4
  readonly runs: CompanyRunsResource;
@@ -27,6 +27,10 @@ export declare class Chusky {
27
27
  readonly memory: MemoryResource;
28
28
  readonly scratchpad: ScratchpadResource;
29
29
  readonly devices: DevicesResource;
30
+ readonly missions: MissionsResource;
31
+ readonly context: ContextResource;
32
+ readonly departments: DepartmentsResource;
33
+ readonly outcomes: OutcomesResource;
30
34
  private readonly baseUrl;
31
35
  private readonly apiKey;
32
36
  private readonly userId;
@@ -345,7 +349,26 @@ export declare class RemindersResource {
345
349
  text: string;
346
350
  delaySeconds?: number;
347
351
  runAt?: string;
352
+ mode?: Reminder["mode"];
353
+ links?: Reminder["links"];
354
+ nextAction?: string;
355
+ preconditions?: string[];
356
+ postconditions?: string[];
357
+ pollEverySeconds?: number;
348
358
  }, options?: RequestOptions): Promise<Reminder>;
359
+ pause(id: string, options?: RequestOptions): Promise<{
360
+ message: string;
361
+ data: Reminder;
362
+ }>;
363
+ resume(id: string, options?: RequestOptions): Promise<{
364
+ message: string;
365
+ data: Reminder;
366
+ }>;
367
+ runNow(id: string, options?: RequestOptions): Promise<{
368
+ reminderId: string;
369
+ workflowRunId: string;
370
+ data: Reminder;
371
+ }>;
349
372
  delete(id: string, options?: RequestOptions): Promise<void>;
350
373
  }
351
374
  export declare class JobsResource {
@@ -355,7 +378,27 @@ export declare class JobsResource {
355
378
  create(params: {
356
379
  text: string;
357
380
  cron: string;
381
+ mode?: RecurringJob["mode"];
382
+ links?: RecurringJob["links"];
383
+ nextAction?: string;
384
+ preconditions?: string[];
385
+ postconditions?: string[];
358
386
  }, options?: RequestOptions): Promise<RecurringJob>;
387
+ pause(id: string, options?: RequestOptions): Promise<{
388
+ message: string;
389
+ data: RecurringJob;
390
+ }>;
391
+ resume(id: string, options?: RequestOptions): Promise<{
392
+ message: string;
393
+ data: RecurringJob;
394
+ }>;
395
+ runNow(id: string, options?: RequestOptions): Promise<{
396
+ jobId: string;
397
+ occurrenceId: string;
398
+ workflowRunId: string;
399
+ data: RecurringJob;
400
+ }>;
401
+ occurrences(id: string, limit?: number, options?: RequestOptions): Promise<Page<JobOccurrence>>;
359
402
  delete(id: string, options?: RequestOptions): Promise<void>;
360
403
  }
361
404
  export declare class MemoryResource {
@@ -387,7 +430,7 @@ export declare class CallsResource {
387
430
  phoneNumber: string;
388
431
  purpose: string;
389
432
  profile?: Partial<VoiceCallProfile>;
390
- }, options?: RequestOptions): Promise<CallApproval>;
433
+ }, options?: RequestOptions): Promise<CallRecord>;
391
434
  }
392
435
  export declare class MeetingsResource {
393
436
  private readonly client;
@@ -407,6 +450,91 @@ export declare class MeetingsResource {
407
450
  context(meetingId: string, query?: string, options?: RequestOptions): Promise<MeetingContext>;
408
451
  deleteContact(contactId: string, options?: RequestOptions): Promise<void>;
409
452
  }
453
+ export declare class MissionsResource {
454
+ private readonly client;
455
+ constructor(client: Chusky);
456
+ list(options?: RequestOptions): Promise<Page<Mission>>;
457
+ create(params: MissionCreateParams, options?: RequestOptions): Promise<Mission>;
458
+ get(missionId: string, options?: RequestOptions): Promise<Mission>;
459
+ events(missionId: string, options?: RequestOptions): Promise<Page<Mission["events"][number]>>;
460
+ proof(missionId: string, options?: RequestOptions): Promise<MissionProof>;
461
+ evidence(missionId: string, input: {
462
+ stepId?: string;
463
+ evidence: MissionEvidence[];
464
+ }, options?: RequestOptions): Promise<Mission>;
465
+ verify(missionId: string, input: {
466
+ evidenceIds?: string[];
467
+ confidence?: number;
468
+ verifiedBy?: "human" | "agent" | "system";
469
+ }, options?: RequestOptions): Promise<Mission>;
470
+ repair(missionId: string, input: {
471
+ reason: string;
472
+ nextAction?: string;
473
+ }, options?: RequestOptions): Promise<Mission>;
474
+ pause(missionId: string, options?: RequestOptions): Promise<Mission>;
475
+ resume(missionId: string, options?: RequestOptions): Promise<Mission>;
476
+ cancel(missionId: string, options?: RequestOptions): Promise<Mission>;
477
+ completeStep(missionId: string, stepId: string, result: string, options?: RequestOptions): Promise<Mission>;
478
+ replan(missionId: string, input: {
479
+ reason?: string;
480
+ steps: Array<Partial<Mission["steps"][number]> & {
481
+ title: string;
482
+ objective: string;
483
+ }>;
484
+ }, options?: RequestOptions): Promise<Mission>;
485
+ providerEvent(missionId: string, provider: string, providerEventId: string, options?: RequestOptions): Promise<Mission>;
486
+ }
487
+ export declare class ContextResource {
488
+ private readonly client;
489
+ constructor(client: Chusky);
490
+ list(params?: {
491
+ query?: string;
492
+ scope?: string;
493
+ scopeId?: string;
494
+ purpose?: string;
495
+ limit?: number;
496
+ }, options?: RequestOptions): Promise<{
497
+ data: ContextNode[];
498
+ prompt: string;
499
+ }>;
500
+ save(input: Omit<ContextNode, "id" | "createdAt" | "updatedAt">, options?: RequestOptions): Promise<ContextNode>;
501
+ }
502
+ export declare class DepartmentsResource {
503
+ private readonly client;
504
+ constructor(client: Chusky);
505
+ catalog(options?: RequestOptions): Promise<Page<DepartmentCatalogItem>>;
506
+ list(options?: RequestOptions): Promise<Page<DepartmentSpace>>;
507
+ create(input: {
508
+ department: string;
509
+ name?: string;
510
+ mission?: string;
511
+ objectives?: string[];
512
+ policies?: string[];
513
+ approvedTools?: string[];
514
+ escalationOwner?: string;
515
+ }, options?: RequestOptions): Promise<DepartmentSpace>;
516
+ handoff(department: string, input: {
517
+ objective: string;
518
+ inputs?: Record<string, unknown>;
519
+ constraints?: string[];
520
+ evidenceRequired?: string[];
521
+ outputSchema?: Record<string, unknown>;
522
+ toAgent?: string;
523
+ deadline?: number;
524
+ approvalBoundary?: string;
525
+ }, options?: RequestOptions): Promise<WorkPacket>;
526
+ }
527
+ export declare class OutcomesResource {
528
+ private readonly client;
529
+ constructor(client: Chusky);
530
+ list(options?: RequestOptions): Promise<Page<OutcomePackage>>;
531
+ get(slug: string, options?: RequestOptions): Promise<{
532
+ data: OutcomePackage;
533
+ }>;
534
+ plan(slug: string, input: Record<string, unknown>, options?: RequestOptions): Promise<{
535
+ data: OutcomePlan;
536
+ }>;
537
+ }
410
538
  export declare class UsageResource {
411
539
  private readonly client;
412
540
  constructor(client: Chusky);