@manyoars/oars 0.5.2 → 0.5.4

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/LICENSE CHANGED
@@ -187,7 +187,7 @@
187
187
  same "printed page" as the copyright notice for easier
188
188
  identification within third-party archives.
189
189
 
190
- Copyright 2026 Switchyard Software Company
190
+ Copyright 2026 Many Oars Co.
191
191
 
192
192
  Licensed under the Apache License, Version 2.0 (the "License");
193
193
  you may not use this file except in compliance with the License.
package/README.md CHANGED
@@ -207,8 +207,9 @@ Replay is local and read-only on your transcripts; it writes `crossings.jsonl` a
207
207
 
208
208
  ### pool
209
209
 
210
- `oars pool` uses the Many Oars pool, `https://pool.manyoars.com`, which is live (deposits there are closed until its covenant is published), or a pool server you name with `--server <url>` or `OARS_POOL_URL`. Every other command works without it.
210
+ `oars pool` uses the Many Oars pool, `https://pool.manyoars.com`, which is live and open for deposits, or a pool server you name with `--server <url>` or `OARS_POOL_URL`. Every other command works without it.
211
211
 
212
+ - `oars pool join --provider github|google --harness-version <version> [--harness <name>]` is the first way in: it signs you in, prepares your deposit, prints what would be sent with each field's rule, sends it, and fetches your first bundle, in one run. It is the five commands below in order, with the same prompts and the same checks, and one plain line says what each step is doing. If a step stops, it prints that step's own error and names the command to run again; running `oars pool join` again skips what already stands (a held sign-in, a prepared batch, a batch already sent). The commands below do the same step by step.
212
213
  - `oars pool login --provider github|google` asks the pool to start the provider's device flow, prints the user code and link, and polls the pool until you approve (a failed poll is retried with a longer wait until the code expires; the output names the exclusion-terms file when there is none, and the first `pool deposit` needs it); with `--verbose`, every request prints before it is sent. The pool holds the OAuth client and its secret, so the CLI needs no client ID or secret, and the provider's tokens never reach this machine.
213
214
  - `oars pool logout` revokes this machine's credential at the pool, then removes the local sign-in. If the pool cannot be reached it still removes the local sign-in and says the credential was not revoked there.
