@skrr-ai/cli 0.1.74 → 0.1.76

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.
@@ -4,6 +4,7 @@ const core_1 = require("@oclif/core");
4
4
  const data_provider_1 = require("@skrr-ai/data-provider");
5
5
  const base_command_1 = require("../../../base-command");
6
6
  const github_oidc_1 = require("../../../lib/github-oidc");
7
+ const http_error_1 = require("../../../lib/http-error");
7
8
  /**
8
9
  * Publish a release from CI using GitHub OIDC trusted publishing (OSK-12311).
9
10
  *
@@ -84,6 +85,21 @@ class AgentsReleasesCiPublish extends base_command_1.BaseCommand {
84
85
  });
85
86
  }
86
87
  catch (err) {
88
+ const body = (0, http_error_1.httpBodyOf)(err);
89
+ if ((0, http_error_1.httpStatusOf)(err) === 401 && body?.code === 'CI_OIDC_TOKEN_INVALID') {
90
+ const reason = typeof body.error === 'string' ? body.error : 'OIDC token was rejected';
91
+ const requestId = err instanceof Error ? err.requestId : undefined;
92
+ this.failWithCliError({
93
+ message: `${reason}. Request a fresh GitHub Actions OIDC token with ` +
94
+ '`permissions: id-token: write` and the expected audience.',
95
+ code: 'CI_OIDC_TOKEN_INVALID',
96
+ status: 401,
97
+ exit: 2,
98
+ retryable: false,
99
+ details: body,
100
+ requestId: typeof requestId === 'string' ? requestId : undefined,
101
+ });
102
+ }
87
103
  this.handleApiError(err);
88
104
  }
89
105
  if (flags.json) {
@@ -9,7 +9,7 @@ const store_advisories_1 = require("../../../lib/store-advisories");
9
9
  * reversible side. Lifting it later takes two (`close`, then `confirm`).
10
10
  */
11
11
  class StoreAdvisoriesIssue extends base_command_1.BaseCommand {
12
- static description = 'Issue a Store advisory against a published release. `revoke` stops every installed copy running it from running unattended. Store curators only.';
12
+ static description = 'Issue a Store advisory against a published release. `revoke` stops unattended runs; `pause_execution` also stops manual chat. Store curators only.';
13
13
  static examples = [
14
14
  '<%= config.bin %> store advisories issue agent_abc123 ar_def456 --remedy revoke --summary "Posts connector tokens to a third-party host" --evidence https://example.com/report',
15
15
  '<%= config.bin %> store advisories issue agent_abc123 ar_def456 --remedy withdraw --summary "Breaks on the new calendar API"',
@@ -24,7 +24,7 @@ class StoreAdvisoriesIssue extends base_command_1.BaseCommand {
24
24
  };
25
25
  static flags = {
26
26
  remedy: core_1.Flags.string({
27
- description: 'notify: tell installers · withdraw: stop new installs and updates · revoke: withdraw, and stop unattended runs of every copy running it',
27
+ description: 'notify: tell installers · withdraw: stop installs and updates · revoke: also stop unattended runs · pause_execution: also stop manual chat',
28
28
  options: [...data_provider_1.STORE_RELEASE_ADVISORY_ISSUABLE_REMEDIES],
29
29
  required: true,
30
30
  }),
@@ -6,12 +6,12 @@ const base_command_1 = require("../../base-command");
6
6
  const prompt_1 = require("../../lib/prompt");
7
7
  /**
8
8
  * One line per placement, said the same way the web install rail says it: the
9
- * difference is whether a stranger's instructions get this computer's shell,
10
- * files and browser.
9
+ * difference is whether a stranger's instructions may reach a connected
10
+ * machine in the buyer's account. The model loop stays on Agent Worker.
11
11
  */
12
12
  const PLACEMENT_NOTE = {
13
- cloud: "It runs in the cloud, so its tools do not reach this computer. You can change that in the agent's Runtime settings.",
14
- local: 'It may use tools on your own computer (shell, files, browser) whenever your daemon is connected.',
13
+ cloud: "It runs in the cloud, so its tools cannot reach your connected machines. You can change that in the agent's Runtime settings.",
14
+ local: 'It still runs in the cloud. Its tools may use the shell, files and browser on an available connected machine in your account, selected when the agent runs.',
15
15
  };
16
16
  class StoreInstall extends base_command_1.BaseCommand {
17
17
  static description = 'Install a published agent — you get your own copy of it. A paid agent shows its price and refund terms and asks you to confirm first.';
@@ -44,8 +44,8 @@ class StoreInstall extends base_command_1.BaseCommand {
44
44
  description: 'Confirm a paid purchase without prompting. The price and refund terms are still printed.',
45
45
  }),
46
46
  'run-on': core_1.Flags.string({
47
- description: 'Where the copy runs. cloud (the default) keeps its tools off this computer; ' +
48
- 'local lets it use your shell, files and browser when your daemon is connected',
47
+ description: 'Where its tools may run. cloud (the default) keeps tools off connected machines; ' +
48
+ 'local lets tools use an available connected machine in your account, selected at run time. The agent runs in the cloud either way',
49
49
  options: [...data_provider_1.STORE_INSTALL_EXECUTION_PLACEMENTS],
50
50
  }),
51
51
  'share-outcomes': core_1.Flags.boolean({