@relayflows/sdk 2.0.16 → 2.0.18
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/authored-flow-error.d.ts +21 -1
- package/dist/authored-flow-error.d.ts.map +1 -1
- package/dist/authored-flow-error.js +14 -0
- package/dist/authored-flow-error.js.map +1 -1
- package/dist/authored-flow-executor.d.ts.map +1 -1
- package/dist/authored-flow-executor.js +133 -3
- package/dist/authored-flow-executor.js.map +1 -1
- package/dist/authored-flow-lifecycle.d.ts +10 -0
- package/dist/authored-flow-lifecycle.d.ts.map +1 -1
- package/dist/authored-flow-lifecycle.js +7 -0
- package/dist/authored-flow-lifecycle.js.map +1 -1
- package/dist/authored-flow-operation.d.ts +11 -0
- package/dist/authored-flow-operation.d.ts.map +1 -1
- package/dist/authored-flow-operation.js +32 -7
- package/dist/authored-flow-operation.js.map +1 -1
- package/dist/authored-human.d.ts +49 -0
- package/dist/authored-human.d.ts.map +1 -0
- package/dist/authored-human.js +97 -0
- package/dist/authored-human.js.map +1 -0
- package/dist/authored-node-entry.js +3 -2
- package/dist/authored-node-entry.js.map +1 -1
- package/dist/authored-node-runner.d.ts.map +1 -1
- package/dist/authored-node-runner.js +52 -18
- package/dist/authored-node-runner.js.map +1 -1
- package/dist/authored-root.d.ts.map +1 -1
- package/dist/authored-root.js +29 -1
- package/dist/authored-root.js.map +1 -1
- package/dist/authored-worker-step.d.ts.map +1 -1
- package/dist/authored-worker-step.js +14 -25
- package/dist/authored-worker-step.js.map +1 -1
- package/dist/cli/answer.d.ts +17 -0
- package/dist/cli/answer.d.ts.map +1 -0
- package/dist/cli/answer.js +89 -0
- package/dist/cli/answer.js.map +1 -0
- package/dist/cli/build.js +1 -1
- package/dist/cli/build.js.map +1 -1
- package/dist/cli/check-triggers.d.ts.map +1 -1
- package/dist/cli/check-triggers.js +12 -0
- package/dist/cli/check-triggers.js.map +1 -1
- package/dist/cli/check.d.ts +25 -0
- package/dist/cli/check.d.ts.map +1 -1
- package/dist/cli/check.js +14 -2
- package/dist/cli/check.js.map +1 -1
- package/dist/cli/cloud-connect-cli.d.ts +54 -0
- package/dist/cli/cloud-connect-cli.d.ts.map +1 -0
- package/dist/cli/cloud-connect-cli.js +109 -0
- package/dist/cli/cloud-connect-cli.js.map +1 -0
- package/dist/cli/cloud-deploy.d.ts +3 -1
- package/dist/cli/cloud-deploy.d.ts.map +1 -1
- package/dist/cli/cloud-deploy.js +44 -6
- package/dist/cli/cloud-deploy.js.map +1 -1
- package/dist/cli/cloud-run.d.ts +2 -1
- package/dist/cli/cloud-run.d.ts.map +1 -1
- package/dist/cli/cloud-run.js +17 -3
- package/dist/cli/cloud-run.js.map +1 -1
- package/dist/cli/cloud-schedule.d.ts +31 -0
- package/dist/cli/cloud-schedule.d.ts.map +1 -0
- package/dist/cli/cloud-schedule.js +156 -0
- package/dist/cli/cloud-schedule.js.map +1 -0
- package/dist/cli/direct-run.d.ts.map +1 -1
- package/dist/cli/direct-run.js +6 -2
- package/dist/cli/direct-run.js.map +1 -1
- package/dist/cli/run.d.ts +22 -2
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +39 -4
- package/dist/cli/run.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +148 -8
- package/dist/cli.js.map +1 -1
- package/dist/cloud-connect.d.ts +52 -0
- package/dist/cloud-connect.d.ts.map +1 -0
- package/dist/cloud-connect.js +138 -0
- package/dist/cloud-connect.js.map +1 -0
- package/dist/cloud-deploy.d.ts +19 -1
- package/dist/cloud-deploy.d.ts.map +1 -1
- package/dist/cloud-deploy.js +52 -2
- package/dist/cloud-deploy.js.map +1 -1
- package/dist/cloud-http.d.ts +17 -2
- package/dist/cloud-http.d.ts.map +1 -1
- package/dist/cloud-http.js +44 -8
- package/dist/cloud-http.js.map +1 -1
- package/dist/cloud-run.d.ts +30 -0
- package/dist/cloud-run.d.ts.map +1 -1
- package/dist/cloud-run.js +70 -27
- package/dist/cloud-run.js.map +1 -1
- package/dist/cloud-schedule.d.ts +55 -0
- package/dist/cloud-schedule.d.ts.map +1 -0
- package/dist/cloud-schedule.js +146 -0
- package/dist/cloud-schedule.js.map +1 -0
- package/dist/failure-kinds.d.ts +3 -3
- package/dist/failure-kinds.d.ts.map +1 -1
- package/dist/failure-kinds.js +4 -0
- package/dist/failure-kinds.js.map +1 -1
- package/dist/flow-requirements.d.ts +68 -0
- package/dist/flow-requirements.d.ts.map +1 -0
- package/dist/flow-requirements.js +152 -0
- package/dist/flow-requirements.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/journal-client.d.ts +11 -0
- package/dist/journal-client.d.ts.map +1 -1
- package/dist/journal-client.js +13 -0
- package/dist/journal-client.js.map +1 -1
- package/dist/named-gate-lowering.js +9 -0
- package/dist/named-gate-lowering.js.map +1 -1
- package/dist/named-gates.d.ts +1 -1
- package/dist/named-gates.d.ts.map +1 -1
- package/dist/named-gates.js +11 -1
- package/dist/named-gates.js.map +1 -1
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +155 -9
- package/dist/preflight.js.map +1 -1
- package/dist/progress.d.ts +2 -1
- package/dist/progress.d.ts.map +1 -1
- package/dist/progress.js +9 -3
- package/dist/progress.js.map +1 -1
- package/dist/protocol.d.ts +25 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/schedule-trigger.d.ts +35 -0
- package/dist/schedule-trigger.d.ts.map +1 -0
- package/dist/schedule-trigger.js +53 -0
- package/dist/schedule-trigger.js.map +1 -0
- package/dist/spec.d.ts +11 -1
- package/dist/spec.d.ts.map +1 -1
- package/dist/spec.js.map +1 -1
- package/dist/trigger-executor.js +1 -1
- package/dist/trigger-executor.js.map +1 -1
- package/dist/validate.js +1 -1
- package/dist/validate.js.map +1 -1
- package/dist/worker-cli.d.ts +10 -0
- package/dist/worker-cli.d.ts.map +1 -1
- package/dist/worker-cli.js +51 -22
- package/dist/worker-cli.js.map +1 -1
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +9 -0
- package/dist/worker.js.map +1 -1
- package/dist/wrapper-session.d.ts +3 -1
- package/dist/wrapper-session.d.ts.map +1 -1
- package/dist/wrapper-session.js +6 -3
- package/dist/wrapper-session.js.map +1 -1
- package/package.json +3 -3
- package/src/authored-flow-error.ts +30 -0
- package/src/authored-flow-executor.ts +141 -2
- package/src/authored-flow-lifecycle.ts +7 -0
- package/src/authored-flow-operation.ts +35 -10
- package/src/authored-human.ts +150 -0
- package/src/authored-node-entry.ts +3 -2
- package/src/authored-node-runner.ts +55 -18
- package/src/authored-root.ts +28 -1
- package/src/authored-worker-step.ts +15 -26
- package/src/cli/answer.ts +98 -0
- package/src/cli/build.ts +1 -1
- package/src/cli/check-triggers.ts +11 -0
- package/src/cli/check.ts +39 -2
- package/src/cli/cloud-connect-cli.ts +130 -0
- package/src/cli/cloud-deploy.ts +40 -6
- package/src/cli/cloud-run.ts +16 -4
- package/src/cli/cloud-schedule.ts +160 -0
- package/src/cli/direct-run.ts +6 -1
- package/src/cli/run.ts +53 -5
- package/src/cli.ts +134 -9
- package/src/cloud-connect.ts +187 -0
- package/src/cloud-deploy.ts +69 -3
- package/src/cloud-http.ts +52 -8
- package/src/cloud-run.ts +99 -26
- package/src/cloud-schedule.ts +175 -0
- package/src/failure-kinds.ts +4 -0
- package/src/flow-requirements.ts +201 -0
- package/src/index.ts +14 -0
- package/src/journal-client.ts +20 -0
- package/src/named-gate-lowering.ts +9 -0
- package/src/named-gates.ts +11 -1
- package/src/preflight.ts +132 -9
- package/src/progress.ts +11 -4
- package/src/protocol.ts +23 -0
- package/src/schedule-trigger.ts +73 -0
- package/src/spec.ts +12 -1
- package/src/trigger-executor.ts +1 -1
- package/src/validate.ts +1 -1
- package/src/worker-cli.ts +41 -0
- package/src/worker.ts +9 -0
- package/src/wrapper-session.ts +5 -1
package/dist/cloud-http.js
CHANGED
|
@@ -4,10 +4,12 @@ import { join } from 'node:path';
|
|
|
4
4
|
export class CloudFlowError extends Error {
|
|
5
5
|
code;
|
|
6
6
|
status;
|
|
7
|
-
|
|
7
|
+
refusal;
|
|
8
|
+
constructor(code, message, status, refusal) {
|
|
8
9
|
super(message);
|
|
9
10
|
this.code = code;
|
|
10
11
|
this.status = status;
|
|
12
|
+
this.refusal = refusal;
|
|
11
13
|
this.name = 'CloudFlowError';
|
|
12
14
|
}
|
|
13
15
|
}
|
|
@@ -124,10 +126,21 @@ export async function cloudFetch(path, options, init) {
|
|
|
124
126
|
}
|
|
125
127
|
if (!response.ok) {
|
|
126
128
|
// Do not echo server response bodies: they may contain credentials or source.
|
|
127
|
-
|
|
129
|
+
// Reading the body is itself a transport step: a cancellation or timeout
|
|
130
|
+
// there keeps its own classification instead of becoming an http_error.
|
|
131
|
+
let refusal;
|
|
132
|
+
if (init.detail) {
|
|
133
|
+
try {
|
|
134
|
+
refusal = await structuredRefusal(response);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
options.signal?.throwIfAborted();
|
|
138
|
+
throw transportError(deadline.aborted ? deadline.reason : error);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
128
141
|
throw new CloudFlowError('http_error', refusal === undefined
|
|
129
142
|
? `Cloud request failed with HTTP ${response.status}.`
|
|
130
|
-
: `Cloud refused (${refusal.code}): ${refusal.error}`, response.status);
|
|
143
|
+
: `Cloud refused (${refusal.code}): ${refusal.error}`, response.status, refusal);
|
|
131
144
|
}
|
|
132
145
|
try {
|
|
133
146
|
return await response.json();
|
|
@@ -139,19 +152,42 @@ export async function cloudFetch(path, options, init) {
|
|
|
139
152
|
throw new CloudFlowError('invalid_response', 'Cloud returned a non-JSON response.');
|
|
140
153
|
}
|
|
141
154
|
}
|
|
155
|
+
const REFUSAL_CODE = /^[a-z0-9_]{1,64}$/u;
|
|
156
|
+
/**
|
|
157
|
+
* Routes answer either `{ code, error }` or a bare `{ error: "<code>" }`;
|
|
158
|
+
* both are read, and an optional `expected`/`received` pair is reduced to
|
|
159
|
+
* package name and version. Nothing else in the body is looked at.
|
|
160
|
+
*/
|
|
142
161
|
async function structuredRefusal(response) {
|
|
143
162
|
let body;
|
|
144
163
|
try {
|
|
145
164
|
body = await response.json();
|
|
146
165
|
}
|
|
147
|
-
catch {
|
|
148
|
-
|
|
166
|
+
catch (error) {
|
|
167
|
+
// Only a body that is not JSON is "no structured refusal"; an aborted or
|
|
168
|
+
// timed-out read is a transport failure and propagates.
|
|
169
|
+
if (error instanceof SyntaxError)
|
|
170
|
+
return undefined;
|
|
171
|
+
throw error;
|
|
149
172
|
}
|
|
150
|
-
if (!isCloudRecord(body) || typeof body.
|
|
173
|
+
if (!isCloudRecord(body) || typeof body.error !== 'string' || body.error.length > 500)
|
|
151
174
|
return undefined;
|
|
152
|
-
|
|
175
|
+
const code = typeof body.code === 'string' ? body.code : body.error;
|
|
176
|
+
if (!REFUSAL_CODE.test(code))
|
|
153
177
|
return undefined;
|
|
154
|
-
|
|
178
|
+
const versionOnly = (value) => {
|
|
179
|
+
if (!isCloudRecord(value))
|
|
180
|
+
return undefined;
|
|
181
|
+
const out = {};
|
|
182
|
+
if (typeof value.packageName === 'string' && value.packageName.length <= 100)
|
|
183
|
+
out.packageName = value.packageName;
|
|
184
|
+
if (typeof value.version === 'string' && /^[0-9A-Za-z.+-]{1,64}$/u.test(value.version))
|
|
185
|
+
out.version = value.version;
|
|
186
|
+
return out;
|
|
187
|
+
};
|
|
188
|
+
const expected = versionOnly(body.expected);
|
|
189
|
+
const received = versionOnly(body.received);
|
|
190
|
+
return { code, error: body.error, ...(expected ? { expected } : {}), ...(received ? { received } : {}) };
|
|
155
191
|
}
|
|
156
192
|
// Defensive path-segment constraint; accepting a new server ID format needs an SDK change.
|
|
157
193
|
export function cloudRunId(value) {
|
package/dist/cloud-http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-http.js","sourceRoot":"","sources":["../src/cloud-http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cloud-http.js","sourceRoot":"","sources":["../src/cloud-http.ts"],"names":[],"mappings":"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"}
|
package/dist/cloud-run.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ScheduleTriggerSource } from '@relayflows/surface';
|
|
1
2
|
import type { RunCompletionReason } from './protocol.js';
|
|
2
3
|
import type { FlowSpec } from './spec.js';
|
|
3
4
|
import { type JsonValue } from './json-value.js';
|
|
@@ -49,6 +50,8 @@ export interface CloudAuthoredAuthority {
|
|
|
49
50
|
readonly byteLength: number;
|
|
50
51
|
readonly surface: SurfaceModuleAuthority;
|
|
51
52
|
}
|
|
53
|
+
/** The request-body fields a submission contributes; identical for a run and a schedule. */
|
|
54
|
+
export declare function cloudSubmissionBody(submission: CloudSubmission): Record<string, unknown>;
|
|
52
55
|
export type CloudRunState = {
|
|
53
56
|
runId: string;
|
|
54
57
|
status: 'pending' | 'launching' | 'running';
|
|
@@ -57,6 +60,33 @@ export type CloudRunState = {
|
|
|
57
60
|
status: 'completed' | 'failed' | 'cancelled';
|
|
58
61
|
completionReason: RunCompletionReason;
|
|
59
62
|
};
|
|
63
|
+
/**
|
|
64
|
+
* Submit a declarative flow to Cloud's pinned v2 runtime. Compilation only
|
|
65
|
+
* happens here; Cloud owns provisioning and the Rust engine owns execution.
|
|
66
|
+
* Returns acceptance, not completion. No local daemon, CLI probe, or node up.
|
|
67
|
+
*/
|
|
68
|
+
/**
|
|
69
|
+
* What a Cloud submission carries, before any request: the exact source or
|
|
70
|
+
* canonical spec, the pinned authority for authored source, the input, and a
|
|
71
|
+
* local correlation hash. Shared by `runInCloud` and `scheduleInCloud`, so a
|
|
72
|
+
* schedule stores exactly what a run would send.
|
|
73
|
+
*/
|
|
74
|
+
export interface CloudSubmission {
|
|
75
|
+
readonly workflow: string;
|
|
76
|
+
readonly fileType: 'yaml' | 'ts';
|
|
77
|
+
readonly authoredAuthority?: CloudAuthoredAuthority;
|
|
78
|
+
readonly inputs?: JsonValue;
|
|
79
|
+
readonly inputPresent: boolean;
|
|
80
|
+
readonly specHash: string;
|
|
81
|
+
/** The authored flow's declared name, or the spec name. */
|
|
82
|
+
readonly name: string;
|
|
83
|
+
/** Authored `schedule.*` handlers, for `flows schedule` to pick up. */
|
|
84
|
+
readonly schedules: readonly ScheduleTriggerSource[];
|
|
85
|
+
}
|
|
86
|
+
export declare function prepareCloudSubmission(flow: CloudFlowSource, options?: {
|
|
87
|
+
input?: JsonValue;
|
|
88
|
+
signal?: AbortSignal;
|
|
89
|
+
}): Promise<CloudSubmission>;
|
|
60
90
|
/**
|
|
61
91
|
* Submit a declarative flow to Cloud's pinned v2 runtime. Compilation only
|
|
62
92
|
* happens here; Cloud owns provisioning and the Rust engine owns execution.
|
package/dist/cloud-run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-run.d.ts","sourceRoot":"","sources":["../src/cloud-run.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cloud-run.d.ts","sourceRoot":"","sources":["../src/cloud-run.ts"],"names":[],"mappings":"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"}
|
package/dist/cloud-run.js
CHANGED
|
@@ -7,15 +7,19 @@ import { canonicalize, specHash } from './canonical.js';
|
|
|
7
7
|
import { CompileError, compileSpec, kernelToAuthoring, toKernelSpec } from './compile.js';
|
|
8
8
|
import { snapshotJsonValue } from './json-value.js';
|
|
9
9
|
import { loadAuthoredFlow } from './authored-flow-loader.js';
|
|
10
|
-
import { CloudFlowError, cloudConnection, cloudRequest, cloudRunId, isCloudRecord, } from './cloud-http.js';
|
|
10
|
+
import { CloudFlowError, cloudConnection, cloudFetch, cloudRequest, cloudRunId, isCloudRecord, } from './cloud-http.js';
|
|
11
11
|
import { packWorkingTree, prepareCloudSync, uploadCloudCode } from './cloud-sync.js';
|
|
12
|
-
/**
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
/** The request-body fields a submission contributes; identical for a run and a schedule. */
|
|
13
|
+
export function cloudSubmissionBody(submission) {
|
|
14
|
+
return {
|
|
15
|
+
workflow: submission.workflow,
|
|
16
|
+
fileType: submission.fileType,
|
|
17
|
+
relayflowVersion: 'v2',
|
|
18
|
+
...(submission.authoredAuthority === undefined ? {} : { authoredAuthority: submission.authoredAuthority }),
|
|
19
|
+
...(submission.inputPresent ? { inputs: submission.inputs } : {}),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export async function prepareCloudSubmission(flow, options = {}) {
|
|
19
23
|
let spec;
|
|
20
24
|
let authored;
|
|
21
25
|
const inputPresent = Object.prototype.hasOwnProperty.call(options, 'input');
|
|
@@ -29,13 +33,26 @@ export async function runInCloud(flow, options = {}) {
|
|
|
29
33
|
if (!bytes.length || Buffer.from(source, 'utf8').compare(bytes) !== 0) {
|
|
30
34
|
throw new CloudFlowError('invalid_input', 'Authored source must be nonempty, lossless UTF-8.');
|
|
31
35
|
}
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
let loaded;
|
|
37
|
+
let definition;
|
|
38
|
+
try {
|
|
39
|
+
loaded = await loadAuthoredFlow(flow.path);
|
|
40
|
+
definition = loaded.getDefinition(loaded.handle);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
// An authored source that does not load is an authoring problem, and
|
|
44
|
+
// the most common one is `@relayflows/surface` not being resolvable
|
|
45
|
+
// from the flow's directory. Name it; do not call it a spec problem.
|
|
46
|
+
throw new CloudFlowError('unsupported_source', `${flow.path} is not a loadable authored flow: ${error instanceof Error ? error.message : String(error)}. `
|
|
47
|
+
+ 'Run `flows check` on it from the same directory.');
|
|
48
|
+
}
|
|
34
49
|
if (loaded.graph.length !== 1) {
|
|
35
50
|
throw new CloudFlowError('unsupported_source', 'Cloud authored submission currently accepts one self-contained .flow.ts source without use dependencies.');
|
|
36
51
|
}
|
|
37
52
|
authored = {
|
|
38
53
|
source,
|
|
54
|
+
name: definition.name,
|
|
55
|
+
schedules: definition.handlers.flatMap(h => h.trigger.kind === 'schedule' ? [h.trigger] : []),
|
|
39
56
|
authority: Object.freeze({
|
|
40
57
|
schemaVersion: 1,
|
|
41
58
|
sourceSha256: createHash('sha256').update(bytes).digest('hex'),
|
|
@@ -86,12 +103,28 @@ export async function runInCloud(flow, options = {}) {
|
|
|
86
103
|
throw new CloudFlowError('invalid_input', 'Cannot read or compile the declarative flow. Check the file path and YAML/JSON spec.');
|
|
87
104
|
}
|
|
88
105
|
options.signal?.throwIfAborted();
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
106
|
+
if (authored === undefined) {
|
|
107
|
+
const kernel = toKernelSpec(spec);
|
|
108
|
+
// JSON is a YAML subset. Sending canonical data preserves the exact spec
|
|
109
|
+
// while using the server's existing YAML-to-config admission path.
|
|
110
|
+
return { workflow: canonicalize(spec), fileType: 'yaml', inputPresent: false, specHash: specHash(kernel),
|
|
111
|
+
name: spec.name ?? "flow", schedules: [] };
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
workflow: authored.source, fileType: 'ts', authoredAuthority: authored.authority,
|
|
115
|
+
inputs: authoredInput, inputPresent: true, name: authored.name, schedules: authored.schedules,
|
|
116
|
+
specHash: createHash('sha256').update(canonicalize({ authority: authored.authority, input: authoredInput })).digest('hex'),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Submit a declarative flow to Cloud's pinned v2 runtime. Compilation only
|
|
121
|
+
* happens here; Cloud owns provisioning and the Rust engine owns execution.
|
|
122
|
+
* Returns acceptance, not completion. No local daemon, CLI probe, or node up.
|
|
123
|
+
*/
|
|
124
|
+
export async function runInCloud(flow, options = {}) {
|
|
125
|
+
const { baseUrl } = cloudConnection(options);
|
|
126
|
+
const submission = await prepareCloudSubmission(flow, options);
|
|
127
|
+
const hash = submission.specHash;
|
|
95
128
|
// Sync before submission: `prepare` reserves the run ID and the upload lands
|
|
96
129
|
// under it, so the run request below names code Cloud already holds. A
|
|
97
130
|
// refused backend or failed upload therefore never leaves a launched run
|
|
@@ -113,17 +146,27 @@ export async function runInCloud(flow, options = {}) {
|
|
|
113
146
|
}
|
|
114
147
|
options.signal?.throwIfAborted();
|
|
115
148
|
options.onSubmit?.();
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
149
|
+
let result;
|
|
150
|
+
try {
|
|
151
|
+
result = await cloudFetch('/api/v1/workflows/run', options, { method: 'POST', detail: true, body: JSON.stringify({
|
|
152
|
+
...cloudSubmissionBody(submission),
|
|
153
|
+
...(options.workspaceId === undefined ? {} : { workspaceId: options.workspaceId }),
|
|
154
|
+
...(synced === undefined ? {} : { runId: synced.runId, s3CodeKey: synced.codeKey }),
|
|
155
|
+
}) });
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
// Cloud accepts exactly one authored Surface (the one its sandbox runs).
|
|
159
|
+
// A CLI on another release is refused with this code; say which side is
|
|
160
|
+
// which instead of leaving the user with a bare 400 (flows#461).
|
|
161
|
+
if (error instanceof CloudFlowError && submission.authoredAuthority !== undefined
|
|
162
|
+
&& error.refusal?.code === 'relayflow_v2_authored_authority_invalid') {
|
|
163
|
+
const expected = error.refusal.expected?.version;
|
|
164
|
+
throw new CloudFlowError('unsupported_source', `Cloud refused this authored flow's Surface: it runs @relayflows/surface ${expected ?? '(version not reported)'} `
|
|
165
|
+
+ `and this CLI authored against ${submission.authoredAuthority.surface.version}. `
|
|
166
|
+
+ 'Install the matching relayflows release, or deploy the flow with `flows deploy`, which uses Cloud\'s own Surface.', error.status, error.refusal);
|
|
167
|
+
}
|
|
168
|
+
throw error;
|
|
169
|
+
}
|
|
127
170
|
if (!isCloudRecord(result) || (result.status !== 'pending' && result.status !== 'running')) {
|
|
128
171
|
throw new CloudFlowError('invalid_response', 'Cloud did not return an accepted run.');
|
|
129
172
|
}
|
package/dist/cloud-run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-run.js","sourceRoot":"","sources":["../src/cloud-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"cloud-run.js","sourceRoot":"","sources":["../src/cloud-run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type ScheduleTriggerSource } from '@relayflows/surface';
|
|
2
|
+
import { type CloudConnectionOptions } from './cloud-http.js';
|
|
3
|
+
import { type CloudFlowSource } from './cloud-run.js';
|
|
4
|
+
import type { JsonValue } from './json-value.js';
|
|
5
|
+
/**
|
|
6
|
+
* Hosted schedules. `POST /api/v1/workflows/schedules` stores a workflow
|
|
7
|
+
* request and relaycron fires it on the cron; each fire replays the stored
|
|
8
|
+
* request through the same `/workflows/run` admission a `flows run --cloud`
|
|
9
|
+
* takes. So a schedule sends exactly what a run sends — `prepareCloudSubmission`
|
|
10
|
+
* — wrapped in the schedule envelope. Nothing runs at schedule time.
|
|
11
|
+
*/
|
|
12
|
+
export interface ScheduleInCloudInput {
|
|
13
|
+
flow: CloudFlowSource;
|
|
14
|
+
/** Five-field cron. Exactly one of `cron` or `every`, or neither to use the flow's declared `schedule.*`. */
|
|
15
|
+
cron?: string;
|
|
16
|
+
/** Fixed interval such as `5m`; lowered to a cron the server accepts. */
|
|
17
|
+
every?: string;
|
|
18
|
+
/** IANA zone the cron is evaluated in; default UTC. */
|
|
19
|
+
tz?: string;
|
|
20
|
+
/** Authored input, as `flows run --cloud --input`. */
|
|
21
|
+
input?: JsonValue;
|
|
22
|
+
/** Defaults to the flow's declared name. */
|
|
23
|
+
name?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface CloudSchedule {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
cronExpression: string;
|
|
29
|
+
timezone: string;
|
|
30
|
+
status: string;
|
|
31
|
+
createdAt?: string;
|
|
32
|
+
lastTriggeredAt?: string;
|
|
33
|
+
lastTriggeredRunId?: string;
|
|
34
|
+
lastTriggerStatus?: string;
|
|
35
|
+
}
|
|
36
|
+
/** `every("5m")` as a cron the server accepts; only intervals cron can express exactly. */
|
|
37
|
+
export declare function everyToCron(every: string): string;
|
|
38
|
+
/** The cron a declared `schedule.*` source means on Cloud. */
|
|
39
|
+
export declare function declaredScheduleCron(source: ScheduleTriggerSource): {
|
|
40
|
+
cron: string;
|
|
41
|
+
tz?: string;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* The argument checks `scheduleInCloud` makes before it reads the flow, so a
|
|
45
|
+
* caller can refuse a bad cron, interval or zone before any side effect (the
|
|
46
|
+
* CLI connects integrations in between). Declared-schedule resolution needs
|
|
47
|
+
* the flow and stays in `scheduleInCloud`.
|
|
48
|
+
*/
|
|
49
|
+
export declare function validateScheduleArgs(input: Pick<ScheduleInCloudInput, 'cron' | 'every' | 'tz'>): void;
|
|
50
|
+
export declare function scheduleInCloud(input: ScheduleInCloudInput, options?: CloudConnectionOptions): Promise<CloudSchedule>;
|
|
51
|
+
export declare function listCloudSchedules(options?: CloudConnectionOptions): Promise<CloudSchedule[]>;
|
|
52
|
+
export declare function unscheduleInCloud(scheduleId: string, options?: CloudConnectionOptions): Promise<void>;
|
|
53
|
+
/** Exposed for previews: the tick grid a UTC cron amounts to, if it is exactly one. */
|
|
54
|
+
export declare function cronIntervalMs(cron: string): number | undefined;
|
|
55
|
+
//# sourceMappingURL=cloud-schedule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-schedule.d.ts","sourceRoot":"","sources":["../src/cloud-schedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAA2D,KAAK,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACvH,OAAO,EAA+C,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACnG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;GAMG;AAEH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,eAAe,CAAC;IACtB,6GAA6G;IAC7G,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,sDAAsD;IACtD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAID,2FAA2F;AAC3F,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUjD;AAED,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,qBAAqB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAKjG;AAWD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,CAWrG;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,EAAE,OAAO,GAAE,sBAA2B,GAChE,OAAO,CAAC,aAAa,CAAC,CA0CxB;AAiBD,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CASvG;AAED,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAO/G;AAED,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE/D"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { cronGrid, everyToMs, parseCron } from '@relayflows/surface';
|
|
2
|
+
import { CloudFlowError, cloudFetch, cloudRequest, isCloudRecord } from './cloud-http.js';
|
|
3
|
+
import { cloudSubmissionBody, prepareCloudSubmission } from './cloud-run.js';
|
|
4
|
+
const SCHEDULE_ID = /^[A-Za-z0-9_-]{1,128}$/u;
|
|
5
|
+
/** `every("5m")` as a cron the server accepts; only intervals cron can express exactly. */
|
|
6
|
+
export function everyToCron(every) {
|
|
7
|
+
const ms = everyToMs(every);
|
|
8
|
+
const minutes = ms / 60_000;
|
|
9
|
+
if (Number.isInteger(minutes) && minutes >= 1 && minutes < 60 && 60 % minutes === 0)
|
|
10
|
+
return `*/${minutes} * * * *`;
|
|
11
|
+
if (minutes === 60)
|
|
12
|
+
return '0 * * * *';
|
|
13
|
+
const hours = ms / 3_600_000;
|
|
14
|
+
if (Number.isInteger(hours) && hours > 1 && hours < 24 && 24 % hours === 0)
|
|
15
|
+
return `0 */${hours} * * *`;
|
|
16
|
+
if (hours === 24)
|
|
17
|
+
return '0 0 * * *';
|
|
18
|
+
throw new CloudFlowError('invalid_input', `--every ${every} has no exact cron: use a divisor of an hour (1m-30m), 1h, a divisor of a day (2h-12h), or 1d; or give --cron.`);
|
|
19
|
+
}
|
|
20
|
+
/** The cron a declared `schedule.*` source means on Cloud. */
|
|
21
|
+
export function declaredScheduleCron(source) {
|
|
22
|
+
if (source.cron !== undefined)
|
|
23
|
+
return { cron: source.cron, ...(source.tz === undefined ? {} : { tz: source.tz }) };
|
|
24
|
+
const minutes = (source.intervalMs ?? 0) / 60_000;
|
|
25
|
+
const every = Number.isInteger(minutes) ? `${minutes}m` : `${Math.round((source.intervalMs ?? 0) / 1000)}s`;
|
|
26
|
+
return { cron: everyToCron(every) };
|
|
27
|
+
}
|
|
28
|
+
function assertTimeZone(tz) {
|
|
29
|
+
try {
|
|
30
|
+
new Intl.DateTimeFormat('en-US', { timeZone: tz });
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
throw new CloudFlowError('invalid_input', `--tz ${JSON.stringify(tz)} is not a known IANA zone.`);
|
|
34
|
+
}
|
|
35
|
+
return tz;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The argument checks `scheduleInCloud` makes before it reads the flow, so a
|
|
39
|
+
* caller can refuse a bad cron, interval or zone before any side effect (the
|
|
40
|
+
* CLI connects integrations in between). Declared-schedule resolution needs
|
|
41
|
+
* the flow and stays in `scheduleInCloud`.
|
|
42
|
+
*/
|
|
43
|
+
export function validateScheduleArgs(input) {
|
|
44
|
+
if (input.cron !== undefined && input.every !== undefined) {
|
|
45
|
+
throw new CloudFlowError('invalid_input', 'Give --cron or --every, not both.');
|
|
46
|
+
}
|
|
47
|
+
if (input.cron !== undefined) {
|
|
48
|
+
try {
|
|
49
|
+
parseCron(input.cron);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
throw new CloudFlowError('invalid_input', `--cron: ${error instanceof Error ? error.message : String(error)}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (input.every !== undefined)
|
|
56
|
+
everyToCron(input.every);
|
|
57
|
+
if (input.tz !== undefined)
|
|
58
|
+
assertTimeZone(input.tz);
|
|
59
|
+
}
|
|
60
|
+
export async function scheduleInCloud(input, options = {}) {
|
|
61
|
+
validateScheduleArgs(input);
|
|
62
|
+
const submission = await prepareCloudSubmission(input.flow, {
|
|
63
|
+
...(Object.prototype.hasOwnProperty.call(input, 'input') ? { input: input.input } : {}),
|
|
64
|
+
...(options.signal === undefined ? {} : { signal: options.signal }),
|
|
65
|
+
});
|
|
66
|
+
let cron;
|
|
67
|
+
let tz = input.tz;
|
|
68
|
+
if (input.cron !== undefined) {
|
|
69
|
+
try {
|
|
70
|
+
parseCron(input.cron);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
throw new CloudFlowError('invalid_input', `--cron: ${error instanceof Error ? error.message : String(error)}`);
|
|
74
|
+
}
|
|
75
|
+
cron = input.cron.trim();
|
|
76
|
+
}
|
|
77
|
+
else if (input.every !== undefined) {
|
|
78
|
+
cron = everyToCron(input.every);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
if (submission.schedules.length !== 1) {
|
|
82
|
+
throw new CloudFlowError('invalid_input', submission.schedules.length === 0
|
|
83
|
+
? 'The flow declares no schedule.* handler; give --cron or --every.'
|
|
84
|
+
: 'The flow declares several schedules; say which with --cron or --every.');
|
|
85
|
+
}
|
|
86
|
+
const declared = declaredScheduleCron(submission.schedules[0]);
|
|
87
|
+
cron = declared.cron;
|
|
88
|
+
tz ??= declared.tz;
|
|
89
|
+
}
|
|
90
|
+
const timezone = tz === undefined ? 'UTC' : assertTimeZone(tz);
|
|
91
|
+
const name = (input.name ?? submission.name).trim();
|
|
92
|
+
if (!name)
|
|
93
|
+
throw new CloudFlowError('invalid_input', 'Schedule name must not be empty.');
|
|
94
|
+
options.signal?.throwIfAborted();
|
|
95
|
+
const result = await cloudFetch('/api/v1/workflows/schedules', options, {
|
|
96
|
+
method: 'POST', detail: true,
|
|
97
|
+
body: JSON.stringify({
|
|
98
|
+
name,
|
|
99
|
+
schedule_type: 'cron',
|
|
100
|
+
cron_expression: cron,
|
|
101
|
+
timezone,
|
|
102
|
+
workflowRequest: cloudSubmissionBody(submission),
|
|
103
|
+
}),
|
|
104
|
+
});
|
|
105
|
+
const record = isCloudRecord(result) && isCloudRecord(result.schedule) ? result.schedule : undefined;
|
|
106
|
+
if (record === undefined)
|
|
107
|
+
throw new CloudFlowError('invalid_response', 'Cloud did not return a schedule.');
|
|
108
|
+
return toCloudSchedule(record);
|
|
109
|
+
}
|
|
110
|
+
function toCloudSchedule(row) {
|
|
111
|
+
if (typeof row.id !== 'string' || !SCHEDULE_ID.test(row.id) || typeof row.name !== 'string') {
|
|
112
|
+
throw new CloudFlowError('invalid_response', 'Cloud returned a malformed schedule.');
|
|
113
|
+
}
|
|
114
|
+
const optional = (key) => typeof row[key] === 'string' ? { [key]: row[key] } : {};
|
|
115
|
+
return {
|
|
116
|
+
id: row.id, name: row.name,
|
|
117
|
+
cronExpression: typeof row.cronExpression === 'string' ? row.cronExpression : '',
|
|
118
|
+
timezone: typeof row.timezone === 'string' ? row.timezone : 'UTC',
|
|
119
|
+
status: typeof row.status === 'string' ? row.status : 'unknown',
|
|
120
|
+
...optional('createdAt'), ...optional('lastTriggeredAt'), ...optional('lastTriggeredRunId'), ...optional('lastTriggerStatus'),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
export async function listCloudSchedules(options = {}) {
|
|
124
|
+
const payload = await cloudRequest('/api/v1/workflows/schedules', options);
|
|
125
|
+
if (!isCloudRecord(payload) || !Array.isArray(payload.schedules)) {
|
|
126
|
+
throw new CloudFlowError('invalid_response', 'Cloud did not return a schedules list.');
|
|
127
|
+
}
|
|
128
|
+
return payload.schedules.map(row => {
|
|
129
|
+
if (!isCloudRecord(row))
|
|
130
|
+
throw new CloudFlowError('invalid_response', 'Cloud returned a malformed schedule row.');
|
|
131
|
+
return toCloudSchedule(row);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
export async function unscheduleInCloud(scheduleId, options = {}) {
|
|
135
|
+
if (!SCHEDULE_ID.test(scheduleId))
|
|
136
|
+
throw new CloudFlowError('invalid_input', `"${scheduleId}" is not a schedule id.`);
|
|
137
|
+
const result = await cloudFetch(`/api/v1/workflows/schedules/${encodeURIComponent(scheduleId)}`, options, { method: 'DELETE', detail: true });
|
|
138
|
+
if (!isCloudRecord(result) || result.deleted !== true) {
|
|
139
|
+
throw new CloudFlowError('invalid_response', 'Cloud did not confirm the deletion.');
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/** Exposed for previews: the tick grid a UTC cron amounts to, if it is exactly one. */
|
|
143
|
+
export function cronIntervalMs(cron) {
|
|
144
|
+
return cronGrid(parseCron(cron))?.intervalMs;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=cloud-schedule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-schedule.js","sourceRoot":"","sources":["../src/cloud-schedule.ts"],"names":[],"mappings":"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"}
|
package/dist/failure-kinds.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/** Closed refusal taxonomy for public preflight (RFC covenant 2). */
|
|
2
|
-
export declare const PREFLIGHT_FAILURE_KINDS: readonly ["invalid_spec", "unknown_gate_kind", "gate_pattern_invalid", "gate_command_missing", "gate_bound_invalid", "plugin_unknown", "plugin_unlisted", "plugin_install_failed", "plugin_manifest_missing", "plugin_manifest_invalid", "plugin_preflight_missing", "plugin_verb_unknown_primitive", "plugin_unsupported", "plugin_credential_missing", "plugin_server_unreachable", "helper_provider.mount_required", "helper_provider.unsupported", "helper_slack.credential_missing", "helper_slack.mount_required", "helper_mount_required", "mcp_undeclared_server", "mcp_unreachable", "budget_syntax_invalid", "cli_missing", "cli_unauthenticated", "cli_unresolved", "cli_unsupported", "command_missing", "model_unavailable", "model_unknown", "memory_unreachable", "no_executor", "probe_failed", "scope_syntax_invalid", "mount_unknown", "scope_ungrantable"];
|
|
2
|
+
export declare const PREFLIGHT_FAILURE_KINDS: readonly ["invalid_spec", "unknown_gate_kind", "gate_pattern_invalid", "gate_command_missing", "gate_bound_invalid", "gate_path_invalid", "plugin_unknown", "plugin_unlisted", "plugin_install_failed", "plugin_manifest_missing", "plugin_manifest_invalid", "plugin_preflight_missing", "plugin_verb_unknown_primitive", "plugin_unsupported", "plugin_credential_missing", "plugin_server_unreachable", "helper_provider.mount_required", "helper_provider.unsupported", "helper_slack.credential_missing", "helper_slack.mount_required", "helper_mount_required", "mcp_undeclared_server", "mcp_unreachable", "budget_syntax_invalid", "cli_missing", "cli_unauthenticated", "cli_unresolved", "cli_unsupported", "command_missing", "model_unavailable", "model_unknown", "memory_unreachable", "no_executor", "probe_failed", "scope_syntax_invalid", "mount_unknown", "scope_ungrantable"];
|
|
3
3
|
/** Input/command refusals emitted before the pure preflight predicates run. */
|
|
4
4
|
export declare const CHECK_INPUT_FAILURE_KINDS: readonly ["config_invalid", "input_invalid", "input_missing", "input_too_large", "input_unreadable", "invalid_invocation", "invalid_spec"];
|
|
5
|
-
export declare const CHECK_FAILURE_KINDS: readonly ["config_invalid", "input_invalid", "input_missing", "input_too_large", "input_unreadable", "invalid_invocation", "invalid_spec", "unknown_gate_kind", "gate_pattern_invalid", "gate_command_missing", "gate_bound_invalid", "plugin_unknown", "plugin_unlisted", "plugin_install_failed", "plugin_manifest_missing", "plugin_manifest_invalid", "plugin_preflight_missing", "plugin_verb_unknown_primitive", "plugin_unsupported", "plugin_credential_missing", "plugin_server_unreachable", "helper_provider.mount_required", "helper_provider.unsupported", "helper_slack.credential_missing", "helper_slack.mount_required", "helper_mount_required", "mcp_undeclared_server", "mcp_unreachable", "budget_syntax_invalid", "cli_missing", "cli_unauthenticated", "cli_unresolved", "cli_unsupported", "command_missing", "model_unavailable", "model_unknown", "memory_unreachable", "no_executor", "probe_failed", "scope_syntax_invalid", "mount_unknown", "scope_ungrantable"];
|
|
5
|
+
export declare const CHECK_FAILURE_KINDS: readonly ["config_invalid", "input_invalid", "input_missing", "input_too_large", "input_unreadable", "invalid_invocation", "invalid_spec", "unknown_gate_kind", "gate_pattern_invalid", "gate_command_missing", "gate_bound_invalid", "gate_path_invalid", "plugin_unknown", "plugin_unlisted", "plugin_install_failed", "plugin_manifest_missing", "plugin_manifest_invalid", "plugin_preflight_missing", "plugin_verb_unknown_primitive", "plugin_unsupported", "plugin_credential_missing", "plugin_server_unreachable", "helper_provider.mount_required", "helper_provider.unsupported", "helper_slack.credential_missing", "helper_slack.mount_required", "helper_mount_required", "mcp_undeclared_server", "mcp_unreachable", "budget_syntax_invalid", "cli_missing", "cli_unauthenticated", "cli_unresolved", "cli_unsupported", "command_missing", "model_unavailable", "model_unknown", "memory_unreachable", "no_executor", "probe_failed", "scope_syntax_invalid", "mount_unknown", "scope_ungrantable"];
|
|
6
6
|
/**
|
|
7
7
|
* Warnings never refuse. Covenant 2 asks preflight to refuse *or warn* on
|
|
8
8
|
* anything it cannot prove, so a deterministic step always leaves exactly one
|
|
@@ -38,7 +38,7 @@ export declare const PREFLIGHT_WARNING_KINDS: readonly ["unprovable_effects", "c
|
|
|
38
38
|
* members is pre-existing — renaming it is a separate change, and neither this
|
|
39
39
|
* list nor `RunDiagnostic` is exported from the package index.
|
|
40
40
|
*/
|
|
41
|
-
export declare const RUN_FAILURE_KINDS: readonly ["bucket_unconfigured", "bucket_unreachable", "bundle_signature_invalid", "bundle_unsupported", "human_influenced_run", "reuse_spec_mismatch", "reuse_run_not_found", "reuse_journal_read_failed", "daemon_unreachable", "daemon_protocol_mismatch", "daemon_start_failed", "daemon_start_timeout", "relayflowd_not_found", "protocol_error", "run_parked", "run_declined", "run_unavailable"];
|
|
41
|
+
export declare const RUN_FAILURE_KINDS: readonly ["bucket_unconfigured", "bucket_unreachable", "bundle_signature_invalid", "bundle_unsupported", "human_influenced_run", "reuse_spec_mismatch", "reuse_run_not_found", "reuse_journal_read_failed", "daemon_unreachable", "daemon_protocol_mismatch", "daemon_start_failed", "daemon_start_timeout", "relayflowd_not_found", "protocol_error", "run_parked", "run_declined", "run_unavailable", "gate_failed", "human_wait_unknown"];
|
|
42
42
|
/**
|
|
43
43
|
* Non-refusing outcomes of the attach step. `connection_file_stale` is
|
|
44
44
|
* DAEMON-LIFECYCLE.md §2 row 2: the socket answered while `connection.json`
|