@skrr-ai/cli 0.1.39 → 0.1.41
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/README.md +1 -1
- package/dist/base-command.d.ts +9 -0
- package/dist/base-command.js +26 -3
- package/dist/commands/agent-shares/list-for.js +4 -11
- package/dist/commands/agent-shares/received.js +4 -11
- package/dist/commands/agent-shares/sent.js +4 -11
- package/dist/commands/agent-shares/with.js +3 -10
- package/dist/commands/agents/activity.js +1 -1
- package/dist/commands/agents/api-actions/add.js +6 -0
- package/dist/commands/agents/chat.js +6 -1
- package/dist/commands/agents/create.d.ts +7 -0
- package/dist/commands/agents/create.js +19 -2
- package/dist/commands/agents/manager/ensure.d.ts +18 -0
- package/dist/commands/agents/manager/ensure.js +56 -0
- package/dist/commands/agents/show.js +4 -0
- package/dist/commands/agents/tools/auth.d.ts +6 -0
- package/dist/commands/agents/tools/auth.js +27 -1
- package/dist/commands/agents/tools/index.js +11 -1
- package/dist/commands/agents/triggers/policy.d.ts +1 -0
- package/dist/commands/agents/triggers/policy.js +32 -0
- package/dist/commands/agents/update.js +10 -4
- package/dist/commands/code/install.d.ts +4 -2
- package/dist/commands/code/install.js +12 -10
- package/dist/commands/convos/list.js +1 -3
- package/dist/commands/convos/show.js +4 -11
- package/dist/commands/daemon/index.js +3 -3
- package/dist/commands/daemon/install.js +4 -4
- package/dist/commands/daemon/login.js +1 -1
- package/dist/commands/daemon/logs.d.ts +3 -1
- package/dist/commands/daemon/logs.js +16 -1
- package/dist/commands/daemon/start.js +3 -3
- package/dist/commands/daemon/status.d.ts +9 -0
- package/dist/commands/daemon/status.js +22 -0
- package/dist/commands/dm/messages.js +1 -11
- package/dist/commands/followups/cancel.js +1 -1
- package/dist/commands/followups/observability.js +6 -2
- package/dist/commands/followups/remind.js +5 -2
- package/dist/commands/followups/reschedule.js +2 -1
- package/dist/commands/followups/resolve.js +1 -1
- package/dist/commands/followups/show.js +20 -0
- package/dist/commands/followups/watch.d.ts +1 -0
- package/dist/commands/followups/watch.js +9 -3
- package/dist/commands/harnesses/forget.js +20 -3
- package/dist/commands/harnesses/install.js +18 -6
- package/dist/commands/harnesses/installers.d.ts +1 -1
- package/dist/commands/harnesses/installers.js +36 -12
- package/dist/commands/harnesses/list.d.ts +74 -2
- package/dist/commands/harnesses/list.js +231 -15
- package/dist/commands/harnesses/ping.d.ts +2 -0
- package/dist/commands/harnesses/ping.js +21 -0
- package/dist/commands/harnesses/show.d.ts +22 -0
- package/dist/commands/harnesses/show.js +116 -17
- package/dist/commands/harnesses/update.d.ts +8 -0
- package/dist/commands/harnesses/update.js +25 -1
- package/dist/commands/harnesses/usage.d.ts +2 -0
- package/dist/commands/harnesses/usage.js +7 -2
- package/dist/commands/instructions/status.js +13 -0
- package/dist/commands/instructions/update-target.d.ts +1 -0
- package/dist/commands/instructions/update-target.js +11 -3
- package/dist/commands/login.js +5 -5
- package/dist/commands/machines/list.js +8 -9
- package/dist/commands/machines/show.js +46 -17
- package/dist/commands/messages/show.js +3 -10
- package/dist/commands/shares/get.js +2 -9
- package/dist/commands/shares/list.js +1 -9
- package/dist/commands/shortcuts/show.js +4 -11
- package/dist/commands/skills/local.js +6 -0
- package/dist/commands/spaces/actions/run.js +3 -4
- package/dist/commands/spaces/briefs/get.js +2 -9
- package/dist/commands/spaces/briefs/list.js +1 -9
- package/dist/commands/spaces/conversations.js +1 -9
- package/dist/commands/spaces/heartbeats/list.js +1 -9
- package/dist/commands/spaces/heartbeats/status.js +2 -9
- package/dist/commands/tasks/activity.js +1 -10
- package/dist/commands/tasks/approvals/list.js +1 -9
- package/dist/commands/tasks/attachments/list.js +1 -9
- package/dist/commands/tasks/comments/list.js +1 -9
- package/dist/commands/tasks/dri-status.js +2 -9
- package/dist/commands/tasks/events/append.js +9 -7
- package/dist/commands/tasks/execution-timeline.js +1 -9
- package/dist/commands/tasks/lifecycle/detach.js +26 -5
- package/dist/commands/tasks/monitor.js +1 -9
- package/dist/commands/tasks/result/submit.js +9 -0
- package/dist/commands/tasks/runs.js +1 -9
- package/dist/commands/tasks/show.js +5 -12
- package/dist/commands/token/list.d.ts +8 -0
- package/dist/commands/token/list.js +51 -6
- package/dist/help.js +8 -12
- package/dist/lib/agent-home-workspace.d.ts +19 -0
- package/dist/lib/agent-home-workspace.js +39 -0
- package/dist/lib/agent-resolver.js +2 -2
- package/dist/lib/agentic-stream.d.ts +22 -1
- package/dist/lib/agentic-stream.js +48 -7
- package/dist/lib/cli-installers.d.ts +84 -2
- package/dist/lib/cli-installers.js +146 -13
- package/dist/lib/command-miss.d.ts +22 -0
- package/dist/lib/command-miss.js +78 -0
- package/dist/lib/daemon-setup.js +2 -2
- package/dist/lib/daemon-target.d.ts +14 -0
- package/dist/lib/daemon-target.js +32 -0
- package/dist/lib/daemonBroker.js +1 -1
- package/dist/lib/daemonHandoff.js +1 -1
- package/dist/lib/dedicated-lease-command.js +4 -1
- package/dist/lib/dedicated-machines.d.ts +8 -1
- package/dist/lib/dedicated-machines.js +22 -6
- package/dist/lib/dedicated-wait.js +13 -0
- package/dist/lib/exec-runtime-binary.js +2 -2
- package/dist/lib/followups.d.ts +18 -0
- package/dist/lib/followups.js +14 -1
- package/dist/lib/format.d.ts +11 -0
- package/dist/lib/format.js +21 -0
- package/dist/lib/harness-labels.d.ts +39 -0
- package/dist/lib/harness-labels.js +60 -0
- package/dist/lib/harnesses.d.ts +6 -0
- package/dist/lib/instruction-input.d.ts +13 -0
- package/dist/lib/instruction-input.js +20 -1
- package/dist/lib/label-ref.d.ts +8 -1
- package/dist/lib/label-ref.js +12 -2
- package/dist/lib/local-skills.d.ts +17 -1
- package/dist/lib/local-skills.js +20 -2
- package/dist/lib/login.js +5 -5
- package/dist/lib/machines.d.ts +6 -0
- package/dist/lib/machines.js +68 -2
- package/dist/lib/option-hint.d.ts +15 -0
- package/dist/lib/option-hint.js +75 -0
- package/dist/lib/runtime-tool-support.d.ts +34 -0
- package/dist/lib/runtime-tool-support.js +77 -0
- package/dist/lib/share-rows.d.ts +17 -0
- package/dist/lib/share-rows.js +35 -0
- package/dist/lib/workspaces.d.ts +3 -0
- package/dist/lib/workspaces.js +38 -0
- package/dist/node_modules/@skrr-ai/data-provider/index.js +5029 -5007
- package/oclif.manifest.json +34255 -34142
- package/package.json +10 -5
|
@@ -47,7 +47,7 @@ class HarnessesInstall extends base_command_1.BaseCommand {
|
|
|
47
47
|
static flags = {
|
|
48
48
|
json: core_1.Flags.boolean({ description: 'Output as JSON' }),
|
|
49
49
|
daemon: core_1.Flags.string({
|
|
50
|
-
description: 'Which machine to install on. Defaults to your only
|
|
50
|
+
description: 'Which machine to install on. Defaults to your only connected daemon; required when several are connected.',
|
|
51
51
|
}),
|
|
52
52
|
};
|
|
53
53
|
async run() {
|
|
@@ -63,7 +63,7 @@ class HarnessesInstall extends base_command_1.BaseCommand {
|
|
|
63
63
|
const target = await (0, daemon_target_1.resolveDaemonTarget)({
|
|
64
64
|
explicit: flags.daemon,
|
|
65
65
|
local: (0, daemon_target_1.localMachine)(),
|
|
66
|
-
listActiveDaemons: () => (0, daemon_target_1.
|
|
66
|
+
listActiveDaemons: () => (0, daemon_target_1.listConnectedDaemons)(this.resolvedCredential),
|
|
67
67
|
});
|
|
68
68
|
const daemonId = this.daemonIdFor(target);
|
|
69
69
|
let start;
|
|
@@ -152,14 +152,26 @@ class HarnessesInstall extends base_command_1.BaseCommand {
|
|
|
152
152
|
this.error('This machine is a Dedicated Runtime whose daemon has not published an id this process can read. Name a machine with --daemon.', { exit: 1 });
|
|
153
153
|
}
|
|
154
154
|
if (target.kind === 'none') {
|
|
155
|
-
this.
|
|
155
|
+
this.failWithCliError({
|
|
156
|
+
message: `No daemon is connected for this account, so nothing can perform the install. Start the background service on this computer with \`${this.config.bin} daemon start\`.`,
|
|
157
|
+
code: 'NO_DAEMON',
|
|
158
|
+
exit: 1,
|
|
159
|
+
retryable: false,
|
|
160
|
+
});
|
|
156
161
|
}
|
|
157
162
|
const choices = target.daemons
|
|
158
163
|
.slice(0, 10)
|
|
159
|
-
|
|
164
|
+
// Full ids: they are what `--daemon` takes (OSK-9993).
|
|
165
|
+
.map((d) => ` ${d.id} ${d.name || '—'}`)
|
|
160
166
|
.join('\n');
|
|
161
|
-
|
|
162
|
-
|
|
167
|
+
// The same refusal, and the same code, as \`code install\` (OSK-9993 verifier).
|
|
168
|
+
this.failWithCliError({
|
|
169
|
+
message: `${target.daemons.length} connected daemons — say which machine to install on:\n${choices}\n` +
|
|
170
|
+
`Pass one with --daemon, or see each daemon id in the DAEMON ID column of \`${this.config.bin} harnesses list\`.`,
|
|
171
|
+
code: 'AMBIGUOUS_DAEMON',
|
|
172
|
+
exit: 1,
|
|
173
|
+
retryable: false,
|
|
174
|
+
});
|
|
163
175
|
}
|
|
164
176
|
}
|
|
165
177
|
exports.default = HarnessesInstall;
|
|
@@ -11,7 +11,7 @@ import { BaseCommand } from '../../base-command';
|
|
|
11
11
|
*
|
|
12
12
|
* That gap is not cosmetic, because `skrr harnesses list` answers a DIFFERENT
|
|
13
13
|
* question and looks like it answers this one. Its `status` is the daemon's
|
|
14
|
-
* socket, so on this account
|
|
14
|
+
* socket, so on this account the first-party harness read `online` with no binary installed
|
|
15
15
|
* at all, and `harnesses ping` answered it in 78ms — the daemon was there, the
|
|
16
16
|
* harness was not. A user could not discover that from inside the product; it
|
|
17
17
|
* took `command -v` in a shell.
|
|
@@ -4,7 +4,6 @@ const core_1 = require("@oclif/core");
|
|
|
4
4
|
const base_command_1 = require("../../base-command");
|
|
5
5
|
const data_provider_1 = require("@skrr-ai/data-provider");
|
|
6
6
|
const cli_installers_1 = require("../../lib/cli-installers");
|
|
7
|
-
const daemon_ref_1 = require("../../lib/daemon-ref");
|
|
8
7
|
const daemon_target_1 = require("../../lib/daemon-target");
|
|
9
8
|
const format_1 = require("../../lib/format");
|
|
10
9
|
/**
|
|
@@ -19,7 +18,7 @@ const format_1 = require("../../lib/format");
|
|
|
19
18
|
*
|
|
20
19
|
* That gap is not cosmetic, because `skrr harnesses list` answers a DIFFERENT
|
|
21
20
|
* question and looks like it answers this one. Its `status` is the daemon's
|
|
22
|
-
* socket, so on this account
|
|
21
|
+
* socket, so on this account the first-party harness read `online` with no binary installed
|
|
23
22
|
* at all, and `harnesses ping` answered it in 78ms — the daemon was there, the
|
|
24
23
|
* harness was not. A user could not discover that from inside the product; it
|
|
25
24
|
* took `command -v` in a shell.
|
|
@@ -44,7 +43,7 @@ class HarnessesInstallers extends base_command_1.BaseCommand {
|
|
|
44
43
|
static flags = {
|
|
45
44
|
json: core_1.Flags.boolean({ description: 'Output as JSON' }),
|
|
46
45
|
daemon: core_1.Flags.string({
|
|
47
|
-
description: 'Which machine to ask. Defaults to your only
|
|
46
|
+
description: 'Which machine to ask. Defaults to your only connected daemon; required when several are connected.',
|
|
48
47
|
}),
|
|
49
48
|
};
|
|
50
49
|
async run() {
|
|
@@ -53,7 +52,7 @@ class HarnessesInstallers extends base_command_1.BaseCommand {
|
|
|
53
52
|
const target = await (0, daemon_target_1.resolveDaemonTarget)({
|
|
54
53
|
explicit: flags.daemon,
|
|
55
54
|
local: (0, daemon_target_1.localMachine)(),
|
|
56
|
-
listActiveDaemons: () => (0, daemon_target_1.
|
|
55
|
+
listActiveDaemons: () => (0, daemon_target_1.listConnectedDaemons)(this.resolvedCredential),
|
|
57
56
|
});
|
|
58
57
|
const daemonId = this.daemonIdFor(target);
|
|
59
58
|
let res;
|
|
@@ -65,8 +64,21 @@ class HarnessesInstallers extends base_command_1.BaseCommand {
|
|
|
65
64
|
return;
|
|
66
65
|
}
|
|
67
66
|
const providers = res.providers ?? [];
|
|
67
|
+
// Computed before the output mode splits: a JSON reader needs the same
|
|
68
|
+
// "this daemon is older than that provider" signal the table prints, and
|
|
69
|
+
// the daemon version the header shows (OSK-9537 verifier).
|
|
70
|
+
const notOffered = providers.length > 0 ? (0, cli_installers_1.providersNotOffered)(providers, data_provider_1.MANAGED_CLI_PROVIDER_IDS) : [];
|
|
68
71
|
if (flags.json) {
|
|
69
|
-
this.log(JSON.stringify({
|
|
72
|
+
this.log(JSON.stringify({
|
|
73
|
+
daemonId,
|
|
74
|
+
platform: res.platform,
|
|
75
|
+
daemonVersion: res.daemonVersion ?? null,
|
|
76
|
+
providers,
|
|
77
|
+
notOffered: notOffered.map((provider) => ({
|
|
78
|
+
provider,
|
|
79
|
+
addedInDaemon: cli_installers_1.MANAGED_CLI_PROVIDER_SINCE[(0, cli_installers_1.readinessKey)(provider)] ?? null,
|
|
80
|
+
})),
|
|
81
|
+
}, null, 2));
|
|
70
82
|
return;
|
|
71
83
|
}
|
|
72
84
|
if (providers.length === 0) {
|
|
@@ -116,12 +128,12 @@ class HarnessesInstallers extends base_command_1.BaseCommand {
|
|
|
116
128
|
}
|
|
117
129
|
// A provider the platform knows and this daemon did not mention. Without
|
|
118
130
|
// this it simply is not on the list, which reads as dropped support rather
|
|
119
|
-
// than as an older daemon — `devin` arrived in
|
|
131
|
+
// than as an older daemon — `devin` arrived in the 0.8.45 daemon release, so 0.8.35
|
|
120
132
|
// answers with six providers and says nothing about the seventh.
|
|
121
|
-
const missing =
|
|
133
|
+
const missing = notOffered;
|
|
122
134
|
if (missing.length > 0) {
|
|
123
135
|
this.log('');
|
|
124
|
-
this.log(` Not offered by this daemon: ${
|
|
136
|
+
this.log(` Not offered by this daemon: ${(0, cli_installers_1.describeProvidersNotOffered)(missing)}. ` +
|
|
125
137
|
'That usually means the daemon is older than the provider — ' +
|
|
126
138
|
'check `skrr daemon status` for its version and how to update it.');
|
|
127
139
|
}
|
|
@@ -142,14 +154,26 @@ class HarnessesInstallers extends base_command_1.BaseCommand {
|
|
|
142
154
|
this.error('This machine is a Dedicated Runtime whose daemon has not published an id this process can read. Name a machine with --daemon.', { exit: 1 });
|
|
143
155
|
}
|
|
144
156
|
if (target.kind === 'none') {
|
|
145
|
-
this.
|
|
157
|
+
this.failWithCliError({
|
|
158
|
+
message: `No daemon is connected for this account, so nothing can report on it. Start the background service on this computer with \`${this.config.bin} daemon start\`.`,
|
|
159
|
+
code: 'NO_DAEMON',
|
|
160
|
+
exit: 1,
|
|
161
|
+
retryable: false,
|
|
162
|
+
});
|
|
146
163
|
}
|
|
147
164
|
const choices = target.daemons
|
|
148
165
|
.slice(0, 10)
|
|
149
|
-
|
|
166
|
+
// Full ids: they are what `--daemon` takes (OSK-9993).
|
|
167
|
+
.map((d) => ` ${d.id} ${d.name || '—'}`)
|
|
150
168
|
.join('\n');
|
|
151
|
-
|
|
152
|
-
|
|
169
|
+
// The same refusal, and the same code, as \`code install\` (OSK-9993 verifier).
|
|
170
|
+
this.failWithCliError({
|
|
171
|
+
message: `${target.daemons.length} connected daemons — say which machine to report on:\n${choices}\n` +
|
|
172
|
+
`Pass one with --daemon, or see each daemon id in the DAEMON ID column of \`${this.config.bin} harnesses list\`.`,
|
|
173
|
+
code: 'AMBIGUOUS_DAEMON',
|
|
174
|
+
exit: 1,
|
|
175
|
+
retryable: false,
|
|
176
|
+
});
|
|
153
177
|
}
|
|
154
178
|
}
|
|
155
179
|
exports.default = HarnessesInstallers;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BaseCommand } from '../../base-command';
|
|
2
|
+
import { type ProviderReadiness } from '../../lib/cli-installers';
|
|
2
3
|
/**
|
|
3
4
|
* Minimal shape of a provider Harness row as returned by
|
|
4
5
|
* `GET /api/harnesses` (`{ harnesses: WireHarness[] }`). Only the
|
|
@@ -71,6 +72,25 @@ export declare function shortMachineLabel(machineUuid?: string): string;
|
|
|
71
72
|
export declare function emptyListMessage(input: {
|
|
72
73
|
provider: string | null;
|
|
73
74
|
local: boolean;
|
|
75
|
+
/** `--all` was passed, so suggesting it is noise (OSK-9285). */
|
|
76
|
+
all?: boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Every provider this account has a row for, whatever its status, when the
|
|
79
|
+
* caller could read it. Absent or null: unknown, and nothing is claimed.
|
|
80
|
+
*/
|
|
81
|
+
accountProviders?: readonly string[] | null;
|
|
82
|
+
}): string;
|
|
83
|
+
/**
|
|
84
|
+
* The NAME cell. `show` and `--json` said when YOUR alias covers the shared
|
|
85
|
+
* name; this table printed the alias as if it were the name everyone sees
|
|
86
|
+
* (OSK-10004). The marker leads because the column truncates from the right,
|
|
87
|
+
* and a trailing one is the first thing a long name would cut.
|
|
88
|
+
*/
|
|
89
|
+
export declare const ALIAS_MARKER = "*";
|
|
90
|
+
export declare function harnessNameCell(row: {
|
|
91
|
+
name?: string;
|
|
92
|
+
sharedName?: string;
|
|
93
|
+
aliased?: boolean;
|
|
74
94
|
}): string;
|
|
75
95
|
/**
|
|
76
96
|
* What the DEFAULT column says for one row.
|
|
@@ -89,9 +109,33 @@ export type HarnessSelection = {
|
|
|
89
109
|
hiddenOffline: number;
|
|
90
110
|
/** Rows dropped by `--limit` alone. */
|
|
91
111
|
hiddenByLimit: number;
|
|
112
|
+
/**
|
|
113
|
+
* Superseded rows a status filter dropped — the ones `--status offline`
|
|
114
|
+
* leaves to `--status superseded`. Only superseded rows are counted: online
|
|
115
|
+
* rows the same filter drops were never offline, so they are not "hidden".
|
|
116
|
+
*/
|
|
117
|
+
hiddenSuperseded: number;
|
|
92
118
|
/** Rows that survived every filter, before the online-only default and `--limit`. */
|
|
93
119
|
matched: number;
|
|
94
120
|
};
|
|
121
|
+
/**
|
|
122
|
+
* What `--status` accepts: exactly what the STATUS column prints (OSK-10005).
|
|
123
|
+
*
|
|
124
|
+
* The column says `superseded` for a row a later registration on the same
|
|
125
|
+
* machine replaced; the filter accepted only online|offline, so the one value
|
|
126
|
+
* that says "never coming back" could be read and never selected.
|
|
127
|
+
*/
|
|
128
|
+
export declare const HARNESS_STATUS_FILTERS: readonly ["online", "offline", "superseded"];
|
|
129
|
+
/**
|
|
130
|
+
* The status to ask the SERVER for. Only `online` narrows there.
|
|
131
|
+
*
|
|
132
|
+
* Supersession is judged among the rows in one response — a row is superseded
|
|
133
|
+
* when a newer row for the same provider on the same machine exists. Asked for
|
|
134
|
+
* `offline` only, the server cannot see the live row that replaced an offline
|
|
135
|
+
* one, so it labelled that row `offline` while `--all` called it `superseded`.
|
|
136
|
+
* Online rows are never superseded, so that one filter is safe to push down.
|
|
137
|
+
*/
|
|
138
|
+
export declare function serverStatusParam(status: string | undefined): string | undefined;
|
|
95
139
|
/**
|
|
96
140
|
* Harness rows created before `harnessLocation` was introduced do not carry that
|
|
97
141
|
* field. A daemon id is the durable discriminator for those legacy rows:
|
|
@@ -145,6 +189,8 @@ export declare function selectHarnessRows(rows: HarnessRow[], options: {
|
|
|
145
189
|
local: boolean;
|
|
146
190
|
daemon?: string;
|
|
147
191
|
limit?: number;
|
|
192
|
+
/** Keep only rows whose STATUS column reads this (`harnessStatusLabel`). */
|
|
193
|
+
status?: string;
|
|
148
194
|
/** Hide offline rows (the human-readable default). */
|
|
149
195
|
onlineOnly: boolean;
|
|
150
196
|
}): HarnessSelection;
|
|
@@ -177,7 +223,9 @@ export type HarnessDefaults = {
|
|
|
177
223
|
workspaceDefaultHarnessId?: string | null;
|
|
178
224
|
};
|
|
179
225
|
export type HarnessesJson = {
|
|
180
|
-
harnesses: HarnessRow
|
|
226
|
+
harnesses: Array<HarnessRow & {
|
|
227
|
+
readiness?: ProviderReadiness | null;
|
|
228
|
+
}>;
|
|
181
229
|
filters: HarnessesFilters;
|
|
182
230
|
defaults: HarnessDefaults;
|
|
183
231
|
counts: {
|
|
@@ -189,6 +237,8 @@ export type HarnessesJson = {
|
|
|
189
237
|
hiddenByLocal: number;
|
|
190
238
|
/** Rows `--limit` dropped — raise `--limit` to get them back. */
|
|
191
239
|
hiddenByLimit: number;
|
|
240
|
+
/** Superseded rows `--status` dropped — `--status superseded` lists them. */
|
|
241
|
+
hiddenSuperseded: number;
|
|
192
242
|
/**
|
|
193
243
|
* OSK-3385 — how many of the returned rows are `status: 'online'`.
|
|
194
244
|
*
|
|
@@ -213,7 +263,22 @@ export type HarnessesJson = {
|
|
|
213
263
|
* (`compareHarnessRows`), not in server order. Round 1 introduced that sort;
|
|
214
264
|
* it is deliberate, so `.harnesses[0]` is the row you almost always want.
|
|
215
265
|
*/
|
|
216
|
-
export declare function buildHarnessesJson(selection: HarnessSelection, filters: HarnessesFilters, defaults?: HarnessDefaults): HarnessesJson;
|
|
266
|
+
export declare function buildHarnessesJson(selection: HarnessSelection, filters: HarnessesFilters, defaults?: HarnessDefaults, readiness?: (row: HarnessRow) => ProviderReadiness | undefined): HarnessesJson;
|
|
267
|
+
/**
|
|
268
|
+
* What the READINESS column's non-answers mean, counted from the rows shown.
|
|
269
|
+
*
|
|
270
|
+
* Each footnote names a different next step, so they are not merged: a `-` on
|
|
271
|
+
* an offline row wants `--all`/a started daemon, a `-` on a provider the daemon
|
|
272
|
+
* does not manage (hermes, gemini) wants nothing, `unknown` is installed but
|
|
273
|
+
* unverifiable, and only a definite not-ready label (interactive-required,
|
|
274
|
+
* not-installed, …) has something to fix. Counting `unknown` as not ready
|
|
275
|
+
* would send the reader to fix eleven rows that are fine as far as anyone can
|
|
276
|
+
* tell.
|
|
277
|
+
*/
|
|
278
|
+
export declare function readinessFootnotes(rows: readonly HarnessRow[], readiness: {
|
|
279
|
+
lookup: (row: HarnessRow) => ProviderReadiness | undefined;
|
|
280
|
+
daemonAnswered: (row: HarnessRow) => boolean;
|
|
281
|
+
}): string[];
|
|
217
282
|
/**
|
|
218
283
|
* Rows with the provider in its CANONICAL spelling.
|
|
219
284
|
*
|
|
@@ -246,6 +311,13 @@ export default class HarnessesList extends BaseCommand {
|
|
|
246
311
|
daemon: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
247
312
|
limit: import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
248
313
|
local: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
314
|
+
readiness: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
249
315
|
};
|
|
250
316
|
run(): Promise<void>;
|
|
317
|
+
/**
|
|
318
|
+
* The canonical providers this account has any row for, or null when that
|
|
319
|
+
* cannot be read. Asked only when a --provider filter came back empty, so
|
|
320
|
+
* the ordinary path pays nothing for it.
|
|
321
|
+
*/
|
|
322
|
+
private accountProviders;
|
|
251
323
|
}
|