214
215
  - `oars pool deposit` writes a batch of session skeletons (a closed list of fields, each value redacted first; a host is hashed by the pool on arrival) to an outbox for each session that passes your folder allowlist and the exclusion check and whose last line is over 6 hours old, and stops: no session data is sent. `--send <hash>` sends one batch that `outbox` printed and that is unchanged on disk, once this account has accepted the pool covenant (a person types the phrase the covenant screen states, at a terminal; `--accept-covenant <version>` only names the version expected and accepts nothing; the screen then asks "Are you in the EU, the EEA, or the UK? (yes/no)" and sends the answer, and `--in-eu-eea-uk <yes|no>` answers it without asking; while the pool is closed to those regions a yes, or a request from them, is refused with `region_closed` and nothing is accepted); before that it reads the covenant, sends no batch, and exits 3 with `covenant_not_accepted`. A hash that was never shown, or a batch that changed, is refused before any request. The detached sender is the other sender: after the pool says your account accepted its covenant, it sends new batches, and raw copies only if you said yes to the raw prompt (`oars pool raw --consent yes`, answered by typing the phrase `I consent to sending raw copies` at a terminal; a yes also tells the pool, and `--consent no` tells it to stop accepting raw copies, whatever a later request states (a machine that held a yes and is signed out exits nonzero: the pool was not told), and the pool's nightly job then erases the raw copies it already holds, starting that night; a large account can take more than one night). With no sign-in, no acceptance, or an unreachable server it sends nothing.
@@ -217,6 +218,7 @@ Replay is local and read-only on your transcripts; it writes `crossings.jsonl` a
217
218
  - `oars pool export --out <folder> [--raw]` saves a copy of what the pool holds about your account (GDPR Articles 15(3) and 20), as JSON, one file a page, readable by you only. It covers your account row (with your raw consent record), when your sign-ins end (never the credential), your covenant acceptances, your machines (without their keys, with the day of each one's last deposit and its key days), your repository keys, your deposit hours, your deposits as they now read (with the machine, host class, and launcher each came from, and the host class and launcher the batch claimed), your raw ledger, your staged deposit parts, your erasure audit rows, and your telemetry days. `--raw` also saves each raw transcript you deposited that has not been erased, checked against its hash. It needs `oars pool login`, writes nothing to the pool, prints what it saved, and exits nonzero naming any page or object that failed; a rerun overwrites the same files. Totals the pool derives from many accounts are not yours to export and are not in it.
218
219
  - On an enrolled machine the hook child activates its key before its first deposit, rotates it where the disk is durable (`vps`, `ci`; the key lives in `<store>/machine-key`, owner-only), deposits under it, sends the batches its outbox held once the covenant is accepted, and tells you at the next Stop when the key expires within 14 days, has expired, or was revoked (`oars pool machines` lists it). A `cloud` machine's key is held by the network proxy and the child sends no credential of its own. Details: `docs/pool.md`, "Machine keys".
219
220
  - `oars pool outbox` prints each batch exactly as it would be sent, with its SHA-256, and `--explain` adds each field's rule.
221
+ - `oars pool remove <hash>` removes one batch from the outbox on this machine, with the queued raw copies of the same session, and says what it removed; nothing is sent and nothing at the pool changes. The session stays out of every later deposit, the background sender's included, until `oars pool remove <hash> --restore`, whichever account you sign in with. It refuses while a send holds the lock.
220
222
  - `oars pool fetch --harness-version <version>` fetches that version's signed bundle, verifies it against the key pinned at login, and keeps it locally. It prints the public and disclosure floors the bundle states (and any read family on a floor of its own) and holds no floor of its own: the pool sets them, so a change is a deploy and never a new release of oars.
221
223
 
222
224
  ### club
@@ -258,6 +260,7 @@ Exit codes:
258
260
  | 7 | rate limited |
259
261
  | 8 | the server could not be reached (the platform, the issuer, or a pool server) |
260
262
  | 10 | `pool fetch` hit the pool's weekly fetch cap; the bundle on disk is untouched, and the message says when to try again |
263
+ | 130 | `pool deposit --send` was ended with Ctrl-C (SIGINT); the batch stays queued |
261
264
 
262
265
  ## Source
263
266
 
package/dist/cli.d.ts CHANGED
@@ -32,6 +32,8 @@ export interface RunDeps {
32
32
  export interface Outcome {
33
33
  document: object;
34
34
  text: string;
35
+ /** `streamed`: the handler already wrote `text` as it went, so nothing is printed from it. `chunked`: `--json` falls back to writing the document one array element at a time when it is past V8's string length. */
36
+ output?: 'streamed' | 'chunked';
35
37
  }
36
38
  /** Runs one invocation (`argv` without the node and script entries) and returns the exit code. Telemetry records it afterward and cannot change it. */
37
39
  export declare const run: (argv: string[], deps: RunDeps) => Promise<ExitCode>;
package/dist/cli.js CHANGED
@@ -19,7 +19,7 @@ import { githubVisibility, poolEnroll, poolMachineRevoke, poolMachines } from '.
19
19
  import { runNetGit } from './sessions/machine-hold.js';
20
20
  import { holdPull } from './sessions/machine-pull.js';
21
21
  import { runGit } from './sessions/survival.js';
22
- import { poolCoverage, poolDeposit, poolExport, poolFetch, poolLogin, poolLogout, poolOutbox, poolProve, poolRaw } from './sessions/pool-command.js';
22
+ import { poolCoverage, poolDeposit, poolExport, poolFetch, poolJoin, poolLogin, poolLogout, poolOutbox, poolProve, poolRaw, poolRemove } from './sessions/pool-command.js';
23
23
  import { telemetryOff, telemetryOn, telemetryReport, telemetryShow, telemetryStatus } from './telemetry/command.js';
24
24
  import { cardLine } from './sessions/card-line.js';
25
25
  import { recordCrash } from './telemetry/crash.js';
@@ -52,7 +52,44 @@ const isoTime = (value) => {
52
52
  throw new InvalidArgumentError('it must be an ISO time such as 2026-11-01T16:00:00Z.');
53
53
  return new Date(parsed).toISOString();
54
54
  };
55
+ /** The document as one string, or `undefined` when it is past V8's string length (`RangeError: Invalid string length`). */
56
+ const stringified = (document) => {
57
+ try {
58
+ return JSON.stringify(document);
59
+ }
60
+ catch (error) {
61
+ if (error instanceof RangeError)
62
+ return undefined;
63
+ throw error;
64
+ }
65
+ };
66
+ /** `JSON.stringify(document)` plus a newline, in pieces: each top-level array goes out one element at a time, so no piece is longer than its largest element. */
67
+ const jsonPieces = function* (document) {
68
+ yield '{';
69
+ for (const [at, [key, value]] of Object.entries(document).entries()) {
70
+ const head = `${at === 0 ? '' : ','}${JSON.stringify(key)}:`;
71
+ if (!Array.isArray(value)) {
72
+ yield `${head}${JSON.stringify(value)}`;
73
+ continue;
74
+ }
75
+ yield `${head}[`;
76
+ for (const [index, item] of value.entries())
77
+ yield `${index === 0 ? '' : ','}${JSON.stringify(item)}`;
78
+ yield ']';
79
+ }
80
+ yield '}\n';
81
+ };
55
82
  const emit = (deps, json, outcome) => {
83
+ if (json && outcome.output === 'chunked') {
84
+ // One write when the document fits in a string, as every other command; past V8's string length, the pieces.
85
+ const whole = stringified(outcome.document);
86
+ for (const piece of whole === undefined ? jsonPieces(outcome.document) : [`${whole}
87
+ `])
88
+ deps.io.stdout(piece);
89
+ return;
90
+ }
91
+ if (!json && outcome.output === 'streamed')
92
+ return;
56
93
  deps.io.stdout(`${json ? JSON.stringify(outcome.document) : outcome.text}\n`);
57
94
  };
58
95
  /**
@@ -462,9 +499,24 @@ const buildProgram = (deps, observed) => {
462
499
  .action(async (_options, command) => {
463
500
  emit(deps, flag(command.optsWithGlobals(), 'json'), await gateReport(sessionDeps(deps)));
464
501
  });
465
- const pool = program.command('pool').description('sign in to a pool server, deposit session skeletons (a closed list of fields, each value redacted first) and, after a yes to the raw prompt, redacted raw copies, and fetch signed reads; local capture, recall, and reads need none of it. The covenant screen, where you type its phrase to accept, appears when you send a batch with oars pool deposit --send <hash> and have not accepted the covenant in force, not at sign-in');
502
+ const pool = program.command('pool').description('sign in to a pool server, deposit session skeletons (a closed list of fields, each value redacted first) and, after a yes to the raw prompt, redacted raw copies, and fetch signed reads; local capture, recall, and reads need none of it. The covenant screen, where you type its phrase to accept, appears when you send a batch with oars pool deposit --send <hash> or oars pool join and have not accepted the covenant in force, not at sign-in');
466
503
  const serverOption = '--server <url>';
467
504
  const serverHelp = 'the pool server, https or plain http to localhost (default: OARS_POOL_URL, else https://pool.manyoars.com)';
505
+ pool
506
+ .command('join')
507
+ .description('run login, deposit, outbox --explain, deposit --send, and fetch in one command. Run it again after a stop to continue from there')
508
+ .option('--provider <name>', 'github or google, for the sign-in step (not needed once signed in)')
509
+ .option('--verbose', 'print each sign-in request, headers and body, to stderr before it is sent (a credential shows as its size)')
510
+ .option('--accept-covenant <version>', 'name the covenant version you expect, as deposit --send takes it: on a terminal the screen is shown and you type its phrase yourself, and off a terminal this is refused')
511
+ .option('--in-eu-eea-uk <yes|no>', 'answer "Are you in the EU, the EEA, or the UK?" when you accept, as deposit --send takes it')
512
+ .option('--harness <name>', 'the harness whose bundle to fetch (default: the one your local store holds the most sessions of, claude-code when none leads)')
513
+ .requiredOption('--harness-version <version>', 'the public harness version whose bundle to fetch, as fetch takes it')
514
+ .option(serverOption, serverHelp)
515
+ .action(async (_options, command) => {
516
+ const options = command.optsWithGlobals();
517
+ const json = flag(options, 'json');
518
+ emit(deps, json, await poolJoin(deps, { server: text(options, 'server'), provider: text(options, 'provider'), verbose: flag(options, 'verbose'), acceptCovenant: text(options, 'acceptCovenant'), inEuEeaUk: text(options, 'inEuEeaUk'), harness: text(options, 'harness'), harnessVersion: text(options, 'harnessVersion') ?? '', json }));
519
+ });
468
520
  pool
469
521
  .command('logout')
470
522
  .description('revoke the credential held for this pool and remove it here; if the pool cannot be reached the local entry is still removed')
@@ -564,7 +616,17 @@ const buildProgram = (deps, observed) => {
564
616
  .option(serverOption, serverHelp)
565
617
  .action(async (_options, command) => {
566
618
  const options = command.optsWithGlobals();
567
- emit(deps, flag(options, 'json'), await poolOutbox(deps, { server: text(options, 'server'), explain: flag(options, 'explain') }));
619
+ emit(deps, flag(options, 'json'), await poolOutbox(deps, { server: text(options, 'server'), explain: flag(options, 'explain'), ...(flag(options, 'json') ? {} : { print: deps.io.stdout }) }));
620
+ });
621
+ pool
622
+ .command('remove')
623
+ .argument('<hash>', 'the SHA-256 of a batch, as oars pool outbox prints it')
624
+ .description('remove one batch and its queued raw copies from the outbox on this machine; nothing is sent, and nothing at the pool changes. Its session stays out of every later oars pool deposit, the background sender included, until --restore. It refuses while a send holds the outbox lock')
625
+ .option('--restore', 'take the session of an earlier removal off the list, so a later oars pool deposit builds it again (the hash is the one remove printed)')
626
+ .option(serverOption, serverHelp)
627
+ .action(async (hash, _options, command) => {
628
+ const options = command.optsWithGlobals();
629
+ emit(deps, flag(options, 'json'), await poolRemove(deps, hash, { server: text(options, 'server'), restore: flag(options, 'restore') }));
568
630
  });
569
631
  pool
570
632
  .command('prove')
package/dist/errors.d.ts CHANGED
@@ -12,6 +12,8 @@ export declare const ExitCode: {
12
12
  readonly UNREACHABLE: 8;
13
13
  /** `pool fetch` hit the pool's weekly cap: nothing is wrong, and the bundle on disk is untouched. */
14
14
  readonly CAPPED: 10;
15
+ /** A send the person ended with Ctrl-C (SIGINT): the shell convention, 128 plus the signal number. */
16
+ readonly INTERRUPTED: 130;
15
17
  };
16
18
  export type ExitCode = (typeof ExitCode)[keyof typeof ExitCode];
17
19
  /** The exit code for a failed response. The problem's code (then its type) decides; the status covers what has none. Text is never read. */
package/dist/errors.js CHANGED
@@ -10,6 +10,8 @@ export const ExitCode = {
10
10
  UNREACHABLE: 8,
11
11
  /** `pool fetch` hit the pool's weekly cap: nothing is wrong, and the bundle on disk is untouched. */
12
12
  CAPPED: 10,
13
+ /** A send the person ended with Ctrl-C (SIGINT): the shell convention, 128 plus the signal number. */
14
+ INTERRUPTED: 130,
13
15
  };
14
16
  const codes = (exit, ...names) => names.map((name) => [name, exit]);
15
17
  // Problem codes (or types) from spec 1 §13, T87 and T92. EXPIRED_TOKEN and ACCESS_DENIED are the device flow's own, raised locally.
@@ -1,6 +1,7 @@
1
1
  import type { Outcome, RunDeps } from '../cli.js';
2
2
  import { CliError } from '../errors.js';
3
3
  import { Masker, type Outgoing } from './pool-print.js';
4
+ import { type BusyDetail, type LockFs, type LockTimes, type Waiting } from './pool-send-lock.js';
4
5
  import { isObject, loadSignIns, textIn, type SignIn } from './pool-replica.js';
5
6
  import { type MachineConfig } from './machine.js';
6
7
  import { type SessionsRuntime } from './store.js';
@@ -46,8 +47,19 @@ interface Call {
46
47
  export type Sender = (request: Outgoing) => Promise<Reply>;
47
48
  /** One call to the pool. A redirect is an error: it could carry a batch or a token somewhere the checks on the named server never saw. */
48
49
  export declare const ask: (deps: RunDeps, step: string, server: string, path: string, init: Call, via?: Sender) => Promise<Reply>;
49
- /** The sender `deposit --send` uses when none is given: the request goes out over the network as built. The loopback test passes it to read what reaches the socket. */
50
- export declare const networkSender: (deps: RunDeps, step: string) => Sender;
50
+ /** What a guarded send runs under: the longest the pool gets to answer one request, and (for an interactive `--send`) the signal that ends the request when the person, or the program that launched the send, ends the run. The background sender has no one to interrupt it. */
51
+ export interface Guard {
52
+ stallMs: number;
53
+ signal?: AbortSignal;
54
+ }
55
+ /**
56
+ * What a person reads after a send they stopped (Ctrl-C, a closed terminal, a launcher that died): the batch stays queued, and the background sender (hook-bin.js nightly, started by a later oars command
57
+ * or the end of a session, about once an hour at most, not on a timer) sends it once the covenant is accepted, whether or not this command ever finishes. The second line is added only when a request carrying the batch had gone out.
58
+ * The folder switch and the sign-out are the two real ways to stop that: the sender builds the outbox again first, which withdraws a folder that is off, and it sends nothing without a sign-in.
59
+ */
60
+ export declare const stoppedText: (received: boolean) => string;
61
+ /** The sender `deposit --send` uses when none is given: the request goes out over the network as built. The loopback test passes it to read what reaches the socket. An interactive send passes a `Guard`. */
62
+ export declare const networkSender: (deps: RunDeps, step: string, guard?: Guard) => Sender;
51
63
  /** The server's named refusal, as a failure: its `error` is the problem's code in `--json`. */
52
64
  export declare const refusal: (step: string, { status, body }: Reply) => CliError;
53
65
  /**
@@ -66,6 +78,12 @@ export declare const poolLogin: (deps: RunDeps, options: {
66
78
  export declare const poolLogout: (deps: RunDeps, options: {
67
79
  server?: string | undefined;
68
80
  }) => Promise<Outcome>;
81
+ /**
82
+ * The CLI's own words around the covenant screen, never inside it: the screen text and the hash of it that the pool records stay exactly what the pool served. They say what a deposit gives and what to run next, and
83
+ * they promise only access, as covenant 2.1 does ("What you get" and Section 4.3). The third line points at the full text because Part A is a summary and Section 16.2 makes the full covenant the whole agreement.
84
+ */
85
+ export declare const OFFER_BEFORE: readonly string[];
86
+ export declare const OFFER_AFTER: readonly string[];
69
87
  /** A person is here when input and the screen's stream are both terminals: a typed phrase counts only for a text that reached a screen. */
70
88
  export declare const isTerminal: (deps: RunDeps) => boolean;
71
89
  /** The next line a person types, or `undefined` when the input ends first. The interface is closed after it, so the terminal is released. */
@@ -94,6 +112,34 @@ export declare const postRaw: (deps: RunDeps, options: {
94
112
  }) => Promise<void>;
95
113
  /** The exclusion terms in force now, re-read from the term file each time it is asked: empty when the file is missing or unreadable. */
96
114
  export declare const currentTerms: (deps: RunDeps) => Promise<string[]>;
115
+ /** What a test replaces in the send lock: its times and its clock, pause, and process checks, so a wait runs on driven time. */
116
+ export interface SendLock {
117
+ times: Partial<LockTimes>;
118
+ fs: LockFs;
119
+ }
120
+ /**
121
+ * How long the pool gets to answer one request of a send (an interactive `--send` and the background sender) before the send ends. It is a deadline for the whole request, the upload and the answer together,
122
+ * not an idle timeout: a batch is one session's skeleton, whose largest fixture is 887 KB (docs/pool.md), which a link of 240 kbit/s or better uploads inside 30 seconds. A slower link fails each try with the stall
123
+ * sentence; resetting the timer once headers arrive would not help it, because the upload is what is slow.
124
+ */
125
+ export declare const SEND_STALL_MS = 30000;
126
+ /** What the person reads within a second of a send that has to wait: whose lock it is, how old it is, and how long this run waits. */
127
+ export declare const waitingLine: ({ holder, ageMs, waitMs }: Waiting) => string;
128
+ /**
129
+ * What a send that gave up says: nothing was sent, who held the lock, and when a retry can succeed. A live holder on this host touches the lock every quarter of staleMs, even while it waits on a stalled pool, so the clock
130
+ * never frees its lock: the true condition is its end (a dead holder is taken over at once). Only a holder the lock does not name, or one on another host, whose liveness cannot be read, is decided by the clock: a
131
+ * retry is certain once the lock has gone untouched for staleMs.
132
+ */
133
+ export declare const busyLine: ({ holder, local, ageMs, untouchedMs, waitedMs, staleMs }: BusyDetail) => string;
134
+ /**
135
+ * `oars pool remove <hash>`: takes one batch out of this machine's outbox, the batch `oars pool outbox` printed under that hash. It takes the send lock without waiting, because a send in progress may be reading the very file, and refuses while another run holds it.
136
+ * It reads nothing from the pool and sends nothing, so it needs no sign-in, and it changes only files here. The session of a local batch goes on `removed.json`, which `poolDeposit` (and so the background sender) honors: nothing of it is built, queued, or sent until `--restore <hash>` takes it off. One a cloud session held is admitted again only by `oars pool hold pull`.
137
+ */
138
+ export declare const poolRemove: (deps: RunDeps, hash: string, options: {
139
+ server?: string | undefined;
140
+ restore?: boolean | undefined;
141
+ lock?: SendLock | undefined;
142
+ }) => Promise<Outcome>;
97
143
  /** The outbox key, and the skeleton `id`, of a machine's session: from the environment's session salt (per account, not per machine), else its own name standing in for the account, which a machine has none of. The holding route names its branch by the same key. */
98
144
  export declare const machineKeyOf: (machine: MachineConfig, session: string) => string;
99
145
  /**
@@ -110,11 +156,16 @@ export declare const poolDeposit: (deps: RunDeps, options: {
110
156
  git?: Git | undefined;
111
157
  session?: string | undefined;
112
158
  covenant?: string | undefined;
159
+ lock?: SendLock | undefined;
113
160
  }) => Promise<Outcome>;
114
- /** `oars pool outbox`: prints each batch as it would be sent (a batch past one request prints each part's request, in order), the request line and every header included, with the bearer credential as its size and nothing else masked, then its SHA-256, and records that it was shown. `--explain` adds each field's rule. */
161
+ /**
162
+ * `oars pool outbox`: prints each batch as it would be sent (a batch past one request prints each part's request, in order), the request line and every header included, with the bearer credential as its size and nothing else masked, then its SHA-256, and records that it was shown. `--explain` adds each field's rule.
163
+ * With `print` each batch is written as soon as it is built and marked shown right after, and the outcome carries no text: an outbox of thousands of sessions is far past V8's string length as one string. Without it (`--json`) the document carries each batch's request, and `--json` writes it element by element.
164
+ */
115
165
  export declare const poolOutbox: (deps: RunDeps, options: {
116
166
  server?: string | undefined;
117
167
  explain?: boolean | undefined;
168
+ print?: ((chunk: string) => void) | undefined;
118
169
  }) => Promise<Outcome>;
119
170
  /** `oars pool fetch`: one harness's signed bundle at one version, kept only once the key pinned at login has verified it. It keeps the signed form, so the replica can be checked again later, and the ETag, so the next fetch asks only whether it changed. The request prints before it is sent. */
120
171
  export declare const poolFetch: (deps: RunDeps, options: {
@@ -122,6 +173,21 @@ export declare const poolFetch: (deps: RunDeps, options: {
122
173
  harness?: string | undefined;
123
174
  harnessVersion: string;
124
175
  }) => Promise<Outcome>;
176
+ /**
177
+ * `oars pool join`: the five commands of a first deposit in one run, each by the handler the command itself uses: `login`, `deposit`, `outbox --explain`, `deposit --send <hash>` for each batch not yet sent, then `fetch`. It asks and checks
178
+ * nothing they do not, and a step that stops ends the run with that step's own error. Run again it skips what stands: a held sign-in, a prepared batch not yet sent, a batch in `sent.log`.
179
+ * Each step's text prints as it finishes, so the explanation is on screen before the send asks anything: on stdout, or with `json` on stderr, so stdout holds the one document.
180
+ */
181
+ export declare const poolJoin: (deps: RunDeps, options: {
182
+ server?: string | undefined;
183
+ provider?: string | undefined;
184
+ verbose?: boolean;
185
+ acceptCovenant?: string | undefined;
186
+ inEuEeaUk?: string | undefined;
187
+ harness?: string | undefined;
188
+ harnessVersion: string;
189
+ json?: boolean;
190
+ }) => Promise<Outcome>;
125
191
  /** The raw prompt, in plain words: shown by `oars pool raw` until it is answered, and what the detached sender relies on. Redaction is best effort and the text says so. */
126
192
  export declare const RAW_PROMPT: string;
127
193
  /** What a person types to say yes to the raw prompt: consent is a statement made at a terminal (GDPR Articles 7 and 9(2)(a)), not a flag a script can pass. */