@skrr-ai/cli 0.1.8 → 0.1.10

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 (170) hide show
  1. package/dist/base-command.d.ts +27 -0
  2. package/dist/base-command.js +83 -11
  3. package/dist/commands/agent/message/send.js +1 -1
  4. package/dist/commands/agents/chat.d.ts +1 -1
  5. package/dist/commands/agents/chat.js +1 -1
  6. package/dist/commands/browser/install.d.ts +1 -1
  7. package/dist/commands/browser/install.js +10 -2
  8. package/dist/commands/browser/mcp-config.js +3 -1
  9. package/dist/commands/browser/skill/show.js +1 -1
  10. package/dist/commands/browser/status.js +4 -1
  11. package/dist/commands/browser/uninstall.d.ts +1 -1
  12. package/dist/commands/browser/uninstall.js +10 -2
  13. package/dist/commands/browser.d.ts +1 -1
  14. package/dist/commands/browser.js +3 -3
  15. package/dist/commands/code/index.js +6 -3
  16. package/dist/commands/code/install.d.ts +61 -0
  17. package/dist/commands/code/install.js +247 -0
  18. package/dist/commands/code/oversky-agent.d.ts +2 -1
  19. package/dist/commands/code/oversky-agent.js +12 -8
  20. package/dist/commands/commands.js +1 -1
  21. package/dist/commands/context.js +1 -1
  22. package/dist/commands/create-token.js +1 -1
  23. package/dist/commands/daemon/byok.d.ts +1 -0
  24. package/dist/commands/daemon/byok.js +14 -1
  25. package/dist/commands/daemon/index.js +18 -7
  26. package/dist/commands/daemon/install.d.ts +1 -0
  27. package/dist/commands/daemon/install.js +22 -3
  28. package/dist/commands/daemon/logs.d.ts +1 -0
  29. package/dist/commands/daemon/logs.js +4 -0
  30. package/dist/commands/daemon/start.d.ts +1 -0
  31. package/dist/commands/daemon/start.js +15 -2
  32. package/dist/commands/daemon/status.d.ts +1 -0
  33. package/dist/commands/daemon/status.js +14 -1
  34. package/dist/commands/daemon/stop.d.ts +1 -0
  35. package/dist/commands/daemon/stop.js +14 -1
  36. package/dist/commands/daemon/uninstall.d.ts +1 -0
  37. package/dist/commands/daemon/uninstall.js +15 -2
  38. package/dist/commands/daemon/usage.d.ts +1 -0
  39. package/dist/commands/daemon/usage.js +5 -1
  40. package/dist/commands/doctor.js +2 -2
  41. package/dist/commands/github/allow-tools.d.ts +1 -0
  42. package/dist/commands/github/app/install.d.ts +1 -0
  43. package/dist/commands/github/app/status.d.ts +1 -0
  44. package/dist/commands/github/connect.d.ts +1 -0
  45. package/dist/commands/github/connections.d.ts +1 -0
  46. package/dist/commands/github/disconnect.d.ts +1 -0
  47. package/dist/commands/github/finalize.d.ts +1 -0
  48. package/dist/commands/github/reconnect.d.ts +1 -0
  49. package/dist/commands/github/run.d.ts +1 -0
  50. package/dist/commands/github/tools.d.ts +1 -0
  51. package/dist/commands/goals/create.js +2 -2
  52. package/dist/commands/goals/show.js +5 -0
  53. package/dist/commands/harnesses/list.js +14 -3
  54. package/dist/commands/harnesses/show.js +14 -0
  55. package/dist/commands/instructions/activate.js +1 -1
  56. package/dist/commands/instructions/archive-version.js +1 -1
  57. package/dist/commands/instructions/delete.js +1 -1
  58. package/dist/commands/instructions/diff.js +1 -1
  59. package/dist/commands/instructions/install.js +7 -1
  60. package/dist/commands/instructions/restore.js +1 -1
  61. package/dist/commands/instructions/show.js +17 -1
  62. package/dist/commands/instructions/update.js +1 -1
  63. package/dist/commands/integrations/connections/connect.d.ts +1 -0
  64. package/dist/commands/integrations/connections/disconnect.d.ts +1 -0
  65. package/dist/commands/integrations/connections/finalize.d.ts +1 -0
  66. package/dist/commands/integrations/connections/list.d.ts +1 -0
  67. package/dist/commands/integrations/connections/reconnect.d.ts +1 -0
  68. package/dist/commands/integrations/execute.d.ts +1 -0
  69. package/dist/commands/integrations/search.d.ts +1 -0
  70. package/dist/commands/integrations/toolkits.d.ts +1 -0
  71. package/dist/commands/integrations/tools/allow.d.ts +1 -0
  72. package/dist/commands/integrations/tools/list.d.ts +1 -0
  73. package/dist/commands/list-daemons.d.ts +2 -7
  74. package/dist/commands/list-daemons.js +13 -13
  75. package/dist/commands/login.js +78 -33
  76. package/dist/commands/logout.js +52 -1
  77. package/dist/commands/machines/hosted/start.js +1 -1
  78. package/dist/commands/pair.js +2 -2
  79. package/dist/commands/projects/create.js +6 -1
  80. package/dist/commands/projects/tasks.js +6 -1
  81. package/dist/commands/revoke-daemon.js +6 -2
  82. package/dist/commands/set-capabilities.js +6 -2
  83. package/dist/commands/skills/install.js +1 -1
  84. package/dist/commands/skills/library.js +2 -2
  85. package/dist/commands/spaces/create.js +6 -2
  86. package/dist/commands/tasks/complete.d.ts +1 -1
  87. package/dist/commands/tasks/complete.js +21 -8
  88. package/dist/commands/tasks/create.js +4 -1
  89. package/dist/commands/tasks/current.js +1 -1
  90. package/dist/commands/tasks/delete.d.ts +1 -0
  91. package/dist/commands/tasks/delete.js +9 -0
  92. package/dist/commands/tasks/export.js +5 -1
  93. package/dist/commands/tasks/follow-up.js +2 -1
  94. package/dist/commands/tasks/list.js +5 -1
  95. package/dist/commands/tasks/pr.js +1 -1
  96. package/dist/commands/tasks/show.js +10 -1
  97. package/dist/commands/tasks/triage.js +2 -1
  98. package/dist/commands/tasks/update.js +4 -1
  99. package/dist/commands/tasks/upsert.js +4 -1
  100. package/dist/commands/usage.js +1 -1
  101. package/dist/commands/whoami.js +4 -1
  102. package/dist/lib/agentic-stream.js +21 -1
  103. package/dist/lib/api-fetch.d.ts +1 -1
  104. package/dist/lib/api-fetch.js +1 -1
  105. package/dist/lib/auth-core-init.js +23 -3
  106. package/dist/lib/auth-storage.d.ts +0 -12
  107. package/dist/lib/auth-storage.js +37 -2
  108. package/dist/lib/config.d.ts +43 -3
  109. package/dist/lib/config.js +391 -31
  110. package/dist/lib/created-line.d.ts +22 -0
  111. package/dist/lib/created-line.js +25 -0
  112. package/dist/lib/daemon-binding.d.ts +29 -0
  113. package/dist/lib/daemon-binding.js +63 -0
  114. package/dist/lib/daemon-ref.d.ts +31 -0
  115. package/dist/lib/daemon-ref.js +47 -0
  116. package/dist/lib/daemonBroker.js +1 -1
  117. package/dist/lib/delegated-cli.js +3 -3
  118. package/dist/lib/exec-oversky.d.ts +18 -1
  119. package/dist/lib/exec-oversky.js +21 -4
  120. package/dist/lib/html-text.d.ts +15 -0
  121. package/dist/lib/html-text.js +40 -0
  122. package/dist/lib/keychain.d.ts +43 -0
  123. package/dist/lib/keychain.js +145 -4
  124. package/dist/lib/login.js +3 -3
  125. package/dist/lib/node-adapter.js +1 -1
  126. package/dist/lib/oauthLogin.js +17 -6
  127. package/dist/lib/sky-code-agent.d.ts +1 -1
  128. package/dist/lib/sky-code-agent.js +8 -8
  129. package/dist/lib/sky-code-broker.js +18 -2
  130. package/dist/lib/sky-code-doctor.js +120 -4
  131. package/dist/lib/sky-code-managed.d.ts +12 -0
  132. package/dist/lib/sky-code-managed.js +21 -7
  133. package/dist/lib/sky-code.d.ts +16 -1
  134. package/dist/lib/sky-code.js +110 -7
  135. package/dist/lib/task-execution.js +4 -11
  136. package/dist/lib/tasks.d.ts +1 -0
  137. package/dist/lib/tasks.js +9 -6
  138. package/dist/lib/update-check.js +1 -1
  139. package/dist/lib/usage-discovery.js +1 -1
  140. package/dist/lib/web-url.js +12 -1
  141. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/credentialResolver.d.ts +1 -1
  142. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/credentialResolver.js +2 -2
  143. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/index.d.ts +1 -0
  144. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/index.js +13 -1
  145. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/kek/linux.js +16 -3
  146. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/legacyStatePreflight.d.ts +0 -9
  147. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/legacyStatePreflight.js +18 -1
  148. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/loginLocalhost.js +3 -3
  149. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/messages.js +3 -3
  150. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/runtime.d.ts +7 -3
  151. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/skyCodeChannels.d.ts +96 -0
  152. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/skyCodeChannels.js +115 -0
  153. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/credentialResolver.d.ts +1 -1
  154. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/credentialResolver.js +2 -2
  155. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/index.d.ts +1 -0
  156. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/index.js +1 -0
  157. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/kek/linux.js +16 -3
  158. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/legacyStatePreflight.d.ts +0 -9
  159. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/legacyStatePreflight.js +18 -1
  160. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/loginLocalhost.js +3 -3
  161. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/messages.js +3 -3
  162. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/runtime.d.ts +7 -3
  163. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/skyCodeChannels.d.ts +96 -0
  164. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/skyCodeChannels.js +107 -0
  165. package/dist/node_modules/@skrr-ai/auth-core/package.json +1 -1
  166. package/dist/node_modules/@skrr-ai/data-provider/index.js +4206 -4191
  167. package/dist/node_modules/@skrr-ai/inference-broker/dist/cjs/managed-inference-broker.js +2 -2
  168. package/dist/node_modules/@skrr-ai/inference-broker/dist/esm/managed-inference-broker.js +2 -2
  169. package/oclif.manifest.json +7969 -1397
  170. package/package.json +22 -19
