@skrr-ai/cli 0.1.91 → 0.1.93

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 (272) hide show
  1. package/dist/base-command.d.ts +44 -0
  2. package/dist/base-command.js +96 -0
  3. package/dist/commands/agents/badge.d.ts +41 -0
  4. package/dist/commands/agents/badge.js +158 -0
  5. package/dist/commands/agents/create.d.ts +24 -0
  6. package/dist/commands/agents/create.js +212 -0
  7. package/dist/commands/agents/embed.d.ts +20 -0
  8. package/dist/commands/agents/embed.js +61 -0
  9. package/dist/commands/agents/share.d.ts +27 -0
  10. package/dist/commands/agents/share.js +100 -0
  11. package/dist/commands/agents/vanity.d.ts +21 -0
  12. package/dist/commands/agents/vanity.js +77 -0
  13. package/dist/commands/agents/visibility.d.ts +21 -1
  14. package/dist/commands/agents/visibility.js +112 -0
  15. package/dist/commands/commands.d.ts +1 -0
  16. package/dist/commands/commands.js +22 -9
  17. package/dist/commands/earnings/attributions.d.ts +17 -0
  18. package/dist/commands/earnings/attributions.js +82 -0
  19. package/dist/commands/earnings/index.js +2 -1
  20. package/dist/commands/generate-recovery-code.js +4 -3
  21. package/dist/commands/github/allow-tools.d.ts +1 -0
  22. package/dist/commands/github/app/install.d.ts +1 -0
  23. package/dist/commands/github/app/status.d.ts +1 -0
  24. package/dist/commands/github/connect.d.ts +1 -0
  25. package/dist/commands/github/connections.d.ts +1 -0
  26. package/dist/commands/github/disconnect.d.ts +1 -0
  27. package/dist/commands/github/finalize.d.ts +1 -0
  28. package/dist/commands/github/reconnect.d.ts +1 -0
  29. package/dist/commands/github/run.d.ts +1 -0
  30. package/dist/commands/github/tools.d.ts +1 -0
  31. package/dist/commands/integrations/connections/connect.d.ts +1 -0
  32. package/dist/commands/integrations/connections/disconnect.d.ts +1 -0
  33. package/dist/commands/integrations/connections/finalize.d.ts +1 -0
  34. package/dist/commands/integrations/connections/list.d.ts +1 -0
  35. package/dist/commands/integrations/connections/reconnect.d.ts +1 -0
  36. package/dist/commands/integrations/execute.d.ts +1 -0
  37. package/dist/commands/integrations/search.d.ts +1 -0
  38. package/dist/commands/integrations/toolkits.d.ts +1 -0
  39. package/dist/commands/integrations/tools/allow.d.ts +1 -0
  40. package/dist/commands/integrations/tools/list.d.ts +1 -0
  41. package/dist/commands/login.js +12 -0
  42. package/dist/commands/machines/dedicated/logs.d.ts +19 -0
  43. package/dist/commands/machines/dedicated/logs.js +103 -0
  44. package/dist/commands/machines/dedicated/power/index.js +3 -2
  45. package/dist/commands/machines/dedicated/power/set.js +1 -1
  46. package/dist/commands/machines/dedicated/power/waiting.d.ts +13 -0
  47. package/dist/commands/machines/dedicated/power/waiting.js +36 -0
  48. package/dist/commands/open.d.ts +24 -0
  49. package/dist/commands/open.js +74 -0
  50. package/dist/commands/projects/archive.d.ts +1 -0
  51. package/dist/commands/projects/archive.js +23 -0
  52. package/dist/commands/projects/delete.d.ts +1 -0
  53. package/dist/commands/projects/delete.js +23 -0
  54. package/dist/commands/projects/list.d.ts +3 -0
  55. package/dist/commands/projects/list.js +12 -2
  56. package/dist/commands/spaces/actions/add.js +4 -3
  57. package/dist/commands/spaces/actions/available.js +3 -2
  58. package/dist/commands/spaces/actions/list.js +5 -4
  59. package/dist/commands/spaces/actions/replace.js +6 -5
  60. package/dist/commands/spaces/archive.js +3 -2
  61. package/dist/commands/spaces/auto-executor/preview.js +4 -3
  62. package/dist/commands/spaces/auto-executor/run.js +4 -3
  63. package/dist/commands/spaces/auto-executor/runs.js +3 -2
  64. package/dist/commands/spaces/auto-executor/update.js +4 -3
  65. package/dist/commands/spaces/bootstrap.js +3 -2
  66. package/dist/commands/spaces/briefs/delete.js +3 -2
  67. package/dist/commands/spaces/briefs/get.js +3 -2
  68. package/dist/commands/spaces/briefs/list.js +3 -2
  69. package/dist/commands/spaces/briefs/set.js +5 -4
  70. package/dist/commands/spaces/capacity.js +5 -4
  71. package/dist/commands/spaces/conversations.js +3 -2
  72. package/dist/commands/spaces/cycles/create.js +3 -2
  73. package/dist/commands/spaces/cycles/graph.js +2 -1
  74. package/dist/commands/spaces/cycles/list.js +3 -2
  75. package/dist/commands/spaces/cycles/settings.js +4 -3
  76. package/dist/commands/spaces/cycles/show.js +3 -2
  77. package/dist/commands/spaces/cycles/update.js +3 -2
  78. package/dist/commands/spaces/delete.js +4 -3
  79. package/dist/commands/spaces/expertise-suggestions.js +4 -3
  80. package/dist/commands/spaces/files/delete.js +3 -2
  81. package/dist/commands/spaces/files/folders/create.js +3 -2
  82. package/dist/commands/spaces/files/folders/delete.js +3 -2
  83. package/dist/commands/spaces/files/folders/list.js +3 -2
  84. package/dist/commands/spaces/files/folders/update.js +3 -2
  85. package/dist/commands/spaces/files/list.js +3 -2
  86. package/dist/commands/spaces/files/move.js +3 -2
  87. package/dist/commands/spaces/files/rename.js +3 -2
  88. package/dist/commands/spaces/files/upload.js +6 -5
  89. package/dist/commands/spaces/github-automations/set.js +3 -2
  90. package/dist/commands/spaces/github-automations/show.js +3 -2
  91. package/dist/commands/spaces/goals.js +2 -1
  92. package/dist/commands/spaces/heartbeats/create.js +4 -3
  93. package/dist/commands/spaces/heartbeats/delete.js +4 -3
  94. package/dist/commands/spaces/heartbeats/list.js +4 -3
  95. package/dist/commands/spaces/heartbeats/status.js +3 -2
  96. package/dist/commands/spaces/heartbeats/update.js +4 -3
  97. package/dist/commands/spaces/insights.js +5 -4
  98. package/dist/commands/spaces/labels/add.js +4 -3
  99. package/dist/commands/spaces/labels/list.js +2 -1
  100. package/dist/commands/spaces/labels/remove.js +4 -3
  101. package/dist/commands/spaces/list.d.ts +3 -0
  102. package/dist/commands/spaces/list.js +11 -2
  103. package/dist/commands/spaces/live/cards/create.js +3 -2
  104. package/dist/commands/spaces/live/cards/list.js +3 -2
  105. package/dist/commands/spaces/live/cards/reorder.js +7 -2
  106. package/dist/commands/spaces/live/scene.js +4 -3
  107. package/dist/commands/spaces/members/add.js +7 -6
  108. package/dist/commands/spaces/members/list.js +4 -3
  109. package/dist/commands/spaces/members/remove.js +7 -6
  110. package/dist/commands/spaces/move.js +3 -2
  111. package/dist/commands/spaces/pin.js +5 -4
  112. package/dist/commands/spaces/preferences/show.js +4 -3
  113. package/dist/commands/spaces/preferences/tabs.js +4 -3
  114. package/dist/commands/spaces/revisions.js +3 -2
  115. package/dist/commands/spaces/room/ensure.js +5 -4
  116. package/dist/commands/spaces/room/messages.js +3 -2
  117. package/dist/commands/spaces/room/show.js +5 -4
  118. package/dist/commands/spaces/skills/add.js +4 -3
  119. package/dist/commands/spaces/skills/list.js +3 -2
  120. package/dist/commands/spaces/skills/pin.js +4 -3
  121. package/dist/commands/spaces/skills/remove.js +4 -3
  122. package/dist/commands/spaces/snapshot.js +3 -2
  123. package/dist/commands/spaces/states/archive.js +3 -2
  124. package/dist/commands/spaces/states/create.js +3 -2
  125. package/dist/commands/spaces/states/list.js +3 -2
  126. package/dist/commands/spaces/states/reorder.js +2 -1
  127. package/dist/commands/spaces/states/update.js +3 -2
  128. package/dist/commands/spaces/summary.js +4 -3
  129. package/dist/commands/spaces/tasks.d.ts +3 -0
  130. package/dist/commands/spaces/tasks.js +14 -3
  131. package/dist/commands/spaces/triggers/delete.js +5 -4
  132. package/dist/commands/spaces/triggers/set.js +4 -3
  133. package/dist/commands/spaces/triggers/show.js +4 -3
  134. package/dist/commands/spaces/unarchive.js +3 -2
  135. package/dist/commands/spaces/update.js +5 -4
  136. package/dist/commands/spaces/views/create.js +3 -2
  137. package/dist/commands/spaces/views/list.js +3 -2
  138. package/dist/commands/spaces/views/reorder.js +6 -3
  139. package/dist/commands/spaces/views/subscribe.js +2 -1
  140. package/dist/commands/spaces/views/subscriptions.js +1 -0
  141. package/dist/commands/spaces/views/unsubscribe.js +2 -1
  142. package/dist/commands/spaces/widgets/add.js +4 -3
  143. package/dist/commands/spaces/widgets/list.js +3 -2
  144. package/dist/commands/spaces/widgets/remove.js +5 -4
  145. package/dist/commands/spaces/work-graph.js +2 -1
  146. package/dist/commands/store/install.d.ts +1 -1
  147. package/dist/commands/store/install.js +24 -8
  148. package/dist/commands/store/show.d.ts +25 -0
  149. package/dist/commands/store/show.js +203 -0
  150. package/dist/commands/store/stats.d.ts +33 -0
  151. package/dist/commands/store/stats.js +258 -0
  152. package/dist/commands/tasks/actions/attach.js +1 -1
  153. package/dist/commands/tasks/actions/detach.js +4 -3
  154. package/dist/commands/tasks/activity.js +3 -2
  155. package/dist/commands/tasks/ancestors.js +2 -1
  156. package/dist/commands/tasks/approvals/create.js +2 -1
  157. package/dist/commands/tasks/approvals/delete.js +3 -2
  158. package/dist/commands/tasks/approvals/list.js +5 -4
  159. package/dist/commands/tasks/approvals/resolve.js +2 -1
  160. package/dist/commands/tasks/archive.js +3 -2
  161. package/dist/commands/tasks/assign.js +4 -3
  162. package/dist/commands/tasks/attachments/delete.js +3 -2
  163. package/dist/commands/tasks/attachments/download.d.ts +1 -0
  164. package/dist/commands/tasks/attachments/download.js +20 -1
  165. package/dist/commands/tasks/attachments/list.js +2 -1
  166. package/dist/commands/tasks/attachments/set-role.js +2 -1
  167. package/dist/commands/tasks/attachments/upload.js +2 -1
  168. package/dist/commands/tasks/bulk-update.d.ts +1 -0
  169. package/dist/commands/tasks/bulk-update.js +106 -15
  170. package/dist/commands/tasks/cancel-cascade.d.ts +1 -0
  171. package/dist/commands/tasks/cancel-cascade.js +13 -3
  172. package/dist/commands/tasks/cascade-status.js +2 -1
  173. package/dist/commands/tasks/chat/send.d.ts +44 -0
  174. package/dist/commands/tasks/chat/send.js +112 -0
  175. package/dist/commands/tasks/checkout.js +3 -2
  176. package/dist/commands/tasks/children.js +2 -1
  177. package/dist/commands/tasks/comments/add.js +7 -6
  178. package/dist/commands/tasks/comments/anchor.js +8 -7
  179. package/dist/commands/tasks/comments/delete.js +3 -2
  180. package/dist/commands/tasks/comments/list.js +2 -1
  181. package/dist/commands/tasks/comments/reopen.js +3 -2
  182. package/dist/commands/tasks/comments/resolve.js +3 -2
  183. package/dist/commands/tasks/create-tree.d.ts +63 -0
  184. package/dist/commands/tasks/create-tree.js +197 -4
  185. package/dist/commands/tasks/delete.js +5 -4
  186. package/dist/commands/tasks/descendants.js +2 -1
  187. package/dist/commands/tasks/dri-plan.js +3 -2
  188. package/dist/commands/tasks/dri-run.js +3 -2
  189. package/dist/commands/tasks/dri-status.js +2 -1
  190. package/dist/commands/tasks/duplicate-pipeline.js +2 -1
  191. package/dist/commands/tasks/execution-summary.js +2 -1
  192. package/dist/commands/tasks/execution-timeline.js +2 -1
  193. package/dist/commands/tasks/fork.js +1 -0
  194. package/dist/commands/tasks/forward.js +4 -3
  195. package/dist/commands/tasks/handover.js +1 -0
  196. package/dist/commands/tasks/interrupt.js +3 -2
  197. package/dist/commands/tasks/labels/attach.js +4 -3
  198. package/dist/commands/tasks/labels/detach.js +4 -3
  199. package/dist/commands/tasks/labels/suggest.js +5 -4
  200. package/dist/commands/tasks/list.d.ts +27 -1
  201. package/dist/commands/tasks/list.js +101 -3
  202. package/dist/commands/tasks/move.js +4 -3
  203. package/dist/commands/tasks/output.js +6 -5
  204. package/dist/commands/tasks/pause-schedule.js +3 -2
  205. package/dist/commands/tasks/promote.js +1 -0
  206. package/dist/commands/tasks/prompt-log.js +2 -1
  207. package/dist/commands/tasks/release.js +5 -4
  208. package/dist/commands/tasks/remind.js +2 -1
  209. package/dist/commands/tasks/replay.js +3 -2
  210. package/dist/commands/tasks/report.js +1 -0
  211. package/dist/commands/tasks/resume-schedule.js +3 -2
  212. package/dist/commands/tasks/retry-schedule.js +3 -2
  213. package/dist/commands/tasks/retry.js +10 -9
  214. package/dist/commands/tasks/revisions.js +2 -1
  215. package/dist/commands/tasks/runs.js +6 -5
  216. package/dist/commands/tasks/schedule.js +3 -2
  217. package/dist/commands/tasks/self-schedule.js +6 -5
  218. package/dist/commands/tasks/skills/pin.js +3 -2
  219. package/dist/commands/tasks/skills/unpin.js +3 -2
  220. package/dist/commands/tasks/snooze.js +6 -5
  221. package/dist/commands/tasks/start-all.js +5 -4
  222. package/dist/commands/tasks/subscribe.js +1 -0
  223. package/dist/commands/tasks/tags/add.js +4 -3
  224. package/dist/commands/tasks/tags/remove.js +4 -3
  225. package/dist/commands/tasks/timeline.js +3 -2
  226. package/dist/commands/tasks/today.d.ts +4 -1
  227. package/dist/commands/tasks/today.js +12 -2
  228. package/dist/commands/tasks/transcript.js +6 -5
  229. package/dist/commands/tasks/unschedule.js +3 -2
  230. package/dist/commands/tasks/unsnooze.js +3 -2
  231. package/dist/commands/tasks/unsubscribe.js +2 -1
  232. package/dist/commands/tasks/update.js +5 -4
  233. package/dist/commands/tasks/wait.js +5 -4
  234. package/dist/lib/agent-distribution.d.ts +37 -0
  235. package/dist/lib/agent-distribution.js +63 -0
  236. package/dist/lib/agent-ref.d.ts +69 -0
  237. package/dist/lib/agent-ref.js +168 -0
  238. package/dist/lib/api-fetch.d.ts +2 -0
  239. package/dist/lib/api-fetch.js +14 -3
  240. package/dist/lib/command-hygiene.d.ts +13 -0
  241. package/dist/lib/command-hygiene.js +62 -2
  242. package/dist/lib/dedicated-power.d.ts +16 -1
  243. package/dist/lib/dedicated-power.js +153 -2
  244. package/dist/lib/dry-run-plans.d.ts +50 -0
  245. package/dist/lib/dry-run-plans.js +85 -0
  246. package/dist/lib/json-output.d.ts +31 -0
  247. package/dist/lib/json-output.js +78 -0
  248. package/dist/lib/list-output.d.ts +75 -0
  249. package/dist/lib/list-output.js +266 -0
  250. package/dist/lib/machine-daemon-log.d.ts +36 -0
  251. package/dist/lib/machine-daemon-log.js +78 -0
  252. package/dist/lib/node-adapter.js +10 -1
  253. package/dist/lib/open-target.d.ts +12 -0
  254. package/dist/lib/open-target.js +108 -0
  255. package/dist/lib/rate-limit-retry.d.ts +45 -0
  256. package/dist/lib/rate-limit-retry.js +88 -0
  257. package/dist/lib/store-listing.d.ts +45 -0
  258. package/dist/lib/store-listing.js +186 -0
  259. package/dist/lib/task-batch.d.ts +67 -0
  260. package/dist/lib/task-batch.js +227 -0
  261. package/dist/lib/terminal-qr.d.ts +55 -0
  262. package/dist/lib/terminal-qr.js +119 -0
  263. package/dist/lib/web-url.d.ts +11 -0
  264. package/dist/lib/web-url.js +24 -0
  265. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/computerWire.d.ts +68 -0
  266. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/computerWire.js +47 -1
  267. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/computerWire.d.ts +68 -0
  268. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/computerWire.js +46 -0
  269. package/dist/node_modules/@skrr-ai/auth-core/package.json +1 -1
  270. package/dist/node_modules/@skrr-ai/data-provider/index.js +6615 -6112
  271. package/oclif.manifest.json +41499 -32585
  272. package/package.json +2 -1
