@skrr-ai/cli 0.1.8 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base-command.d.ts +27 -0
- package/dist/base-command.js +83 -11
- package/dist/commands/agent/message/send.js +1 -1
- package/dist/commands/agents/chat.d.ts +1 -1
- package/dist/commands/agents/chat.js +1 -1
- package/dist/commands/browser/install.d.ts +1 -1
- package/dist/commands/browser/install.js +10 -2
- package/dist/commands/browser/mcp-config.js +3 -1
- package/dist/commands/browser/skill/show.js +1 -1
- package/dist/commands/browser/status.js +4 -1
- package/dist/commands/browser/uninstall.d.ts +1 -1
- package/dist/commands/browser/uninstall.js +10 -2
- package/dist/commands/browser.d.ts +1 -1
- package/dist/commands/browser.js +3 -3
- package/dist/commands/code/index.js +6 -3
- package/dist/commands/code/install.d.ts +61 -0
- package/dist/commands/code/install.js +247 -0
- package/dist/commands/code/oversky-agent.d.ts +2 -1
- package/dist/commands/code/oversky-agent.js +12 -8
- package/dist/commands/commands.js +1 -1
- package/dist/commands/context.js +1 -1
- package/dist/commands/create-token.js +1 -1
- package/dist/commands/daemon/byok.d.ts +1 -0
- package/dist/commands/daemon/byok.js +14 -1
- package/dist/commands/daemon/index.js +18 -7
- package/dist/commands/daemon/install.d.ts +1 -0
- package/dist/commands/daemon/install.js +22 -3
- package/dist/commands/daemon/logs.d.ts +1 -0
- package/dist/commands/daemon/logs.js +4 -0
- package/dist/commands/daemon/start.d.ts +1 -0
- package/dist/commands/daemon/start.js +15 -2
- package/dist/commands/daemon/status.d.ts +1 -0
- package/dist/commands/daemon/status.js +14 -1
- package/dist/commands/daemon/stop.d.ts +1 -0
- package/dist/commands/daemon/stop.js +14 -1
- package/dist/commands/daemon/uninstall.d.ts +1 -0
- package/dist/commands/daemon/uninstall.js +15 -2
- package/dist/commands/daemon/usage.d.ts +1 -0
- package/dist/commands/daemon/usage.js +5 -1
- package/dist/commands/doctor.js +2 -2
- package/dist/commands/github/allow-tools.d.ts +1 -0
- package/dist/commands/github/app/install.d.ts +1 -0
- package/dist/commands/github/app/status.d.ts +1 -0
- package/dist/commands/github/connect.d.ts +1 -0
- package/dist/commands/github/connections.d.ts +1 -0
- package/dist/commands/github/disconnect.d.ts +1 -0
- package/dist/commands/github/finalize.d.ts +1 -0
- package/dist/commands/github/reconnect.d.ts +1 -0
- package/dist/commands/github/run.d.ts +1 -0
- package/dist/commands/github/tools.d.ts +1 -0
- package/dist/commands/goals/create.js +2 -2
- package/dist/commands/goals/show.js +5 -0
- package/dist/commands/harnesses/list.js +14 -3
- package/dist/commands/harnesses/show.js +14 -0
- package/dist/commands/instructions/activate.js +1 -1
- package/dist/commands/instructions/archive-version.js +1 -1
- package/dist/commands/instructions/delete.js +1 -1
- package/dist/commands/instructions/diff.js +1 -1
- package/dist/commands/instructions/install.js +7 -1
- package/dist/commands/instructions/restore.js +1 -1
- package/dist/commands/instructions/show.js +17 -1
- package/dist/commands/instructions/update.js +1 -1
- package/dist/commands/integrations/connections/connect.d.ts +1 -0
- package/dist/commands/integrations/connections/disconnect.d.ts +1 -0
- package/dist/commands/integrations/connections/finalize.d.ts +1 -0
- package/dist/commands/integrations/connections/list.d.ts +1 -0
- package/dist/commands/integrations/connections/reconnect.d.ts +1 -0
- package/dist/commands/integrations/execute.d.ts +1 -0
- package/dist/commands/integrations/search.d.ts +1 -0
- package/dist/commands/integrations/toolkits.d.ts +1 -0
- package/dist/commands/integrations/tools/allow.d.ts +1 -0
- package/dist/commands/integrations/tools/list.d.ts +1 -0
- package/dist/commands/list-daemons.d.ts +2 -7
- package/dist/commands/list-daemons.js +13 -13
- package/dist/commands/login.js +73 -31
- package/dist/commands/logout.js +52 -1
- package/dist/commands/machines/hosted/start.js +1 -1
- package/dist/commands/pair.js +2 -2
- package/dist/commands/projects/create.js +6 -1
- package/dist/commands/projects/tasks.js +6 -1
- package/dist/commands/revoke-daemon.js +6 -2
- package/dist/commands/set-capabilities.js +6 -2
- package/dist/commands/skills/install.js +1 -1
- package/dist/commands/skills/library.js +2 -2
- package/dist/commands/spaces/create.js +6 -2
- package/dist/commands/tasks/complete.d.ts +1 -1
- package/dist/commands/tasks/complete.js +21 -8
- package/dist/commands/tasks/create.js +4 -1
- package/dist/commands/tasks/current.js +1 -1
- package/dist/commands/tasks/delete.d.ts +1 -0
- package/dist/commands/tasks/delete.js +9 -0
- package/dist/commands/tasks/export.js +5 -1
- package/dist/commands/tasks/follow-up.js +2 -1
- package/dist/commands/tasks/list.js +5 -1
- package/dist/commands/tasks/pr.js +1 -1
- package/dist/commands/tasks/show.js +10 -1
- package/dist/commands/tasks/triage.js +2 -1
- package/dist/commands/tasks/update.js +4 -1
- package/dist/commands/tasks/upsert.js +4 -1
- package/dist/commands/usage.js +1 -1
- package/dist/lib/agentic-stream.js +21 -1
- package/dist/lib/api-fetch.d.ts +1 -1
- package/dist/lib/api-fetch.js +1 -1
- package/dist/lib/auth-core-init.js +23 -3
- package/dist/lib/auth-storage.d.ts +0 -12
- package/dist/lib/auth-storage.js +37 -2
- package/dist/lib/config.d.ts +3 -3
- package/dist/lib/config.js +327 -26
- package/dist/lib/created-line.d.ts +22 -0
- package/dist/lib/created-line.js +25 -0
- package/dist/lib/daemon-binding.d.ts +29 -0
- package/dist/lib/daemon-binding.js +63 -0
- package/dist/lib/daemon-ref.d.ts +31 -0
- package/dist/lib/daemon-ref.js +47 -0
- package/dist/lib/daemonBroker.js +1 -1
- package/dist/lib/delegated-cli.js +3 -3
- package/dist/lib/exec-oversky.d.ts +18 -1
- package/dist/lib/exec-oversky.js +21 -4
- package/dist/lib/html-text.d.ts +15 -0
- package/dist/lib/html-text.js +40 -0
- package/dist/lib/keychain.d.ts +43 -0
- package/dist/lib/keychain.js +145 -4
- package/dist/lib/login.js +3 -3
- package/dist/lib/node-adapter.js +1 -1
- package/dist/lib/oauthLogin.js +17 -6
- package/dist/lib/sky-code-agent.d.ts +1 -1
- package/dist/lib/sky-code-agent.js +8 -8
- package/dist/lib/sky-code-broker.js +18 -2
- package/dist/lib/sky-code-doctor.js +120 -4
- package/dist/lib/sky-code-managed.d.ts +12 -0
- package/dist/lib/sky-code-managed.js +21 -7
- package/dist/lib/sky-code.d.ts +16 -1
- package/dist/lib/sky-code.js +102 -4
- package/dist/lib/task-execution.js +4 -11
- package/dist/lib/tasks.d.ts +1 -0
- package/dist/lib/tasks.js +9 -6
- package/dist/lib/update-check.js +1 -1
- package/dist/lib/usage-discovery.js +1 -1
- package/dist/lib/web-url.js +12 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/credentialResolver.d.ts +1 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/credentialResolver.js +2 -2
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/index.d.ts +1 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/index.js +13 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/kek/linux.js +16 -3
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/legacyStatePreflight.d.ts +0 -9
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/legacyStatePreflight.js +18 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/loginLocalhost.js +3 -3
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/messages.js +3 -3
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/runtime.d.ts +7 -3
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/skyCodeChannels.d.ts +96 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/skyCodeChannels.js +115 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/credentialResolver.d.ts +1 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/credentialResolver.js +2 -2
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/index.d.ts +1 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/index.js +1 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/kek/linux.js +16 -3
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/legacyStatePreflight.d.ts +0 -9
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/legacyStatePreflight.js +18 -1
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/loginLocalhost.js +3 -3
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/messages.js +3 -3
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/runtime.d.ts +7 -3
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/skyCodeChannels.d.ts +96 -0
- package/dist/node_modules/@skrr-ai/auth-core/dist/esm/skyCodeChannels.js +107 -0
- package/dist/node_modules/@skrr-ai/auth-core/package.json +1 -1
- package/dist/node_modules/@skrr-ai/data-provider/index.js +4206 -4191
- package/dist/node_modules/@skrr-ai/inference-broker/dist/cjs/managed-inference-broker.js +2 -2
- package/dist/node_modules/@skrr-ai/inference-broker/dist/esm/managed-inference-broker.js +2 -2
- package/oclif.manifest.json +9924 -3352
- 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
|
|
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'];
|
package/dist/commands/doctor.js
CHANGED
|
@@ -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
|
|
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(`
|
|
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
|
-
|
|
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
|
-
|
|
201
|
-
|
|
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
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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
|
-
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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.
|