@@ -14,6 +14,10 @@ function supportsDaemonUsage(helpText) {
14
14
  }
15
15
  /** Read-only bridge to `oversky usage` for local Claude Code/Codex limits. */
16
16
  class DaemonUsage extends index_1.default {
17
+ // `skrr daemons <sub>` — the plural is advertised as an alias for the
18
+ // whole topic, and without a per-command alias only the bare topic
19
+ // resolved: every subcommand under it failed.
20
+ static aliases = ['daemons:usage'];
17
21
  static description = 'Show local Claude Code and Codex subscription usage limits';
18
22
  static flags = {
19
23
  provider: core_1.Flags.string({
@@ -43,7 +47,7 @@ class DaemonUsage extends index_1.default {
43
47
  const helpText = `${probe.stdout ?? ''}\n${probe.stderr ?? ''}`;
44
48
  if (probe.status === 0 && !supportsDaemonUsage(helpText)) {
45
49
  this.error(`The local \`oversky\` binary at ${binary} does not support \`usage\`. ` +
46
- 'It is older than this Sky CLI daemon bridge. Update or reinstall that daemon, ' +
50
+ 'It is older than this skrr CLI daemon bridge. Update or reinstall that daemon, ' +
47
51
  'then rerun `skrr daemon usage`; do not stop the healthy running daemon to work around it.', { exit: 2 });
48
52
  }
49
53
  const args = ['usage'];
@@ -147,7 +147,7 @@ function doctorCheckLines(checks, issues, bin) {
147
147
  return lines;
148
148
  }
149
149
  class Doctor extends base_command_1.BaseCommand {
150
- static description = 'Check whether the Sky CLI is ready for agent automation';
150
+ static description = 'Check whether the skrr CLI is ready for agent automation';
151
151
  static examples = ['<%= config.bin %> doctor', '<%= config.bin %> doctor --json'];
152
152
  static flags = {
153
153
  json: core_1.Flags.boolean({ description: 'Output as JSON' }),
@@ -342,7 +342,7 @@ class Doctor extends base_command_1.BaseCommand {
342
342
  }
343
343
  return;
344
344
  }
345
- this.log(`Sky CLI ${payload.cli.version} at ${root}`);
345
+ this.log(`skrr CLI ${payload.cli.version} at ${root}`);
346
346
  this.log(`Server: ${payload.server}`);
347
347
  this.log(`Auth: ${payload.auth.signedIn
348
348
  ? `${account?.email ?? account?.id}`
@@ -11,6 +11,7 @@ export default class GitHubAllowTools extends BaseCommand {
11
11
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
14
15
  };
15
16
  run(): Promise<void>;
16
17
  }
@@ -20,6 +20,7 @@ export default class GitHubAppInstall extends BaseCommand {
20
20
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
23
24
  };
24
25
  run(): Promise<void>;
25
26
  }
@@ -14,6 +14,7 @@ export default class GitHubAppStatus extends BaseCommand {
14
14
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
18
  };
18
19
  run(): Promise<void>;
19
20
  }
@@ -24,6 +24,7 @@ export default class GitHubConnect extends BaseCommand {
24
24
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
27
28
  };
28
29
  run(): Promise<void>;
29
30
  }
@@ -9,6 +9,7 @@ export default class GitHubConnections extends BaseCommand {
9
9
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
13
  };
13
14
  run(): Promise<void>;
14
15
  }
@@ -9,6 +9,7 @@ export default class GitHubDisconnect extends BaseCommand {
9
9
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
13
  };
13
14
  run(): Promise<void>;
14
15
  }
@@ -13,6 +13,7 @@ export default class GitHubFinalize extends BaseCommand {
13
13
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
17
  };
17
18
  run(): Promise<void>;
18
19
  }
@@ -11,6 +11,7 @@ export default class GitHubReconnect extends BaseCommand {
11
11
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
14
15
  };
15
16
  run(): Promise<void>;
16
17
  }
@@ -15,6 +15,7 @@ export default class GitHubRun extends BaseCommand {
15
15
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
18
19
  };
19
20
  run(): Promise<void>;
20
21
  }
@@ -14,6 +14,7 @@ export default class GitHubTools extends BaseCommand {
14
14
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
18
  };
18
19
  run(): Promise<void>;
19
20
  }
@@ -6,6 +6,7 @@ const base_command_1 = require("../../base-command");
6
6
  const web_url_1 = require("../../lib/web-url");
7
7
  const prompt_1 = require("../../lib/prompt");
8
8
  const projects_1 = require("../../lib/projects");
9
+ const created_line_1 = require("../../lib/created-line");
9
10
  class GoalsCreate extends base_command_1.BaseCommand {
10
11
  static description = 'Create a new goal';
11
12
  static examples = [
@@ -130,8 +131,7 @@ class GoalsCreate extends base_command_1.BaseCommand {
130
131
  this.log(JSON.stringify({ ...g, url }, null, 2));
131
132
  return;
132
133
  }
133
- const spaceNote = flags.space ? ` in space ${flags.space}` : '';
134
- this.log(`Created goal ${g.id ?? g._id ?? '?'}${spaceNote} - ${g.title ?? '(no title)'}`);
134
+ this.log((0, created_line_1.createdLine)('goal', { id: (g.id ?? g._id), title: g.title }));
135
135
  if (url)
136
136
  this.log(`View it at ${url}`);
137
137
  }
@@ -40,6 +40,11 @@ class GoalsShow extends base_command_1.BaseCommand {
40
40
  this.log(`Level: ${g.level ?? '-'}`);
41
41
  this.log(`Status: ${g.status ?? '-'}`);
42
42
  this.log(`Parent: ${g.parentId ?? '-'}`);
43
+ // Both are settable on create and update and neither was shown, so there
44
+ // was no way to confirm a value landed — the same gap `tasks show` had with
45
+ // its project.
46
+ this.log(`Project: ${g.projectId ?? '-'}`);
47
+ this.log(`Target date: ${g.targetDate ? String(g.targetDate).slice(0, 10) : '-'}`);
43
48
  this.log(`DRI: ${g._driName ?? g.driUserId ?? g.driAgentId ?? '-'}`);
44
49
  this.log(`Owner Agent: ${g.ownerAgentId ?? '-'}`);
45
50
  this.log(`Progress: ${typeof progress === 'number' ? `${Math.round(progress)}%` : '-'}`);
@@ -196,13 +196,24 @@ class HarnessesList extends base_command_1.BaseCommand {
196
196
  return;
197
197
  }
198
198
  if (selection.visible.length === 0) {
199
+ // Never let "every harness is offline" read as "you have none registered"
200
+ // — and never name one escape hatch on a guess. Two filters are on by
201
+ // default (offline hidden, hosted excluded) and either can be the whole
202
+ // reason the table is empty, so report each count against the flag that
203
+ // actually lifts it.
204
+ const hidden = [];
199
205
  if (selection.hiddenOffline > 0) {
200
- // Never let "every harness is offline" read as "you have none registered".
201
- this.log(`No online harnesses. ${selection.hiddenOffline} offline harness(es) registered — use --all to list them.`);
206
+ hidden.push(`${selection.hiddenOffline} offline (--all)`);
207
+ }
208
+ if (selection.hiddenByLocal > 0) {
209
+ hidden.push(`${selection.hiddenByLocal} hosted (--no-local)`);
210
+ }
211
+ if (hidden.length > 0) {
212
+ this.log(`No harnesses match the default filters. Hidden: ${hidden.join(', ')}.`);
202
213
  return;
203
214
  }
204
215
  this.log(flags.local
205
- ? 'No local harnesses found. Is your daemon connected? (use --no-local to include hosted ones)'
216
+ ? 'No harnesses found. Is your daemon connected? Offline rows are hidden by default (--all shows them) and hosted rows are excluded (--no-local includes them).'
206
217
  : 'No harnesses found.');
207
218
  return;
208
219
  }
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const core_1 = require("@oclif/core");
4
4
  const base_command_1 = require("../../base-command");
5
5
  const harnesses_1 = require("../../lib/harnesses");
6
+ const api_fetch_1 = require("../../lib/api-fetch");
6
7
  class HarnessesShow extends base_command_1.BaseCommand {
7
8
  static description = 'Show one harness — one provider on one machine';
8
9
  static examples = [
@@ -25,6 +26,19 @@ class HarnessesShow extends base_command_1.BaseCommand {
25
26
  response = await (0, harnesses_1.getHarness)(args.harness);
26
27
  }
27
28
  catch (err) {
29
+ // The server answers a malformed id with "Invalid harness ID", which says
30
+ // nothing about what a valid one IS or where to get one. The sibling
31
+ // `machines show` already sets the expectation by accepting what its own
32
+ // list prints, so failing here with no pointer is the odd one out.
33
+ // The readable text lives in `body`, not `message` — `message` is
34
+ // "HTTP 400 Bad Request — GET /api/harnesses/<id>". Any 400 on this
35
+ // lookup is the id being wrong, so branch on the status.
36
+ if (err instanceof api_fetch_1.ApiFetchError && err.status === 400) {
37
+ this.error(`Not a harness id: ${args.harness}\n` +
38
+ 'A harness id is the 24-character Harness _id. Run `skrr harnesses list --all` ' +
39
+ 'to see the ids on this account.', { exit: 1 });
40
+ return;
41
+ }
28
42
  this.handleApiError(err);
29
43
  return;
30
44
  }
@@ -6,7 +6,7 @@ const base_command_1 = require("../../base-command");
6
6
  class InstructionsActivate extends base_command_1.BaseCommand {
7
7
  static description = 'Roll forward or roll back a prompt by activating an immutable version';
8
8
  static args = {
9
- id: core_1.Args.string({ description: 'Prompt ID', required: true, ignoreStdin: true }),
9
+ id: core_1.Args.string({ description: 'Instruction ID', required: true, ignoreStdin: true }),
10
10
  };
11
11
  static flags = {
12
12
  version: core_1.Flags.string({ description: 'Version ID to activate', required: true }),
@@ -6,7 +6,7 @@ const base_command_1 = require("../../base-command");
6
6
  class InstructionsArchiveVersion extends base_command_1.BaseCommand {
7
7
  static description = 'Archive a non-current version that is not pinned by an installed target';
8
8
  static args = {
9
- id: core_1.Args.string({ description: 'Prompt ID', required: true, ignoreStdin: true }),
9
+ id: core_1.Args.string({ description: 'Instruction ID', required: true, ignoreStdin: true }),
10
10
  };
11
11
  static flags = {
12
12
  version: core_1.Flags.string({ description: 'Version ID to archive', required: true }),
@@ -7,7 +7,7 @@ const prompt_1 = require("../../lib/prompt");
7
7
  class InstructionsDelete extends base_command_1.BaseCommand {
8
8
  static description = 'Delete a prompt and request removal from every installed target';
9
9
  static args = {
10
- id: core_1.Args.string({ description: 'Prompt ID', required: true, ignoreStdin: true }),
10
+ id: core_1.Args.string({ description: 'Instruction ID', required: true, ignoreStdin: true }),
11
11
  };
12
12
  static flags = {
13
13
  yes: core_1.Flags.boolean({ description: 'Skip confirmation', char: 'y' }),
@@ -6,7 +6,7 @@ const base_command_1 = require("../../base-command");
6
6
  class InstructionsDiff extends base_command_1.BaseCommand {
7
7
  static description = 'Compare two immutable instruction versions';
8
8
  static args = {
9
- id: core_1.Args.string({ description: 'Prompt ID', required: true, ignoreStdin: true }),
9
+ id: core_1.Args.string({ description: 'Instruction ID', required: true, ignoreStdin: true }),
10
10
  };
11
11
  static flags = {
12
12
  from: core_1.Flags.string({
@@ -7,7 +7,13 @@ const prompt_1 = require("../../lib/prompt");
7
7
  class InstructionsInstall extends base_command_1.BaseCommand {
8
8
  static description = 'Opt in a daemon target to ongoing managed instruction reconciliation';
9
9
  static flags = {
10
- bundle: core_1.Flags.string({ description: 'Prompt ID', required: true }),
10
+ // The flag keeps its name renaming it would break every script that
11
+ // installs an instruction — but the description no longer introduces a
12
+ // third noun for the thing the topic already calls an instruction.
13
+ bundle: core_1.Flags.string({
14
+ description: 'Instruction ID (the id `skrr instructions list` prints)',
15
+ required: true,
16
+ }),
11
17
  daemon: core_1.Flags.string({ description: 'Daemon ID; inferred when exactly one daemon is online' }),
12
18
  provider: core_1.Flags.string({
13
19
  description: 'Provider to manage (repeatable)',
@@ -6,7 +6,7 @@ const base_command_1 = require("../../base-command");
6
6
  class InstructionsRestore extends base_command_1.BaseCommand {
7
7
  static description = 'Restore a deleted or archived prompt (targets remain opt-in)';
8
8
  static args = {
9
- id: core_1.Args.string({ description: 'Prompt ID', required: true, ignoreStdin: true }),
9
+ id: core_1.Args.string({ description: 'Instruction ID', required: true, ignoreStdin: true }),
10
10
  };
11
11
  static flags = { json: core_1.Flags.boolean({ description: 'Output as JSON' }) };
12
12
  async run() {
@@ -7,7 +7,7 @@ const format_1 = require("../../lib/format");
7
7
  class InstructionsShow extends base_command_1.BaseCommand {
8
8
  static description = 'Show exact prompt content and version history';
9
9
  static args = {
10
- id: core_1.Args.string({ description: 'Prompt ID', required: true, ignoreStdin: true }),
10
+ id: core_1.Args.string({ description: 'Instruction ID', required: true, ignoreStdin: true }),
11
11
  };
12
12
  static flags = {
13
13
  json: core_1.Flags.boolean({ description: 'Output as JSON' }),
@@ -65,6 +65,22 @@ class InstructionsShow extends base_command_1.BaseCommand {
65
65
  this.log(bundle.currentVersion?.body || '(no active content)');
66
66
  }
67
67
  catch (error) {
68
+ // A missing bundle is an ORDINARY 404, and rendering it as "An unexpected
69
+ // error occurred / BUNDLE_NOT_FOUND" tells the reader nothing they can act
70
+ // on — it reads like a defect in the CLI rather than a wrong id. Same
71
+ // shape `diff.ts` already fixed for VERSION_NOT_FOUND.
72
+ const code = error?.code;
73
+ const body = error?.body ?? '';
74
+ if (code === 'BUNDLE_NOT_FOUND' || /BUNDLE_NOT_FOUND/.test(body)) {
75
+ this.failWithCliError({
76
+ message: `No instruction bundle ${args.id}. ` +
77
+ `Run \`${this.config.bin} instructions list\` to see the ids on this account.`,
78
+ code: 'BUNDLE_NOT_FOUND',
79
+ status: 404,
80
+ exit: 4,
81
+ retryable: false,
82
+ });
83
+ }
68
84
  this.handleApiError(error);
69
85
  }
70
86
  }
@@ -7,7 +7,7 @@ const instruction_input_1 = require("../../lib/instruction-input");
7
7
  class InstructionsUpdate extends base_command_1.BaseCommand {
8
8
  static description = 'Update prompt metadata and/or create a new immutable version';
9
9
  static args = {
10
- id: core_1.Args.string({ description: 'Prompt ID', required: true, ignoreStdin: true }),
10
+ id: core_1.Args.string({ description: 'Instruction ID', required: true, ignoreStdin: true }),
11
11
  };
12
12
  static flags = {
13
13
  name: core_1.Flags.string({ description: 'New prompt name' }),
@@ -14,6 +14,7 @@ export default class IntegrationsConnectionsConnect extends BaseCommand {
14
14
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
18
  };
18
19
  run(): Promise<void>;
19
20
  }
@@ -12,6 +12,7 @@ export default class IntegrationsConnectionsDisconnect extends BaseCommand {
12
12
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
16
  };
16
17
  run(): Promise<void>;
17
18
  }
@@ -13,6 +13,7 @@ export default class IntegrationsConnectionsFinalize extends BaseCommand {
13
13
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
17
  };
17
18
  run(): Promise<void>;
18
19
  }
@@ -9,6 +9,7 @@ export default class IntegrationsConnectionsList extends BaseCommand {
9
9
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
13
  };
13
14
  run(): Promise<void>;
14
15
  }