@@ -3,6 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseCapabilityRationales = parseCapabilityRationales;
4
4
  exports.parseReleaseDependencies = parseReleaseDependencies;
5
5
  exports.buildReleaseLicense = buildReleaseLicense;
6
+ exports.resolveTrialBrief = resolveTrialBrief;
7
+ exports.releaseIsSealed = releaseIsSealed;
8
+ exports.describeSlugRefusal = describeSlugRefusal;
9
+ const node_fs_1 = require("node:fs");
6
10
  const core_1 = require("@oclif/core");
7
11
  const data_provider_1 = require("@skrr-ai/data-provider");
8
12
  const base_command_1 = require("../../base-command");
@@ -68,6 +72,66 @@ function buildReleaseLicense(licenseId, remix) {
68
72
  },
69
73
  };
70
74
  }
75
+ /**
76
+ * `--trial-brief <text|@file>` → the brief the server records on the release
77
+ * (`agents/trialBrief.ts`). A value starting with `@` names a file to read;
78
+ * `@@…` is the escape for a brief that itself begins with `@`. Validated with
79
+ * the server's own normalizer so an over-long brief is refused here, before a
80
+ * request, with the same limit.
81
+ */
82
+ function resolveTrialBrief(value, readFile = (path) => (0, node_fs_1.readFileSync)(path, 'utf8')) {
83
+ if (value === undefined)
84
+ return {};
85
+ let text = value;
86
+ if (value.startsWith('@@')) {
87
+ text = value.slice(1);
88
+ }
89
+ else if (value.startsWith('@')) {
90
+ const path = value.slice(1);
91
+ if (!path)
92
+ return { error: '--trial-brief @<file> needs a file path after the @.' };
93
+ try {
94
+ text = readFile(path);
95
+ }
96
+ catch (err) {
97
+ return { error: `--trial-brief could not read ${path}: ${err.message}` };
98
+ }
99
+ }
100
+ const normalized = (0, data_provider_1.normalizeTrialBrief)(text);
101
+ if (!normalized.ok) {
102
+ return {
103
+ error: normalized.reason === 'too_long'
104
+ ? `--trial-brief is at most ${normalized.maxChars} characters.`
105
+ : '--trial-brief must be text.',
106
+ };
107
+ }
108
+ // Blank is sent as blank: an explicit "no brief" on this release.
109
+ return { trialBrief: normalized.brief ?? '' };
110
+ }
111
+ /**
112
+ * Whether a release published with these terms keeps its instructions from
113
+ * the public — the case where, without a brief, its listing has no trial.
114
+ */
115
+ function releaseIsSealed(price, sourceVisibility) {
116
+ if (sourceVisibility === 'public')
117
+ return false;
118
+ if (sourceVisibility === 'sealed' || sourceVisibility === 'licensed')
119
+ return true;
120
+ return (price ?? 0) > 0;
121
+ }
122
+ const SLUG_REFUSALS = {
123
+ empty: 'needs at least two letters or digits (a-z, 0-9)',
124
+ too_short: 'needs at least two letters or digits (a-z, 0-9)',
125
+ too_long: 'is at most 60 characters of a-z, 0-9 and hyphens',
126
+ reserved: 'is reserved; pick another',
127
+ };
128
+ /** One sentence for a slug the shared check refused, naming the canonical form. */
129
+ function describeSlugRefusal(input, check) {
130
+ if (check.ok)
131
+ return '';
132
+ const shown = check.slug && check.slug !== input ? ` (as "${check.slug}")` : '';
133
+ return `--slug "${input}"${shown} ${SLUG_REFUSALS[check.reason] ?? 'is not a valid slug'}.`;
134
+ }
71
135
  class AgentsVisibility extends base_command_1.BaseCommand {
72
136
  static description = 'Set the visibility of an agent';
73
137
  static examples = [
@@ -79,6 +143,8 @@ class AgentsVisibility extends base_command_1.BaseCommand {
79
143
  '<%= config.bin %> agents visibility <agent-id> --public --dependency skill:<skill-id>@<store-release-id>',
80
144
  '<%= config.bin %> agents visibility <agent-id> --public --license mit --remix attributed --source-visibility public',
81
145
  '<%= config.bin %> agents visibility <agent-id> --public --license proprietary --source-visibility sealed',
146
+ '<%= config.bin %> agents visibility <agent-id> --public --slug trip-planner',
147
+ '<%= config.bin %> agents visibility <agent-id> --public --price 5000000 --trial-brief @trial-brief.md',
82
148
  ];
83
149
  static args = {
84
150
  id: core_1.Args.string({ description: 'Agent ID', required: true, ignoreStdin: true }),
@@ -126,6 +192,18 @@ class AgentsVisibility extends base_command_1.BaseCommand {
126
192
  description: "Whether a buyer's installed copy may be published as a derived listing: attributed (the fork credits this release) or none. Needs --license; defaults to none",
127
193
  options: [...data_provider_1.STORE_RELEASE_REMIX_GRANTS],
128
194
  }),
195
+ slug: core_1.Flags.string({
196
+ description: "The agent's address in your publisher namespace, /@<handle>/<slug> (an alias of /a/<id>). " +
197
+ 'Typed text is canonicalised (My Agent → my-agent). Omit to keep the current slug, or to claim ' +
198
+ 'one from the name on a first publish. A replaced slug keeps working for this agent.',
199
+ }),
200
+ 'trial-brief': core_1.Flags.string({
201
+ description: 'What someone trying this agent from its listing should experience, as text or @<file>. ' +
202
+ 'A trial of a release whose instructions are private (paid, sealed or licensed) runs on this ' +
203
+ 'brief instead, and without one that listing has no trial. People who try it can read it back, ' +
204
+ 'so never put your private instructions here. At most 4000 characters; recorded on this ' +
205
+ 'release only, so pass it on every publish (like --language).',
206
+ }),
129
207
  'source-visibility': core_1.Flags.string({
130
208
  description: "Who may read the release's source, independent of price: licensed (license holders), public (anyone who sees the listing) or sealed (you only). Omit to keep the price-derived rule",
131
209
  options: [...data_provider_1.STORE_RELEASE_SOURCE_VISIBILITIES],
@@ -171,6 +249,24 @@ class AgentsVisibility extends base_command_1.BaseCommand {
171
249
  if ((license || sourceVisibility) && !isPublic) {
172
250
  this.error('--license, --remix and --source-visibility are terms of a public release; pass them with --public.', { exit: 1 });
173
251
  }
252
+ const { trialBrief, error: trialBriefError } = resolveTrialBrief(flags['trial-brief']);
253
+ if (trialBriefError)
254
+ this.error(trialBriefError, { exit: 1 });
255
+ if (trialBrief !== undefined && !isPublic) {
256
+ this.error('--trial-brief is recorded on a public release; pass it with --public.', {
257
+ exit: 1,
258
+ });
259
+ }
260
+ let slug;
261
+ if (flags.slug !== undefined) {
262
+ if (!isPublic) {
263
+ this.error('--slug names a public listing; pass it with --public.', { exit: 1 });
264
+ }
265
+ const check = (0, data_provider_1.checkAgentSlug)(flags.slug);
266
+ if (!check.ok)
267
+ this.error(describeSlugRefusal(flags.slug, check), { exit: 1 });
268
+ slug = check.slug;
269
+ }
174
270
  let result;
175
271
  try {
176
272
  result = await data_provider_1.dataService.setAgentVisibility({
@@ -186,6 +282,8 @@ class AgentsVisibility extends base_command_1.BaseCommand {
186
282
  dependencies,
187
283
  license,
188
284
  sourceVisibility,
285
+ ...(trialBrief !== undefined ? { trialBrief } : {}),
286
+ ...(slug !== undefined ? { slug } : {}),
189
287
  });
190
288
  }
191
289
  catch (err) {
@@ -198,12 +296,26 @@ class AgentsVisibility extends base_command_1.BaseCommand {
198
296
  const label = isPublic ? 'public' : 'private';
199
297
  this.log(`Set agent ${args.id} visibility: ${label}`);
200
298
  const recorded = result;
299
+ if (recorded?.vanity?.path) {
300
+ this.log(`Vanity address: ${recorded.vanity.path}`);
301
+ }
302
+ else if (recorded?.vanity?.slug) {
303
+ this.log(`Slug: ${recorded.vanity.slug} (claim a publisher handle for /@<handle>/${recorded.vanity.slug} to resolve)`);
304
+ }
201
305
  if (recorded?.license) {
202
306
  this.log(`License: ${recorded.license.id} (remix: ${recorded.license.remix})`);
203
307
  }
204
308
  if (recorded?.sourceVisibility) {
205
309
  this.log(`Source visibility: ${recorded.sourceVisibility}`);
206
310
  }
311
+ if (isPublic && recorded) {
312
+ if (recorded.trialBrief) {
313
+ this.log(`Trial brief: recorded (${recorded.trialBrief.length} characters)`);
314
+ }
315
+ else if (releaseIsSealed(recorded.price, recorded.sourceVisibility)) {
316
+ this.log('Trial: none. This release keeps its instructions private and has no trial brief, so its listing cannot be tried. Pass --trial-brief to add one.');
317
+ }
318
+ }
207
319
  }
208
320
  }
209
321
  exports.default = AgentsVisibility;
@@ -9,6 +9,7 @@ export default class Commands extends BaseCommand {
9
9
  json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
10
10
  search: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
11
  schema: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
12
+ brief: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
12
13
  audit: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
13
14
  };
14
15
  run(): Promise<void>;
@@ -9,6 +9,7 @@ class Commands extends base_command_1.BaseCommand {
9
9
  static examples = [
10
10
  '<%= config.bin %> commands',
11
11
  '<%= config.bin %> commands --json',
12
+ '<%= config.bin %> commands --json --brief',
12
13
  '<%= config.bin %> commands --search agent --json',
13
14
  '<%= config.bin %> commands --search "publish release"',
14
15
  '<%= config.bin %> commands --schema "agent message send"',
@@ -28,6 +29,10 @@ class Commands extends base_command_1.BaseCommand {
28
29
  description: 'Filter commands by name, description, or examples',
29
30
  }),
30
31
  schema: core_1.Flags.boolean({ description: 'Return one command schema instead of the full list' }),
32
+ brief: core_1.Flags.boolean({
33
+ description: 'With --json: id, command and one-line description only (about 14x smaller than the full list). Use --schema "<command>" for one command\'s flags.',
34
+ exclusive: ['schema', 'audit'],
35
+ }),
31
36
  audit: core_1.Flags.boolean({
32
37
  description: 'Run command hygiene checks for agent-friendly CLI contracts',
33
38
  exclusive: ['schema'],
@@ -101,20 +106,28 @@ class Commands extends base_command_1.BaseCommand {
101
106
  // Search is a discovery operation: keep its JSON small enough to pass
102
107
  // directly into an agent's next decision. Use --schema for full flags and
103
108
  // argument metadata for one selected command.
104
- const outputEntries = query
105
- ? entries.map(({ id, command, description, aliases, examples }) => ({
106
- id,
107
- command,
108
- description,
109
- aliases,
110
- examples,
111
- }))
112
- : entries;
109
+ const outputEntries = flags.brief
110
+ ? entries.map(({ id, command, description }) => ({ id, command, description }))
111
+ : query
112
+ ? entries.map(({ id, command, description, aliases, examples }) => ({
113
+ id,
114
+ command,
115
+ description,
116
+ aliases,
117
+ examples,
118
+ }))
119
+ : entries;
113
120
  const payload = {
114
121
  object: 'list',
115
122
  data: outputEntries,
116
123
  count: entries.length,
117
124
  ...(query ? { query: flags.search } : {}),
125
+ ...(flags.brief
126
+ ? {
127
+ brief: true,
128
+ hint: 'Run `skrr commands --schema "<command>" --json` for one command\'s flags.',
129
+ }
130
+ : {}),
118
131
  };
119
132
  if (flags.json) {
120
133
  this.log(JSON.stringify(payload, null, 2));
@@ -0,0 +1,17 @@
1
+ import type { DistributionAttributionsResponse } from '@skrr-ai/data-provider';
2
+ import { BaseCommand } from '../../base-command';
3
+ /** The human rendering; exported for the spec. */
4
+ export declare function renderAttributions(view: DistributionAttributionsResponse, log: (line: string) => void): void;
5
+ /**
6
+ * `skrr earnings attributions` — what your share links drove
7
+ * (agent-distribution-2026-10-08.md, "Affiliate"). Read-only, and only ever
8
+ * your own codes.
9
+ */
10
+ export default class EarningsAttributions extends BaseCommand {
11
+ static description: string;
12
+ static examples: string[];
13
+ static flags: {
14
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
15
+ };
16
+ run(): Promise<void>;
17
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderAttributions = renderAttributions;
4
+ const core_1 = require("@oclif/core");
5
+ const data_provider_1 = require("@skrr-ai/data-provider");
6
+ const base_command_1 = require("../../base-command");
7
+ /** tokenCredits are micro-dollars (1,000,000 = $1.00), as everywhere in earnings. */
8
+ const CREDITS_PER_USD = 1_000_000;
9
+ function amount(value, currency) {
10
+ if (currency === 'tokenCredits' || currency === 'USD') {
11
+ return `$${(value / CREDITS_PER_USD).toFixed(2)}`;
12
+ }
13
+ return `${value} ${currency}`;
14
+ }
15
+ const REWARD_STATE_LABEL = {
16
+ none: 'measured, no reward',
17
+ pending: 'reward pending',
18
+ available: 'reward available',
19
+ reversed: 'reward reversed',
20
+ };
21
+ /** The human rendering; exported for the spec. */
22
+ function renderAttributions(view, log) {
23
+ const plural = view.installs === 1 ? '' : 's';
24
+ log(`Your links drove ${view.installs} install${plural}.`);
25
+ log(` Paid: ${view.paidInstalls}${view.refundedInstalls ? ` (${view.refundedInstalls} refunded)` : ''}`);
26
+ if (view.gross.length > 0) {
27
+ log(` Sales: ${view.gross.map((g) => amount(g.amount, g.currency)).join(', ')}`);
28
+ }
29
+ if (view.rateBps > 0) {
30
+ log(` Rewards: ${amount(view.rewards.pending, 'tokenCredits')} pending, ` +
31
+ `${amount(view.rewards.available, 'tokenCredits')} available ` +
32
+ `(rate ${(view.rateBps / 100).toFixed(2)}%)`);
33
+ }
34
+ else {
35
+ log(' Rewards: not enabled — paid installs are measured, nothing is paid yet.');
36
+ }
37
+ if (view.recent.length === 0) {
38
+ if (view.installs === 0)
39
+ log('Share an agent (skrr agents embed, or a share link) to see what it drives.');
40
+ return;
41
+ }
42
+ log('');
43
+ log('Recent paid installs:');
44
+ for (const row of view.recent) {
45
+ const when = row.createdAt.slice(0, 10);
46
+ const name = row.agentName || row.agentId;
47
+ const refunded = row.refundedAt ? ', refunded' : '';
48
+ log(` ${when} ${name} ${amount(row.gross, row.currency)} via ${row.channel ?? 'unknown'} ` +
49
+ `(${REWARD_STATE_LABEL[row.rewardState] ?? row.rewardState}${refunded})`);
50
+ }
51
+ }
52
+ /**
53
+ * `skrr earnings attributions` — what your share links drove
54
+ * (agent-distribution-2026-10-08.md, "Affiliate"). Read-only, and only ever
55
+ * your own codes.
56
+ */
57
+ class EarningsAttributions extends base_command_1.BaseCommand {
58
+ static description = 'Show the installs your share links drove, the paid ones, and any reward they earned (read-only)';
59
+ static examples = [
60
+ '<%= config.bin %> earnings attributions',
61
+ '<%= config.bin %> earnings attributions --json',
62
+ ];
63
+ static flags = {
64
+ json: core_1.Flags.boolean({ description: 'Output as JSON' }),
65
+ };
66
+ async run() {
67
+ this.requireAuth();
68
+ const { flags } = await this.parse(EarningsAttributions);
69
+ try {
70
+ const view = await data_provider_1.dataService.getDistributionAttributions();
71
+ if (flags.json) {
72
+ this.log(JSON.stringify(view, null, 2));
73
+ return;
74
+ }
75
+ renderAttributions(view, (line) => this.log(line));
76
+ }
77
+ catch (error) {
78
+ this.handleApiError(error, { subject: 'attributions' });
79
+ }
80
+ }
81
+ }
82
+ exports.default = EarningsAttributions;
@@ -11,12 +11,13 @@ const earnings_1 = require("../../lib/earnings");
11
11
  */
12
12
  class Earnings extends base_command_1.BaseCommand {
13
13
  static description = 'Show your publisher earnings: available and pending balance, payout window and automatic payouts (read-only). ' +
14
- 'See `earnings statements` and `earnings payouts` for the history behind it.';
14
+ 'See `earnings statements` and `earnings payouts` for the history behind it, and `earnings attributions` for what your share links drove.';
15
15
  static examples = [
16
16
  '<%= config.bin %> earnings',
17
17
  '<%= config.bin %> earnings --json',
18
18
  '<%= config.bin %> earnings statements',
19
19
  '<%= config.bin %> earnings payouts',
20
+ '<%= config.bin %> earnings attributions',
20
21
  ];
21
22
  static flags = {
22
23
  json: core_1.Flags.boolean({ description: 'Output as JSON' }),
@@ -61,9 +61,10 @@ class GenerateRecoveryCode extends base_command_1.BaseCommand {
61
61
  process.stdout.write(result.formatted + '\n');
62
62
  // All metadata and warnings to stderr so stdout remains clean.
63
63
  process.stderr.write('\n');
64
- process.stderr.write(' Account Recovery Code (copy now — this is the only time it will be shown):\n');
65
- process.stderr.write('\n');
66
- process.stderr.write(` ${result.formatted}\n`);
64
+ // The code itself is on stdout, ABOVE. It used to be printed again here, so
65
+ // an interactive terminal (stdout and stderr share the screen, and scrollback
66
+ // keeps both) held two copies of a one-time credential.
67
+ process.stderr.write(' Account Recovery Code is printed above (copy now — this is the only time it will be shown).\n');
67
68
  process.stderr.write('\n');
68
69
  process.stderr.write(' WARNING: Store this somewhere safe. It will not be shown again.\n');
69
70
  process.stderr.write(' If lost, run this command again to generate a new code (the old one is revoked).\n');
@@ -12,6 +12,7 @@ export default class GitHubAllowTools extends BaseCommand {
12
12
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
13
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
14
14
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
15
16
  };
16
17
  run(): Promise<void>;
17
18
  }
@@ -21,6 +21,7 @@ export default class GitHubAppInstall extends BaseCommand {
21
21
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
22
22
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
23
23
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
24
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
24
25
  };
25
26
  run(): Promise<void>;
26
27
  }
@@ -15,6 +15,7 @@ export default class GitHubAppStatus extends BaseCommand {
15
15
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
16
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
17
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
18
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
18
19
  };
19
20
  run(): Promise<void>;
20
21
  }
@@ -25,6 +25,7 @@ export default class GitHubConnect extends BaseCommand {
25
25
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
26
26
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
27
27
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
28
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
28
29
  };
29
30
  run(): Promise<void>;
30
31
  }
@@ -10,6 +10,7 @@ export default class GitHubConnections extends BaseCommand {
10
10
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
11
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
12
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
13
14
  };
14
15
  run(): Promise<void>;
15
16
  }
@@ -10,6 +10,7 @@ export default class GitHubDisconnect extends BaseCommand {
10
10
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
11
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
12
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
13
14
  };
14
15
  run(): Promise<void>;
15
16
  }
@@ -14,6 +14,7 @@ export default class GitHubFinalize extends BaseCommand {
14
14
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
15
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
16
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
17
18
  };
18
19
  run(): Promise<void>;
19
20
  }
@@ -12,6 +12,7 @@ export default class GitHubReconnect extends BaseCommand {
12
12
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
13
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
14
14
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
15
16
  };
16
17
  run(): Promise<void>;
17
18
  }
@@ -16,6 +16,7 @@ export default class GitHubRun extends BaseCommand {
16
16
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
17
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
18
18
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
19
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
19
20
  };
20
21
  run(): Promise<void>;
21
22
  }
@@ -15,6 +15,7 @@ export default class GitHubTools extends BaseCommand {
15
15
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
16
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
17
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
18
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
18
19
  };
19
20
  run(): Promise<void>;
20
21
  }
@@ -15,6 +15,7 @@ export default class IntegrationsConnectionsConnect extends BaseCommand {
15
15
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
16
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
17
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
18
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
18
19
  };
19
20
  run(): Promise<void>;
20
21
  }
@@ -13,6 +13,7 @@ export default class IntegrationsConnectionsDisconnect extends BaseCommand {
13
13
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
14
14
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
15
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
16
17
  };
17
18
  run(): Promise<void>;
18
19
  }
@@ -14,6 +14,7 @@ export default class IntegrationsConnectionsFinalize extends BaseCommand {
14
14
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
15
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
16
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
17
18
  };
18
19
  run(): Promise<void>;
19
20
  }
@@ -10,6 +10,7 @@ export default class IntegrationsConnectionsList extends BaseCommand {
10
10
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
11
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
12
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
13
14
  };
14
15
  run(): Promise<void>;
15
16
  }
@@ -15,6 +15,7 @@ export default class IntegrationsConnectionsReconnect extends BaseCommand {
15
15
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
16
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
17
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
18
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
18
19
  };
19
20
  run(): Promise<void>;
20
21
  }
