claude-triggers 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 +174 -0
- package/SKILL.md +175 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +410 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +113 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +463 -0
- package/dist/client.js.map +1 -0
- package/dist/credentials.d.ts +39 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +279 -0
- package/dist/credentials.js.map +1 -0
- package/dist/cron.d.ts +39 -0
- package/dist/cron.d.ts.map +1 -0
- package/dist/cron.js +257 -0
- package/dist/cron.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +184 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +22 -0
- package/dist/types.js.map +1 -0
- package/package.json +58 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* claude-triggers CLI — manage Claude Code scheduled agents.
|
|
4
|
+
*/
|
|
5
|
+
import { ClaudeTriggersClient, buildTriggerBody } from "./client.js";
|
|
6
|
+
import { getCredentials } from "./credentials.js";
|
|
7
|
+
import { describeCron, validateCron } from "./cron.js";
|
|
8
|
+
// ─── Arg parsing ───
|
|
9
|
+
function parseArgs(argv) {
|
|
10
|
+
const positional = [];
|
|
11
|
+
const flags = {};
|
|
12
|
+
const command = argv[0] ?? "help";
|
|
13
|
+
for (let i = 1; i < argv.length; i++) {
|
|
14
|
+
const arg = argv[i];
|
|
15
|
+
if (arg.startsWith("--")) {
|
|
16
|
+
const key = arg.slice(2);
|
|
17
|
+
const next = argv[i + 1];
|
|
18
|
+
if (next && !next.startsWith("--")) {
|
|
19
|
+
flags[key] = next;
|
|
20
|
+
i++;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
flags[key] = "true";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
positional.push(arg);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return { command, positional, flags };
|
|
31
|
+
}
|
|
32
|
+
// ─── Display ───
|
|
33
|
+
function json(data) {
|
|
34
|
+
console.log(JSON.stringify(data, null, 2));
|
|
35
|
+
}
|
|
36
|
+
function printTrigger(t, verbose = false) {
|
|
37
|
+
const status = t.enabled ? "\x1b[32m● on\x1b[0m " : "\x1b[31m○ off\x1b[0m";
|
|
38
|
+
const schedule = describeCron(t.cron_expression, { utc: true });
|
|
39
|
+
console.log(` ${t.id} ${status} ${schedule}`);
|
|
40
|
+
console.log(` ${" ".repeat(30)}${t.name}`);
|
|
41
|
+
if (t.next_run_at) {
|
|
42
|
+
console.log(` ${" ".repeat(30)}next: ${new Date(t.next_run_at).toLocaleString()}`);
|
|
43
|
+
}
|
|
44
|
+
if (verbose) {
|
|
45
|
+
const prompt = t.job_config?.ccr?.events?.[0]?.data?.message?.content;
|
|
46
|
+
if (prompt) {
|
|
47
|
+
console.log(` ${" ".repeat(30)}prompt: ${prompt.slice(0, 80)}${prompt.length > 80 ? "..." : ""}`);
|
|
48
|
+
}
|
|
49
|
+
const model = t.job_config?.ccr?.session_context?.model;
|
|
50
|
+
if (model)
|
|
51
|
+
console.log(` ${" ".repeat(30)}model: ${model}`);
|
|
52
|
+
const sources = t.job_config?.ccr?.session_context?.sources;
|
|
53
|
+
if (sources?.length) {
|
|
54
|
+
console.log(` ${" ".repeat(30)}repo: ${sources[0].git_repository.url}`);
|
|
55
|
+
}
|
|
56
|
+
if (t.mcp_connections?.length) {
|
|
57
|
+
console.log(` ${" ".repeat(30)}mcp: ${t.mcp_connections.map((m) => m.name).join(", ")}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// ─── Help ───
|
|
62
|
+
const HELP = `\x1b[1mclaude-triggers\x1b[0m — manage Claude Code scheduled agents
|
|
63
|
+
|
|
64
|
+
\x1b[2mTrigger commands:\x1b[0m
|
|
65
|
+
list [-v] List all triggers
|
|
66
|
+
get <id> Get trigger details
|
|
67
|
+
create Create a trigger
|
|
68
|
+
--name <name> Trigger name (required)
|
|
69
|
+
--cron <expression> 5-field UTC cron (required)
|
|
70
|
+
--prompt <text> Agent prompt (required)
|
|
71
|
+
--repo <url> Git repository URL
|
|
72
|
+
--model <model> Model (default: claude-sonnet-4-6)
|
|
73
|
+
--tools <t1,t2,...> Allowed tools
|
|
74
|
+
--disabled Create disabled
|
|
75
|
+
update <id> Update a trigger
|
|
76
|
+
--name, --cron, --enabled, --prompt, --model
|
|
77
|
+
run <id> Run trigger immediately
|
|
78
|
+
enable <id> Enable a trigger
|
|
79
|
+
disable <id> Disable a trigger
|
|
80
|
+
delete <id> Opens claude.ai (no API delete)
|
|
81
|
+
|
|
82
|
+
\x1b[2mSession commands:\x1b[0m
|
|
83
|
+
sessions List remote sessions
|
|
84
|
+
session <id> Get session details
|
|
85
|
+
session-create Create a remote session directly
|
|
86
|
+
--env <env_id> Environment ID (required)
|
|
87
|
+
--prompt <text> Initial prompt
|
|
88
|
+
--repo <url> Git repository URL
|
|
89
|
+
--title <text> Session title
|
|
90
|
+
|
|
91
|
+
\x1b[2mInfra commands:\x1b[0m
|
|
92
|
+
envs List environments
|
|
93
|
+
env-create [name] Create an environment
|
|
94
|
+
profile Show account/org info
|
|
95
|
+
github-check [owner/repo] Check GitHub app installation
|
|
96
|
+
test Test auth & API connectivity
|
|
97
|
+
|
|
98
|
+
\x1b[2mOptions:\x1b[0m
|
|
99
|
+
--json Raw JSON output
|
|
100
|
+
--help Show this help
|
|
101
|
+
`;
|
|
102
|
+
// ─── Commands ───
|
|
103
|
+
async function main() {
|
|
104
|
+
const { command, positional, flags } = parseArgs(process.argv.slice(2));
|
|
105
|
+
const isJson = "json" in flags;
|
|
106
|
+
const verbose = "v" in flags || "verbose" in flags;
|
|
107
|
+
if (command === "help" || "help" in flags) {
|
|
108
|
+
console.log(HELP);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (command === "test") {
|
|
112
|
+
await runTest();
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const client = await ClaudeTriggersClient.create();
|
|
116
|
+
switch (command) {
|
|
117
|
+
// ─── Profile ───
|
|
118
|
+
case "profile": {
|
|
119
|
+
const profile = await client.fetchProfile();
|
|
120
|
+
if (isJson)
|
|
121
|
+
return json(profile);
|
|
122
|
+
console.log(`Account: ${profile.account.display_name ?? profile.account.uuid}`);
|
|
123
|
+
console.log(`Email: ${profile.account.email ?? "?"}`);
|
|
124
|
+
console.log(`Org: ${profile.organization.uuid}`);
|
|
125
|
+
console.log(`Plan: ${profile.organization.organization_type}`);
|
|
126
|
+
console.log(`Tier: ${profile.organization.rate_limit_tier ?? "?"}`);
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
// ─── Environments ───
|
|
130
|
+
case "envs": {
|
|
131
|
+
const envs = await client.listEnvironments();
|
|
132
|
+
if (isJson)
|
|
133
|
+
return json(envs);
|
|
134
|
+
if (!envs.length) {
|
|
135
|
+
console.log("No environments found.");
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
console.log("Environments:");
|
|
139
|
+
for (const env of envs) {
|
|
140
|
+
console.log(` ${env.environment_id} ${env.kind} ${env.name} ${env.state ?? ""}`);
|
|
141
|
+
}
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
case "env-create": {
|
|
145
|
+
const name = positional[0] ?? "claude-code-default";
|
|
146
|
+
const env = await client.createEnvironment(name);
|
|
147
|
+
if (isJson)
|
|
148
|
+
return json(env);
|
|
149
|
+
console.log(`Created: ${env.environment_id} (${env.name})`);
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
// ─── Triggers ───
|
|
153
|
+
case "list":
|
|
154
|
+
case "ls": {
|
|
155
|
+
const resp = await client.listTriggers();
|
|
156
|
+
if (isJson)
|
|
157
|
+
return json(resp);
|
|
158
|
+
if (!resp.data.length) {
|
|
159
|
+
console.log("No triggers.");
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
console.log(`Triggers (${resp.data.length}):\n`);
|
|
163
|
+
for (const t of resp.data) {
|
|
164
|
+
printTrigger(t, verbose);
|
|
165
|
+
console.log();
|
|
166
|
+
}
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
case "get": {
|
|
170
|
+
const id = positional[0];
|
|
171
|
+
if (!id)
|
|
172
|
+
return die("Usage: claude-triggers get <trigger_id>");
|
|
173
|
+
const trigger = await client.getTrigger(id);
|
|
174
|
+
if (isJson)
|
|
175
|
+
return json(trigger);
|
|
176
|
+
printTrigger(trigger, true);
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
case "create": {
|
|
180
|
+
const name = flags.name;
|
|
181
|
+
const cron = flags.cron;
|
|
182
|
+
const prompt = flags.prompt;
|
|
183
|
+
if (!name || !cron || !prompt) {
|
|
184
|
+
return die("Required: --name, --cron, --prompt\n" +
|
|
185
|
+
"Example: claude-triggers create --name daily-review --cron '0 9 * * 1-5' --prompt 'Review open PRs'");
|
|
186
|
+
}
|
|
187
|
+
const cronError = validateCron(cron);
|
|
188
|
+
if (cronError)
|
|
189
|
+
return die(cronError);
|
|
190
|
+
const env = await client.ensureEnvironment();
|
|
191
|
+
if (!isJson)
|
|
192
|
+
console.log(`Using environment: ${env.environment_id} (${env.name})`);
|
|
193
|
+
const body = buildTriggerBody({
|
|
194
|
+
name,
|
|
195
|
+
cron,
|
|
196
|
+
prompt,
|
|
197
|
+
environmentId: env.environment_id,
|
|
198
|
+
repoUrl: flags.repo,
|
|
199
|
+
model: flags.model,
|
|
200
|
+
tools: flags.tools?.split(","),
|
|
201
|
+
enabled: !("disabled" in flags),
|
|
202
|
+
});
|
|
203
|
+
const trigger = await client.createTrigger(body);
|
|
204
|
+
if (isJson)
|
|
205
|
+
return json(trigger);
|
|
206
|
+
console.log(`\n✓ Trigger created: ${trigger.id}`);
|
|
207
|
+
console.log(` Name: ${trigger.name}`);
|
|
208
|
+
console.log(` Schedule: ${describeCron(trigger.cron_expression, { utc: true })}`);
|
|
209
|
+
console.log(` Enabled: ${trigger.enabled}`);
|
|
210
|
+
if (trigger.next_run_at) {
|
|
211
|
+
console.log(` Next run: ${new Date(trigger.next_run_at).toLocaleString()}`);
|
|
212
|
+
}
|
|
213
|
+
console.log(`\n View: https://claude.ai/code/scheduled/${trigger.id}`);
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
case "update": {
|
|
217
|
+
const id = positional[0];
|
|
218
|
+
if (!id)
|
|
219
|
+
return die("Usage: claude-triggers update <trigger_id> [--name ...] [--cron ...] [--enabled ...]");
|
|
220
|
+
const body = {};
|
|
221
|
+
if (flags.name)
|
|
222
|
+
body.name = flags.name;
|
|
223
|
+
if (flags.cron)
|
|
224
|
+
body.cron_expression = flags.cron;
|
|
225
|
+
if (flags.enabled)
|
|
226
|
+
body.enabled = flags.enabled === "true";
|
|
227
|
+
if (flags.prompt || flags.model) {
|
|
228
|
+
// Need to fetch current trigger to merge job_config
|
|
229
|
+
const current = await client.getTrigger(id);
|
|
230
|
+
body.job_config = { ...current.job_config };
|
|
231
|
+
if (flags.prompt) {
|
|
232
|
+
body.job_config.ccr.events[0].data.message.content = flags.prompt;
|
|
233
|
+
body.job_config.ccr.events[0].data.uuid = crypto.randomUUID();
|
|
234
|
+
}
|
|
235
|
+
if (flags.model) {
|
|
236
|
+
body.job_config.ccr.session_context.model = flags.model;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (Object.keys(body).length === 0)
|
|
240
|
+
return die("Nothing to update. Pass --name, --cron, --enabled, --prompt, or --model.");
|
|
241
|
+
const trigger = await client.updateTrigger(id, body);
|
|
242
|
+
if (isJson)
|
|
243
|
+
return json(trigger);
|
|
244
|
+
console.log(`✓ Updated: ${trigger.id}`);
|
|
245
|
+
printTrigger(trigger, true);
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
case "run": {
|
|
249
|
+
const id = positional[0];
|
|
250
|
+
if (!id)
|
|
251
|
+
return die("Usage: claude-triggers run <trigger_id>");
|
|
252
|
+
const result = await client.runTrigger(id);
|
|
253
|
+
if (isJson)
|
|
254
|
+
return json(result);
|
|
255
|
+
console.log(`✓ Trigger ${id} run started`);
|
|
256
|
+
json(result);
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
case "enable": {
|
|
260
|
+
const id = positional[0];
|
|
261
|
+
if (!id)
|
|
262
|
+
return die("Usage: claude-triggers enable <trigger_id>");
|
|
263
|
+
const trigger = await client.enableTrigger(id);
|
|
264
|
+
if (isJson)
|
|
265
|
+
return json(trigger);
|
|
266
|
+
console.log(`✓ Enabled: ${trigger.id} (${trigger.name})`);
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
case "disable": {
|
|
270
|
+
const id = positional[0];
|
|
271
|
+
if (!id)
|
|
272
|
+
return die("Usage: claude-triggers disable <trigger_id>");
|
|
273
|
+
const trigger = await client.disableTrigger(id);
|
|
274
|
+
if (isJson)
|
|
275
|
+
return json(trigger);
|
|
276
|
+
console.log(`✓ Disabled: ${trigger.id} (${trigger.name})`);
|
|
277
|
+
break;
|
|
278
|
+
}
|
|
279
|
+
case "delete":
|
|
280
|
+
case "rm": {
|
|
281
|
+
const id = positional[0];
|
|
282
|
+
if (!id)
|
|
283
|
+
return die("Usage: claude-triggers delete <trigger_id>");
|
|
284
|
+
const url = `https://claude.ai/code/scheduled/${id}`;
|
|
285
|
+
console.log(`API doesn't support delete. Opening: ${url}`);
|
|
286
|
+
try {
|
|
287
|
+
const { execSync } = await import("node:child_process");
|
|
288
|
+
execSync(`open "${url}" 2>/dev/null || xdg-open "${url}" 2>/dev/null`, { stdio: "ignore" });
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
// Manual
|
|
292
|
+
}
|
|
293
|
+
break;
|
|
294
|
+
}
|
|
295
|
+
// ─── Sessions ───
|
|
296
|
+
case "sessions": {
|
|
297
|
+
const resp = await client.listSessions();
|
|
298
|
+
if (isJson)
|
|
299
|
+
return json(resp);
|
|
300
|
+
if (!resp.data.length) {
|
|
301
|
+
console.log("No sessions.");
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
console.log(`Sessions (${resp.data.length}):\n`);
|
|
305
|
+
for (const s of resp.data) {
|
|
306
|
+
const model = s.session_context?.model ?? "?";
|
|
307
|
+
const status = s.status ?? "?";
|
|
308
|
+
console.log(` ${s.id} ${status} ${model}`);
|
|
309
|
+
}
|
|
310
|
+
break;
|
|
311
|
+
}
|
|
312
|
+
case "session": {
|
|
313
|
+
const id = positional[0];
|
|
314
|
+
if (!id)
|
|
315
|
+
return die("Usage: claude-triggers session <session_id>");
|
|
316
|
+
const session = await client.getSession(id);
|
|
317
|
+
json(session);
|
|
318
|
+
break;
|
|
319
|
+
}
|
|
320
|
+
case "session-create": {
|
|
321
|
+
const envId = flags.env;
|
|
322
|
+
if (!envId)
|
|
323
|
+
return die("Required: --env <environment_id>\nRun 'claude-triggers envs' to list environments.");
|
|
324
|
+
const result = await client.createSession({
|
|
325
|
+
environmentId: envId,
|
|
326
|
+
prompt: flags.prompt,
|
|
327
|
+
repoUrl: flags.repo,
|
|
328
|
+
title: flags.title,
|
|
329
|
+
});
|
|
330
|
+
if (isJson)
|
|
331
|
+
return json(result);
|
|
332
|
+
console.log(`✓ Session created: ${result.id}`);
|
|
333
|
+
console.log(` Title: ${result.title}`);
|
|
334
|
+
break;
|
|
335
|
+
}
|
|
336
|
+
// ─── GitHub ───
|
|
337
|
+
case "github-check": {
|
|
338
|
+
const spec = positional[0];
|
|
339
|
+
if (!spec?.includes("/"))
|
|
340
|
+
return die("Usage: claude-triggers github-check <owner/repo>");
|
|
341
|
+
const [owner, repo] = spec.split("/");
|
|
342
|
+
const tokenSync = await client.checkGitHubTokenSync();
|
|
343
|
+
const app = await client.checkGitHubAppInstalled(owner, repo);
|
|
344
|
+
if (isJson)
|
|
345
|
+
return json({ tokenSync, app });
|
|
346
|
+
console.log(`GitHub token synced: ${tokenSync ? "✓ yes" : "✗ no"}`);
|
|
347
|
+
console.log(`GitHub App installed on ${spec}: ${app.installed ? "✓ yes" : "✗ no"}`);
|
|
348
|
+
break;
|
|
349
|
+
}
|
|
350
|
+
default:
|
|
351
|
+
console.error(`Unknown command: ${command}`);
|
|
352
|
+
console.log(HELP);
|
|
353
|
+
process.exit(1);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
async function runTest() {
|
|
357
|
+
console.log("\x1b[1mTesting Claude Code auth & APIs...\x1b[0m\n");
|
|
358
|
+
// 1. Credentials
|
|
359
|
+
const creds = await getCredentials();
|
|
360
|
+
if (!creds) {
|
|
361
|
+
console.error("✗ No credentials. Run `claude` to authenticate.");
|
|
362
|
+
process.exit(1);
|
|
363
|
+
}
|
|
364
|
+
const ttl = Math.round((creds.expiresAt - Date.now()) / 60_000);
|
|
365
|
+
console.log(`✓ Credentials (expires in ${ttl}min)`);
|
|
366
|
+
// 2. Profile
|
|
367
|
+
const client = new ClaudeTriggersClient({ accessToken: creds.accessToken });
|
|
368
|
+
const profile = await client.fetchProfile();
|
|
369
|
+
console.log(`✓ Profile: ${profile.account.display_name} (${profile.organization.organization_type})`);
|
|
370
|
+
// 3. Environments
|
|
371
|
+
const envs = await client.listEnvironments();
|
|
372
|
+
console.log(`✓ Environments: ${envs.length}`);
|
|
373
|
+
// 4. Triggers
|
|
374
|
+
try {
|
|
375
|
+
const triggers = await client.listTriggers();
|
|
376
|
+
console.log(`✓ Triggers API: ${triggers.data.length} trigger(s)`);
|
|
377
|
+
}
|
|
378
|
+
catch (e) {
|
|
379
|
+
console.log(`⚠ Triggers: ${e instanceof Error ? e.message : e}`);
|
|
380
|
+
console.log(" (May need tengu_surreal_dali feature flag)");
|
|
381
|
+
}
|
|
382
|
+
// 5. Sessions
|
|
383
|
+
try {
|
|
384
|
+
const sessions = await client.listSessions();
|
|
385
|
+
console.log(`✓ Sessions: ${sessions.data.length}`);
|
|
386
|
+
}
|
|
387
|
+
catch (e) {
|
|
388
|
+
console.log(`⚠ Sessions: ${e instanceof Error ? e.message : e}`);
|
|
389
|
+
}
|
|
390
|
+
// 6. GitHub
|
|
391
|
+
try {
|
|
392
|
+
const gh = await client.checkGitHubTokenSync();
|
|
393
|
+
console.log(`✓ GitHub token sync: ${gh ? "connected" : "not connected"}`);
|
|
394
|
+
}
|
|
395
|
+
catch {
|
|
396
|
+
console.log("⚠ GitHub token sync: check failed");
|
|
397
|
+
}
|
|
398
|
+
console.log("\n\x1b[32mAll checks passed ✓\x1b[0m");
|
|
399
|
+
}
|
|
400
|
+
function die(msg) {
|
|
401
|
+
console.error(msg);
|
|
402
|
+
process.exit(1);
|
|
403
|
+
}
|
|
404
|
+
main().catch((e) => {
|
|
405
|
+
console.error(`\x1b[31mError:\x1b[0m ${e instanceof Error ? e.message : e}`);
|
|
406
|
+
if (process.env.DEBUG)
|
|
407
|
+
console.error(e);
|
|
408
|
+
process.exit(1);
|
|
409
|
+
});
|
|
410
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Triggers API client.
|
|
3
|
+
*
|
|
4
|
+
* Full implementation of the trigger, environment, session, and files APIs
|
|
5
|
+
* reverse-engineered from Claude Code v2.1.81.
|
|
6
|
+
*
|
|
7
|
+
* Includes features the CLI doesn't expose:
|
|
8
|
+
* - Direct session creation (POST /v1/sessions)
|
|
9
|
+
* - Session event streaming via SSE
|
|
10
|
+
* - File upload for seed bundles
|
|
11
|
+
* - GitHub token sync check
|
|
12
|
+
* - Session outcomes/branches extraction
|
|
13
|
+
*/
|
|
14
|
+
import { type OrgProfile, type Environment, type CreateEnvironmentConfig, type Trigger, type TriggerListResponse, type TriggerRunResponse, type CreateTriggerBody, type UpdateTriggerBody, type Session, type SessionListResponse, type McpConnection, type ApiResponse, type ClientOptions } from "./types.js";
|
|
15
|
+
export declare class ClaudeTriggersClient {
|
|
16
|
+
private accessToken;
|
|
17
|
+
private refreshToken;
|
|
18
|
+
private orgUUID;
|
|
19
|
+
private baseUrl;
|
|
20
|
+
private timeout;
|
|
21
|
+
private maxRetries;
|
|
22
|
+
constructor(options?: ClientOptions);
|
|
23
|
+
/**
|
|
24
|
+
* Async initialization — refreshes token if needed, fetches org UUID.
|
|
25
|
+
* Call this before making API requests.
|
|
26
|
+
*/
|
|
27
|
+
init(): Promise<this>;
|
|
28
|
+
/**
|
|
29
|
+
* Create a pre-initialized client. Preferred over constructor + init().
|
|
30
|
+
*/
|
|
31
|
+
static create(options?: ClientOptions): Promise<ClaudeTriggersClient>;
|
|
32
|
+
private headers;
|
|
33
|
+
private request;
|
|
34
|
+
fetchProfile(): Promise<OrgProfile>;
|
|
35
|
+
ensureOrgUUID(): Promise<string>;
|
|
36
|
+
getOrgUUID(): string | null;
|
|
37
|
+
listEnvironments(): Promise<Environment[]>;
|
|
38
|
+
createEnvironment(name?: string, config?: Partial<CreateEnvironmentConfig>): Promise<Environment>;
|
|
39
|
+
ensureEnvironment(): Promise<Environment>;
|
|
40
|
+
listTriggers(): Promise<TriggerListResponse>;
|
|
41
|
+
getTrigger(triggerId: string): Promise<Trigger>;
|
|
42
|
+
createTrigger(body: CreateTriggerBody): Promise<Trigger>;
|
|
43
|
+
updateTrigger(triggerId: string, body: UpdateTriggerBody): Promise<Trigger>;
|
|
44
|
+
runTrigger(triggerId: string): Promise<TriggerRunResponse>;
|
|
45
|
+
enableTrigger(triggerId: string): Promise<Trigger>;
|
|
46
|
+
disableTrigger(triggerId: string): Promise<Trigger>;
|
|
47
|
+
listSessions(): Promise<SessionListResponse>;
|
|
48
|
+
getSession(sessionId: string): Promise<Session>;
|
|
49
|
+
/**
|
|
50
|
+
* Create a remote CCR session directly.
|
|
51
|
+
* This is what triggers spawn under the hood — exposed here
|
|
52
|
+
* for direct session creation without a trigger/cron schedule.
|
|
53
|
+
*
|
|
54
|
+
* Note: Claude Code creates sessions with events:[] (empty),
|
|
55
|
+
* then sends the initial prompt via sendSessionEvent() after
|
|
56
|
+
* the session is provisioned. This method follows the same pattern.
|
|
57
|
+
*/
|
|
58
|
+
createSession(opts: {
|
|
59
|
+
title?: string;
|
|
60
|
+
environmentId: string;
|
|
61
|
+
repoUrl?: string;
|
|
62
|
+
revision?: string;
|
|
63
|
+
seedBundleFileId?: string;
|
|
64
|
+
environmentVariables?: Record<string, string>;
|
|
65
|
+
model?: string;
|
|
66
|
+
prompt?: string;
|
|
67
|
+
}): Promise<{
|
|
68
|
+
id: string;
|
|
69
|
+
title: string;
|
|
70
|
+
}>;
|
|
71
|
+
/**
|
|
72
|
+
* Fetch events from a session. Supports pagination via afterId.
|
|
73
|
+
* Returns the conversation history: user messages, assistant responses, tool calls.
|
|
74
|
+
*/
|
|
75
|
+
getSessionEvents(sessionId: string, afterId?: string): Promise<Array<Record<string, unknown>>>;
|
|
76
|
+
/**
|
|
77
|
+
* Send a user message to a running session.
|
|
78
|
+
*/
|
|
79
|
+
sendSessionEvent(sessionId: string, content: string, uuid?: string): Promise<ApiResponse>;
|
|
80
|
+
/**
|
|
81
|
+
* Get the branch name from session outcomes (after session completes).
|
|
82
|
+
*/
|
|
83
|
+
getSessionBranch(session: Session): string | undefined;
|
|
84
|
+
uploadFile(fileContent: Buffer | Uint8Array, filename: string, purpose?: string): Promise<{
|
|
85
|
+
id: string;
|
|
86
|
+
filename: string;
|
|
87
|
+
size: number;
|
|
88
|
+
}>;
|
|
89
|
+
/**
|
|
90
|
+
* Check if GitHub token is synced for remote sessions.
|
|
91
|
+
* Requires tengu_cobalt_lantern feature flag.
|
|
92
|
+
*/
|
|
93
|
+
checkGitHubTokenSync(): Promise<boolean>;
|
|
94
|
+
/**
|
|
95
|
+
* Check if the Claude GitHub App is installed on a repo.
|
|
96
|
+
*/
|
|
97
|
+
checkGitHubAppInstalled(owner: string, repo: string): Promise<{
|
|
98
|
+
installed: boolean;
|
|
99
|
+
status?: string;
|
|
100
|
+
}>;
|
|
101
|
+
}
|
|
102
|
+
export declare function buildTriggerBody(opts: {
|
|
103
|
+
name: string;
|
|
104
|
+
cron: string;
|
|
105
|
+
prompt: string;
|
|
106
|
+
environmentId: string;
|
|
107
|
+
repoUrl?: string;
|
|
108
|
+
model?: string;
|
|
109
|
+
tools?: string[];
|
|
110
|
+
mcpConnections?: McpConnection[];
|
|
111
|
+
enabled?: boolean;
|
|
112
|
+
}): CreateTriggerBody;
|
|
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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"}
|