@skrr-ai/cli 0.1.60 → 0.1.62

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.
Files changed (194) hide show
  1. package/dist/base-command.js +16 -0
  2. package/dist/commands/agents/create.d.ts +1 -0
  3. package/dist/commands/agents/create.js +8 -1
  4. package/dist/commands/agents/delete.d.ts +14 -0
  5. package/dist/commands/agents/delete.js +52 -4
  6. package/dist/commands/agents/eval/index.d.ts +38 -0
  7. package/dist/commands/agents/eval/index.js +157 -0
  8. package/dist/commands/agents/eval/list.d.ts +13 -0
  9. package/dist/commands/agents/eval/list.js +53 -0
  10. package/dist/commands/agents/eval/show.d.ts +13 -0
  11. package/dist/commands/agents/eval/show.js +36 -0
  12. package/dist/commands/agents/import.d.ts +37 -0
  13. package/dist/commands/agents/import.js +233 -0
  14. package/dist/commands/agents/pull.d.ts +27 -0
  15. package/dist/commands/agents/pull.js +82 -0
  16. package/dist/commands/agents/push.d.ts +28 -0
  17. package/dist/commands/agents/push.js +112 -0
  18. package/dist/commands/agents/releases/ci-publish.d.ts +32 -0
  19. package/dist/commands/agents/releases/ci-publish.js +99 -0
  20. package/dist/commands/agents/releases/create.d.ts +3 -0
  21. package/dist/commands/agents/releases/create.js +27 -6
  22. package/dist/commands/agents/releases/known-issues/add.d.ts +19 -0
  23. package/dist/commands/agents/releases/known-issues/add.js +43 -0
  24. package/dist/commands/agents/releases/known-issues/list.d.ts +17 -0
  25. package/dist/commands/agents/releases/known-issues/list.js +55 -0
  26. package/dist/commands/agents/releases/known-issues/update.d.ts +18 -0
  27. package/dist/commands/agents/releases/known-issues/update.js +47 -0
  28. package/dist/commands/agents/releases/list.js +25 -3
  29. package/dist/commands/agents/releases/rollback.js +12 -4
  30. package/dist/commands/agents/releases/test-install.d.ts +22 -0
  31. package/dist/commands/agents/releases/test-install.js +70 -0
  32. package/dist/commands/agents/releases/trusted-publishers/list.d.ts +17 -0
  33. package/dist/commands/agents/releases/trusted-publishers/list.js +55 -0
  34. package/dist/commands/agents/releases/trusted-publishers/remove.d.ts +17 -0
  35. package/dist/commands/agents/releases/trusted-publishers/remove.js +45 -0
  36. package/dist/commands/agents/releases/trusted-publishers/set.d.ts +27 -0
  37. package/dist/commands/agents/releases/trusted-publishers/set.js +82 -0
  38. package/dist/commands/agents/update.d.ts +1 -0
  39. package/dist/commands/agents/update.js +8 -1
  40. package/dist/commands/agents/usage-cap.d.ts +20 -0
  41. package/dist/commands/agents/usage-cap.js +76 -0
  42. package/dist/commands/agents/validate.d.ts +22 -0
  43. package/dist/commands/agents/validate.js +66 -0
  44. package/dist/commands/agents/visibility.d.ts +13 -0
  45. package/dist/commands/agents/visibility.js +84 -2
  46. package/dist/commands/commerce/fees/show.d.ts +19 -0
  47. package/dist/commands/commerce/fees/show.js +75 -0
  48. package/dist/commands/earnings/index.d.ts +15 -0
  49. package/dist/commands/earnings/index.js +46 -0
  50. package/dist/commands/earnings/payouts.d.ts +12 -0
  51. package/dist/commands/earnings/payouts.js +39 -0
  52. package/dist/commands/earnings/statements.d.ts +19 -0
  53. package/dist/commands/earnings/statements.js +70 -0
  54. package/dist/commands/goals/key-results/create.d.ts +1 -1
  55. package/dist/commands/goals/key-results/create.js +5 -1
  56. package/dist/commands/harnesses/show.js +11 -1
  57. package/dist/commands/logout.js +31 -0
  58. package/dist/commands/machines/show.js +10 -1
  59. package/dist/commands/managed-execution/show.d.ts +10 -0
  60. package/dist/commands/managed-execution/show.js +60 -0
  61. package/dist/commands/spaces/show.js +35 -1
  62. package/dist/commands/step-up.d.ts +23 -0
  63. package/dist/commands/step-up.js +96 -0
  64. package/dist/commands/store/acquisitions/approve.d.ts +30 -0
  65. package/dist/commands/store/acquisitions/approve.js +100 -0
  66. package/dist/commands/store/acquisitions/decline.d.ts +17 -0
  67. package/dist/commands/store/acquisitions/decline.js +47 -0
  68. package/dist/commands/store/acquisitions/show.d.ts +16 -0
  69. package/dist/commands/store/acquisitions/show.js +49 -0
  70. package/dist/commands/store/admissions/approve.d.ts +19 -0
  71. package/dist/commands/store/admissions/approve.js +50 -0
  72. package/dist/commands/store/admissions/list.d.ts +15 -0
  73. package/dist/commands/store/admissions/list.js +60 -0
  74. package/dist/commands/store/admissions/refuse.d.ts +18 -0
  75. package/dist/commands/store/admissions/refuse.js +49 -0
  76. package/dist/commands/store/advisories/artifact.d.ts +15 -0
  77. package/dist/commands/store/advisories/artifact.js +25 -0
  78. package/dist/commands/store/advisories/cancel.d.ts +13 -0
  79. package/dist/commands/store/advisories/cancel.js +34 -0
  80. package/dist/commands/store/advisories/close.d.ts +18 -0
  81. package/dist/commands/store/advisories/close.js +51 -0
  82. package/dist/commands/store/advisories/confirm.d.ts +17 -0
  83. package/dist/commands/store/advisories/confirm.js +40 -0
  84. package/dist/commands/store/advisories/issue.d.ts +20 -0
  85. package/dist/commands/store/advisories/issue.js +59 -0
  86. package/dist/commands/store/advisories/list.d.ts +15 -0
  87. package/dist/commands/store/advisories/list.js +49 -0
  88. package/dist/commands/store/advisories/show.d.ts +13 -0
  89. package/dist/commands/store/advisories/show.js +34 -0
  90. package/dist/commands/store/artifacts/release.d.ts +16 -0
  91. package/dist/commands/store/artifacts/release.js +31 -0
  92. package/dist/commands/store/artifacts/used-by.d.ts +12 -0
  93. package/dist/commands/store/artifacts/used-by.js +20 -0
  94. package/dist/commands/store/browse.d.ts +5 -0
  95. package/dist/commands/store/browse.js +28 -1
  96. package/dist/commands/store/channel.d.ts +21 -0
  97. package/dist/commands/store/channel.js +62 -0
  98. package/dist/commands/store/follow.d.ts +14 -0
  99. package/dist/commands/store/follow.js +45 -0
  100. package/dist/commands/store/governance/policy.d.ts +18 -5
  101. package/dist/commands/store/governance/policy.js +80 -12
  102. package/dist/commands/store/governance/requests.d.ts +28 -0
  103. package/dist/commands/store/governance/requests.js +116 -0
  104. package/dist/commands/store/install.d.ts +3 -0
  105. package/dist/commands/store/install.js +101 -2
  106. package/dist/commands/store/issues.d.ts +26 -0
  107. package/dist/commands/store/issues.js +118 -0
  108. package/dist/commands/store/maintainers/add.d.ts +13 -0
  109. package/dist/commands/store/maintainers/add.js +23 -0
  110. package/dist/commands/store/maintainers/remove.d.ts +13 -0
  111. package/dist/commands/store/maintainers/remove.js +22 -0
  112. package/dist/commands/store/publishers/approve.d.ts +11 -0
  113. package/dist/commands/store/publishers/approve.js +25 -0
  114. package/dist/commands/store/publishers/claim.d.ts +12 -0
  115. package/dist/commands/store/publishers/claim.js +20 -0
  116. package/dist/commands/store/publishers/confirm.d.ts +11 -0
  117. package/dist/commands/store/publishers/confirm.js +17 -0
  118. package/dist/commands/store/publishers/domains/begin.d.ts +12 -0
  119. package/dist/commands/store/publishers/domains/begin.js +20 -0
  120. package/dist/commands/store/publishers/domains/list.d.ts +9 -0
  121. package/dist/commands/store/publishers/domains/list.js +19 -0
  122. package/dist/commands/store/publishers/domains/verify.d.ts +12 -0
  123. package/dist/commands/store/publishers/domains/verify.js +20 -0
  124. package/dist/commands/store/publishers/namespaces.d.ts +8 -0
  125. package/dist/commands/store/publishers/namespaces.js +16 -0
  126. package/dist/commands/store/publishers/verified.d.ts +11 -0
  127. package/dist/commands/store/publishers/verified.js +34 -0
  128. package/dist/commands/store/refund.d.ts +22 -0
  129. package/dist/commands/store/refund.js +80 -0
  130. package/dist/commands/store/report.d.ts +20 -0
  131. package/dist/commands/store/report.js +59 -0
  132. package/dist/commands/store/reports.d.ts +11 -0
  133. package/dist/commands/store/reports.js +52 -0
  134. package/dist/commands/store/signals.d.ts +18 -0
  135. package/dist/commands/store/signals.js +43 -0
  136. package/dist/commands/store/star.d.ts +17 -0
  137. package/dist/commands/store/star.js +41 -0
  138. package/dist/commands/store/stars.d.ts +10 -0
  139. package/dist/commands/store/stars.js +33 -0
  140. package/dist/commands/store/trial.d.ts +11 -0
  141. package/dist/commands/store/trial.js +17 -0
  142. package/dist/commands/store/uninstall.d.ts +19 -0
  143. package/dist/commands/store/uninstall.js +118 -0
  144. package/dist/commands/store/update.d.ts +2 -0
  145. package/dist/commands/store/update.js +60 -2
  146. package/dist/commands/store/updates.d.ts +10 -4
  147. package/dist/commands/store/updates.js +60 -39
  148. package/dist/commands/store/watch.d.ts +18 -0
  149. package/dist/commands/store/watch.js +44 -0
  150. package/dist/commands/subscriptions/health.d.ts +12 -0
  151. package/dist/commands/subscriptions/health.js +39 -0
  152. package/dist/commands/subscriptions/list.js +3 -2
  153. package/dist/commands/subscriptions/status.js +7 -1
  154. package/dist/commands/subscriptions/subscribe.d.ts +9 -2
  155. package/dist/commands/subscriptions/subscribe.js +141 -12
  156. package/dist/commands/tasks/comments/list.js +9 -1
  157. package/dist/commands/tasks/labels/attach.js +15 -2
  158. package/dist/commands/tasks/show.js +17 -3
  159. package/dist/commands/tasks/update.js +15 -4
  160. package/dist/commands/tasks/updates/add.js +5 -1
  161. package/dist/lib/agent-config.js +1 -0
  162. package/dist/lib/agent-evals.d.ts +71 -0
  163. package/dist/lib/agent-evals.js +359 -0
  164. package/dist/lib/agent-spec.d.ts +28 -0
  165. package/dist/lib/agent-spec.js +58 -0
  166. package/dist/lib/auth-storage.d.ts +12 -0
  167. package/dist/lib/auth-storage.js +0 -33
  168. package/dist/lib/commerce.d.ts +8 -0
  169. package/dist/lib/commerce.js +10 -0
  170. package/dist/lib/earnings.d.ts +36 -0
  171. package/dist/lib/earnings.js +164 -0
  172. package/dist/lib/github-oidc.d.ts +13 -0
  173. package/dist/lib/github-oidc.js +41 -0
  174. package/dist/lib/governed-store.d.ts +43 -2
  175. package/dist/lib/governed-store.js +25 -1
  176. package/dist/lib/label-ref.js +16 -0
  177. package/dist/lib/managed-execution.d.ts +10 -0
  178. package/dist/lib/managed-execution.js +43 -0
  179. package/dist/lib/principal-display.d.ts +20 -0
  180. package/dist/lib/principal-display.js +64 -0
  181. package/dist/lib/space-template-source.d.ts +14 -0
  182. package/dist/lib/space-template-source.js +41 -0
  183. package/dist/lib/step-up.d.ts +21 -0
  184. package/dist/lib/step-up.js +44 -0
  185. package/dist/lib/store-acquisition.d.ts +11 -0
  186. package/dist/lib/store-acquisition.js +40 -0
  187. package/dist/lib/store-advisories.d.ts +50 -0
  188. package/dist/lib/store-advisories.js +62 -0
  189. package/dist/lib/task-closure.js +1 -1
  190. package/dist/lib/web-url.d.ts +11 -0
  191. package/dist/lib/web-url.js +14 -0
  192. package/dist/node_modules/@skrr-ai/data-provider/index.js +25471 -24177
  193. package/oclif.manifest.json +38931 -34119
  194. package/package.json +21 -3