@@ -16,6 +16,7 @@ export default class IntegrationsExecute extends BaseCommand {
16
16
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
17
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
18
18
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
19
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
19
20
  };
20
21
  run(): Promise<void>;
21
22
  }
@@ -14,6 +14,7 @@ export default class IntegrationsSearch extends BaseCommand {
14
14
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
15
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
16
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
17
18
  };
18
19
  run(): Promise<void>;
19
20
  }
@@ -9,6 +9,7 @@ export default class IntegrationsToolkits extends BaseCommand {
9
9
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
10
10
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
11
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
12
13
  };
13
14
  run(): Promise<void>;
14
15
  }
@@ -14,6 +14,7 @@ export default class IntegrationsToolsAllow extends BaseCommand {
14
14
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
15
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
16
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
17
18
  };
18
19
  run(): Promise<void>;
19
20
  }
@@ -11,6 +11,7 @@ export default class IntegrationsToolsList extends BaseCommand {
11
11
  token: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
12
  workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
13
  profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
14
+ raw: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
14
15
  };
15
16
  run(): Promise<void>;
16
17
  }
@@ -13,6 +13,8 @@ const login_1 = require("../lib/login");
13
13
  const device_code_1 = require("../lib/device-code");
14
14
  const api_fetch_1 = require("../lib/api-fetch");
