@opencomputer/cli 0.6.6 → 0.6.8

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/api.d.ts CHANGED
@@ -85,6 +85,66 @@ export interface AgentRuntimeVariableMetadata {
85
85
  createdAt: string;
86
86
  updatedAt: string;
87
87
  }
88
+ export interface TemplateInspection {
89
+ id: string;
90
+ repository: {
91
+ url: string;
92
+ fullName: string;
93
+ defaultBranch: "main";
94
+ commitSha: string;
95
+ };
96
+ template: {
97
+ name: string;
98
+ description: string;
99
+ documentation?: string;
100
+ defaultProjectName?: string;
101
+ firstRun?: {
102
+ agent: string;
103
+ prompt: string;
104
+ };
105
+ };
106
+ agents: Array<{
107
+ id: string;
108
+ name: string;
109
+ }>;
110
+ requirements: {
111
+ secrets: Array<{
112
+ name: string;
113
+ description?: string;
114
+ documentation?: string;
115
+ required?: boolean;
116
+ agentId?: string;
117
+ allowedOrigins: string[];
118
+ }>;
119
+ runtimeVariables: Array<{
120
+ name: string;
121
+ description?: string;
122
+ documentation?: string;
123
+ required: boolean;
124
+ example?: string;
125
+ agentId?: string;
126
+ }>;
127
+ connections: Array<{
128
+ id: string;
129
+ description?: string;
130
+ provider: string;
131
+ permissions: string[];
132
+ }>;
133
+ };
134
+ expiresAt: string;
135
+ }
136
+ export interface TemplateInstallation {
137
+ id: string;
138
+ inspectionId: string;
139
+ projectId: string;
140
+ projectAgentId: string;
141
+ projectUrl: string;
142
+ state: "awaiting_configuration" | "creating_project" | "building" | "deploying" | "ready" | "failed";
143
+ error?: {
144
+ stage: string;
145
+ message: string;
146
+ };
147
+ }
88
148
  export interface ManagedAgentWebhook {
89
149
  id: string;
90
150
  projectId: string;
@@ -92,6 +152,8 @@ export interface ManagedAgentWebhook {
92
152
  agentId: string;
93
153
  name: string;
94
154
  enabled: boolean;
155
+ /** Delivery identity source, `header:<name>` or `body:<json-pointer>`. */
156
+ identity?: string;
95
157
  invocationUrl: string;
96
158
  token?: string;
97
159
  createdAt: string;
@@ -160,6 +222,7 @@ export declare class OpenComputerClient {
160
222
  private readonly config;
161
223
  private readonly idempotencyKey?;
162
224
  constructor(config: ResolvedConfig, idempotencyKey?: string | undefined);
225
+ private response;
163
226
  private request;
164
227
  startLogin(): Promise<{
165
228
  device_code: string;
@@ -184,6 +247,15 @@ export declare class OpenComputerClient {
184
247
  agents(): Promise<ManagedAgentSummary[]>;
185
248
  projects(): Promise<ManagedProject[]>;
186
249
  createProject(name: string, slug: string): Promise<ManagedProject>;
250
+ projectSourceArchive(projectId: string): Promise<Response>;
251
+ inspectTemplate(repositoryUrl: string): Promise<TemplateInspection>;
252
+ createTemplateInstallation(input: {
253
+ inspectionId: string;
254
+ projectName: string;
255
+ idempotencyKey: string;
256
+ }): Promise<TemplateInstallation>;
257
+ finalizeTemplateInstallation(installationId: string): Promise<TemplateInstallation>;
258
+ templateInstallation(installationId: string): Promise<TemplateInstallation>;
187
259
  secrets(input: {
188
260
  projectId: string;
189
261
  environment?: "development" | "production";
@@ -255,12 +327,15 @@ export declare class OpenComputerClient {
255
327
  name: string;
256
328
  environment: "development" | "production";
257
329
  agentId: string;
330
+ identity?: string;
258
331
  }): Promise<ManagedAgentWebhook>;
259
332
  updateWebhook(input: {
260
333
  projectId: string;
261
334
  webhookId: string;
262
335
  name?: string;
263
336
  enabled?: boolean;
337
+ /** A source sets it; null clears it. */
338
+ identity?: string | null;
264
339
  }): Promise<ManagedAgentWebhook>;
265
340
  rotateWebhookToken(input: {
266
341
  projectId: string;
package/dist/api.js CHANGED
@@ -28,7 +28,7 @@ export class OpenComputerClient {
28
28
  this.config = config;
29
29
  this.idempotencyKey = idempotencyKey;
30
30
  }
31
- async request(path, init = {}, authenticated = true) {
31
+ async response(path, init = {}, authenticated = true) {
32
32
  const headers = new Headers(init.headers);
33
33
  if (init.body && !headers.has("content-type")) {
34
34
  headers.set("content-type", "application/json");
@@ -57,12 +57,17 @@ export class OpenComputerClient {
57
57
  redirect: "manual",
58
58
  signal: AbortSignal.timeout(30_000),
59
59
  });
60
- if (response.status === 204)
61
- return undefined;
62
- const body = await response.json().catch(() => undefined);
63
60
  if (!response.ok) {
61
+ const body = await response.json().catch(() => undefined);
64
62
  throw new APIError(errorMessage(body, response.status), response.status);
65
63
  }
64
+ return response;
65
+ }
66
+ async request(path, init = {}, authenticated = true) {
67
+ const response = await this.response(path, init, authenticated);
68
+ if (response.status === 204)
69
+ return undefined;
70
+ const body = await response.json().catch(() => undefined);
66
71
  return body;
67
72
  }
68
73
  startLogin() {
@@ -97,6 +102,35 @@ export class OpenComputerClient {
97
102
  body: JSON.stringify({ name, slug }),
98
103
  });
99
104
  }
105
+ projectSourceArchive(projectId) {
106
+ return this.response(`/api/managed-agents/projects/${encodeURIComponent(projectId)}/source-archive`);
107
+ }
108
+ async inspectTemplate(repositoryUrl) {
109
+ const deadline = Date.now() + 10 * 60_000;
110
+ for (;;) {
111
+ const result = await this.request("/api/managed-agents/template-inspections", {
112
+ method: "POST",
113
+ body: JSON.stringify({ repositoryUrl }),
114
+ });
115
+ if (result.status !== "preparing") {
116
+ return result;
117
+ }
118
+ const preparing = result;
119
+ if (Date.now() >= deadline) {
120
+ throw new Error("Template preparation is still running; try again shortly");
121
+ }
122
+ await new Promise((resolvePromise) => setTimeout(resolvePromise, Math.max(500, preparing.retryAfterMs)));
123
+ }
124
+ }
125
+ createTemplateInstallation(input) {
126
+ return this.request("/api/managed-agents/template-installations", { method: "POST", body: JSON.stringify(input) });
127
+ }
128
+ finalizeTemplateInstallation(installationId) {
129
+ return this.request(`/api/managed-agents/template-installations/${encodeURIComponent(installationId)}/finalize`, { method: "POST" });
130
+ }
131
+ templateInstallation(installationId) {
132
+ return this.request(`/api/managed-agents/template-installations/${encodeURIComponent(installationId)}`);
133
+ }
100
134
  async secrets(input) {
101
135
  const query = new URLSearchParams();
102
136
  if (input.environment)
@@ -203,6 +237,7 @@ export class OpenComputerClient {
203
237
  name: input.name,
204
238
  environment: input.environment,
205
239
  agentId: input.agentId,
240
+ ...(input.identity !== undefined ? { identity: input.identity } : {}),
206
241
  }),
207
242
  }).then((result) => result.webhook);
208
243
  }
@@ -212,6 +247,7 @@ export class OpenComputerClient {
212
247
  body: JSON.stringify({
213
248
  ...(input.name !== undefined ? { name: input.name } : {}),
214
249
  ...(input.enabled !== undefined ? { enabled: input.enabled } : {}),
250
+ ...(input.identity !== undefined ? { identity: input.identity } : {}),
215
251
  }),
216
252
  }).then((result) => result.webhook);
217
253
  }
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/commands.js CHANGED
@@ -7,6 +7,10 @@ import { ensureProjectBinding, findOpenComputerProjectRoot, } from "./binding.js
7
7
  import { assertStarterTarget, buildAgentArtifact, findAgentRoot, initializeAgentProject, } from "./project.js";
8
8
  import { developmentAgentReference, parseSessionCommand, resolveProjectAgent, } from "./session-command.js";
9
9
  import { formatSessionEvent } from "./session-prompt.js";
10
+ import { buildTemplateProject, normalizeTemplateRepositoryUrl, readTemplateManifest, templateDeployUrl, } from "./template.js";
11
+ import { defaultTemplateDirectory, materializeTemplateCheckout, } from "./template-local.js";
12
+ import { materializeProjectArchive } from "./project-local.js";
13
+ import { createInterface } from "node:readline/promises";
10
14
  import { doctorProject } from "./doctor.js";
11
15
  import { CLIError } from "./errors.js";
12
16
  export function deploymentAlias(requestedAlias) {
@@ -61,6 +65,49 @@ function consumeModelAccessProvider(args) {
61
65
  }
62
66
  return "codex";
63
67
  }
68
+ async function readTemplateSecretValue() {
69
+ if (!process.stdin.isTTY) {
70
+ const chunks = [];
71
+ for await (const chunk of process.stdin) {
72
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
73
+ }
74
+ const value = Buffer.concat(chunks).toString("utf8").replace(/\r?\n$/, "");
75
+ if (!value)
76
+ throw new Error("Secret value was empty");
77
+ return value;
78
+ }
79
+ process.stderr.write("Secret value (hidden): ");
80
+ process.stdin.setRawMode(true);
81
+ process.stdin.resume();
82
+ return new Promise((resolve, reject) => {
83
+ let value = "";
84
+ const finish = (error) => {
85
+ process.stdin.off("data", onData);
86
+ process.stdin.setRawMode(false);
87
+ process.stdin.pause();
88
+ process.stderr.write("\n");
89
+ if (error)
90
+ reject(error);
91
+ else if (!value)
92
+ reject(new Error("Secret value was empty"));
93
+ else
94
+ resolve(value);
95
+ };
96
+ const onData = (chunk) => {
97
+ for (const byte of chunk) {
98
+ if (byte === 3)
99
+ return finish(new Error("Secret entry cancelled"));
100
+ if (byte === 10 || byte === 13)
101
+ return finish();
102
+ if (byte === 8 || byte === 127)
103
+ value = value.slice(0, -1);
104
+ else
105
+ value += String.fromCharCode(byte);
106
+ }
107
+ };
108
+ process.stdin.on("data", onData);
109
+ });
110
+ }
64
111
  async function readStdinValue(enabled) {
65
112
  if (!enabled) {
66
113
  throw new CLIError("value_stdin_required", "A value must be supplied through standard input.", "Pipe the value into this command and add `--value-stdin`.");
@@ -358,8 +405,224 @@ async function runAgent(client, agent, prompt, keep, json, verbose, idempotencyK
358
405
  }
359
406
  export async function runCommand(command, rawArgs, globals) {
360
407
  const args = [...rawArgs];
408
+ if (command === "template" && args[0] === "validate") {
409
+ args.shift();
410
+ const repositoryUrl = option(args, "--repository-url");
411
+ const appUrl = option(args, "--app-url");
412
+ const directory = args.shift() ?? process.cwd();
413
+ if (args.length)
414
+ throw new Error(`Unexpected argument: ${args[0]}`);
415
+ const manifest = await readTemplateManifest(directory);
416
+ const deployUrl = repositoryUrl
417
+ ? templateDeployUrl(repositoryUrl, appUrl)
418
+ : undefined;
419
+ if (globals.json) {
420
+ printJSON({ file: "oc-template.toml", manifest, deployUrl });
421
+ }
422
+ else {
423
+ process.stdout.write(`Valid template: ${manifest.template.name}\n` +
424
+ (deployUrl ? `Deploy URL: ${deployUrl}\n` : ""));
425
+ }
426
+ return;
427
+ }
428
+ if (command === "template" && args[0] === "build") {
429
+ args.shift();
430
+ const output = option(args, "--output");
431
+ const directory = args.shift() ?? process.cwd();
432
+ if (args.length)
433
+ throw new Error(`Unexpected argument: ${args[0]}`);
434
+ const bundle = await buildTemplateProject(directory);
435
+ const serialized = `${JSON.stringify(bundle)}\n`;
436
+ if (output) {
437
+ const { writeFile } = await import("node:fs/promises");
438
+ await writeFile(output, serialized, { mode: 0o600 });
439
+ if (!globals.json)
440
+ process.stdout.write(`Built template bundle: ${output}\n`);
441
+ }
442
+ else {
443
+ process.stdout.write(serialized);
444
+ }
445
+ return;
446
+ }
361
447
  const config = await resolveConfig(globals);
362
448
  const client = new OpenComputerClient(config, globals.idempotencyKey);
449
+ if (command === "project" && args[0] === "clone") {
450
+ args.shift();
451
+ const directory = option(args, "--directory");
452
+ const projectId = args.shift();
453
+ if (!projectId || args.length) {
454
+ throw new Error("Usage: opencomputer project clone <project-id> [--directory <path>]");
455
+ }
456
+ const project = (await client.projects()).find((candidate) => candidate.id === projectId);
457
+ if (!project)
458
+ throw new Error(`Project not found: ${projectId}`);
459
+ const checkout = await materializeProjectArchive({
460
+ response: await client.projectSourceArchive(project.id),
461
+ directory: directory ?? project.slug,
462
+ });
463
+ const binding = await ensureProjectBinding(client, config, checkout.directory, {
464
+ project: project.id,
465
+ });
466
+ if (globals.json)
467
+ printJSON({ checkout, binding });
468
+ else {
469
+ process.stdout.write(`Cloned ${binding.projectName} (${binding.projectId}).\n\n` +
470
+ `Next:\n cd ${checkout.directory}\n npm install\n` +
471
+ ` npm run deploy -- --watch --api-url ${config.apiUrl}\n`);
472
+ }
473
+ return;
474
+ }
475
+ if (command === "template") {
476
+ const action = args.shift();
477
+ if (action === "clone") {
478
+ const commitSha = option(args, "--commit");
479
+ const project = option(args, "--project");
480
+ const directory = option(args, "--directory");
481
+ const repositoryUrl = args.shift();
482
+ if (!repositoryUrl || !commitSha || !project || args.length) {
483
+ throw new Error("Usage: opencomputer template clone <repository-url> --commit <sha> --project <id> [--directory <path>]");
484
+ }
485
+ const normalized = normalizeTemplateRepositoryUrl(repositoryUrl);
486
+ const checkout = await materializeTemplateCheckout(normalized, commitSha, directory);
487
+ const binding = await ensureProjectBinding(client, config, checkout.directory, { project });
488
+ if (globals.json)
489
+ printJSON({ checkout, binding });
490
+ else {
491
+ process.stdout.write(`Cloned ${normalized}@${commitSha.slice(0, 12)}\n` +
492
+ `Linked to ${binding.projectName} (${binding.projectId}).\n\n` +
493
+ `Next:\n cd ${checkout.directory}\n npm install\n npm run deploy -- --watch\n`);
494
+ }
495
+ return;
496
+ }
497
+ if (action !== "deploy") {
498
+ throw new Error("Usage: opencomputer template <deploy|clone> ...");
499
+ }
500
+ const projectNameOption = option(args, "--project-name");
501
+ const directoryOption = option(args, "--directory");
502
+ const confirmed = flag(args, "--yes");
503
+ const repositoryUrl = args.shift();
504
+ if (!repositoryUrl) {
505
+ throw new Error("A GitHub repository URL is required");
506
+ }
507
+ if (args.length)
508
+ throw new Error(`Unexpected argument: ${args[0]}`);
509
+ const inspection = await client.inspectTemplate(normalizeTemplateRepositoryUrl(repositoryUrl));
510
+ if (!globals.json) {
511
+ process.stdout.write(`\n${inspection.template.name}\n${inspection.template.description}\n` +
512
+ `Source: ${inspection.repository.fullName}@${inspection.repository.commitSha.slice(0, 12)}\n` +
513
+ `Agents: ${inspection.agents.map((agent) => agent.name).join(", ")}\n` +
514
+ `Target: Development\n\n`);
515
+ }
516
+ if (inspection.requirements.connections.length) {
517
+ throw new Error("This template needs an interactive provider connection. Open its deploy URL in the dashboard to continue.");
518
+ }
519
+ const requiredSecrets = inspection.requirements.secrets.filter((requirement) => requirement.required !== false);
520
+ if (!process.stdin.isTTY && requiredSecrets.length) {
521
+ throw new Error(`Secret ${requiredSecrets[0].name} requires an interactive terminal; secret values are never accepted as command-line arguments`);
522
+ }
523
+ if ((!process.stdin.isTTY || !process.stdout.isTTY) && !projectNameOption) {
524
+ throw new Error("--project-name is required in non-interactive mode");
525
+ }
526
+ const terminal = process.stdin.isTTY && process.stdout.isTTY
527
+ ? createInterface({ input: process.stdin, output: process.stdout })
528
+ : undefined;
529
+ let projectName = projectNameOption ??
530
+ inspection.template.defaultProjectName ??
531
+ inspection.template.name;
532
+ if (terminal && !projectNameOption) {
533
+ projectName =
534
+ (await terminal.question(`Project name [${projectName}]: `)).trim() ||
535
+ projectName;
536
+ }
537
+ if (terminal && !confirmed) {
538
+ const answer = (await terminal.question("Create this Development project? [y/N] "))
539
+ .trim()
540
+ .toLowerCase();
541
+ if (answer !== "y" && answer !== "yes") {
542
+ terminal.close();
543
+ throw new Error("Template deployment cancelled");
544
+ }
545
+ }
546
+ const checkout = await materializeTemplateCheckout(inspection.repository.url, inspection.repository.commitSha, directoryOption ?? defaultTemplateDirectory(inspection.repository.url));
547
+ const runtimeValues = new Map();
548
+ for (const requirement of inspection.requirements.runtimeVariables) {
549
+ if (!terminal) {
550
+ if (requirement.required) {
551
+ throw new Error(`Runtime variable ${requirement.name} requires an interactive terminal`);
552
+ }
553
+ continue;
554
+ }
555
+ const hint = requirement.example ? ` [${requirement.example}]` : "";
556
+ const value = (await terminal.question(`${requirement.name}${hint}: `)).trim() ||
557
+ requirement.example ||
558
+ "";
559
+ if (requirement.required && !value) {
560
+ terminal.close();
561
+ throw new Error(`${requirement.name} is required`);
562
+ }
563
+ if (value)
564
+ runtimeValues.set(requirement.name, value);
565
+ }
566
+ terminal?.close();
567
+ const installation = await client.createTemplateInstallation({
568
+ inspectionId: inspection.id,
569
+ projectName,
570
+ idempotencyKey: crypto.randomUUID(),
571
+ });
572
+ const installationAgentId = (localAgentId) => !localAgentId || localAgentId === inspection.agents[0]?.id
573
+ ? installation.projectAgentId
574
+ : `${installation.projectAgentId}--${localAgentId}`;
575
+ for (const requirement of requiredSecrets) {
576
+ process.stderr.write(`${requirement.name}\n`);
577
+ const value = await readTemplateSecretValue();
578
+ await client.putSecret({
579
+ projectId: installation.projectId,
580
+ name: requirement.name,
581
+ value,
582
+ environment: "development",
583
+ agentId: installationAgentId(requirement.agentId),
584
+ allowedOrigins: requirement.allowedOrigins,
585
+ });
586
+ }
587
+ for (const requirement of inspection.requirements.runtimeVariables) {
588
+ const value = runtimeValues.get(requirement.name);
589
+ if (!value)
590
+ continue;
591
+ await client.putRuntimeVariable({
592
+ projectId: installation.projectId,
593
+ name: requirement.name,
594
+ value,
595
+ environment: "development",
596
+ agentId: installationAgentId(requirement.agentId),
597
+ });
598
+ }
599
+ let current = await client.finalizeTemplateInstallation(installation.id);
600
+ const deadline = Date.now() + 10 * 60_000;
601
+ while (!["ready", "failed"].includes(current.state) &&
602
+ Date.now() < deadline) {
603
+ await new Promise((resolvePromise) => setTimeout(resolvePromise, 1_000));
604
+ current = await client.templateInstallation(current.id);
605
+ if (!globals.json)
606
+ process.stderr.write(`Template installation: ${current.state}\r`);
607
+ }
608
+ if (current.state === "failed") {
609
+ throw new Error(current.error?.message ?? "Template installation failed");
610
+ }
611
+ if (current.state !== "ready") {
612
+ throw new Error(`Template installation is still ${current.state}; ${current.projectUrl}`);
613
+ }
614
+ const binding = await ensureProjectBinding(client, config, checkout.directory, {
615
+ project: current.projectId,
616
+ });
617
+ if (globals.json)
618
+ printJSON({ installation: current, checkout, binding });
619
+ else {
620
+ process.stdout.write(`\nReady: ${current.projectUrl}\n` +
621
+ `Local: ${checkout.directory}\n\n` +
622
+ `Next:\n cd ${checkout.directory}\n npm install\n npm run deploy -- --watch\n`);
623
+ }
624
+ return;
625
+ }
363
626
  if (command === "login") {
364
627
  const identity = await login(config, {
365
628
  noBrowser: flag(args, "--no-browser"),
@@ -828,15 +1091,18 @@ export async function runCommand(command, rawArgs, globals) {
828
1091
  else {
829
1092
  for (const webhook of webhooks) {
830
1093
  process.stdout.write(`${webhook.id} ${webhook.enabled ? "enabled " : "disabled"} ` +
831
- `${webhook.name} ${webhook.invocationUrl}\n`);
1094
+ `${webhook.name} ${webhook.invocationUrl}` +
1095
+ (webhook.identity ? ` identity=${webhook.identity}` : "") +
1096
+ "\n");
832
1097
  }
833
1098
  }
834
1099
  return;
835
1100
  }
836
1101
  if (action === "create") {
837
1102
  const name = args.shift()?.trim();
1103
+ const identity = option(args, "--identity");
838
1104
  if (!name || args.length) {
839
- throw new Error("Use `opencomputer webhooks create <name>`.");
1105
+ throw new Error("Use `opencomputer webhooks create <name> [--identity header:<name>|body:<json-pointer>]`.");
840
1106
  }
841
1107
  const existing = (await client.webhooks({
842
1108
  projectId: project.projectId,
@@ -849,21 +1115,42 @@ export async function runCommand(command, rawArgs, globals) {
849
1115
  name,
850
1116
  environment,
851
1117
  agentId,
1118
+ ...(identity ? { identity } : {}),
852
1119
  }));
853
1120
  if (globals.json)
854
1121
  printJSON({ ...webhook, reused: Boolean(existing) });
855
1122
  else {
856
1123
  process.stdout.write(`${existing ? "Reused" : "Created"} ${webhook.name} (${webhook.id}) for ${agentId}@${environment}.\n` +
857
1124
  `URL: ${webhook.invocationUrl}\n` +
1125
+ (webhook.identity ? `Identity: ${webhook.identity}\n` : "") +
858
1126
  (existing
859
- ? "The existing token remains unchanged.\n"
860
- : `Token: ${webhook.token ?? "unavailable"}\nSave this token now. It will not be shown again.\n`));
1127
+ ? "The existing token remains unchanged; this URL omits it.\n"
1128
+ : `Token: ${webhook.token ?? "unavailable"}\n` +
1129
+ "Save this URL now. It carries the token and will not be shown again.\n"));
861
1130
  }
862
1131
  return;
863
1132
  }
864
1133
  const webhookId = args.shift();
1134
+ const identityOption = action === "update" ? option(args, "--identity") : undefined;
865
1135
  if (!webhookId || args.length) {
866
- throw new Error("Use `opencomputer webhooks list|create|enable|disable|rotate-token|remove`.");
1136
+ throw new Error("Use `opencomputer webhooks list|create|update|enable|disable|rotate-token|remove`.");
1137
+ }
1138
+ if (action === "update") {
1139
+ if (identityOption === undefined) {
1140
+ throw new Error("Use `opencomputer webhooks update <id> --identity header:<name>|body:<json-pointer>|none`.");
1141
+ }
1142
+ const webhook = await client.updateWebhook({
1143
+ projectId: project.projectId,
1144
+ webhookId,
1145
+ identity: identityOption === "none" ? null : identityOption,
1146
+ });
1147
+ if (globals.json)
1148
+ printJSON(webhook);
1149
+ else
1150
+ process.stdout.write(webhook.identity
1151
+ ? `${webhook.name} now takes its delivery identity from ${webhook.identity}.\n`
1152
+ : `${webhook.name} now treats every delivery without an Idempotency-Key as new.\n`);
1153
+ return;
867
1154
  }
868
1155
  if (action === "enable" || action === "disable") {
869
1156
  const webhook = await client.updateWebhook({
@@ -886,8 +1173,9 @@ export async function runCommand(command, rawArgs, globals) {
886
1173
  printJSON(webhook);
887
1174
  else {
888
1175
  process.stdout.write(`Rotated the token for ${webhook.name}.\n` +
1176
+ `URL: ${webhook.invocationUrl}\n` +
889
1177
  `Token: ${webhook.token ?? "unavailable"}\n` +
890
- "Save this token now. The previous token no longer works.\n");
1178
+ "Save this URL now. The previous token and URL no longer work.\n");
891
1179
  }
892
1180
  return;
893
1181
  }
@@ -899,7 +1187,7 @@ export async function runCommand(command, rawArgs, globals) {
899
1187
  process.stdout.write(`Removed webhook ${webhookId}.\n`);
900
1188
  return;
901
1189
  }
902
- throw new Error("Use `opencomputer webhooks list|create|enable|disable|rotate-token|remove`.");
1190
+ throw new Error("Use `opencomputer webhooks list|create|update|enable|disable|rotate-token|remove`.");
903
1191
  }
904
1192
  if (command === "logs") {
905
1193
  const follow = flag(args, "--follow");