@mobrienv/autoloop-harness 0.7.4 → 0.9.1
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/acceptance.d.ts +31 -0
- package/dist/acceptance.js +69 -0
- package/dist/acceptance.js.map +1 -0
- package/dist/ask.d.ts +16 -0
- package/dist/ask.js +47 -0
- package/dist/ask.js.map +1 -0
- package/dist/backend/types.d.ts +16 -0
- package/dist/backend/types.js +17 -0
- package/dist/backend/types.js.map +1 -0
- package/dist/circuit-breaker.d.ts +27 -0
- package/dist/circuit-breaker.js +41 -0
- package/dist/circuit-breaker.js.map +1 -0
- package/dist/completion-lint.d.ts +29 -0
- package/dist/completion-lint.js +51 -0
- package/dist/completion-lint.js.map +1 -0
- package/dist/config-helpers.d.ts +10 -2
- package/dist/config-helpers.js +272 -30
- package/dist/config-helpers.js.map +1 -1
- package/dist/control/acp-adapter.d.ts +12 -0
- package/dist/control/acp-adapter.js +54 -0
- package/dist/control/acp-adapter.js.map +1 -0
- package/dist/control/adapter.d.ts +12 -0
- package/dist/control/adapter.js +2 -0
- package/dist/control/adapter.js.map +1 -0
- package/dist/control/capabilities.d.ts +9 -0
- package/dist/control/capabilities.js +27 -0
- package/dist/control/capabilities.js.map +1 -0
- package/dist/control/claude-sdk-adapter.d.ts +15 -0
- package/dist/control/claude-sdk-adapter.js +79 -0
- package/dist/control/claude-sdk-adapter.js.map +1 -0
- package/dist/control/command-adapter.d.ts +19 -0
- package/dist/control/command-adapter.js +57 -0
- package/dist/control/command-adapter.js.map +1 -0
- package/dist/control/dispatch.d.ts +14 -0
- package/dist/control/dispatch.js +55 -0
- package/dist/control/dispatch.js.map +1 -0
- package/dist/control/index.d.ts +11 -0
- package/dist/control/index.js +9 -0
- package/dist/control/index.js.map +1 -0
- package/dist/control/kiro-adapter.d.ts +2 -0
- package/dist/control/kiro-adapter.js +2 -0
- package/dist/control/kiro-adapter.js.map +1 -0
- package/dist/control/paths.d.ts +19 -0
- package/dist/control/paths.js +40 -0
- package/dist/control/paths.js.map +1 -0
- package/dist/control/pi-adapter.d.ts +15 -0
- package/dist/control/pi-adapter.js +76 -0
- package/dist/control/pi-adapter.js.map +1 -0
- package/dist/control/queue.d.ts +14 -0
- package/dist/control/queue.js +82 -0
- package/dist/control/queue.js.map +1 -0
- package/dist/control/render.d.ts +10 -0
- package/dist/control/render.js +53 -0
- package/dist/control/render.js.map +1 -0
- package/dist/control/types.d.ts +56 -0
- package/dist/control/types.js +9 -0
- package/dist/control/types.js.map +1 -0
- package/dist/display.d.ts +9 -2
- package/dist/display.js +37 -1
- package/dist/display.js.map +1 -1
- package/dist/emit.d.ts +27 -0
- package/dist/emit.js +327 -6
- package/dist/emit.js.map +1 -1
- package/dist/events.d.ts +36 -3
- package/dist/fanout-runner.d.ts +25 -0
- package/dist/fanout-runner.js +54 -0
- package/dist/fanout-runner.js.map +1 -0
- package/dist/file-mod-audit.d.ts +29 -0
- package/dist/file-mod-audit.js +63 -0
- package/dist/file-mod-audit.js.map +1 -0
- package/dist/git-diff.d.ts +19 -0
- package/dist/git-diff.js +74 -0
- package/dist/git-diff.js.map +1 -0
- package/dist/guards.d.ts +37 -0
- package/dist/guards.js +78 -0
- package/dist/guards.js.map +1 -0
- package/dist/hooks.d.ts +78 -0
- package/dist/hooks.js +239 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +15 -2
- package/dist/index.js +359 -26
- package/dist/index.js.map +1 -1
- package/dist/intent.d.ts +45 -0
- package/dist/intent.js +127 -0
- package/dist/intent.js.map +1 -0
- package/dist/iteration-diff.d.ts +32 -0
- package/dist/iteration-diff.js +92 -0
- package/dist/iteration-diff.js.map +1 -0
- package/dist/iteration.d.ts +20 -0
- package/dist/iteration.js +551 -30
- package/dist/iteration.js.map +1 -1
- package/dist/metareview.d.ts +9 -1
- package/dist/metareview.js +158 -34
- package/dist/metareview.js.map +1 -1
- package/dist/notify.d.ts +22 -0
- package/dist/notify.js +110 -0
- package/dist/notify.js.map +1 -0
- package/dist/parallel.d.ts +17 -0
- package/dist/parallel.js +38 -6
- package/dist/parallel.js.map +1 -1
- package/dist/postconditions.d.ts +25 -0
- package/dist/postconditions.js +107 -0
- package/dist/postconditions.js.map +1 -0
- package/dist/postfire-verify.d.ts +31 -0
- package/dist/postfire-verify.js +64 -0
- package/dist/postfire-verify.js.map +1 -0
- package/dist/premature-quit.d.ts +25 -0
- package/dist/premature-quit.js +54 -0
- package/dist/premature-quit.js.map +1 -0
- package/dist/progress.d.ts +20 -0
- package/dist/progress.js +56 -0
- package/dist/progress.js.map +1 -0
- package/dist/prompt.d.ts +4 -0
- package/dist/prompt.js +42 -2
- package/dist/prompt.js.map +1 -1
- package/dist/provisional.d.ts +42 -0
- package/dist/provisional.js +92 -0
- package/dist/provisional.js.map +1 -0
- package/dist/registry-bridge.js +32 -1
- package/dist/registry-bridge.js.map +1 -1
- package/dist/resume.d.ts +61 -0
- package/dist/resume.js +226 -0
- package/dist/resume.js.map +1 -0
- package/dist/scratchpad.js +27 -8
- package/dist/scratchpad.js.map +1 -1
- package/dist/stage.d.ts +21 -0
- package/dist/stage.js +131 -0
- package/dist/stage.js.map +1 -0
- package/dist/stop.d.ts +32 -2
- package/dist/stop.js +169 -0
- package/dist/stop.js.map +1 -1
- package/dist/suspend-state.d.ts +32 -0
- package/dist/suspend-state.js +104 -0
- package/dist/suspend-state.js.map +1 -0
- package/dist/tamper.d.ts +21 -0
- package/dist/tamper.js +88 -0
- package/dist/tamper.js.map +1 -0
- package/dist/types.d.ts +294 -3
- package/dist/types.js +91 -1
- package/dist/types.js.map +1 -1
- package/dist/wave/finalize-wave.d.ts +15 -5
- package/dist/wave/finalize-wave.js +56 -2
- package/dist/wave/finalize-wave.js.map +1 -1
- package/dist/wave/launch-branches.d.ts +23 -2
- package/dist/wave/launch-branches.js +58 -3
- package/dist/wave/launch-branches.js.map +1 -1
- package/dist/wave/stage-branch-runner.d.ts +12 -0
- package/dist/wave/stage-branch-runner.js +130 -0
- package/dist/wave/stage-branch-runner.js.map +1 -0
- package/dist/wave/types.d.ts +40 -2
- package/dist/wave.d.ts +32 -1
- package/dist/wave.js +163 -34
- package/dist/wave.js.map +1 -1
- package/package.json +131 -3
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RunRecord } from "@mobrienv/autoloop-core/registry/types";
|
|
2
|
+
import type { ControlCapabilities, ControlRequest, ControlStatus } from "./types.js";
|
|
3
|
+
export interface ControlSnapshot {
|
|
4
|
+
run: RunRecord;
|
|
5
|
+
capabilities: ControlCapabilities | null;
|
|
6
|
+
pendingRequests: ControlRequest[];
|
|
7
|
+
recentStatuses: ControlStatus[];
|
|
8
|
+
}
|
|
9
|
+
export declare function renderShow(snap: ControlSnapshot): string;
|
|
10
|
+
export declare function renderCapabilities(caps: ControlCapabilities | null): string;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { CAPABILITY_VERBS } from "./capabilities.js";
|
|
2
|
+
export function renderShow(snap) {
|
|
3
|
+
const lines = [];
|
|
4
|
+
lines.push(`Run: ${snap.run.run_id}`);
|
|
5
|
+
lines.push(`Status: ${snap.run.status}`);
|
|
6
|
+
lines.push(`Preset: ${snap.run.preset}`);
|
|
7
|
+
lines.push(`Backend: ${snap.run.backend || "(unknown)"}`);
|
|
8
|
+
lines.push(`Iteration: ${snap.run.iteration}`);
|
|
9
|
+
if (snap.run.stop_reason)
|
|
10
|
+
lines.push(`Stop: ${snap.run.stop_reason}`);
|
|
11
|
+
if (snap.run.pid)
|
|
12
|
+
lines.push(`PID: ${snap.run.pid}`);
|
|
13
|
+
lines.push("");
|
|
14
|
+
lines.push(renderCapabilities(snap.capabilities));
|
|
15
|
+
lines.push("");
|
|
16
|
+
lines.push("Recent control activity:");
|
|
17
|
+
if (snap.recentStatuses.length === 0 && snap.pendingRequests.length === 0) {
|
|
18
|
+
lines.push(" (none)");
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
for (const r of snap.pendingRequests) {
|
|
22
|
+
lines.push(` pending ${r.verb.padEnd(10)} ${r.id} ${r.reason || ""}`);
|
|
23
|
+
}
|
|
24
|
+
for (const s of snap.recentStatuses.slice(-5)) {
|
|
25
|
+
const detail = s.detail ? ` — ${s.detail}` : "";
|
|
26
|
+
lines.push(` ${s.state.padEnd(8)} ${s.verb.padEnd(10)} ${s.id}${detail}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return lines.join("\n");
|
|
30
|
+
}
|
|
31
|
+
export function renderCapabilities(caps) {
|
|
32
|
+
if (!caps) {
|
|
33
|
+
return "Capabilities: (none published yet — run may not be live)";
|
|
34
|
+
}
|
|
35
|
+
const lines = [];
|
|
36
|
+
lines.push(`Capabilities (backend: ${caps.backend}):`);
|
|
37
|
+
for (const verb of CAPABILITY_VERBS) {
|
|
38
|
+
const cap = caps[verb];
|
|
39
|
+
const mark = cap.supported ? "yes" : "no ";
|
|
40
|
+
const detail = cap.detail ? ` — ${cap.detail}` : "";
|
|
41
|
+
lines.push(` ${verb.padEnd(10)} ${mark}${detail}`);
|
|
42
|
+
}
|
|
43
|
+
if (caps.extras) {
|
|
44
|
+
for (const [name, cap] of Object.entries(caps.extras)) {
|
|
45
|
+
const mark = cap.supported ? "yes" : "no ";
|
|
46
|
+
const detail = cap.detail ? ` — ${cap.detail}` : "";
|
|
47
|
+
lines.push(` ${name.padEnd(10)} ${mark}${detail}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
lines.push(` published ${caps.publishedAt}`);
|
|
51
|
+
return lines.join("\n");
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/control/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend-neutral live-control types.
|
|
3
|
+
*
|
|
4
|
+
* The supervisor-facing contract. Adapters (Kiro ACP, Pi, future Claude live
|
|
5
|
+
* sessions) map these verbs to backend-specific behavior; the journal remains
|
|
6
|
+
* canonical for what actually happened.
|
|
7
|
+
*/
|
|
8
|
+
export type ControlVerb = "interrupt" | "guide" | "respond";
|
|
9
|
+
export type CapabilityVerb = "guidance" | "interrupt" | "inspect";
|
|
10
|
+
export interface GuidePayload {
|
|
11
|
+
message: string;
|
|
12
|
+
/** If true, operator wants the current turn aborted so guidance is picked up now. */
|
|
13
|
+
interrupt: boolean;
|
|
14
|
+
}
|
|
15
|
+
export type InterruptPayload = Record<string, never>;
|
|
16
|
+
/**
|
|
17
|
+
* Answer to a blocking `human.ask`. An external supervisor (e.g. ralph relaying
|
|
18
|
+
* a Telegram reply) writes this to deliver the human's response to the run that
|
|
19
|
+
* is paused waiting on `questionId`.
|
|
20
|
+
*/
|
|
21
|
+
export interface RespondPayload {
|
|
22
|
+
questionId: string;
|
|
23
|
+
answer: string;
|
|
24
|
+
}
|
|
25
|
+
export type ControlPayload = GuidePayload | InterruptPayload | RespondPayload;
|
|
26
|
+
export interface ControlRequest {
|
|
27
|
+
id: string;
|
|
28
|
+
runId: string;
|
|
29
|
+
requestedAt: string;
|
|
30
|
+
verb: ControlVerb;
|
|
31
|
+
reason: string;
|
|
32
|
+
payload: ControlPayload;
|
|
33
|
+
}
|
|
34
|
+
export interface ControlCapability {
|
|
35
|
+
supported: boolean;
|
|
36
|
+
detail?: string;
|
|
37
|
+
}
|
|
38
|
+
export type ControlCapabilities = Record<CapabilityVerb, ControlCapability> & {
|
|
39
|
+
backend: string;
|
|
40
|
+
publishedAt: string;
|
|
41
|
+
runId: string;
|
|
42
|
+
extras?: Record<string, ControlCapability>;
|
|
43
|
+
};
|
|
44
|
+
export type ControlStatusState = "received" | "applied" | "rejected" | "ignored";
|
|
45
|
+
export interface ControlStatus {
|
|
46
|
+
id: string;
|
|
47
|
+
runId: string;
|
|
48
|
+
verb: ControlVerb;
|
|
49
|
+
state: ControlStatusState;
|
|
50
|
+
at: string;
|
|
51
|
+
detail?: string;
|
|
52
|
+
}
|
|
53
|
+
export interface ControlAck {
|
|
54
|
+
state: ControlStatusState;
|
|
55
|
+
detail?: string;
|
|
56
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend-neutral live-control types.
|
|
3
|
+
*
|
|
4
|
+
* The supervisor-facing contract. Adapters (Kiro ACP, Pi, future Claude live
|
|
5
|
+
* sessions) map these verbs to backend-specific behavior; the journal remains
|
|
6
|
+
* canonical for what actually happened.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/control/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
package/dist/display.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { IterationContext } from "./prompt.js";
|
|
2
|
-
import type { LoopContext, RunSummary } from "./types.js";
|
|
2
|
+
import type { LoopContext, RunSummary, StopReason } from "./types.js";
|
|
3
3
|
export declare function printSummary(summary: RunSummary, loop: LoopContext): void;
|
|
4
|
+
/**
|
|
5
|
+
* Cumulative run cost in USD, summed from journaled `backend.usage` events.
|
|
6
|
+
* Returns 0 when no usage was recorded (e.g. the `command`/`acp` backends, or a
|
|
7
|
+
* torn journal) so the summary always carries a parseable `cost_usd` field.
|
|
8
|
+
*/
|
|
9
|
+
export declare function runCostUsd(loop: LoopContext): number;
|
|
4
10
|
export declare function printIterationBanner(loop: LoopContext, iter: IterationContext): void;
|
|
5
11
|
export declare function printIterationFooter(iter: IterationContext, elapsedS: number): void;
|
|
6
12
|
export declare function printProgressLine(data: {
|
|
@@ -13,7 +19,8 @@ export declare function printProgressLine(data: {
|
|
|
13
19
|
}): void;
|
|
14
20
|
export declare function printReviewBanner(iteration: number): void;
|
|
15
21
|
export declare function printBackendOutputTail(output: string, maxLines?: number): void;
|
|
16
|
-
export declare function printFailureDiagnostic(output: string, stopReason:
|
|
22
|
+
export declare function printFailureDiagnostic(output: string, stopReason: StopReason): void;
|
|
23
|
+
export declare function printHookOutput(name: string, exitCode: number, output: string, failed: boolean): void;
|
|
17
24
|
export declare function terminalWidth(): number;
|
|
18
25
|
export declare function lastNChars(text: string, n: number): string;
|
|
19
26
|
export declare function log(loop: LoopContext, level: string, message: string): void;
|
package/dist/display.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { execSync } from "node:child_process";
|
|
2
|
-
import { lineSep, listText } from "@mobrienv/autoloop-core";
|
|
2
|
+
import { collectUsage, lineSep, listText } from "@mobrienv/autoloop-core";
|
|
3
|
+
import { readRunLines } from "@mobrienv/autoloop-core/journal";
|
|
3
4
|
export function printSummary(summary, loop) {
|
|
4
5
|
const hint = stopReasonHint(summary.stopReason);
|
|
5
6
|
const lines = [
|
|
@@ -8,6 +9,7 @@ export function printSummary(summary, loop) {
|
|
|
8
9
|
`run_id: ${loop.runtime.runId}`,
|
|
9
10
|
`iterations: ${summary.iterations}`,
|
|
10
11
|
`stop_reason: ${summary.stopReason}`,
|
|
12
|
+
`cost_usd: ${runCostUsd(loop).toFixed(6)}`,
|
|
11
13
|
`journal: ${loop.paths.journalFile}`,
|
|
12
14
|
`memory: ${loop.paths.memoryFile}`,
|
|
13
15
|
`review_every: ${loop.review.every}`,
|
|
@@ -17,6 +19,20 @@ export function printSummary(summary, loop) {
|
|
|
17
19
|
for (const l of lines)
|
|
18
20
|
console.log(l);
|
|
19
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Cumulative run cost in USD, summed from journaled `backend.usage` events.
|
|
24
|
+
* Returns 0 when no usage was recorded (e.g. the `command`/`acp` backends, or a
|
|
25
|
+
* torn journal) so the summary always carries a parseable `cost_usd` field.
|
|
26
|
+
*/
|
|
27
|
+
export function runCostUsd(loop) {
|
|
28
|
+
try {
|
|
29
|
+
const lines = readRunLines(loop.paths.journalFile, loop.runtime.runId);
|
|
30
|
+
return collectUsage(lines, loop.runtime.runId).totals.costUsd;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return 0;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
20
36
|
function stopReasonHint(reason) {
|
|
21
37
|
switch (reason) {
|
|
22
38
|
case "backend_failed":
|
|
@@ -127,6 +143,26 @@ export function printFailureDiagnostic(output, stopReason) {
|
|
|
127
143
|
console.log(tail);
|
|
128
144
|
console.log("──────────────────────────────────────");
|
|
129
145
|
}
|
|
146
|
+
export function printHookOutput(name, exitCode, output, failed) {
|
|
147
|
+
const lines = output.split(lineSep());
|
|
148
|
+
const body = lines.slice(-15).join(lineSep());
|
|
149
|
+
// Silent successful hooks (no output) print nothing; failures always show.
|
|
150
|
+
if (!failed && !body.trim())
|
|
151
|
+
return;
|
|
152
|
+
const header = failed
|
|
153
|
+
? `── hook: ${name} failed (exit ${exitCode}) ──`
|
|
154
|
+
: `── hook: ${name} (exit ${exitCode}) ──`;
|
|
155
|
+
console.log("");
|
|
156
|
+
console.log(header);
|
|
157
|
+
if (lines.length > 15) {
|
|
158
|
+
console.log(`… (${lines.length - 15} earlier lines in journal)`);
|
|
159
|
+
}
|
|
160
|
+
if (body.trim())
|
|
161
|
+
console.log(body);
|
|
162
|
+
if (decorativeOutputEnabled()) {
|
|
163
|
+
console.log("──────────────────────────────────────");
|
|
164
|
+
}
|
|
165
|
+
}
|
|
130
166
|
export function terminalWidth() {
|
|
131
167
|
const envWidth = parseInt(process.env.AUTOLOOP_WIDTH ?? "", 10);
|
|
132
168
|
if (envWidth > 0)
|
package/dist/display.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display.js","sourceRoot":"","sources":["../src/display.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"display.js","sourceRoot":"","sources":["../src/display.ts"],"names":[],"mappings":"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"}
|
package/dist/emit.d.ts
CHANGED
|
@@ -11,6 +11,33 @@ export interface EmitResult {
|
|
|
11
11
|
error?: string;
|
|
12
12
|
}
|
|
13
13
|
export declare function emit(projectDir: string, topic: string, payload: string): EmitResult;
|
|
14
|
+
/**
|
|
15
|
+
* Parse `payload` as a JSON object, returning its fields if (and only if) the
|
|
16
|
+
* whole payload is a well-formed JSON object literal. This is the ONE
|
|
17
|
+
* definition of "structured branch output": the evidence-gate keys check
|
|
18
|
+
* (`payloadEvidenceKeys`) and the fan-out stage branch runner both parse
|
|
19
|
+
* through this function, so "a branch emitted structured data" means the same
|
|
20
|
+
* thing everywhere. A branch whose payload does not parse as a JSON object
|
|
21
|
+
* (free prose, a bare string, an array, ...) is not structured — callers treat
|
|
22
|
+
* that as a dead/schema-invalid branch rather than guessing at fields.
|
|
23
|
+
*/
|
|
24
|
+
export declare function parseJsonObjectPayload(payload: string): Record<string, unknown> | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Evidence keys present in a payload. A key is "present" only when it carries a
|
|
27
|
+
* *machine-checkable* value:
|
|
28
|
+
*
|
|
29
|
+
* - a `key=value` token (the value must immediately follow `=`), or
|
|
30
|
+
* - a top-level key in a JSON object payload with a non-empty scalar value.
|
|
31
|
+
*
|
|
32
|
+
* The `=` (or JSON) requirement is deliberate: a free-prose `key: value` form
|
|
33
|
+
* would let ordinary English that merely mentions a required word satisfy the
|
|
34
|
+
* gate (e.g. "tests: all green, coverage: looks good"), defeating the point of
|
|
35
|
+
* requiring proof. So colon-prose does NOT count — agents must emit structured
|
|
36
|
+
* `key=value` pairs or a JSON object. Matching is case-sensitive on the key.
|
|
37
|
+
*/
|
|
38
|
+
export declare function payloadEvidenceKeys(payload: string): Set<string>;
|
|
39
|
+
/** Required evidence keys absent from the payload, in declaration order. */
|
|
40
|
+
export declare function missingEvidence(requires: string[], payload: string): string[];
|
|
14
41
|
export declare function invalidEvent(emittedTopic: string, allowedEvents: string[], parallelEnabled: boolean, completionEvent: string): boolean;
|
|
15
42
|
export declare function parallelDispatchBase(topic: string): string;
|
|
16
43
|
export declare function parallelJoinedTopic(topic: string): string;
|