15
15
  const auth_storage_1 = require("../lib/auth-storage");
16
+ const credential_resolver_1 = require("../lib/credential-resolver");
17
+ const node_adapter_1 = require("../lib/node-adapter");
16
18
  const prompt_1 = require("../lib/prompt");
17
19
  /**
18
20
  * `skrr login`
@@ -218,6 +220,16 @@ class Login extends base_command_1.BaseCommand {
218
220
  });
219
221
  // Only now is the new pointer earned.
220
222
  undoBaseURL = null;
223
+ // Adopt the credential this login just stored. `BaseCommand.init()`
224
+ // resolved this process's credential BEFORE the login ran — the old,
225
+ // possibly revoked session, or nothing at all — and the adapter keeps
226
+ // that override until told otherwise. The hand-off below is the first
227
+ // authenticated call after login, so it went out under the stale
228
+ // credential: `POST /api/daemons/daemon-handoff` answered 401, the
229
+ // adapter fell back to brokering through a daemon that had no
230
+ // credential yet, and the freshly installed daemon was left signed out.
231
+ this.resolvedCredential = await (0, credential_resolver_1.resolveCredential)({ bareMode: this.bareMode });
232
+ (0, node_adapter_1.setAdapterCredentialOverride)(this.resolvedCredential);
221
233
  this.log('');
222
234
  this.log(`Signed in via ${result.flow} on ${(0, config_1.describeDeployment)(this.cliConfig.baseURL)}. ` +
223
235
  `Run \`${this.config.bin} whoami\` to confirm your identity.`);
@@ -0,0 +1,19 @@
1
+ import { DedicatedLeaseCommand } from '../../../lib/dedicated-lease-command';
2
+ import { type ComputerDaemonLogResult } from '../../../lib/machine-daemon-log';
3
+ /** One line as it prints: UTC time (the daemon's clock), level, then the daemon's own text. */
4
+ export declare function formatDaemonLogLine(line: ComputerDaemonLogResult['lines'][number]): string;
5
+ export default class DedicatedMachinesLogs extends DedicatedLeaseCommand {
6
+ static summary: string;
7
+ static description: string;
8
+ static examples: string[];
9
+ static args: {
10
+ lease: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
11
+ };
12
+ static flags: {
13
+ lines: import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
14
+ since: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
+ level: 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
+ }