@@ -0,0 +1,19 @@
1
+ import { BaseCommand } from '../../../../base-command';
2
+ /**
3
+ * Post a known issue against a published release. The release stays immutable;
4
+ * its known issues are what a buyer reads on the Store listing before install.
5
+ */
6
+ export default class AgentsReleasesKnownIssuesAdd extends BaseCommand {
7
+ static description: string;
8
+ static examples: string[];
9
+ static args: {
10
+ agentId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
11
+ releaseId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
12
+ };
13
+ static flags: {
14
+ title: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
15
+ body: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
17
+ };
18
+ run(): Promise<void>;
19
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const data_provider_1 = require("@skrr-ai/data-provider");
5
+ const base_command_1 = require("../../../../base-command");
6
+ /**
7
+ * Post a known issue against a published release. The release stays immutable;
8
+ * its known issues are what a buyer reads on the Store listing before install.
9
+ */
10
+ class AgentsReleasesKnownIssuesAdd extends base_command_1.BaseCommand {
11
+ static description = 'Post a known issue on a published release; the Store listing shows it before install';
12
+ static examples = [
13
+ '<%= config.bin %> agents releases known-issues add agent_abc ar_123 --title "Double-sends the Monday digest" --body "Fixed in 1.5"',
14
+ ];
15
+ static args = {
16
+ agentId: core_1.Args.string({ required: true, ignoreStdin: true }),
17
+ releaseId: core_1.Args.string({ required: true, ignoreStdin: true }),
18
+ };
19
+ static flags = {
20
+ title: core_1.Flags.string({ required: true, description: 'One line: what goes wrong' }),
21
+ body: core_1.Flags.string({ description: 'Who it affects, a workaround, when a fix ships' }),
22
+ json: core_1.Flags.boolean({ description: 'Output JSON' }),
23
+ };
24
+ async run() {
25
+ this.requireAuth();
26
+ const { args, flags } = await this.parse(AgentsReleasesKnownIssuesAdd);
27
+ try {
28
+ const result = await data_provider_1.dataService.addAgentReleaseKnownIssue({
29
+ agentId: args.agentId,
30
+ releaseId: args.releaseId,
31
+ title: flags.title,
32
+ body: flags.body,
33
+ });
34
+ this.log(flags.json
35
+ ? JSON.stringify(result, null, 2)
36
+ : `Posted known issue ${result.knownIssue.id} on release ${result.releaseId}`);
37
+ }
38
+ catch (err) {
39
+ this.handleApiError(err);
40
+ }
41
+ }
42
+ }
43
+ exports.default = AgentsReleasesKnownIssuesAdd;
@@ -0,0 +1,17 @@
1
+ import { BaseCommand } from '../../../../base-command';
2
+ /**
3
+ * The known issues posted against one release — what the Store listing shows a
4
+ * buyer before install.
5
+ */
6
+ export default class AgentsReleasesKnownIssuesList extends BaseCommand {
7
+ static description: string;
8
+ static examples: string[];
9
+ static args: {
10
+ agentId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
11
+ releaseId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
12
+ };
13
+ static flags: {
14
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
15
+ };
16
+ run(): Promise<void>;
17
+ }
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const data_provider_1 = require("@skrr-ai/data-provider");
5
+ const base_command_1 = require("../../../../base-command");
6
+ const format_1 = require("../../../../lib/format");
7
+ /**
8
+ * The known issues posted against one release — what the Store listing shows a
9
+ * buyer before install.
10
+ */
11
+ class AgentsReleasesKnownIssuesList extends base_command_1.BaseCommand {
12
+ static description = 'List the known issues posted on an agent release';
13
+ static examples = [
14
+ '<%= config.bin %> agents releases known-issues list agent_abc ar_123',
15
+ ];
16
+ static args = {
17
+ agentId: core_1.Args.string({ required: true, ignoreStdin: true }),
18
+ releaseId: core_1.Args.string({ required: true, ignoreStdin: true }),
19
+ };
20
+ static flags = { json: core_1.Flags.boolean({ description: 'Output JSON' }) };
21
+ async run() {
22
+ this.requireAuth();
23
+ const { args, flags } = await this.parse(AgentsReleasesKnownIssuesList);
24
+ let releases;
25
+ try {
26
+ releases = await data_provider_1.dataService.getAgentReleases(args.agentId);
27
+ }
28
+ catch (err) {
29
+ this.handleApiError(err);
30
+ }
31
+ const release = releases?.data?.find((entry) => entry.id === args.releaseId);
32
+ if (!release) {
33
+ this.error(`Release ${args.releaseId} was not found on agent ${args.agentId}`, { exit: 1 });
34
+ }
35
+ const issues = release.knownIssues ?? [];
36
+ if (flags.json) {
37
+ this.log(JSON.stringify({ releaseId: release.id, knownIssues: issues }, null, 2));
38
+ return;
39
+ }
40
+ if (issues.length === 0) {
41
+ this.log(`No known issues on v${release.versionLabel}.`);
42
+ return;
43
+ }
44
+ (0, format_1.renderTable)(issues.map((issue) => ({
45
+ id: issue.id,
46
+ status: data_provider_1.STORE_RELEASE_KNOWN_ISSUE_STATUS_COPY[issue.status] ?? issue.status,
47
+ title: issue.title,
48
+ })), [
49
+ { key: 'id', header: 'ID', verbatim: true },
50
+ { key: 'status', header: 'STATUS' },
51
+ { key: 'title', header: 'TITLE', maxWidth: 60 },
52
+ ], (line) => this.log(line));
53
+ }
54
+ }
55
+ exports.default = AgentsReleasesKnownIssuesList;
@@ -0,0 +1,18 @@
1
+ import { BaseCommand } from '../../../../base-command';
2
+ /** Edit, resolve or reopen a known issue on a release. */
3
+ export default class AgentsReleasesKnownIssuesUpdate extends BaseCommand {
4
+ static description: string;
5
+ static examples: string[];
6
+ static args: {
7
+ agentId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
8
+ releaseId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
9
+ issueId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
10
+ };
11
+ static flags: {
12
+ status: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
+ title: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
14
+ body: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
16
+ };
17
+ run(): Promise<void>;
18
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const data_provider_1 = require("@skrr-ai/data-provider");
5
+ const base_command_1 = require("../../../../base-command");
6
+ /** Edit, resolve or reopen a known issue on a release. */
7
+ class AgentsReleasesKnownIssuesUpdate extends base_command_1.BaseCommand {
8
+ static description = 'Edit, resolve or reopen a known issue on a release';
9
+ static examples = [
10
+ '<%= config.bin %> agents releases known-issues update agent_abc ar_123 ki_456 --status resolved',
11
+ ];
12
+ static args = {
13
+ agentId: core_1.Args.string({ required: true, ignoreStdin: true }),
14
+ releaseId: core_1.Args.string({ required: true, ignoreStdin: true }),
15
+ issueId: core_1.Args.string({ required: true, ignoreStdin: true }),
16
+ };
17
+ static flags = {
18
+ status: core_1.Flags.string({ options: ['open', 'resolved'] }),
19
+ title: core_1.Flags.string(),
20
+ body: core_1.Flags.string({ description: 'Replace the details; pass "" to clear them' }),
21
+ json: core_1.Flags.boolean({ description: 'Output JSON' }),
22
+ };
23
+ async run() {
24
+ this.requireAuth();
25
+ const { args, flags } = await this.parse(AgentsReleasesKnownIssuesUpdate);
26
+ if (flags.status === undefined && flags.title === undefined && flags.body === undefined) {
27
+ this.error('Nothing to update: pass --status, --title or --body', { exit: 1 });
28
+ }
29
+ try {
30
+ const result = await data_provider_1.dataService.updateAgentReleaseKnownIssue({
31
+ agentId: args.agentId,
32
+ releaseId: args.releaseId,
33
+ issueId: args.issueId,
34
+ status: flags.status,
35
+ title: flags.title,
36
+ body: flags.body,
37
+ });
38
+ this.log(flags.json
39
+ ? JSON.stringify(result, null, 2)
40
+ : `Known issue ${args.issueId} is ${result.knownIssue.status}`);
41
+ }
42
+ catch (err) {
43
+ this.handleApiError(err);
44
+ }
45
+ }
46
+ }
47
+ exports.default = AgentsReleasesKnownIssuesUpdate;
@@ -3,6 +3,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  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
+ /**
7
+ * Human-readable one-line-per-release view. `pending_review` releases get a
8
+ * second line naming the capability facets that parked them for curator
9
+ * review (SUP02) — a publisher running `skrr agents releases` must see why a
10
+ * release is not live and what happens next.
11
+ */
12
+ function renderReleases(releases) {
13
+ if (!releases.length)
14
+ return 'No releases.';
15
+ const lines = [];
16
+ for (const release of releases) {
17
+ const label = release.versionLabel || `v${release.versionMajor}.${release.versionMinor}`;
18
+ lines.push(`#${release.releaseNumber} ${label} ${release.visibility}/${release.status}`);
19
+ const admission = release.admission;
20
+ if (release.status === 'pending_review' && admission) {
21
+ const facets = admission.facets.length ? admission.facets.join(', ') : '-';
22
+ lines.push(` capability review pending · facets: ${facets} · next: awaiting curator review`);
23
+ }
24
+ else if (release.status === 'rejected' && admission?.reviewNote) {
25
+ lines.push(` rejected: ${admission.reviewNote}`);
26
+ }
27
+ }
28
+ return lines.join('\n');
29
+ }
6
30
  class AgentsReleasesList extends base_command_1.BaseCommand {
7
31
  static description = "List an agent's releases";
8
32
  static args = { agentId: core_1.Args.string({ required: true, ignoreStdin: true }) };
@@ -11,9 +35,7 @@ class AgentsReleasesList extends base_command_1.BaseCommand {
11
35
  this.requireAuth();
12
36
  const { args, flags } = await this.parse(AgentsReleasesList);
13
37
  const result = await data_provider_1.dataService.getAgentReleases(args.agentId);
14
- this.log(flags.json
15
- ? this.agentJson(args.agentId, result)
16
- : JSON.stringify(result.data ?? result, null, 2));
38
+ this.log(flags.json ? this.agentJson(args.agentId, result) : renderReleases(result.data ?? []));
17
39
  if (!flags.json)
18
40
  this.printAgentUrl(args.agentId);
19
41
  }
@@ -13,10 +13,18 @@ class AgentsReleasesRollback extends base_command_1.BaseCommand {
13
13
  async run() {
14
14
  this.requireAuth();
15
15
  const { args, flags } = await this.parse(AgentsReleasesRollback);
16
- const result = await data_provider_1.dataService.rollbackAgentRelease({
17
- agentId: args.agentId,
18
- releaseId: args.releaseId,
19
- });
16
+ // Through handleApiError so a refusal says why — in particular
17
+ // STEP_UP_REQUIRED (OSK-12275), whose remedy is `step-up`, not a retry.
18
+ let result;
19
+ try {
20
+ result = await data_provider_1.dataService.rollbackAgentRelease({
21
+ agentId: args.agentId,
22
+ releaseId: args.releaseId,
23
+ });
24
+ }
25
+ catch (err) {
26
+ this.handleApiError(err);
27
+ }
20
28
  this.log(flags.json ? this.agentJson(args.agentId, result) : `Rolled back agent ${args.agentId}`);
21
29
  if (!flags.json)
22
30
  this.printAgentUrl(args.agentId);
@@ -0,0 +1,22 @@
1
+ import { BaseCommand } from '../../../base-command';
2
+ /**
3
+ * Try one of your own private releases the way a buyer would receive it.
4
+ *
5
+ * The copy lands in a fresh Space you own. It is not a purchase and is never
6
+ * counted as an install, in the install funnel, or in marketplace proof.
7
+ */
8
+ export default class AgentsReleasesTestInstall extends BaseCommand {
9
+ static description: string;
10
+ static examples: string[];
11
+ static args: {
12
+ agentId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
13
+ releaseId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
14
+ };
15
+ static flags: {
16
+ 'include-bootstrap': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
17
+ 'include-memory': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
18
+ 'run-on': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
19
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
20
+ };
21
+ run(): Promise<void>;
22
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const data_provider_1 = require("@skrr-ai/data-provider");
5
+ const base_command_1 = require("../../../base-command");
6
+ const web_url_1 = require("../../../lib/web-url");
7
+ /**
8
+ * Try one of your own private releases the way a buyer would receive it.
9
+ *
10
+ * The copy lands in a fresh Space you own. It is not a purchase and is never
11
+ * counted as an install, in the install funnel, or in marketplace proof.
12
+ */
13
+ class AgentsReleasesTestInstall extends base_command_1.BaseCommand {
14
+ static description = 'Test-install one of your private releases, as a buyer would receive it, into a new Space';
15
+ static examples = [
16
+ '<%= config.bin %> agents releases test-install agent_abc123 rel_def456',
17
+ '<%= config.bin %> agents releases test-install agent_abc123 rel_def456 --include-bootstrap --json',
18
+ ];
19
+ static args = {
20
+ agentId: core_1.Args.string({ required: true, ignoreStdin: true, description: 'Your agent' }),
21
+ releaseId: core_1.Args.string({
22
+ required: true,
23
+ ignoreStdin: true,
24
+ description: 'One of its approved private releases',
25
+ }),
26
+ };
27
+ static flags = {
28
+ 'include-bootstrap': core_1.Flags.boolean({
29
+ description: 'Also copy the release-pinned bootstrap files, as a buyer could choose to',
30
+ }),
31
+ 'include-memory': core_1.Flags.boolean({
32
+ description: 'Also copy the release-pinned memories, as a buyer could choose to',
33
+ }),
34
+ 'run-on': core_1.Flags.string({
35
+ description: 'Where the copy runs, the choice a buyer makes at install. cloud (the default) keeps ' +
36
+ 'its tools off this computer; local lets it use your shell, files and browser',
37
+ options: [...data_provider_1.STORE_INSTALL_EXECUTION_PLACEMENTS],
38
+ }),
39
+ json: core_1.Flags.boolean({ description: 'Output JSON' }),
40
+ };
41
+ async run() {
42
+ this.requireAuth();
43
+ const { args, flags } = await this.parse(AgentsReleasesTestInstall);
44
+ let result;
45
+ try {
46
+ result = await data_provider_1.dataService.testInstallAgentRelease({
47
+ agentId: args.agentId,
48
+ releaseId: args.releaseId,
49
+ includeBootstrap: flags['include-bootstrap'] || undefined,
50
+ includeMemory: flags['include-memory'] || undefined,
51
+ ...(flags['run-on']
52
+ ? { executionPlacement: flags['run-on'] }
53
+ : {}),
54
+ });
55
+ }
56
+ catch (err) {
57
+ this.handleApiError(err);
58
+ }
59
+ if (flags.json) {
60
+ this.log(this.agentJson(result.installedAgentId, result));
61
+ return;
62
+ }
63
+ const baseURL = this.cliConfig.baseURL;
64
+ this.log(`Test-installed ${args.releaseId} (v${result.sourceVersionLabel}) as agent ${result.installedAgentId}`);
65
+ this.log('Not a purchase: it is excluded from installs, the install funnel and marketplace proof.');
66
+ this.log(`Agent URL: ${(0, web_url_1.agentUrlFrom)(baseURL, { id: result.installedAgentId }) ?? '-'}`);
67
+ this.log(`Space URL: ${(0, web_url_1.spaceUrlFrom)(baseURL, { id: result.spaceId }) ?? '-'}`);
68
+ }
69
+ }
70
+ exports.default = AgentsReleasesTestInstall;
@@ -0,0 +1,17 @@
1
+ import { BaseCommand } from '../../../../base-command';
2
+ /**
3
+ * List the agent's trusted-publisher bindings — the CI pipelines (GitHub
4
+ * repositories, optionally pinned by ref / environment / workflow file) that
5
+ * may mint releases via OIDC (OSK-12311).
6
+ */
7
+ export default class AgentsReleasesTrustedPublishersList extends BaseCommand {
8
+ static description: string;
9
+ static examples: string[];
10
+ static args: {
11
+ agentId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
12
+ };
13
+ static flags: {
14
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
15
+ };
16
+ run(): Promise<void>;
17
+ }
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const data_provider_1 = require("@skrr-ai/data-provider");
5
+ const base_command_1 = require("../../../../base-command");
6
+ /**
7
+ * List the agent's trusted-publisher bindings — the CI pipelines (GitHub
8
+ * repositories, optionally pinned by ref / environment / workflow file) that
9
+ * may mint releases via OIDC (OSK-12311).
10
+ */
11
+ class AgentsReleasesTrustedPublishersList extends base_command_1.BaseCommand {
12
+ static description = "List the agent's trusted-publisher bindings (which CI repos may publish it)";
13
+ static examples = [
14
+ '<%= config.bin %> agents releases trusted-publishers list agent_abc123',
15
+ '<%= config.bin %> agents releases trusted-publishers list agent_abc123 --json',
16
+ ];
17
+ static args = {
18
+ agentId: core_1.Args.string({ required: true, ignoreStdin: true }),
19
+ };
20
+ static flags = {
21
+ json: core_1.Flags.boolean({ description: 'Output JSON' }),
22
+ };
23
+ async run() {
24
+ this.requireAuth();
25
+ const { args, flags } = await this.parse(AgentsReleasesTrustedPublishersList);
26
+ try {
27
+ const result = await data_provider_1.dataService.getAgentTrustedPublishers(args.agentId);
28
+ const bindings = result.data ?? [];
29
+ if (flags.json) {
30
+ this.log(JSON.stringify(bindings, null, 2));
31
+ return;
32
+ }
33
+ if (bindings.length === 0) {
34
+ this.log('No trusted publishers. Bind one with:');
35
+ this.log(` ${this.config.bin} agents releases trusted-publishers set ${args.agentId} --repo owner/name`);
36
+ return;
37
+ }
38
+ for (const binding of bindings) {
39
+ const pins = [
40
+ binding.workflow ? `workflow=${binding.workflow}` : null,
41
+ binding.ref ? `ref=${binding.ref}` : null,
42
+ binding.environment ? `environment=${binding.environment}` : null,
43
+ binding.allowPublicChannel ? 'allow-public-channel' : null,
44
+ ]
45
+ .filter(Boolean)
46
+ .join(' ');
47
+ this.log(`${binding.id} ${binding.provider}:${binding.repository}${pins ? ` ${pins}` : ''}`);
48
+ }
49
+ }
50
+ catch (err) {
51
+ this.handleApiError(err);
52
+ }
53
+ }
54
+ }
55
+ exports.default = AgentsReleasesTrustedPublishersList;
@@ -0,0 +1,17 @@
1
+ import { BaseCommand } from '../../../../base-command';
2
+ /**
3
+ * Remove a trusted-publisher binding. Once removed, OIDC tokens from that
4
+ * pipeline mint nothing — this is also how you revoke a CI pipeline.
5
+ */
6
+ export default class AgentsReleasesTrustedPublishersRemove extends BaseCommand {
7
+ static description: string;
8
+ static examples: string[];
9
+ static args: {
10
+ agentId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
11
+ bindingId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
12
+ };
13
+ static flags: {
14
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
15
+ };
16
+ run(): Promise<void>;
17
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const data_provider_1 = require("@skrr-ai/data-provider");
5
+ const base_command_1 = require("../../../../base-command");
6
+ /**
7
+ * Remove a trusted-publisher binding. Once removed, OIDC tokens from that
8
+ * pipeline mint nothing — this is also how you revoke a CI pipeline.
9
+ */
10
+ class AgentsReleasesTrustedPublishersRemove extends base_command_1.BaseCommand {
11
+ static description = 'Remove a trusted-publisher binding; that CI pipeline can no longer publish the agent';
12
+ static examples = [
13
+ '<%= config.bin %> agents releases trusted-publishers remove agent_abc123 atp_def456',
14
+ '<%= config.bin %> agents releases trusted-publishers remove agent_abc123 atp_def456 --json',
15
+ ];
16
+ static args = {
17
+ agentId: core_1.Args.string({ required: true, ignoreStdin: true }),
18
+ bindingId: core_1.Args.string({
19
+ required: true,
20
+ ignoreStdin: true,
21
+ description: 'The binding id (`atp_…`) from `trusted-publishers list`',
22
+ }),
23
+ };
24
+ static flags = {
25
+ json: core_1.Flags.boolean({ description: 'Output JSON' }),
26
+ };
27
+ async run() {
28
+ this.requireAuth();
29
+ const { args, flags } = await this.parse(AgentsReleasesTrustedPublishersRemove);
30
+ try {
31
+ const result = await data_provider_1.dataService.removeAgentTrustedPublisher({
32
+ agentId: args.agentId,
33
+ bindingId: args.bindingId,
34
+ });
35
+ this.log(flags.json
36
+ ? JSON.stringify(result, null, 2)
37
+ : `Removed trusted publisher ${result.removed.provider}:${result.removed.repository} ` +
38
+ `(${result.removed.id}) from ${args.agentId}`);
39
+ }
40
+ catch (err) {
41
+ this.handleApiError(err);
42
+ }
43
+ }
44
+ }
45
+ exports.default = AgentsReleasesTrustedPublishersRemove;
@@ -0,0 +1,27 @@
1
+ import { BaseCommand } from '../../../../base-command';
2
+ /**
3
+ * Bind a GitHub repository to this agent for OIDC trusted publishing
4
+ * (OSK-12311). One binding per repository; re-running `set` replaces the
5
+ * constraint fields wholesale — omitting `--ref` drops a previously set ref
6
+ * pin.
7
+ *
8
+ * `--allow-public-channel` records the opt-in for CI-to-public publishing;
9
+ * the operation stays refused until capability-tiered admission ships, so the
10
+ * flag only readies the binding.
11
+ */
12
+ export default class AgentsReleasesTrustedPublishersSet extends BaseCommand {
13
+ static description: string;
14
+ static examples: string[];
15
+ static args: {
16
+ agentId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
17
+ };
18
+ static flags: {
19
+ repo: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
20
+ workflow: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
21
+ ref: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
22
+ environment: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
23
+ 'allow-public-channel': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
24
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
25
+ };
26
+ run(): Promise<void>;
27
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const data_provider_1 = require("@skrr-ai/data-provider");
5
+ const base_command_1 = require("../../../../base-command");
6
+ /**
7
+ * Bind a GitHub repository to this agent for OIDC trusted publishing
8
+ * (OSK-12311). One binding per repository; re-running `set` replaces the
9
+ * constraint fields wholesale — omitting `--ref` drops a previously set ref
10
+ * pin.
11
+ *
12
+ * `--allow-public-channel` records the opt-in for CI-to-public publishing;
13
+ * the operation stays refused until capability-tiered admission ships, so the
14
+ * flag only readies the binding.
15
+ */
16
+ class AgentsReleasesTrustedPublishersSet extends base_command_1.BaseCommand {
17
+ static description = 'Trust a GitHub repository to publish this agent from CI via OIDC';
18
+ static examples = [
19
+ '<%= config.bin %> agents releases trusted-publishers set agent_abc123 --repo owner/name',
20
+ '<%= config.bin %> agents releases trusted-publishers set agent_abc123 --repo owner/name ' +
21
+ '--workflow .github/workflows/publish.yml --ref refs/heads/main --environment release',
22
+ '<%= config.bin %> agents releases trusted-publishers set agent_abc123 --repo owner/name --json',
23
+ ];
24
+ static args = {
25
+ agentId: core_1.Args.string({ required: true, ignoreStdin: true }),
26
+ };
27
+ static flags = {
28
+ repo: core_1.Flags.string({
29
+ required: true,
30
+ description: 'GitHub repository as owner/name — matched against the OIDC token claim',
31
+ }),
32
+ workflow: core_1.Flags.string({
33
+ description: 'Pin to one workflow file (e.g. .github/workflows/publish.yml), matched ' +
34
+ "against the token's workflow ref claim",
35
+ }),
36
+ ref: core_1.Flags.string({
37
+ description: 'Pin to one git ref (e.g. refs/heads/main)',
38
+ }),
39
+ environment: core_1.Flags.string({
40
+ description: 'Pin to one GitHub Actions environment (e.g. release)',
41
+ }),
42
+ 'allow-public-channel': core_1.Flags.boolean({
43
+ description: 'Opt in to CI publishing on the public channel once capability-tiered ' +
44
+ 'admission ships — refused outright until then',
45
+ }),
46
+ json: core_1.Flags.boolean({ description: 'Output JSON' }),
47
+ };
48
+ async run() {
49
+ this.requireAuth();
50
+ const { args, flags } = await this.parse(AgentsReleasesTrustedPublishersSet);
51
+ try {
52
+ const result = await data_provider_1.dataService.upsertAgentTrustedPublisher({
53
+ agentId: args.agentId,
54
+ provider: 'github',
55
+ repository: flags.repo,
56
+ workflow: flags.workflow,
57
+ ref: flags.ref,
58
+ environment: flags.environment,
59
+ allowPublicChannel: flags['allow-public-channel'],
60
+ });
61
+ if (flags.json) {
62
+ this.log(JSON.stringify(result.binding, null, 2));
63
+ return;
64
+ }
65
+ const pins = [
66
+ result.binding.workflow ? ` workflow=${result.binding.workflow}` : '',
67
+ result.binding.ref ? ` ref=${result.binding.ref}` : '',
68
+ result.binding.environment ? ` environment=${result.binding.environment}` : '',
69
+ ].join('');
70
+ this.log(`Trusted ${result.binding.provider}:${result.binding.repository} for ${args.agentId}` +
71
+ ` (${result.binding.id})${pins}`);
72
+ if (result.binding.allowPublicChannel) {
73
+ this.log('Note: --allow-public-channel is recorded, but CI-to-public publishing is refused ' +
74
+ 'until admission ships.');
75
+ }
76
+ }
77
+ catch (err) {
78
+ this.handleApiError(err);
79
+ }
80
+ }
81
+ }
82
+ exports.default = AgentsReleasesTrustedPublishersSet;
@@ -24,6 +24,7 @@ export default class AgentsUpdate extends BaseCommand {
24
24
  'agent-ids': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
25
25
  'network-mode': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
26
26
  'network-agent-ids': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
27
+ 'network-shell-write-agent-ids': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
27
28
  'network-include-public': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
28
29
  'character-3d-id': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
29
30
  'scene-background': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
@@ -76,6 +76,11 @@ class AgentsUpdate extends base_command_1.BaseCommand {
76
76
  'agent-ids': core_1.Flags.string({ description: 'Delegated agent IDs JSON array' }),
77
77
  'network-mode': core_1.Flags.string({ description: 'Agent network mode' }),
78
78
  'network-agent-ids': core_1.Flags.string({ description: 'Network agent IDs JSON array' }),
79
+ 'network-shell-write-agent-ids': core_1.Flags.string({
80
+ description: 'JSON array of agents in the Specific network that may run commands and create or edit ' +
81
+ "files when delegated to. Agents someone else wrote, and Store installs, can't unless " +
82
+ 'listed here. Author only; [] clears.',
83
+ }),
79
84
  'network-include-public': core_1.Flags.boolean({ description: 'Include public agents in network' }),
80
85
  'character-3d-id': core_1.Flags.string({ description: '3D character ID' }),
81
86
  'scene-background': core_1.Flags.string({ description: agent_visual_refs_1.SCENE_BACKGROUND_FLAG_HELP }),
@@ -90,7 +95,9 @@ class AgentsUpdate extends base_command_1.BaseCommand {
90
95
  'agent-actions': core_1.Flags.string({ description: 'Embedded actions JSON array' }),
91
96
  'tool-policy': core_1.Flags.string({ description: 'Tool policy JSON object' }),
92
97
  artifacts: core_1.Flags.string({ description: 'Artifacts JSON value' }),
93
- 'support-contact': core_1.Flags.string({ description: 'Support contact JSON object' }),
98
+ 'support-contact': core_1.Flags.string({
99
+ description: 'Support contact JSON object: {"name","email","security_email"}. The Store listing shows the email and security_email of the published release.',
100
+ }),
94
101
  'install-first-contact': core_1.Flags.string({ description: 'First-contact config JSON value' }),
95
102
  'end-after-tools': core_1.Flags.boolean({ description: 'End turn after tools' }),
96
103
  'hide-sequential-outputs': core_1.Flags.boolean({ description: 'Hide sequential outputs' }),