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/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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -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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"}