@@ -14,6 +14,7 @@ export default class IntegrationsConnectionsReconnect extends BaseCommand {
14
14
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
18
  };
18
19
  run(): Promise<void>;
19
20
  }
@@ -15,6 +15,7 @@ export default class IntegrationsExecute extends BaseCommand {
15
15
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
18
19
  };
19
20
  run(): Promise<void>;
20
21
  }
@@ -13,6 +13,7 @@ export default class IntegrationsSearch extends BaseCommand {
13
13
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
17
  };
17
18
  run(): Promise<void>;
18
19
  }
@@ -8,6 +8,7 @@ export default class IntegrationsToolkits extends BaseCommand {
8
8
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
12
  };
12
13
  run(): Promise<void>;
13
14
  }
@@ -13,6 +13,7 @@ export default class IntegrationsToolsAllow extends BaseCommand {
13
13
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
17
  };
17
18
  run(): Promise<void>;
18
19
  }
@@ -10,6 +10,7 @@ export default class IntegrationsToolsList extends BaseCommand {
10
10
  bare: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
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
+ profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
14
  };
14
15
  run(): Promise<void>;
15
16
  }
@@ -1,4 +1,5 @@
1
1
  import { BaseCommand } from '../base-command';
2
+ import { formatDaemonRef } from '../lib/daemon-ref';
2
3
  /**
3
4
  * What a Daemon row can honestly be labelled.
4
5
  *
@@ -43,13 +44,7 @@ export default class ListDaemons extends BaseCommand {
43
44
  };
44
45
  run(): Promise<void>;
45
46
  }
46
- /**
47
- * Format a full daemon ObjectId as a short readable label:
48
- * "d_xY3p..." (prefix "d_" + first 8 hex chars + "...").
49
- * Matches the truncation format described in Tier 1 #4 of the
50
- * daemon-auth-happy-learnings strategy doc.
51
- */
52
- export declare function formatDaemonRef(id: string): string;
47
+ export { formatDaemonRef };
53
48
  /**
54
49
  * Format a Date as a human-readable relative time string ("2h ago",
55
50
  * "3d ago", "just now", etc.) for the LAST SEEN column.
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatDaemonRef = void 0;
3
4
  exports.daemonRegistrationLabel = daemonRegistrationLabel;
4
- exports.formatDaemonRef = formatDaemonRef;
5
5
  exports.relativeTime = relativeTime;
6
6
  const core_1 = require("@oclif/core");
7
7
  const base_command_1 = require("../base-command");
8
8
  const api_fetch_1 = require("../lib/api-fetch");
9
+ const daemon_ref_1 = require("../lib/daemon-ref");
10
+ Object.defineProperty(exports, "formatDaemonRef", { enumerable: true, get: function () { return daemon_ref_1.formatDaemonRef; } });
9
11
  /**
10
12
  * What a Daemon row can honestly be labelled.
11
13
  *
@@ -82,7 +84,7 @@ class ListDaemons extends base_command_1.BaseCommand {
82
84
  this.log('----------- ------------ ------------------------------ ----------- ---------- ------------------- ---------------');
83
85
  for (const d of rows) {
84
86
  // Truncate daemonRef (the Daemon._id) to "d_<first8chars>..." format
85
- const daemonRefCol = formatDaemonRef(d.id).padEnd(11, ' ');
87
+ const daemonRefCol = (0, daemon_ref_1.formatDaemonRef)(d.id).padEnd(11, ' ');
86
88
  const machineCol = (d.machineUuid ? d.machineUuid.slice(0, 8) : '—').padEnd(12, ' ');
87
89
  const nameCol = (d.name || '').slice(0, 30).padEnd(30, ' ');
88
90
  const osCol = (d.os || '—').slice(0, 11).padEnd(11, ' ');
@@ -99,20 +101,18 @@ class ListDaemons extends base_command_1.BaseCommand {
99
101
  this.log('');
100
102
  this.log('REGISTERED is when the daemon last registered, not a heartbeat — a live daemon can show ' +
101
103
  'an old timestamp. For reachability use `skrr machines list` or `skrr harnesses list`.');
104
+ // This table lists Daemon ROWS. `machines list` also surfaces identities
105
+ // that never minted one (its `daemon:<id>` entries), and those cannot appear
106
+ // here or be passed to `revoke-daemon`. Saying so matters because this is
107
+ // the table someone reads during an access review: a count that is silently
108
+ // short reads as "that is everything", and the one identity you cannot see
109
+ // is exactly the one you would want to find.
110
+ this.log('This lists registered daemons. `skrr machines list` may show additional ' +
111
+ '`daemon:<id>` identities that never registered here; those cannot be revoked ' +
112
+ 'with `skrr revoke-daemon`.');
102
113
  }
103
114
  }
104
115
  exports.default = ListDaemons;
105
- /**
106
- * Format a full daemon ObjectId as a short readable label:
107
- * "d_xY3p..." (prefix "d_" + first 8 hex chars + "...").
108
- * Matches the truncation format described in Tier 1 #4 of the
109
- * daemon-auth-happy-learnings strategy doc.
110
- */
111
- function formatDaemonRef(id) {
112
- if (!id || id.length < 8)
113
- return id || '—';
114
- return `d_${id.slice(0, 8)}...`;
115
- }
116
116
  /**
117
117
  * Format a Date as a human-readable relative time string ("2h ago",
118
118
  * "3d ago", "just now", etc.) for the LAST SEEN column.