@relayflows/sdk 2.0.29 → 2.0.31
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/agent-artifacts.d.ts.map +1 -1
- package/dist/agent-artifacts.js +2 -9
- package/dist/agent-artifacts.js.map +1 -1
- package/dist/agent-cwd.d.ts +69 -0
- package/dist/agent-cwd.d.ts.map +1 -0
- package/dist/agent-cwd.js +140 -0
- package/dist/agent-cwd.js.map +1 -0
- package/dist/artifact-scan-policy.d.ts +35 -0
- package/dist/artifact-scan-policy.d.ts.map +1 -0
- package/dist/artifact-scan-policy.js +49 -0
- package/dist/artifact-scan-policy.js.map +1 -0
- package/dist/authored-completion-record.d.ts +35 -0
- package/dist/authored-completion-record.d.ts.map +1 -0
- package/dist/authored-completion-record.js +92 -0
- package/dist/authored-completion-record.js.map +1 -0
- package/dist/authored-completion.d.ts +99 -0
- package/dist/authored-completion.d.ts.map +1 -0
- package/dist/authored-completion.js +184 -0
- package/dist/authored-completion.js.map +1 -0
- package/dist/authored-flow-error.d.ts +13 -1
- package/dist/authored-flow-error.d.ts.map +1 -1
- package/dist/authored-flow-error.js +12 -0
- package/dist/authored-flow-error.js.map +1 -1
- package/dist/authored-flow-executor.d.ts +7 -30
- package/dist/authored-flow-executor.d.ts.map +1 -1
- package/dist/authored-flow-executor.js +64 -48
- package/dist/authored-flow-executor.js.map +1 -1
- package/dist/authored-human.d.ts.map +1 -1
- package/dist/authored-human.js +1 -3
- package/dist/authored-human.js.map +1 -1
- package/dist/authored-node-entry.js +4 -1
- package/dist/authored-node-entry.js.map +1 -1
- package/dist/authored-node-runner.d.ts +9 -1
- package/dist/authored-node-runner.d.ts.map +1 -1
- package/dist/authored-node-runner.js +92 -17
- package/dist/authored-node-runner.js.map +1 -1
- package/dist/authored-root.d.ts +5 -0
- package/dist/authored-root.d.ts.map +1 -1
- package/dist/authored-root.js +20 -2
- package/dist/authored-root.js.map +1 -1
- package/dist/authored-step-output.d.ts +35 -10
- package/dist/authored-step-output.d.ts.map +1 -1
- package/dist/authored-step-output.js +108 -40
- package/dist/authored-step-output.js.map +1 -1
- package/dist/authored-verdict.d.ts +28 -0
- package/dist/authored-verdict.d.ts.map +1 -0
- package/dist/authored-verdict.js +79 -0
- package/dist/authored-verdict.js.map +1 -0
- package/dist/authored-worker-step.d.ts +5 -2
- package/dist/authored-worker-step.d.ts.map +1 -1
- package/dist/authored-worker-step.js +48 -11
- package/dist/authored-worker-step.js.map +1 -1
- package/dist/bundle-extensions.d.ts.map +1 -1
- package/dist/bundle-extensions.js +4 -7
- package/dist/bundle-extensions.js.map +1 -1
- package/dist/bundle.d.ts.map +1 -1
- package/dist/bundle.js +41 -7
- package/dist/bundle.js.map +1 -1
- package/dist/canonical.d.ts.map +1 -1
- package/dist/canonical.js +18 -6
- package/dist/canonical.js.map +1 -1
- package/dist/cli/check-worker-surface.d.ts +27 -0
- package/dist/cli/check-worker-surface.d.ts.map +1 -0
- package/dist/cli/check-worker-surface.js +63 -0
- package/dist/cli/check-worker-surface.js.map +1 -0
- package/dist/cli/check.d.ts +19 -2
- package/dist/cli/check.d.ts.map +1 -1
- package/dist/cli/check.js +12 -4
- package/dist/cli/check.js.map +1 -1
- package/dist/cli/cloud-format.d.ts +9 -0
- package/dist/cli/cloud-format.d.ts.map +1 -0
- package/dist/cli/cloud-format.js +77 -0
- package/dist/cli/cloud-format.js.map +1 -0
- package/dist/cli/cloud-live.d.ts +39 -0
- package/dist/cli/cloud-live.d.ts.map +1 -0
- package/dist/cli/cloud-live.js +325 -0
- package/dist/cli/cloud-live.js.map +1 -0
- package/dist/cli/cloud-read.d.ts +3 -7
- package/dist/cli/cloud-read.d.ts.map +1 -1
- package/dist/cli/cloud-read.js +14 -266
- package/dist/cli/cloud-read.js.map +1 -1
- package/dist/cli/cloud-refusal.d.ts +39 -0
- package/dist/cli/cloud-refusal.d.ts.map +1 -0
- package/dist/cli/cloud-refusal.js +95 -0
- package/dist/cli/cloud-refusal.js.map +1 -0
- package/dist/cli/cloud-status-view.d.ts +7 -0
- package/dist/cli/cloud-status-view.d.ts.map +1 -0
- package/dist/cli/cloud-status-view.js +214 -0
- package/dist/cli/cloud-status-view.js.map +1 -0
- package/dist/cli/direct-run.d.ts.map +1 -1
- package/dist/cli/direct-run.js +16 -2
- package/dist/cli/direct-run.js.map +1 -1
- package/dist/cli/hn-monitor.d.ts +0 -13
- package/dist/cli/hn-monitor.d.ts.map +1 -1
- package/dist/cli/hn-monitor.js +2 -1
- package/dist/cli/hn-monitor.js.map +1 -1
- package/dist/cli/local-agent-remedy.d.ts +80 -0
- package/dist/cli/local-agent-remedy.d.ts.map +1 -0
- package/dist/cli/local-agent-remedy.js +116 -0
- package/dist/cli/local-agent-remedy.js.map +1 -0
- package/dist/cli/observer-session.d.ts +41 -0
- package/dist/cli/observer-session.d.ts.map +1 -0
- package/dist/cli/observer-session.js +78 -0
- package/dist/cli/observer-session.js.map +1 -0
- package/dist/cli/run.d.ts +30 -2
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +186 -24
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/status.d.ts +9 -0
- package/dist/cli/status.d.ts.map +1 -1
- package/dist/cli/status.js +31 -2
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/step-evidence.d.ts +90 -0
- package/dist/cli/step-evidence.d.ts.map +1 -0
- package/dist/cli/step-evidence.js +259 -0
- package/dist/cli/step-evidence.js.map +1 -0
- package/dist/cli/step-failure.d.ts +14 -4
- package/dist/cli/step-failure.d.ts.map +1 -1
- package/dist/cli/step-failure.js +41 -76
- package/dist/cli/step-failure.js.map +1 -1
- package/dist/cli-commands.d.ts +6 -0
- package/dist/cli-commands.d.ts.map +1 -1
- package/dist/cli-commands.js +2 -0
- package/dist/cli-commands.js.map +1 -1
- package/dist/cli.d.ts +10 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +53 -42
- package/dist/cli.js.map +1 -1
- package/dist/cloud-read.d.ts +15 -0
- package/dist/cloud-read.d.ts.map +1 -1
- package/dist/cloud-read.js +20 -1
- package/dist/cloud-read.js.map +1 -1
- package/dist/cloud-run-record.d.ts +27 -0
- package/dist/cloud-run-record.d.ts.map +1 -0
- package/dist/cloud-run-record.js +56 -0
- package/dist/cloud-run-record.js.map +1 -0
- package/dist/cloud-run.d.ts +2 -9
- package/dist/cloud-run.d.ts.map +1 -1
- package/dist/cloud-run.js +3 -20
- package/dist/cloud-run.js.map +1 -1
- package/dist/communication/local.d.ts.map +1 -1
- package/dist/communication/local.js +2 -1
- package/dist/communication/local.js.map +1 -1
- package/dist/communication/worker.d.ts +1 -1
- package/dist/communication/worker.d.ts.map +1 -1
- package/dist/communication/worker.js +13 -5
- package/dist/communication/worker.js.map +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +28 -6
- package/dist/compile.js.map +1 -1
- package/dist/direct-input.d.ts.map +1 -1
- package/dist/direct-input.js +21 -1
- package/dist/direct-input.js.map +1 -1
- package/dist/failure-kinds.d.ts +96 -6
- package/dist/failure-kinds.d.ts.map +1 -1
- package/dist/failure-kinds.js +29 -2
- package/dist/failure-kinds.js.map +1 -1
- package/dist/flow-extension-compat.d.ts.map +1 -1
- package/dist/flow-extension-compat.js +26 -8
- package/dist/flow-extension-compat.js.map +1 -1
- package/dist/flow-extension-loader.d.ts +7 -0
- package/dist/flow-extension-loader.d.ts.map +1 -1
- package/dist/flow-extension-loader.js +48 -22
- package/dist/flow-extension-loader.js.map +1 -1
- package/dist/flow-requirements.d.ts.map +1 -1
- package/dist/flow-requirements.js +24 -9
- package/dist/flow-requirements.js.map +1 -1
- package/dist/fs-descriptor.d.ts +17 -0
- package/dist/fs-descriptor.d.ts.map +1 -0
- package/dist/fs-descriptor.js +96 -0
- package/dist/fs-descriptor.js.map +1 -0
- package/dist/gate-contract.d.ts +7 -0
- package/dist/gate-contract.d.ts.map +1 -1
- package/dist/gate-contract.js +6 -1
- package/dist/gate-contract.js.map +1 -1
- package/dist/helper-preflight.d.ts.map +1 -1
- package/dist/helper-preflight.js +10 -3
- package/dist/helper-preflight.js.map +1 -1
- package/dist/helper-reference.d.ts +25 -0
- package/dist/helper-reference.d.ts.map +1 -0
- package/dist/helper-reference.js +129 -0
- package/dist/helper-reference.js.map +1 -0
- package/dist/hosted-base-snapshot.d.ts +25 -0
- package/dist/hosted-base-snapshot.d.ts.map +1 -0
- package/dist/hosted-base-snapshot.js +278 -0
- package/dist/hosted-base-snapshot.js.map +1 -0
- package/dist/hosted-extension-declarations.d.ts +10 -0
- package/dist/hosted-extension-declarations.d.ts.map +1 -0
- package/dist/hosted-extension-declarations.js +272 -0
- package/dist/hosted-extension-declarations.js.map +1 -0
- package/dist/hosted-extension-isolation.d.ts +82 -0
- package/dist/hosted-extension-isolation.d.ts.map +1 -0
- package/dist/hosted-extension-isolation.js +322 -0
- package/dist/hosted-extension-isolation.js.map +1 -0
- package/dist/hosted-extension-manifest.d.ts +9 -0
- package/dist/hosted-extension-manifest.d.ts.map +1 -0
- package/dist/hosted-extension-manifest.js +235 -0
- package/dist/hosted-extension-manifest.js.map +1 -0
- package/dist/hosted-extension-protocol.d.ts +16 -0
- package/dist/hosted-extension-protocol.d.ts.map +1 -0
- package/dist/hosted-extension-protocol.js +224 -0
- package/dist/hosted-extension-protocol.js.map +1 -0
- package/dist/hosted-extension-runtime.d.ts +30 -0
- package/dist/hosted-extension-runtime.d.ts.map +1 -0
- package/dist/hosted-extension-runtime.js +167 -0
- package/dist/hosted-extension-runtime.js.map +1 -0
- package/dist/hosted-extension-sandbox-source.d.ts +9 -0
- package/dist/hosted-extension-sandbox-source.d.ts.map +1 -0
- package/dist/hosted-extension-sandbox-source.js +95 -0
- package/dist/hosted-extension-sandbox-source.js.map +1 -0
- package/dist/hosted-extension-sandbox.d.ts +39 -0
- package/dist/hosted-extension-sandbox.d.ts.map +1 -0
- package/dist/hosted-extension-sandbox.js +418 -0
- package/dist/hosted-extension-sandbox.js.map +1 -0
- package/dist/hosted-project.d.ts +3 -0
- package/dist/hosted-project.d.ts.map +1 -0
- package/dist/hosted-project.js +19 -0
- package/dist/hosted-project.js.map +1 -0
- package/dist/hosted-promise-safety.d.ts +12 -0
- package/dist/hosted-promise-safety.d.ts.map +1 -0
- package/dist/hosted-promise-safety.js +63 -0
- package/dist/hosted-promise-safety.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/intrinsic-array.d.ts +3 -0
- package/dist/intrinsic-array.d.ts.map +1 -0
- package/dist/intrinsic-array.js +14 -0
- package/dist/intrinsic-array.js.map +1 -0
- package/dist/journal-client.d.ts +3 -1
- package/dist/journal-client.d.ts.map +1 -1
- package/dist/journal-client.js +17 -2
- package/dist/journal-client.js.map +1 -1
- package/dist/journal-projection.d.ts +16 -0
- package/dist/journal-projection.d.ts.map +1 -0
- package/dist/journal-projection.js +108 -0
- package/dist/journal-projection.js.map +1 -0
- package/dist/json-value.d.ts +6 -1
- package/dist/json-value.d.ts.map +1 -1
- package/dist/json-value.js +155 -36
- package/dist/json-value.js.map +1 -1
- package/dist/llm-worker.d.ts +9 -0
- package/dist/llm-worker.d.ts.map +1 -1
- package/dist/llm-worker.js +16 -2
- package/dist/llm-worker.js.map +1 -1
- package/dist/local-agent.d.ts +1 -1
- package/dist/local-agent.d.ts.map +1 -1
- package/dist/local-agent.js +4 -3
- package/dist/local-agent.js.map +1 -1
- package/dist/named-gate-lowering.js +35 -5
- package/dist/named-gate-lowering.js.map +1 -1
- package/dist/named-gate-preflight.d.ts +27 -0
- package/dist/named-gate-preflight.d.ts.map +1 -0
- package/dist/named-gate-preflight.js +47 -0
- package/dist/named-gate-preflight.js.map +1 -0
- package/dist/named-gates.d.ts +1 -1
- package/dist/named-gates.d.ts.map +1 -1
- package/dist/named-gates.js +3 -0
- package/dist/named-gates.js.map +1 -1
- package/dist/observer-link.d.ts +7 -0
- package/dist/observer-link.d.ts.map +1 -1
- package/dist/observer-link.js +3 -1
- package/dist/observer-link.js.map +1 -1
- package/dist/plugin-store.d.ts +8 -2
- package/dist/plugin-store.d.ts.map +1 -1
- package/dist/plugin-store.js +233 -56
- package/dist/plugin-store.js.map +1 -1
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +7 -0
- package/dist/preflight.js.map +1 -1
- package/dist/protocol.d.ts +2 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/redact.d.ts +42 -0
- package/dist/redact.d.ts.map +1 -1
- package/dist/redact.js +128 -0
- package/dist/redact.js.map +1 -1
- package/dist/run-projection.d.ts +83 -0
- package/dist/run-projection.d.ts.map +1 -0
- package/dist/run-projection.js +199 -0
- package/dist/run-projection.js.map +1 -0
- package/dist/semver-range.d.ts.map +1 -1
- package/dist/semver-range.js +27 -15
- package/dist/semver-range.js.map +1 -1
- package/dist/shell-word.d.ts +19 -0
- package/dist/shell-word.d.ts.map +1 -0
- package/dist/shell-word.js +23 -0
- package/dist/shell-word.js.map +1 -0
- package/dist/spec.d.ts +52 -3
- package/dist/spec.d.ts.map +1 -1
- package/dist/spec.js.map +1 -1
- package/dist/step-fields.d.ts +1 -1
- package/dist/step-fields.js +1 -1
- package/dist/step-fields.js.map +1 -1
- package/dist/steps-green.d.ts +27 -0
- package/dist/steps-green.d.ts.map +1 -0
- package/dist/steps-green.js +164 -0
- package/dist/steps-green.js.map +1 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +39 -8
- package/dist/validate.js.map +1 -1
- package/dist/worker-lease.d.ts +8 -1
- package/dist/worker-lease.d.ts.map +1 -1
- package/dist/worker-lease.js +34 -4
- package/dist/worker-lease.js.map +1 -1
- package/dist/worker.d.ts +8 -0
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +17 -9
- package/dist/worker.js.map +1 -1
- package/package.json +3 -7
- package/src/agent-artifacts.ts +2 -10
- package/src/agent-cwd.ts +139 -0
- package/src/artifact-scan-policy.ts +51 -0
- package/src/authored-completion-record.ts +119 -0
- package/src/authored-completion.ts +203 -0
- package/src/authored-flow-error.ts +13 -1
- package/src/authored-flow-executor.ts +101 -59
- package/src/authored-human.ts +1 -4
- package/src/authored-node-entry.ts +4 -1
- package/src/authored-node-runner.ts +96 -22
- package/src/authored-root.ts +20 -2
- package/src/authored-step-output.ts +139 -42
- package/src/authored-verdict.ts +87 -0
- package/src/authored-worker-step.ts +60 -12
- package/src/bundle-extensions.ts +6 -5
- package/src/bundle.ts +52 -7
- package/src/canonical.ts +20 -6
- package/src/cli/check-worker-surface.ts +66 -0
- package/src/cli/check.ts +35 -4
- package/src/cli/cloud-format.ts +82 -0
- package/src/cli/cloud-live.ts +366 -0
- package/src/cli/cloud-read.ts +13 -282
- package/src/cli/cloud-refusal.ts +113 -0
- package/src/cli/cloud-status-view.ts +213 -0
- package/src/cli/direct-run.ts +19 -2
- package/src/cli/hn-monitor.ts +2 -1
- package/src/cli/local-agent-remedy.ts +160 -0
- package/src/cli/observer-session.ts +107 -0
- package/src/cli/run.ts +233 -28
- package/src/cli/status.ts +59 -3
- package/src/cli/step-evidence.ts +310 -0
- package/src/cli/step-failure.ts +57 -81
- package/src/cli-commands.ts +2 -0
- package/src/cli.ts +64 -44
- package/src/cloud-read.ts +25 -1
- package/src/cloud-run-record.ts +64 -0
- package/src/cloud-run.ts +5 -24
- package/src/communication/local.ts +2 -1
- package/src/communication/worker.ts +13 -5
- package/src/compile.ts +28 -6
- package/src/direct-input.ts +22 -1
- package/src/failure-kinds.ts +104 -2
- package/src/flow-extension-compat.ts +32 -7
- package/src/flow-extension-loader.ts +56 -21
- package/src/flow-requirements.ts +24 -9
- package/src/fs-descriptor.ts +127 -0
- package/src/gate-contract.ts +13 -1
- package/src/helper-preflight.ts +10 -3
- package/src/helper-reference.ts +130 -0
- package/src/hosted-base-snapshot.ts +351 -0
- package/src/hosted-extension-declarations.ts +387 -0
- package/src/hosted-extension-isolation.ts +457 -0
- package/src/hosted-extension-manifest.ts +249 -0
- package/src/hosted-extension-protocol.ts +262 -0
- package/src/hosted-extension-runtime.ts +266 -0
- package/src/hosted-extension-sandbox-source.ts +94 -0
- package/src/hosted-extension-sandbox.ts +489 -0
- package/src/hosted-project.ts +18 -0
- package/src/hosted-promise-safety.ts +68 -0
- package/src/index.ts +20 -0
- package/src/intrinsic-array.ts +14 -0
- package/src/journal-client.ts +19 -2
- package/src/journal-projection.ts +106 -0
- package/src/json-value.ts +184 -32
- package/src/llm-worker.ts +16 -2
- package/src/local-agent.ts +4 -2
- package/src/named-gate-lowering.ts +35 -5
- package/src/named-gate-preflight.ts +47 -0
- package/src/named-gates.ts +3 -0
- package/src/observer-link.ts +10 -1
- package/src/plugin-store.ts +323 -56
- package/src/preflight.ts +7 -0
- package/src/protocol.ts +2 -0
- package/src/redact.ts +111 -0
- package/src/run-projection.ts +247 -0
- package/src/semver-range.ts +39 -14
- package/src/shell-word.ts +24 -0
- package/src/spec.ts +54 -3
- package/src/step-fields.ts +1 -1
- package/src/steps-green.ts +168 -0
- package/src/validate.ts +35 -8
- package/src/worker-lease.ts +35 -5
- package/src/worker.ts +27 -11
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type CloudReadOptions } from './cloud-refusal.js';
|
|
2
|
+
import type { CliIo } from '../cli.js';
|
|
3
|
+
export interface CloudLiveOptions extends CloudReadOptions {
|
|
4
|
+
/** Milliseconds between polls. Injected by tests; 1..60000, as the waiter accepts. */
|
|
5
|
+
pollIntervalMs?: number;
|
|
6
|
+
/** Injected by tests so no suite sleeps; production uses the abortable sleep. */
|
|
7
|
+
sleep?: (ms: number, signal?: AbortSignal) => Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Redraw the hosted status page until the run is terminal, then leave the
|
|
11
|
+
* final page up and exit with the run's outcome.
|
|
12
|
+
*
|
|
13
|
+
* The detail and the step rows are two requests against two projections, so
|
|
14
|
+
* the page is a pair of reads and not an atomic snapshot: a step row can lag
|
|
15
|
+
* the header it is drawn under by one poll. That is a property of the API, and
|
|
16
|
+
* this view reports what each read said rather than reconciling them.
|
|
17
|
+
*/
|
|
18
|
+
export declare function runCloudStatusWatch(args: {
|
|
19
|
+
runId?: string;
|
|
20
|
+
json: boolean;
|
|
21
|
+
}, io: CliIo, options?: CloudLiveOptions): Promise<0 | 1 | 2>;
|
|
22
|
+
/**
|
|
23
|
+
* Append the hosted runner log until the run is terminal and its log is drained.
|
|
24
|
+
*
|
|
25
|
+
* The route serves the log from an offset, but this client does not page it:
|
|
26
|
+
* the offsets are byte counts and the content is a JavaScript string, and
|
|
27
|
+
* subtracting one from the other silently loses text the moment a log contains
|
|
28
|
+
* a non-ASCII character — which the runner's own transition lines do. Until
|
|
29
|
+
* the byte-range contract can be checked against the server, each poll reads
|
|
30
|
+
* the whole log and prints the part that is new, refusing outright if what it
|
|
31
|
+
* already showed is no longer a prefix of what Cloud serves. That costs a full
|
|
32
|
+
* read per poll and holds the log in memory; it cannot duplicate or drop a line.
|
|
33
|
+
*/
|
|
34
|
+
export declare function runCloudLogsFollow(args: {
|
|
35
|
+
runId: string;
|
|
36
|
+
step: string | undefined;
|
|
37
|
+
json: boolean;
|
|
38
|
+
}, io: CliIo, options?: CloudLiveOptions): Promise<0 | 1 | 2>;
|
|
39
|
+
//# sourceMappingURL=cloud-live.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-live.d.ts","sourceRoot":"","sources":["../../src/cli/cloud-live.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAsD,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG/G,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAMvC,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,sFAAsF;IACtF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iFAAiF;IACjF,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AA2CD;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,EACvC,EAAE,EAAE,KAAK,EACT,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CA+CpB;AAuGD;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,EAChE,EAAE,EAAE,KAAK,EACT,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAkGpB"}
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
// `flows status --cloud --watch` and `flows logs <run> --follow`: the two
|
|
2
|
+
// hosted reads that keep reading.
|
|
3
|
+
//
|
|
4
|
+
// The one-shot verbs (cli/cloud-read.ts) answer "what did that run do". These
|
|
5
|
+
// two answer "what is it doing", by asking again until the run is over. Three
|
|
6
|
+
// properties separate them from a loop around the one-shot reads:
|
|
7
|
+
//
|
|
8
|
+
// 1. **The exit code is the run's.** A finished page is not evidence that the
|
|
9
|
+
// run succeeded; `getCloudRunDetailLive` validates the same record
|
|
10
|
+
// `flows run --wait` blocks on, so `--watch` and `--follow` exit 0 only on
|
|
11
|
+
// an attested `completed`/`success`, 1 on an attested failure or a
|
|
12
|
+
// cancellation, and refuse a terminal record that attests neither.
|
|
13
|
+
// 2. **A frame is whole or absent.** The page is rendered, then the abort is
|
|
14
|
+
// checked, then the whole page leaves in one `io.stdout` call. A Ctrl-C
|
|
15
|
+
// mid-poll ends the command with a refusal and no half-drawn screen.
|
|
16
|
+
// 3. **Nothing is invented while waiting.** A failed poll leaves the previous
|
|
17
|
+
// page and the consumed log exactly where they were; it never clears the
|
|
18
|
+
// screen to show an error, and never re-prints a line it has shown.
|
|
19
|
+
//
|
|
20
|
+
// Cancellation is the caller's: `runCli` hands these functions the signal it
|
|
21
|
+
// owns for the verb's duration, and nothing here installs a process handler.
|
|
22
|
+
// Aborting stops the observation, not the hosted run — the refusal says so.
|
|
23
|
+
import { canonicalize } from '../canonical.js';
|
|
24
|
+
import { getCloudRunDetailLive, getCloudRunLog, getCloudRunSteps, } from '../cloud-read.js';
|
|
25
|
+
import { isCloudRunActive } from '../cloud-run-record.js';
|
|
26
|
+
import { endsWithOpenCredentialHeader, openCredentialStart, openSecretStart, redact } from '../redact.js';
|
|
27
|
+
import { thousands } from './cloud-format.js';
|
|
28
|
+
import { fail, isTransientRead, refusalFor, RUN_ID_REQUIRED } from './cloud-refusal.js';
|
|
29
|
+
import { renderCloudStatus, scrubRun, scrubSteps } from './cloud-status-view.js';
|
|
30
|
+
import { sleepInterruptible } from './interruptible-sleep.js';
|
|
31
|
+
/** The cadence `waitForCloudFlowRun` polls at; not a user flag on either verb. */
|
|
32
|
+
const DEFAULT_POLL_INTERVAL_MS = 2_000;
|
|
33
|
+
const MAX_BACKOFF_MS = 30_000;
|
|
34
|
+
/** Clears the screen only for a terminal; a redirected page must stay text. */
|
|
35
|
+
function clearSequence(io) {
|
|
36
|
+
return io.tty === true ? '\u001b[2J\u001b[H' : '';
|
|
37
|
+
}
|
|
38
|
+
/** The same delay schedule as `waitForCloudFlowRun`: ×2 per failure, capped. */
|
|
39
|
+
function delayFor(failures, interval) {
|
|
40
|
+
return failures === 0 ? interval : Math.min(interval * 2 ** (failures - 1), MAX_BACKOFF_MS);
|
|
41
|
+
}
|
|
42
|
+
/** The hosted `flows run --wait` mapping: only an attested success is 0. */
|
|
43
|
+
function exitFor(state) {
|
|
44
|
+
return state.status === 'completed' ? 0 : 1;
|
|
45
|
+
}
|
|
46
|
+
function aborted(verb, runId, json, io) {
|
|
47
|
+
fail({
|
|
48
|
+
code: 'observation_aborted', exit: 1,
|
|
49
|
+
message: `Stopped ${verb} run ${runId}; the hosted run has not been cancelled.`,
|
|
50
|
+
}, json, io);
|
|
51
|
+
return 1;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Has the caller cancelled?
|
|
55
|
+
*
|
|
56
|
+
* A function rather than `signal?.aborted` at each site on purpose: `aborted`
|
|
57
|
+
* is a readonly property, so an inline check narrows the signal's type for the
|
|
58
|
+
* rest of the block and the compiler then calls every later check dead — which
|
|
59
|
+
* is exactly backwards for a value that changes under an await.
|
|
60
|
+
*/
|
|
61
|
+
function isAborted(signal) {
|
|
62
|
+
return signal !== undefined && signal.aborted;
|
|
63
|
+
}
|
|
64
|
+
function invalidInterval(interval) {
|
|
65
|
+
return !Number.isSafeInteger(interval) || interval < 1 || interval > 60_000;
|
|
66
|
+
}
|
|
67
|
+
// -------------------------------------------------- flows status --cloud --watch
|
|
68
|
+
/**
|
|
69
|
+
* Redraw the hosted status page until the run is terminal, then leave the
|
|
70
|
+
* final page up and exit with the run's outcome.
|
|
71
|
+
*
|
|
72
|
+
* The detail and the step rows are two requests against two projections, so
|
|
73
|
+
* the page is a pair of reads and not an atomic snapshot: a step row can lag
|
|
74
|
+
* the header it is drawn under by one poll. That is a property of the API, and
|
|
75
|
+
* this view reports what each read said rather than reconciling them.
|
|
76
|
+
*/
|
|
77
|
+
export async function runCloudStatusWatch(args, io, options = {}) {
|
|
78
|
+
const env = options.env ?? process.env;
|
|
79
|
+
const clock = options.now ?? Date.now;
|
|
80
|
+
const signal = options.signal;
|
|
81
|
+
const interval = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
82
|
+
const sleep = options.sleep ?? sleepInterruptible;
|
|
83
|
+
if (args.runId === undefined || args.runId.length === 0)
|
|
84
|
+
return fail(RUN_ID_REQUIRED, args.json, io);
|
|
85
|
+
const runId = args.runId;
|
|
86
|
+
if (invalidInterval(interval)) {
|
|
87
|
+
return fail({ code: 'cloud_configuration', exit: 2, message: 'pollIntervalMs must be an integer from 1 to 60000.' }, args.json, io);
|
|
88
|
+
}
|
|
89
|
+
let failures = 0;
|
|
90
|
+
for (;;) {
|
|
91
|
+
if (isAborted(signal))
|
|
92
|
+
return aborted('watching', runId, args.json, io);
|
|
93
|
+
let live;
|
|
94
|
+
let steps;
|
|
95
|
+
try {
|
|
96
|
+
live = await getCloudRunDetailLive(runId, options);
|
|
97
|
+
if (isAborted(signal))
|
|
98
|
+
return aborted('watching', runId, args.json, io);
|
|
99
|
+
steps = await getCloudRunSteps(runId, options);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
if (isAborted(signal))
|
|
103
|
+
return aborted('watching', runId, args.json, io);
|
|
104
|
+
if (!isTransientRead(error))
|
|
105
|
+
return fail(refusalFor(error, `run ${runId}`, env), args.json, io);
|
|
106
|
+
// The previous page stays exactly as it was: a poll that did not
|
|
107
|
+
// complete is not news about the run.
|
|
108
|
+
failures = Math.min(failures + 1, 16);
|
|
109
|
+
await sleep(delayFor(failures, interval), signal);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
failures = 0;
|
|
113
|
+
const run = scrubRun(live.detail, env);
|
|
114
|
+
const scrubbed = scrubSteps(steps, env);
|
|
115
|
+
const terminal = !isCloudRunActive(live.state.status);
|
|
116
|
+
// Rendered before the abort check and emitted after it, in one call: an
|
|
117
|
+
// interrupt between two lines of a frame would leave a torn page.
|
|
118
|
+
const page = args.json ? '' : `${clearSequence(io)}${renderCloudStatus(run, scrubbed, clock()).join('\n')}`;
|
|
119
|
+
if (isAborted(signal))
|
|
120
|
+
return aborted('watching', runId, args.json, io);
|
|
121
|
+
if (!args.json)
|
|
122
|
+
io.stdout(page);
|
|
123
|
+
if (terminal) {
|
|
124
|
+
if (args.json)
|
|
125
|
+
io.stdout(canonicalize({ v: 1, ok: true, run, steps: scrubbed, now_ms: clock() }));
|
|
126
|
+
return exitFor(live.state);
|
|
127
|
+
}
|
|
128
|
+
await sleep(interval, signal);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Print `text` as lines.
|
|
133
|
+
*
|
|
134
|
+
* Splitting is on `\n` only, and one trailing `\r` per line is dropped: a
|
|
135
|
+
* CRLF log printed with its carriage returns intact makes a terminal overwrite
|
|
136
|
+
* each line it just drew. A final newline ends the last line rather than
|
|
137
|
+
* starting an empty one. Blank lines and repeated identical lines are
|
|
138
|
+
* preserved — they are the log.
|
|
139
|
+
*/
|
|
140
|
+
function writeLines(text, state, io) {
|
|
141
|
+
const lines = text.split('\n');
|
|
142
|
+
if (lines.at(-1) === '')
|
|
143
|
+
lines.pop();
|
|
144
|
+
for (const line of lines) {
|
|
145
|
+
io.stdout(line.replace(/\r$/u, ''));
|
|
146
|
+
state.emitted = true;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/** The last line boundary at or before `at`: 0, or the index after a newline. */
|
|
150
|
+
function lineBoundaryAtOrBefore(text, at) {
|
|
151
|
+
return at <= 0 ? 0 : text.lastIndexOf('\n', at - 1) + 1;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Release every line the log has settled on, redacted as one block.
|
|
155
|
+
*
|
|
156
|
+
* Four things hold a line back. `openSecretStart` marks where a secret value
|
|
157
|
+
* has begun and not ended, so nothing at or past it can be shown until the
|
|
158
|
+
* next poll completes it. `openCredentialStart` marks a trailing credential
|
|
159
|
+
* header — `authorization:`, `Bearer`, a callback-token name, or an
|
|
160
|
+
* unterminated credential JSON field — whose value may only arrive on a later
|
|
161
|
+
* poll; releasing the header first would leave the value without the context
|
|
162
|
+
* the redactor needs. A block is never ended on a bare credential header even
|
|
163
|
+
* when more text follows, because the redactor folds the header's newline
|
|
164
|
+
* into its own match — the block-prefix check cannot see that the header's
|
|
165
|
+
* value lives on the next line. And a candidate block is released only when
|
|
166
|
+
* redacting it alone gives the same text as the front of the whole redacted
|
|
167
|
+
* remainder: if the cut fell inside something the redactor would have caught —
|
|
168
|
+
* the second line of a private key — the two disagree, and the cut moves back
|
|
169
|
+
* a line and is tried again.
|
|
170
|
+
*
|
|
171
|
+
* A poll that can release nothing prints nothing; the bytes are not lost, they
|
|
172
|
+
* are held until a later poll or the drain flush can redact them whole.
|
|
173
|
+
*/
|
|
174
|
+
function releaseLines(state, io, env) {
|
|
175
|
+
const raw = state.consumed;
|
|
176
|
+
if (state.released >= raw.length)
|
|
177
|
+
return;
|
|
178
|
+
const remainder = redact(raw.slice(state.released), env);
|
|
179
|
+
let cut = lineBoundaryAtOrBefore(raw, Math.min(openSecretStart(raw, env), openCredentialStart(raw)));
|
|
180
|
+
while (cut > state.released) {
|
|
181
|
+
if (endsWithOpenCredentialHeader(raw.slice(state.released, cut))) {
|
|
182
|
+
// A bare credential header as the released block's last line strands
|
|
183
|
+
// the value that starts on the next line — redact needs them together.
|
|
184
|
+
// Shrink until the header is inside the held remainder; it releases
|
|
185
|
+
// with its value line once that line is complete.
|
|
186
|
+
cut = lineBoundaryAtOrBefore(raw, cut - 1);
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
const block = redact(raw.slice(state.released, cut), env);
|
|
190
|
+
if (remainder.startsWith(block)) {
|
|
191
|
+
writeLines(block, state, io);
|
|
192
|
+
state.released = cut;
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
cut = lineBoundaryAtOrBefore(raw, cut - 1);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Has Cloud finished publishing this log?
|
|
200
|
+
*
|
|
201
|
+
* Three facts, all required. The run being over does not mean the last bytes
|
|
202
|
+
* have been written; `done` alone does not mean the run is over (the route can
|
|
203
|
+
* report a completed *upload* of a log the run is still adding to); and a
|
|
204
|
+
* `done` envelope that carries fewer bytes than it advertises has not served
|
|
205
|
+
* the tail. Stopping on any one of them alone would truncate the output, which
|
|
206
|
+
* is the one thing a follow must not do.
|
|
207
|
+
*/
|
|
208
|
+
function logDrained(log, terminal, content) {
|
|
209
|
+
return terminal && log.done && Buffer.byteLength(content, 'utf8') >= log.total_size;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Append the hosted runner log until the run is terminal and its log is drained.
|
|
213
|
+
*
|
|
214
|
+
* The route serves the log from an offset, but this client does not page it:
|
|
215
|
+
* the offsets are byte counts and the content is a JavaScript string, and
|
|
216
|
+
* subtracting one from the other silently loses text the moment a log contains
|
|
217
|
+
* a non-ASCII character — which the runner's own transition lines do. Until
|
|
218
|
+
* the byte-range contract can be checked against the server, each poll reads
|
|
219
|
+
* the whole log and prints the part that is new, refusing outright if what it
|
|
220
|
+
* already showed is no longer a prefix of what Cloud serves. That costs a full
|
|
221
|
+
* read per poll and holds the log in memory; it cannot duplicate or drop a line.
|
|
222
|
+
*/
|
|
223
|
+
export async function runCloudLogsFollow(args, io, options = {}) {
|
|
224
|
+
const env = options.env ?? process.env;
|
|
225
|
+
const signal = options.signal;
|
|
226
|
+
const interval = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
227
|
+
const sleep = options.sleep ?? sleepInterruptible;
|
|
228
|
+
const runId = args.runId;
|
|
229
|
+
// Refused before any request: a step transcript is not an append-only stream
|
|
230
|
+
// this verb can follow. A retry replaces it, and the rendered form is built
|
|
231
|
+
// from the whole JSONL — attempt markers, session header, result footer —
|
|
232
|
+
// rather than a line at a time.
|
|
233
|
+
if (args.step !== undefined) {
|
|
234
|
+
return fail({
|
|
235
|
+
code: 'invalid_invocation', exit: 2,
|
|
236
|
+
message: '`flows logs --follow` follows the runner log, which is append-only; it cannot follow a step '
|
|
237
|
+
+ 'transcript. Follow the run with `flows logs <run-id> --follow`, or read the step transcript once '
|
|
238
|
+
+ 'with `flows logs <run-id> --step <name>`.',
|
|
239
|
+
}, args.json, io);
|
|
240
|
+
}
|
|
241
|
+
if (invalidInterval(interval)) {
|
|
242
|
+
return fail({ code: 'cloud_configuration', exit: 2, message: 'pollIntervalMs must be an integer from 1 to 60000.' }, args.json, io);
|
|
243
|
+
}
|
|
244
|
+
const state = { consumed: '', released: 0, emitted: false };
|
|
245
|
+
let header = false;
|
|
246
|
+
let failures = 0;
|
|
247
|
+
// A snapshot that satisfies every drain fact can still predate terminality:
|
|
248
|
+
// `done` can describe an upload finished while the run kept writing, and the
|
|
249
|
+
// log route can keep serving that snapshot past the terminal transition.
|
|
250
|
+
// The read that ends the follow has to postdate the terminal observation —
|
|
251
|
+
// which on the first sighting it cannot — so a terminal run always gets one
|
|
252
|
+
// more poll before its log counts as drained.
|
|
253
|
+
let terminalObserved = false;
|
|
254
|
+
for (;;) {
|
|
255
|
+
if (isAborted(signal))
|
|
256
|
+
return aborted('following', runId, args.json, io);
|
|
257
|
+
let outcome;
|
|
258
|
+
let log;
|
|
259
|
+
try {
|
|
260
|
+
// The run record first: a log read that follows a terminal status can
|
|
261
|
+
// only be missing bytes Cloud had not published yet, never bytes written
|
|
262
|
+
// after the check.
|
|
263
|
+
const live = await getCloudRunDetailLive(runId, options);
|
|
264
|
+
if (isAborted(signal))
|
|
265
|
+
return aborted('following', runId, args.json, io);
|
|
266
|
+
log = await getCloudRunLog(runId, undefined, options);
|
|
267
|
+
outcome = live.state;
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
if (isAborted(signal))
|
|
271
|
+
return aborted('following', runId, args.json, io);
|
|
272
|
+
if (!isTransientRead(error))
|
|
273
|
+
return fail(refusalFor(error, `run ${runId}`, env), args.json, io);
|
|
274
|
+
failures = Math.min(failures + 1, 16);
|
|
275
|
+
await sleep(delayFor(failures, interval), signal);
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
failures = 0;
|
|
279
|
+
if (isAborted(signal))
|
|
280
|
+
return aborted('following', runId, args.json, io);
|
|
281
|
+
if (!log.content.startsWith(state.consumed)) {
|
|
282
|
+
return fail({
|
|
283
|
+
code: 'cloud_log_rewritten', exit: 1,
|
|
284
|
+
message: `Cloud's runner log for run ${runId} no longer begins with the ${thousands(state.consumed.length)} `
|
|
285
|
+
+ 'characters already shown, so following it would skip or repeat output. Read it whole with '
|
|
286
|
+
+ `\`flows logs ${runId}\`.`,
|
|
287
|
+
}, args.json, io);
|
|
288
|
+
}
|
|
289
|
+
state.consumed = log.content;
|
|
290
|
+
const terminal = !isCloudRunActive(outcome.status);
|
|
291
|
+
const drained = terminalObserved && logDrained(log, terminal, log.content);
|
|
292
|
+
terminalObserved ||= terminal;
|
|
293
|
+
if (!args.json) {
|
|
294
|
+
if (!header) {
|
|
295
|
+
io.stdout(`LOG ${runId} runner following ${thousands(log.total_size)} bytes so far`);
|
|
296
|
+
header = true;
|
|
297
|
+
}
|
|
298
|
+
releaseLines(state, io, env);
|
|
299
|
+
}
|
|
300
|
+
if (!drained) {
|
|
301
|
+
await sleep(interval, signal);
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
// Drained: the last line may have no newline, and this is the only moment
|
|
305
|
+
// at which printing it cannot cut a line in half.
|
|
306
|
+
if (args.json) {
|
|
307
|
+
io.stdout(canonicalize({
|
|
308
|
+
v: 1, ok: true, run_id: runId, step: null,
|
|
309
|
+
bytes: log.offset, total_bytes: log.total_size, done: log.done,
|
|
310
|
+
content: redact(log.content, env),
|
|
311
|
+
}));
|
|
312
|
+
return exitFor(outcome);
|
|
313
|
+
}
|
|
314
|
+
if (state.released < state.consumed.length) {
|
|
315
|
+
writeLines(redact(state.consumed.slice(state.released), env), state, io);
|
|
316
|
+
state.released = state.consumed.length;
|
|
317
|
+
}
|
|
318
|
+
if (!state.emitted)
|
|
319
|
+
io.stdout(' (empty)');
|
|
320
|
+
io.stdout(`${outcome.status.toUpperCase()} ${runId} completionReason: `
|
|
321
|
+
+ `${'completionReason' in outcome ? outcome.completionReason : 'unavailable'}`);
|
|
322
|
+
return exitFor(outcome);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
//# sourceMappingURL=cloud-live.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-live.js","sourceRoot":"","sources":["../../src/cli/cloud-live.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/cloud-read.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type CloudReadOptions } from './cloud-refusal.js';
|
|
2
2
|
import type { CliIo } from '../cli.js';
|
|
3
3
|
export interface RunsArgs {
|
|
4
4
|
command: 'runs';
|
|
@@ -11,17 +11,13 @@ export interface LogsArgs {
|
|
|
11
11
|
step: string | undefined;
|
|
12
12
|
raw: boolean;
|
|
13
13
|
json: boolean;
|
|
14
|
+
/** `--follow`: append new runner output until the run is terminal (cli/cloud-live.ts). */
|
|
15
|
+
follow: boolean;
|
|
14
16
|
}
|
|
15
17
|
/** Enough runs to recognise the one you mean; `--limit` raises it. */
|
|
16
18
|
export declare const DEFAULT_RUN_LIMIT = 20;
|
|
17
|
-
/** Injected by tests; production takes the ambient clock and environment. */
|
|
18
|
-
export interface CloudReadOptions extends CloudConnectionOptions {
|
|
19
|
-
env?: NodeJS.ProcessEnv;
|
|
20
|
-
now?: () => number;
|
|
21
|
-
}
|
|
22
19
|
export declare function parseRunsArgs(args: readonly string[]): RunsArgs | undefined;
|
|
23
20
|
export declare function parseLogsArgs(args: readonly string[]): LogsArgs | undefined;
|
|
24
|
-
export declare function errorLines(text: string, indent: string): string[];
|
|
25
21
|
export declare function runCloudRunsCli(args: RunsArgs, io: CliIo, options?: CloudReadOptions): Promise<0 | 1 | 2>;
|
|
26
22
|
export declare function runCloudLogsCli(args: LogsArgs, io: CliIo, options?: CloudReadOptions): Promise<0 | 1 | 2>;
|
|
27
23
|
export declare function runCloudStatusCli(args: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-read.d.ts","sourceRoot":"","sources":["../../src/cli/cloud-read.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cloud-read.d.ts","sourceRoot":"","sources":["../../src/cli/cloud-read.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAqC,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE9F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,0FAA0F;IAC1F,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,sEAAsE;AACtE,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,GAAG,SAAS,CAiB3E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,GAAG,SAAS,CA6B3E;AAID,wBAAsB,eAAe,CACnC,IAAI,EAAE,QAAQ,EACd,EAAE,EAAE,KAAK,EACT,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAyCpB;AAID,wBAAsB,eAAe,CACnC,IAAI,EAAE,QAAQ,EACd,EAAE,EAAE,KAAK,EACT,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAsEpB;AAID,wBAAsB,iBAAiB,CACrC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,EACvC,EAAE,EAAE,KAAK,EACT,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAoBpB"}
|